accounting workflows
This commit is contained in:
@@ -244,6 +244,9 @@ class StockManager {
|
||||
$table_log[] = $logging;
|
||||
|
||||
if ($id > 0) {
|
||||
if ((int)($row['status'] ?? 0) === 1) {
|
||||
$whMgmt->assertStockMovementWindow($row['date'] ?? null, 'Stock-in edit');
|
||||
}
|
||||
|
||||
// Update: only metadata fields are editable after creation
|
||||
$this->pdo->prepare(
|
||||
@@ -357,6 +360,9 @@ class StockManager {
|
||||
$table_log[] = $logging;
|
||||
|
||||
if ($id > 0) {
|
||||
if ((int)($row['status'] ?? 0) === 1) {
|
||||
$whMgmt->assertStockMovementWindow($row['date'] ?? null, 'Stock-out edit');
|
||||
}
|
||||
|
||||
// Update: only metadata fields are editable after creation
|
||||
$this->pdo->prepare(
|
||||
@@ -500,6 +506,11 @@ class StockManager {
|
||||
throw new Exception("Paired destination record missing — data integrity issue.");
|
||||
}
|
||||
|
||||
if ((int)($from_row['status'] ?? 0) === 1 || (int)($to_row['status'] ?? 0) === 1) {
|
||||
$whMgmt->assertStockMovementWindow($from_row['date'] ?? null, 'Stock transfer edit');
|
||||
$whMgmt->assertStockMovementWindow($to_row['date'] ?? null, 'Stock transfer edit');
|
||||
}
|
||||
|
||||
$raw_from = $from_row['log'] ?? [];
|
||||
$from_log = is_array($raw_from) ? $raw_from : (json_decode($raw_from, true) ?: []);
|
||||
$from_log[] = $logging;
|
||||
@@ -695,6 +706,8 @@ class StockManager {
|
||||
throw new Exception('Already approved.');
|
||||
}
|
||||
|
||||
$whMgmt->assertStockMovementWindow($row['date'] ?? null, 'Stock approval');
|
||||
|
||||
// ── Approve this row ──────────────────────────────────────────────
|
||||
$this->pdo->prepare(
|
||||
"UPDATE `{$table}` SET status = 1 WHERE id = :id AND company_id = :company_id"
|
||||
@@ -710,7 +723,8 @@ class StockManager {
|
||||
$row['product_sku'],
|
||||
$id
|
||||
);
|
||||
$whMgmt->adjustBalance('in', $warehouse_id, $row['product_sku'], 0, (float)$row['in']);
|
||||
$whMgmt->adjustBalance('in', $warehouse_id, $row['product_sku'], 0, (float)$row['in'],
|
||||
$id, $row['source'] ?? '', (int)($row['source_id'] ?? 0));
|
||||
|
||||
} elseif ($type === 'out') {
|
||||
|
||||
@@ -723,7 +737,7 @@ class StockManager {
|
||||
ON out_rows.company_id = src.company_id
|
||||
AND out_rows.ref_id = src.id
|
||||
AND out_rows.`out` > 0
|
||||
AND out_rows.status != -1
|
||||
AND out_rows.status = 1
|
||||
WHERE src.id = :ref_id
|
||||
AND src.company_id = :company_id
|
||||
GROUP BY src.id, src.`in`"
|
||||
@@ -739,7 +753,8 @@ class StockManager {
|
||||
if ($remaining_qty <= 0.000001) {
|
||||
$whMgmt->releaseRack($warehouse_id, $row['zone'], $row['aisle'], $row['rack']);
|
||||
}
|
||||
$whMgmt->adjustBalance('out', $warehouse_id, $row['product_sku'], 0, (float)$row['out']);
|
||||
$whMgmt->adjustBalance('out', $warehouse_id, $row['product_sku'], 0, (float)$row['out'],
|
||||
$id, $row['source'] ?? '', (int)($row['source_id'] ?? 0));
|
||||
|
||||
} elseif ($type === 'transfer') {
|
||||
|
||||
@@ -791,6 +806,13 @@ class StockManager {
|
||||
$from_row = $row;
|
||||
}
|
||||
|
||||
if ($from_row) {
|
||||
$whMgmt->assertStockMovementWindow($from_row['date'] ?? null, 'Stock transfer approval');
|
||||
}
|
||||
if ($inbound_row) {
|
||||
$whMgmt->assertStockMovementWindow($inbound_row['date'] ?? null, 'Stock transfer approval');
|
||||
}
|
||||
|
||||
// Approve outbound row
|
||||
if ($from_row && (int)$from_row['status'] === 0) {
|
||||
$this->pdo->prepare(
|
||||
@@ -813,7 +835,8 @@ class StockManager {
|
||||
$from_wh_id,
|
||||
$from_row['zone'], $from_row['aisle'], $from_row['rack']
|
||||
);
|
||||
$whMgmt->adjustBalance('out', $from_wh_id, $from_row['product_sku'], 0, (float)$from_row['out']);
|
||||
$whMgmt->adjustBalance('out', $from_wh_id, $from_row['product_sku'], 0, (float)$from_row['out'],
|
||||
(int)$from_row['id'], $from_row['source'] ?? '', (int)($from_row['source_id'] ?? 0));
|
||||
}
|
||||
if ($inbound_row && $paired_wh_id) {
|
||||
$whMgmt->occupyRack(
|
||||
@@ -822,7 +845,8 @@ class StockManager {
|
||||
$inbound_row['product_sku'],
|
||||
$inbound_row['id']
|
||||
);
|
||||
$whMgmt->adjustBalance('in', $paired_wh_id, $inbound_row['product_sku'], 0, (float)$inbound_row['in']);
|
||||
$whMgmt->adjustBalance('in', $paired_wh_id, $inbound_row['product_sku'], 0, (float)$inbound_row['in'],
|
||||
(int)$inbound_row['id'], $inbound_row['source'] ?? '', (int)($inbound_row['source_id'] ?? 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user