diff --git a/app/Classes/Jobs/CreatePerfexCRMSingleTask.php b/app/Classes/Jobs/CreatePerfexCRMSingleTask.php
new file mode 100644
index 00000000..586efe0f
--- /dev/null
+++ b/app/Classes/Jobs/CreatePerfexCRMSingleTask.php
@@ -0,0 +1,42 @@
+createTaskPerfexCRMObject = $createTaskPerfexCRMObject;
+ }
+
+ public function handle()
+ {
+ $lead = (App()->make(FetchesPerfexCRMLead::class))->execute($this->createTaskPerfexCRMObject->getEmail());
+ if(!is_null($lead))
+ {
+ $this->createTaskPerfexCRMObject->setLeadId($lead->id);
+ (App()->make(CreatePerfexCRMTaskProcessor::class))->execute($this->createTaskPerfexCRMObject);
+ }
+ }
+}
diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php
new file mode 100644
index 00000000..70bae013
--- /dev/null
+++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php
@@ -0,0 +1,127 @@
+email = $email;
+ $this->name = $name;
+ $this->description = $description;
+ $this->leadId = $leadId;
+ $this->projectId = $projectId;
+ $this->milestoneId = $milestoneId;
+ $this->reference = $reference;
+ $this->onTaskCompletion = $onTaskCompletion;
+ $this->status = $status;
+ }
+
+ /**
+ * @return string
+ */
+ public function getEmail(): string
+ {
+ return $this->email;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName(): string
+ {
+ return $this->name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDescription(): string
+ {
+ return $this->description;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLeadId(): string
+ {
+ return $this->leadId;
+ }
+
+ public function setLeadId(string $leadId)
+ {
+ $this->leadId = $leadId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getProjectId(): string
+ {
+ return $this->projectId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMilestoneId(): string
+ {
+ return $this->milestoneId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getReference(): string
+ {
+ return $this->reference;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOnTaskCompletion(): string
+ {
+ return $this->onTaskCompletion;
+ }
+
+ /**
+ * @return string
+ */
+ public function getStatus(): string
+ {
+ return $this->status;
+ }
+
+}
diff --git a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php
new file mode 100644
index 00000000..965f6f34
--- /dev/null
+++ b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php
@@ -0,0 +1,41 @@
+createsPerfexCRMTask = $createsPerfexCRMTask;
+ }
+
+ /**
+ * @param CreateTaskPerfexCRMObject $createTaskPerfexCRMObject
+ * @return true
+ * @throws \App\Classes\Exceptions\MalformedRequestException
+ */
+ public function execute(CreateTaskPerfexCRMObject $createTaskPerfexCRMObject) {
+ $this->createsPerfexCRMTask->execute(
+ $createTaskPerfexCRMObject->getName(),
+ $createTaskPerfexCRMObject->getDescription(),
+ $createTaskPerfexCRMObject->getLeadId(),
+ $createTaskPerfexCRMObject->getMilestoneId(),
+ $createTaskPerfexCRMObject->getProjectId(),
+ $createTaskPerfexCRMObject->getReference(),
+ $createTaskPerfexCRMObject->getOnTaskCompletion(),
+ $createTaskPerfexCRMObject->getStatus(),
+ );
+ return true;
+ }
+
+}
diff --git a/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php
index 298e86d8..b219da54 100644
--- a/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php
+++ b/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php
@@ -178,14 +178,14 @@ class InitializePerfexCRMProcessor
}
$taskStatus = PerfexCRMStatus::NOT_STARTED;
- if($tasks[$count]['name'] == PerfexCRMTasks::TASK_1['name']){
- $taskStatus = PerfexCRMStatus::COMPLETED;
+ if($tasks[$count]['status'] != ''){
+ $taskStatus = $tasks[$count]['status'];
}
// Get existing or create task
- $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, $projectId, $tasks[$count]['reference'], $taskStatus);
+ $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $taskStatus);
}
- }
+ }
return true;
}
diff --git a/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php
new file mode 100644
index 00000000..9602696d
--- /dev/null
+++ b/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php
@@ -0,0 +1,34 @@
+ $taskName,
+ 'description' => $taskDescription,
'milestone' => $milestoneId,
'startdate' => date('Y-m-d'),
'rel_type' => 'project',
'rel_id' => $projectId,
'status' => $status,
'is_system_created' => 1,
- 'reference' => $reference
+ 'reference' => $reference,
+ 'on_task_completion' => $on_task_completion
];
+ if($leadId != '') {
+ $data = [
+ 'name' => $taskName,
+ 'description' => $taskDescription,
+ 'milestone' => $milestoneId,
+ 'startdate' => date('Y-m-d'),
+ 'rel_type' => 'lead',
+ 'rel_id' => $leadId,
+ 'status' => $status,
+ 'is_system_created' => 1,
+ 'reference' => $reference,
+ 'on_task_completion' => $on_task_completion
+ ];
+ }
+
$response = Http::asForm()->withHeaders([
'authtoken' => config('perfexcrm.api_key')])
->post(config('perfexcrm.base_url').'/api/tasks',$data);
diff --git a/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMLead.php b/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMLead.php
new file mode 100644
index 00000000..df9c754d
--- /dev/null
+++ b/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMLead.php
@@ -0,0 +1,34 @@
+ config('perfexcrm.api_key'),])
+ ->get(config('perfexcrm.base_url').'/api/leads/byemail/'.$email);
+
+ 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/Modules/Transactions/Services/UpdatesTransactionStatus.php b/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php
index f311f09b..2928f36f 100644
--- a/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php
+++ b/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php
@@ -5,19 +5,25 @@ namespace App\Classes\Modules\Transactions\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Transaction;
use App\Classes\Modules\PerfexCRM\Processors\TransactionToPerfexCRMProcessor;
+use App\Classes\Modules\PerfexCRM\Processors\NewLeadTaskToPerfexCRMProcessor;
class UpdatesTransactionStatus extends AbstractUpdateRecord
{
/** @var TransactionToPerfexCRMProcessor */
private $transactionToPerfexCRMProcessor;
+ /** @var NewLeadTaskToPerfexCRMProcessor */
+ private $newLeadTaskToPerfexCRMProcessor;
+
/**
* UpdatesTransactionStatus constructor.
* @param TransactionToPerfexCRMProcessor $transactionToPerfexCRMProcessor
+ * @param NewLeadTaskToPerfexCRMProcessor $newLeadTaskToPerfexCRMProcessor
*/
- public function __construct(TransactionToPerfexCRMProcessor $transactionToPerfexCRMProcessor)
+ public function __construct(TransactionToPerfexCRMProcessor $transactionToPerfexCRMProcessor, NewLeadTaskToPerfexCRMProcessor $newLeadTaskToPerfexCRMProcessor)
{
$this->transactionToPerfexCRMProcessor = $transactionToPerfexCRMProcessor;
+ $this->newLeadTaskToPerfexCRMProcessor = $newLeadTaskToPerfexCRMProcessor;
}
/**
@@ -30,6 +36,7 @@ class UpdatesTransactionStatus extends AbstractUpdateRecord
{
if(config('perfexcrm.is_enabled') == 'true'){
$this->transactionToPerfexCRMProcessor->execute($model, $status);
+ // $this->newLeadTaskToPerfexCRMProcessor->execute();
}
$model->status = $status;
return $this->handler($model);
diff --git a/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php b/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php
index b1abecec..9bac0332 100644
--- a/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php
+++ b/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php
@@ -6,52 +6,71 @@ class PerfexCRMTasks
{
public const TASK_1 = [
'name' => 'Customer Paid',
+ 'description' => '',
'milestone' => 'MILESTONE 1 - Customer Paid',
- 'reference' => ''
+ 'reference' => '',
+ 'on_task_completion' => '',
+ 'status' => PerfexCRMStatus::COMPLETED
];
- public const TASK_2 = [
- 'name' => 'TASK B',
- 'milestone' => 'MILESTONE 2 - Order Placed',
- 'reference' => ''
- ];
- public const TASK_3 = [
- 'name' => 'TASK C',
- 'milestone' => 'MILESTONE 3 - Purchase Order Approved',
- 'reference' => ''
- ];
- public const TASK_4 = [
- 'name' => 'TASK D',
- 'milestone' => 'MILESTONE 4',
- 'reference' => ''
- ];
- public const TASK_5 = [
- 'name' => 'TASK E',
- 'milestone' => 'MILESTONE 5',
- 'reference' => ''
- ];
- public const TASK_6 = [
- 'name' => 'TASK F',
+
+ public const TASK_POST_PAYMENT_1 = [
+ 'name' => 'Map Bank Transaction Record',
+ 'description' => '○ Purpose: To map a transaction to bank transaction in the bank statement
+ ○ Initial Status: In Progress
+ ○ Deadline: Same day
+ ○ Responsible department: Accounts
+ ○ Next step: Change the status of the Approve payment status to "In Progress" upon successful completion of the operation.
+ ○ Additional details: ** Any specific requirements or notes for the operation.**
+ ○ Dependencies: None
+ ○ Outcomes: Bank transaction is mapped successfully, allowing the next steps in the process to be initiated.
',
'milestone' => '',
- 'reference' => 'THIS_IS_TASK_NUMBER_6'
+ 'reference' => 'TASK_POST_PAYMENT_1',
+ 'on_task_completion' => 'TASK_POST_PAYMENT_2',
+ 'status' => PerfexCRMStatus::IN_PROGRESS
];
- public const TASK_7 = [
- 'name' => 'TASK G',
+ public const TASK_POST_PAYMENT_2 = [
+ 'name' => 'Approve Payment',
+ 'description' => '○ Purpose: To verify and approve the customer\'s payment on IZYIM
+ ○ Initial Status: Not Started
+ ○ Deadline:Same day
+ ○ Responsible department: Accounts
+ ○ Next step: Change the status of the Issue Shipping Autocount Invoice operation to "In Progress"
+ ○ Additional details: When the payment method is FPX or Wallet this task is performed automatically by the system.
+ ○ Dependencies: Map Transaction operation must be completed before this operation can begin.
+ ○ Outcomes: The payment will be approved in IZYIM, which will release the customer’s goods for delivery.
',
'milestone' => '',
- 'reference' => 'THIS_IS_TASK_NUMBER_7'
+ 'reference' => 'TASK_POST_PAYMENT_2',
+ 'on_task_completion' => 'TASK_POST_PAYMENT_3',
+ 'status' => ''
];
- public const TASK_8 = [
- 'name' => 'TASK H',
+ public const TASK_POST_PAYMENT_3 = [
+ 'name' => 'Issue Shipping Autocount Invoince',
+ 'description' => '○ Purpose: To issue an invoice for the customer\'s payment in accounting software.
+ ○ Initial Status: Not Started
+ ○ Deadline: Next day
+ ○ Responsible department: Accounts
+ ○ Next step: Change the status of the Knockoff Invoice operation to "In Progress" upon successful completion.
+ ○ Additional details: ** Any specific requirements or notes for the operation.**
+ ○ Dependencies: Approve Payment operation must be completed before this operation can begin.
+ ○ Outcomes: An invoice will be issued in accounting software for the customer\'s payment.
',
'milestone' => '',
- 'reference' => 'THIS_IS_TASK_NUMBER_8'
+ 'reference' => 'TASK_POST_PAYMENT_3',
+ 'on_task_completion' => 'TASK_POST_PAYMENT_4',
+ 'status' => ''
];
- public const TASK_9 = [
- 'name' => 'TASK I',
+ public const TASK_POST_PAYMENT_4 = [
+ 'name' => 'Knockoff Invoice',
+ 'description' => '○ Purpose: The purpose of this operation is to issue the official receipt and knockoff with invoice for the customer\'s payment.
+ ○ Initial Status: Not Started
+ ○ Deadline: Next day.
+ ○ Responsible Department: Accounts
+ ○ Next Step: None
+ ○ Additional Details: ** Any specific requirements or notes for the operation.**
+ ○ Dependencies: Issue Shipping Autocount Invoice operation must be completed before this operation can begin.
+ ○ Outcomes: The customer’s payment is applied to the accounting software invoice and invoice is marked as paid.
',
'milestone' => '',
- 'reference' => 'THIS_IS_TASK_NUMBER_9'
- ];
- public const TASK_10 = [
- 'name' => 'TASK J',
- 'milestone' => '',
- 'reference' => 'THIS_IS_TASK_NUMBER_10'
+ 'reference' => 'TASK_POST_PAYMENT_4',
+ 'on_task_completion' => '',
+ 'status' => ''
];
}