From ee7fc637f1806877fc8a4836c38096acdb3c2d42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=BCnther?= Date: Wed, 11 Feb 2026 15:40:06 +0100 Subject: [PATCH] Invoices can be uploaded --- .../CostUnit/Controllers/CreateController.php | 5 +- .../DistanceAllowanceController.php | 20 ++ app/Domains/CostUnit/Routes/api.php | 12 +- app/Domains/CostUnit/Routes/web.php | 4 - app/Domains/Dashboard/Views/Dashboard.vue | 3 +- .../CreateInvoice/CreateInvoiceCommand.php | 63 ++++++ .../CreateInvoice/CreateInvoiceRequest.php | 64 ++++++ .../CreateInvoice/CreateInvoiceResponse.php | 15 ++ .../Controllers/NewInvoiceController.php | 138 ++++++++++++ app/Domains/Invoice/Routes/api.php | 25 +++ app/Domains/Invoice/Routes/web.php | 22 ++ app/Domains/Invoice/Views/CreateInvoice.vue | 29 --- app/Domains/Invoice/Views/NewInvoice.vue | 79 +++++++ .../newInvoice/expense-accounting.vue | 124 +++++++++++ .../Views/Partials/newInvoice/refund-data.vue | 157 ++++++++++++++ .../newInvoice/travel-expense-accounting.vue | 158 ++++++++++++++ app/Domains/UserManagement/Routes/web.php | 6 - app/Enumerations/InvoiceStatus.php | 20 ++ app/Enumerations/InvoiceType.php | 23 ++ app/Installer/ProductionDataSeeder.php | 37 ++++ app/Models/Invoice.php | 68 ++++++ app/Models/PageText.php | 9 + app/Models/User.php | 12 +- app/Providers/AuthCheckProvider.php | 7 +- app/Providers/FlashMessageProvider.php | 11 + app/Providers/GlobalDataProvider.php | 57 ++++- app/Providers/InertiaProvider.php | 5 - app/Providers/UploadFileProvider.php | 52 +++++ app/Repositories/CostUnitRepository.php | 19 +- app/Repositories/PageTextRepository.php | 19 ++ app/Repositories/UserRepository.php | 30 +++ app/Scopes/CommonController.php | 4 + app/ValueObjects/Amount.php | 4 + app/ValueObjects/InvoiceFile.php | 9 + app/Views/Components/IbanInput.vue | 56 +++++ app/Views/Components/InfoIcon.vue | 202 ++++++++++++++++++ app/Views/Components/NumericInput.vue | 17 ++ app/Views/Components/TextResource.vue | 29 +++ .../2026_01_30_140002_create_users_table.php | 1 + .../2026_01_30_140010_create_invoices.php | 68 ++++++ .../2026_01_30_140010_create_page_texts.php | 24 +++ public/css/invoices.css | 41 ++++ .../js/components/InvoiceUploadChecks.js | 23 ++ resources/js/components/ajaxHandler.js | 12 +- resources/js/layouts/AppLayout.vue | 18 +- resources/views/app.blade.php | 1 + routes/web.php | 16 ++ 47 files changed, 1751 insertions(+), 67 deletions(-) create mode 100644 app/Domains/CostUnit/Controllers/DistanceAllowanceController.php create mode 100644 app/Domains/Invoice/Actions/CreateInvoice/CreateInvoiceCommand.php create mode 100644 app/Domains/Invoice/Actions/CreateInvoice/CreateInvoiceRequest.php create mode 100644 app/Domains/Invoice/Actions/CreateInvoice/CreateInvoiceResponse.php create mode 100644 app/Domains/Invoice/Controllers/NewInvoiceController.php create mode 100644 app/Domains/Invoice/Routes/api.php create mode 100644 app/Domains/Invoice/Routes/web.php delete mode 100644 app/Domains/Invoice/Views/CreateInvoice.vue create mode 100644 app/Domains/Invoice/Views/NewInvoice.vue create mode 100644 app/Domains/Invoice/Views/Partials/newInvoice/expense-accounting.vue create mode 100644 app/Domains/Invoice/Views/Partials/newInvoice/refund-data.vue create mode 100644 app/Domains/Invoice/Views/Partials/newInvoice/travel-expense-accounting.vue create mode 100644 app/Enumerations/InvoiceStatus.php create mode 100644 app/Enumerations/InvoiceType.php create mode 100644 app/Models/Invoice.php create mode 100644 app/Models/PageText.php create mode 100644 app/Providers/FlashMessageProvider.php create mode 100644 app/Providers/UploadFileProvider.php create mode 100644 app/Repositories/PageTextRepository.php create mode 100644 app/ValueObjects/InvoiceFile.php create mode 100644 app/Views/Components/IbanInput.vue create mode 100644 app/Views/Components/InfoIcon.vue create mode 100644 app/Views/Components/NumericInput.vue create mode 100644 app/Views/Components/TextResource.vue create mode 100644 database/migrations/2026_01_30_140010_create_invoices.php create mode 100644 database/migrations/2026_01_30_140010_create_page_texts.php create mode 100644 public/css/invoices.css create mode 100644 resources/js/components/InvoiceUploadChecks.js diff --git a/app/Domains/CostUnit/Controllers/CreateController.php b/app/Domains/CostUnit/Controllers/CreateController.php index 8229fd4..d4c6dbe 100644 --- a/app/Domains/CostUnit/Controllers/CreateController.php +++ b/app/Domains/CostUnit/Controllers/CreateController.php @@ -6,6 +6,7 @@ use App\Domains\CostUnit\Actions\CreateCostUnit\CreateCostUnitCommand; use App\Domains\CostUnit\Actions\CreateCostUnit\CreateCostUnitRequest; use App\Enumerations\CostUnitType; use App\Models\CostUnit; +use App\Providers\FlashMessageProvider; use App\Providers\InertiaProvider; use App\Scopes\CommonController; use App\ValueObjects\Amount; @@ -23,12 +24,12 @@ class CreateController extends CommonController{ $request->get('cost_unit_name'), CostUnitType::COST_UNIT_TYPE_RUNNING_JOB, Amount::fromString($request->get('distance_allowance')), - $request->get('mail_on_new') + $request->get('mailOnNew') ); $createCostUnitCommand = new CreateCostUnitCommand($createCostUnitRequest); $result = $createCostUnitCommand->execute(); - session()->put('message', 'Die laufende Tätigkeit wurde erfolgreich angelegt.'); + new FlashMessageProvider('Die laufende Tätigkeit wurde erfolgreich angelegt.', 'success'); return response()->json([]); } diff --git a/app/Domains/CostUnit/Controllers/DistanceAllowanceController.php b/app/Domains/CostUnit/Controllers/DistanceAllowanceController.php new file mode 100644 index 0000000..f081966 --- /dev/null +++ b/app/Domains/CostUnit/Controllers/DistanceAllowanceController.php @@ -0,0 +1,20 @@ +costUnits->getById($costUnitId, true); + if (null !== $costUnit) { + $distanceAllowance = $costUnit->distance_allowance; + } + + return response()->json([ + 'distanceAllowance' => $distanceAllowance + ]); + } +} diff --git a/app/Domains/CostUnit/Routes/api.php b/app/Domains/CostUnit/Routes/api.php index bd8b4b5..38e9186 100644 --- a/app/Domains/CostUnit/Routes/api.php +++ b/app/Domains/CostUnit/Routes/api.php @@ -1,21 +1,21 @@ group(function () { Route::middleware(IdentifyTenant::class)->group(function () { Route::prefix('cost-unit')->group(function () { + + Route::get('/get-distance-allowance/{costUnitId}', DistanceAllowanceController::class); + + Route::middleware(['auth'])->group(function () { Route::post('/create-running-job', [CreateController::class, 'createCostUnitRunningJob']); @@ -41,8 +41,6 @@ Route::prefix('api/v1') Route::get('/closed-cost-units', [ListController::class, 'listClosedCostUnits']); Route::get('/archived-cost-units', [ListController::class, 'listArchivedCostUnits']); }); - - }); }); }); diff --git a/app/Domains/CostUnit/Routes/web.php b/app/Domains/CostUnit/Routes/web.php index ed6271c..715d4c3 100644 --- a/app/Domains/CostUnit/Routes/web.php +++ b/app/Domains/CostUnit/Routes/web.php @@ -1,17 +1,13 @@ group(function () { Route::prefix('cost-unit')->group(function () { diff --git a/app/Domains/Dashboard/Views/Dashboard.vue b/app/Domains/Dashboard/Views/Dashboard.vue index 90371d0..ee947b6 100644 --- a/app/Domains/Dashboard/Views/Dashboard.vue +++ b/app/Domains/Dashboard/Views/Dashboard.vue @@ -1,7 +1,8 @@