Classe methods: remove reducdancy
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/DocumentNumberManager.php';
|
||||
require_once __DIR__ . '/WarehouseManager.php';
|
||||
require_once __DIR__ . '/../classes_ac/PostingWindowGuard.php';
|
||||
|
||||
/**
|
||||
@@ -97,7 +98,7 @@ class PurchaseOrderManager {
|
||||
}
|
||||
if (!$has_any_stock_in) return 0;
|
||||
|
||||
$tables = $this->getStockTables();
|
||||
$tables = (new WarehouseManager($this->pdo, $this->company_id))->getStockTables();
|
||||
|
||||
$total = 0;
|
||||
$pending = 0;
|
||||
@@ -149,20 +150,6 @@ class PurchaseOrderManager {
|
||||
return 'td_stock_' . $warehouse_id;
|
||||
}
|
||||
|
||||
private function getStockTables(): array
|
||||
{
|
||||
$sth = $this->pdo->prepare(
|
||||
"SELECT t.table_name
|
||||
FROM md_warehouse w
|
||||
JOIN information_schema.tables t
|
||||
ON t.table_schema = DATABASE()
|
||||
AND t.table_name = CONCAT('td_stock_', w.id)
|
||||
WHERE w.company_id = :company_id"
|
||||
);
|
||||
$sth->execute([':company_id' => $this->company_id]);
|
||||
return $sth->fetchAll(PDO::FETCH_COLUMN);
|
||||
}
|
||||
|
||||
private function syncPoItems(int $po_id, array $items): void
|
||||
{
|
||||
$this->pdo->prepare(
|
||||
@@ -563,6 +550,22 @@ class PurchaseOrderManager {
|
||||
$stock = new StockManager($this->pdo, $this->company_id);
|
||||
$whMgmt = new WarehouseManager($this->pdo, $this->company_id);
|
||||
|
||||
// Validate all warehouse IDs in one query before entering the item loop.
|
||||
$recvWarehouseIds = array_values(array_unique(array_filter(
|
||||
array_map(fn($recv) => (int)($recv['warehouse_id'] ?? $po['warehouse_id']), $receive_items),
|
||||
fn($id) => $id > 0
|
||||
)));
|
||||
if (!empty($recvWarehouseIds)) {
|
||||
$placeholders = implode(',', array_fill(0, count($recvWarehouseIds), '?'));
|
||||
$sth = $this->pdo->prepare(
|
||||
"SELECT id FROM md_warehouse WHERE company_id = ? AND id IN ($placeholders)"
|
||||
);
|
||||
$sth->execute([$this->company_id, ...$recvWarehouseIds]);
|
||||
$validWarehouseIds = array_flip($sth->fetchAll(PDO::FETCH_COLUMN));
|
||||
} else {
|
||||
$validWarehouseIds = [];
|
||||
}
|
||||
|
||||
foreach ($receive_items as $j => $recv) {
|
||||
$item_id = (int)($recv['item_id'] ?? -1);
|
||||
$product_sku = $recv['product_sku'] ?? '';
|
||||
@@ -632,7 +635,10 @@ class PurchaseOrderManager {
|
||||
// saveStockIn() does not write source/source_id — stamp them here.
|
||||
// This links the stock-in row back to this PO for cancellation guards
|
||||
// and makes it appear under the "PO" source tab on the Stock In list.
|
||||
$table = $this->stockTableNameFromWarehouseId($warehouse_id);
|
||||
if (!isset($validWarehouseIds[$warehouse_id])) {
|
||||
throw new Exception("Warehouse ID {$warehouse_id} not found.");
|
||||
}
|
||||
$table = 'td_stock_' . $warehouse_id;
|
||||
$this->pdo->prepare(
|
||||
"UPDATE `{$table}` SET source = 'po', source_id = :po_id
|
||||
WHERE id = :id AND company_id = :company_id"
|
||||
@@ -746,7 +752,8 @@ class PurchaseOrderManager {
|
||||
if ($status === -1) throw new Exception("PO is already cancelled.");
|
||||
|
||||
// Guard: block if any approved stock-in rows exist for this PO
|
||||
$tables = $this->getStockTables();
|
||||
$whMgmt = new WarehouseManager($this->pdo, $this->company_id);
|
||||
$tables = $whMgmt->getStockTables();
|
||||
|
||||
foreach ($tables as $table) {
|
||||
$sth = $this->pdo->prepare(
|
||||
@@ -765,8 +772,6 @@ class PurchaseOrderManager {
|
||||
}
|
||||
}
|
||||
|
||||
$whMgmt = new WarehouseManager($this->pdo, $this->company_id);
|
||||
|
||||
// Soft-delete draft stock-in rows and release their bin reservations.
|
||||
foreach ($tables as $table) {
|
||||
if (!preg_match('/^td_stock_(\d+)$/', $table, $m)) {
|
||||
@@ -887,7 +892,8 @@ class PurchaseOrderManager {
|
||||
throw new Exception('Cannot delete — this PO has linked supplier returns. Delete or cancel the returns first.');
|
||||
}
|
||||
|
||||
$tables = $this->getStockTables();
|
||||
$whMgmt = new WarehouseManager($this->pdo, $this->company_id);
|
||||
$tables = $whMgmt->getStockTables();
|
||||
|
||||
foreach ($tables as $table) {
|
||||
$sth5 = $this->pdo->prepare(
|
||||
@@ -901,7 +907,6 @@ class PurchaseOrderManager {
|
||||
}
|
||||
|
||||
// Release bins from draft stock-in rows and negate them
|
||||
$whMgmt = new WarehouseManager($this->pdo, $this->company_id);
|
||||
foreach ($tables as $table) {
|
||||
if (!preg_match('/^td_stock_(\d+)$/', (string)$table, $matches)) continue;
|
||||
$warehouse_id = (int)$matches[1];
|
||||
|
||||
Reference in New Issue
Block a user