diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateMakePaymentPOTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateMakePaymentPOTransactionLogic.php new file mode 100644 index 00000000..7f9de898 --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateMakePaymentPOTransactionLogic.php @@ -0,0 +1,207 @@ + 'Created Transaction', + 'message' => 'You have successfully created a transaction' + ]; + } + + + /** @var GeneratesTransactionBillNo */ + private $generatesTransactionBillNo; + + /** @var CanCreateTransaction */ + private $canCreateTransaction; + + private $fetchesCurrency; + + private $rateCalculatesCurrency; + + private $fetchesCompany; + + private $createsTransaction; + + private $canCreateTransactionDetail; + + private $createsTransactionDetail; + + private $fetchesTransaction; + + private $fetchesTransactionDetail; + + private $generatesReceiptBillNo; + + /** @var CanCreateReceipt */ + private $canCreateReceipt; + + private $createsReceipt; + + private $canCreateReceiptDetail; + + private $createsReceiptDetail; + + /** + * CreateWalletLogic constructor. + * @param GeneratesTransactionBillNo $generatesTransactionBillNo + * @param CanCreateTransaction $canCreateTransaction + * @param FetchesCurrency $fetchesCurrency + * @param RateCalculatesCurrency $rateCalculatesCurrency + * @param FetchesCompany $fetchesCompany + * @param CreatesTransaction $createsTransaction + * @param CanCreateTransactionDetail $canCreateTransactionDetail + * @param CreatesTransactionDetail $createsTransactionDetail + */ + public function __construct( + GeneratesTransactionBillNo $generatesTransactionBillNo, CanCreateTransaction $canCreateTransaction, + FetchesCurrency $fetchesCurrency,RateCalculatesCurrency $rateCalculatesCurrency, FetchesCompany $fetchesCompany, + CreatesTransaction $createsTransaction, + CanCreateTransactionDetail $canCreateTransactionDetail, CreatesTransactionDetail $createsTransactionDetail, + FetchesTransaction $fetchesTransaction , FetchesTransactionDetail $fetchesTransactionDetail, + GeneratesReceiptBillNo $generatesReceiptBillNo, CanCreateReceipt $canCreateReceipt, + CreatesReceipt $createsReceipt, + CanCreateReceiptDetail $canCreateReceiptDetail, CreatesReceiptDetail $createsReceiptDetail + ){ + $this->generatesTransactionBillNo = $generatesTransactionBillNo; + $this->canCreateTransaction = $canCreateTransaction; + $this->fetchesCurrency = $fetchesCurrency; + $this->rateCalculatesCurrency = $rateCalculatesCurrency; + $this->fetchesCompany = $fetchesCompany; + $this->createsTransaction =$createsTransaction; + $this->canCreateTransactionDetail =$canCreateTransactionDetail; + $this->createsTransactionDetail = $createsTransactionDetail; + $this->fetchesTransaction = $fetchesTransaction; + $this->fetchesTransactionDetail = $fetchesTransactionDetail; + + $this->generatesReceiptBillNo = $generatesReceiptBillNo; + $this->canCreateReceipt = $canCreateReceipt; + $this->createsReceipt =$createsReceipt; + $this->canCreateReceiptDetail =$canCreateReceiptDetail; + $this->createsReceiptDetail = $createsReceiptDetail; + + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + + DB::beginTransaction(); + DB::enableQueryLog(); + $json_array = json_decode($request->getContent(), true); + + $po_transaction = $this->fetchesTransaction->execute(['id' => $json_array['ref_po']]); + + $object = new TransactionObject( + $this->generatesTransactionBillNo->execute(),$po_transaction->trans_type1,'INV', + $po_transaction->amount, $po_transaction->currency_id , $po_transaction->original_amount, + $po_transaction->original_currency_id, $po_transaction->currency_rate , + $po_transaction->dt_transaction,1,$po_transaction->booking_id, + $po_transaction->company_id + ); + + $this->canCreateTransaction->passes($object); + $transaction = $this->createsTransaction->execute($object); + $transaction_array = new TransactionResource($transaction); + + $transaction_detail = $this->fetchesTransactionDetail->getRepository()->where('transaction_id', $json_array['ref_po'])->get(); + foreach ($transaction_detail as $key => $value) { + + $object_detail = new TransactionDetailObject( + $transaction->trans_type1,$transaction->trans_type2, + $transaction->id,$value->product_code,$value->product_name, + $value->qty,$value->price, $value->amount + ); + $this->canCreateTransactionDetail->passes($object_detail); + $transaction_detail = $this->createsTransactionDetail->execute($object_detail); + //array_push($stack, "apple", "raspberry"); + $transaction_detail_resource= new TransactionDetailResource($transaction_detail); + $transaction_detail_array[]= $transaction_detail_resource->toArray($request); + } + + + $object = new ReceiptObject( + $this->generatesReceiptBillNo->execute(),$transaction->trans_type1,"RECPT", + $po_transaction->amount, $po_transaction->currency_id , $po_transaction->original_amount, + $po_transaction->original_currency_id, $po_transaction->currency_rate , + $po_transaction->dt_transaction,1,$po_transaction->booking_id, + $po_transaction->company_id + ); + + + $this->canCreateReceipt->passes($object); + + $receipt = $this->createsReceipt->execute($object); + + + $object_detail = new ReceiptDetailObject( + $transaction->trans_type1,"RECPT", + $transaction->id,$receipt->id, + $transaction->amount, $transaction->amount + ); + $this->canCreateReceiptDetail->passes($object_detail); + $transaction_detail = $this->createsReceiptDetail->execute($object_detail); + + + DB::commit(); + + return $this->resourceResponse($transaction_array); + + return $this->resourceResponse($json_array); + + } catch (\Exception $exception) { + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/Services/FetchesTransactionDetail.php b/app/Classes/Modules/Transactions/Services/FetchesTransactionDetail.php new file mode 100644 index 00000000..8d77cc85 --- /dev/null +++ b/app/Classes/Modules/Transactions/Services/FetchesTransactionDetail.php @@ -0,0 +1,35 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Transactions/CreateMakePaymentPOTransactionController.php b/app/Http/Controllers/Transactions/CreateMakePaymentPOTransactionController.php new file mode 100644 index 00000000..592a891d --- /dev/null +++ b/app/Http/Controllers/Transactions/CreateMakePaymentPOTransactionController.php @@ -0,0 +1,15 @@ +execute($request); + } +} \ No newline at end of file diff --git a/routes/transaction.php b/routes/transaction.php index e0e9ba86..7a39c7a1 100644 --- a/routes/transaction.php +++ b/routes/transaction.php @@ -5,6 +5,7 @@ use Illuminate\Support\Facades\Route; Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' => 'transaction.'], function () { Route::post('/create/{id}', 'CreateTransactionController@create')->name('create'); + Route::post('/createPOPymt', 'CreateMakePaymentPOTransactionController@create')->name('create'); //Route::post('/create-transaction/{id}', 'CreateWalletTransactionController@create')->name('create_transaction'); }); \ No newline at end of file