Fixed things for WarehouseOrder
This commit is contained in:
@@ -373,24 +373,21 @@ $appendToBody
|
||||
}
|
||||
|
||||
protected function uploadFileAction() {
|
||||
if (!isset($_FILES['file']) || $_FILES['file']['error'] !== UPLOAD_ERR_OK) {
|
||||
self::returnJson(['error' => 'No file uploaded or upload error occurred']);
|
||||
return;
|
||||
}
|
||||
$file = $_FILES['file'] ?? null;
|
||||
|
||||
$_FILES = ['WarehouseOrder' => $_FILES['file']];
|
||||
if (!$file || $file['error'] !== UPLOAD_ERR_OK) {
|
||||
self::returnJson(['error' => 'File upload failed']);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
$file = mfUpload::handleFormUpload("WarehouseOrder", false, "/WarehouseOrder");
|
||||
|
||||
// Return the file ID
|
||||
self::returnJson(['success' => true, 'fileId' => $file->id]);
|
||||
} catch (Exception $ex) {
|
||||
self::returnJson(['error' => 'Error uploading file: ' . $ex->getMessage()]);
|
||||
$uploaded = mfUpload::handleFormUpload("file", false, "/WarehouseOrder");
|
||||
self::returnJson(['success' => true, 'fileId' => $uploaded->id]);
|
||||
} catch (Exception $e) {
|
||||
self::returnJson(['error' => 'Upload error: ' . $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected function getLogByIdAction() {
|
||||
$orderId = $this->request->id;
|
||||
if (empty($orderId)) {
|
||||
@@ -402,33 +399,42 @@ $appendToBody
|
||||
self::returnJson($log);
|
||||
}
|
||||
|
||||
|
||||
protected function afterUpdate($postData) {
|
||||
$this->updateOrderRequestLinkedOrderIds($postData['id']);
|
||||
}
|
||||
|
||||
protected function afterCreate($postData) {
|
||||
$this->updateOrderRequestLinkedOrderIds($postData['id']);
|
||||
$this->updateLinkedOrders($postData['id'], 'add');
|
||||
}
|
||||
protected function updateOrderRequestLinkedOrderIds($id) {
|
||||
$order = (array) WarehouseOrderModel::get($id);
|
||||
foreach (json_decode($order['positions'], true) as $position) {
|
||||
if (!empty($position['linkedOrderRequestId'])) {
|
||||
$warehouseOrderRequest = (array) WarehouseOrderRequestModel::get($position['linkedOrderRequestId']);
|
||||
if (is_null($warehouseOrderRequest['linkedOrderIds'])) {
|
||||
$warehouseOrderRequest['linkedOrderIds'] = [$id];
|
||||
WarehouseOrderRequestModel::update($warehouseOrderRequest);
|
||||
} else {
|
||||
if (!in_array($id, $warehouseOrderRequest['linkedOrderIds'])) {
|
||||
$warehouseOrderRequest['linkedOrderIds'][] = $id;
|
||||
WarehouseOrderRequestModel::update($warehouseOrderRequest);
|
||||
}
|
||||
}
|
||||
|
||||
protected function beforeDelete($postData): bool {
|
||||
$this->updateLinkedOrders($postData['id'], 'remove');
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function updateLinkedOrders($orderId, $action) {
|
||||
$order = (array) WarehouseOrderModel::get($orderId);
|
||||
$requestIds = array_unique(array_filter(array_column(
|
||||
json_decode($order['positions'], true) ?: [],
|
||||
'linkedOrderRequestId'
|
||||
)));
|
||||
|
||||
foreach ($requestIds as $requestId) {
|
||||
$request = (array) WarehouseOrderRequestModel::get($requestId);
|
||||
$linkedIds = $request['linkedOrderIds'] ? json_decode($request['linkedOrderIds'], true) : [];
|
||||
|
||||
if ($action === 'add' && !in_array($orderId, $linkedIds)) {
|
||||
$linkedIds[] = $orderId;
|
||||
} elseif ($action === 'remove') {
|
||||
$index = array_search($orderId, $linkedIds);
|
||||
if ($index !== false) {
|
||||
unset($linkedIds[$index]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request['linkedOrderIds'] !== $linkedIds) {
|
||||
$request['linkedOrderIds'] = $linkedIds;
|
||||
WarehouseOrderRequestModel::update($request);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -251,6 +251,10 @@ class TTCrud extends mfBaseController {
|
||||
|
||||
$affectedRows = $this->model::delete($this->postData['id']);
|
||||
|
||||
if (method_exists($this, 'afterDelete')) {
|
||||
$this->afterDelete($this->postData);
|
||||
}
|
||||
|
||||
self::returnJson(['success' => $affectedRows > 0,
|
||||
'message' => $affectedRows > 0 ? $this->infoMessages['delete'] : $this->infoMessages['noChanges']]);
|
||||
}
|
||||
@@ -291,7 +295,7 @@ class TTCrud extends mfBaseController {
|
||||
}
|
||||
|
||||
$data = (array) $this->model::get($id);
|
||||
if (method_exists($this, 'getByIdParse') && !isset($_GET['disableParse'])) $data = $this->getByIdParse($data);
|
||||
if (!empty($data) && method_exists($this, 'getByIdParse') && !isset($_GET['disableParse'])) $data = $this->getByIdParse($data);
|
||||
self::returnJson($data);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
class TTCrudBaseModel {
|
||||
public function __construct($data = []) {
|
||||
if (empty($data)) return;
|
||||
foreach ($data as $field => $value) {
|
||||
if (property_exists(get_called_class(), $field)) {
|
||||
$this->$field = $value;
|
||||
|
||||
@@ -14,6 +14,7 @@ Vue.component('change-status-modal', {
|
||||
sendEmail: false,
|
||||
sendEmailViewedPDF: false,
|
||||
sendEmailMail: '',
|
||||
submitLoading: false
|
||||
};
|
||||
},
|
||||
async mounted() {
|
||||
@@ -24,8 +25,6 @@ Vue.component('change-status-modal', {
|
||||
window.notify('error', 'Bestellung wurde storniert');
|
||||
}
|
||||
this.order = response.data;
|
||||
|
||||
|
||||
},
|
||||
computed: {
|
||||
availableStatuses() {
|
||||
@@ -107,11 +106,14 @@ Vue.component('change-status-modal', {
|
||||
},
|
||||
removeFile: index => this.uploadedFiles.splice(index, 1),
|
||||
async submit() {
|
||||
this.submitLoading = true;
|
||||
if (this.newStatus === 'accepted' && this.sendEmail && !this.sendEmailMail) {
|
||||
window.notify('error', 'Bitte geben Sie eine E-Mail-Adresse ein');
|
||||
this.submitLoading = false;
|
||||
return;
|
||||
} else if (this.newStatus === 'accepted' && this.sendEmail && !this.sendEmailViewedPDF) {
|
||||
window.notify('error', 'Bitte öffnen Sie das PDF bevor Sie die E-Mail senden');
|
||||
this.submitLoading = false;
|
||||
return;
|
||||
} else if (this.newStatus === 'accepted' && this.sendEmail && this.sendEmailMail) {
|
||||
if (this.order.sendShippingNote > 0) {
|
||||
@@ -135,6 +137,7 @@ Vue.component('change-status-modal', {
|
||||
window.notify('error',
|
||||
response.data.errors ? Object.values(response.data.errors).join('<br>') : response.data.message || 'Ein Fehler ist aufgetreten');
|
||||
}
|
||||
this.submitLoading = false;
|
||||
},
|
||||
async generateShippingNote() {
|
||||
const positions = this.order.positions.map(position => ({
|
||||
@@ -171,7 +174,7 @@ Vue.component('change-status-modal', {
|
||||
}
|
||||
},
|
||||
template: `
|
||||
<tt-modal :show="true" @submit="submit" @update:show="$emit('close')" title="Status ändern">
|
||||
<tt-modal :show="true" @submit="submit" @update:show="$emit('close')" title="Status ändern" :save-loading="submitLoading">
|
||||
<tt-loader :absolute="false" v-if="!order"/>
|
||||
<template v-else>
|
||||
<tt-select label="Neuer Status" v-model="newStatus" :options="availableStatuses" sm row/>
|
||||
@@ -199,7 +202,7 @@ Vue.component('change-status-modal', {
|
||||
</div>
|
||||
|
||||
|
||||
<tt-textarea label="Bemerkung*" v-model="note" sm/>
|
||||
<tt-textarea label="Bemerkung" v-model="note" sm/>
|
||||
|
||||
<div v-if="newStatus === 'partiallyDelivered' || newStatus === 'fullyDelivered'">
|
||||
<h4>Positionen</h4>
|
||||
@@ -256,7 +259,7 @@ Vue.component('warehouse-order-modal', {
|
||||
<tt-modal :show="true"
|
||||
@submit="submit"
|
||||
@delete="deleteOrder"
|
||||
:delete="id !== 'create'"
|
||||
:delete="false"
|
||||
:title="id === 'create' ? 'Bestellung erstellen' : \`Bestellung #\${id} bearbeiten\`"
|
||||
@update:show="$emit('close')">
|
||||
<div style="width: 99%">
|
||||
@@ -550,7 +553,7 @@ Vue.component('warehouse-order', {
|
||||
<tt-table-crud emit-edit
|
||||
@openpdf="openPDF"
|
||||
@changeStatus="changeStatusModalId = $event.id"
|
||||
@edit="orderModalId = $event.id" ref="table">
|
||||
@edit="orderModalId = $event.id; $refs.table.$refs.table.refreshTable()" ref="table">
|
||||
<template v-slot:expandedRow="{ row }">
|
||||
<warehouse-order-detail :id="row.id"/>
|
||||
</template>
|
||||
@@ -566,9 +569,12 @@ Vue.component('warehouse-order', {
|
||||
if (JSON.parse(localStorage.getItem('WarehouseOrder_create'))) this.orderModalId = 'create';
|
||||
},
|
||||
methods: {
|
||||
closeModal() {
|
||||
async closeModal() {
|
||||
console.log("hi");
|
||||
this.orderModalId = null;
|
||||
this.changeStatusModalId = null;
|
||||
console.log("hi");
|
||||
await new Promise(resolve => setTimeout(resolve, 250));
|
||||
this.$refs.table.$refs.table.refreshTable();
|
||||
},
|
||||
calculateSum: positions => positions.reduce((sum, {amount, buyPrice}) => sum + amount * buyPrice, 0),
|
||||
|
||||
@@ -164,8 +164,7 @@ Vue.component('linked-order-status', {
|
||||
//language=Vue
|
||||
template: `
|
||||
<div>
|
||||
<span v-for="order in orders"
|
||||
:key="order.id"
|
||||
<span v-for="(order, index) in orders" :key="order.id" :class="{ 'mt-1': index > 0 }"
|
||||
class="badge badge-pill badge-primary mr-1">{{ order.orderNumber }} - {{ statusTranslations[order.status] }}</span>
|
||||
</div>`
|
||||
});
|
||||
|
||||
@@ -5,6 +5,7 @@ Vue.component('tt-modal', {
|
||||
delete: {type: Boolean, default: true},
|
||||
deleteText: {type: String, default: 'Löschen'},
|
||||
save: {type: Boolean, default: true},
|
||||
saveLoading: {type: Boolean, default: false},
|
||||
saveText: {type: String, default: 'Speichern'},
|
||||
}, watch: {
|
||||
show(newVal) {
|
||||
|
||||
Reference in New Issue
Block a user