diff --git a/app/Classes/Modules/Bookings/Services/CalculatesBookingPayableAmount.php b/app/Classes/Modules/Bookings/Services/CalculatesBookingPayableAmount.php new file mode 100644 index 00000000..33151018 --- /dev/null +++ b/app/Classes/Modules/Bookings/Services/CalculatesBookingPayableAmount.php @@ -0,0 +1,18 @@ +transactions()->payments()->complete()->sum('original_amount'); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/Services/CalculatesBookingTransferredAmount.php b/app/Classes/Modules/Bookings/Services/CalculatesBookingTransferredAmount.php index fa809cee..5224e044 100644 --- a/app/Classes/Modules/Bookings/Services/CalculatesBookingTransferredAmount.php +++ b/app/Classes/Modules/Bookings/Services/CalculatesBookingTransferredAmount.php @@ -11,10 +11,8 @@ use Carbon\Carbon; class CalculatesBookingTransferredAmount { - public function execute(Booking $booking, int $type){ - return $type === 1 ? - $booking->transactions()->bills()->transferred()->sum('original_amount') * (1/$booking->transactions()->payments()->avg('currency_rate')) : - $booking->transactions()->bills()->transferred()->sum('original_amount'); + public function execute(Booking $booking){ + return $booking->transactions()->bills()->transferred()->sum('original_amount'); } } \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php index 462c34d4..d6f8fb87 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php @@ -2,6 +2,7 @@ namespace App\Classes\Modules\Transactions\Processors; +use App\Classes\Modules\Bookings\Services\CalculatesBookingPayableAmount; use App\Classes\Modules\Bookings\Services\CalculatesBookingTransferredAmount; use App\Classes\Modules\ServiceTypes\Services\FetchesServiceConfigurations; use App\Classes\Modules\Transactions\Services\ListsTransactions; @@ -39,6 +40,9 @@ class CreateInvoiceTransactionProcessor /** @var CalculatesBookingPaidAmount */ private $calculatesBookingPaidAmount; + /** @var CalculatesBookingPayableAmount */ + private $calculatesBookingPayableAmount; + /** @var CalculatesBookingTransferredAmount */ private $calculatesBookingTransferredAmount; @@ -66,6 +70,7 @@ class CreateInvoiceTransactionProcessor * @param CreatesTransaction $createsTransaction * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber * @param CalculatesBookingPaidAmount $calculatesBookingPaidAmount + * @param CalculatesBookingPayableAmount $calculatesBookingPayableAmount * @param CalculatesBookingTransferredAmount $calculatesBookingTransferredAmount * @param FetchesServiceConfigurations $fetchesServiceConfigurations * @param CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate @@ -74,12 +79,13 @@ class CreateInvoiceTransactionProcessor * @param CreatesFiles $createsFile * @param UpdatesBookingStatus $updatesBookingStatus */ - public function __construct(ListsTransactions $listsTransactions, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesBookingPaidAmount $calculatesBookingPaidAmount, CalculatesBookingTransferredAmount $calculatesBookingTransferredAmount, FetchesServiceConfigurations $fetchesServiceConfigurations, CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate, FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesBookingStatus $updatesBookingStatus) + public function __construct(ListsTransactions $listsTransactions, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesBookingPaidAmount $calculatesBookingPaidAmount, CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingTransferredAmount $calculatesBookingTransferredAmount, FetchesServiceConfigurations $fetchesServiceConfigurations, CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate, FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesBookingStatus $updatesBookingStatus) { $this->listsTransactions = $listsTransactions; $this->createsTransaction = $createsTransaction; $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; $this->calculatesBookingPaidAmount = $calculatesBookingPaidAmount; + $this->calculatesBookingPayableAmount = $calculatesBookingPayableAmount; $this->calculatesBookingTransferredAmount = $calculatesBookingTransferredAmount; $this->fetchesServiceConfigurations = $fetchesServiceConfigurations; $this->calculatesBookingCurrencyAverageRate = $calculatesBookingCurrencyAverageRate; @@ -102,14 +108,16 @@ class CreateInvoiceTransactionProcessor return; } - $payment_amount = $this->calculatesBookingTransferredAmount->execute($booking, $booking->fix_currency_id); + $payment_amount = $this->calculatesBookingPaidAmount->execute($booking, $booking->fix_currency_id); $booking_amount = $booking->fix_amount; - if(!(float) $payment_amount) { + // confirm that booking amount has been fully paid + if (!(abs(((float) $booking_amount - (float) $payment_amount)/(float) $payment_amount) < 0.009)) { return; } - if (!(abs(((float) $booking_amount - (float) $payment_amount)/(float) $payment_amount) < 0.009)) { + // confirm that all payments has been transferred + if($this->calculatesBookingTransferredAmount->execute($booking) !== $this->calculatesBookingPayableAmount->execute($booking)){ return; }