diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderLogic.php
index 510a2a29..2c4743d2 100644
--- a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderLogic.php
+++ b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderLogic.php
@@ -7,6 +7,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
+use App\Classes\Modules\PerfexCRM\Processors\NewLeadTaskToPerfexCRMProcessor;
use App\Classes\Modules\Orders\Processors\CreateOrderProcessor;
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
use App\Classes\ValueObjects\Constants\WarehouseReferences;
@@ -39,6 +40,8 @@ class CreateOrderLogic extends AbstractControllerLogic
/** @var GeneratesOrderNumber */
private $generatesOrderNumber;
+ /** @var NewLeadTaskToPerfexCRMProcessor */
+ private $newLeadTaskToPerfexCRMProcessor;
/**
* CreateOrderLogic constructor.
* @param FetchesCompany $fetchesCompany
@@ -46,22 +49,24 @@ class CreateOrderLogic extends AbstractControllerLogic
* @param CreateOrderProcessor $createOrderProcessor
* @param FetchesCompanyModule $fetchesCompanyModule
* @param GeneratesOrderNumber $generatesOrderNumber
+ * @param NewLeadTaskToPerfexCRMProcessor $newLeadTaskToPerfexCRMProcessor
*/
- public function __construct(FetchesCompany $fetchesCompany, FetchesAddress $fetchesAddress, CreateOrderProcessor $createOrderProcessor, FetchesCompanyModule $fetchesCompanyModule, GeneratesOrderNumber $generatesOrderNumber)
+ public function __construct(FetchesCompany $fetchesCompany, FetchesAddress $fetchesAddress, CreateOrderProcessor $createOrderProcessor, FetchesCompanyModule $fetchesCompanyModule, GeneratesOrderNumber $generatesOrderNumber, NewLeadTaskToPerfexCRMProcessor $newLeadTaskToPerfexCRMProcessor)
{
$this->fetchesCompany = $fetchesCompany;
$this->fetchesAddress = $fetchesAddress;
$this->createOrderProcessor = $createOrderProcessor;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->generatesOrderNumber = $generatesOrderNumber;
+ $this->newLeadTaskToPerfexCRMProcessor = $newLeadTaskToPerfexCRMProcessor;
}
public function logic(Request $request) : JsonResponse {
-
+
$company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
-
+
$address = $this->fetchesAddress->execute(['id' => $request->input('address_id')]);
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $request->input('warehouse_id')]);
@@ -76,6 +81,10 @@ class CreateOrderLogic extends AbstractControllerLogic
$order = $this->createOrderProcessor->execute($company, $originWarehouse, $address, $this->generatesOrderNumber->execute());
+ if(config('perfexcrm.is_enabled') == 'true'){
+ $this->newLeadTaskToPerfexCRMProcessor->execute($company);
+ }
+
return $this->resourceResponse(new OrderResource($order));
}
}
diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php
index 53a8ecb7..26a42f0b 100644
--- a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php
+++ b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\PackingLists\Processors;
use App\Classes\General\Interfaces\Packable;
+use App\Classes\Modules\PerfexCRM\Processors\PackingListToPerfexCRMProcessor;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\Modules\PackingLists\Services\CreatesPackingList;
use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList;
@@ -25,16 +26,20 @@ class CreatePackingListProcessor
/** @var CreatesPackingList */
private $createsPackingList;
+ /** @var PackingListToPerfexCRMProcessor */
+ private $packingListToPerfexCRMProcessor;
/**
* CreatePackingListProcessor constructor.
* @param CanCreatePackingList $canCreatePackingList
* @param CreatesPackingList $createsPackingList
+ * @param PackingListToPerfexCRMProcessor $packingListToPerfexCRMProcessor
*/
- public function __construct(CanCreatePackingList $canCreatePackingList, CreatesPackingList $createsPackingList)
+ public function __construct(CanCreatePackingList $canCreatePackingList, CreatesPackingList $createsPackingList, PackingListToPerfexCRMProcessor $packingListToPerfexCRMProcessor)
{
$this->canCreatePackingList = $canCreatePackingList;
$this->createsPackingList = $createsPackingList;
+ $this->packingListToPerfexCRMProcessor = $packingListToPerfexCRMProcessor;
}
/**
@@ -59,6 +64,10 @@ class CreatePackingListProcessor
$object = new PackingListObject($object->getReference().'_01', $appointee_id, $type, ApprovalStatus::PENDING_SUBMISSION);
$this->createsPackingList->execute($object, $packingList);
+ if(config('perfexcrm.is_enabled') == 'true'){
+ $this->packingListToPerfexCRMProcessor->execute($packingList);
+ }
+
return $packingList;
}
diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/InitialPerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/InitialPerfexCRMObject.php
index 1c4a9db5..66c2c86c 100644
--- a/app/Classes/Modules/PerfexCRM/DataTransferObjects/InitialPerfexCRMObject.php
+++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/InitialPerfexCRMObject.php
@@ -25,6 +25,9 @@ class InitialPerfexCRMObject implements DataTransferObject
/** @var string */
private $projectName;
+ /** @var int */
+ private $projectStatus;
+
/** @var array */
private $milestoneNames;
@@ -32,7 +35,7 @@ class InitialPerfexCRMObject implements DataTransferObject
private $taskNames;
- public function __construct(string $companyName, string $companyReference, string $contactName, string $contactEmail, string $bookingMarking, string $projectName, array $milestoneNames, array $taskNames)
+ public function __construct(string $companyName, string $companyReference, string $contactName, string $contactEmail, string $bookingMarking, string $projectName, int $projectStatus, array $milestoneNames, array $taskNames)
{
$this->companyName = $companyName;
@@ -41,6 +44,7 @@ class InitialPerfexCRMObject implements DataTransferObject
$this->contactEmail = $contactEmail;
$this->bookingMarking = $bookingMarking;
$this->projectName = $projectName;
+ $this->projectStatus = $projectStatus;
$this->milestoneNames = $milestoneNames;
$this->taskNames = $taskNames;
}
@@ -93,6 +97,14 @@ class InitialPerfexCRMObject implements DataTransferObject
return $this->projectName;
}
+ /**
+ * @return string
+ */
+ public function getProjectStatus(): int
+ {
+ return $this->projectStatus;
+ }
+
/**
* @return array
*/
diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php
index be9328ac..42af2b54 100644
--- a/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php
+++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php
@@ -13,6 +13,9 @@ class UpdatePerfexCRMObject implements DataTransferObject
/** @var string */
private $companyReference;
+ /** @var string */
+ private $contactName;
+
/** @var string */
private $contactEmail;
@@ -22,23 +25,28 @@ class UpdatePerfexCRMObject implements DataTransferObject
/** @var string */
private $projectName;
- /** @var string */
- private $milestoneName;
+ /** @var int */
+ private $projectStatus;
- /** @var string */
- private $taskName;
+ /** @var array */
+ private $milestoneNames;
+
+ /** @var array */
+ private $taskNames;
- public function __construct(string $companyName, string $companyReference, string $contactEmail, string $bookingMarking, string $projectName, string $milestoneName, string $taskName)
+ public function __construct(string $companyName, string $companyReference, string $contactName, string $contactEmail, string $bookingMarking, string $projectName, int $projectStatus, array $milestoneNames, array $taskNames)
{
$this->companyName = $companyName;
$this->companyReference = $companyReference;
+ $this->contactName = $contactName;
$this->contactEmail = $contactEmail;
$this->bookingMarking = $bookingMarking;
$this->projectName = $projectName;
- $this->milestoneName = $milestoneName;
- $this->taskName = $taskName;
+ $this->projectStatus = $projectStatus;
+ $this->milestoneNames = $milestoneNames;
+ $this->taskNames = $taskNames;
}
/**
@@ -57,6 +65,14 @@ class UpdatePerfexCRMObject implements DataTransferObject
return $this->companyReference;
}
+ /**
+ * @return string
+ */
+ public function getContactName(): string
+ {
+ return $this->contactName;
+ }
+
/**
* @return string
*/
@@ -82,19 +98,26 @@ class UpdatePerfexCRMObject implements DataTransferObject
}
/**
- * @return string
+ * @return int
*/
- public function getMilestoneName(): string
+ public function getProjectStatus(): int
{
- return $this->milestoneName;
+ return $this->projectStatus;
}
/**
- * @return string
+ * @return array
*/
- public function getTaskName(): string
+ public function getMilestoneNames(): array
{
- return $this->taskName;
+ return $this->milestoneNames;
}
+ /**
+ * @return array
+ */
+ public function getTaskNames(): array
+ {
+ return $this->taskNames;
+ }
}
diff --git a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php
index 0dbd1f1f..00be2fef 100644
--- a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php
+++ b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php
@@ -10,6 +10,8 @@ use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMProject;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePerfexCRMObject;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePaymentPerfexCRMObject;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoiceSingleItemPerfexCRMObject;
+use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomerProject;
+use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus;
use App\Models\PackingList;
use Carbon\Carbon;
@@ -28,6 +30,9 @@ class CreatePerfexCRMInvoiceProcessor
/** @var FetchesPerfexCRMProject */
private $fetchesPerfexCRMProject;
+ /** @var CreatesPerfexCRMCustomerProject */
+ private $createsPerfexCRMCustomerProject;
+
/**
* CreatePerfexCRMInvoiceProcessor constructor.
* @param CreatesPerfexCRMInvoice $createsPerfexCRMInvoice
@@ -35,12 +40,14 @@ class CreatePerfexCRMInvoiceProcessor
public function __construct(CreatesPerfexCRMInvoice $createsPerfexCRMInvoice,
CreatesPerfexCRMInvoicePayment $createsPerfexCRMInvoicePayment,
ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer,
- FetchesPerfexCRMProject $fetchesPerfexCRMProject)
+ FetchesPerfexCRMProject $fetchesPerfexCRMProject,
+ CreatesPerfexCRMCustomerProject $createsPerfexCRMCustomerProject)
{
$this->createsPerfexCRMInvoice = $createsPerfexCRMInvoice;
$this->createsPerfexCRMInvoicePayment = $createsPerfexCRMInvoicePayment;
$this->convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer;
$this->fetchesPerfexCRMProject = $fetchesPerfexCRMProject;
+ $this->createsPerfexCRMCustomerProject = $createsPerfexCRMCustomerProject;
}
/**
@@ -97,10 +104,16 @@ class CreatePerfexCRMInvoiceProcessor
$orderReference = $transaction->owner->owner->reference;
$packingListReference = $transaction->owner->reference;
$projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference;
- $project = (App()->make(FetchesPerfexCRMProject::class))->execute($projectName, $clientId);
+ $project = $this->fetchesPerfexCRMProject->execute($projectName, $clientId);
if(!is_null($project)){
$projectId = $project->id;
}
+ else{
+ $result = $this->createsPerfexCRMCustomerProject->execute($projectName, PerfexCRMProjectStatus::NOT_STARTED, $clientId);
+ if(isset($result->payload)){ //Here means project creation successful
+ $projectId = $result->payload['project_id'];
+ }
+ }
}
}
diff --git a/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php
index b219da54..809dc835 100644
--- a/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php
+++ b/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php
@@ -18,7 +18,7 @@ use App\Classes\Modules\PerfexCRM\DataTransferObjects\InitialPerfexCRMObject;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
use App\Classes\ValueObjects\Constants\PerfexCRMMilestones;
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
-use App\Classes\ValueObjects\Constants\PerfexCRMStatus;
+use App\Classes\ValueObjects\Constants\PerfexCRMTaskStatus;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
@@ -149,7 +149,7 @@ class InitializePerfexCRMProcessor
}
// Get existing or create project, project has to exist first before milestone can appear under it
- $result = $this->createsPerfexCRMCustomerProject->execute($initialPerfexCRMObject->getProjectName(), $crmClientId);
+ $result = $this->createsPerfexCRMCustomerProject->execute($initialPerfexCRMObject->getProjectName(), $initialPerfexCRMObject->getProjectStatus(), $crmClientId);
if(isset($result->payload)){ //Here means project creation successful
$projectId = $result->payload['project_id'];
}
@@ -157,8 +157,8 @@ class InitializePerfexCRMProcessor
$projectId = $this->fetchesPerfexCRMProject->execute($initialPerfexCRMObject->getProjectName(), $crmClientId)->id;
}
- if(!is_null($result)){
- $tasks = $initialPerfexCRMObject->getTaskNames();
+ $tasks = $initialPerfexCRMObject->getTaskNames();
+ if(count($tasks) > 0){
//Create tasks with milestone
for($count=0; $count < count($tasks); $count++) {
@@ -177,13 +177,16 @@ class InitializePerfexCRMProcessor
}
}
- $taskStatus = PerfexCRMStatus::NOT_STARTED;
+ $taskStatus = PerfexCRMTaskStatus::NOT_STARTED;
if($tasks[$count]['status'] != ''){
$taskStatus = $tasks[$count]['status'];
}
// 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);
+ if(is_null($result)){
+ break; //Breaking the rest of the tasks in array assuming that they are all created as a batch previously
+ }
}
}
return true;
diff --git a/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php
index 9602696d..b882d0c7 100644
--- a/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php
+++ b/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php
@@ -3,28 +3,33 @@
namespace App\Classes\Modules\PerfexCRM\Processors;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
-use App\Classes\ValueObjects\Constants\PerfexCRMStatus;
use App\Classes\Jobs\CreatePerfexCRMSingleTask;
+use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
+use App\Models\Company;
class NewLeadTaskToPerfexCRMProcessor
{
/**
- * @param None
+ * @param Company $company
* @return true
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
- public function execute()
+ public function execute(Company $company)
{
+ $companyModule = $company->companyModules()->first();
+ $employee = $companyModule->employees()->first();
+ $contactEmail = $employee->email;
+
$createTaskPerfexCRMObject = new CreateTaskPerfexCRMObject(
- "dillontest1@gmail.com",
- "test is the name of the task",
- "this is the description of the task",
+ $contactEmail,
+ PerfexCRMTasks::TASK_IDENTIFICATION_1['name'],
+ PerfexCRMTasks::TASK_IDENTIFICATION_1['description'],
"",
"",
"",
"",
"",
- PerfexCRMStatus::NOT_STARTED
+ PerfexCRMTasks::TASK_IDENTIFICATION_1['status']
);
CreatePerfexCRMSingleTask::dispatch($createTaskPerfexCRMObject);
diff --git a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php
new file mode 100644
index 00000000..775407ed
--- /dev/null
+++ b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php
@@ -0,0 +1,51 @@
+owner;
+ $companyModule = $order->companyModule()->first();
+ $connection = $companyModule->inviters()->withPivot('invitee_reference')->first();
+ $companyName = $companyModule->name;
+ $companyReference = $connection ? $connection->pivot->invitee_reference:'';
+ $employee = $companyModule->employees()->first();
+ $contactEmail = $employee->email;
+ $contactName = $employee->name;
+
+ $orderReference = $packingList->owner->reference;
+ $packingListReference = $packingList->reference;
+ $projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference;
+
+ $updatePerfexCRMObject = new UpdatePerfexCRMObject(
+ $companyName,
+ $companyReference,
+ $contactName,
+ $contactEmail,
+ "",
+ $projectName,
+ PerfexCRMProjectStatus::NOT_STARTED,
+ [],
+ [
+ PerfexCRMTasks::TASK_LOADED_CONTAINER_1,
+ PerfexCRMTasks::TASK_LOADED_CONTAINER_2,
+ ]
+ );
+ UpdatePerfexCRM::dispatch($updatePerfexCRMObject);
+
+ return true;
+ }
+}
diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php
index 4dcbf2a5..cd2682ec 100644
--- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php
+++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php
@@ -7,13 +7,12 @@ use App\Classes\Modules\PerfexCRM\Processors\InitializePerfexCRMProcessor;
use App\Classes\Modules\PerfexCRM\Services\Init;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
-use App\Classes\Modules\PerfexCRM\DataTransferObjects\InitialPerfexCRMObject;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\PerfexCRMMilestones;
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
+use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
-use App\Classes\Jobs\InitializePerfexCRM;
use App\Classes\Jobs\UpdatePerfexCRMInvoice;
use App\Classes\Jobs\UpdatePerfexCRM;
use App\Models\Transaction;
@@ -51,28 +50,30 @@ class TransactionToPerfexCRMProcessor
*/
public function execute(Transaction $model, int $status)
{
- if($model->owner instanceof \App\Models\Transaction && $status == ApprovalStatus::APPROVED){
- //dd(json_encode($packingList->owner()->first()->companyModule()->first()->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference));
- //dd(json_encode($model->owner->owner->owner()->first()->companyModule()->first()->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference));
- $companyModule = $model->owner->owner->owner()->first()->companyModule()->first();
+ if($model->owner instanceof \App\Models\Transaction && $status == ApprovalStatus::APPROVED)
+ {
+ $packingList = $model->owner->owner;
+ $order = $packingList->owner()->first();
+ $companyModule = $order->companyModule()->first();
$companyName = $companyModule->name;
$companyReference = $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
$employee = $companyModule->employees()->first();
$contactEmail = $employee->email;
$contactName = $employee->name;
- $orderReference = $model->owner->owner->owner()->first()->reference;
- $packingListReference = $model->owner->owner->reference;
+ $orderReference = $order->reference;
+ $packingListReference = $packingList->reference;
$projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference;
- $bookingMarking = $model->owner->owner->id."-".$model->owner->owner->owner->id;
- $initialPerfexCRMObject = new InitialPerfexCRMObject(
+ $bookingMarking = $packingList->id."-".$packingList->owner->id;
+ $updatePerfexCRMObject = new UpdatePerfexCRMObject(
$companyName,
$companyReference,
$contactName,
$contactEmail,
$bookingMarking,
$projectName,
+ PerfexCRMProjectStatus::IN_PROGRESS,
[],
[
PerfexCRMTasks::TASK_1,
@@ -83,8 +84,7 @@ class TransactionToPerfexCRMProcessor
]
);
- //$this->initializePerfexCRMProcessor->execute($initialPerfexCRMObject);
- InitializePerfexCRM::dispatch($initialPerfexCRMObject);
+ UpdatePerfexCRM::dispatch($updatePerfexCRMObject);
$updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject(
$contactEmail,
diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php
index 0b452d02..03900ce2 100644
--- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php
+++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php
@@ -11,11 +11,11 @@ use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMMilestone;
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMTask;
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomer;
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomerContact;
-use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMTask;
+use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMCustomer;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CustomerContactObject;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
-use App\Classes\ValueObjects\Constants\PerfexCRMStatus;
+use App\Classes\ValueObjects\Constants\PerfexCRMTaskStatus;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
@@ -49,11 +49,13 @@ class UpdatePerfexCRMProcessor
/** @var CreatesPerfexCRMCustomerContact */
private $createsPerfexCRMCustomerContact;
- /** @var UpdatesPerfexCRMTask */
- private $updatesPerfexCRMTask;
+ /** @var UpdatesPerfexCRM */
+ private $updatePerfexCRM;
+ /** @var UpdatesPerfexCRMCustomer */
+ private $updatesPerfexCRMCustomer;
- /**
+ /**
* @param ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer
* @param CreatesPerfexCRMCustomerProject $createsPerfexCRMCustomerProject
* @param CreatesPerfexCRMMilestone $createsPerfexCRMMilestone
@@ -63,18 +65,18 @@ class UpdatePerfexCRMProcessor
* @param FetchesPerfexCRMTask $fetchesPerfexCRMTask
* @param CreatesPerfexCRMCustomer $createsPerfexCRMCustomer
* @param CreatesPerfexCRMCustomerContact $createsPerfexCRMCustomerContact
- * @param UpdatesPerfexCRMTask $updatesPerfexCRMTask
+ * @param UpdatesPerfexCRMCustomer $updatesPerfexCRMCustomer
*/
public function __construct(ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer,
- CreatesPerfexCRMCustomerProject $createsPerfexCRMCustomerProject,
- CreatesPerfexCRMMilestone $createsPerfexCRMMilestone,
- CreatesPerfexCRMTask $createsPerfexCRMTask,
- FetchesPerfexCRMProject $fetchesPerfexCRMProject,
- FetchesPerfexCRMMilestone $fetchesPerfexCRMMilestone,
- FetchesPerfexCRMTask $fetchesPerfexCRMTask,
- CreatesPerfexCRMCustomer $createsPerfexCRMCustomer,
- CreatesPerfexCRMCustomerContact $createsPerfexCRMCustomerContact,
- UpdatesPerfexCRMTask $updatesPerfexCRMTask)
+ CreatesPerfexCRMCustomerProject $createsPerfexCRMCustomerProject,
+ CreatesPerfexCRMMilestone $createsPerfexCRMMilestone,
+ CreatesPerfexCRMTask $createsPerfexCRMTask,
+ FetchesPerfexCRMProject $fetchesPerfexCRMProject,
+ FetchesPerfexCRMMilestone $fetchesPerfexCRMMilestone,
+ FetchesPerfexCRMTask $fetchesPerfexCRMTask,
+ CreatesPerfexCRMCustomer $createsPerfexCRMCustomer,
+ CreatesPerfexCRMCustomerContact $createsPerfexCRMCustomerContact,
+ UpdatesPerfexCRMCustomer $updatesPerfexCRMCustomer)
{
$this->convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer;
$this->createsPerfexCRMCustomerProject = $createsPerfexCRMCustomerProject;
@@ -85,55 +87,106 @@ class UpdatePerfexCRMProcessor
$this->fetchesPerfexCRMTask = $fetchesPerfexCRMTask;
$this->createsPerfexCRMCustomer = $createsPerfexCRMCustomer;
$this->createsPerfexCRMCustomerContact = $createsPerfexCRMCustomerContact;
- $this->updatesPerfexCRMTask = $updatesPerfexCRMTask;
- }
+ $this->updatesPerfexCRMCustomer = $updatesPerfexCRMCustomer;
+ }
/**
- * @param PerfexCRMObject $perfexCRMObject
+ * @param UpdatePerfexCRMObject $updatePerfexCRMObject
* @return null|object
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
- public function execute(UpdatePerfexCRMObject $updatePerfexCRMObject) {
+ 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'];
+ // 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
+ $crmCompany = $updatePerfexCRMObject->getCompanyName();
+ $result = $this->convertsPerfexCRMLeadToCustomer->execute($updatePerfexCRMObject->getContactEmail());
+ if(isset($result->payload)){
+ $crmClientId = $result->payload['client_id'];
+ if (isset($result->payload['company'])) {
+ $crmCompany = $result->payload['company'];
+ }
+ }
+ 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($crmCompany);
+ if(is_null($result)){
+ $crmCompany = $crmCompany." 2";
+ $result = $this->createsPerfexCRMCustomer->execute($crmCompany);
+ }
+
+ $crmClientId = $result->payload['clientId'];
+
+ $customerContactObject = new CustomerContactObject(
+ $crmClientId,
+ $updatePerfexCRMObject->getContactName(),
+ $updatePerfexCRMObject->getContactName(),
+ $updatePerfexCRMObject->getContactEmail(),
+ "pU^T@sC#9Q",
+ "on",
+ "on"
+ );
+ $result = $this->createsPerfexCRMCustomerContact->execute($customerContactObject);
+ }
+
+ //Update custom fields to identify company reference from exchange or shipping portal
+ $value_exists = false;
+ if (isset($result->payload['customfields'])) {
+ foreach ($result->payload['customfields'] as $element) {
+ if ($element['value'] === $updatePerfexCRMObject->getCompanyReference()) {
+ $value_exists = true;
+ break;
+ }
+ }
+ }
+ if(!$value_exists);
+ {
+ $result = $this->updatesPerfexCRMCustomer->execute($crmClientId, $crmCompany, $updatePerfexCRMObject->getCompanyReference());
+ }
+
+ // Get existing or create project, project has to exist first before milestone can appear under it
+ $result = $this->createsPerfexCRMCustomerProject->execute($updatePerfexCRMObject->getProjectName(), $updatePerfexCRMObject->getProjectStatus(), $crmClientId);
+ if(isset($result->payload)){ //Here means project creation successful
+ $projectId = $result->payload['project_id'];
+ }
+ else{
+ $projectId = $this->fetchesPerfexCRMProject->execute($updatePerfexCRMObject->getProjectName(), $crmClientId)->id;
+ }
+
+ $tasks = $updatePerfexCRMObject->getTaskNames();
+ if(count($tasks) > 0){
+
+ //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'];
+ }
+ }
+
+ $taskStatus = PerfexCRMTaskStatus::NOT_STARTED;
+ if($tasks[$count]['status'] != ''){
+ $taskStatus = $tasks[$count]['status'];
+ }
+
+ // 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);
+ if(is_null($result)){
+ break; //Breaking the rest of the tasks in array assuming that they are all created as a batch previously
+ }
+ }
}
-
- // 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;
- }
+ return true;
+ }
}
diff --git a/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMCustomerProject.php b/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMCustomerProject.php
index e719ccef..f5d4de3e 100644
--- a/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMCustomerProject.php
+++ b/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMCustomerProject.php
@@ -14,7 +14,7 @@ class CreatesPerfexCRMCustomerProject
* @return null|object
* @throws MalformedRequestException
*/
- public function execute(string $projectName, string $clientId) {
+ public function execute(string $projectName, int $status, string $clientId) {
try{
$data = [
'name' => $projectName,
@@ -22,7 +22,7 @@ class CreatesPerfexCRMCustomerProject
'billing_type' => 1,
'clientid' => $clientId,
'start_date' => date('Y-m-d'),
- 'status' => 1
+ 'status' => $status
];
$response = Http::asForm()->withHeaders([
diff --git a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMProject.php b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMProject.php
new file mode 100644
index 00000000..6c016ff0
--- /dev/null
+++ b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMProject.php
@@ -0,0 +1,43 @@
+ $project->name,
+ 'clientid' => $project->clientid,
+ // 'rel_type' => 'customer',
+ 'billing_type' => 1,
+ 'start_date' => $project->start_date,
+ 'status' => $status
+ ];
+
+ $response = Http::asJson()->withHeaders([
+ 'authtoken' => config('perfexcrm.api_key')])
+ ->put(config('perfexcrm.base_url').'/api/projects/'.$project->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());
+ }
+ }
+}
diff --git a/app/Classes/ValueObjects/Constants/PerfexCRMProjectStatus.php b/app/Classes/ValueObjects/Constants/PerfexCRMProjectStatus.php
new file mode 100644
index 00000000..5228699f
--- /dev/null
+++ b/app/Classes/ValueObjects/Constants/PerfexCRMProjectStatus.php
@@ -0,0 +1,16 @@
+ 'MILESTONE 1 - Customer Paid',
'reference' => '',
'on_task_completion' => '',
- 'status' => PerfexCRMStatus::COMPLETED
+ 'status' => PerfexCRMTaskStatus::COMPLETED
];
public const TASK_POST_PAYMENT_1 = [
@@ -26,7 +26,7 @@ class PerfexCRMTasks
'milestone' => '',
'reference' => 'TASK_POST_PAYMENT_1',
'on_task_completion' => 'TASK_POST_PAYMENT_2',
- 'status' => PerfexCRMStatus::IN_PROGRESS
+ 'status' => PerfexCRMTaskStatus::IN_PROGRESS
];
public const TASK_POST_PAYMENT_2 = [
'name' => 'Approve Payment',
@@ -73,4 +73,48 @@ class PerfexCRMTasks
'on_task_completion' => '',
'status' => ''
];
+
+ public const TASK_LOADED_CONTAINER_1 = [
+ 'name' => 'Generate Shipping Invoices',
+ 'description' => '○ Purpose: -
+ ○ Initial Status: In Progress
+ ○ Deadline: Next day
+ ○ Responsible department: Operation
+ ○ Assignee: -
+ ○ Next step: Approve Shipping Invoice change to in progress.
',
+ 'milestone' => '',
+ 'reference' => 'TASK_LOADED_CONTAINER_1',
+ 'on_task_completion' => 'TASK_LOADED_CONTAINER_2',
+ 'status' => PerfexCRMTaskStatus::IN_PROGRESS
+ ];
+
+ public const TASK_LOADED_CONTAINER_2 = [
+ 'name' => 'Approve Shipping Invoices',
+ 'description' => '○ Purpose: -
+ ○ Initial Status: Not Starteds
+ ○ Deadline: Next day
+ ○ Responsible department: Customer Services
+ ○ Next step: -
',
+ 'milestone' => '',
+ 'reference' => 'TASK_LOADED_CONTAINER_2',
+ 'on_task_completion' => '',
+ 'status' => ''
+ ];
+
+
+ public const TASK_IDENTIFICATION_1 = [
+ 'name' => 'Approve Identification Verification',
+ 'description' => '○ Purpose: To ensure the customer submit information matches the information in their identification document.
+ ○ Initial Status: In Progress
+ ○ Deadline: Same Day
+ ○ Responsible department: Operation
+ ○ Next step: None
+ ○ Additional details: ** Any specific requirements or notes for the operation.**
+ ○ Dependencies: None
+ ○ Outcomes: Customer account identification is verified
',
+ 'milestone' => '',
+ 'reference' => 'TASK_IDENTIFICATION_1',
+ 'on_task_completion' => '',
+ 'status' => PerfexCRMTaskStatus::IN_PROGRESS
+ ];
}