110 lines
4.8 KiB
PHP
110 lines
4.8 KiB
PHP
<?php
|
|
//TODO: enable switching distributors in the order preview
|
|
|
|
class WarehouseOrderController extends TTCrud {
|
|
protected string $headerTitle = 'Lieferantenbestellungen';
|
|
protected bool $createText = false;
|
|
|
|
protected array $columns = [
|
|
['key' => 'id', 'text' => 'ID', 'modal' => false],
|
|
['key' => 'distributorId', 'text' => 'Lieferant', 'required' => true, 'type' => 'autocomplete','table' => ['class' => 'text-nowrap', 'filter' => 'autocomplete'],'modal' => [
|
|
'apiUrl' => 'WarehouseDistributor/autocomplete','items' => 'WarehouseDistributor/autocomplete', 'type' => 'autocomplete']],
|
|
['key' => 'extRef', 'text' => 'Externe Referenz', 'required' => false],
|
|
['key' => 'intRef', 'text' => 'Interne Referenz', 'required' => false],
|
|
['key' => 'status', 'text' => 'Status', 'required' => true, 'modal' => ['type' => 'select', 'items' => [
|
|
['value' => 'new', 'text' => 'Neu'],
|
|
['value' => 'accepted', 'text' => 'An Lieferant übergeben'],
|
|
['value' => 'sent', 'text' => 'Gesendet'],
|
|
['value' => 'done', 'text' => 'Erledigt'],
|
|
]]],
|
|
['key' => 'trackingNumber', 'text' => 'Trackingnummer', 'required' => false],
|
|
['key' => 'sum', 'text' => 'Summe', 'required' => true, 'modal' => false, 'table' => ['filter' => 'numberRange']],
|
|
['key' => 'create', 'text' => 'Erstellt', 'required' => true, 'modal' => false, 'filter' => 'datetime'],
|
|
['key' => 'createBy', 'text' => 'Erstellt von', 'required' => true, 'table' => ['filter' => 'select'], 'modal' => ['type' => 'select', 'items' => []]],
|
|
['key' => 'actions', 'text' => 'Aktionen', 'required' => false, 'modal' => false, 'table' => ['filter' => false, 'sortable' => false, 'class' => 'text-center']],
|
|
];
|
|
|
|
protected array $additionalActions = [['key' => 'openHistory', 'title' => 'Historie', 'class' => 'fas fa-history text-primary']];
|
|
|
|
protected array $infoMessages = ['create' => 'Bestellung wurde erfolgreich erstellt.',
|
|
'update' => 'Bestellung wurde aktualisiert.',
|
|
'delete' => 'Bestellung wurde gelöscht',
|
|
'noChanges' => 'Keine Änderungen',];
|
|
|
|
public function permissionCheck(): bool {
|
|
return $this->user->can(["WarehouseEShop"]);
|
|
}
|
|
|
|
protected function prepareCrudConfig() {
|
|
// Fill Users in createBy column
|
|
$column = array_search('createBy', array_column($this->columns, 'key'));
|
|
$this->columns[$column]['modal']['items'] = array_map(function ($user) {
|
|
return ['value' => intval($user->id), 'text' => $user->name];
|
|
}, UserModel::search());
|
|
|
|
}
|
|
|
|
protected function createOrderAction() {
|
|
ini_set('display_errors', 1);
|
|
ini_set('display_startup_errors', 1);
|
|
error_reporting(E_ALL);
|
|
|
|
$json = json_decode(file_get_contents('php://input'), true);
|
|
$orders = $json;
|
|
$orderIds = [];
|
|
|
|
foreach ($orders as $order) {
|
|
$distributor = $order['distributor'][0];
|
|
$orderAmount = $order['orderAmount'];
|
|
$orders = $order['orders'];
|
|
|
|
$order = [
|
|
'distributorId' => $distributor['id'],
|
|
'extRef' => null,
|
|
'status' => 'new',
|
|
'trackingNumber' => null,
|
|
'sum' => $orderAmount,
|
|
'create' => time(),
|
|
'createBy' => $this->user->id,
|
|
];
|
|
|
|
$orderId = WarehouseOrderModel::create($order);
|
|
$orderIds[] = $orderId;
|
|
|
|
foreach ($orders as $orderItem) {
|
|
$article = WarehouseArticleModel::get($orderItem['articleId']);
|
|
|
|
WarehouseEShopOrderItemModel::create([
|
|
'orderId' => $orderId,
|
|
'articleId' => $orderItem['articleId'],
|
|
'quantity' => $orderItem['amount'],
|
|
'price' => $article->cheapestPurchasePrice,
|
|
]);
|
|
}
|
|
}
|
|
|
|
self::returnJson(['success' => true, 'message' => $this->infoMessages['create'], 'ids' => $orderIds]);
|
|
}
|
|
|
|
protected function getOrderItemsAction() {
|
|
$orderItems = WarehouseEShopOrderItemModel::getAll(['orderId' => $this->request->id]);
|
|
|
|
// also get the article name of the order items
|
|
|
|
foreach ($orderItems as $key => $orderItem) {
|
|
$article = WarehouseArticleModel::get($orderItem->articleId);
|
|
$orderItem->articleName = $article->title;
|
|
}
|
|
|
|
self::returnJson($orderItems);
|
|
}
|
|
|
|
protected function beforeUpdate($postData): bool {
|
|
(new WarehouseHistoryController)->create($postData, $this->mod);
|
|
return true;
|
|
}
|
|
|
|
protected function getHistoryAction() {
|
|
self::returnJson((new WarehouseHistoryController)->getHistory($this->request->id, $this->mod, $this->columns));
|
|
}
|
|
} |