'Created User', 'message' => 'You have successfully created a new User' ]; } /** @var CreateUserProcessor */ private $createUserProcessor; /** @var CreateCompanyProcessor */ private $createCompanyProcessor; /** @var CreateCompanyModuleProcessor */ private $createCompanyModuleProcessor; /** @var CreateContactProcessor */ private $createContactProcessor; /** @var CreatesCompanyConnection */ private $createsCompanyConnection; /** @var ApprovesCompanyConnection */ private $approvesCompanyConnection; /** @var AssignEmployeeProcessor */ private $assignEmployeeProcessor; /** @var UploadIdentityDocumentProcessor */ private $uploadIdentityDocumentProcessor; /** @var AuthenticationProcessor */ private $authenticationProcessor; /** @var GenerateEmailVerificationAttemptProcessor */ private $generateEmailVerificationAttemptProcessor; /** @var FetchesCompanyModule */ private $fetchesCompanyModule; /** @var CreatePerfexCRMLeadProcessor */ private $createPerfexCRMLeadProcessor; /** * CreateCustomerLogic constructor. * @param CreateUserProcessor $createUserProcessor * @param CreateCompanyProcessor $createCompanyProcessor * @param CreateCompanyModuleProcessor $createCompanyModuleProcessor * @param CreateContactProcessor $createContactProcessor * @param CreatesCompanyConnection $createsCompanyConnection * @param ApprovesCompanyConnection $approvesCompanyConnection * @param AssignEmployeeProcessor $assignEmployeeProcessor * @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor * @param AuthenticationProcessor $authenticationProcessor * @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor * @param FetchesCompanyModule $fetchesCompanyModule * @param CreatePerfexCRMLeadProcessor $createPerfexCRMLeadProcessor */ public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule, CreatePerfexCRMLeadProcessor $createPerfexCRMLeadProcessor) { $this->createUserProcessor = $createUserProcessor; $this->createCompanyProcessor = $createCompanyProcessor; $this->createCompanyModuleProcessor = $createCompanyModuleProcessor; $this->createContactProcessor = $createContactProcessor; $this->createsCompanyConnection = $createsCompanyConnection; $this->approvesCompanyConnection = $approvesCompanyConnection; $this->assignEmployeeProcessor = $assignEmployeeProcessor; $this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor; $this->authenticationProcessor = $authenticationProcessor; $this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor; $this->fetchesCompanyModule = $fetchesCompanyModule; $this->createPerfexCRMLeadProcessor = $createPerfexCRMLeadProcessor; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\AccessUnauthorisedException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request): JsonResponse { /** @var User $user */ $user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION); /** @var Company $company */ $company = $this->createCompanyProcessor->execute($request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), $request->input('type'), ApprovalStatus::PENDING_SUBMISSION); $contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id')); $this->createContactProcessor->execute($contactObject, $company); /** @var CompanyModule $companyModule */ $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER); $inviter = $this->fetchesCompanyModule->execute(['reference'=>'CIEF']); $connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'CIEF'); $connection = $this->createsCompanyConnection->execute($connectionObject); $this->approvesCompanyConnection->execute($connection); $Object = new EmploymentObject($companyModule, $user); $this->assignEmployeeProcessor->execute($Object); $this->uploadIdentityDocumentProcessor->execute($request, $company); if(config('perfexcrm.is_enabled') == 'true'){ // $this->createPerfexCRMLeadProcessor->execute($request); $createLeadPerfexCRMObject = new CreateLeadPerfexCRMObject( $request->input('name'), $request->input('email'), $request->input('phone'), $request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), $connection->invitee_reference ); 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); return $this->response($this->authenticationProcessor->execute($request)); } }