diff --git a/app/Classes/General/Eloquent/Filters/BillNo.php b/app/Classes/General/Eloquent/Filters/BillNo.php new file mode 100644 index 00000000..167dcd51 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/BillNo.php @@ -0,0 +1,20 @@ +where('bill_no', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/PackingLists/Processors/FetchContainersUpdatesFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchContainersUpdatesFromYdPortalProcessor.php index ecc99f4e..93ad4471 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchContainersUpdatesFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchContainersUpdatesFromYdPortalProcessor.php @@ -51,7 +51,7 @@ class FetchContainersUpdatesFromYdPortalProcessor foreach ($containers as $container) { $time_start = microtime(true); - $packingList = $container->packingLists()->random(); + $packingList = $container->packingLists()->first(); $trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [ 'trakingno' => $packingList->reference @@ -108,6 +108,8 @@ class FetchContainersUpdatesFromYdPortalProcessor } } + dump($delayDate, $unstuffingDate); + if($delayDate){ $delayDate = $delayDate->addDays(2); $transport = $container->transports()->first(); diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php index d7aeeff2..de12b30f 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php @@ -51,11 +51,11 @@ class TransactionToPerfexCRMProcessor PerfexCRMProjectStatus::IN_PROGRESS, [], [ - PerfexCRMTasks::TASK_1, - PerfexCRMTasks::TASK_POST_PAYMENT_1, - PerfexCRMTasks::TASK_POST_PAYMENT_2, - PerfexCRMTasks::TASK_POST_PAYMENT_3, - PerfexCRMTasks::TASK_POST_PAYMENT_4, +// PerfexCRMTasks::TASK_1, +// PerfexCRMTasks::TASK_POST_PAYMENT_1, +// PerfexCRMTasks::TASK_POST_PAYMENT_2, +// PerfexCRMTasks::TASK_POST_PAYMENT_3, +// PerfexCRMTasks::TASK_POST_PAYMENT_4, ] ); diff --git a/app/Classes/Modules/Transactions/ControllersLogic/ListMappableTransactionsLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/ListMappableTransactionsLogic.php new file mode 100644 index 00000000..7fab513d --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/ListMappableTransactionsLogic.php @@ -0,0 +1,53 @@ + 'Retrieved Transactions', + 'message' => 'You have successfully retrieved a list of transactions' + ]; + } + + + /** @var ListsTransactions */ + private $listsTransactions; + + /** + * ListTransactionsLogic constructor. + * @param ListsTransactions $listsTransactions + */ + public function __construct(ListsTransactions $listsTransactions) + { + $this->listsTransactions = $listsTransactions; + } + + + + public function logic(Request $request) : JsonResponse + { + + $query = $this->listsTransactions->execute($this->listsTransactions->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(MappableTransactionResource::collection($query)); + + } + + + +} diff --git a/app/Classes/Modules/Transactions/Processors/CreatePaymentTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreatePaymentTransactionProcessor.php index 454ffaf9..568bc4fb 100644 --- a/app/Classes/Modules/Transactions/Processors/CreatePaymentTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreatePaymentTransactionProcessor.php @@ -20,6 +20,7 @@ use App\Models\Wallet; use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor; use App\Classes\Modules\Orders\Processors\UpdateDoFromYDPortalProcessor; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; +use Illuminate\Support\Facades\Log; class CreatePaymentTransactionProcessor { @@ -38,7 +39,7 @@ class CreatePaymentTransactionProcessor /** @var UpdatesWalletBalance */ private $updatesWalletBalance; - + /** @var UpdateDoFromVTPortalProcessor */ private $updateDoFromVTPortalProcessor; @@ -69,7 +70,7 @@ class CreatePaymentTransactionProcessor UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor, UpdatesTransactionStatus $updatesTransactionStatus - ) + ) { $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; $this->createsPaymentTransaction = $createsPaymentTransaction; @@ -87,7 +88,8 @@ class CreatePaymentTransactionProcessor public function execute(Transaction $invoice, $payment_method, $bank_code) { $amount = $invoice->amount; - $company_module = $invoice->owner()->first()->owner()->first()->companyModule()->first(); + Log::info($invoice->owner); + $company_module = $invoice->owner->owner->companyModule()->first(); $approvalStatus = ApprovalStatus::PENDING_SUBMISSION; $billNumber = $this->generatesTransactionBillNumber->execute('PYMT-'); $payment_reference = null; @@ -97,12 +99,12 @@ class CreatePaymentTransactionProcessor // create billplz transaction $payment_method = PaymentMethodType::PAYMENT_GATEWAY; $billPlzBill = $this->createsBillplzBill->execute( - $company_module->name, + $company_module->name, (app()->environment(['production'])) ? $company_module->employees()->first()->email : 'uldvstar@gmail.com', 'This payment is for the invoice number . ' . $billNumber, $amount, - $billNumber, - $bank_code, + $billNumber, + $bank_code, true ); @@ -117,7 +119,7 @@ class CreatePaymentTransactionProcessor } $walletPaymentBillNumber = $this->generatesTransactionBillNumber->execute('PYMT-'); - + $transaction_object = new TransactionObject($walletPaymentBillNumber, TransactionType::PAYMENT, 1, $company_module->id, 1, PaymentMethodType::WALLET, $amount, $amount, 1, 1, 1, 0, 0, null, ApprovalStatus::APPROVED, [], ''); $transaction = $this->createsTransactionableTransaction->execute($wallet, $transaction_object); diff --git a/app/Classes/Notifications/InvoiceIssuedEmail.php b/app/Classes/Notifications/InvoiceIssuedEmail.php index f3cb4b97..8a5c90cc 100644 --- a/app/Classes/Notifications/InvoiceIssuedEmail.php +++ b/app/Classes/Notifications/InvoiceIssuedEmail.php @@ -6,7 +6,6 @@ namespace App\Classes\Notifications; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\TransactionType; use App\Models\PackingList; -use App\Models\PasswordReset; use App\Models\User; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Support\Facades\Storage; @@ -39,7 +38,7 @@ class InvoiceIssuedEmail extends AbstractEmail return (new MailMessage) ->subject('Att: '.$this->user->name.' - Invoice for order no.'. $this->packingList->owner->reference) - ->attach(Storage::disk('documents')->get($invoiceDocument->file->file_info->original->file), [ + ->attach(Storage::disk('documents')->get($invoiceDocument->first()->file->file_info->original->file), [ 'as' => 'name.pdf', 'mime' => 'application/pdf', ])->view('emails.shipment.invoice', ['user' => $this->user, 'packingList' => $this->packingList]); diff --git a/app/Classes/Notifications/ShipmentDepartureEmail.php b/app/Classes/Notifications/ShipmentDepartureEmail.php index 8fab151d..44362d44 100644 --- a/app/Classes/Notifications/ShipmentDepartureEmail.php +++ b/app/Classes/Notifications/ShipmentDepartureEmail.php @@ -9,6 +9,7 @@ use App\Models\PackingList; use App\Models\PasswordReset; use App\Models\User; use Illuminate\Notifications\Messages\MailMessage; +use Illuminate\Support\Facades\Storage; class ShipmentDepartureEmail extends AbstractEmail { @@ -42,7 +43,7 @@ class ShipmentDepartureEmail extends AbstractEmail return (new MailMessage) ->subject('Your packages are on the way to malaysia - Invoice pending payment for order no.'. $this->packingList->owner->reference) - ->attach(Storage::disk('documents')->get($invoiceDocument->file->file_info->original->file), [ + ->attach(Storage::disk('documents')->get($invoiceDocument->first()->file->file_info->original->file), [ 'as' => 'name.pdf', 'mime' => 'application/pdf', ])->bcc(['email_test@cief-malaysia.com'])->view('emails.shipment.ETD', ['user' => $this->user, 'packingList' => $this->packingList]); diff --git a/app/Http/Controllers/Transactions/ListMappableTransactionsController.php b/app/Http/Controllers/Transactions/ListMappableTransactionsController.php new file mode 100644 index 00000000..abf83758 --- /dev/null +++ b/app/Http/Controllers/Transactions/ListMappableTransactionsController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/app/Http/Resources/MappableTransactionResource.php b/app/Http/Resources/MappableTransactionResource.php new file mode 100644 index 00000000..d69c145c --- /dev/null +++ b/app/Http/Resources/MappableTransactionResource.php @@ -0,0 +1,41 @@ +type === TransactionType::TOP_UP) { + $reference = $this->owner->owner->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference; + } + + if($this->type === TransactionType::PAYMENT && $this->owner !== Wallet::class){ + $reference = $this->owner->owner->owner->reference; + } + + return [ + 'system' => 'SHIPPING_PORTAL', + 'type' => $this->type, + 'owner_type' => $this->owner_type, + 'owner_id'=> $this->id, + 'owner_reference'=> $reference, + ]; + } +} diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php index 207231ee..8b72130a 100644 --- a/app/Http/Resources/OrderResource.php +++ b/app/Http/Resources/OrderResource.php @@ -7,6 +7,7 @@ use App\Classes\ValueObjects\Constants\OrderRoleTypes; use App\Classes\ValueObjects\Constants\PackingListType; use App\Classes\ValueObjects\Constants\TransactionType; use App\Classes\ValueObjects\Constants\TransportType; +use App\Models\Transaction; use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; @@ -20,6 +21,8 @@ class OrderResource extends JsonResource */ public function toArray($request) { + $orderId = $this->id; + return [ 'id' => $this->id, 'reference' => $this->reference, @@ -47,7 +50,7 @@ class OrderResource extends JsonResource 'received_packages' => PackingListResource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get()), ]; }), - 'invoices' => $this->whenLoaded('packingLists', function() { + 'invoices' => $this->whenLoaded('packingLists', function() use ($orderId) { return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get()); }), 'remarks' => RemarkResource::collection($this->remarks), diff --git a/app/Http/Resources/OrderV2Resource.php b/app/Http/Resources/OrderV2Resource.php index 7ca77149..c8b82e19 100644 --- a/app/Http/Resources/OrderV2Resource.php +++ b/app/Http/Resources/OrderV2Resource.php @@ -5,6 +5,7 @@ namespace App\Http\Resources; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\OrderRoleTypes; use App\Classes\ValueObjects\Constants\PackingListType; +use App\Classes\ValueObjects\Constants\TransactionType; use App\Classes\ValueObjects\Constants\TransportType; use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; @@ -30,7 +31,7 @@ class OrderV2Resource extends JsonResource 'address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first()), 'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()), 'invoices' => $this->whenLoaded('packingLists', function() { - return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->get()); + return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get()); }), 'remarks' => RemarkResource::collection($this->remarks), 'created_at' => $this->created_at->format('d-m-Y') diff --git a/app/Http/Resources/TransactionResource.php b/app/Http/Resources/TransactionResource.php index 9e9e5771..43540820 100644 --- a/app/Http/Resources/TransactionResource.php +++ b/app/Http/Resources/TransactionResource.php @@ -22,6 +22,7 @@ class TransactionResource extends JsonResource { return [ 'id' => $this->id, + 'owner_type' => $this->owner_type, 'order' => ($this->owner instanceof Transaction) ? new OrderResource($this->owner->owner->owner) : new OrderResource($this->owner->owner), 'documents' => DocumentResource::collection($this->documents), 'type' => (int) $this->type, diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 33d47fb7..9983a2f4 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -103,6 +103,10 @@ class Transaction extends AbstractModel implements Documentable, Transactionable use SoftDeletes; use LogData; + protected $casts = [ + 'type' => 'int' + ]; + protected $table = 'transactions'; public function owner(): morphTo diff --git a/resources/assets/vue/components/paymentsBilling/elements/PaymentHistoryComponent.vue b/resources/assets/vue/components/paymentsBilling/elements/PaymentHistoryComponent.vue index a3ffd197..49869473 100644 --- a/resources/assets/vue/components/paymentsBilling/elements/PaymentHistoryComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/elements/PaymentHistoryComponent.vue @@ -18,6 +18,12 @@ {{item.currency.short_code}} {{(Math.round((item.amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}} +
+
Bill Number
+
+ {{ item.bill_no }} +
+
diff --git a/resources/assets/vue/components/paymentsBilling/elements/PaymentsBillingComponents.vue b/resources/assets/vue/components/paymentsBilling/elements/PaymentsBillingComponents.vue index 337427de..1bbc1253 100644 --- a/resources/assets/vue/components/paymentsBilling/elements/PaymentsBillingComponents.vue +++ b/resources/assets/vue/components/paymentsBilling/elements/PaymentsBillingComponents.vue @@ -27,6 +27,10 @@

Payment Date

{{ item.payment_history[item.payment_history.length-1].created_at }}
+
+

Bill Number

+
{{ item.payment_history[item.payment_history.length-1].payment_reference }}
+
diff --git a/resources/assets/vue/components/wallets/elements/WalletTopUpHistoryComponent.vue b/resources/assets/vue/components/wallets/elements/WalletTopUpHistoryComponent.vue index 29219ff1..86726e04 100644 --- a/resources/assets/vue/components/wallets/elements/WalletTopUpHistoryComponent.vue +++ b/resources/assets/vue/components/wallets/elements/WalletTopUpHistoryComponent.vue @@ -26,6 +26,11 @@
Submitted On: {{ item.updated_at }}
+
+
+
Bill Number: {{ item.bill_no }}
+
+
@@ -66,6 +71,11 @@
Paid On: {{ item.updated_at }}
+
+
+
Bill Number: {{ item.bill_no }}
+
+
@@ -111,6 +121,11 @@
{{ item.payment_method === 5 ? 'Failed' : 'Rejected' }} On: {{ item.updated_at }}
+
+
+
Bill Number: {{ item.bill_no }}
+
+
diff --git a/routes/apipub.php b/routes/apipub.php index 3df8edae..86809f05 100644 --- a/routes/apipub.php +++ b/routes/apipub.php @@ -5,6 +5,7 @@ use Illuminate\Support\Facades\Route; Route::group(['middleware' => 'apipub', 'prefix' => 'v1', 'as' => 'apipub.'], function () { Route::group(['middleware' => 'token.check'], function () { Route::get('transactions/query', 'Transactions\ListTransactionsController@list')->name('transaction.list'); + Route::get('transactions/mappable/query', 'Transactions\ListMappableTransactionsController@list')->name('transaction.mappable.list'); Route::get('groups/query', 'Transactions\ListGroupsController@list')->name('group.list'); }); }); diff --git a/routes/web.php b/routes/web.php index 6fdfc14f..eb394bdc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -246,7 +246,7 @@ Route::get('/customer/{marking}/payment-and-billing', function ($marking) { return view('pages.customers.paymentsBilling', ['company_module_id' => $company_module_id]); })->name('customer.payment-and-billing'); -Route::get('/customer-invoices/{company_module_id}/payment-and-billing', function ($company_module_id) { +Route::get('/customer-invoices/{company_module_id}/payment-and-billing', function ($company_module_id) { // todo-new: check company_module_id return view('pages.customers.paymentsBilling', ['company_module_id' => $company_module_id]); })->name('customer.payment-and-billing-by-company-module-id'); @@ -359,12 +359,11 @@ Route::group(['prefix' => 'yd', 'as' => 'yd.'], function () { }); Route::get('/yd', function (Request $request){ -// $start = $request->input('start_date') ? Carbon::parse($request->input('start_date')): null; -// $end = $request->input('end_date') ? Carbon::parse($request->input('end_date')): null; -// (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute($start, $end); -// (App()->make(\App\Classes\Modules\PackingLists\Processors\FetchPackingListsFromYdPortalProcessor::class))->execute($start, $end); -// (App()->make(\App\Classes\Modules\PackingLists\Processors\FetchContainersFromYdPortalProcessor::class))->execute(); -// (App()->make(\App\Classes\Modules\PackingLists\Processors\FetchContainersUpdatesFromYdPortalProcessor::class))->execute(); + $start = $request->input('start_date') ? Carbon::parse($request->input('start_date')): null; + $end = $request->input('end_date') ? Carbon::parse($request->input('end_date')): null; +// (App()->make(FetchPackingListsFromYdPortalProcessor::class))->execute($start, $end); +// (App()->make(FetchContainersFromYdPortalProcessor::class))->execute(); + (App()->make(FetchContainersUpdatesFromYdPortalProcessor::class))->execute(); // (App()->make(FetchDeliveryUpdatesFromYdPortalProcessor::class))->execute(); // (App()->make(FetchPackingListFromVTPortalProcessor::class))->execute(); })->name('yd.refresh'); @@ -1101,12 +1100,12 @@ Route::get('/final-duplicated-invoice-debug', function(){ foreach ($duplicatedTransactions as $transaction) { $transactionIds = explode(',', $transaction->transaction_ids); - $duplicatedInvoice = Transaction::whereIn('id', $transactionIds)->get(); - - $order_reference = $duplicatedInvoice->first()->owner->owner->reference ?? null; + $duplicatedInvoice = Transaction::whereIn('id', $transactionIds)->get(); + + $order_reference = $duplicatedInvoice->first()->owner->owner->reference ?? null; if ($transaction->type == TransactionType::PAYMENT) { - $order_reference = $duplicatedInvoice->first()->owner->owner->owner->reference ?? null; + $order_reference = $duplicatedInvoice->first()->owner->owner->owner->reference ?? null; } echo ''; @@ -1125,4 +1124,4 @@ Route::get('/final-duplicated-invoice-debug', function(){ } echo ''; }); - +