CRM add department custom field to task + PDOException fix

This commit is contained in:
Dillon
2023-03-12 17:35:56 +08:00
parent 9447413647
commit 2565ddfda5
15 changed files with 213 additions and 17 deletions
+4
View File
@@ -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"
@@ -0,0 +1,46 @@
<?php
namespace App\Classes\Modules\Companies\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Classes\ValueObjects\Constants\Countries;
use App\Models\Company;
use App\Models\Segment;
class CompanySegmentObject implements DataTransferObject
{
/** @var Company */
private $company;
/** @var Segment */
private $segment;
/**
* CompanySegmentObject constructor.
* @param Company $company
* @param Segment $segment
*/
public function __construct(Company $company, Segment $segment)
{
$this->company = $company;
$this->segment = $segment;
}
/**
* @return Company
*/
public function getCompany(): Company
{
return $this->company;
}
/**
* @return Segment
*/
public function getSegment(): Segment
{
return $this->segment;
}
}
@@ -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,7 +49,15 @@ 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);
@@ -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
@@ -0,0 +1,51 @@
<?php
namespace App\Classes\Modules\Companies\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Companies\DataTransferObjects\CompanySegmentObject;
use App\Models\SegmentCompany;
use Illuminate\Support\Facades\Log;
class CompanyToSegmentValidation extends AbstractValidation
{
/**
* @param CompanySegmentObject $object
* @return array
*/
protected function data($object): array
{
return[
'company_segment' => $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 [];
}
}
@@ -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;
}
}
@@ -33,6 +33,7 @@ class CreatePerfexCRMTaskProcessor
$createTaskPerfexCRMObject->getProjectId(),
$createTaskPerfexCRMObject->getReference(),
$createTaskPerfexCRMObject->getOnTaskCompletion(),
$createTaskPerfexCRMObject->getDepartment(),
$createTaskPerfexCRMObject->getStatus(),
);
return true;
@@ -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
}
@@ -28,7 +28,8 @@ class NewLeadTaskToPerfexCRMProcessor
"",
"",
"",
PerfexCRMTasks::TASK_IDENTIFICATION_1['status']
PerfexCRMTasks::TASK_IDENTIFICATION_1['status'],
PerfexCRMTasks::TASK_IDENTIFICATION_1['department']
);
CreatePerfexCRMSingleTask::dispatch($createTaskPerfexCRMObject);
@@ -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
}
@@ -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
];
}
@@ -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
]
];
@@ -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
]
];
@@ -0,0 +1,18 @@
<?php
namespace App\Classes\ValueObjects\Constants;
final class PerfexCRMCustomFields {
public const CUSTOMERS_EXCHANGE_REFERENCE = 1;
public const CUSTOMERS_SHIPPING_PORTAL_REFERENCE = 2;
public const LEADS_EXCHANGE_REFERENCE = 3;
public const LEADS_SHIPPING_PORTAL_REFERENCE = 4;
public const TICKETS_CUSTOM_TAGS = 5;
public const TASKS_DEPARTMENT = 6;
}
@@ -10,6 +10,7 @@ class PerfexCRMTasks
'milestone' => '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
];
}