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; $this->updatesPerfexCRMTask = $updatesPerfexCRMTask; } /** * @param PerfexCRMObject $perfexCRMObject * @return null|object * @throws \App\Classes\Exceptions\MalformedRequestException */ public function execute(UpdatePerfexCRMObject $updatePerfexCRMObject) { // 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($updatePerfexCRMObject->getContactEmail()); if(isset($result->payload)){ $crmClientId = $result->payload['client_id']; } // Get existing or create project, project has to exist first before milestone can appear under it $result = $this->createsPerfexCRMCustomerProject->execute($updatePerfexCRMObject->getProjectName(), $crmClientId); if(isset($result->payload)){ $projectId = $result->payload['project_id']; } else{ $projectId = $this->fetchesPerfexCRMProject->execute($updatePerfexCRMObject->getProjectName(), $crmClientId)->id; } // Get existing or create milestone, milestone has to exist first before task can appear under it $result = $this->createsPerfexCRMMilestone->execute($updatePerfexCRMObject->getMilestoneName(), $projectId); if(isset($result->payload)){ $milestoneId = $result->payload['milestone_id']; } else{ $milestone = $this->fetchesPerfexCRMMilestone->execute($updatePerfexCRMObject->getMilestoneName(), $projectId); $array = json_decode(json_encode($milestone), true); $milestoneId = $array[0]['id']; } // Get existing or create task $result = $this->createsPerfexCRMTask->execute($updatePerfexCRMObject->getTaskName(), $milestoneId, $projectId); if(isset($result->payload)){ $taskId = $result->payload['task_id']; } else{ $taskId = $this->fetchesPerfexCRMTask->execute($updatePerfexCRMObject->getTaskName(), $milestoneId)->id; } $this->updatesPerfexCRMTask->execute($taskId, $updatePerfexCRMObject->getTaskName(), $milestoneId, $projectId, PerfexCRMStatus::COMPLETED); return null; } }