From 6c8e98ee74f2a48a62afab6c8679f59524f498f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20Duli=C3=A7i?= Date: Wed, 2 Sep 2020 12:23:01 +0300 Subject: [PATCH] improved document events --- app/Abstracts/DocumentModel.php | 9 ++------- .../Banking/CreateDocumentTransaction.php | 16 +++++++++++++-- app/Jobs/Purchase/UpdateBill.php | 11 ++++++---- app/Jobs/Sale/UpdateInvoice.php | 11 ++++++---- app/Observers/Transaction.php | 20 +++++++++---------- 5 files changed, 40 insertions(+), 27 deletions(-) diff --git a/app/Abstracts/DocumentModel.php b/app/Abstracts/DocumentModel.php index b44c16bb9..403276958 100644 --- a/app/Abstracts/DocumentModel.php +++ b/app/Abstracts/DocumentModel.php @@ -3,7 +3,6 @@ namespace App\Abstracts; use App\Abstracts\Model; -use App\Events\Document\PaidAmountCalculated; use App\Models\Setting\Tax; use App\Traits\Currencies; use App\Traits\DateTime; @@ -116,13 +115,9 @@ abstract class DocumentModel extends Model $this->setAttribute('reconciled', $reconciled); - // TODO: find a cleaner way compatible with observer pattern - $model = clone $this; - $model->paid_amount = $paid; - event(new PaidAmountCalculated($model)); - - return round($model->paid_amount, $precision); + return round($paid, $precision); } + /** * Get the status label. * diff --git a/app/Jobs/Banking/CreateDocumentTransaction.php b/app/Jobs/Banking/CreateDocumentTransaction.php index 42675576f..e9edaeb9f 100644 --- a/app/Jobs/Banking/CreateDocumentTransaction.php +++ b/app/Jobs/Banking/CreateDocumentTransaction.php @@ -6,6 +6,7 @@ use App\Abstracts\Job; use App\Jobs\Banking\CreateTransaction; use App\Jobs\Purchase\CreateBillHistory; use App\Jobs\Sale\CreateInvoiceHistory; +use App\Events\Document\PaidAmountCalculated; use App\Models\Banking\Transaction; use App\Models\Sale\Invoice; use App\Traits\Currencies; @@ -64,11 +65,17 @@ class CreateDocumentTransaction extends Job protected function prepareRequest() { + if (!isset($this->request['amount'])) { + $this->model->paid_amount = $this->model->paid; + event(new PaidAmountCalculated($this->model)); + + $this->request['amount'] = $this->model->amount - $this->model->paid_amount; + } + $this->request['company_id'] = session('company_id'); $this->request['currency_code'] = isset($this->request['currency_code']) ? $this->request['currency_code'] : $this->model->currency_code; $this->request['type'] = ($this->model instanceof Invoice) ? 'income' : 'expense'; $this->request['paid_at'] = isset($this->request['paid_at']) ? $this->request['paid_at'] : Date::now()->format('Y-m-d'); - $this->request['amount'] = isset($this->request['amount']) ? $this->request['amount'] : ($this->model->amount - $this->model->paid); $this->request['currency_rate'] = config('money.' . $this->request['currency_code'] . '.rate'); $this->request['account_id'] = isset($this->request['account_id']) ? $this->request['account_id'] : setting('default.account'); $this->request['document_id'] = isset($this->request['document_id']) ? $this->request['document_id'] : $this->model->id; @@ -92,8 +99,13 @@ class CreateDocumentTransaction extends Job $amount = round($converted_amount, $precision); } - $total_amount = round($this->model->amount - $this->model->paid, $precision); + $this->model->paid_amount = $this->model->paid; + event(new PaidAmountCalculated($this->model)); + + $total_amount = round($this->model->amount - $this->model->paid_amount, $precision); + unset($this->model->reconciled); + unset($this->model->paid_amount); $compare = bccomp($amount, $total_amount, $precision); diff --git a/app/Jobs/Purchase/UpdateBill.php b/app/Jobs/Purchase/UpdateBill.php index aa016dbfe..db5ad1f94 100644 --- a/app/Jobs/Purchase/UpdateBill.php +++ b/app/Jobs/Purchase/UpdateBill.php @@ -3,6 +3,7 @@ namespace App\Jobs\Purchase; use App\Abstracts\Job; +use App\Events\Document\PaidAmountCalculated; use App\Events\Purchase\BillUpdated; use App\Events\Purchase\BillUpdating; use App\Jobs\Purchase\CreateBillItemsAndTotals; @@ -53,14 +54,16 @@ class UpdateBill extends Job $this->dispatch(new CreateBillItemsAndTotals($this->bill, $this->request)); - $bill_paid = $this->bill->paid; + $this->bill->paid_amount = $this->bill->paid; + event(new PaidAmountCalculated($this->bill)); - unset($this->bill->reconciled); - - if (($bill_paid) && $this->request['amount'] > $bill_paid) { + if ($this->request['amount'] > $this->bill->paid_amount) { $this->request['status'] = 'partial'; } + unset($this->bill->reconciled); + unset($this->bill->paid_amount); + $this->bill->update($this->request->input()); $this->bill->updateRecurring(); diff --git a/app/Jobs/Sale/UpdateInvoice.php b/app/Jobs/Sale/UpdateInvoice.php index bb41989bb..1c49fac6c 100644 --- a/app/Jobs/Sale/UpdateInvoice.php +++ b/app/Jobs/Sale/UpdateInvoice.php @@ -3,6 +3,7 @@ namespace App\Jobs\Sale; use App\Abstracts\Job; +use App\Events\Document\PaidAmountCalculated; use App\Events\Sale\InvoiceUpdated; use App\Events\Sale\InvoiceUpdating; use App\Jobs\Sale\CreateInvoiceItemsAndTotals; @@ -53,14 +54,16 @@ class UpdateInvoice extends Job $this->dispatch(new CreateInvoiceItemsAndTotals($this->invoice, $this->request)); - $invoice_paid = $this->invoice->paid; + $this->invoice->paid_amount = $this->invoice->paid; + event(new PaidAmountCalculated($this->invoice)); - unset($this->invoice->reconciled); - - if (($invoice_paid) && $this->request['amount'] > $invoice_paid) { + if ($this->request['amount'] > $this->invoice->paid_amount) { $this->request['status'] = 'partial'; } + unset($this->invoice->reconciled); + unset($this->invoice->paid_amount); + $this->invoice->update($this->request->all()); $this->invoice->updateRecurring(); diff --git a/app/Observers/Transaction.php b/app/Observers/Transaction.php index d668f23dd..0f729ba46 100644 --- a/app/Observers/Transaction.php +++ b/app/Observers/Transaction.php @@ -34,12 +34,12 @@ class Transaction extends Observer { $invoice = $transaction->invoice; - // TODO: find a cleaner way compatible with observer pattern - $model = clone $invoice; - $model->transactions_count = $invoice->transactions->count(); - event(new TransactionsCounted($model)); + $invoice->transactions_count = $invoice->transactions->count(); + event(new TransactionsCounted($invoice)); - $invoice->status = ($model->transactions_count > 1) ? 'partial' : 'sent'; + $invoice->status = ($invoice->transactions_count > 0) ? 'partial' : 'sent'; + + unset($invoice->transactions_count); $invoice->save(); @@ -50,12 +50,12 @@ class Transaction extends Observer { $bill = $transaction->bill; - // TODO: find a cleaner way compatible with observer pattern - $model = clone $bill; - $model->transactions_count = $bill->transactions->count(); - event(new TransactionsCounted($model)); + $bill->transactions_count = $bill->transactions->count(); + event(new TransactionsCounted($bill)); - $bill->status = ($model->transactions_count > 1) ? 'partial' : 'received'; + $bill->status = ($bill->transactions_count > 0) ? 'partial' : 'received'; + + unset($bill->transactions_count); $bill->save();