mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-24 23:14:04 +00:00
Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3fe98b24a4 | |||
| 39892a0938 | |||
| 0ffe81d1cf | |||
| 5fd6e6a528 | |||
| 09ede52ecf | |||
| e5d6f3f581 | |||
| aa65b333c8 | |||
| 656c50e047 | |||
| 275157b243 | |||
| 0c9ffd2bf7 | |||
| d4dcae155d | |||
| bad8cadb3a | |||
| 3af32cc6e7 | |||
| 34bab6a45c | |||
| dd1eae1ea2 | |||
| b46bfb38bf | |||
| 19c4ee4fda | |||
| 13f13c7a0e | |||
| ffa63f611b | |||
| 82675ab80c | |||
| aac04c4135 | |||
| 56dca799f8 | |||
| 42d8f811c6 | |||
| 030136fd03 | |||
| c8b6e271e3 | |||
| f93997b858 | |||
| 6fbc23d7c4 | |||
| e0a264d58f | |||
| fec20b0947 | |||
| 0bf61d93c5 | |||
| bea24fb48e | |||
| 17a4522f50 | |||
| dfedb99c13 | |||
| 669cac9bd4 | |||
| d7625aece7 | |||
| a36c5c3063 |
@@ -13,6 +13,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
|
|||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class FetchOrdersFromYDPortalJob implements ShouldQueue
|
class FetchOrdersFromYDPortalJob implements ShouldQueue
|
||||||
{
|
{
|
||||||
@@ -29,12 +30,17 @@ class FetchOrdersFromYDPortalJob implements ShouldQueue
|
|||||||
*/
|
*/
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
|
Log::info('FetchOrdersFromYDPortalJob starts');
|
||||||
|
Log::info('FetchPackingListsFromYdPortalProcessor starts');
|
||||||
(App()->make(FetchPackingListsFromYdPortalProcessor::class))->execute();
|
(App()->make(FetchPackingListsFromYdPortalProcessor::class))->execute();
|
||||||
|
Log::info('FetchContainersFromYdPortalProcessor starts');
|
||||||
(App()->make(FetchContainersFromYdPortalProcessor::class))->execute();
|
(App()->make(FetchContainersFromYdPortalProcessor::class))->execute();
|
||||||
|
Log::info('FetchContainersUpdatesFromYdPortalProcessor starts');
|
||||||
(App()->make(FetchContainersUpdatesFromYdPortalProcessor::class))->execute();
|
(App()->make(FetchContainersUpdatesFromYdPortalProcessor::class))->execute();
|
||||||
|
Log::info('FetchDeliveryUpdatesFromYdPortalProcessor starts');
|
||||||
(App()->make(FetchDeliveryUpdatesFromYdPortalProcessor::class))->execute();
|
(App()->make(FetchDeliveryUpdatesFromYdPortalProcessor::class))->execute();
|
||||||
|
Log::info('FetchOrdersFromYDPortalJob ends');
|
||||||
// (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
|
// (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ use App\Models\User;
|
|||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class CreateCustomerLogic extends AbstractControllerLogic
|
class CreateCustomerLogic extends AbstractControllerLogic
|
||||||
{
|
{
|
||||||
@@ -167,6 +169,19 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
CreatePerfexCRMCustomer::dispatch($createLeadPerfexCRMObject);
|
CreatePerfexCRMCustomer::dispatch($createLeadPerfexCRMObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(app()->environment(['production'])){
|
||||||
|
// call wac webhook
|
||||||
|
$url = config('wagWebhookUrl.account_registration_url');
|
||||||
|
$payload = [
|
||||||
|
'name' => $request->input('name'),
|
||||||
|
'email' => $request->input('email'),
|
||||||
|
'phone' => $request->input('phone'),
|
||||||
|
'portal' => 'izyim'
|
||||||
|
];
|
||||||
|
$response = Http::post($url, $payload);
|
||||||
|
Log::channel('wac_webhook')->info('Register Account: ' . json_encode($response));
|
||||||
|
}
|
||||||
|
|
||||||
// $this->generateEmailVerificationAttemptProcessor->execute($user);
|
// $this->generateEmailVerificationAttemptProcessor->execute($user);
|
||||||
|
|
||||||
return $this->response($this->authenticationProcessor->execute($request));
|
return $this->response($this->authenticationProcessor->execute($request));
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
return [
|
return [
|
||||||
'DocNo',
|
'DocNo',
|
||||||
'DocDate',
|
'DocDate',
|
||||||
|
'PaymentDate',
|
||||||
'DebtorCode',
|
'DebtorCode',
|
||||||
'Ref',
|
'Ref',
|
||||||
'ShipInfo',
|
'ShipInfo',
|
||||||
@@ -59,12 +60,12 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
{
|
{
|
||||||
$start_date = $this->request->input('startDate', null);
|
$start_date = $this->request->input('startDate', null);
|
||||||
if ($start_date) {
|
if ($start_date) {
|
||||||
$start_date = Carbon::parse($this->request->input('startDate'))->format('Y-m-d');
|
$start_date = Carbon::parse($start_date)->startOfDay();
|
||||||
}
|
}
|
||||||
|
|
||||||
$end_date = $this->request->input('endDate', null);
|
$end_date = $this->request->input('endDate', null);
|
||||||
if ($end_date) {
|
if ($end_date) {
|
||||||
$end_date = Carbon::parse($this->request->input('endDate'))->format('Y-m-d');
|
$end_date = Carbon::parse($end_date)->endOfDay();
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = Transaction::query();
|
$query = Transaction::query();
|
||||||
@@ -77,30 +78,31 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
$approvalStatus = ApprovalStatus::APPROVED;
|
$approvalStatus = ApprovalStatus::APPROVED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// $query->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [$approvalStatus]);
|
// Adjusted the query to include both types and status
|
||||||
$query->whereIn('type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])->whereIn('status', [$approvalStatus]);
|
$query->whereIn('type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])
|
||||||
|
->where('status', $approvalStatus);
|
||||||
|
|
||||||
if($start_date && $end_date) {
|
if ($start_date && $end_date) {
|
||||||
$query->whereBetween('updated_at', [
|
$query->whereHas('transactions', function($transaction) use ($start_date, $end_date) {
|
||||||
Carbon::parse($start_date)->format('Y-m-d 0:00:00'),
|
$transaction->where('type', TransactionType::PAYMENT)
|
||||||
Carbon::parse($end_date)->format('Y-m-d 23:59:59')
|
->whereBetween('updated_at', [$start_date, $end_date]);
|
||||||
]);
|
|
||||||
}
|
|
||||||
elseif($start_date && !$end_date) {
|
|
||||||
$query->whereHas('transactions', function($transaction) use ($start_date) {
|
|
||||||
$transaction->where('type', TransactionType::PAYMENT)->where('updated_at', '>=', Carbon::parse($start_date)->format('Y-m-d 0:00:00'));
|
|
||||||
});
|
});
|
||||||
|
} elseif ($start_date) {
|
||||||
}
|
$query->whereHas('transactions', function($transaction) use ($start_date) {
|
||||||
elseif(!$start_date && $end_date) {
|
$transaction->where('type', TransactionType::PAYMENT)
|
||||||
|
->where('updated_at', '>=', $start_date);
|
||||||
|
});
|
||||||
|
} elseif ($end_date) {
|
||||||
$query->whereHas('transactions', function($transaction) use ($end_date) {
|
$query->whereHas('transactions', function($transaction) use ($end_date) {
|
||||||
$transaction->where('type', TransactionType::PAYMENT)->where('updated_at', '>=', Carbon::parse($end_date)->format('Y-m-d 0:00:00'));
|
$transaction->where('type', TransactionType::PAYMENT)
|
||||||
|
->where('updated_at', '<=', $end_date);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function map($transaction): array
|
public function map($transaction): array
|
||||||
{
|
{
|
||||||
$container = $transaction->owner->containers()->first();
|
$container = $transaction->owner->containers()->first();
|
||||||
@@ -142,6 +144,7 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
$rows[] = [
|
$rows[] = [
|
||||||
$firstItem ? '<<New>>' : '',
|
$firstItem ? '<<New>>' : '',
|
||||||
$transaction->created_at->format('m/d/Y H:m'),
|
$transaction->created_at->format('m/d/Y H:m'),
|
||||||
|
$transaction->transactions()->where('type', TransactionType::PAYMENT)->first()->updated_at->format('m/d/Y H:m'),
|
||||||
$company->debtor,
|
$company->debtor,
|
||||||
$order->reference,
|
$order->reference,
|
||||||
$order->reference,
|
$order->reference,
|
||||||
@@ -166,7 +169,7 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
'<<New>>',
|
'<<New>>',
|
||||||
$transaction->created_at->format('m/d/Y H:m'),
|
$transaction->transactions()->where('type', TransactionType::PAYMENT)->first()->updated_at->format('m/d/Y H:m'),
|
||||||
$company->debtor,
|
$company->debtor,
|
||||||
$order->reference,
|
$order->reference,
|
||||||
$order->reference,
|
$order->reference,
|
||||||
|
|||||||
+2
-1
@@ -76,6 +76,7 @@ class FetchDeliveryUpdatesFromYdPortalProcessor
|
|||||||
try {
|
try {
|
||||||
$client = new \GuzzleHttp\Client(['cookies' => true, 'headers' => ['Cookie' => 'utc_offset=480']]);
|
$client = new \GuzzleHttp\Client(['cookies' => true, 'headers' => ['Cookie' => 'utc_offset=480']]);
|
||||||
|
|
||||||
|
Log::info('Delivery tracking sTrackingNo: '. $packingList->reference);
|
||||||
$request = $client->request('get', 'https://main.universe.com.my/Tracking/User/Paging?sEcho=1&sTrackingNo='.$packingList->reference.'&sOrgId=sti', ['timeout' => 3]);
|
$request = $client->request('get', 'https://main.universe.com.my/Tracking/User/Paging?sEcho=1&sTrackingNo='.$packingList->reference.'&sOrgId=sti', ['timeout' => 3]);
|
||||||
$deliveryTracking = json_decode($request->getBody()->getContents());
|
$deliveryTracking = json_decode($request->getBody()->getContents());
|
||||||
foreach (array_reverse($deliveryTracking->aaData) as $trackingRow) {
|
foreach (array_reverse($deliveryTracking->aaData) as $trackingRow) {
|
||||||
@@ -119,7 +120,7 @@ class FetchDeliveryUpdatesFromYdPortalProcessor
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Log::info('FetchDeliveryUpdatesFromYdPortalProcessor ends');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-1
@@ -138,7 +138,13 @@ class FetchPackingListsFromYdPortalProcessor
|
|||||||
|
|
||||||
$receiveDate = Carbon::parse(substr(preg_replace("/[^0-9]/", "", $row->expressno), 0, 8));
|
$receiveDate = Carbon::parse(substr(preg_replace("/[^0-9]/", "", $row->expressno), 0, 8));
|
||||||
|
|
||||||
$customerno = preg_split('(-|\(|\)|\/)', $row->customerno);
|
$customerno = $row->customerno;
|
||||||
|
// Check if $customerno contains '正确唛头YD' and extract the part after it
|
||||||
|
if (strpos($customerno, '正确唛头YD') !== false) {
|
||||||
|
$customerno = explode('正确唛头YD', $customerno)[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
$customerno = preg_split('/[-()\/]/', $customerno);
|
||||||
|
|
||||||
$orderNumber = $customerno[array_key_last($customerno)];
|
$orderNumber = $customerno[array_key_last($customerno)];
|
||||||
$allow_contract = true;
|
$allow_contract = true;
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ use Illuminate\Http\JsonResponse;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
|
use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
class CreateInvoiceTransactionProcessor
|
class CreateInvoiceTransactionProcessor
|
||||||
{
|
{
|
||||||
@@ -74,6 +75,18 @@ class CreateInvoiceTransactionProcessor
|
|||||||
*/
|
*/
|
||||||
public function execute(PackingList $packingList)
|
public function execute(PackingList $packingList)
|
||||||
{
|
{
|
||||||
|
$ori_packing_list = $packingList;
|
||||||
|
// call wac webhook
|
||||||
|
$hasInvoiceCreated = Transaction::withTrashed()
|
||||||
|
->where('type', TransactionType::SHIPPING_INVOICE)
|
||||||
|
->where('owner_type', PackingList::class)
|
||||||
|
->where('owner_id', $ori_packing_list->id)
|
||||||
|
->exists();
|
||||||
|
|
||||||
|
if ($hasInvoiceCreated) {
|
||||||
|
Log::channel('wac_webhook')->info('Regenerating Invoice for PackingList: ' . $ori_packing_list->id . '. No call wac api.');
|
||||||
|
}
|
||||||
|
|
||||||
$packing_list = PackingList::where('reference', $packingList->reference)->where('type', PackingListType::SHIPPING_PACKING_LIST)->first();
|
$packing_list = PackingList::where('reference', $packingList->reference)->where('type', PackingListType::SHIPPING_PACKING_LIST)->first();
|
||||||
|
|
||||||
$billable_packing_list = $packing_list->packingLists()->first();
|
$billable_packing_list = $packing_list->packingLists()->first();
|
||||||
@@ -238,6 +251,32 @@ class CreateInvoiceTransactionProcessor
|
|||||||
|
|
||||||
$this->createsTransactionDetail->execute($invoice_transaction, $object_detail);
|
$this->createsTransactionDetail->execute($invoice_transaction, $object_detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (app()->environment('production') && !$hasInvoiceCreated) {
|
||||||
|
$order = $ori_packing_list->owner;
|
||||||
|
$companyModule = $order->companyModule;
|
||||||
|
$company = $companyModule->company;
|
||||||
|
$companyContact = $company->contacts()->first();
|
||||||
|
$employee = $companyModule->employees()->first();
|
||||||
|
|
||||||
|
$invoiceCount = Transaction::where('type', TransactionType::SHIPPING_INVOICE)
|
||||||
|
->where('receiver', $companyModule->id)
|
||||||
|
->where('status', ApprovalStatus::APPROVED)
|
||||||
|
->count();
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'name' => $employee->name,
|
||||||
|
'email' => $employee->email,
|
||||||
|
'phone' => $companyContact->phone,
|
||||||
|
'order_reference' => $order->reference,
|
||||||
|
'portal' => 'izyim',
|
||||||
|
'invoice_count' => $invoiceCount,
|
||||||
|
];
|
||||||
|
|
||||||
|
Log::channel('wac_webhook')->info('Attempt to send wac_webhook - Invoice Created: ' . json_encode($payload));
|
||||||
|
$response = Http::post(config('wagWebhookUrl.invoice_created_url'), $payload);
|
||||||
|
Log::channel('wac_webhook')->info('Invoice Created: ' . json_encode($response));
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ class CreatePaymentTransactionProcessor
|
|||||||
/** @var Wallet $wallet */
|
/** @var Wallet $wallet */
|
||||||
$wallet = $company_module->wallets()->first();
|
$wallet = $company_module->wallets()->first();
|
||||||
|
|
||||||
if((float) number_format(($wallet->amount - $amount),2) < 0){
|
if((float) number_format(($wallet->amount - $amount),2) < -0.01){
|
||||||
throw new MalformedRequestException('Insufficient wallet balance. Please Top up your wallet.');
|
throw new MalformedRequestException('Insufficient wallet balance. Please Top up your wallet.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Wac\ControllersLogic;
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Accounts\DataTransferObjects\RegistrationObject;
|
||||||
|
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
|
||||||
|
use App\Classes\Modules\HelpMenu\Standards\Rules\CanFetchHelpMenuQuestion;
|
||||||
|
use App\Classes\Modules\HelpMenu\Processors\FetchFirstQuestionQAProcessor;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Http\Resources\HelpMenuQuestionResource;
|
||||||
|
use App\Models\User;
|
||||||
|
use ErrorException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
|
||||||
|
use App\Classes\Modules\Accounts\Services\CreatesUser;
|
||||||
|
use App\Classes\ValueObjects\Constants\RoleTypes;
|
||||||
|
|
||||||
|
class RegisterExchangeEmailLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'title' => 'Register Exchange Email',
|
||||||
|
'message' => 'You have successfully registered an exchange email address'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var AssignEmployeeProcessor */
|
||||||
|
private $assignEmployeeProcessor;
|
||||||
|
|
||||||
|
/** @var CreatesUser */
|
||||||
|
private $createsUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegisterEmailLogic constructor.
|
||||||
|
* @param AssignEmployeeProcessor $assignEmployeeProcessor
|
||||||
|
*/
|
||||||
|
public function __construct(AssignEmployeeProcessor $assignEmployeeProcessor, CreatesUser $createsUser)
|
||||||
|
{
|
||||||
|
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
|
||||||
|
$this->createsUser = $createsUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
// Validate the request inputs
|
||||||
|
$validator = Validator::make(
|
||||||
|
$request->all(),
|
||||||
|
[
|
||||||
|
'izyim_email' => 'email|required',
|
||||||
|
'exchange_email' => 'email|required',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
throw new RequestValidationException($validator->messages()->first());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve the validated emails from the request
|
||||||
|
$izyimEmail = $request->input('izyim_email');
|
||||||
|
$exchangeEmail = $request->input('exchange_email');
|
||||||
|
|
||||||
|
// Check if both emails are the same
|
||||||
|
if ($izyimEmail === $exchangeEmail) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Both emails are the same.',
|
||||||
|
'status' => 'ok',
|
||||||
|
], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the exchange email already exists in the system
|
||||||
|
$existingUser = User::where('email', $exchangeEmail)->first();
|
||||||
|
if ($existingUser) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'The Exchange email already exists in the system.',
|
||||||
|
'status' => 'error',
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve the izyim user
|
||||||
|
$izyimUser = User::where('email', $izyimEmail)->first();
|
||||||
|
if (!$izyimUser) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'The Izyim email not found in system.',
|
||||||
|
'status' => 'error',
|
||||||
|
], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
$newUser = new User();
|
||||||
|
$newUser->name = $izyimUser->name;
|
||||||
|
$newUser->email = $exchangeEmail;
|
||||||
|
$newUser->password = $izyimUser->password;
|
||||||
|
$newUser->type = RoleTypes::USER;
|
||||||
|
$newUser->status = ApprovalStatus::APPROVED;
|
||||||
|
$newUser->save();
|
||||||
|
|
||||||
|
Log::channel('wac_webhook')->info('Wac created user: ' . $exchangeEmail);
|
||||||
|
|
||||||
|
$companyModule = $izyimUser->companyModule->first();
|
||||||
|
$Object = new EmploymentObject($companyModule, $newUser);
|
||||||
|
|
||||||
|
$this->assignEmployeeProcessor->execute($Object);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'Exchange email registered successfully.',
|
||||||
|
'status' => 'success',
|
||||||
|
], 201);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Classes\Modules\Billplzs\Processors\CallbackBillplzProcessor;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Models\Group;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
|
class FixApprovedPaymentFailedGroup extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'fix-approved-payment-failed-group';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Fix all payment is approved or completed but group failed to be updated';
|
||||||
|
|
||||||
|
protected $output = null;
|
||||||
|
|
||||||
|
protected $outputArray = [];
|
||||||
|
|
||||||
|
/** @var CallbackBillplzProcessor */
|
||||||
|
private $callbackBillplzProcessor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(CallbackBillplzProcessor $callbackBillplzProcessor)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->callbackBillplzProcessor = $callbackBillplzProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
ini_set('memory_limit', '-1');
|
||||||
|
|
||||||
|
$this->outputArray = [];
|
||||||
|
$start = new Carbon();
|
||||||
|
|
||||||
|
$groups = Group::whereNotIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])
|
||||||
|
->whereHas('payment', function ($query) {
|
||||||
|
$query->whereIn('status', [2, 3]);
|
||||||
|
})->get();
|
||||||
|
|
||||||
|
foreach ($groups as $group) {
|
||||||
|
$transaction = $group->payment;
|
||||||
|
|
||||||
|
$response = Http::withBasicAuth(config('billplz.api_key') . ':', '')->get(config('billplz.base_url') . '/api/v3/bills/' . $transaction->payment_reference);
|
||||||
|
|
||||||
|
dump($transaction->payment_reference);
|
||||||
|
|
||||||
|
if ($response->successful()) {
|
||||||
|
$data = $response->json();
|
||||||
|
if ($data['paid']) {
|
||||||
|
$status = ApprovalStatus::PENDING_VERIFICATION;
|
||||||
|
|
||||||
|
if ($data['state'] === 'paid') {
|
||||||
|
$status = ApprovalStatus::APPROVED;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->info(Carbon::now() . ' : Fixing ' . $transaction->payment_reference);
|
||||||
|
$this->callbackBillplzProcessor->execute($transaction, $status);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->info("billplz error</br>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$end = new Carbon();
|
||||||
|
$elapsedTime = $start->diff($end)->format('%H:%I:%S');
|
||||||
|
|
||||||
|
if ($groups) {
|
||||||
|
$this->info(Carbon::now() . ' : Done . ElapsedTime: ' . $elapsedTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PackingLists\Processors\FetchPackingListsFromYdPortalProcessor;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
|
class FixMissingPackingList extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'fix-missing-packinglist';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Fix Missing Packinglist';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$start_date = '2024-05-05';
|
||||||
|
$end_date = '2024-05-05';
|
||||||
|
|
||||||
|
$start = $start_date ? Carbon::parse($start_date) : null;
|
||||||
|
$end = $end_date ? Carbon::parse($end_date) : null;
|
||||||
|
|
||||||
|
if (!$start || !$end) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
(App()->make(FetchPackingListsFromYdPortalProcessor::class))->execute($start, $end);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -76,7 +76,7 @@ class SendPermitsReminderEmails extends Command
|
|||||||
protected function getEmailList(): array
|
protected function getEmailList(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'edmond.wuiming2021@gmail.com',
|
// 'edmond.wuiming2021@gmail.com',
|
||||||
'anithagurl96@gmail.com'
|
'anithagurl96@gmail.com'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,25 +40,41 @@ class ImportPermitsReminderController
|
|||||||
$row['reminder_date'] = $this->changeExcelDate($row['reminder_date']);
|
$row['reminder_date'] = $this->changeExcelDate($row['reminder_date']);
|
||||||
|
|
||||||
$validator = Validator::make($row, [
|
$validator = Validator::make($row, [
|
||||||
'model' => 'required|unique:permits_reminders,model',
|
'model' => 'required',
|
||||||
'expiry_date' => 'required|date|after_or_equal:today',
|
// 'expiry_date' => 'required|date|after_or_equal:today',
|
||||||
'reminder_date' => 'required|date|after_or_equal:today',
|
'expiry_date' => 'required|date',
|
||||||
|
// 'reminder_date' => 'required|date|after_or_equal:today',
|
||||||
|
'reminder_date' => 'required|date',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
$row['status'] = 'failed';
|
$row['status'] = 'failed';
|
||||||
$row['message'] = $validator->errors()->all();
|
$row['message'] = $validator->errors()->all();
|
||||||
|
|
||||||
$returnArray[] = $row;
|
$returnArray[] = $row;
|
||||||
} else {
|
} else {
|
||||||
$row['created_at'] = Carbon::now();
|
$existingRecord = PermitsReminder::where('model', $row['model'])->first();
|
||||||
$row['updated_at'] = Carbon::now();
|
|
||||||
$successRows[] = $row;
|
if ($existingRecord) {
|
||||||
|
$existingRecord->update([
|
||||||
|
'expiry_date' => $row['expiry_date'],
|
||||||
|
'reminder_date' => $row['reminder_date'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$row['status'] = 'Updated';
|
||||||
|
$row['message'] = 'Record has been updated';
|
||||||
|
$returnArray[] = $row;
|
||||||
|
} else {
|
||||||
|
// Add to successful rows for batch insertion
|
||||||
|
$row['created_at'] = Carbon::now();
|
||||||
|
$row['updated_at'] = Carbon::now();
|
||||||
|
$successRows[] = $row;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Insert only if there are new successful rows
|
||||||
if (!empty($successRows)) {
|
if (!empty($successRows)) {
|
||||||
PermitsReminder::insert($successRows); // Insert only if there are successful rows
|
PermitsReminder::insert($successRows);
|
||||||
}
|
}
|
||||||
|
|
||||||
$successCount = count($successRows);
|
$successCount = count($successRows);
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Wac;
|
||||||
|
|
||||||
|
use App\Classes\Modules\Wac\ControllersLogic\RegisterExchangeEmailLogic;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class RegisterExchangeEmailController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @param FetchQuestionQALogic $logic
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function register(Request $request, RegisterExchangeEmailLogic $logic): JsonResponse {
|
||||||
|
return $logic->execute($request);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -147,7 +147,7 @@ class TransactionWithStorageResource extends JsonResource
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function getReferenceForGroupPayment($groups){
|
private function getReferenceForGroupPayment($groups){
|
||||||
if(count($groups)){
|
if (is_array($groups) && count($groups) > 0) {
|
||||||
$firstGroup = $groups[0];
|
$firstGroup = $groups[0];
|
||||||
return $firstGroup['reference'];
|
return $firstGroup['reference'];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,4 +84,12 @@ class Group extends Model implements Documentable, Transactionable
|
|||||||
{
|
{
|
||||||
return $this->BelongsTo(Currency::class, 'original_currency_id', 'id');
|
return $this->BelongsTo(Currency::class, 'original_currency_id', 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return hasOne
|
||||||
|
*/
|
||||||
|
public function payment()
|
||||||
|
{
|
||||||
|
return $this->hasOne(Transaction::class, 'payment_reference', 'reference');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,6 +130,11 @@ return [
|
|||||||
'path' => storage_path('logs/laravel_perfex_crm.log'),
|
'path' => storage_path('logs/laravel_perfex_crm.log'),
|
||||||
'level' => 'info',
|
'level' => 'info',
|
||||||
],
|
],
|
||||||
|
'wac_webhook' => [
|
||||||
|
'driver' => 'single',
|
||||||
|
'path' => storage_path('logs/wac_webhook.log'),
|
||||||
|
'level' => 'info',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'account_registration_url' => 'https://wacontact.readyspace.com/rest/trigger/9fe03daf-2ace-4095-b064-601ef6d9bfe7',
|
||||||
|
'invoice_created_url' => 'https://wacontact.readyspace.com/rest/trigger/c0d38aa7-91ac-458b-8014-cf3287a636e4',
|
||||||
|
];
|
||||||
@@ -92,6 +92,22 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row bg-white padding-5" v-if="$store.getters.isSuperAdmin">
|
||||||
|
<div class="col-auto">
|
||||||
|
<div class="font-heading fs-8 muted all-caps">Payment Method</div>
|
||||||
|
<div class="font-heading fs-10">
|
||||||
|
{{ convertPaymentMethodToText(item.payment_method) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<div class="font-heading fs-8 muted all-caps">Created At</div>
|
||||||
|
<div class="font-heading fs-10">{{ item.created_at }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<div class="font-heading fs-8 muted all-caps">Updated At</div>
|
||||||
|
<div class="font-heading fs-10">{{ item.updated_at }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row b-t b-grey" v-if="expandPaymentDetails">
|
<div class="row b-t b-grey" v-if="expandPaymentDetails">
|
||||||
<div class="col bg-white padding-15">
|
<div class="col bg-white padding-15">
|
||||||
<!-- <div class="row align-items-end m-b-10 text-success bold">
|
<!-- <div class="row align-items-end m-b-10 text-success bold">
|
||||||
@@ -198,6 +214,17 @@
|
|||||||
this.expandPaymentDetails = !this.expandPaymentDetails;
|
this.expandPaymentDetails = !this.expandPaymentDetails;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
convertPaymentMethodToText(number) {
|
||||||
|
var paymentMethods = {
|
||||||
|
1: "CASH",
|
||||||
|
2: "CHEQUE",
|
||||||
|
3: "BA",
|
||||||
|
4: "WALLET",
|
||||||
|
5: "PAYMENT_GATEWAY"
|
||||||
|
};
|
||||||
|
|
||||||
|
return paymentMethods[number] || "Unknown Payment Method";
|
||||||
|
},
|
||||||
},
|
},
|
||||||
mixins: [componentHandler]
|
mixins: [componentHandler]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
|
|||||||
|
|
||||||
Route::post('/import/update-debtor/f614e339d7058904a831aad742e24d55', 'Imports\ImportUpdateDebtorController@import')->name('debtor.import');
|
Route::post('/import/update-debtor/f614e339d7058904a831aad742e24d55', 'Imports\ImportUpdateDebtorController@import')->name('debtor.import');
|
||||||
|
|
||||||
Route::post('/import/upload-permits-reminder', 'Imports\ImportPermitsReminderController@import')->name('permits_reminder.upload');
|
|
||||||
|
|
||||||
require __DIR__ . '/company.php';
|
require __DIR__ . '/company.php';
|
||||||
|
|
||||||
require __DIR__ . '/document.php';
|
require __DIR__ . '/document.php';
|
||||||
|
|||||||
@@ -12,5 +12,9 @@ Route::group(['middleware' => 'apipub', 'prefix' => 'v1', 'as' => 'apipub.'], fu
|
|||||||
Route::group(['prefix' => 'feedback', 'as' => 'feedback.', 'namespace' => 'HelpMenu'], function () {
|
Route::group(['prefix' => 'feedback', 'as' => 'feedback.', 'namespace' => 'HelpMenu'], function () {
|
||||||
Route::post('/generate', 'GenerateFeedbackUrlController@generate')->name('feedback.url.generate');
|
Route::post('/generate', 'GenerateFeedbackUrlController@generate')->name('feedback.url.generate');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::group(['prefix' => 'wac', 'as' => 'wac.', 'namespace' => 'Wac'], function () {
|
||||||
|
Route::post('/register-email', 'RegisterExchangeEmailController@register')->name('register_email');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -9,3 +9,5 @@ Route::group(['prefix' => 'permits-reminder', 'as' => 'permits_reminder.', 'name
|
|||||||
Route::post('/{id}/update', 'UpdatePermitsReminderController@update')->name('update');
|
Route::post('/{id}/update', 'UpdatePermitsReminderController@update')->name('update');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::post('/import/upload-permits-reminder', 'Imports\ImportPermitsReminderController@import')->name('permits_reminder.upload');
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ use Carbon\Carbon;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Crypt;
|
use Illuminate\Support\Facades\Crypt;
|
||||||
use App\Models\Container;
|
use App\Models\Container;
|
||||||
|
use App\Models\Group;
|
||||||
use App\Models\Transaction;
|
use App\Models\Transaction;
|
||||||
use App\Models\Wallet;
|
use App\Models\Wallet;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -1271,6 +1272,8 @@ Route::get('/payment-and-billing-2', function () {
|
|||||||
|
|
||||||
Route::get('/show-all-extra-payments', function () {
|
Route::get('/show-all-extra-payments', function () {
|
||||||
ini_set('memory_limit', '-1');
|
ini_set('memory_limit', '-1');
|
||||||
|
ini_set('max_execution_time', 0);
|
||||||
|
$transactionCounter = 0;
|
||||||
|
|
||||||
$invoices = Transaction::where('type', TransactionType::SHIPPING_INVOICE)
|
$invoices = Transaction::where('type', TransactionType::SHIPPING_INVOICE)
|
||||||
->where('status', ApprovalStatus::COMPLETED)
|
->where('status', ApprovalStatus::COMPLETED)
|
||||||
@@ -1300,6 +1303,7 @@ Route::get('/show-all-extra-payments', function () {
|
|||||||
if (($paidAmount <= $invoice->amount) || ($paidAmount - $invoice->amount < 0.01)) {
|
if (($paidAmount <= $invoice->amount) || ($paidAmount - $invoice->amount < 0.01)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
$transactionCounter += 1;
|
||||||
|
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo '<td>' . $invoice->type . '</td>';
|
echo '<td>' . $invoice->type . '</td>';
|
||||||
@@ -1310,8 +1314,35 @@ Route::get('/show-all-extra-payments', function () {
|
|||||||
echo '</tr>';
|
echo '</tr>';
|
||||||
}
|
}
|
||||||
echo '</table>';
|
echo '</table>';
|
||||||
|
|
||||||
|
echo'<br> Total: ' . $transactionCounter;
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::get('/segments', function (Request $request) {
|
Route::get('/segments', function (Request $request) {
|
||||||
return view('pages.segments.index');
|
return view('pages.segments.index');
|
||||||
})->name('segments');
|
})->name('segments');
|
||||||
|
|
||||||
|
Route::get('/group-transaction-with-completed-payments', function () {
|
||||||
|
$groups = Group::whereNotIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])
|
||||||
|
->whereHas('payment', function ($query) {
|
||||||
|
$query->whereIn('status', [2, 3]);
|
||||||
|
})->get();
|
||||||
|
|
||||||
|
foreach ($groups as $group) {
|
||||||
|
$groupPayment = $group->payment;
|
||||||
|
$order = $group->groupTransactions->first()->transaction->owner->owner;
|
||||||
|
$companyModule = $order->companyModule;
|
||||||
|
|
||||||
|
$connection = $companyModule->connections()->first();
|
||||||
|
$companyMarking = $connection ? $connection->invitee_reference : '';
|
||||||
|
|
||||||
|
dump([
|
||||||
|
'reference' => $group->reference,
|
||||||
|
'groupPayment_id' => $groupPayment->id,
|
||||||
|
'groupPayment_status' => $groupPayment->status,
|
||||||
|
'order' => $order->reference,
|
||||||
|
'companyMarking' => $companyMarking,
|
||||||
|
]);
|
||||||
|
echo '<tr><td><a target="_blank" href="' . route('customer.payment-and-billing', $companyMarking) . '">' . $companyMarking . '</a><br></td></tr>';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user