added new features for warehouse order request

This commit is contained in:
Luca Haid
2025-01-28 10:49:39 +01:00
parent eed5539721
commit fc4201ff97
5 changed files with 114 additions and 8 deletions

View File

@@ -41,6 +41,7 @@ class WarehouseOrderRequestController extends TTCrud {
'table' => ['filter' => 'select'],
'modal' => ['type' => 'select', 'items' => []]],
['key' => 'warehouseLocation', 'text' => 'Lagerort', 'required' => false, 'type' => 'varchar'],
['key' => 'canceled', 'text' => 'Storniert', 'required' => false, 'modal' => ['visible' => false, 'type' => 'select', 'items' => [['value' => 0, 'text' => 'Nein'], ['value' => 1, 'text' => 'Ja']]], 'table' => ['filter' => 'select']],
['key' => 'note', 'text' => 'Notiz', 'required' => false, 'type' => 'textarea'],
['key' => 'actions',
'text' => 'Aktionen',
@@ -133,6 +134,38 @@ class WarehouseOrderRequestController extends TTCrud {
$email->send();
}
protected function cancelAction() {
$id = $this->request->id;
$cancel = $this->request->cancel;
if (!is_numeric($id) || !is_numeric($cancel)) {
self::returnJson(['error' => 'Invalid request']);
}
$order = (array) WarehouseOrderRequestModel::get($id);
if (empty($order)) {
self::returnJson(['error' => 'Order not found']);
}
// $cancel is either 0 for uncancelling or 1 for cancelling
if ($cancel == 1) {
$order['canceled'] = 1;
} else {
$order['canceled'] = 0;
}
$order['id'] = $id;
if (!WarehouseOrderRequestModel::update($order)) {
self::returnJson(['error' => 'Error updating order']);
}
self::returnJson(['success' => true, 'message' => 'Order updated']);
}
protected function getHistoryAction() {
$this->prepareCrudConfig();
self::returnJson((new WarehouseHistoryController)->getHistory($this->request->id, $this->mod, $this->columns));

View File

@@ -15,5 +15,6 @@ class WarehouseOrderRequestModel extends TTCrudBaseModel {
public ?string $warehouseLocation;
public ?string $note;
public ?int $canceled;
}

View File

@@ -0,0 +1,24 @@
<?php declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
final class WarehouseModify8 extends AbstractMigration
{
public function up(): void
{
if ($this->getEnvironment() == "thetool") {
$table = $this->table("WarehouseOrderRequest");
$table->addColumn("canceled", "integer", ["null" => false, "default" => 0]);
$table->save();;
}
}
public function down(): void
{
if ($this->getEnvironment() == "thetool") {
$table = $this->table("WarehouseOrderRequest");
$table->removeColumn("canceled");
$table->save();;
}
}
}

View File

@@ -1,21 +1,46 @@
window.localStorage.setItem('tt-table-WarehouseOrderRequest', JSON.stringify({
filters: {
takeOverBy: null
takeOverBy: null,
canceled: 0
}
}));
window.TT_CONFIG["CRUD_CONFIG"]["additionalActions"] = [
...window.TT_CONFIG["CRUD_CONFIG"]["additionalActions"],
{
"key": "cancel",
"title": "Bestellwunsch stornieren",
"class": "fas fa-times text-danger",
"condition": (row) => window.TT_CONFIG['WAREHOUSE_ADMIN'] === '1' && row.canceled === 0,
},
{
"key": "uncancel",
"title": "Bestellwunsch wiederherstellen",
"class": "fas fa-check text-success",
"condition": (row) => window.TT_CONFIG['WAREHOUSE_ADMIN'] === '1' && row.canceled === 1,
},
]
Vue.component('warehouse-order-request', {
//language=Vue
template: `
<tt-card>
<tt-table-crud @openHistory="historyModal = true; historyModalId = $event.id" ref="crud">
<tt-table-crud @openHistory="historyModal = true; historyModalId = $event.id"
@cancel="cancelOrderRequest($event, '1')"
@uncancel="cancelOrderRequest($event, '0')"
ref="crud">
<!-- <slot name="table-top-buttons"></slot> add checkbox "Ausgeblendete Bestellungen anzeigen-->
<template v-slot:table-top-buttons>
<div class="d-flex">
<tt-button @click="showHiddenRequests = !showHiddenRequests"
<tt-button
class="mr-2"
@click="showHiddenRequests = !showHiddenRequests"
:text="showHiddenRequests ? 'Erledigte Bestellungen ausblenden' : 'Erledigte Bestellungen anzeigen'"
:additional-class="showHiddenRequests ? 'btn-danger' : 'btn-primary'"/>
<tt-button @click="showCanceledRequests = !showCanceledRequests"
:text="showCanceledRequests ? 'Stornierte Bestellungen ausblenden' : 'Stornierte Bestellungen anzeigen'"
:additional-class="showCanceledRequests ? 'btn-danger' : 'btn-primary'"/>
</div>
</template>
@@ -41,13 +66,14 @@ Vue.component('warehouse-order-request', {
</tt-card>
`, data() {
return {
window: window, historyModal: false, historyModalId: null, showHiddenRequests: false
window: window, historyModal: false, historyModalId: null, showHiddenRequests: false, showCanceledRequests: false
}
},
async mounted() {
if (this.window.TT_CONFIG.WAREHOUSE_ADMIN !== '1') return
this.$refs.crud.$watch('crudModal', (value) => {
return
if (value) {
// if id is not 'create' then check if order is set and if not set it to current date
// if order is set then check if takeover is set and if not set it to current date
@@ -70,10 +96,32 @@ Vue.component('warehouse-order-request', {
}
})
},
methods: {
// portected function cancelAction() {
// $id = $this->request->id;
// $cancel = $this->request->cancel;
async cancelOrderRequest(row, cancel) {
if (!window.confirm('Bestellwunsch wirklich stornieren?')) return
const response = await axios.get(window.TT_CONFIG["BASE_PATH"] + '/WarehouseOrderRequest/cancel?id=' + row.id + '&cancel=' + cancel);
if (response.data.success) {
this.window.notify('success', response.data.message || 'Erfolgreich aktualisiert')
this.$refs.crud.$refs.table.refresh()
return
}
this.window.notify('error', response.data.message || 'Fehler beim aktualisieren')
}
},
watch: {
showHiddenRequests(value) {
// set filter data inside table takeOverBy to !NULL
async showHiddenRequests(value) {
this.showCanceledRequests = false
this.$refs.crud.$refs.table.$set(this.$refs.crud.$refs.table.filters, 'canceled', '')
this.$refs.crud.$refs.table.$set(this.$refs.crud.$refs.table.filters, 'takeOverBy', value ? '' : null)
},
async showCanceledRequests(value) {
this.showHiddenRequests = false
this.$refs.crud.$refs.table.$set(this.$refs.crud.$refs.table.filters, 'canceled', value ? '1' : '')
this.$refs.crud.$refs.table.$set(this.$refs.crud.$refs.table.filters, 'takeOverBy', '')
}
}
})

View File

@@ -20,10 +20,10 @@ Vue.component('tt-table-crud', {
:name="column.key.toLowerCase()" :row="row">
</slot>
<span v-else-if="column.modal?.type === 'select' && column.modal.items.find(item => item.value + '' === row[column.key] + '')">{{column.modal.items.find(item => item.value == row[column.key]).text}}</span>
<span v-else-if="column.modal?.type === 'select' && column.modal.items.find(item => item.value == row[column.key] + '')">{{column.modal.items.find(item => item.value == row[column.key]).text}}</span>
<span v-else-if="column.modal?.type === 'select' && row[column.key] !== null && row[column.key] !== undefined"
:data-all-items="JSON.stringify(column.modal.items)"
>Select not found for column {{column.key}} and value {{row[column.key]}}</span>
>Select not found for column {{column.key}} and value {{row[column.key]}} {{typeof row[column.key]}}</span>
</template>
<template v-slot:actions="{ row }">