From 8ba3e9f79327d88770dd1dffa9dd10a96c7277d8 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Thu, 26 Jul 2018 22:38:00 +0800 Subject: [PATCH] Add invoice discount - closes #10 --- .../Controllers/Invoices/InvoicesController.php | 12 +- app/Http/Controllers/Invoices/ItemsController.php | 12 +- .../2017_10_05_162758_create_invoices_table.php | 2 + resources/lang/de/invoice.php | 3 + resources/lang/en/invoice.php | 3 + resources/lang/id/invoice.php | 3 + resources/views/invoices/edit.blade.php | 2 + .../views/invoices/partials/item-list.blade.php | 2 +- resources/views/invoices/pdf.blade.php | 19 +++ resources/views/invoices/show.blade.php | 21 ++- tests/Feature/Invoices/ManageInvoicesTest.php | 151 +++++++++++++++++++-- 11 files changed, 206 insertions(+), 24 deletions(-) diff --git a/app/Http/Controllers/Invoices/InvoicesController.php b/app/Http/Controllers/Invoices/InvoicesController.php index 45bded1..02f9d96 100644 --- a/app/Http/Controllers/Invoices/InvoicesController.php +++ b/app/Http/Controllers/Invoices/InvoicesController.php @@ -36,11 +36,15 @@ class InvoicesController extends Controller public function update(Invoice $invoice) { $invoiceData = request()->validate([ - 'project_id' => 'required|exists:projects,id', - 'date' => 'required|date', - 'due_date' => 'nullable|date|after:date', - 'notes' => 'nullable|string|max:255', + 'project_id' => 'required|exists:projects,id', + 'date' => 'required|date', + 'due_date' => 'nullable|date|after:date', + 'discount' => 'nullable|numeric', + 'discount_notes' => 'nullable|string|max:255', + 'notes' => 'nullable|string|max:255', ]); + $invoiceSubtotal = collect($invoice->items)->sum('amount'); + $invoiceData['amount'] = $invoiceSubtotal - $invoiceData['discount']; $invoice->update($invoiceData); diff --git a/app/Http/Controllers/Invoices/ItemsController.php b/app/Http/Controllers/Invoices/ItemsController.php index 3cbc95a..f7f7ecd 100644 --- a/app/Http/Controllers/Invoices/ItemsController.php +++ b/app/Http/Controllers/Invoices/ItemsController.php @@ -20,10 +20,10 @@ class ItemsController extends Controller 'amount' => $itemData['new_item_amount'], ]; $invoice->items = $items; - $invoice->amount = collect($items)->sum('amount'); + $invoice->amount = (int) collect($items)->sum('amount') - $invoice->discount; $invoice->save(); - flash(trans('invoice.item_added')); + flash(__('invoice.item_added')); return back(); } @@ -46,10 +46,10 @@ class ItemsController extends Controller 'amount' => $amount, ]; $invoice->items = $items; - $invoice->amount = collect($items)->sum('amount'); + $invoice->amount = (int) collect($items)->sum('amount') - $invoice->discount; $invoice->save(); - flash(trans('invoice.item_updated')); + flash(__('invoice.item_updated')); return back(); } @@ -65,10 +65,10 @@ class ItemsController extends Controller $items = $invoice->items; unset($items[$itemIndex]); $invoice->items = $items; - $invoice->amount = (int) collect($items)->sum('amount'); + $invoice->amount = (int) collect($items)->sum('amount') - $invoice->discount; $invoice->save(); - flash(trans('invoice.item_removed')); + flash(__('invoice.item_removed')); return back(); } diff --git a/database/migrations/2017_10_05_162758_create_invoices_table.php b/database/migrations/2017_10_05_162758_create_invoices_table.php index 9426cfc..6e74b04 100644 --- a/database/migrations/2017_10_05_162758_create_invoices_table.php +++ b/database/migrations/2017_10_05_162758_create_invoices_table.php @@ -21,6 +21,8 @@ class CreateInvoicesTable extends Migration $table->date('due_date')->nullable(); $table->text('items'); $table->unsignedInteger('amount'); + $table->unsignedInteger('discount')->nullable(); + $table->string('discount_notes')->nullable(); $table->string('notes')->nullable(); $table->unsignedTinyInteger('status_id'); $table->unsignedInteger('creator_id'); diff --git a/resources/lang/de/invoice.php b/resources/lang/de/invoice.php index 9c262e9..3e1e841 100644 --- a/resources/lang/de/invoice.php +++ b/resources/lang/de/invoice.php @@ -56,4 +56,7 @@ return [ 'item_description' => 'Beschreibung', 'item_amount' => 'Summe', 'items_count' => 'Summe Positionen', + 'subtotal' => 'Subtotal', + 'discount' => 'Discount', + 'discount_notes' => 'Discount Notes', ]; diff --git a/resources/lang/en/invoice.php b/resources/lang/en/invoice.php index 504d8d8..db22e96 100644 --- a/resources/lang/en/invoice.php +++ b/resources/lang/en/invoice.php @@ -56,4 +56,7 @@ return [ 'item_description' => 'Description', 'item_amount' => 'Amount', 'items_count' => 'Item Count', + 'subtotal' => 'Subtotal', + 'discount' => 'Discount', + 'discount_notes' => 'Discount Notes', ]; diff --git a/resources/lang/id/invoice.php b/resources/lang/id/invoice.php index 4cb5211..ea637b4 100644 --- a/resources/lang/id/invoice.php +++ b/resources/lang/id/invoice.php @@ -56,4 +56,7 @@ return [ 'item_description' => 'Deskripsi', 'item_amount' => 'Biaya', 'items_count' => 'Jumlah Item', + 'subtotal' => 'Subtotal', + 'discount' => 'Diskon', + 'discount_notes' => 'Catatan Diskon', ]; diff --git a/resources/views/invoices/edit.blade.php b/resources/views/invoices/edit.blade.php index 25b3384..8b66cbb 100644 --- a/resources/views/invoices/edit.blade.php +++ b/resources/views/invoices/edit.blade.php @@ -56,6 +56,8 @@
{!! FormField::text('due_date', ['label' => trans('invoice.due_date')]) !!}
{!! FormField::textarea('notes', ['label' => trans('invoice.notes')]) !!} + {!! FormField::price('discount', ['label' => __('invoice.discount'), 'currency' => Option::get('money_sign', 'Rp')]) !!} + {!! FormField::text('discount_notes', ['label' => __('invoice.discount_notes')]) !!}