From 7c085dfa6b3806438de750a22f55f75a36fbf63a Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 10 Feb 2025 12:47:57 +0100 Subject: [PATCH] Create routes and views for suppliers. --- .../Controllers/Api/SupplierController.php | 57 ++++++- app/Http/Controllers/SupplierController.php | 41 +++++ app/Models/Supplier.php | 17 +- lang/de/supplier.php | 5 + resources/views/incoming/index.blade.php | 9 +- resources/views/layouts/navigation.blade.php | 27 +++- resources/views/supplier/create.blade.php | 133 ++++++++++++++++ resources/views/supplier/edit.blade.php | 134 ++++++++++++++++ resources/views/supplier/index.blade.php | 103 ++++++++++++ resources/views/supplier/show.blade.php | 146 ++++++++++++++++++ routes/api.php | 2 +- routes/web.php | 2 + 12 files changed, 664 insertions(+), 12 deletions(-) create mode 100644 app/Http/Controllers/SupplierController.php create mode 100644 resources/views/supplier/create.blade.php create mode 100644 resources/views/supplier/edit.blade.php create mode 100644 resources/views/supplier/index.blade.php create mode 100644 resources/views/supplier/show.blade.php diff --git a/app/Http/Controllers/Api/SupplierController.php b/app/Http/Controllers/Api/SupplierController.php index b40d4a7..139213f 100644 --- a/app/Http/Controllers/Api/SupplierController.php +++ b/app/Http/Controllers/Api/SupplierController.php @@ -5,13 +5,68 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Models\Supplier; use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; class SupplierController extends Controller { + /** + * Display a listing of the resource. + */ public function index(): JsonResponse { - $suppliers = Supplier::orderBy('name')->get(); + $suppliers = Supplier::orderBy('name')->with(['invoices'])->get(); return response()->json($suppliers); } + /** + * Store a newly created resource in storage. + */ + public function store(Request $request): JsonResponse + { + $supplierData = $request->validate([ + 'name' => 'required|string', + 'registration_name' => 'nullable|string', + 'email' => 'nullable|email', + 'address' => 'nullable|string', + 'city' => 'nullable|string', + 'zip' => 'nullable|string', + 'country_code' => 'nullable|string', + 'tax_fc' => 'nullable|string', + 'tax_vat' => 'nullable|string', + 'contact_name' => 'nullable|string', + 'contact_phone' => 'nullable|string', + 'contact_email' => 'nullable|string', + ]); + + $supplier = new Supplier($supplierData); + $supplier->save(); + + return response()->json($supplier); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, Supplier $supplier): JsonResponse + { + $supplierData = $request->validate([ + 'name' => 'required|string', + 'registration_name' => 'nullable|string', + 'email' => 'nullable|email', + 'address' => 'nullable|string', + 'city' => 'nullable|string', + 'zip' => 'nullable|string', + 'country_code' => 'nullable|string', + 'tax_fc' => 'nullable|string', + 'tax_vat' => 'nullable|string', + 'contact_name' => 'nullable|string', + 'contact_phone' => 'nullable|string', + 'contact_email' => 'nullable|string', + ]); + + $supplier->update($supplierData); + + return response()->json($supplier); + } + } diff --git a/app/Http/Controllers/SupplierController.php b/app/Http/Controllers/SupplierController.php new file mode 100644 index 0000000..1c49eac --- /dev/null +++ b/app/Http/Controllers/SupplierController.php @@ -0,0 +1,41 @@ + $supplier]); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Supplier $supplier) + { + return view('supplier.edit', ['supplier' => $supplier]); + } + +} diff --git a/app/Models/Supplier.php b/app/Models/Supplier.php index d3ff229..2c12d51 100644 --- a/app/Models/Supplier.php +++ b/app/Models/Supplier.php @@ -4,7 +4,6 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Database\Eloquent\SoftDeletes; class Supplier extends Model { @@ -28,6 +27,22 @@ class Supplier extends Model 'contact_email', ]; + /** + * The attributes that are appended with attribute getters. + * + * @var string[] + */ + protected $appends = [ + 'created', + ]; + + /** + * Get the issue_date attribute in local time format. + */ + public function getCreatedAttribute(): string + { + return $this->created_at->format('d.m.Y'); + } /** * Get the supplier's incoming invoices. */ diff --git a/lang/de/supplier.php b/lang/de/supplier.php index 9e63f40..a3cb92a 100644 --- a/lang/de/supplier.php +++ b/lang/de/supplier.php @@ -12,5 +12,10 @@ return [ */ 'Supplier' => 'Lieferant', + 'Suppliers' => 'Lieferanten', + 'Add new supplier' => 'Neuen Lieferanten anlegen', + 'Add new supplier by clicking add' => 'Neuen Lieferanten durch Klick auf "Anlegen" erstellen.', + 'Existing suppliers' => 'Bestehende Lieferanten', + 'Search supplier' => 'Suche Lieferant', ]; diff --git a/resources/views/incoming/index.blade.php b/resources/views/incoming/index.blade.php index 174df5c..d198ba8 100644 --- a/resources/views/incoming/index.blade.php +++ b/resources/views/incoming/index.blade.php @@ -1,11 +1,11 @@ -
-

+
+

{{ __('incoming.Incoming') }}

- - + +
@@ -19,7 +19,6 @@

