mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-22 14:04:01 +00:00
Merge branch 'dillon/74-admin-workflow' into vapor/development
This commit is contained in:
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\Bookings\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Bookings\Processors\ApprovePurchaseOrderProcessor;
|
||||
use App\Classes\Modules\Bookings\Services\FetchesBooking;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -21,16 +22,21 @@ class ApprovePurchaseOrderLogic extends AbstractControllerLogic
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesBooking */
|
||||
private $fetchesBooking;
|
||||
|
||||
/** @var ApprovePurchaseOrderProcessor */
|
||||
private $approvePurchaseOrderProcessor;
|
||||
|
||||
/**
|
||||
* ApprovePurchaseOrderLogic constructor.
|
||||
* @param FetchesBooking $fetchesBooking
|
||||
* @param ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor
|
||||
*/
|
||||
public function __construct(ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor)
|
||||
public function __construct(ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor, FetchesBooking $fetchesBooking)
|
||||
{
|
||||
$this->approvePurchaseOrderProcessor = $approvePurchaseOrderProcessor;
|
||||
$this->fetchesBooking = $fetchesBooking;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -40,7 +46,10 @@ class ApprovePurchaseOrderLogic extends AbstractControllerLogic
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
$this->approvePurchaseOrderProcessor->execute($request->route('id'));
|
||||
$booking = $this->fetchesBooking->execute(['id' => $request->route('id')]);
|
||||
|
||||
$this->approvePurchaseOrderProcessor->execute($booking);
|
||||
|
||||
return $this->response([]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,25 +4,8 @@ namespace App\Classes\Modules\Bookings\ControllersLogic;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Bookings\Processors\CreatePurchaseOrderFor1688OrderProcessor;
|
||||
use App\Classes\Modules\Bookings\Processors\UploadPurchaseOrderProcessor;
|
||||
use App\Classes\Modules\Bookings\Services\FetchesBooking;
|
||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||
use App\Classes\Modules\Documents\Services\ApprovesDocument;
|
||||
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
||||
use App\Classes\Modules\Documents\Services\CreatesFiles;
|
||||
use App\Classes\Modules\Documents\Services\FetchesDocument;
|
||||
use App\Classes\Modules\Documents\Services\RejectsDocument;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor;
|
||||
use App\Classes\Modules\Transactions\Processors\CreatePurchaseOrderTransactionProcessor;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Models\Document;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -42,29 +25,19 @@ class UploadPurchaseOrderLogic extends AbstractControllerLogic
|
||||
/** @var FetchesBooking */
|
||||
private $fetchesBooking;
|
||||
|
||||
/** @var CreatesDocument */
|
||||
private $createsDocument;
|
||||
|
||||
/** @var CreatesFiles */
|
||||
private $createsFile;
|
||||
|
||||
/** @var CreatePurchaseOrderFor1688OrderProcessor */
|
||||
private $createPurchaseOrderFor1688OrderProcessor;
|
||||
/** @var UploadPurchaseOrderProcessor */
|
||||
private $uploadPurchaseOrderProcessor;
|
||||
|
||||
|
||||
/**
|
||||
* UploadPurchaseOrderLogic constructor.
|
||||
* @param FetchesBooking $fetchesBooking
|
||||
* @param CreatesDocument $createsDocument
|
||||
* @param CreatesFiles $createsFile
|
||||
* @param CreatePurchaseOrderFor1688OrderProcessor $createPurchaseOrderFor1688OrderProcessor
|
||||
* @param UploadPurchaseOrderProcessor $uploadPurchaseOrderProcessor
|
||||
*/
|
||||
public function __construct(FetchesBooking $fetchesBooking, CreatesDocument $createsDocument, CreatesFiles $createsFile, CreatePurchaseOrderFor1688OrderProcessor $createPurchaseOrderFor1688OrderProcessor)
|
||||
public function __construct(FetchesBooking $fetchesBooking, UploadPurchaseOrderProcessor $uploadPurchaseOrderProcessor)
|
||||
{
|
||||
$this->fetchesBooking = $fetchesBooking;
|
||||
$this->createsDocument = $createsDocument;
|
||||
$this->createsFile = $createsFile;
|
||||
$this->createPurchaseOrderFor1688OrderProcessor = $createPurchaseOrderFor1688OrderProcessor;
|
||||
$this->uploadPurchaseOrderProcessor = $uploadPurchaseOrderProcessor;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -74,19 +47,8 @@ class UploadPurchaseOrderLogic extends AbstractControllerLogic
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$booking = $this->fetchesBooking->execute(['id' => $request->route('id')]);
|
||||
|
||||
$object = new DocumentObject(DocumentType::ECOMMERCE_PURCHASE_ORDER, $request->input('files'), '', ApprovalStatus::APPROVED, '1688_purchase_orders');
|
||||
|
||||
/** @var Document $document */
|
||||
$document = $this->createsDocument->execute($booking, $object);
|
||||
|
||||
$this->createsFile->execute($document, $object);
|
||||
|
||||
if(!in_array($booking->company->id, [199, 510])){
|
||||
$this->createPurchaseOrderFor1688OrderProcessor->execute($booking);
|
||||
}
|
||||
$this->uploadPurchaseOrderProcessor->execute($booking, $request->input('files'));
|
||||
|
||||
return $this->response([]);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcesso
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Models\Booking;
|
||||
|
||||
class ApprovePurchaseOrderProcessor
|
||||
{
|
||||
@@ -35,14 +36,11 @@ class ApprovePurchaseOrderProcessor
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $bookingId
|
||||
* @param Booking $booking
|
||||
* @return void
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
* @throws \App\Classes\Exceptions\JobResourceNotFoundException
|
||||
*/
|
||||
public function execute(int $bookingId) {
|
||||
|
||||
$booking = $this->fetchesBooking->execute(['id' => $bookingId]);
|
||||
public function execute(Booking $booking) {
|
||||
|
||||
$purchaseOrder = $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first();
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Bookings\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\Bookings\Processors\CreatePurchaseOrderFor1688OrderProcessor;
|
||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
||||
use App\Classes\Modules\Documents\Services\CreatesFiles;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Models\Document;
|
||||
use App\Models\Booking;
|
||||
|
||||
class UploadPurchaseOrderProcessor
|
||||
{
|
||||
/** @var CreatesDocument */
|
||||
private $createsDocument;
|
||||
|
||||
/** @var CreatesFiles */
|
||||
private $createsFile;
|
||||
|
||||
/** @var CreatePurchaseOrderFor1688OrderProcessor */
|
||||
private $createPurchaseOrderFor1688OrderProcessor;
|
||||
|
||||
|
||||
/**
|
||||
* UploadPurchaseOrderProcessor constructor.
|
||||
* @param CreatesDocument $createsDocument
|
||||
* @param CreatesFiles $createsFile
|
||||
* @param CreatePurchaseOrderFor1688OrderProcessor $createPurchaseOrderFor1688OrderProcessor
|
||||
*/
|
||||
public function __construct(CreatesDocument $createsDocument, CreatesFiles $createsFile, CreatePurchaseOrderFor1688OrderProcessor $createPurchaseOrderFor1688OrderProcessor)
|
||||
{
|
||||
$this->createsDocument = $createsDocument;
|
||||
$this->createsFile = $createsFile;
|
||||
$this->createPurchaseOrderFor1688OrderProcessor = $createPurchaseOrderFor1688OrderProcessor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Booking $booking
|
||||
* @param array $files
|
||||
* @return void
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Booking $booking, array $files)
|
||||
{
|
||||
$object = new DocumentObject(DocumentType::ECOMMERCE_PURCHASE_ORDER, $files, '', ApprovalStatus::APPROVED, '1688_purchase_orders');
|
||||
|
||||
/** @var Document $document */
|
||||
$document = $this->createsDocument->execute($booking, $object);
|
||||
|
||||
$this->createsFile->execute($document, $object);
|
||||
|
||||
if(!in_array($booking->company->id, [199, 510])){
|
||||
$this->createPurchaseOrderFor1688OrderProcessor->execute($booking);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -33,13 +33,14 @@ class UploadDocumentProcessor
|
||||
|
||||
|
||||
/**
|
||||
* @param $filesUpload
|
||||
* @param QAUserAnswerSelected qaUserAnswerSelected
|
||||
* @param array $filesUpload
|
||||
* @param string $path
|
||||
* @param string $documentType
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute($filesUpload, QAUserAnswerSelected $qaUserAnswerSelected, string $path) {
|
||||
$object = new DocumentObject(DocumentType::ADMIN_WORK_FLOW, $filesUpload, '', ApprovalStatus::PENDING_VERIFICATION, $path);
|
||||
public function execute(QAUserAnswerSelected $qaUserAnswerSelected, $filesUpload, string $path, string $documentType = DocumentType::ADMIN_WORK_FLOW) {
|
||||
$object = new DocumentObject($documentType, $filesUpload, '', ApprovalStatus::PENDING_VERIFICATION, $path);
|
||||
|
||||
/** @var Document $document */
|
||||
$document = $this->createsDocument->execute($qaUserAnswerSelected, $object);
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FetchAdminWFBookingLogic extends AbstractControllerLogic
|
||||
class FetchAdminWF1688BookingLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
+14
-7
@@ -96,6 +96,8 @@ class UpdateNextQuestionV1AdminWFLogic extends AbstractControllerLogic
|
||||
$timeUsedSeconds = 0;
|
||||
$reference = null;
|
||||
$questionMetadata = null;
|
||||
$booking = null;
|
||||
$isNoGoingBackOverwrite = 0;
|
||||
|
||||
$this->canFetchQuestion->passes();
|
||||
|
||||
@@ -103,8 +105,6 @@ class UpdateNextQuestionV1AdminWFLogic extends AbstractControllerLogic
|
||||
$answer = $request->answerObj;
|
||||
$answerNextQuestionNumber = $answer['next_question_number'];
|
||||
$answerValue = $answer['value'];
|
||||
Log::info('answerNextQuestionNumber: '. $answerNextQuestionNumber);
|
||||
Log::info('answerValue: '. $answerValue);
|
||||
}
|
||||
|
||||
if ($request->has('extra')) {
|
||||
@@ -114,6 +114,10 @@ class UpdateNextQuestionV1AdminWFLogic extends AbstractControllerLogic
|
||||
$reference = $extra['session_id'];
|
||||
}
|
||||
|
||||
if($questionMetadata){
|
||||
$booking = Booking::where('id', $questionMetadata['id'])->first();
|
||||
}
|
||||
|
||||
//Save answer given by user (both next and previous)
|
||||
$filesUpload = $request->only(['files', 'filesA', 'filesB', 'filesC']);
|
||||
$answerOptionId = 0;
|
||||
@@ -125,13 +129,13 @@ class UpdateNextQuestionV1AdminWFLogic extends AbstractControllerLogic
|
||||
$answerInText = "go_back";
|
||||
}
|
||||
$answer = $this->saveAnswerProcessor->execute($userId, 0, $currentQuestion['id'], $currentQuestion['question_type'], $questionMetadata, $answerInText, $answerOptionId, $filesUpload, $timeUsedSeconds, $request->has('isPrevious'), $reference);
|
||||
$this->saveAnswerActionProcessor->execute($questionMetadata, $answerOptionId);
|
||||
if(!$request->has('isPrevious')){
|
||||
$isNoGoingBackOverwrite = $this->saveAnswerActionProcessor->execute($booking, $questionMetadata, $answerOptionId, $currentQuestion, $filesUpload);
|
||||
}
|
||||
|
||||
//Marked data that has already been processed so that it does not appear again
|
||||
$isNoGoingBack = null;
|
||||
$isNoGoingBack = 0;
|
||||
if($currentQuestion && $currentQuestion['is_end'] === 1 && !$request->has('isPrevious')){
|
||||
$booking = Booking::where('id', $questionMetadata['id'])->first();
|
||||
|
||||
$key1 = "admin_workflow_processed";
|
||||
$key2 = "admin_workflow_processing";
|
||||
if (strpos($currentQuestion['question_number'], '1688') === 0) {
|
||||
@@ -178,13 +182,16 @@ class UpdateNextQuestionV1AdminWFLogic extends AbstractControllerLogic
|
||||
$isNoGoingBack = 0;
|
||||
}
|
||||
|
||||
if($isNoGoingBackOverwrite === 1 && $isNoGoingBack === 0){
|
||||
$isNoGoingBack = $isNoGoingBackOverwrite;
|
||||
}
|
||||
|
||||
$returnQuestion = $this->fetchNextQuestionMetadataProcessor->execute($returnQuestion, $questionMetadata);
|
||||
|
||||
//When a questionnaire ended, return back the first question
|
||||
if(is_null($returnQuestion)){
|
||||
$returnQuestion = $this->fetchFirstQuestionQAProcessor->execute($request);
|
||||
}
|
||||
|
||||
return $this->resourceResponse(new QuestionResource($returnQuestion, $userId, $request->has('isPrevious'), $isNoGoingBack, $previousAnswer));
|
||||
}
|
||||
}
|
||||
|
||||
+44
-2
@@ -4,6 +4,9 @@ namespace App\Classes\Modules\Questionnaires\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\Bookings\Processors\ApprovePurchaseOrderProcessor;
|
||||
use App\Classes\Modules\Bookings\Processors\UploadPurchaseOrderProcessor;
|
||||
use App\Classes\Modules\Transactions\Processors\CreatePaymentProofDocumentProcessor;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Models\QAAnswerOptions;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
@@ -12,22 +15,61 @@ class SaveAnswerActionV1AdminWFProcessor
|
||||
/** @var ApprovePurchaseOrderProcessor */
|
||||
private $approvePurchaseOrderProcessor;
|
||||
|
||||
/** @var UploadPurchaseOrderProcessor */
|
||||
private $uploadPurchaseOrderProcessor;
|
||||
|
||||
/** @var CreatePaymentProofDocumentProcessor */
|
||||
private $createPaymentProofDocumentProcessor;
|
||||
|
||||
/** @var FetchesTransaction */
|
||||
private $fetchesTransaction;
|
||||
|
||||
/**
|
||||
* SaveAnswerActionV1AdminWFProcessor constructor.
|
||||
* @param ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor
|
||||
* @param UploadPurchaseOrderProcessor $uploadPurchaseOrderProcessor
|
||||
* @param CreatePaymentProofDocumentProcessor $createPaymentProofDocumentProcessor
|
||||
* @param FetchesTransaction $fetchesTransaction
|
||||
*/
|
||||
public function __construct(ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor)
|
||||
public function __construct(ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor, UploadPurchaseOrderProcessor $uploadPurchaseOrderProcessor, CreatePaymentProofDocumentProcessor $createPaymentProofDocumentProcessor, FetchesTransaction $fetchesTransaction)
|
||||
{
|
||||
$this->approvePurchaseOrderProcessor = $approvePurchaseOrderProcessor;
|
||||
$this->uploadPurchaseOrderProcessor = $uploadPurchaseOrderProcessor;
|
||||
$this->createPaymentProofDocumentProcessor = $createPaymentProofDocumentProcessor;
|
||||
$this->fetchesTransaction = $fetchesTransaction;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public function execute($questionMetadata, $answerOptionId){
|
||||
public function execute($booking, $questionMetadata, $answerOptionId, $currentQuestion, $filesUpload){
|
||||
$isNoGoingBack = 0;
|
||||
$answerOption = QAAnswerOptions::where('id', $answerOptionId)->first();
|
||||
if($answerOption && $answerOption->value === "approve_po_approved"){
|
||||
$this->approvePurchaseOrderProcessor->execute($questionMetadata['id']);
|
||||
$isNoGoingBack = 1;
|
||||
}
|
||||
else if($currentQuestion['question_number'] === '1688_submit')
|
||||
{
|
||||
if($filesUpload){
|
||||
if ($booking && isset($filesUpload['filesA']) && isset($filesUpload['filesB']))
|
||||
{
|
||||
$mergedFilesUpload = array_merge(
|
||||
$filesUpload['filesA'] ?? [],
|
||||
$filesUpload['filesB'] ?? []
|
||||
);
|
||||
$this->uploadPurchaseOrderProcessor->execute($booking, $mergedFilesUpload);
|
||||
}
|
||||
|
||||
if (isset($filesUpload['filesC']) && isset($questionMetadata['payment_history'][0]['transaction_bill']['id']))
|
||||
{
|
||||
$transaction = $this->fetchesTransaction->execute(['id' =>$questionMetadata['payment_history'][0]['transaction_bill']['id']]);
|
||||
$this->createPaymentProofDocumentProcessor->execute($transaction, $filesUpload['filesC']);
|
||||
}
|
||||
$isNoGoingBack = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return $isNoGoingBack;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\Questionnaires\Processors;
|
||||
|
||||
use App\Models\QAUserAnswerSelected;
|
||||
use App\Classes\Modules\Documents\Processors\UploadDocumentProcessor;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Classes\ValueObjects\Constants\QAType;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
@@ -50,7 +51,15 @@ class SaveAnswerV1AdminWFProcessor
|
||||
if (isset($filesUpload['filesA']))
|
||||
{
|
||||
foreach ($filesUpload as $key => $files) {
|
||||
$attachments[$key] = $this->saveFile($answer, $files);
|
||||
if($key === 'filesA'){
|
||||
$attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::ECOMMERCE_PURCHASE_ORDER_EN);
|
||||
}
|
||||
else if($key === "filesB"){
|
||||
$attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::ECOMMERCE_PURCHASE_ORDER_CH);
|
||||
}
|
||||
else if($key === "filesC"){
|
||||
$attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::CURRENCY_VENDOR_PAYMENT_PROOF);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (isset($filesUpload['files']) && $filesUpload['files'])
|
||||
@@ -59,39 +68,47 @@ class SaveAnswerV1AdminWFProcessor
|
||||
}
|
||||
}
|
||||
|
||||
if($questionType === QAType::SUBMIT_1688_3_TYPES_DOCUMENTS){
|
||||
$structuredAnswer = [
|
||||
'files' => $attachments,
|
||||
];
|
||||
$answer->answer = json_encode($structuredAnswer);
|
||||
if(!$isPrevious) {
|
||||
if($questionType === QAType::SUBMIT_1688_3_TYPES_DOCUMENTS){
|
||||
$structuredAnswer = [
|
||||
'text' => "3_DOCUMENTS_UPLOADED",
|
||||
'files' => $attachments,
|
||||
];
|
||||
$answer->answer = json_encode($structuredAnswer);
|
||||
}
|
||||
else if($questionType === QAType::REMARKS_WITH_DOCUMENT_UPLOAD){
|
||||
$structuredAnswer = [
|
||||
'text' => $answerInText,
|
||||
'files' => $attachments,
|
||||
];
|
||||
$answer->answer = json_encode($structuredAnswer);
|
||||
}
|
||||
else if($questionType === QAType::DOCUMENT_UPLOAD){
|
||||
$structuredAnswer = [
|
||||
'files' => $attachments,
|
||||
];
|
||||
$answer->answer = json_encode($structuredAnswer);
|
||||
}
|
||||
else {
|
||||
$answer->answer = $answerInText;
|
||||
}
|
||||
}
|
||||
else if($questionType === QAType::REMARKS_WITH_DOCUMENT_UPLOAD){
|
||||
$structuredAnswer = [
|
||||
'text' => $answerInText,
|
||||
'files' => $attachments,
|
||||
];
|
||||
$answer->answer = json_encode($structuredAnswer);
|
||||
}
|
||||
else if($questionType === QAType::DOCUMENT_UPLOAD){
|
||||
$structuredAnswer = [
|
||||
'files' => $attachments,
|
||||
];
|
||||
$answer->answer = json_encode($structuredAnswer);
|
||||
}
|
||||
else {
|
||||
else {
|
||||
$answer->answer = $answerInText;
|
||||
}
|
||||
|
||||
$answer->save();
|
||||
|
||||
return $answer;
|
||||
}
|
||||
|
||||
private function saveFile($answer, $files){
|
||||
$result = $this->uploadDocumentForProcessor->execute($files, $answer, 'questionnaires');
|
||||
$attachment = array_map(function ($item) {
|
||||
private function saveFile(QAUserAnswerSelected $answer, array $files, string $path = 'questionnaires', string $documentType = DocumentType::ADMIN_WORK_FLOW){
|
||||
$result = $this->uploadDocumentForProcessor->execute($answer, $files, $path, $documentType);
|
||||
$attachment = array_map(function ($item) use($documentType) {
|
||||
return [
|
||||
'name' => $item->document_id,
|
||||
'file_id' => $item->id,
|
||||
'document_type'=> $documentType,
|
||||
];
|
||||
}, $result);
|
||||
|
||||
|
||||
+9
-62
@@ -4,24 +4,10 @@ namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
|
||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
||||
use App\Classes\Modules\Documents\Services\CreatesFiles;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\CompanyType;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Classes\Jobs\SendUserPaymentProofUploadedEmail;
|
||||
use App\Models\Company;
|
||||
use App\Models\Document;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor;
|
||||
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||
use App\Classes\Modules\Transactions\Processors\CreatePaymentProofDocumentProcessor;
|
||||
|
||||
class CreatePaymentProofDocumentLogic extends AbstractControllerLogic
|
||||
{
|
||||
@@ -39,37 +25,18 @@ class CreatePaymentProofDocumentLogic extends AbstractControllerLogic
|
||||
/** @var FetchesTransaction */
|
||||
private $fetchesTransaction;
|
||||
|
||||
/** @var CreatesDocument */
|
||||
private $createsDocument;
|
||||
|
||||
/** @var CreatesFiles */
|
||||
private $createsFile;
|
||||
|
||||
/** @var UpdatesTransactionStatus */
|
||||
private $updatesTransactionStatus;
|
||||
|
||||
/** @var CreateInvoiceTransactionProcessor */
|
||||
private $createInvoiceTransactionProcessor;
|
||||
|
||||
/** @var SendUserPaymentProofUploadedEmail */
|
||||
private $sendUserPaymentProofUploadedEmail;
|
||||
/** @var CreatePaymentProofDocumentProcessor */
|
||||
private $createPaymentProofDocumentProcessor;
|
||||
|
||||
/**
|
||||
* CreatePaymentProofDocumentLogic constructor.
|
||||
* @param CreatePaymentProofDocumentProcessor $createPaymentProofDocumentProcessor
|
||||
* @param FetchesTransaction $fetchesTransaction
|
||||
* @param CreatesDocument $createsDocument
|
||||
* @param CreatesFiles $createsFile
|
||||
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||
* @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor
|
||||
*/
|
||||
public function __construct(FetchesTransaction $fetchesTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesTransactionStatus $updatesTransactionStatus, CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor, SendUserPaymentProofUploadedEmail $sendUserPaymentProofUploadedEmail)
|
||||
public function __construct(CreatePaymentProofDocumentProcessor $createPaymentProofDocumentProcessor, FetchesTransaction $fetchesTransaction)
|
||||
{
|
||||
$this->createPaymentProofDocumentProcessor = $createPaymentProofDocumentProcessor;
|
||||
$this->fetchesTransaction = $fetchesTransaction;
|
||||
$this->createsDocument = $createsDocument;
|
||||
$this->createsFile = $createsFile;
|
||||
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||
$this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor;
|
||||
$this->sendUserPaymentProofUploadedEmail = $sendUserPaymentProofUploadedEmail;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,30 +46,10 @@ class CreatePaymentProofDocumentLogic extends AbstractControllerLogic
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$transaction = $this->fetchesTransaction->execute(['id' => $request->route('id')]);
|
||||
|
||||
$object = new DocumentObject(DocumentType::CURRENCY_VENDOR_PAYMENT_PROOF, $request->input('files'), '', ApprovalStatus::APPROVED, 'china_bank_slip');
|
||||
|
||||
/** @var Document $document */
|
||||
$document = $this->createsDocument->execute($transaction, $object);
|
||||
|
||||
$file = $this->createsFile->execute($document, $object);
|
||||
|
||||
$this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED);
|
||||
|
||||
$this->createInvoiceTransactionProcessor->execute($transaction->owner->booking);
|
||||
|
||||
// send email to customer
|
||||
// todo: a function to send a proof to the receipiant, they have to give us a email of the receipiant and also need to submiited purchase order
|
||||
$companyEmployee = $transaction->owner->booking->company->employees;
|
||||
foreach ($companyEmployee as $employee) {
|
||||
if (app()->environment('production') || in_array($employee->email, ['cief.enquirycntr@gmail.com', 'tech.ciefmalaysia@gmail.com'])) {
|
||||
$this->sendUserPaymentProofUploadedEmail::dispatch($employee, $transaction->owner->booking, $file[0]);
|
||||
}
|
||||
}
|
||||
$this->createPaymentProofDocumentProcessor->execute($transaction, $request->input('files'));
|
||||
|
||||
return $this->response([]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
||||
use App\Classes\Modules\Documents\Services\CreatesFiles;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Classes\Jobs\SendUserPaymentProofUploadedEmail;
|
||||
use App\Models\Transaction;
|
||||
use App\Models\Document;
|
||||
use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor;
|
||||
|
||||
|
||||
class CreatePaymentProofDocumentProcessor
|
||||
{
|
||||
/** @var CreatesDocument */
|
||||
private $createsDocument;
|
||||
|
||||
/** @var CreatesFiles */
|
||||
private $createsFile;
|
||||
|
||||
/** @var UpdatesTransactionStatus */
|
||||
private $updatesTransactionStatus;
|
||||
|
||||
/** @var CreateInvoiceTransactionProcessor */
|
||||
private $createInvoiceTransactionProcessor;
|
||||
|
||||
/** @var SendUserPaymentProofUploadedEmail */
|
||||
private $sendUserPaymentProofUploadedEmail;
|
||||
|
||||
/**
|
||||
* CreatePaymentProofDocumentProcessor constructor.
|
||||
* @param CreatesDocument $createsDocument
|
||||
* @param CreatesFiles $createsFile
|
||||
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||
* @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor
|
||||
* @param SendUserPaymentProofUploadedEmail $sendUserPaymentProofUploadedEmail
|
||||
*/
|
||||
public function __construct(CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesTransactionStatus $updatesTransactionStatus, CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor, SendUserPaymentProofUploadedEmail $sendUserPaymentProofUploadedEmail)
|
||||
{
|
||||
$this->createsDocument = $createsDocument;
|
||||
$this->createsFile = $createsFile;
|
||||
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||
$this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor;
|
||||
$this->sendUserPaymentProofUploadedEmail = $sendUserPaymentProofUploadedEmail;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Transaction $transaction
|
||||
* @param array $files
|
||||
* @return void
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Transaction $transaction, array $files)
|
||||
{
|
||||
$object = new DocumentObject(DocumentType::CURRENCY_VENDOR_PAYMENT_PROOF, $files, '', ApprovalStatus::APPROVED, 'china_bank_slip');
|
||||
|
||||
/** @var Document $document */
|
||||
$document = $this->createsDocument->execute($transaction, $object);
|
||||
|
||||
$file = $this->createsFile->execute($document, $object);
|
||||
|
||||
$this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED);
|
||||
|
||||
$this->createInvoiceTransactionProcessor->execute($transaction->owner->booking);
|
||||
|
||||
// send email to customer
|
||||
// todo: a function to send a proof to the receipiant, they have to give us a email of the receipiant and also need to submiited purchase order
|
||||
$companyEmployee = $transaction->owner->booking->company->employees;
|
||||
foreach ($companyEmployee as $employee) {
|
||||
if (app()->environment('production') || in_array($employee->email, ['cief.enquirycntr@gmail.com', 'tech.ciefmalaysia@gmail.com'])) {
|
||||
$this->sendUserPaymentProofUploadedEmail::dispatch($employee, $transaction->owner->booking, $file[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,5 +28,8 @@ final class DocumentType {
|
||||
public const BULK_PURCHASE_ORDER = 'BULK_PURCHASE_ORDER';
|
||||
|
||||
public const BILL_GROUP_PAYMENT_PROOF = 'BILL_GROUP_PAYMENT_PROOF';
|
||||
|
||||
public const ADMIN_WORK_FLOW = 'ADMIN_WORK_FLOW';
|
||||
public const ECOMMERCE_PURCHASE_ORDER_EN = 'ECOMMERCE_PURCHASE_ORDER_EN';
|
||||
public const ECOMMERCE_PURCHASE_ORDER_CH = 'ECOMMERCE_PURCHASE_ORDER_CH';
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers\Questionnaires;
|
||||
|
||||
use App\Classes\Modules\Questionnaires\ControllersLogic\FetchAdminWFBookingLogic;
|
||||
use App\Classes\Modules\Questionnaires\ControllersLogic\FetchAdminWF1688BookingLogic;
|
||||
use App\Classes\Modules\Questionnaires\ControllersLogic\FetchAdminWFModelAttributesLogic;
|
||||
use App\Classes\Modules\Questionnaires\ControllersLogic\FetchAdminWFPendingApprovalPOLogic;
|
||||
use App\Classes\Modules\Questionnaires\ControllersLogic\FetchAdminWFPendingFillPOLogic;
|
||||
@@ -14,10 +14,10 @@ class AdminWorkflowBaseController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param FetchAdminWFBookingLogic $logic
|
||||
* @param FetchAdminWF1688BookingLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function fetchBooking(Request $request, FetchAdminWFBookingLogic $logic): JsonResponse {
|
||||
public function fetchBooking(Request $request, FetchAdminWF1688BookingLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\QAQuestions;
|
||||
use App\Models\QAAnswerOptions;
|
||||
use App\Models\QAUserAnswerSelected;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class QuestionResource extends JsonResource
|
||||
{
|
||||
|
||||
@@ -36,6 +36,7 @@ class QuestionsAnswersResource extends JsonResource
|
||||
'question_metadata' => $this->question_metadata,
|
||||
'answer' => $answerOption ? $answerOption->display_text : null,
|
||||
'answer_value' => $this->answer,
|
||||
'documentsList' => DocumentResource::collection($this->documents),
|
||||
'documents' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::ADMIN_WORK_FLOW)->first()),
|
||||
'reference' => $this->reference,
|
||||
'source_system' => null,
|
||||
|
||||
+25
-1
@@ -13,7 +13,31 @@
|
||||
</div>
|
||||
<div class="col-1">{{ parsedAnswer === 'go_back' ? '' : item.answer }}</div>
|
||||
<div class="col-2">{{ parsedAnswer }}</div>
|
||||
<div class="col-1" style="display: flex; flex-wrap: nowrap; gap: 5px;">
|
||||
|
||||
<div class="col-1" style="display: flex; flex-wrap: nowrap; gap: 5px;" v-if="item.documentsList != null && item.documentsList.length > 1" >
|
||||
<div
|
||||
v-for="document in item.documentsList"
|
||||
:key="document.id"
|
||||
style="display: flex; flex-wrap: nowrap; gap: 5px;"
|
||||
>
|
||||
<div
|
||||
v-for="file in document.files"
|
||||
:key="file.id"
|
||||
class="col-auto no-padding"
|
||||
>
|
||||
<document-file-viewer-component :file="file">
|
||||
<template v-slot:button>
|
||||
<button
|
||||
class="btn btn-xs btn-default bg-master-lightest b-rad-none no-border"
|
||||
>
|
||||
<i class="fa fa-download"></i>
|
||||
</button>
|
||||
</template>
|
||||
</document-file-viewer-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-1" style="display: flex; flex-wrap: nowrap; gap: 5px;" v-else>
|
||||
<div v-if="item.documents != null" style="display: flex; flex-wrap: nowrap; gap: 5px;">
|
||||
<div
|
||||
v-for="file in item.documents.files"
|
||||
|
||||
@@ -355,7 +355,7 @@
|
||||
<!-- QUESTION NAVIGATION -->
|
||||
<div class="row m-t-50 m-b-10" v-if="question.question_type !== 0">
|
||||
<div class="col p-r-5">
|
||||
<button class="btn btn-sm btn-default bg-master-lightest btn-block b-rad-none" :disabled="hidePrevious===1" @click="formTouched = true; submitForm('previous')">Previous</button>
|
||||
<button class="btn btn-sm btn-default bg-master-lightest btn-block b-rad-none" :disabled="hidePrevious === true" @click="formTouched = true; submitForm('previous')">Previous</button>
|
||||
</div>
|
||||
<div class="col p-l-5">
|
||||
<button class="btn btn-sm btn-primary btn-block b-rad-none" @click="formTouched = true; submitForm('next')">Next</button>
|
||||
|
||||
@@ -47,7 +47,7 @@ if (!function_exists('markedProcessing')) {
|
||||
Route::group(['prefix' => 'admin-work-flow', 'as' => 'admin_work_flow.', 'namespace' => 'Questionnaires'], function () {
|
||||
|
||||
Route::get('/fetch-booking', [AdminWorkflowBaseController::class, 'fetchBooking'])->name('fetch_oldest_order');
|
||||
Route::get('{booking_id}/fetch-model-attributes', [AdminWorkflowBaseController::class, 'fetchModelAttributes'])->name('fetch_model_attributes');
|
||||
// Route::get('{booking_id}/fetch-model-attributes', [AdminWorkflowBaseController::class, 'fetchModelAttributes'])->name('fetch_model_attributes');
|
||||
Route::get('/fetch-pending-approved-po', [AdminWorkflowBaseController::class, 'fetchPendingApprovalPO'])->name('fetch_pending_approve_po');
|
||||
Route::get('/fetch-pending-fill-po', [AdminWorkflowBaseController::class, 'fetchPendingFillPO'])->name('fetch_pending_fill_po');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user