diff --git a/app/Classes/Jobs/CreatePerfexCRMCustomer.php b/app/Classes/Jobs/CreatePerfexCRMCustomer.php index b313dca6..4d7acddd 100644 --- a/app/Classes/Jobs/CreatePerfexCRMCustomer.php +++ b/app/Classes/Jobs/CreatePerfexCRMCustomer.php @@ -3,6 +3,8 @@ namespace App\Classes\Jobs; use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMLeadProcessor; +use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMLead; +use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMLead; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -28,6 +30,12 @@ class CreatePerfexCRMCustomer implements ShouldQueue public function handle() { - (App()->make(CreatePerfexCRMLeadProcessor::class))->execute($this->createLeadPerfexCRMObject); + $lead = (App()->make(FetchesPerfexCRMLead::class))->execute($this->createLeadPerfexCRMObject->getEmail()); + if(!is_null($lead)){ + (App()->make(UpdatesPerfexCRMLead::class))->execute($lead, $this->createLeadPerfexCRMObject->getCompanyReference()); + } + else{ + (App()->make(CreatePerfexCRMLeadProcessor::class))->execute($this->createLeadPerfexCRMObject); + } } } diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php index 518a3d73..41e1f5b3 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php @@ -127,7 +127,8 @@ class CreateCustomerLogic extends AbstractControllerLogic $request->input('name'), $request->input('email'), $request->input('phone'), - $request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name') + $request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), + $company->reference ); CreatePerfexCRMCustomer::dispatch($createLeadPerfexCRMObject); } diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateLeadPerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateLeadPerfexCRMObject.php index fc4c17cd..bea178f5 100644 --- a/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateLeadPerfexCRMObject.php +++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateLeadPerfexCRMObject.php @@ -19,13 +19,17 @@ class CreateLeadPerfexCRMObject implements DataTransferObject /** @var string */ private $companyName; + /** @var string */ + private $companyReference; - public function __construct(string $name, string $email, string $phone, string $companyName) + + public function __construct(string $name, string $email, string $phone, string $companyName, string $companyReference) { $this->name = $name; $this->email = $email; $this->phone = $phone; $this->companyName = $companyName; + $this->companyReference = $companyReference; } /** @@ -60,4 +64,11 @@ class CreateLeadPerfexCRMObject implements DataTransferObject return $this->companyName; } + /** + * @return string + */ + public function getCompanyReference(): string + { + return $this->companyReference; + } } diff --git a/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMLead.php b/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMLead.php index b1706c03..373f4171 100644 --- a/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMLead.php +++ b/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMLead.php @@ -16,13 +16,20 @@ class CreatesPerfexCRMLead */ public function execute(CreateLeadPerfexCRMObject $createLeadPerfexCRMObject) { try{ + $custom_fields = [ + "leads" => [ + 3 => $createLeadPerfexCRMObject->getCompanyReference() + ] + ]; + $data = [ 'name' => $createLeadPerfexCRMObject->getName(), 'email' => $createLeadPerfexCRMObject->getEmail(), 'phonenumber' => $createLeadPerfexCRMObject->getPhone(), 'company' => $createLeadPerfexCRMObject->getCompanyName(), 'source' => 1, //1: Exchange, 2: Shipping Portal - 'status' => 2 //2: Lead, 1: Customer + 'status' => 2, //2: Lead, 1: Customer, + 'custom_fields' => $custom_fields ]; $response = Http::asForm()->withHeaders([ diff --git a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMLead.php b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMLead.php new file mode 100644 index 00000000..b9090c2e --- /dev/null +++ b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMLead.php @@ -0,0 +1,50 @@ + [ + 3 => $companyReference + ] + ]; + + $data = [ + 'name' => $lead->name, + 'email' => $lead->email, + 'phonenumber' => $lead->phonenumber, + 'company' => $lead->company, + 'custom_fields' => $custom_fields, + 'source' => $lead->source, + 'status' => $lead->status, + ]; + + $response = Http::asJson()->withHeaders([ + 'authtoken' => config('perfexcrm.api_key')]) + ->put(config('perfexcrm.base_url').'/api/leads/'.$lead->id, $data); + + if($response->successful()){ + $data = $response->json(); + return (object) $data; + }else{ + Log::error($response); + return null; + } + }catch(\Exception $exception){ + throw new MalformedRequestException('Unable to get correct response from Perfex CRM server: ' . $exception->getMessage()); + } + } +}