improved new warehouse stuff

This commit is contained in:
Luca Haid
2025-07-14 10:27:53 +02:00
parent 0ef289c828
commit 73ff3003fd
6 changed files with 698 additions and 504 deletions

View File

@@ -6,7 +6,7 @@ class WarehouseOfferModel extends TTCrudBaseModel {
public string $reference;
public string $customerNumber;
public string $customerName;
public string $contactPerson;
public ?string $contactPerson;
public string $customerStreet;
public string $customerCity;
public string $customerZip;

View File

@@ -345,31 +345,80 @@ $appendToBody
return;
}
$order = WarehouseOrderModel::get($postData['orderId']);
$orderAsArray = (array) $order;
$fullLogMessage = '';
// 1. Status change message
if ($postData['status'] !== 'noChanges') {
$statusColumn = array_values(array_filter($this->columns, fn($c) => $c['key'] === 'status'))[0]['modal']['items'];
$oldStatusKey = array_search($order->status, array_column($statusColumn, 'value'));
$newStatusKey = array_search($postData['status'], array_column($statusColumn, 'value'));
$oldStatusText = ($oldStatusKey !== false) ? $statusColumn[$oldStatusKey]['text'] : $order->status;
$newStatusText = ($newStatusKey !== false) ? $statusColumn[$newStatusKey]['text'] : $postData['status'];
$fullLogMessage .= 'Status wurde geändert von ' . $oldStatusText . ' auf ' . $newStatusText . '.';
}
// 2. Main note from user
if (!empty($postData['note'])) {
$fullLogMessage .= ($fullLogMessage ? "\n\n" : "") . $postData['note'];
}
// 3. Handle delivery data if present
if (isset($postData['deliveryData']) && is_array($postData['deliveryData'])) {
$deliveryDetails = [];
foreach ($postData['deliveryData'] as $delivery) {
$orderedAmount = floatval($delivery['orderedAmount']);
$deliveredAmount = floatval($delivery['amount']);
$articleName = $delivery['articleName'];
// Only log if there's a discrepancy
if ($deliveredAmount < $orderedAmount) {
$reasonText = !empty($delivery['reason']) ? " Grund: " . $delivery['reason'] . "." : "";
$discrepancyMessage = "Artikel '$articleName': {$deliveredAmount} von {$orderedAmount} Stk. geliefert.{$reasonText}";
if (isset($delivery['cancelRest']) && $delivery['cancelRest']) {
$remaining = $orderedAmount - $deliveredAmount;
$discrepancyMessage .= " Restliche {$remaining} Stk. storniert.";
}
$deliveryDetails[] = $discrepancyMessage;
}
}
if (!empty($deliveryDetails)) {
$fullLogMessage .= ($fullLogMessage ? "\n\n" : "") . "Lieferdetails:\n- " . implode("\n- ", $deliveryDetails);
}
}
$log = [
"table" => "WarehouseOrder",
"rowId" => intval($postData['orderId']),
"type" => $postData['status'] === 'noChanges' ? 'noChanges' : 'statusChange',
"fileIds" => $postData['fileIds'] ?? null,
"message" => $postData['note'] ?? null,
"message" => trim($fullLogMessage),
"createBy" => intval($this->user->id),
"create" => time()
];
try {
$order = WarehouseOrderModel::get($log['rowId']);
if ($postData['status'] !== 'noChanges') {
$oldStatusText = array_values(array_filter($this->columns, fn($c) => $c['key'] === 'status'))[0]['modal']['items'][array_search($order->status, array_column(array_values(array_filter($this->columns, fn($c) => $c['key'] === 'status'))[0]['modal']['items'], 'value'))]['text'];
$newStatusText = array_values(array_filter($this->columns, fn($c) => $c['key'] === 'status'))[0]['modal']['items'][array_search($postData['status'], array_column(array_values(array_filter($this->columns, fn($c) => $c['key'] === 'status'))[0]['modal']['items'], 'value'))]['text'];
$log['message'] = 'Status wurde geändert von ' . $oldStatusText . ' auf ' . $newStatusText . ($log['message'] ? ': ' . $log['message'] : '');
$order->status = $postData['status'];
$order = (array) $order;
WarehouseOrderModel::update($order);
$orderAsArray['status'] = $postData['status'];
WarehouseOrderModel::update($orderAsArray);
}
WarehouseLogModel::create($log);
self::returnJson(['success' => 'Log entry created']);
// Only create a log entry if there's actually something to log
if ($postData['status'] !== 'noChanges' || !empty($log['message']) || !empty($log['fileIds'])) {
WarehouseLogModel::create($log);
}
self::returnJson(['success' => true, 'message' => 'Log entry created']);
} catch (Exception $e) {
self::returnJson(['error' => 'Error creating log entry']);
self::returnJson(['error' => 'Error creating log entry: ' . $e->getMessage()]);
}
}