'Payment Proof Document', 'message' => 'You have successfully submitted your payment proof document' ]; } /** @var FetchesTransaction */ private $fetchesTransaction; /** @var CreatesDocument */ private $createsDocument; /** @var CreatesFiles */ private $createsFile; /** @var UpdatesTransactionStatus */ private $updatesTransactionStatus; /** @var RuleEvaluator */ private $ruleEvaluator; /** @var CanPassOrderDurationLimitRule */ private $canPassOrderDurationLimitRule; /** * CreatePaymentVerificationDocumentLogic constructor. * @param FetchesTransaction $fetchesTransaction * @param CreatesDocument $createsDocument * @param CreatesFiles $createsFile * @param UpdatesTransactionStatus $updatesTransactionStatus * @param RuleEvaluator $ruleEvaluator * @param CanPassOrderDurationLimitRule $canPassOrderDurationLimitRule */ public function __construct(FetchesTransaction $fetchesTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesTransactionStatus $updatesTransactionStatus, RuleEvaluator $ruleEvaluator, CanPassOrderDurationLimitRule $canPassOrderDurationLimitRule) { $this->fetchesTransaction = $fetchesTransaction; $this->createsDocument = $createsDocument; $this->createsFile = $createsFile; $this->updatesTransactionStatus = $updatesTransactionStatus; $this->ruleEvaluator = $ruleEvaluator; $this->canPassOrderDurationLimitRule = $canPassOrderDurationLimitRule; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\MalformedRequestException */ public function logic(Request $request) : JsonResponse { $dto = new CreatePaymentVerificationDocumentDTO($request->all()); $result = $this->ruleEvaluator->evaluate([ $this->canPassOrderDurationLimitRule, ], $dto); if ($result->failed()) { throw new CriteriaNotFulfilledException("- " . implode("
- ", $result->messages())); } $transaction = $this->fetchesTransaction->execute(['id' => $request->route('payment_id')]); $object = new DocumentObject(DocumentType::CUSTOMER_PAYMENT_PROOF, $request->input('files'), '', ApprovalStatus::PENDING_VERIFICATION, 'payments'); $hasExcel = false; foreach ($object->getFiles() as $file) { $decodedFile = json_decode($file); if (($decodedFile->extension) === 'excel') { $hasExcel = true; break; } } if ($hasExcel) { throw new MalformedRequestException("Please upload files in PDF, JPEG, or PNG format."); } /** @var Document $document */ $document = $this->createsDocument->execute($transaction, $object); $this->createsFile->execute($document, $object); $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::PENDING_VERIFICATION); return $this->response([]); } }