'Created Transaction', 'message' => 'You have successfully created a transaction' ]; } /** @var GeneratesTransactionBillNumber */ private $generatesTransactionBillNo; /** @var CanCreateTransaction */ private $canCreateTransaction; private $fetchesCurrency; private $rateCalculatesCurrency; private $fetchesCompany; private $createsTransaction; private $canCreateTransactionDetail; private $createsTransactionDetail; /** * CreateWalletLogic constructor. * @param GeneratesTransactionBillNumber $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( GeneratesTransactionBillNumber $generatesTransactionBillNo, CanCreateTransaction $canCreateTransaction, FetchesCurrency $fetchesCurrency, RateCalculatesCurrency $rateCalculatesCurrency, FetchesCompany $fetchesCompany, CreatesTransaction $createsTransaction, CanCreateTransactionDetail $canCreateTransactionDetail, CreatesTransactionDetail $createsTransactionDetail ){ $this->generatesTransactionBillNo = $generatesTransactionBillNo; $this->canCreateTransaction = $canCreateTransaction; $this->fetchesCurrency = $fetchesCurrency; $this->rateCalculatesCurrency = $rateCalculatesCurrency; $this->fetchesCompany = $fetchesCompany; $this->createsTransaction =$createsTransaction; $this->canCreateTransactionDetail =$canCreateTransactionDetail; $this->createsTransactionDetail = $createsTransactionDetail; } /** * @param Request $request * @return JsonResponse * @throws ErrorException */ public function logic(Request $request) : JsonResponse { try { DB::beginTransaction(); $json_array = json_decode($request->getContent(), true); $company = $this->fetchesCompany->execute(['id' => $json_array['company_id']]); $conversion_currency = $this->fetchesCurrency->execute(['id' => $json_array['currency_id']]); $convertable_currency = $this->fetchesCurrency->execute(['id' => 1]);//MYR $convert_amount = $this->rateCalculatesCurrency->execute($conversion_currency, $convertable_currency, $json_array['amount']); $convert_rate = $this->rateCalculatesCurrency->execute_rate($conversion_currency, $convertable_currency); /* int $bill_no,string $trans_type1,string $trans_type2, float $amount, int $currency_id, int $original_amount, int $original_currency_id, float $currency_rate, string $dt_transaction,int $status,int $booking_id, int $company_id */ $object = new TransactionObject( $this->generatesTransactionBillNo->execute(),$json_array['trans_type1'],$json_array['trans_type2'], number_format( (float) $convert_amount, 5, '.', ''), 1 , number_format( (float) $json_array['amount'], 5, '.', ''), $json_array['currency_id'],number_format( (float) $convert_rate, 5, '.', ''), $json_array['dt_transaction'],1,$request->route('id'), $company->id ); $this->canCreateTransaction->passes($object); $transaction = $this->createsTransaction->execute($object); $transaction_array = new TransactionResource($transaction); $transaction_detail_array = array(); foreach ($json_array['transaction_detail'] as $key => $value) { $object_detail = new TransactionDetailObject( $json_array['trans_type1'],$json_array['trans_type2'], $transaction->id,$value['product_code'],$value['product_name'], (int)$value['qty'],number_format( (float) $convert_amount, 5, '.', ''), number_format( (float) $json_array['amount'], 5, '.', '') ); $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); } //$transaction_array['transaction_detail']= $transaction_detail_array; //print_r($transaction_detail_array); //dd($transaction_detail_array); DB::commit(); return $this->resourceResponse($transaction_array); //return $this->resourceResponse($json_array); } catch (\Exception $exception) { throw new ErrorException($exception->getMessage(), $exception->getCode()); } } }