diff --git a/app/Classes/Modules/Bookings/Services/GeneratesBookingQuotation.php b/app/Classes/Modules/Bookings/Services/GeneratesBookingQuotation.php index 7d6c018e..34f58d3a 100644 --- a/app/Classes/Modules/Bookings/Services/GeneratesBookingQuotation.php +++ b/app/Classes/Modules/Bookings/Services/GeneratesBookingQuotation.php @@ -19,7 +19,7 @@ class GeneratesBookingQuotation $hours = $date->diffInHours($date->copy()->addMinutes($paymentAttemptLimit)->subDays($days)) ; $minutes = $date->diffInMinutes($date->copy()->addMinutes($paymentAttemptLimit)->subDays($days)->subHours($hours)); - $receive_date = $currencyConversionObject ? Carbon::now()->endOfDay()->addWeekdays($currencyConversionObject->getServiceId() === 1 ? 1 : 3)->timezone('Asia/Singapore')->format('4:00 \P\M, jS M, Y \G\M\T T') : null; + $receive_date = $currencyConversionObject ? Carbon::now()->endOfDay()->addWeekdays($currencyConversionObject->getServiceId() === 3 ? 4 : 2)->timezone('Asia/Singapore')->format('4:00 \P\M, jS M, Y \G\M\T T') : null; return [ 'bank' => new BankResource(Bank::find($calculationObject->getConfigurations()->getBankId())), diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php index 93caf8d1..1cf71643 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php @@ -3,37 +3,19 @@ namespace App\Classes\Modules\Transactions\ControllersLogic; -use DB; -use Carbon\Carbon; +use App\Classes\Modules\Transactions\Processors\CreateSupplierTransactionProcessor; use App\Models\Document; -use Barryvdh\DomPDF\PDF; -use App\Models\Transaction; -use Illuminate\Support\Str; use Illuminate\Http\Request; -use App\Models\SegmentConstant; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Storage; use Meneses\LaravelMpdf\Facades\LaravelMpdf; use App\Classes\ValueObjects\Constants\DocumentType; use App\Classes\ValueObjects\Constants\ApprovalStatus; -use App\Classes\ValueObjects\Constants\TransactionType; use App\Classes\Modules\Documents\Services\CreatesFiles; -use App\Classes\ValueObjects\Constants\SegmentConstants; -use App\Classes\ValueObjects\Constants\PaymentMethodType; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\Companies\Services\FetchesCompany; -use App\Classes\Modules\Segments\Services\FetchesConstant; use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf; use App\Classes\Modules\Documents\Services\CreatesDocument; -use App\Classes\Modules\Transactions\Services\CreatesTransaction; - -use App\Classes\Modules\Transactions\Services\FetchesTransaction; use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; -use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; -use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; -use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; -use App\Classes\Modules\Transactions\Services\CalculatesTransactionTransferFee; -use App\Classes\Modules\Transactions\Services\CalculatesTransactionServiceCharge; class CreateSupplierTransactionLogic extends AbstractControllerLogic { @@ -52,14 +34,8 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic /** @var FetchesCompany */ private $fetchesCompany; - /** @var FetchesTransaction */ - private $fetchesTransaction; - - /** @var UpdatesTransactionStatus */ - private $updatesTransactionStatus; - - /** @var CreatesTransaction */ - private $createsTransaction; + /** @var CreateSupplierTransactionProcessor */ + private $createSupplierTransactionProcessor; /** @var CreatesDocument */ private $createsDocument; @@ -67,44 +43,19 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic /** @var CreatesFiles */ private $createsFile; - /** @var GeneratesTransactionBillNumber */ - private $generatesTransactionBillNumber; - - /** @var CalculatesTransactionServiceCharge */ - private $calculatesTransactionServiceCharge; - - /** @var CalculatesTransactionTransferFee */ - private $calculatesTransactionTransferFee; - - /** @var PDF */ - private $pdf; - /** * CreateSupplierTransactionLogic constructor. * @param FetchesCompany $fetchesCompany - * @param FetchesTransaction $fetchesTransaction - * @param FetchesConstant $fetchesConstant - * @param UpdatesTransactionStatus $updatesTransactionStatus - * @param CreatesTransaction $createsTransaction - * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber - * @param CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge - * @param CalculatesTransactionTransferFee $calculatesTransactionTransferFee - * @param PDF $pdf + * @param CreateSupplierTransactionProcessor $createSupplierTransactionProcessor + * @param CreatesDocument $createsDocument + * @param CreatesFiles $createsFile */ - public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, FetchesConstant $fetchesConstant, UpdatesTransactionStatus $updatesTransactionStatus, CreatesTransaction $createsTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge, CalculatesTransactionTransferFee $calculatesTransactionTransferFee, PDF $pdf) + public function __construct(FetchesCompany $fetchesCompany, CreateSupplierTransactionProcessor $createSupplierTransactionProcessor, CreatesDocument $createsDocument, CreatesFiles $createsFile) { - $this->fetchesCompany = $fetchesCompany; - $this->fetchesTransaction = $fetchesTransaction; - $this->fetchesConstant = $fetchesConstant; - $this->updatesTransactionStatus = $updatesTransactionStatus; - $this->createsTransaction = $createsTransaction; + $this->createSupplierTransactionProcessor = $createSupplierTransactionProcessor; $this->createsDocument = $createsDocument; $this->createsFile = $createsFile; - $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; - $this->calculatesTransactionServiceCharge = $calculatesTransactionServiceCharge; - $this->calculatesTransactionTransferFee = $calculatesTransactionTransferFee; - $this->pdf = $pdf; } public function logic(Request $request) : JsonResponse @@ -114,44 +65,13 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic $rate = $request->input('rate'); - $transactions = collect(); - $transferFeeTransactions = collect(); + $payments = $request->input('payments'); - foreach($request->input('payments') as $payment){ + $this->createSupplierTransactionProcessor->execute($supplier, $rate, $payments); - /** @var Transaction $payment */ - $payment = $this->fetchesTransaction->execute(['id' => $payment['id']]); - - if($payment->status !== ApprovalStatus::APPROVED) continue; + if(!count($this->createSupplierTransactionProcessor->getBills())) return $this->response([]); - $this->updatesTransactionStatus->execute($payment, ApprovalStatus::COMPLETED); - $billNumber = $this->generatesTransactionBillNumber->execute('SPLR-'); - // $constant = $this->fetchesConstant->execute(['service_charge' => $supplier->id]); - $constant = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $supplier->id)->first(); - $serviceCharge = $this->calculatesTransactionServiceCharge->execute($payment->original_amount, $rate, $constant ? $constant->detail->service_charge->amount : 0); - - $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, $supplier->id == 2 ? 0 : $serviceCharge, null, ApprovalStatus::PENDING_VERIFICATION); - - $transactions[] = $billTransaction = $this->createsTransaction->execute($payment->booking, $object); - - $transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-'); - $trasferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount); - $object = new TransactionObject($transferFeeNumber, TransactionType::TRANSFER_FEE, 1, $supplier->id, - $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, - $payment->original_amount, $payment->original_amount, $payment->original_currency_id, $payment->original_currency_id, - 1, 0, $trasferFee, null, ApprovalStatus::PENDING_VERIFICATION); - - $transferFeeTransactions[] = $this->createsTransaction->execute($billTransaction, $object); - } - - if(!count($transactions)) return $this->response([]); - - $pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $transactions, 'transferFeeTransactions' => $transferFeeTransactions, 'supplier' => $supplier]); - - $path = Str::studly($supplier->name).'_'.Carbon::now()->format('Y_m_d_h_s_i').'.pdf'; + $pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $this->createSupplierTransactionProcessor->getBills(), 'transferFeeTransactions' => $this->createSupplierTransactionProcessor->getTransferTransactions(), 'supplier' => $supplier]); $object = new DocumentObject( DocumentType::CURRENCY_VENDOR_ORDER, diff --git a/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php index d3561244..e1875f0a 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php @@ -3,123 +3,60 @@ namespace App\Classes\Modules\Transactions\ControllersLogic; -// use DB; -use App\Models\Transaction; +use App\Classes\Modules\Transactions\Processors\CreateSupplierTransactionProcessor; use Illuminate\Http\Request; -use App\Models\SegmentConstant; -use Illuminate\Http\JsonResponse; -use Meneses\LaravelMpdf\Facades\LaravelMpdf; -use App\Classes\ValueObjects\Constants\ApprovalStatus; -use App\Classes\ValueObjects\Constants\TransactionType; -use App\Classes\ValueObjects\Constants\SegmentConstants; -use App\Classes\ValueObjects\Constants\PaymentMethodType; -use App\Classes\General\Abstracts\AbstractControllerLogic; -use App\Classes\Modules\Companies\Services\FetchesCompany; -use App\Classes\Modules\Segments\Services\FetchesConstant; -use App\Classes\Modules\Transactions\Services\CreatesTransaction; - -use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; -use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; -use App\Classes\Modules\Transactions\Services\CalculatesTransactionTransferFee; -use App\Classes\Modules\Transactions\Services\CalculatesTransactionServiceCharge; use Illuminate\Support\Facades\DB; +use Meneses\LaravelMpdf\Facades\LaravelMpdf; +use App\Classes\Modules\Companies\Services\FetchesCompany; +use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf; - -class DownloadMockUpWhiteFormPdfLogic extends AbstractControllerLogic +class DownloadMockUpWhiteFormPdfLogic { - - /** - * @return array - */ - protected function notification():array { - return [ - 'title' => 'Create Mock Up White Form', - 'message' => 'You have successfully created Mock Up White Form' - ]; - } - /** @var FetchesCompany */ private $fetchesCompany; - /** @var CreatesTransaction */ - private $createsTransaction; - - /** @var GeneratesTransactionBillNumber */ - private $generatesTransactionBillNumber; - - /** @var CalculatesTransactionServiceCharge */ - private $calculatesTransactionServiceCharge; - - /** @var CalculatesTransactionTransferFee */ - private $calculatesTransactionTransferFee; + /** @var CreateSupplierTransactionProcessor */ + private $createSupplierTransactionProcessor; /** - * CreateSupplierTransactionLogic constructor. + * DownloadMockUpWhiteFormPdfLogic constructor. * @param FetchesCompany $fetchesCompany - * @param FetchesConstant $fetchesConstant - * @param CreatesTransaction $createsTransaction - * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber - * @param CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge - * @param CalculatesTransactionTransferFee $calculatesTransactionTransferFee + * @param CreateSupplierTransactionProcessor $createSupplierTransactionProcessor */ - public function __construct(FetchesCompany $fetchesCompany, FetchesConstant $fetchesConstant, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge, CalculatesTransactionTransferFee $calculatesTransactionTransferFee) + public function __construct(FetchesCompany $fetchesCompany, CreateSupplierTransactionProcessor $createSupplierTransactionProcessor) { - $this->fetchesCompany = $fetchesCompany; - $this->fetchesConstant = $fetchesConstant; - $this->createsTransaction = $createsTransaction; - $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; - $this->calculatesTransactionServiceCharge = $calculatesTransactionServiceCharge; - $this->calculatesTransactionTransferFee = $calculatesTransactionTransferFee; + $this->createSupplierTransactionProcessor = $createSupplierTransactionProcessor; } - public function logic(Request $request) : JsonResponse + + /** + * @param Request $request + * @return string|\Symfony\Component\HttpFoundation\Response + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function execute(Request $request) { + $supplier = $this->fetchesCompany->execute(['id' => $request->route('id')]); - $rate = $request->route('rate'); + $rate = $request->input('rate'); - $transactions = collect(); - $transferFeeTransactions = collect(); - - $payment_ids = explode(",", $request->route('payment_ids')); + $payments = array_map(function($value){ + return ['id' => $value]; + }, json_decode($request->input('payments'))); DB::beginTransaction(); - foreach($payment_ids as $payment_id){ + $this->createSupplierTransactionProcessor->execute($supplier, $rate, $payments); - /** @var Transaction $payment */ - $payment = Transaction::find($payment_id); - - if($payment->status !== ApprovalStatus::APPROVED) continue; + if(!count($this->createSupplierTransactionProcessor->getBills())) return 'unexpected error'; - $billNumber = $this->generatesTransactionBillNumber->execute('SPLR-'); - $constant = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $supplier->id)->first(); - $serviceCharge = $this->calculatesTransactionServiceCharge->execute($payment->original_amount, $rate, $constant ? $constant->detail->service_charge->amount : 0); + $pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $this->createSupplierTransactionProcessor->getBills(), 'transferFeeTransactions' => $this->createSupplierTransactionProcessor->getTransferTransactions(), 'supplier' => $supplier]); - $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, $supplier->id == 2 ? 0 : $serviceCharge, null, ApprovalStatus::PENDING_VERIFICATION); + DB::rollBack(); - $transactions[] = $billTransaction = $this->createsTransaction->execute($payment->booking, $object); - - $transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-'); - $trasferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount); - $object = new TransactionObject($transferFeeNumber, TransactionType::TRANSFER_FEE, 1, $supplier->id, - $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, - $payment->original_amount, $payment->original_amount, $payment->original_currency_id, $payment->original_currency_id, - 1, 0, $trasferFee, null, ApprovalStatus::PENDING_VERIFICATION); - - $transferFeeTransactions[] = $this->createsTransaction->execute($billTransaction, $object); - } - - - if(!count($transactions)) return $this->response([]); - - $pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $transactions, 'transferFeeTransactions' => $transferFeeTransactions, 'supplier' => $supplier]); - DB::rollback(); return $pdf->stream('MockUpWhiteForm.pdf'); } } diff --git a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php new file mode 100644 index 00000000..3f052352 --- /dev/null +++ b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php @@ -0,0 +1,143 @@ +fetchesTransaction = $fetchesTransaction; + $this->updatesTransactionStatus = $updatesTransactionStatus; + $this->createsTransaction = $createsTransaction; + $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; + $this->calculatesTransactionServiceCharge = $calculatesTransactionServiceCharge; + $this->calculatesTransactionTransferFee = $calculatesTransactionTransferFee; + $this->bills = collect(); + $this->transferFee = collect(); + } + + /** + * @param Company $supplier + * @param String $rate + * @param array $payments + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function execute(Company $supplier, String $rate, Array $payments) { + + foreach($payments as $payment){ + + /** @var Transaction $payment */ + $payment = $this->fetchesTransaction->execute(['id' => $payment['id']]); + + if($payment->status !== ApprovalStatus::APPROVED) continue; + + $this->updatesTransactionStatus->execute($payment, ApprovalStatus::COMPLETED); + $billNumber = $this->generatesTransactionBillNumber->execute('SPLR-'); + $constant = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $supplier->id)->first(); + + $serviceCharge = $this->calculatesTransactionServiceCharge->execute($payment->original_amount, $rate, $constant ? (float) $constant->detail->amount : 0); + + $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); + + /** @var Transaction $billTransaction */ + $billTransaction = $this->createsTransaction->execute($payment, $object); + $this->pushBill($billTransaction); + + $transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-'); + $transferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount); + $object = new TransactionObject($transferFeeNumber, TransactionType::TRANSFER_FEE, 1, $supplier->id, + $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, + $payment->original_amount, $payment->original_amount, $payment->original_currency_id, $payment->original_currency_id, + 1, 0, $transferFee, null, ApprovalStatus::PENDING_VERIFICATION); + + $this->pushTransferFee($this->createsTransaction->execute($billTransaction, $object)); + } + + } + + /** + * @return Collection + */ + public function getBills(): Collection + { + return $this->bills; + } + + /** + * @return Collection + */ + public function getTransferTransactions(): Collection + { + return $this->transferFee; + } + + /** + * @param $bill + */ + private function pushBill($bill): void + { + $this->bills->push($bill); + } + + /** + * @param $transferFee + */ + private function pushTransferFee($transferFee): void + { + $this->transferFee->push($transferFee); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/Services/CalculatesTransactionServiceCharge.php b/app/Classes/Modules/Transactions/Services/CalculatesTransactionServiceCharge.php index 641e3903..8ddb80c9 100644 --- a/app/Classes/Modules/Transactions/Services/CalculatesTransactionServiceCharge.php +++ b/app/Classes/Modules/Transactions/Services/CalculatesTransactionServiceCharge.php @@ -12,7 +12,7 @@ class CalculatesTransactionServiceCharge * @param float $transfer_fee * @return float */ - public function execute(float $amount, float $rate, ?float $service_charge = 0.75, ?float $transfer_fee = 0.00) { + public function execute(float $amount, float $rate, ?float $service_charge = 0, ?float $transfer_fee = 0.00) { return (($amount + $transfer_fee) * (1/$rate)) * $service_charge / 100; } diff --git a/app/Classes/Modules/Transactions/Services/CalculatesTransactionTransferFee.php b/app/Classes/Modules/Transactions/Services/CalculatesTransactionTransferFee.php index 14f77b84..b5feb245 100644 --- a/app/Classes/Modules/Transactions/Services/CalculatesTransactionTransferFee.php +++ b/app/Classes/Modules/Transactions/Services/CalculatesTransactionTransferFee.php @@ -10,8 +10,8 @@ class CalculatesTransactionTransferFee * @param float $transfer_fee * @return float */ - public function execute(float $amount, ?float $transfer_fee = 0.002) { - return $amount * $transfer_fee/100; + public function execute(float $amount, ?float $transfer_fee = 0) { + return $amount * ($transfer_fee / 100); } } \ No newline at end of file diff --git a/app/Classes/ValueObjects/Constants/BankAccountType.php b/app/Classes/ValueObjects/Constants/BankAccountType.php index 13a36fde..c1ae288e 100644 --- a/app/Classes/ValueObjects/Constants/BankAccountType.php +++ b/app/Classes/ValueObjects/Constants/BankAccountType.php @@ -8,4 +8,6 @@ final class BankAccountType { public const EXTERNAL = 2; + public const ALIPAY= 3; + } diff --git a/app/Http/Controllers/Transactions/DownloadMockUpWhiteFormPdfController.php b/app/Http/Controllers/Transactions/DownloadMockUpWhiteFormPdfController.php index 10267363..e94c9484 100644 --- a/app/Http/Controllers/Transactions/DownloadMockUpWhiteFormPdfController.php +++ b/app/Http/Controllers/Transactions/DownloadMockUpWhiteFormPdfController.php @@ -9,7 +9,7 @@ use Illuminate\Http\JsonResponse; class DownloadMockUpWhiteFormPdfController { - public function download(Request $request, DownloadMockUpWhiteFormPdfLogic $logic) : JsonResponse { + public function download(Request $request, DownloadMockUpWhiteFormPdfLogic $logic) { return $logic->execute($request); } } diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php index 929432e3..fceab5bc 100644 --- a/app/Http/Resources/CompanyResource.php +++ b/app/Http/Resources/CompanyResource.php @@ -30,6 +30,9 @@ class CompanyResource extends JsonResource $lastPayment = $this->transactions()->where('transactions.type', TransactionType::PAYMENT)->whereIn('transactions.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->orderBy('id', 'DESC')->first(); $totalPayments = $this->transactions()->where('transactions.type', TransactionType::PAYMENT)->whereIn('transactions.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount'); + $segment = SegmentConstant::where('reference', SegmentConstants::SUPPLIER_CURRENCIES)->where('detail->id', $this->id)->first(); + $serviceCharge = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $this->id)->first(); + return [ 'id' => $this->id, 'name' => $this->name, @@ -57,14 +60,14 @@ class CompanyResource extends JsonResource 'default' => new BankResource($this->banks->where('type', BankAccountType::EXTERNAL)->where('default', true)->first()) ], 'segments' => SegmentResource::collection($this->segments), - 'service_charges' => SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $this->id)->first(), 'services' => (new FetchesCompanyServices())->getServices($this->servicesConfigurations()), - 'currencies' => $this->when($this->business_type === BusinessType::CURRENCY_VENDOR, function(){ - $segment = SegmentConstant::where('reference', SegmentConstants::SUPPLIER_CURRENCIES)->where('detail->id', $this->id)->first(); - return $segment ? CurrencyResource::collection(Currency::whereIn('id', $segment->detail->currencies)->get()) : []; - }), 'wallet' => new WalletResource($this->wallets()->first()), - 'created_at' => $this->created_at->format('d-m-Y') + 'created_at' => $this->created_at->format('d-m-Y'), + $this->mergeWhen($this->business_type === BusinessType::CURRENCY_VENDOR, [ + 'currencies' => $segment ? CurrencyResource::collection(Currency::whereIn('id', $segment->detail->currencies)->get()) : [], + 'service_charge' => $serviceCharge + ]) + ]; } } diff --git a/app/Http/Resources/TransactionResource.php b/app/Http/Resources/TransactionResource.php index 35c29908..b7ca2f72 100644 --- a/app/Http/Resources/TransactionResource.php +++ b/app/Http/Resources/TransactionResource.php @@ -18,7 +18,7 @@ class TransactionResource extends JsonResource { $booking = (int)$this->type === TransactionType::BILL ? $this->owner->owner : $this->booking; - $days = $this->updated_at->endOfDay()->addWeekdays($booking->service_id === 1 ? 1 : 3); + $days = $this->updated_at->endOfDay()->addWeekdays($booking->service_id === 3 ? 3 : 1); return [ 'id' => $this->id, diff --git a/resources/assets/vue/components/banks/forms/BankAccountFormComponent.vue b/resources/assets/vue/components/banks/forms/BankAccountFormComponent.vue index 7e529be8..4b4d0d6c 100644 --- a/resources/assets/vue/components/banks/forms/BankAccountFormComponent.vue +++ b/resources/assets/vue/components/banks/forms/BankAccountFormComponent.vue @@ -33,13 +33,13 @@
- +
-
-
+
+
diff --git a/resources/assets/vue/components/bookings/elements/BookingConfirmationComponent.vue b/resources/assets/vue/components/bookings/elements/BookingConfirmationComponent.vue index 6d98fa3c..9311c735 100644 --- a/resources/assets/vue/components/bookings/elements/BookingConfirmationComponent.vue +++ b/resources/assets/vue/components/bookings/elements/BookingConfirmationComponent.vue @@ -9,7 +9,7 @@
-
+
{{this.data.serviceType.name}}
@@ -20,7 +20,6 @@
Service Type
-
@@ -79,7 +78,7 @@
- +
diff --git a/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue b/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue index 6b285afd..1fffd0a0 100644 --- a/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue +++ b/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue @@ -44,7 +44,7 @@
{{service.name}} - +
diff --git a/resources/assets/vue/components/bookings/forms/BookingPaymentQuotationComponent.vue b/resources/assets/vue/components/bookings/forms/BookingPaymentQuotationComponent.vue index a0e13ff2..643cd29a 100644 --- a/resources/assets/vue/components/bookings/forms/BookingPaymentQuotationComponent.vue +++ b/resources/assets/vue/components/bookings/forms/BookingPaymentQuotationComponent.vue @@ -49,7 +49,8 @@
-
+ +
+
+
+
The recipient will receive the transfer amount by
{{ this.calculation.receive_date }}
+
+
Outstanding
@@ -399,11 +405,6 @@
{{this.data.fixed_currency.short_code}} {{(Math.round(((this.data.outstanding_amount - parseFloat(amount.replace(',', '')))+ Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}
-
-
-
The recipient will receive the transfer amount by
{{ this.calculation.receive_date }}
-
-
Recipient Gets
diff --git a/resources/assets/vue/components/bookings/forms/ConfirmQuotationFormComponent.vue b/resources/assets/vue/components/bookings/forms/ConfirmQuotationFormComponent.vue index 9b168415..f8db5603 100644 --- a/resources/assets/vue/components/bookings/forms/ConfirmQuotationFormComponent.vue +++ b/resources/assets/vue/components/bookings/forms/ConfirmQuotationFormComponent.vue @@ -23,11 +23,6 @@
You will be redirected to your bank to complete the payment of {{(Math.round((calculation.total + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}} MYR after clicking on the confirm button below. please follow your bank instruction to complete the payment
-
-
-
You will be redirected to your bank to complete the payment of {{(Math.round((calculation.total + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}} MYR after clicking on the confirm button below. please follow your bank instruction to complete the payment
-
-
diff --git a/resources/assets/vue/components/bookings/forms/CurrencyConverterComponent.vue b/resources/assets/vue/components/bookings/forms/CurrencyConverterComponent.vue index df8d0ef2..65d5a243 100644 --- a/resources/assets/vue/components/bookings/forms/CurrencyConverterComponent.vue +++ b/resources/assets/vue/components/bookings/forms/CurrencyConverterComponent.vue @@ -6,7 +6,7 @@ {{error}}
-
+
The recipient will receive the transfer amount by
{{ this.calculation.receive_date }}
diff --git a/resources/assets/vue/components/bookings/forms/SupplierPlaceOrderFormComponent.vue b/resources/assets/vue/components/bookings/forms/SupplierPlaceOrderFormComponent.vue index 84a9caa8..4ec71edd 100644 --- a/resources/assets/vue/components/bookings/forms/SupplierPlaceOrderFormComponent.vue +++ b/resources/assets/vue/components/bookings/forms/SupplierPlaceOrderFormComponent.vue @@ -141,15 +141,11 @@ }; }, generateMockWhiteForm() { - var paymentsIds = []; - - this.payments.forEach(function(payment) { - paymentsIds.push(payment.id); + let paymentIds = this.payments.map(function(payment) { + return payment.id }); - - paymentsIds = paymentsIds.toString(); - window.open(this.route('transactions.supplier.mockUpWhiteForm.download', this.supplier.id, this.parameters.rate, paymentsIds), '_blank'); + window.open(this.route('whiteForm.mockUp', this.supplier.id)+'?rate='+this.parameters.rate+'&payments='+JSON.stringify(paymentIds), '_blank'); } }, mixins: [FormHandler] diff --git a/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue b/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue index 07b1eda0..f5277a00 100644 --- a/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue @@ -114,7 +114,7 @@
- + @@ -126,7 +126,7 @@
- + @@ -176,9 +176,10 @@ methods: { successHandler(response){ this.suppliers = response.payload.data; - this.updateSupplier(this.suppliers[0]); - this.updateCurrency(this.suppliers[0].currencies[0]); - this.updateService(this.suppliers[0].services[0]); + this.selectedSupplier= this.suppliers[0]; + this.selectedService = this.suppliers[0].services[0]; + this.selectedCurrency = this.suppliers[0].currencies[0]; + this.updateList(); }, updateSupplier(supplier){ if(supplier !== this.selectedSupplier){ diff --git a/resources/assets/vue/components/companies/elements/SupplierComponent.vue b/resources/assets/vue/components/companies/elements/SupplierComponent.vue index 8f0090fd..b25e9ae7 100644 --- a/resources/assets/vue/components/companies/elements/SupplierComponent.vue +++ b/resources/assets/vue/components/companies/elements/SupplierComponent.vue @@ -42,7 +42,7 @@
-
0.00
+
{{item.service_charge ? parseFloat(item.service_charge.detail.amount).toFixed(3) : '0.000'}}%
@@ -59,7 +59,7 @@ - + diff --git a/resources/assets/vue/components/companies/forms/SupplierServiceChargeFormComponent.vue b/resources/assets/vue/components/companies/forms/SupplierServiceChargeFormComponent.vue index 4a4bea33..37301e23 100644 --- a/resources/assets/vue/components/companies/forms/SupplierServiceChargeFormComponent.vue +++ b/resources/assets/vue/components/companies/forms/SupplierServiceChargeFormComponent.vue @@ -17,8 +17,8 @@
- - + +
@@ -40,13 +40,9 @@ import { required, requiredIf } from "vuelidate/lib/validators"; export default { props: { - details: { - type: Object, - required: true - }, - defaultCharge: { + supplierId: { type: Number, - required: false + required: true } }, data(){ @@ -55,11 +51,9 @@ name: 'Service Charge', reference: 'SERVICE_CHARGE', detail: { - service_charge: { - id: this.details.id, - type: "percentage", - amount: this.defaultCharge, - }, + id: this.supplierId, + type: "percentage", + amount: 0, }, segment_id: 1 }, @@ -68,13 +62,26 @@ validations: { parameters: { amount: { - required: true + detail: { + amount: { + required: true + } + } + } + } + }, + created(){ + if(this.data){ + this.parameters.detail = { + id: this.supplierId, + type: "percentage", + amount: parseFloat(this.data.detail.amount).toFixed(3), } } }, methods: { submitForm(){ - this.submit(this.defaultCharge ? this.route('api.segment_constant.update', this.service_charges.id) : this.route('api.segment_constant.create'), 'post', this.section, true, true); + this.submit(this.data ? this.route('api.segment_constant.update', this.data.id) : this.route('api.segment_constant.create'), this.data ? 'put' : 'post', this.section, true, true); }, }, mixins: [ModalFormHandler] diff --git a/resources/assets/vue/components/general/forms/SelectableComponent.vue b/resources/assets/vue/components/general/forms/SelectableComponent.vue index 0e71e6a7..95db6af8 100644 --- a/resources/assets/vue/components/general/forms/SelectableComponent.vue +++ b/resources/assets/vue/components/general/forms/SelectableComponent.vue @@ -34,7 +34,7 @@ if(!success){return;} let vm = this; - let mappedList = response.payload.data.map(function(value){ + let mappedList = $.map(response.payload.data, function(value){ let preservedValue = value; return {'id': !isNaN(value[vm.valueColumn]) ? parseInt(value[vm.valueColumn]) : value[vm.valueColumn], 'text': vm.labelColumn.map(function(label){ diff --git a/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue b/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue index a29f7572..a2408fc3 100644 --- a/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue @@ -77,7 +77,6 @@ parameters: { starting_on:'', ending_on:'', - // segment_id: '', title: '', description: '', } @@ -106,21 +105,11 @@ }, created(){ - console.log("lado form"); }, methods: { submitForm(){ - //this.submit(route('api.announcement.create'), 'post', this.section, true, false); this.submit((this.data ? this.route('api.announcement.update', this.data.id) : this.route('api.announcement.create')), (this.data ? 'put' : 'post'), this.section, true, false) - }, - // successHandler(response){ - // this.closeModal(); - // //this.formHandler(); - // this.resetForm(); - // }, - // errorHandler(error){ - // this.formHandler(error.message); - // } + } }, mixins: [ModalFormHandler], diff --git a/resources/assets/vue/general/mixins/formHandler.js b/resources/assets/vue/general/mixins/formHandler.js index 41713c17..3e7c0daa 100644 --- a/resources/assets/vue/general/mixins/formHandler.js +++ b/resources/assets/vue/general/mixins/formHandler.js @@ -31,6 +31,7 @@ export default { productPrice: {decimal: '.',thousands: ',', precision: 3}, exchangeRate: {decimal: '.', thousands: '', precision: 5}, percentage: {decimal: '.', thousands: '', precision: 2, suffix: '%'}, + threeDecimalPercentage: {decimal: '.', thousands: '', precision: 3, suffix: '%'}, integer: {decimal: '', thousands: '', precision: 0}, } diff --git a/resources/views/pages/pdfs/currency_vendor_order.blade.php b/resources/views/pages/pdfs/currency_vendor_order.blade.php index 922d7a7f..c19811bb 100644 --- a/resources/views/pages/pdfs/currency_vendor_order.blade.php +++ b/resources/views/pages/pdfs/currency_vendor_order.blade.php @@ -37,12 +37,12 @@ @foreach($transactions as $transaction) - {{$transaction->owner->marking}} - {{$transaction->owner->company->reference}} + {{$transaction->owner->owner->marking}} + {{$transaction->owner->owner->company->reference}} {{$transaction->currency_rate}} {{$transaction->currency->short_code}} {{number_format((float)$transaction->amount, 2, '.', '')}} - Account Holder Name: {{$transaction->owner->bank->holder_name}}
{{$transaction->owner->bank->bank_name}}: {{$transaction->owner->bank->account_no}} -
Branch: {{$transaction->owner->bank->bank_branch}}
Bank in Amount: {{$transaction->original_currency->short_code}} {{$transaction->original_amount}} + Account Holder Name: {{$transaction->owner->owner->bank->holder_name}}
{{$transaction->owner->owner->bank->bank_name}}: {{$transaction->owner->owner->bank->account_no}} +
Branch: {{$transaction->owner->owner->bank->bank_branch}}
Bank in Amount: {{$transaction->original_currency->short_code}} {{$transaction->original_amount}} @endforeach @@ -78,9 +78,9 @@ MYR {{$sub_total_amount}} - Service charge ({{ $supplier->id == 2 ? '0.00' : '0.75%' }}): + Service charge: @php - $service_charge = number_format((float)$sub_total_amount * 0.75 / 100, 2, '.', ''); + $service_charge = number_format((float)$transactions->sum('service_charge'), 2, '.', ''); @endphp MYR {{$service_charge}} diff --git a/routes/web.php b/routes/web.php index d3b4e432..5540a129 100644 --- a/routes/web.php +++ b/routes/web.php @@ -172,4 +172,4 @@ Route::get('purchase/sensitive/', function(Request $request){ } }); -Route::get('/transactions/supplier/{id}/mock-up-white-form/download/{rate}/{payment_ids}', 'Transactions\DownloadMockUpWhiteFormPdfController@download')->name('transactions.supplier.mockUpWhiteForm.download'); \ No newline at end of file +Route::get('/transactions/supplier/{id}/mock_up', 'Transactions\DownloadMockUpWhiteFormPdfController@download')->name('whiteForm.mockUp'); \ No newline at end of file