diff --git a/.env.example b/.env.example index 544ed6cc..91c8e15c 100644 --- a/.env.example +++ b/.env.example @@ -57,3 +57,7 @@ BILLPLZ_API_KEY="d25c6170-dc00-45cd-b226-d702b957870c" BILLPLZ_X_SIGNATURE_KEY="S-HdAU6QDubUrMErxJ-PCpgw" BILLPLZ_COLLECTION_ID="t0cggbdd" BILLPLZ_WALLET_COLLECTION_ID="t0cggbdd" + +PERFEXCRM_BASE_URL="" +PERFEXCRM_API_KEY="" +PERFEXCRM_IS_ENABLED="false" diff --git a/app/Classes/Modules/Companies/DataTransferObjects/CompanySegmentObject.php b/app/Classes/Modules/Companies/DataTransferObjects/CompanySegmentObject.php new file mode 100644 index 00000000..b00ef56c --- /dev/null +++ b/app/Classes/Modules/Companies/DataTransferObjects/CompanySegmentObject.php @@ -0,0 +1,46 @@ +company = $company; + $this->segment = $segment; + } + + /** + * @return Company + */ + public function getCompany(): Company + { + return $this->company; + } + + /** + * @return Segment + */ + public function getSegment(): Segment + { + return $this->segment; + } + +} diff --git a/app/Classes/Modules/Companies/Processors/AssignSegmentProcessor.php b/app/Classes/Modules/Companies/Processors/AssignSegmentProcessor.php index 66cfb08e..380f7a87 100644 --- a/app/Classes/Modules/Companies/Processors/AssignSegmentProcessor.php +++ b/app/Classes/Modules/Companies/Processors/AssignSegmentProcessor.php @@ -2,12 +2,14 @@ namespace App\Classes\Modules\Companies\Processors; +use App\Classes\Modules\Companies\DataTransferObjects\CompanySegmentObject; use App\Classes\Modules\Companies\Services\AssignsCompanyToSegment; use App\Classes\Modules\Companies\Standards\Rules\CanAssignSegment; use App\Classes\Modules\Segments\Services\FetchesSegment; use App\Classes\ValueObjects\Constants\SegmentConstants; use App\Models\Company; use Illuminate\Database\Eloquent\Model; +use Illuminate\Validation\ValidationException; class AssignSegmentProcessor { @@ -47,10 +49,18 @@ class AssignSegmentProcessor $segment = $this->fetchesSegment->execute(['id' => $segmentId]); - $this->canAssignSegment->passes(); + $companySegment = new CompanySegmentObject($company, $segment); + + try + { + $this->canAssignSegment->passes($companySegment); + } + catch (\Exception $e) { + return $company; + } return $this->assignsSegment->execute($company, $segment); } -} \ No newline at end of file +} diff --git a/app/Classes/Modules/Companies/Standards/Rules/CanAssignSegment.php b/app/Classes/Modules/Companies/Standards/Rules/CanAssignSegment.php index 36fd2a41..c6dab1d9 100644 --- a/app/Classes/Modules/Companies/Standards/Rules/CanAssignSegment.php +++ b/app/Classes/Modules/Companies/Standards/Rules/CanAssignSegment.php @@ -4,11 +4,22 @@ namespace App\Classes\Modules\Companies\Standards\Rules; use App\Classes\General\Abstracts\AbstractRule; -use App\Classes\Modules\SegmentConstants\DataTransferObjects\SegmentConstantObject; -use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject; +use App\Classes\Modules\Companies\Standards\Validators\CompanyToSegmentValidation; +use App\Classes\Modules\Companies\DataTransferObjects\CompanySegmentObject; class CanAssignSegment extends AbstractRule { + /** @var CompanyToSegmentValidation */ + private $companyToSegmentValidation; + + /** + * CanAssignSegment constructor. + * @param CompanyToSegmentValidation $companyToSegmentValidation + */ + public function __construct(CompanyToSegmentValidation $companyToSegmentValidation) + { + $this->companyToSegmentValidation = $companyToSegmentValidation; + } /** * @return bool @@ -20,16 +31,17 @@ class CanAssignSegment extends AbstractRule } /** - * @param ConstantObject $object + * @param CompanySegmentObject $object * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException */ protected function validators($object): bool { - return true; + return $this->companyToSegmentValidation->validate($object); } /** - * @param ConstantObject $object + * @param CompanySegmentObject $object * @return bool */ protected function criteria($object): bool @@ -37,4 +49,4 @@ class CanAssignSegment extends AbstractRule return true; } -} \ No newline at end of file +} diff --git a/app/Classes/Modules/Companies/Standards/Validators/CompanyToSegmentValidation.php b/app/Classes/Modules/Companies/Standards/Validators/CompanyToSegmentValidation.php new file mode 100644 index 00000000..5151a275 --- /dev/null +++ b/app/Classes/Modules/Companies/Standards/Validators/CompanyToSegmentValidation.php @@ -0,0 +1,51 @@ + $object + ]; + } + + /** + * @return array + */ + protected function rules(): array + { + return [ + 'company_segment' => [ + 'required', + function ($attribute, $obj, $fail) { + // $result = SegmentCompany::where('segment_id', $obj->getSegment()->id)->where('company_id', $obj->getCompany()->id)->first(); + $result = $obj->getCompany()->segments()->where('segment_id', $obj->getSegment()->id)->first(); + Log::info('SegmentCompany: '.json_encode($result)); + if (!is_null($result)) { + $fail('The segment company already exists'); + } + }, + ] + ]; + } + + /** + * @return array + */ + protected function messages(): array + { + return []; + } + +} diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php index 70bae013..8923ec01 100644 --- a/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php +++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php @@ -33,8 +33,10 @@ class CreateTaskPerfexCRMObject implements DataTransferObject /** @var string */ private $status; + /** @var string */ + private $department; - public function __construct(string $email, string $name, string $description, string $leadId, string $projectId, string $milestoneId, string $reference, string $onTaskCompletion, string $status) + public function __construct(string $email, string $name, string $description, string $leadId, string $projectId, string $milestoneId, string $reference, string $onTaskCompletion, string $status, string $department) { $this->email = $email; $this->name = $name; @@ -45,6 +47,7 @@ class CreateTaskPerfexCRMObject implements DataTransferObject $this->reference = $reference; $this->onTaskCompletion = $onTaskCompletion; $this->status = $status; + $this->department = $department; } /** @@ -124,4 +127,11 @@ class CreateTaskPerfexCRMObject implements DataTransferObject return $this->status; } + /** + * @return string + */ + public function getDepartment(): string + { + return $this->department; + } } diff --git a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php index 965f6f34..f70760f8 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php @@ -33,6 +33,7 @@ class CreatePerfexCRMTaskProcessor $createTaskPerfexCRMObject->getProjectId(), $createTaskPerfexCRMObject->getReference(), $createTaskPerfexCRMObject->getOnTaskCompletion(), + $createTaskPerfexCRMObject->getDepartment(), $createTaskPerfexCRMObject->getStatus(), ); return true; diff --git a/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php index 875dd35f..9ecb7efe 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php @@ -184,7 +184,7 @@ class InitializePerfexCRMProcessor } // Get existing or create task - $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $taskStatus); + $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $tasks[$count]['department'], $taskStatus); if(is_null($result)){ break; //Breaking the rest of the tasks in array assuming that they are all created as a batch previously } diff --git a/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php index bce779f1..d8417f03 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php @@ -28,7 +28,8 @@ class NewLeadTaskToPerfexCRMProcessor "", "", "", - PerfexCRMTasks::TASK_IDENTIFICATION_1['status'] + PerfexCRMTasks::TASK_IDENTIFICATION_1['status'], + PerfexCRMTasks::TASK_IDENTIFICATION_1['department'] ); CreatePerfexCRMSingleTask::dispatch($createTaskPerfexCRMObject); diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 24d45506..5b859a2b 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -199,7 +199,7 @@ class UpdatePerfexCRMProcessor } // Get existing or create task - $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $taskStatus); + $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $tasks[$count]['department'], $taskStatus); if(is_null($result)){ break; //Breaking the rest of the tasks in array assuming that they are all created as a batch previously } diff --git a/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMTask.php b/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMTask.php index 1674c999..8d75989a 100644 --- a/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMTask.php +++ b/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMTask.php @@ -5,6 +5,7 @@ namespace App\Classes\Modules\PerfexCRM\Services; use Illuminate\Support\Facades\Http; use App\Classes\Exceptions\MalformedRequestException; use Illuminate\Support\Facades\Log; +use App\Classes\ValueObjects\Constants\PerfexCRMCustomFields; class CreatesPerfexCRMTask { @@ -20,8 +21,17 @@ class CreatesPerfexCRMTask * @return null|object * @throws MalformedRequestException */ - public function execute(string $taskName, string $taskDescription, string $leadId, string $milestoneId, string $projectId, string $reference = '', string $on_task_completion = '', string $status = "1") { + public function execute(string $taskName, string $taskDescription, string $leadId, string $milestoneId, string $projectId, string $reference = '', string $on_task_completion = '', string $department = '', string $status = "1") { try{ + $custom_fields = []; + if($department != ""){ + $custom_fields = [ + "tasks" => [ + PerfexCRMCustomFields::TASKS_DEPARTMENT => $department + ] + ]; + } + $data = [ 'name' => $taskName, 'description' => $taskDescription, @@ -32,7 +42,8 @@ class CreatesPerfexCRMTask 'status' => $status, 'is_system_created' => 1, 'reference' => $reference, - 'on_task_completion' => $on_task_completion + 'on_task_completion' => $on_task_completion, + 'custom_fields' => $custom_fields ]; if($leadId != '') { @@ -46,7 +57,8 @@ class CreatesPerfexCRMTask 'status' => $status, 'is_system_created' => 1, 'reference' => $reference, - 'on_task_completion' => $on_task_completion + 'on_task_completion' => $on_task_completion, + 'custom_fields' => $custom_fields ]; } diff --git a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMCustomer.php b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMCustomer.php index 561795f8..fd13bc3f 100644 --- a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMCustomer.php +++ b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMCustomer.php @@ -5,6 +5,7 @@ namespace App\Classes\Modules\PerfexCRM\Services; use Illuminate\Support\Facades\Http; use App\Classes\Exceptions\MalformedRequestException; use Illuminate\Support\Facades\Log; +use App\Classes\ValueObjects\Constants\PerfexCRMCustomFields; class UpdatesPerfexCRMCustomer { @@ -19,7 +20,7 @@ class UpdatesPerfexCRMCustomer try{ $custom_fields = [ "customers" => [ - 1 => $companyReference + PerfexCRMCustomFields::CUSTOMERS_EXCHANGE_REFERENCE => $companyReference ] ]; diff --git a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMLead.php b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMLead.php index b9090c2e..f8fbc944 100644 --- a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMLead.php +++ b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMLead.php @@ -5,6 +5,7 @@ namespace App\Classes\Modules\PerfexCRM\Services; use Illuminate\Support\Facades\Http; use App\Classes\Exceptions\MalformedRequestException; use Illuminate\Support\Facades\Log; +use App\Classes\ValueObjects\Constants\PerfexCRMCustomFields; class UpdatesPerfexCRMLead { @@ -18,7 +19,7 @@ class UpdatesPerfexCRMLead try{ $custom_fields = [ "leads" => [ - 3 => $companyReference + PerfexCRMCustomFields::LEADS_EXCHANGE_REFERENCE => $companyReference ] ]; diff --git a/app/Classes/ValueObjects/Constants/PerfexCRMCustomFields.php b/app/Classes/ValueObjects/Constants/PerfexCRMCustomFields.php new file mode 100644 index 00000000..f40f4a1d --- /dev/null +++ b/app/Classes/ValueObjects/Constants/PerfexCRMCustomFields.php @@ -0,0 +1,18 @@ + 'MILESTONE 1 - Customer Paid', 'reference' => '', 'on_task_completion' => '', + 'department' => '', 'status' => PerfexCRMTaskStatus::COMPLETED ]; @@ -26,6 +27,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1_DAY_TRANSFER_1', 'on_task_completion' => 'TASK_1_DAY_TRANSFER_2', + 'department' => 'Accounts', 'status' => PerfexCRMTaskStatus::IN_PROGRESS ]; public const TASK_1_DAY_TRANSFER_2 = [ @@ -43,6 +45,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1_DAY_TRANSFER_2', 'on_task_completion' => 'TASK_1_DAY_TRANSFER_3', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_1_DAY_TRANSFER_3 = [ @@ -58,6 +61,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1_DAY_TRANSFER_3', 'on_task_completion' => 'TASK_1_DAY_TRANSFER_4', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_1_DAY_TRANSFER_4 = [ @@ -73,6 +77,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1_DAY_TRANSFER_4', 'on_task_completion' => 'TASK_1_DAY_TRANSFER_5', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_1_DAY_TRANSFER_5 = [ @@ -88,6 +93,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1_DAY_TRANSFER_5', 'on_task_completion' => 'TASK_1_DAY_TRANSFER_6', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1_DAY_TRANSFER_6 = [ @@ -103,6 +109,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1_DAY_TRANSFER_6', 'on_task_completion' => '', + 'department' => 'Operations', 'status' => '' ]; @@ -119,6 +126,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_3_DAY_TRANSFER_1', 'on_task_completion' => 'TASK_3_DAY_TRANSFER_2', + 'department' => 'Accounts', 'status' => PerfexCRMTaskStatus::IN_PROGRESS ]; public const TASK_3_DAY_TRANSFER_2 = [ @@ -136,6 +144,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_3_DAY_TRANSFER_2', 'on_task_completion' => 'TASK_3_DAY_TRANSFER_3', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_3_DAY_TRANSFER_3 = [ @@ -151,6 +160,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_3_DAY_TRANSFER_3', 'on_task_completion' => 'TASK_3_DAY_TRANSFER_4', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_3_DAY_TRANSFER_4 = [ @@ -166,6 +176,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_3_DAY_TRANSFER_4', 'on_task_completion' => 'TASK_3_DAY_TRANSFER_5', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_3_DAY_TRANSFER_5 = [ @@ -181,6 +192,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_3_DAY_TRANSFER_5', 'on_task_completion' => 'TASK_3_DAY_TRANSFER_6', + 'department' => 'Operations', 'status' => '' ]; public const TASK_3_DAY_TRANSFER_6 = [ @@ -196,6 +208,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_3_DAY_TRANSFER_6', 'on_task_completion' => '', + 'department' => 'Operations', 'status' => '' ]; @@ -214,6 +227,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_1', 'on_task_completion' => 'TASK_1688_PAYMENT_2', + 'department' => 'Accounts', 'status' => PerfexCRMTaskStatus::IN_PROGRESS ]; public const TASK_1688_PAYMENT_2 = [ @@ -231,6 +245,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_2', 'on_task_completion' => 'TASK_1688_PAYMENT_3', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_1688_PAYMENT_3 = [ @@ -246,6 +261,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_3', 'on_task_completion' => 'TASK_1688_PAYMENT_4', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_1688_PAYMENT_4 = [ @@ -261,6 +277,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_4', 'on_task_completion' => 'TASK_1688_PAYMENT_5', + 'department' => 'Accounts', 'status' => '' ]; public const TASK_1688_PAYMENT_5 = [ @@ -277,6 +294,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_5', 'on_task_completion' => 'TASK_1688_PAYMENT_6', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1688_PAYMENT_6 = [ @@ -292,6 +310,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_6', 'on_task_completion' => 'TASK_1688_PAYMENT_7', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1688_PAYMENT_7 = [ @@ -309,6 +328,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_7', 'on_task_completion' => 'TASK_1688_PAYMENT_8', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1688_PAYMENT_8 = [ @@ -324,6 +344,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_8', 'on_task_completion' => 'TASK_1688_PAYMENT_9', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1688_PAYMENT_9 = [ @@ -339,6 +360,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_9', 'on_task_completion' => 'TASK_1688_PAYMENT_10', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1688_PAYMENT_10 = [ @@ -354,6 +376,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_10', 'on_task_completion' => 'TASK_1688_PAYMENT_11', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1688_PAYMENT_11 = [ @@ -369,6 +392,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_11', 'on_task_completion' => 'TASK_1688_PAYMENT_12', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1688_PAYMENT_12 = [ @@ -384,6 +408,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_12', 'on_task_completion' => 'TASK_1688_PAYMENT_13', + 'department' => 'Operations', 'status' => '' ]; public const TASK_1688_PAYMENT_13 = [ @@ -399,6 +424,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_1688_PAYMENT_13', 'on_task_completion' => '', + 'department' => 'Operations', 'status' => '' ]; @@ -417,6 +443,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_PURCHASE_ORDER_1', 'on_task_completion' => 'TASK_PURCHASE_ORDER_2', + 'department' => 'Operations', 'status' => PerfexCRMTaskStatus::IN_PROGRESS ]; @@ -433,6 +460,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_PURCHASE_ORDER_2', 'on_task_completion' => '', + 'department' => 'Accounts', 'status' => '' ]; @@ -450,6 +478,7 @@ class PerfexCRMTasks 'milestone' => '', 'reference' => 'TASK_IDENTIFICATION_1', 'on_task_completion' => '', + 'department' => 'Operations', 'status' => PerfexCRMTaskStatus::IN_PROGRESS ]; }