From 1591cb9162ba8895737fcf3caeda6e456c4e8414 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 12 Jun 2023 20:41:46 +0800 Subject: [PATCH 01/20] crm changes --- app/Classes/Jobs/UpdatePerfexCRM.php | 30 +-- app/Classes/Jobs/UpdatePerfexCRMInvoice.php | 5 +- app/Classes/Jobs/UpdatePerfexCRMPrelude.php | 68 +++--- .../ControllersLogic/CreateBookingLogic.php | 2 + .../CreateBookingPaymentLogic.php | 201 +++++++++++++----- .../BookingToPerfexCRMProcessor.php | 8 +- .../TransactionToPerfexCRMProcessorV2.php | 169 +++++++++++++++ .../Processors/UpdatePerfexCRMProcessor.php | 3 +- .../Services/UpdatesTransactionStatus.php | 9 +- .../ValueObjects/Constants/PerfexCRMTasks.php | 20 +- app/Models/Transaction.php | 13 ++ 11 files changed, 403 insertions(+), 125 deletions(-) create mode 100644 app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php diff --git a/app/Classes/Jobs/UpdatePerfexCRM.php b/app/Classes/Jobs/UpdatePerfexCRM.php index 059779e1..833fb365 100644 --- a/app/Classes/Jobs/UpdatePerfexCRM.php +++ b/app/Classes/Jobs/UpdatePerfexCRM.php @@ -10,7 +10,8 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject; use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject; - +use Illuminate\Support\Facades\Log; +use PhpOffice\PhpSpreadsheet\Calculation\Logical\Boolean; class UpdatePerfexCRM implements ShouldQueue { @@ -19,38 +20,39 @@ class UpdatePerfexCRM implements ShouldQueue /** @var UpdatePerfexCRMObject */ private $updatePerfexCRMObject; - /** @var UpdatePerfexCRMInvoice */ - private $nextJob; - - /** @var */ + /** @var */ private $transaction; + /** @var Boolean|null */ + private $shouldCreateInvoice; + /** - * UpdatePerfexCRM constructor. * @param UpdatePerfexCRMObject $updatePerfexCRMObject - * @param UpdatePerfexCRMInvoice $nextJob * @param $transaction + * @param bool|null $shouldCreateInvoice */ - public function __construct(UpdatePerfexCRMObject $updatePerfexCRMObject, $transaction, $nextJob) + public function __construct(UpdatePerfexCRMObject $updatePerfexCRMObject, $transaction, ?bool $shouldCreateInvoice = false) { $this->updatePerfexCRMObject = $updatePerfexCRMObject; - $this->nextJob = $nextJob; $this->transaction = $transaction; + $this->shouldCreateInvoice = $shouldCreateInvoice; } + public function handle() { $result = (App()->make(UpdatePerfexCRMProcessor::class))->execute($this->updatePerfexCRMObject); - /** @var UpdatePerfexCRMInvoice $nextJob*/ - if($this->nextJob != null && $this->transaction != null){ - $updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject( + if($this->transaction != null && $this->shouldCreateInvoice){ + $updatePerfexCRMInvoiceObject = new UpdatePerfexCRMInvoiceObject( $this->updatePerfexCRMObject->getContactEmail(), $this->updatePerfexCRMObject->getProjectName(), $result->projectId, $this->transaction, - true, + true ); - $this->nextJob::dispatch($updatePerfexCRMInvoiceOject); + + UpdatePerfexCRMInvoice::dispatch($updatePerfexCRMInvoiceObject); + } } } diff --git a/app/Classes/Jobs/UpdatePerfexCRMInvoice.php b/app/Classes/Jobs/UpdatePerfexCRMInvoice.php index 0d7b093e..ee395033 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMInvoice.php +++ b/app/Classes/Jobs/UpdatePerfexCRMInvoice.php @@ -30,7 +30,7 @@ class UpdatePerfexCRMInvoice implements ShouldQueue /** * CreatePerfexCRMSingleTask constructor. - * @param UpdatePerfexCRMInvoiceObject $createTaskPerfexCRMObject + * @param UpdatePerfexCRMInvoiceObject $updatePerfexCRMInvoiceObject */ public function __construct(UpdatePerfexCRMInvoiceObject $updatePerfexCRMInvoiceObject) { @@ -65,7 +65,8 @@ class UpdatePerfexCRMInvoice implements ShouldQueue $invoiceId = $result->payload['id']; } else { // Log::error(json_encode('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed')); - Helper::debugLoggerForPerfexCRM('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed'); + $log['message'] = 'UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed'; + Helper::debugLoggerForPerfexCRM($log); } } else{ diff --git a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php index 25afdc4d..3b05ac63 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php +++ b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php @@ -21,50 +21,28 @@ class UpdatePerfexCRMPrelude implements ShouldQueue /** @var UpdatePerfexCRMObject */ private $updatePerfexCRMObject; - /** @var UpdatePerfexCRM */ - private $nextJob1; - - /** @var UpdatePerfexCRMInvoice */ - private $nextJob2; + /** @var Boolean|null */ + private $shouldCreateInvoice; /** - * UpdatePerfexCRMPrelude constructor. * @param Transaction $transaction * @param UpdatePerfexCRMObject $updatePerfexCRMObject - * @param UpdatePerfexCRM $nextJob1 - * @param UpdatePerfexCRMInvoice $nextJob2 + * @param bool|null $shouldCreateInvoice */ - public function __construct(Transaction $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, $nextJob1, $nextJob2) + public function __construct(Transaction $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, ?bool $shouldCreateInvoice = false) { $this->transaction = $transaction; $this->updatePerfexCRMObject = $updatePerfexCRMObject; - $this->nextJob1 = $nextJob1; - $this->nextJob2 = $nextJob2; + $this->shouldCreateInvoice = $shouldCreateInvoice; } + public function handle() { $serviceTypeName = $this->transaction->owner->company->services()->where('id', $this->transaction->owner->service_id)->first()->name; $booking = $this->transaction->booking; - $bank = $booking->bank; - $bankDetails = $this->transaction->owner->service_id == 4 ? - [ - '1688_username' => $bank->account_no, - '1688_password' => $bank->holder_name, - 'payment_pin' => $bank->bank_branch, - ]: - [ - 'id' => $bank->id, - 'type' => $bank->type, - 'reference' => $bank->reference, - 'bank_name' => $bank->bank_name, - 'bank_branch' => $bank->bank_branch, - 'holder_name' => $bank->holder_name, - 'account_no' => $bank->account_no, - 'country_id' => $bank->country_id, - 'default' => $bank->default, - 'status' => $bank->status, - ]; + $bankDetails = $this->generateBankDetails($booking->bank); + $data = [ 'amount' => number_format($this->transaction->amount, 2, '.', ''), 'currency' => $this->transaction->currency_id == 1 ? "MYR" : "CNY", @@ -75,14 +53,36 @@ class UpdatePerfexCRMPrelude implements ShouldQueue 'link_autocount_or' => 'https://docs.google.com/spreadsheets/d/1Q3rJBGQ9Bo04HZp5WR9zbLp7pIW2kfDYsabxG7JON-4/edit#gid=2013983170', ]; - $result = $this->replacePlaceholders($this->updatePerfexCRMObject->getTasks(), $data); $this->updatePerfexCRMObject->setTasks($result); - /** @var UpdatePerfexCRM $nextJob1 */ - /** @var UpdatePerfexCRMInvoice $nextJob2 */ - $this->nextJob1::dispatch($this->updatePerfexCRMObject, $this->transaction, $this->nextJob2); + + UpdatePerfexCRM::dispatch($this->updatePerfexCRMObject, $this->transaction, $this->shouldCreateInvoice); } + + private function generateBankDetails($bank): array + { + return $this->transaction->owner->service_id == 4 ? + [ + '1688_username' => $bank->account_no, + '1688_password' => $bank->holder_name, + 'payment_pin' => $bank->bank_branch, + ]: + [ + 'id' => $bank->id, + 'type' => $bank->type, + 'reference' => $bank->reference, + 'bank_name' => $bank->bank_name, + 'bank_branch' => $bank->bank_branch, + 'holder_name' => $bank->holder_name, + 'account_no' => $bank->account_no, + 'country_id' => $bank->country_id, + 'default' => $bank->default, + 'status' => $bank->status, + ]; + } + + function replacePlaceholders($template, $data, $prefix = '') { foreach ($template as $key => $value) { diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingLogic.php index 0fbf2519..a93a3654 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingLogic.php @@ -17,6 +17,7 @@ use App\Classes\Modules\PerfexCRM\Processors\BookingToPerfexCRMProcessor; use App\Http\Resources\BookingResource; +use App\Models\Booking; use ErrorException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -82,6 +83,7 @@ class CreateBookingLogic extends AbstractControllerLogic $this->canCreateBooking->passes($object); + /** @var Booking $booking */ $booking = $this->createsBooking->execute($company, $object); if(config('perfexcrm.is_enabled') == 'true'){ diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingPaymentLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingPaymentLogic.php index 77d8252d..b0e4da51 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingPaymentLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingPaymentLogic.php @@ -5,27 +5,29 @@ namespace App\Classes\Modules\Bookings\ControllersLogic; use App\Classes\Exceptions\MalformedRequestException; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Modules\Bookings\DataTransferObjects\CalculationObject; use App\Classes\Modules\Bookings\Services\CalculatesBookingOutstanding; use App\Classes\Modules\Bookings\Services\FetchesBookingQuotation; use App\Classes\Modules\Companies\Services\FetchesCompanyPaymentAttemptLimit; use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyConversionObject; +use App\Classes\Modules\Vouchers\DataTransferObjects\VoucherObject; use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; use App\Classes\Modules\Transactions\Services\CreatesTransaction; -use App\Classes\Modules\Transactions\Services\UpdatesTransaction; use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; use App\Classes\Modules\Billplzs\Services\CreatesBillplzBill; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; +use App\Classes\Modules\Vouchers\Services\FetchesVoucher; +use App\Classes\Modules\Vouchers\Services\CreatesVoucher; +use App\Classes\Modules\Vouchers\Services\CreatesVoucherRedemption; +use App\Classes\Modules\Vouchers\Services\RedeemsVoucher; use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\PaymentMethodType; use App\Classes\ValueObjects\Constants\TransactionType; use App\Http\Resources\TransactionResource; -use App\Classes\Modules\Transactions\Processors\CreateCashBackTransactionProcessor; - use App\Models\Booking; use App\Models\Transaction; -use App\Models\Wallet; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -34,6 +36,7 @@ use App\Classes\Modules\Wallets\Services\RecalculatesWalletBalance; class CreateBookingPaymentLogic extends AbstractControllerLogic { + /** * @return array */ @@ -68,14 +71,24 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic /** @var UpdatesTransactionStatus */ private $updatesTransactionStatus; - /** @var CreateCashBackTransactionProcessor */ - private $createCashBackTransactionProcessor; /** @var RecalculatesWalletBalance */ private $recalculatesWalletBalance; + /** @var FetchesVoucher */ + private $fetchesVoucher; + + /** @var CreatesVoucher */ + private $createsVoucher; + + /** @var CreatesVoucherRedemption */ + private $createsVoucherRedemption; + + /** @var RedeemsVoucher */ + private $redeemsVoucher; + + /** - * CreateBookingPaymentLogic constructor. * @param FetchesBookingQuotation $fetchBookingQuotation * @param FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber @@ -84,10 +97,13 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic * @param CreatesBillplzBill $createsBillplzBill * @param UpdatesWalletBalance $updatesWalletBalance * @param UpdatesTransactionStatus $updatesTransactionStatus - * @param CreateCashBackTransactionProcessor $createCashBackTransactionProcessor * @param RecalculatesWalletBalance $recalculatesWalletBalance + * @param FetchesVoucher $fetchesVoucher + * @param CreatesVoucher $createsVoucher + * @param CreatesVoucherRedemption $createsVoucherRedemption + * @param RedeemsVoucher $redeemsVoucher */ - public function __construct(FetchesBookingQuotation $fetchBookingQuotation, FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, CalculatesBookingOutstanding $calculatesBookingOutstanding, CreatesBillplzBill $createsBillplzBill, UpdatesWalletBalance $updatesWalletBalance, UpdatesTransactionStatus $updatesTransactionStatus, CreateCashBackTransactionProcessor $createCashBackTransactionProcessor, RecalculatesWalletBalance $recalculatesWalletBalance) + public function __construct(FetchesBookingQuotation $fetchBookingQuotation, FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, CalculatesBookingOutstanding $calculatesBookingOutstanding, CreatesBillplzBill $createsBillplzBill, UpdatesWalletBalance $updatesWalletBalance, UpdatesTransactionStatus $updatesTransactionStatus, RecalculatesWalletBalance $recalculatesWalletBalance, FetchesVoucher $fetchesVoucher, CreatesVoucher $createsVoucher, CreatesVoucherRedemption $createsVoucherRedemption, RedeemsVoucher $redeemsVoucher) { $this->fetchBookingQuotation = $fetchBookingQuotation; $this->fetchesCompanyPaymentAttemptLimit = $fetchesCompanyPaymentAttemptLimit; @@ -97,75 +113,146 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic $this->createsBillplzBill = $createsBillplzBill; $this->updatesWalletBalance = $updatesWalletBalance; $this->updatesTransactionStatus = $updatesTransactionStatus; - $this->createCashBackTransactionProcessor = $createCashBackTransactionProcessor; $this->recalculatesWalletBalance = $recalculatesWalletBalance; + $this->fetchesVoucher = $fetchesVoucher; + $this->createsVoucher = $createsVoucher; + $this->createsVoucherRedemption = $createsVoucherRedemption; + $this->redeemsVoucher = $redeemsVoucher; } - /** - * @param Request $request - * @return JsonResponse - * @throws MalformedRequestException - */ public function logic(Request $request) : JsonResponse { $booking = Booking::find($request->route('id')); - $conversionObject = new CurrencyConversionObject(floatval(str_replace(',', '', $request->input('amount'))), $booking->convertible_currency_id, $booking->service_id, $booking->fix_currency_id === 1 ? 0:1, PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')]); + $conversionObject = $this->createConversionObject($request, $booking); - $outstanding = $this->calculatesBookingOutstanding->execute($booking); + $this->validatePayment($request, $booking, $conversionObject); - if($conversionObject->getAmount() > round($outstanding, 2)) throw new MalformedRequestException('Your payment must not be greater than '. $outstanding .'.'); - - $configurations = $this->fetchBookingQuotation->execute($booking->company, $conversionObject); - - $paymentAttemptLimit = $this->fetchesCompanyPaymentAttemptLimit->execute($booking->company); + $configurations = $this->fetchBookingQuotation->execute($booking->company, $conversionObject, $request->input('voucher_code')); $billNumber = $this->generatesTransactionBillNumber->execute('PYMT-'); - $paymentReference = null; + $paymentReference = $this->handlePaymentMethods($request, $booking, $configurations, $billNumber); - $amount = $configurations->getTotal(); - - if(PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')] == PaymentMethodType::PAYMENT_GATEWAY){ - $billPlzBill = $this->createsBillplzBill->execute($booking->company->name, $request->user()->email, 'This payment is made for transfer ref. '.$booking->marking, $configurations->getTotal(), $billNumber, $request->input('bank_code')); - $paymentReference = $billPlzBill->id; - } - - if(PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')] == PaymentMethodType::WALLET){ - /** @var Wallet $wallet */ - $wallet = $booking->company->wallets()->first(); - - if((float) number_format(($wallet->amount - $amount),2) < 0){ - throw new MalformedRequestException('Insufficient wallet balance. Please Top up your wallet.'); - } - - $transaction_object = new TransactionObject($billNumber, TransactionType::PAYMENT, 1, $booking->company->id, 1, PaymentMethodType::WALLET, $amount, $amount, 1, 1, 1, 0, 0, null, ApprovalStatus::APPROVED, [], ''); - $transaction = $this->createsTransaction->execute($wallet, $transaction_object); - - $paymentReference = $billNumber; - - $walletBalance = $this->recalculatesWalletBalance->execute($wallet); - $this->updatesWalletBalance->execute($wallet, $walletBalance); - } - - $billNumber = $this->generatesTransactionBillNumber->execute('PYMT-'); - - $object = new TransactionObject($billNumber, TransactionType::PAYMENT, 1, $booking->company->id, - $configurations->getConfigurations()->getBankId(), $configurations->getConversionObject()->getPaymentMethod(), - $configurations->getTotal(), $configurations->getForeignTotal(), 1, - $configurations->getConversionObject()->getCurrencyId(), $configurations->getConfigurations()->getRate(), - $configurations->getTax(), $configurations->getServiceCharge(), Carbon::now()->addMinutes($paymentAttemptLimit), ApprovalStatus::PENDING_SUBMISSION, [], $paymentReference); + $object = $this->createTransactionObject($booking, $configurations, $billNumber, $paymentReference); /** @var Transaction $transaction */ $transaction = $this->createsTransaction->execute($booking, $object); -// $cash_back_transaction = $this->createCashBackTransactionProcessor->execute($transaction); - if(PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')] == PaymentMethodType::WALLET){ - $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED); + if(PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')] == PaymentMethodType::PAYMENT_GATEWAY){ + $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::PENDING_VERIFICATION); } + // $this->handleVoucherCode($request, $booking, $configurations, $transaction); //todo-important: uncomment this for voucherify + return $this->resourceResponse(new TransactionResource($transaction)); } + private function createConversionObject(Request $request, Booking $booking): CurrencyConversionObject + { + return new CurrencyConversionObject( + floatval(str_replace(',', '', $request->input('amount'))), + $booking->convertible_currency_id, + $booking->service_id, + $booking->fix_currency_id === 1 ? 0:1, + PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')] + ); + } + private function validatePayment(Request $request, Booking $booking, CurrencyConversionObject $conversionObject): void + { + $outstanding = $this->calculatesBookingOutstanding->execute($booking); + + if($conversionObject->getAmount() > round($outstanding, 2)) + throw new MalformedRequestException('Your payment must not be greater than '. $outstanding .'.'); + } + + private function handlePaymentMethods(Request $request, Booking $booking, CalculationObject $configurations, string $billNumber): ?string + { + $paymentReference = null; + + if(PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')] == PaymentMethodType::PAYMENT_GATEWAY) + $paymentReference = $this->handlePaymentGateway($request, $booking, $configurations, $billNumber); + + if(PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')] == PaymentMethodType::WALLET) + $paymentReference = $this->handleWalletPayment($request, $booking, $configurations, $billNumber); + + return $paymentReference; + } + + private function handlePaymentGateway(Request $request, Booking $booking, CalculationObject $configurations, string $billNumber): string + { + $billPlzBill = $this->createsBillplzBill->execute( + $booking->company->name, + $request->user()->email, + 'This payment is made for transfer ref. '.$booking->marking, + $configurations->getTotal(), + $billNumber, + $request->input('bank_code') + ); + + return $billPlzBill->id; + } + + private function handleWalletPayment(Request $request, Booking $booking, CalculationObject $configurations, string $billNumber): string + { + $wallet = $booking->company->wallets()->first(); + + $amount = $configurations->getTotal(); + if((float) number_format(($wallet->amount - $amount),2) < 0) + throw new MalformedRequestException('Insufficient wallet balance. Please Top up your wallet.'); + + $transactionObject = new TransactionObject($billNumber, TransactionType::PAYMENT, 1, $booking->company->id, 1, PaymentMethodType::WALLET, $amount, $amount, 1, 1, 1, 0, 0, null, ApprovalStatus::APPROVED, [], ''); + $this->createsTransaction->execute($wallet, $transactionObject); + + $walletBalance = $this->recalculatesWalletBalance->execute($wallet); + $this->updatesWalletBalance->execute($wallet, $walletBalance); + + return $billNumber; + } + + private function createTransactionObject(Booking $booking, CalculationObject $configurations, string $billNumber, ?string $paymentReference): TransactionObject + { + return new TransactionObject( + $billNumber, + TransactionType::PAYMENT, + 1, + $booking->company->id, + $configurations->getConfigurations()->getBankId(), + $configurations->getConversionObject()->getPaymentMethod(), + $configurations->getTotal(), + $configurations->getForeignTotal(), + 1, + $configurations->getConversionObject()->getCurrencyId(), + $configurations->getConfigurations()->getRate(), + $configurations->getTax(), + $configurations->getServiceCharge(), + Carbon::now()->addMinutes($this->fetchesCompanyPaymentAttemptLimit->execute($booking->company)), + ApprovalStatus::PENDING_SUBMISSION, + [], + $paymentReference + ); + } + + private function handleVoucherCode(Request $request, Booking $booking, CalculationObject $configurations, Transaction $transaction): void + { + $voucherCode = $request->input('voucher_code'); + if($voucherCode){ + $employee = $booking->company->employees()->first(); + + $result = $this->redeemsVoucher->execute($voucherCode, $configurations->getSubTotal(), $employee); + $voucher = $result->voucher; + $redemptionId = $result->id; + + $voucherValue = $voucher->discount->amount_off ?? ($voucher->discount->percent_off ?? 0.00); + $voucherObject = new VoucherObject($voucher->code, $voucher->metadata->name ?? "", $voucher->discount->type, $voucherValue); + $voucher = $this->createsVoucher->execute($voucherObject); + + if(!$voucher) + $voucher = $this->fetchesVoucher->execute(['code' => $voucherObject->getCode()]); + + $this->createsVoucherRedemption->execute($redemptionId, $voucher->id, $employee->id, $configurations->getVoucherDiscountAmount()); + } + } } + diff --git a/app/Classes/Modules/PerfexCRM/Processors/BookingToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/BookingToPerfexCRMProcessor.php index 76b01825..930d3765 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/BookingToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/BookingToPerfexCRMProcessor.php @@ -2,6 +2,7 @@ namespace App\Classes\Modules\PerfexCRM\Processors; +use App\Classes\Exceptions\MalformedRequestException; use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject; use App\Classes\Jobs\UpdatePerfexCRM; use App\Models\Booking; @@ -11,10 +12,10 @@ class BookingToPerfexCRMProcessor { /** * @param Booking $booking - * @return \Illuminate\Database\Eloquent\Model - * @throws \App\Classes\Exceptions\MalformedRequestException + * @return bool + * @throws MalformedRequestException */ - public function execute(Booking $booking) + public function execute(Booking $booking): bool { $companyReference = $booking->company->reference; $companyName = $booking->company->name; @@ -37,6 +38,7 @@ class BookingToPerfexCRMProcessor [], [] ); + UpdatePerfexCRM::dispatch($updatePerfexCRMObject, null, null); return true; diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php new file mode 100644 index 00000000..3a2d2a5b --- /dev/null +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -0,0 +1,169 @@ +owner instanceof \App\Models\Booking) { + $bookingInfo = $this->extractBookingInfo($model); + $projectName = 'Exchange | ' . $bookingInfo['serviceTypeName'] . ' | ' . $bookingInfo['bookingMarking']; + $tasks = $this->defineTasks($model, $status); + + if(count($tasks) > 0) { + $updatePerfexCRMObject = new UpdatePerfexCRMObject( + $bookingInfo['companyName'], + $bookingInfo['companyReference'], + $bookingInfo['contactName'], + $bookingInfo['contactEmail'], + $bookingInfo['bookingMarking'], + $projectName, + PerfexCRMProjectStatus::IN_PROGRESS, + [], + $tasks + ); + $this->dispatchUpdateJob($model, $status, $updatePerfexCRMObject); + } + } + } catch (\Exception $exception) { + Log::error('TransactionToPerfexCRMProcessor debug:'); + Log::error($exception); + } + return true; + } + + private function extractBookingInfo(Transaction $model): array + { + $bookingInfo = []; + $bookingInfo['companyReference'] = $model->owner->company->reference; + $bookingInfo['companyName'] = $model->owner->company->name; + $bookingInfo['contactEmail'] = $model->owner->company->employees()->first()->email; + $bookingInfo['contactName'] = $model->owner->company->employees()->first()->name; + $bookingInfo['bookingMarking'] = $model->owner->marking; + $bookingInfo['serviceTypeName'] = $model->owner->company->services()->where('id', $model->owner->service_id)->first()->name; + + return $bookingInfo; + } + + private function defineTasks(Transaction $model, int $status): array + { + $tasks = []; + + if($status === ApprovalStatus::PENDING_VERIFICATION && (int) $model->type === TransactionType::PAYMENT) { + $tasks = $this->definePaymentTasks($model); + } elseif($status === ApprovalStatus::PENDING_VERIFICATION && $model->type === TransactionType::PURCHASE_ORDER) { + if($model->owner->service_id === 1 || $model->owner->service_id === 3) { + $tasks = [PerfexCRMTasks::TASK_PURCHASE_ORDER_1]; + } + } elseif($status === ApprovalStatus::APPROVED && $model->type === TransactionType::PAYMENT) { + $task = PerfexCRMTasks::TASK_1_DAY_TRANSFER_2; + $task['status'] = PerfexCRMTaskStatus::COMPLETED; + $tasks = [$task]; + } + + return $tasks; + } + + private function definePaymentTasks(Transaction $model): array + { + $tasks = [ +// PerfexCRMTasks::TASK_1 + ]; + + if ($model->owner->service_id === 1) { + $tasks = array_merge($tasks, $this->oneDayTransferTasks()); + } elseif ($model->owner->service_id === 3) { + $tasks = array_merge($tasks, $this->threeDayTransferTasks()); + } elseif ($model->owner->service_id === 4) { + $tasks = array_merge($tasks, $this->payment1688Tasks()); + } + + if ($model->owner->service_id === 1 || $model->owner->service_id === 3) { + $purchaseOrder = $model->booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->complete()->first(); + if(is_null($purchaseOrder)){ + $tasks = array_merge($tasks, $this->purchaseOrderTasks()); + } + } + + return $tasks; + } + + private function oneDayTransferTasks(): array + { + return [ +// PerfexCRMTasks::TASK_1_DAY_TRANSFER_1, + PerfexCRMTasks::TASK_1_DAY_TRANSFER_2, +// PerfexCRMTasks::TASK_1_DAY_TRANSFER_3, +// PerfexCRMTasks::TASK_1_DAY_TRANSFER_3_1, +// PerfexCRMTasks::TASK_1_DAY_TRANSFER_4, + PerfexCRMTasks::TASK_1_DAY_TRANSFER_5, + PerfexCRMTasks::TASK_1_DAY_TRANSFER_6 + ]; + } + + private function threeDayTransferTasks(): array + { + return [ +// PerfexCRMTasks::TASK_3_DAY_TRANSFER_1, + PerfexCRMTasks::TASK_3_DAY_TRANSFER_2, +// PerfexCRMTasks::TASK_3_DAY_TRANSFER_3, +// PerfexCRMTasks::TASK_3_DAY_TRANSFER_3_1, +// PerfexCRMTasks::TASK_3_DAY_TRANSFER_4, + PerfexCRMTasks::TASK_3_DAY_TRANSFER_5, + PerfexCRMTasks::TASK_3_DAY_TRANSFER_6 + ]; + } + + private function payment1688Tasks(): array + { + return [ +// PerfexCRMTasks::TASK_1688_PAYMENT_1, + PerfexCRMTasks::TASK_1688_PAYMENT_2, +// PerfexCRMTasks::TASK_1688_PAYMENT_3, +// PerfexCRMTasks::TASK_1688_PAYMENT_3_1, +// PerfexCRMTasks::TASK_1688_PAYMENT_4, + PerfexCRMTasks::TASK_1688_PAYMENT_5, +// PerfexCRMTasks::TASK_1688_PAYMENT_6, + PerfexCRMTasks::TASK_1688_PAYMENT_7, + PerfexCRMTasks::TASK_1688_PAYMENT_8, + PerfexCRMTasks::TASK_1688_PAYMENT_9, + PerfexCRMTasks::TASK_1688_PAYMENT_10, + PerfexCRMTasks::TASK_1688_PAYMENT_11, + PerfexCRMTasks::TASK_1688_PAYMENT_12, + PerfexCRMTasks::TASK_1688_PAYMENT_13 + ]; + } + + private function purchaseOrderTasks(): array + { + $potask1 = PerfexCRMTasks::TASK_PURCHASE_ORDER_1; + $potask1['status'] = PerfexCRMTaskStatus::NOT_STARTED; + + return [ + $potask1, +// PerfexCRMTasks::TASK_PURCHASE_ORDER_2 + ]; + } + + private function dispatchUpdateJob(Transaction $model, int $status, UpdatePerfexCRMObject $updatePerfexCRMObject) + { + Log::info(json_encode($updatePerfexCRMObject->getTasks())); + $withInvoice = ($model->type === TransactionType::PAYMENT && $model->owner === Booking::class && $status === ApprovalStatus::APPROVED); + UpdatePerfexCRMPrelude::dispatch($model, $updatePerfexCRMObject, $withInvoice); + } +} diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 752c9644..0bfe2ba5 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -109,7 +109,7 @@ class UpdatePerfexCRMProcessor */ public function execute(UpdatePerfexCRMObject $updatePerfexCRMObject) { $projectId = ""; - + // Customer has to exist first before Project can appear under it // Check with Perfex CRM, if this user (email) was previously a lead, should automatically now become a customer $crmCompany = $updatePerfexCRMObject->getCompanyName(); @@ -205,6 +205,7 @@ class UpdatePerfexCRMProcessor // Get existing or create task $result = $this->fetchesPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, 'project', $projectId); if(isset($result->payload)){ + Log::info(json_encode([$taskStatus != PerfexCRMTaskStatus::NOT_STARTED, $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED])); if($taskStatus != PerfexCRMTaskStatus::NOT_STARTED && $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED) { $task = $result->payload[0]; diff --git a/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php b/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php index 2091c3cf..9d6b9fe4 100644 --- a/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php +++ b/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php @@ -3,23 +3,24 @@ namespace App\Classes\Modules\Transactions\Services; use App\Classes\General\Eloquent\AbstractUpdateRecord; +use App\Classes\Modules\PerfexCRM\Processors\TransactionToPerfexCRMProcessorV2; use App\Models\Transaction; use App\Classes\Modules\PerfexCRM\Processors\TransactionToPerfexCRMProcessor; class UpdatesTransactionStatus extends AbstractUpdateRecord { - /** @var TransactionToPerfexCRMProcessor */ + /** @var TransactionToPerfexCRMProcessorV2 */ private $transactionToPerfexCRMProcessor; /** - * UpdatesTransactionStatus constructor. - * @param TransactionToPerfexCRMProcessor $transactionToPerfexCRMProcessor + * @param TransactionToPerfexCRMProcessorV2 $transactionToPerfexCRMProcessor */ - public function __construct(TransactionToPerfexCRMProcessor $transactionToPerfexCRMProcessor) + public function __construct(TransactionToPerfexCRMProcessorV2 $transactionToPerfexCRMProcessor) { $this->transactionToPerfexCRMProcessor = $transactionToPerfexCRMProcessor; } + /** * @param Transaction $model * @param int $status diff --git a/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php b/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php index 9e19ccec..4129f2a8 100644 --- a/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php +++ b/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php @@ -43,9 +43,9 @@ class PerfexCRMTasks ○ Outcomes: The payment will be approved in exchange, allowing the next steps in the process to be initiated.
', 'milestone' => '', 'reference' => 'TASK_1_DAY_TRANSFER_2', - 'on_task_completion' => 'TASK_1_DAY_TRANSFER_3,TASK_1_DAY_TRANSFER_5', + 'on_task_completion' => 'TASK_1_DAY_TRANSFER_5', 'department' => 'Accounts', - 'status' => '', + 'status' => PerfexCRMTaskStatus::IN_PROGRESS, 'priority' => PerfexCRMTaskPriority::HIGH, 'duedate' => 0 ]; @@ -160,9 +160,9 @@ class PerfexCRMTasks ○ Link to order page: {link_transfer}
', 'milestone' => '', 'reference' => 'TASK_3_DAY_TRANSFER_2', - 'on_task_completion' => 'TASK_3_DAY_TRANSFER_3,TASK_3_DAY_TRANSFER_5', + 'on_task_completion' => 'TASK_3_DAY_TRANSFER_5', 'department' => 'Accounts', - 'status' => '', + 'status' => PerfexCRMTaskStatus::IN_PROGRESS, 'priority' => PerfexCRMTaskPriority::HIGH, 'duedate' => 0 ]; @@ -286,9 +286,9 @@ class PerfexCRMTasks ○ Outcomes: The payment will be approved in exchange, allowing the next steps in the process to be initiated.
', 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_2', - 'on_task_completion' => 'TASK_1688_PAYMENT_3,TASK_1688_PAYMENT_5', + 'on_task_completion' => 'TASK_1688_PAYMENT_5', 'department' => 'Accounts', - 'status' => '', + 'status' => PerfexCRMTaskStatus::IN_PROGRESS, 'priority' => PerfexCRMTaskPriority::HIGH, 'duedate' => 0 ]; @@ -353,7 +353,7 @@ class PerfexCRMTasks ○ Outcomes: The order is placed with a supplier and the customer\'s order is confirmed.
', 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_5', - 'on_task_completion' => 'TASK_1688_PAYMENT_6', + 'on_task_completion' => 'TASK_1688_PAYMENT_7', 'department' => 'Operations', 'status' => '', 'priority' => PerfexCRMTaskPriority::HIGH, @@ -454,14 +454,14 @@ class PerfexCRMTasks ○ link: {link_transfer}
', 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_12', - 'on_task_completion' => 'TASK_1688_PAYMENT_13', + 'on_task_completion' => '', 'department' => 'Operations', 'status' => '', 'priority' => PerfexCRMTaskPriority::LOW, 'duedate' => 1 ]; public const TASK_1688_PAYMENT_13 = [ - 'name' => 'Complete Order bookeeping', + 'name' => 'Complete Order bookkeeping', 'description' => '○ Purpose: To complete the bookkeeping for the booking.
○ Initial Status: Not Started
○ Deadline: Same day
@@ -493,7 +493,7 @@ class PerfexCRMTasks ○ Outcomes: Bank transaction is mapped successfully, allowing the next steps in the process to be initiated.
', 'milestone' => '', 'reference' => 'TASK_PURCHASE_ORDER_1', - 'on_task_completion' => 'TASK_PURCHASE_ORDER_2', + 'on_task_completion' => '', 'department' => 'Operations', 'status' => PerfexCRMTaskStatus::IN_PROGRESS, 'priority' => PerfexCRMTaskPriority::LOW, diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 0df23186..cf2dddb9 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -25,6 +25,11 @@ class Transaction extends AbstractModel implements Documentable, Transactionable use SoftDeletes; use LogData; + protected $casts = [ + 'type' => 'int', + 'status' => 'int', + ]; + protected $table = 'transactions'; public function owner(): morphTo @@ -112,6 +117,14 @@ class Transaction extends AbstractModel implements Documentable, Transactionable return $this->HasOne(GroupTransaction::class, 'transaction_id'); } + /** + * @return HasOne + */ + public function voucherRedemption(): HasOne + { + return $this->HasOne(VoucherRedemption::class, 'transaction_id', 'id'); + } + public function convert_original_amount() { if($this->booking()->first()->fix_currency_id !== 1) { From f7796fe957942536a4689b0ea5f1adb2cb60e80b Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 04:12:01 +0800 Subject: [PATCH 02/20] automatically complete tasks --- .../PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 3a2d2a5b..39c6de77 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -162,7 +162,6 @@ class TransactionToPerfexCRMProcessorV2 private function dispatchUpdateJob(Transaction $model, int $status, UpdatePerfexCRMObject $updatePerfexCRMObject) { - Log::info(json_encode($updatePerfexCRMObject->getTasks())); $withInvoice = ($model->type === TransactionType::PAYMENT && $model->owner === Booking::class && $status === ApprovalStatus::APPROVED); UpdatePerfexCRMPrelude::dispatch($model, $updatePerfexCRMObject, $withInvoice); } From 2e9e7f9cc06d52c791bb0360e1b8c8a1394d9fc8 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 04:23:15 +0800 Subject: [PATCH 03/20] automatically complete tasks --- .../CreateBookingPaymentLogic.php | 128 ++++++++---------- 1 file changed, 60 insertions(+), 68 deletions(-) diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingPaymentLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingPaymentLogic.php index b0e4da51..99b09c3f 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingPaymentLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingPaymentLogic.php @@ -10,16 +10,16 @@ use App\Classes\Modules\Bookings\Services\CalculatesBookingOutstanding; use App\Classes\Modules\Bookings\Services\FetchesBookingQuotation; use App\Classes\Modules\Companies\Services\FetchesCompanyPaymentAttemptLimit; use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyConversionObject; -use App\Classes\Modules\Vouchers\DataTransferObjects\VoucherObject; +//use App\Classes\Modules\Vouchers\DataTransferObjects\VoucherObject; use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; use App\Classes\Modules\Transactions\Services\CreatesTransaction; use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; use App\Classes\Modules\Billplzs\Services\CreatesBillplzBill; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; -use App\Classes\Modules\Vouchers\Services\FetchesVoucher; -use App\Classes\Modules\Vouchers\Services\CreatesVoucher; -use App\Classes\Modules\Vouchers\Services\CreatesVoucherRedemption; -use App\Classes\Modules\Vouchers\Services\RedeemsVoucher; +//use App\Classes\Modules\Vouchers\Services\FetchesVoucher; +//use App\Classes\Modules\Vouchers\Services\CreatesVoucher; +//use App\Classes\Modules\Vouchers\Services\CreatesVoucherRedemption; +//use App\Classes\Modules\Vouchers\Services\RedeemsVoucher; use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\PaymentMethodType; @@ -35,6 +35,29 @@ use App\Classes\Modules\Wallets\Services\RecalculatesWalletBalance; class CreateBookingPaymentLogic extends AbstractControllerLogic { + /** + * @param FetchesBookingQuotation $fetchBookingQuotation + * @param FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit + * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber + * @param CreatesTransaction $createsTransaction + * @param CalculatesBookingOutstanding $calculatesBookingOutstanding + * @param CreatesBillplzBill $createsBillplzBill + * @param UpdatesWalletBalance $updatesWalletBalance + * @param UpdatesTransactionStatus $updatesTransactionStatus + * @param RecalculatesWalletBalance $recalculatesWalletBalance + */ + public function __construct(FetchesBookingQuotation $fetchBookingQuotation, FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, CalculatesBookingOutstanding $calculatesBookingOutstanding, CreatesBillplzBill $createsBillplzBill, UpdatesWalletBalance $updatesWalletBalance, UpdatesTransactionStatus $updatesTransactionStatus, RecalculatesWalletBalance $recalculatesWalletBalance) + { + $this->fetchBookingQuotation = $fetchBookingQuotation; + $this->fetchesCompanyPaymentAttemptLimit = $fetchesCompanyPaymentAttemptLimit; + $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; + $this->createsTransaction = $createsTransaction; + $this->calculatesBookingOutstanding = $calculatesBookingOutstanding; + $this->createsBillplzBill = $createsBillplzBill; + $this->updatesWalletBalance = $updatesWalletBalance; + $this->updatesTransactionStatus = $updatesTransactionStatus; + $this->recalculatesWalletBalance = $recalculatesWalletBalance; + } /** @@ -74,51 +97,20 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic /** @var RecalculatesWalletBalance */ private $recalculatesWalletBalance; - - /** @var FetchesVoucher */ - private $fetchesVoucher; - - /** @var CreatesVoucher */ - private $createsVoucher; - - /** @var CreatesVoucherRedemption */ - private $createsVoucherRedemption; - - /** @var RedeemsVoucher */ - private $redeemsVoucher; +// +// /** @var FetchesVoucher */ +// private $fetchesVoucher; +// +// /** @var CreatesVoucher */ +// private $createsVoucher; +// +// /** @var CreatesVoucherRedemption */ +// private $createsVoucherRedemption; +// +// /** @var RedeemsVoucher */ +// private $redeemsVoucher; - /** - * @param FetchesBookingQuotation $fetchBookingQuotation - * @param FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit - * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber - * @param CreatesTransaction $createsTransaction - * @param CalculatesBookingOutstanding $calculatesBookingOutstanding - * @param CreatesBillplzBill $createsBillplzBill - * @param UpdatesWalletBalance $updatesWalletBalance - * @param UpdatesTransactionStatus $updatesTransactionStatus - * @param RecalculatesWalletBalance $recalculatesWalletBalance - * @param FetchesVoucher $fetchesVoucher - * @param CreatesVoucher $createsVoucher - * @param CreatesVoucherRedemption $createsVoucherRedemption - * @param RedeemsVoucher $redeemsVoucher - */ - public function __construct(FetchesBookingQuotation $fetchBookingQuotation, FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, CalculatesBookingOutstanding $calculatesBookingOutstanding, CreatesBillplzBill $createsBillplzBill, UpdatesWalletBalance $updatesWalletBalance, UpdatesTransactionStatus $updatesTransactionStatus, RecalculatesWalletBalance $recalculatesWalletBalance, FetchesVoucher $fetchesVoucher, CreatesVoucher $createsVoucher, CreatesVoucherRedemption $createsVoucherRedemption, RedeemsVoucher $redeemsVoucher) - { - $this->fetchBookingQuotation = $fetchBookingQuotation; - $this->fetchesCompanyPaymentAttemptLimit = $fetchesCompanyPaymentAttemptLimit; - $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; - $this->createsTransaction = $createsTransaction; - $this->calculatesBookingOutstanding = $calculatesBookingOutstanding; - $this->createsBillplzBill = $createsBillplzBill; - $this->updatesWalletBalance = $updatesWalletBalance; - $this->updatesTransactionStatus = $updatesTransactionStatus; - $this->recalculatesWalletBalance = $recalculatesWalletBalance; - $this->fetchesVoucher = $fetchesVoucher; - $this->createsVoucher = $createsVoucher; - $this->createsVoucherRedemption = $createsVoucherRedemption; - $this->redeemsVoucher = $redeemsVoucher; - } public function logic(Request $request) : JsonResponse { @@ -234,25 +226,25 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic ); } - private function handleVoucherCode(Request $request, Booking $booking, CalculationObject $configurations, Transaction $transaction): void - { - $voucherCode = $request->input('voucher_code'); - if($voucherCode){ - $employee = $booking->company->employees()->first(); - - $result = $this->redeemsVoucher->execute($voucherCode, $configurations->getSubTotal(), $employee); - $voucher = $result->voucher; - $redemptionId = $result->id; - - $voucherValue = $voucher->discount->amount_off ?? ($voucher->discount->percent_off ?? 0.00); - $voucherObject = new VoucherObject($voucher->code, $voucher->metadata->name ?? "", $voucher->discount->type, $voucherValue); - $voucher = $this->createsVoucher->execute($voucherObject); - - if(!$voucher) - $voucher = $this->fetchesVoucher->execute(['code' => $voucherObject->getCode()]); - - $this->createsVoucherRedemption->execute($redemptionId, $voucher->id, $employee->id, $configurations->getVoucherDiscountAmount()); - } - } +// private function handleVoucherCode(Request $request, Booking $booking, CalculationObject $configurations, Transaction $transaction): void +// { +// $voucherCode = $request->input('voucher_code'); +// if($voucherCode){ +// $employee = $booking->company->employees()->first(); +// +// $result = $this->redeemsVoucher->execute($voucherCode, $configurations->getSubTotal(), $employee); +// $voucher = $result->voucher; +// $redemptionId = $result->id; +// +// $voucherValue = $voucher->discount->amount_off ?? ($voucher->discount->percent_off ?? 0.00); +// $voucherObject = new VoucherObject($voucher->code, $voucher->metadata->name ?? "", $voucher->discount->type, $voucherValue); +// $voucher = $this->createsVoucher->execute($voucherObject); +// +// if(!$voucher) +// $voucher = $this->fetchesVoucher->execute(['code' => $voucherObject->getCode()]); +// +// $this->createsVoucherRedemption->execute($redemptionId, $voucher->id, $employee->id, $configurations->getVoucherDiscountAmount()); +// } +// } } From afd51405b9f4e27551f68c50939306accd2646e1 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 04:25:09 +0800 Subject: [PATCH 04/20] automatically complete tasks --- .../Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 0bfe2ba5..13f2991f 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -205,7 +205,7 @@ class UpdatePerfexCRMProcessor // Get existing or create task $result = $this->fetchesPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, 'project', $projectId); if(isset($result->payload)){ - Log::info(json_encode([$taskStatus != PerfexCRMTaskStatus::NOT_STARTED, $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED])); + Log::info(json_encode([$taskStatus != PerfexCRMTaskStatus::NOT_STARTED, $result->payload[0]['status']])); if($taskStatus != PerfexCRMTaskStatus::NOT_STARTED && $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED) { $task = $result->payload[0]; From 9d996656695981383e7682f205d0879de6f93b42 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 04:29:38 +0800 Subject: [PATCH 05/20] automatically complete tasks --- .../Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 13f2991f..bae45242 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -198,7 +198,9 @@ class UpdatePerfexCRMProcessor } $taskStatus = PerfexCRMTaskStatus::NOT_STARTED; + Log::info(json_encode($result->payload)); if($tasks[$count]['status'] != ''){ + Log::info(json_encode($tasks[$count]['status'])); $taskStatus = $tasks[$count]['status']; } From 09f20ca34c5b097b16134e458ad48dd3fba96b11 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 04:37:21 +0800 Subject: [PATCH 06/20] automatically complete tasks --- .../PerfexCRM/Processors/UpdatePerfexCRMProcessor.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index bae45242..3df1cac3 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -198,17 +198,15 @@ class UpdatePerfexCRMProcessor } $taskStatus = PerfexCRMTaskStatus::NOT_STARTED; - Log::info(json_encode($result->payload)); if($tasks[$count]['status'] != ''){ - Log::info(json_encode($tasks[$count]['status'])); $taskStatus = $tasks[$count]['status']; } // Get existing or create task $result = $this->fetchesPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, 'project', $projectId); if(isset($result->payload)){ - Log::info(json_encode([$taskStatus != PerfexCRMTaskStatus::NOT_STARTED, $result->payload[0]['status']])); - if($taskStatus != PerfexCRMTaskStatus::NOT_STARTED && $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED) + //&& $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED + if($taskStatus != PerfexCRMTaskStatus::NOT_STARTED ) { $task = $result->payload[0]; $result = $this->updatesPerfexCRMTask->execute($task['id'], $task['name'], $task['milestone'], $task['rel_id'], $taskStatus, $task['startdate'], is_null($task['duedate']) ? '': $task['duedate']); From 4e3a82969ddafc0ba976ac39a65d0f9fac2ddae3 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 05:20:23 +0800 Subject: [PATCH 07/20] automatically complete tasks --- .../TransactionToPerfexCRMProcessorV2.php | 95 +++++++++++++++++-- 1 file changed, 85 insertions(+), 10 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 39c6de77..a074bb0f 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -63,17 +63,85 @@ class TransactionToPerfexCRMProcessorV2 private function defineTasks(Transaction $model, int $status): array { $tasks = []; + $ownerServiceId = $model->owner->owner->service_id; - if($status === ApprovalStatus::PENDING_VERIFICATION && (int) $model->type === TransactionType::PAYMENT) { - $tasks = $this->definePaymentTasks($model); - } elseif($status === ApprovalStatus::PENDING_VERIFICATION && $model->type === TransactionType::PURCHASE_ORDER) { - if($model->owner->service_id === 1 || $model->owner->service_id === 3) { - $tasks = [PerfexCRMTasks::TASK_PURCHASE_ORDER_1]; - } - } elseif($status === ApprovalStatus::APPROVED && $model->type === TransactionType::PAYMENT) { - $task = PerfexCRMTasks::TASK_1_DAY_TRANSFER_2; - $task['status'] = PerfexCRMTaskStatus::COMPLETED; - $tasks = [$task]; + if ($status === ApprovalStatus::PENDING_VERIFICATION) { + $tasks = $this->handlePendingVerificationStatus($model, $ownerServiceId); + } elseif ($status === ApprovalStatus::APPROVED) { + $tasks = $this->handleApprovedStatus($model, $ownerServiceId); + } + + return $tasks; + } + + private function handlePendingVerificationStatus(Transaction $model, int $serviceId): array + { + $tasks = []; + switch($model->type) { + case TransactionType::PAYMENT: + $tasks = $this->definePaymentTasks($model); + break; + case TransactionType::PURCHASE_ORDER: + if ($serviceId === 1 || $serviceId === 3) { + $tasks = [PerfexCRMTasks::TASK_PURCHASE_ORDER_1]; + } + break; + case TransactionType::BILL: + $tasks = $this->handleBillPendingStatus($serviceId); + break; + } + + return $tasks; + } + + private function handleApprovedStatus(Transaction $model, int $serviceId): array + { + $tasks = []; + switch($model->type) { + case TransactionType::PAYMENT: + $tasks = $this->handlePaymentApprovedStatus($serviceId); + break; + case TransactionType::BILL: + if ($serviceId === 4) { + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1688_PAYMENT_9, PerfexCRMTasks::TASK_1688_PAYMENT_10); + } + break; + } + + return $tasks; + } + + private function handlePaymentApprovedStatus(int $serviceId): array + { + $tasks = []; + switch ($serviceId) { + case 1: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1_DAY_TRANSFER_2, PerfexCRMTasks::TASK_1_DAY_TRANSFER_5); + break; + case 3: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_3_DAY_TRANSFER_2, PerfexCRMTasks::TASK_3_DAY_TRANSFER_5); + break; + case 4: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1688_PAYMENT_2, PerfexCRMTasks::TASK_1688_PAYMENT_5); + break; + } + + return $tasks; + } + + private function handleBillPendingStatus(int $serviceId): array + { + $tasks = []; + switch ($serviceId) { + case 1: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1_DAY_TRANSFER_5, PerfexCRMTasks::TASK_1_DAY_TRANSFER_6); + break; + case 3: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_3_DAY_TRANSFER_5, PerfexCRMTasks::TASK_3_DAY_TRANSFER_6); + break; + case 4: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1688_PAYMENT_5, PerfexCRMTasks::TASK_1688_PAYMENT_7); + break; } return $tasks; @@ -165,4 +233,11 @@ class TransactionToPerfexCRMProcessorV2 $withInvoice = ($model->type === TransactionType::PAYMENT && $model->owner === Booking::class && $status === ApprovalStatus::APPROVED); UpdatePerfexCRMPrelude::dispatch($model, $updatePerfexCRMObject, $withInvoice); } + + private function completeTask($startTask, $endTask) { + $startTask['status'] = PerfexCRMTaskStatus::COMPLETED; + $endTask['status'] = PerfexCRMTaskStatus::IN_PROGRESS; + + return [$startTask, $endTask]; + } } From c99cfa14c5869ec5245c5a4fc22881c73b9ddf0f Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 05:45:06 +0800 Subject: [PATCH 08/20] automatically complete tasks --- .../Processors/TransactionToPerfexCRMProcessorV2.php | 6 ++++-- .../PerfexCRM/Processors/UpdatePerfexCRMProcessor.php | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index a074bb0f..570ffdaa 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -63,7 +63,7 @@ class TransactionToPerfexCRMProcessorV2 private function defineTasks(Transaction $model, int $status): array { $tasks = []; - $ownerServiceId = $model->owner->owner->service_id; + $ownerServiceId = $model->type === TransactionType::BILL ? $model->owner->owner->service_id : $model->owner->service_id; if ($status === ApprovalStatus::PENDING_VERIFICATION) { $tasks = $this->handlePendingVerificationStatus($model, $ownerServiceId); @@ -83,7 +83,9 @@ class TransactionToPerfexCRMProcessorV2 break; case TransactionType::PURCHASE_ORDER: if ($serviceId === 1 || $serviceId === 3) { - $tasks = [PerfexCRMTasks::TASK_PURCHASE_ORDER_1]; + $task = PerfexCRMTasks::TASK_PURCHASE_ORDER_1; + $task['status'] = PerfexCRMTaskStatus::IN_PROGRESS; + $tasks = [$task]; } break; case TransactionType::BILL: diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 3df1cac3..7527760f 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -206,6 +206,7 @@ class UpdatePerfexCRMProcessor $result = $this->fetchesPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, 'project', $projectId); if(isset($result->payload)){ //&& $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED + Log::info(json_encode([$taskStatus])); if($taskStatus != PerfexCRMTaskStatus::NOT_STARTED ) { $task = $result->payload[0]; From 3d1402a4fb675995e161514de080f8410a66c944 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 05:52:14 +0800 Subject: [PATCH 09/20] automatically complete tasks --- .../Processors/CreateSupplierTransactionProcessor.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php index 65a52d99..b37ac355 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php @@ -90,10 +90,12 @@ class CreateSupplierTransactionProcessor $object = new TransactionObject($billNumber, TransactionType::BILL, $supplier->id, 1, $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, $payment->original_amount * (1 / $rate), $payment->original_amount, 1, $payment->original_currency_id, - $rate, 0, $serviceCharge, null, ApprovalStatus::PENDING_VERIFICATION); + $rate, 0, $serviceCharge, null, ApprovalStatus::PENDING_SUBMISSION); /** @var Transaction $billTransaction */ $billTransaction = $this->createsTransaction->execute($payment, $object); + $this->updatesTransactionStatus->execute($billTransaction, ApprovalStatus::PENDING_VERIFICATION); + $this->pushBill($billTransaction); $transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-'); @@ -140,4 +142,4 @@ class CreateSupplierTransactionProcessor $this->transferFee->push($transferFee); } -} \ No newline at end of file +} From ebca79aee29740c2484fe8b51bd6f80b806b1d5a Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 05:55:22 +0800 Subject: [PATCH 10/20] automatically complete tasks --- .../PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 570ffdaa..0ea861d7 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -145,6 +145,7 @@ class TransactionToPerfexCRMProcessorV2 $tasks = $this->completeTask(PerfexCRMTasks::TASK_1688_PAYMENT_5, PerfexCRMTasks::TASK_1688_PAYMENT_7); break; } + dd($tasks); return $tasks; } From 1b43e4d1e3be04e45200bc5887a0d6fd6c5f4956 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:02:53 +0800 Subject: [PATCH 11/20] automatically complete tasks --- .../Processors/CreateSupplierTransactionProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php index b37ac355..735ee4b6 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php @@ -95,7 +95,7 @@ class CreateSupplierTransactionProcessor /** @var Transaction $billTransaction */ $billTransaction = $this->createsTransaction->execute($payment, $object); $this->updatesTransactionStatus->execute($billTransaction, ApprovalStatus::PENDING_VERIFICATION); - +dd($billTransaction); $this->pushBill($billTransaction); $transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-'); From c0dcdfd942a5e691fbb437bfc5b27c6a0109e5c9 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:07:13 +0800 Subject: [PATCH 12/20] automatically complete tasks --- .../Processors/TransactionToPerfexCRMProcessorV2.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 0ea861d7..07525e10 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -20,8 +20,8 @@ class TransactionToPerfexCRMProcessorV2 public function execute(Transaction $model, int $status) { try { - if($model->owner instanceof \App\Models\Booking) { - $bookingInfo = $this->extractBookingInfo($model); + if(in_array($model->type, [TransactionType::PAYMENT, TransactionType::BILL, TransactionType::PURCHASE_ORDER])) { + $bookingInfo = $this->extractBookingInfo($model->type === TransactionType::BILL ? $model->owner : $model); $projectName = 'Exchange | ' . $bookingInfo['serviceTypeName'] . ' | ' . $bookingInfo['bookingMarking']; $tasks = $this->defineTasks($model, $status); From 9e40be83f08c31c0029ed0e725fd6c021cd19df3 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:07:34 +0800 Subject: [PATCH 13/20] automatically complete tasks --- .../Processors/CreateSupplierTransactionProcessor.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php index 735ee4b6..9b944a5b 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php @@ -95,7 +95,6 @@ class CreateSupplierTransactionProcessor /** @var Transaction $billTransaction */ $billTransaction = $this->createsTransaction->execute($payment, $object); $this->updatesTransactionStatus->execute($billTransaction, ApprovalStatus::PENDING_VERIFICATION); -dd($billTransaction); $this->pushBill($billTransaction); $transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-'); From ef1b63870f9d176277eea8dac9c4534b9e16d572 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:08:27 +0800 Subject: [PATCH 14/20] automatically complete tasks --- .../PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 07525e10..2f7ff77a 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -145,7 +145,6 @@ class TransactionToPerfexCRMProcessorV2 $tasks = $this->completeTask(PerfexCRMTasks::TASK_1688_PAYMENT_5, PerfexCRMTasks::TASK_1688_PAYMENT_7); break; } - dd($tasks); return $tasks; } From 85a7a09e32516c3f2f15ae01284482a807ddf369 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:11:27 +0800 Subject: [PATCH 15/20] automatically complete tasks --- .../Processors/TransactionToPerfexCRMProcessorV2.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 2f7ff77a..33287bc7 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -21,7 +21,8 @@ class TransactionToPerfexCRMProcessorV2 { try { if(in_array($model->type, [TransactionType::PAYMENT, TransactionType::BILL, TransactionType::PURCHASE_ORDER])) { - $bookingInfo = $this->extractBookingInfo($model->type === TransactionType::BILL ? $model->owner : $model); + $transaction = $model->type === TransactionType::BILL ? $model->owner : $model; + $bookingInfo = $this->extractBookingInfo($transaction); $projectName = 'Exchange | ' . $bookingInfo['serviceTypeName'] . ' | ' . $bookingInfo['bookingMarking']; $tasks = $this->defineTasks($model, $status); @@ -37,7 +38,7 @@ class TransactionToPerfexCRMProcessorV2 [], $tasks ); - $this->dispatchUpdateJob($model, $status, $updatePerfexCRMObject); + $this->dispatchUpdateJob($transaction, $status, $updatePerfexCRMObject); } } } catch (\Exception $exception) { From 3b9cc6a3b975457858df924bca006779add88efe Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:15:44 +0800 Subject: [PATCH 16/20] automatically complete tasks --- .../PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 33287bc7..ae7f643d 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -20,6 +20,7 @@ class TransactionToPerfexCRMProcessorV2 public function execute(Transaction $model, int $status) { try { + dd($model->type); if(in_array($model->type, [TransactionType::PAYMENT, TransactionType::BILL, TransactionType::PURCHASE_ORDER])) { $transaction = $model->type === TransactionType::BILL ? $model->owner : $model; $bookingInfo = $this->extractBookingInfo($transaction); From 1a08dd16593cf78b08f1a42d282f824a7583fceb Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:16:02 +0800 Subject: [PATCH 17/20] automatically complete tasks --- .../PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index ae7f643d..edb84120 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -22,7 +22,7 @@ class TransactionToPerfexCRMProcessorV2 try { dd($model->type); if(in_array($model->type, [TransactionType::PAYMENT, TransactionType::BILL, TransactionType::PURCHASE_ORDER])) { - $transaction = $model->type === TransactionType::BILL ? $model->owner : $model; + $transaction = ($model->type === TransactionType::BILL ? $model->owner : $model); $bookingInfo = $this->extractBookingInfo($transaction); $projectName = 'Exchange | ' . $bookingInfo['serviceTypeName'] . ' | ' . $bookingInfo['bookingMarking']; $tasks = $this->defineTasks($model, $status); From d6516fda5387f60fbebe0b4678fef669596fd2ab Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:16:54 +0800 Subject: [PATCH 18/20] automatically complete tasks --- .../PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index edb84120..d3b47f25 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -20,13 +20,12 @@ class TransactionToPerfexCRMProcessorV2 public function execute(Transaction $model, int $status) { try { - dd($model->type); if(in_array($model->type, [TransactionType::PAYMENT, TransactionType::BILL, TransactionType::PURCHASE_ORDER])) { $transaction = ($model->type === TransactionType::BILL ? $model->owner : $model); $bookingInfo = $this->extractBookingInfo($transaction); $projectName = 'Exchange | ' . $bookingInfo['serviceTypeName'] . ' | ' . $bookingInfo['bookingMarking']; $tasks = $this->defineTasks($model, $status); - +dd($tasks); if(count($tasks) > 0) { $updatePerfexCRMObject = new UpdatePerfexCRMObject( $bookingInfo['companyName'], From e093a4d43c64d9159ba456e97c5e7b7ac8798b93 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:19:26 +0800 Subject: [PATCH 19/20] automatically complete tasks --- .../PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index d3b47f25..659c618e 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -25,7 +25,7 @@ class TransactionToPerfexCRMProcessorV2 $bookingInfo = $this->extractBookingInfo($transaction); $projectName = 'Exchange | ' . $bookingInfo['serviceTypeName'] . ' | ' . $bookingInfo['bookingMarking']; $tasks = $this->defineTasks($model, $status); -dd($tasks); + if(count($tasks) > 0) { $updatePerfexCRMObject = new UpdatePerfexCRMObject( $bookingInfo['companyName'], From 93c24b197d7b069af816f48383dcca2ee637e34c Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Thu, 15 Jun 2023 06:20:47 +0800 Subject: [PATCH 20/20] automatically complete tasks --- .../PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 659c618e..cd5990f1 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -216,7 +216,7 @@ class TransactionToPerfexCRMProcessorV2 PerfexCRMTasks::TASK_1688_PAYMENT_10, PerfexCRMTasks::TASK_1688_PAYMENT_11, PerfexCRMTasks::TASK_1688_PAYMENT_12, - PerfexCRMTasks::TASK_1688_PAYMENT_13 +// PerfexCRMTasks::TASK_1688_PAYMENT_13 ]; }