From 44ec3fdd508fe5c60b3232d7d0cf18d834e03f82 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 7 Jul 2022 22:09:39 +1000 Subject: [PATCH 1/4] Fixes for purchase order to expense --- app/Helpers/Invoice/InvoiceSum.php | 22 +------------------ .../Controllers/PurchaseOrderController.php | 4 ++++ .../Requests/Expense/StoreExpenseRequest.php | 7 ------ .../PurchaseOrder/PurchaseOrderExpense.php | 16 ++++++++++++-- .../PurchaseOrder/PurchaseOrderService.php | 3 +++ 5 files changed, 22 insertions(+), 30 deletions(-) diff --git a/app/Helpers/Invoice/InvoiceSum.php b/app/Helpers/Invoice/InvoiceSum.php index 3436610548f0..40fb99e0a128 100644 --- a/app/Helpers/Invoice/InvoiceSum.php +++ b/app/Helpers/Invoice/InvoiceSum.php @@ -101,16 +101,12 @@ class InvoiceSum private function calculateCustomValues() { - // $this->total_taxes += $this->valuerTax($this->invoice->custom_surcharge1, $this->invoice->custom_surcharge_tax1); $this->total_custom_values += $this->valuer($this->invoice->custom_surcharge1); - // $this->total_taxes += $this->valuerTax($this->invoice->custom_surcharge2, $this->invoice->custom_surcharge_tax2); $this->total_custom_values += $this->valuer($this->invoice->custom_surcharge2); - // $this->total_taxes += $this->valuerTax($this->invoice->custom_surcharge3, $this->invoice->custom_surcharge_tax3); $this->total_custom_values += $this->valuer($this->invoice->custom_surcharge3); - // $this->total_taxes += $this->valuerTax($this->invoice->custom_surcharge4, $this->invoice->custom_surcharge_tax4); $this->total_custom_values += $this->valuer($this->invoice->custom_surcharge4); $this->total += $this->total_custom_values; @@ -155,7 +151,7 @@ class InvoiceSum */ private function calculateBalance() { - //$this->invoice->balance = $this->balance($this->getTotal(), $this->invoice); + $this->setCalculatedAttributes(); return $this; @@ -174,22 +170,6 @@ class InvoiceSum { $this->total += $this->total_taxes; - // if (is_numeric($this->invoice->custom_value1)) { - // $this->total += $this->invoice->custom_value1; - // } - - // if (is_numeric($this->invoice->custom_value2)) { - // $this->total += $this->invoice->custom_value2; - // } - - // if (is_numeric($this->invoice->custom_value3)) { - // $this->total += $this->invoice->custom_value3; - // } - - // if (is_numeric($this->invoice->custom_value4)) { - // $this->total += $this->invoice->custom_value4; - // } - return $this; } diff --git a/app/Http/Controllers/PurchaseOrderController.php b/app/Http/Controllers/PurchaseOrderController.php index 26005706f7fb..9be15daf35bf 100644 --- a/app/Http/Controllers/PurchaseOrderController.php +++ b/app/Http/Controllers/PurchaseOrderController.php @@ -367,6 +367,10 @@ class PurchaseOrderController extends BaseController $purchase_order = $this->purchase_order_repository->save($request->all(), $purchase_order); + $purchase_order = $purchase_order->service() + ->triggeredActions($request) + ->save(); + event(new PurchaseOrderWasUpdated($purchase_order, $purchase_order->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); return $this->itemResponse($purchase_order); diff --git a/app/Http/Requests/Expense/StoreExpenseRequest.php b/app/Http/Requests/Expense/StoreExpenseRequest.php index 3b4a5a6dc9de..438d8683db58 100644 --- a/app/Http/Requests/Expense/StoreExpenseRequest.php +++ b/app/Http/Requests/Expense/StoreExpenseRequest.php @@ -42,9 +42,6 @@ class StoreExpenseRequest extends Request if(!empty($this->client_id)) $rules['client_id'] = 'bail|sometimes|exists:clients,id,company_id,'.auth()->user()->company()->id; - if(!empty($this->purchase_order_id)) - $rules['purchase_order_id'] = 'bail|sometimes|exists:purchase_orders,id,company_id,'.auth()->user()->company()->id; - return $this->globalRules($rules); } @@ -62,10 +59,6 @@ class StoreExpenseRequest extends Request $input['currency_id'] = (string)auth()->user()->company()->settings->currency_id; } - if (array_key_exists('purchase_order_id', $input) && is_string($input['purchase_order_id'])) { - $input['purchase_order_id'] = $this->decodePrimaryKey($input['purchase_order_id']); - } - if(array_key_exists('color', $input) && is_null($input['color'])) $input['color'] = ''; diff --git a/app/Services/PurchaseOrder/PurchaseOrderExpense.php b/app/Services/PurchaseOrder/PurchaseOrderExpense.php index 52f7d6fae674..f7c5857b0510 100644 --- a/app/Services/PurchaseOrder/PurchaseOrderExpense.php +++ b/app/Services/PurchaseOrder/PurchaseOrderExpense.php @@ -28,13 +28,25 @@ class PurchaseOrderExpense { $expense = ExpenseFactory::create($this->purchase_order->company_id, $this->purchase_order->user_id); - $expense->amount = $this->purchase_order->amount; + + $expense->amount = $this->purchase_order->uses_inclusive_taxes ? $this->purchase_order->amount : ($this->purchase_order->amount - $this->purchase_order->total_taxes); + $expense->date = now(); $expense->vendor_id = $this->purchase_order->vendor_id; $expense->public_notes = $this->purchase_order->public_notes; - $expense->purchase_order_id = $this->purchase_order->id; + $expense->uses_inclusive_taxes = $this->purchase_order->uses_inclusive_taxes; + $expense->calculate_tax_by_amount = true; + + $tax_map = $this->purchase_order->calc()->getTaxMap(); + + $expense->tax_amount1 = $this->purchase_order->total_taxes; + $expense->tax_name1 = ctrans("texts.tax"); + $expense->save(); + $this->purchase_order->expense_id = $expense->id; + $this->purchase_order->save(); + return $expense; } diff --git a/app/Services/PurchaseOrder/PurchaseOrderService.php b/app/Services/PurchaseOrder/PurchaseOrderService.php index 9a81672b729c..b961d9897fdd 100644 --- a/app/Services/PurchaseOrder/PurchaseOrderService.php +++ b/app/Services/PurchaseOrder/PurchaseOrderService.php @@ -130,6 +130,9 @@ class PurchaseOrderService { $this->markSent(); + if($this->purchase_order->expense()->exists()) + return $this; + $expense = (new PurchaseOrderExpense($this->purchase_order))->run(); return $expense; From 9a3a1b92f653eed3f8209e4ad93f07b74dc53f4c Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 8 Jul 2022 09:00:36 +1000 Subject: [PATCH 2/4] Fixes for send_email bulk routes --- app/Http/Controllers/CreditController.php | 13 +++++++++- app/Http/Controllers/InvoiceController.php | 24 ++++++++++++++----- .../Controllers/PurchaseOrderController.php | 9 +++++++ app/Http/Controllers/QuoteController.php | 7 ++++++ 4 files changed, 46 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/CreditController.php b/app/Http/Controllers/CreditController.php index 1e868f46c00f..80d5d9e417ac 100644 --- a/app/Http/Controllers/CreditController.php +++ b/app/Http/Controllers/CreditController.php @@ -601,7 +601,18 @@ class CreditController extends BaseController } break; case 'email': - // EmailCredit::dispatch($credit, $credit->company); + + $credit->invitations->load('contact.client.country', 'credit.client.country', 'credit.company')->each(function ($invitation) use ($credit) { + EmailEntity::dispatch($invitation, $credit->company, 'credit'); + }); + + + if (! $bulk) { + return response()->json(['message'=>'email sent'], 200); + } + break; + + case 'send_email': $credit->invitations->load('contact.client.country', 'credit.client.country', 'credit.company')->each(function ($invitation) use ($credit) { EmailEntity::dispatch($invitation, $credit->company, 'credit'); diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 168a6bbc0595..0b9d730e899d 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -745,13 +745,7 @@ class InvoiceController extends BaseController $this->itemResponse($invoice); } break; - // case 'reverse': - // $invoice = $invoice->service()->handleReversal()->deletePdf()->save(); - // if (! $bulk) { - // $this->itemResponse($invoice); - // } - // break; case 'email': //check query parameter for email_type and set the template else use calculateTemplate @@ -769,6 +763,24 @@ class InvoiceController extends BaseController } break; + case 'send_email': + //check query parameter for email_type and set the template else use calculateTemplate + + + if (request()->has('email_type') && property_exists($invoice->company->settings, request()->input('email_type'))) { + $this->reminder_template = $invoice->client->getSetting(request()->input('email_type')); + } else { + $this->reminder_template = $invoice->calculateTemplate('invoice'); + } + + BulkInvoiceJob::dispatch($invoice, $this->reminder_template); + + if (! $bulk) { + return response()->json(['message' => 'email sent'], 200); + } + break; + + default: return response()->json(['message' => ctrans('texts.action_unavailable', ['action' => $action])], 400); break; diff --git a/app/Http/Controllers/PurchaseOrderController.php b/app/Http/Controllers/PurchaseOrderController.php index 9be15daf35bf..959ed9f1ce18 100644 --- a/app/Http/Controllers/PurchaseOrderController.php +++ b/app/Http/Controllers/PurchaseOrderController.php @@ -648,6 +648,15 @@ class PurchaseOrderController extends BaseController } break; + case 'send_email': + //check query parameter for email_type and set the template else use calculateTemplate + PurchaseOrderEmail::dispatch($purchase_order, $purchase_order->company); + + if (! $bulk) { + return response()->json(['message' => 'email sent'], 200); + } + break; + case 'add_to_inventory': $purchase_order->service()->add_to_inventory(); diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php index de586a99688f..f2afb1dfd11c 100644 --- a/app/Http/Controllers/QuoteController.php +++ b/app/Http/Controllers/QuoteController.php @@ -722,6 +722,13 @@ class QuoteController extends BaseController return response()->json(['message'=> ctrans('texts.sent_message')], 200); break; + + case 'send_email': + $quote->service()->sendEmail(); + + return response()->json(['message'=> ctrans('texts.sent_message')], 200); + break; + case 'mark_sent': $quote->service()->markSent()->save(); From 30c5a8f06ed8d6ea5a40a715a394c0ceaeadcb3b Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 8 Jul 2022 09:38:09 +1000 Subject: [PATCH 3/4] Minor fixes for invoice filters --- app/Filters/InvoiceFilters.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Filters/InvoiceFilters.php b/app/Filters/InvoiceFilters.php index 4bb25f5867e2..d46a9b058848 100644 --- a/app/Filters/InvoiceFilters.php +++ b/app/Filters/InvoiceFilters.php @@ -67,7 +67,7 @@ class InvoiceFilters extends QueryFilters return $this->builder; } - public function number(string $number) :Builder + public function number(string $number = '') :Builder { return $this->builder->where('number', $number); } From f11feb0e074ab92d13e675f74316f30b2dc21256 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 8 Jul 2022 15:12:31 +1000 Subject: [PATCH 4/4] v5.4.9 --- VERSION.txt | 2 +- config/ninja.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VERSION.txt b/VERSION.txt index 017d74f4a2e9..617bf49605dd 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.4.8 \ No newline at end of file +5.4.9 \ No newline at end of file diff --git a/config/ninja.php b/config/ninja.php index 5eb5af73c1a8..2e9f248ca856 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -14,8 +14,8 @@ return [ 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', 'invoicing.co'), - 'app_version' => '5.4.8', - 'app_tag' => '5.4.8', + 'app_version' => '5.4.9', + 'app_tag' => '5.4.9', 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', ''),