convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer; $this->createsPerfexCRMCustomerProject = $createsPerfexCRMCustomerProject; $this->createsPerfexCRMMilestone = $createsPerfexCRMMilestone; $this->createsPerfexCRMTask = $createsPerfexCRMTask; $this->fetchesPerfexCRMProject = $fetchesPerfexCRMProject; $this->fetchesPerfexCRMMilestone = $fetchesPerfexCRMMilestone; $this->fetchesPerfexCRMTask = $fetchesPerfexCRMTask; $this->createsPerfexCRMCustomer = $createsPerfexCRMCustomer; $this->createsPerfexCRMCustomerContact = $createsPerfexCRMCustomerContact; } /** * @param InitialPerfexCRMObject $initialPerfexCRMObject * @return null|object * @throws \App\Classes\Exceptions\MalformedRequestException */ public function execute(InitialPerfexCRMObject $initialPerfexCRMObject) { // Customer has to exist first before Project can appear under it // Check with Perfex CRM, if this user (email) was previously a lead, should automatically now become a customer $result = $this->convertsPerfexCRMLeadToCustomer->execute($initialPerfexCRMObject->getContactEmail()); if(isset($result->payload)){ $crmClientId = $result->payload['client_id']; } else{ //if reach this point, this means this user is not a official customer nor is a lead in crm //Create Customer has 2 parts: Create Company (client), Create Contact $result = $this->createsPerfexCRMCustomer->execute($initialPerfexCRMObject->getCompanyName()); $crmClientId = $result->payload['clientId']; $customerContactObject = new CustomerContactObject( $crmClientId, $initialPerfexCRMObject->getCompanyName(), $initialPerfexCRMObject->getCompanyName(), $initialPerfexCRMObject->getContactEmail(), "123456abcabc", "on", "on" ); $result = $this->createsPerfexCRMCustomerContact->execute($customerContactObject); } // Get existing or create project, project has to exist first before milestone can appear under it $result = $this->createsPerfexCRMCustomerProject->execute($initialPerfexCRMObject->getProjectName(), $crmClientId); if(isset($result->payload)){ //Here means project creation successful $projectId = $result->payload['project_id']; } else{ $projectId = $this->fetchesPerfexCRMProject->execute($initialPerfexCRMObject->getProjectName(), $crmClientId)->id; } if(!is_null($result)){ $tasks = $initialPerfexCRMObject->getTaskNames(); //Create tasks with milestone for($count=0; $count < count($tasks); $count++) { $milestoneId = 0; //By default milestoneId is 0, having this set at individual task is optional if($tasks[$count]['milestone'] != "") //Create milestone only if it is defined { // Get existing or create milestone, milestone has to exist first before task can appear under it $result = $this->createsPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId, $count); if(isset($result->payload)){ $milestoneId = $result->payload['milestone_id']; } else{ $milestone = $this->fetchesPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId); $array = json_decode(json_encode($milestone), true); $milestoneId = $array[0]['id']; } } // Get existing or create task $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, $projectId, $tasks[$count]['reference']); } } return true; } }