From 44f9f8f9fa84b18a6dc1628b386ed0db295553e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Pocrnji=C4=8D?= Date: Thu, 20 Nov 2025 18:04:33 +0100 Subject: [PATCH] Option to edit contract metadata --- app/Http/Controllers/ClientCaseContoller.php | 15 ++ .../Partials/ContractMetaPatchDialogForm.vue | 211 ++++++++++++++++++ .../js/Pages/Cases/Partials/ContractTable.vue | 71 ++++-- routes/web.php | 1 + 4 files changed, 285 insertions(+), 13 deletions(-) create mode 100644 resources/js/Pages/Cases/Partials/ContractMetaPatchDialogForm.vue diff --git a/app/Http/Controllers/ClientCaseContoller.php b/app/Http/Controllers/ClientCaseContoller.php index fd8f004..c1f73af 100644 --- a/app/Http/Controllers/ClientCaseContoller.php +++ b/app/Http/Controllers/ClientCaseContoller.php @@ -396,6 +396,21 @@ public function updateContractSegment(ClientCase $clientCase, string $uuid, Requ return back()->with('success', 'Contract segment updated.'); } + public function patchContractMeta(ClientCase $clientCase, string $uuid, Request $request) + { + $validated = $request->validate([ + 'meta' => ['required', 'array'], + ]); + + $contract = $clientCase->contracts()->where('uuid', $uuid)->firstOrFail(); + + $contract->update([ + 'meta' => $validated['meta'], + ]); + + return back()->with('success', __('Meta podatki so bili posodobljeni.')); + } + public function attachSegment(ClientCase $clientCase, Request $request) { $validated = $request->validate([ diff --git a/resources/js/Pages/Cases/Partials/ContractMetaPatchDialogForm.vue b/resources/js/Pages/Cases/Partials/ContractMetaPatchDialogForm.vue new file mode 100644 index 0000000..b49b00e --- /dev/null +++ b/resources/js/Pages/Cases/Partials/ContractMetaPatchDialogForm.vue @@ -0,0 +1,211 @@ + + + diff --git a/resources/js/Pages/Cases/Partials/ContractTable.vue b/resources/js/Pages/Cases/Partials/ContractTable.vue index 6145a63..075f759 100644 --- a/resources/js/Pages/Cases/Partials/ContractTable.vue +++ b/resources/js/Pages/Cases/Partials/ContractTable.vue @@ -11,6 +11,7 @@ import Dropdown from "@/Components/Dropdown.vue"; import CaseObjectCreateDialog from "./CaseObjectCreateDialog.vue"; import CaseObjectsDialog from "./CaseObjectsDialog.vue"; import PaymentDialog from "./PaymentDialog.vue"; +import ContractMetaPatchDialogForm from "./ContractMetaPatchDialogForm.vue"; import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; import ViewPaymentsDialog from "./ViewPaymentsDialog.vue"; import { @@ -445,6 +446,18 @@ const closePaymentsDialog = () => { showPaymentsDialog.value = false; selectedContract.value = null; }; + +// Meta edit dialog state +const showMetaDialog = ref(false); +const metaContract = ref(null); +const openMetaDialog = (c) => { + metaContract.value = c; + showMetaDialog.value = true; +}; +const closeMetaDialog = () => { + showMetaDialog.value = false; + metaContract.value = null; +}; @@ -1160,4 +1197,12 @@ const closePaymentsDialog = () => { + + + diff --git a/routes/web.php b/routes/web.php index c86b65b..4baee4b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -331,6 +331,7 @@ Route::middleware('permission:contract-edit')->group(function () { Route::post('client-cases/{client_case:uuid}/contract', [ClientCaseContoller::class, 'storeContract'])->name('clientCase.contract.store'); Route::put('client-cases/{client_case:uuid}/contract/{uuid}', [ClientCaseContoller::class, 'updateContract'])->name('clientCase.contract.update'); + Route::patch('client-cases/{client_case:uuid}/contract/{uuid}/meta', [ClientCaseContoller::class, 'patchContractMeta'])->name('clientCase.contract.patchMeta'); Route::delete('client-cases/{client_case:uuid}/contract/{uuid}', [ClientCaseContoller::class, 'deleteContract'])->name('clientCase.contract.delete'); });