{{ __('incoming.Add new invoice') }}

-

{{ __("incoming.Add new invoice by clicking add") }}

diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index add85db..a333a2e 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -32,10 +32,29 @@ :active="\Illuminate\Support\Str::startsWith(request()->route()->getName(), 'taxrate.')"> {{ __('configuration.Taxrates') }} - - {{ __('incoming.Incoming') }} - + {{ __('configuration.Options') }} diff --git a/resources/views/supplier/create.blade.php b/resources/views/supplier/create.blade.php new file mode 100644 index 0000000..7306b1e --- /dev/null +++ b/resources/views/supplier/create.blade.php @@ -0,0 +1,133 @@ + + +

+ {{ __('supplier.Add new supplier') }} +

+
+ +
+
+
+
+
+
+

+ {{ __('supplier.Supplier') }} +

+
+
+ +

+ +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+
+ +
+ {{ __('form.Save') }} +
+ +
+
+
+
+
+
+
+ + diff --git a/resources/views/supplier/edit.blade.php b/resources/views/supplier/edit.blade.php new file mode 100644 index 0000000..174ca4f --- /dev/null +++ b/resources/views/supplier/edit.blade.php @@ -0,0 +1,134 @@ + + +

+ {{ __('supplier.Supplier') }}: {{ $supplier->name }} +

+
+ +
+
+
+
+
+
+

+ {{ __('supplier.Supplier') }} +

+
+
+ +

+ +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+
+ +
+ {{ __('form.Save') }} +
+ +
+
+
+
+
+
+
+ + diff --git a/resources/views/supplier/index.blade.php b/resources/views/supplier/index.blade.php new file mode 100644 index 0000000..7f707fa --- /dev/null +++ b/resources/views/supplier/index.blade.php @@ -0,0 +1,103 @@ + + +
+

+ {{ __('supplier.Suppliers') }} +

+
+
+ +
+
+ +
+
+
+
+

+ {{ __('supplier.Add new supplier') }} +

+

+ {{ __("supplier.Add new supplier by clicking add") }} +

+
+ {{ __('form.Add') }} +
+
+
+ +
+
+
+
+

+ {{ __('supplier.Existing suppliers') }} +

+
+ + +
+ +
+ +
+
{{ __('common.Name') }}
+
{{ __('common.Email') }}
+
{{ __('invoice.Invoices') }}
+
{{ __('common.Created at') }}
+
+ + + +
+
+
+ +
+
+ +
+ + diff --git a/resources/views/supplier/show.blade.php b/resources/views/supplier/show.blade.php new file mode 100644 index 0000000..3a3c6c6 --- /dev/null +++ b/resources/views/supplier/show.blade.php @@ -0,0 +1,146 @@ + + +

+ {{ __('supplier.Supplier') }}: {{ $supplier->name }} +

+
+ +
+
+ + + +
+
+
+
+

+ {{ __('supplier.Supplier') }} +

+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+ +
+
+
+
+

+ {{ __('incoming.Incoming') }} +

+
+ + +
{{ __('invoice.Invoice Number') }}
+
{{ __('common.Name') }}
+
{{ __('invoice.Sum') }}
+
{{ __('common.Created at') }}
+
{{ __('common.Paid at') }}
+
+ + @php + $sum = 0; + @endphp + @foreach($supplier->invoices as $invoice) + @php($sum += $invoice->net) +
+ +
{{ $invoice->invoice_number }}
+
{{ $supplier->name }}
+
{{ \Illuminate\Support\Number::currency($invoice->net) }}
+
{{ $invoice->created }}
+
{{ $invoice->paid }}
+
+
+ @endforeach + +
+
+
{{ __('invoice.Sum') }}
+
{{ \Illuminate\Support\Number::currency($sum) }}
+
+ +
+
+
+
+
+
diff --git a/routes/api.php b/routes/api.php index 688212d..393c041 100644 --- a/routes/api.php +++ b/routes/api.php @@ -52,7 +52,7 @@ Route::group(['as' => 'api.'], function () { Route::post('/incoming', [IncomingController::class, 'store'])->name('incoming.store'); Route::apiResource('/project', ProjectController::class); Route::apiResource('/dashboard', DashboardController::class)->only(['index', 'update']); - Route::apiResource('/supplier', SupplierController::class)->only(['index']); + Route::apiResource('/supplier', SupplierController::class)->only(['index', 'store', 'update']); }); diff --git a/routes/web.php b/routes/web.php index e5b3637..5c89ca6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -9,6 +9,7 @@ use App\Http\Controllers\PaymentController; use App\Http\Controllers\PdfController; use App\Http\Controllers\ProfileController; use App\Http\Controllers\ProjectController; +use App\Http\Controllers\SupplierController; use App\Http\Controllers\TaxrateController; use App\Models\Dashboard; use Illuminate\Support\Facades\Route; @@ -38,6 +39,7 @@ Route::middleware('auth')->group(function () { Route::resource('/incoming', IncomingController::class)->only(['index', 'create', 'edit']); Route::get('/incoming-upload', [IncomingController::class, 'upload'])->name('incoming.upload'); Route::resource('/project', ProjectController::class)->only(['index', 'create', 'show', 'edit']); + Route::resource('/supplier', SupplierController::class)->only(['index', 'create', 'show', 'edit']); }); require __DIR__.'/auth.php';