getStockContext($warehouse_id, $id); $row = $warehouse['row'] ?? []; $table = $warehouse['table']; // Append this edit/create event to td_stock_.log (stock record history) $table_log = json_decode($row['log'] ?? '[]', true); $table_log[] = $logging; if ($id > 0) { // UPDATE existing stock_in record $sql = "UPDATE `$table` SET `contact_id` = :contact_id, `description` = :description, `log` = :log WHERE id = :id AND company_id = :company_id"; $sth = $pdo->prepare($sql); $sth->execute([ ":id" => $id, ":company_id" => $company_id, ":contact_id" => (int)$data["contact_id"], ":description" => $data["description"], ":log" => json_encode($table_log), ]); } else { // INSERT new stock_in record $sql = "INSERT INTO `$table` (uuid, company_id, `date`, product_sku, `in`, zone, aisle, rack, contact_id, `description`, `log`, `type`) VALUES (:uuid, :company_id, :date, :product_sku, :quantity, :zone, :aisle, :rack, :contact_id, :description, :log, 'in')"; $sth = $pdo->prepare($sql); $sth->execute([ ":uuid" => $uuid, ":company_id" => $company_id, ":date" => date('Y-m-d H:i:s'), ":product_sku" => $data["product_sku"], ":quantity" => $data["quantity"], ":zone" => $data["zone"], ":aisle" => $data["aisle"], ":rack" => $data["rack"], ":contact_id" => (int)$data["contact_id"], ":description" => $data["description"], ":log" => json_encode($table_log), ]); // Grab the newly-generated ID to link the rack $td_stock_id = (int) $pdo->lastInsertId(); // Link the rack to this new stock record $whMgmt->occupyRack( $warehouse_id, $data['zone'], $data['aisle'], $data['rack'], $data['product_sku'], $td_stock_id ); // Balance adjustment handles both INSERT (delta = full qty) // and UPDATE (delta = new - old) via the same formula. $whMgmt->adjustBalance( 'in', $warehouse_id, $data["product_sku"], $row['in'] ?? 0, $data["quantity"] ); } }); $answer["success"] = 1; } catch (PDOException $e) { $answer["success"] = 0; $answer["message"] = "Database error, please try again"; http_response_code(500); } catch (Exception $e) { $answer["success"] = 0; $answer["message"] = $e->getMessage(); http_response_code(400); } exit(json_encode($answer)); ?>