From e5d6f3f5818ec62654450bfcd09e0d6c6b22f3f2 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 18 Jul 2024 23:11:04 +0800 Subject: [PATCH] wac webhook --- .../ControllersLogic/CreateCustomerLogic.php | 7 +- .../CreateInvoiceTransactionProcessor.php | 36 +++++ .../RegisterExchangeEmailLogic.php | 125 ++++++++++++++++++ .../Wac/RegisterExchangeEmailController.php | 20 +++ config/wagWebhookUrl.php | 6 + routes/apipub.php | 4 + 6 files changed, 195 insertions(+), 3 deletions(-) create mode 100644 app/Classes/Modules/Wac/ControllersLogic/RegisterExchangeEmailLogic.php create mode 100644 app/Http/Controllers/Wac/RegisterExchangeEmailController.php create mode 100644 config/wagWebhookUrl.php diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php index b7ba15d7..2134254b 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php @@ -169,16 +169,17 @@ class CreateCustomerLogic extends AbstractControllerLogic CreatePerfexCRMCustomer::dispatch($createLeadPerfexCRMObject); } - if(!app()->environment(['production'])){ + if(app()->environment(['production'])){ // call wac webhook - $url = 'https://wacontact.readyspace.com/rest/trigger/9fe03daf-2ace-4095-b064-601ef6d9bfe7'; + $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(json_encode($response)); + Log::channel('wac_webhook')->info('Register Account: ' . json_encode($response)); } // $this->generateEmailVerificationAttemptProcessor->execute($user); diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php index dec6dd2f..dee7b977 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php @@ -34,6 +34,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; +use Illuminate\Support\Facades\Http; class CreateInvoiceTransactionProcessor { @@ -239,6 +240,41 @@ class CreateInvoiceTransactionProcessor $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); } + // call wac webhook + $hasInvoiceCreated = Transaction::withTrashed() + ->where('type', TransactionType::SHIPPING_INVOICE) + ->where('owner_type', PackingList::class) + ->where('owner_id', $packingList->id) + ->exists(); + + Log::channel('wac_webhook')->info('Regenerating Invoice for PackingList: ' . $packingList->id . '. No call wac api.'); + + if (app()->environment('production') && !$hasInvoiceCreated) { + $order = $packingList->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; } diff --git a/app/Classes/Modules/Wac/ControllersLogic/RegisterExchangeEmailLogic.php b/app/Classes/Modules/Wac/ControllersLogic/RegisterExchangeEmailLogic.php new file mode 100644 index 00000000..46b4552e --- /dev/null +++ b/app/Classes/Modules/Wac/ControllersLogic/RegisterExchangeEmailLogic.php @@ -0,0 +1,125 @@ + '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); + } +} diff --git a/app/Http/Controllers/Wac/RegisterExchangeEmailController.php b/app/Http/Controllers/Wac/RegisterExchangeEmailController.php new file mode 100644 index 00000000..01b889f3 --- /dev/null +++ b/app/Http/Controllers/Wac/RegisterExchangeEmailController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/config/wagWebhookUrl.php b/config/wagWebhookUrl.php new file mode 100644 index 00000000..dedc2d9a --- /dev/null +++ b/config/wagWebhookUrl.php @@ -0,0 +1,6 @@ + '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', +]; diff --git a/routes/apipub.php b/routes/apipub.php index 13fbfb61..9cdf7a01 100644 --- a/routes/apipub.php +++ b/routes/apipub.php @@ -12,5 +12,9 @@ Route::group(['middleware' => 'apipub', 'prefix' => 'v1', 'as' => 'apipub.'], fu Route::group(['prefix' => 'feedback', 'as' => 'feedback.', 'namespace' => 'HelpMenu'], function () { 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'); + }); }); });