mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-19 04:23:55 +00:00
Add new tasks post payment into CRM + Add task append to lead
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Jobs;
|
||||
|
||||
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMTaskProcessor;
|
||||
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMLead;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
|
||||
|
||||
class CreatePerfexCRMSingleTask implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
/** @var FetchesPerfexCRMLead */
|
||||
private $fetchesPerfexCRMLead;
|
||||
|
||||
/** @var CreateTaskPerfexCRMObject */
|
||||
private $createTaskPerfexCRMObject;
|
||||
|
||||
/**
|
||||
* CreatePerfexCRMSingleTask constructor.
|
||||
* @param CreateTaskPerfexCRMObject $createTaskPerfexCRMObject
|
||||
*/
|
||||
public function __construct(CreateTaskPerfexCRMObject $createTaskPerfexCRMObject)
|
||||
{
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
|
||||
class CreateTaskPerfexCRMObject implements DataTransferObject
|
||||
{
|
||||
/** @var string */
|
||||
private $email;
|
||||
|
||||
/** @var string */
|
||||
private $name;
|
||||
|
||||
/** @var string */
|
||||
private $description;
|
||||
|
||||
/** @var string */
|
||||
private $leadId;
|
||||
|
||||
/** @var string */
|
||||
private $milestoneId;
|
||||
|
||||
/** @var string */
|
||||
private $projectId;
|
||||
|
||||
/** @var string */
|
||||
private $reference;
|
||||
|
||||
/** @var string */
|
||||
private $onTaskCompletion;
|
||||
|
||||
/** @var string */
|
||||
private $status;
|
||||
|
||||
|
||||
public function __construct(string $email, string $name, string $description, string $leadId, string $projectId, string $milestoneId, string $reference, string $onTaskCompletion, string $status)
|
||||
{
|
||||
$this->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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||
|
||||
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMTask;
|
||||
use App\Classes\Exceptions\MalformedRequestException;
|
||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
|
||||
|
||||
class CreatePerfexCRMTaskProcessor
|
||||
{
|
||||
/** @var CreatesPerfexCRMTask */
|
||||
private $createsPerfexCRMTask;
|
||||
|
||||
/**
|
||||
* @param CreatesPerfexCRMTask $createsPerfexCRMTask
|
||||
*/
|
||||
public function __construct(CreatesPerfexCRMTask $createsPerfexCRMTask)
|
||||
{
|
||||
$this->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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||
|
||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
|
||||
use App\Classes\ValueObjects\Constants\PerfexCRMStatus;
|
||||
use App\Classes\Jobs\CreatePerfexCRMSingleTask;
|
||||
|
||||
class NewLeadTaskToPerfexCRMProcessor
|
||||
{
|
||||
/**
|
||||
* @param None
|
||||
* @return true
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
$createTaskPerfexCRMObject = new CreateTaskPerfexCRMObject(
|
||||
"dillontest1@gmail.com",
|
||||
"test is the name of the task",
|
||||
"this is the description of the task",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
PerfexCRMStatus::NOT_STARTED
|
||||
);
|
||||
|
||||
CreatePerfexCRMSingleTask::dispatch($createTaskPerfexCRMObject);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,17 +4,12 @@ namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||
|
||||
use App\Classes\Modules\PerfexCRM\Processors\UpdatePerfexCRMProcessor;
|
||||
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\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\ValueObjects\Constants\PerfexCRMMilestones;
|
||||
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
|
||||
use App\Models\Transaction;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\Jobs\InitializePerfexCRM;
|
||||
use App\Classes\Jobs\UpdatePerfexCRM;
|
||||
|
||||
class TransactionToPerfexCRMProcessor
|
||||
{
|
||||
@@ -49,17 +44,6 @@ class TransactionToPerfexCRMProcessor
|
||||
*/
|
||||
public function execute(Transaction $model, int $status)
|
||||
{
|
||||
// else if($model->owner instanceof \App\Models\Wallet){
|
||||
// //For owner_type > App\Models\Wallet
|
||||
// $companyReference = $model->owner->owner->reference;
|
||||
// $companyName = $model->owner->company->name;
|
||||
// $company = $this->fetchesCompany->execute(['id' => $model->owner->owner->id]);
|
||||
// $employee = $company->employees()->first();
|
||||
// $contactEmail = $employee->email;
|
||||
// $contactName = $employee->name;
|
||||
// $proceed = true;
|
||||
// }
|
||||
|
||||
if($model->owner instanceof \App\Models\Booking && $status == ApprovalStatus::APPROVED){
|
||||
$companyReference = $model->owner->company->reference;
|
||||
$companyName = $model->owner->company->name;
|
||||
@@ -70,7 +54,50 @@ class TransactionToPerfexCRMProcessor
|
||||
|
||||
$serviceTypeName = $model->owner->company->services()->where('id', $model->owner->service_id)->first()->name;
|
||||
$projectName = 'Exchange | '.$serviceTypeName.' | '.$bookingMarking;
|
||||
$tasks = [
|
||||
PerfexCRMTasks::TASK_1
|
||||
];
|
||||
if($model->owner->service_id == 1){
|
||||
$tasks = [
|
||||
PerfexCRMTasks::TASK_1,
|
||||
PerfexCRMTasks::TASK_1_DAY_TRANSFER_1,
|
||||
PerfexCRMTasks::TASK_1_DAY_TRANSFER_2,
|
||||
PerfexCRMTasks::TASK_1_DAY_TRANSFER_3,
|
||||
PerfexCRMTasks::TASK_1_DAY_TRANSFER_4,
|
||||
PerfexCRMTasks::TASK_1_DAY_TRANSFER_5,
|
||||
PerfexCRMTasks::TASK_1_DAY_TRANSFER_6,
|
||||
];
|
||||
}
|
||||
else if($model->owner->service_id == 2){
|
||||
$tasks = [
|
||||
PerfexCRMTasks::TASK_1,
|
||||
PerfexCRMTasks::TASK_3_DAY_TRANSFER_1,
|
||||
PerfexCRMTasks::TASK_3_DAY_TRANSFER_2,
|
||||
PerfexCRMTasks::TASK_3_DAY_TRANSFER_3,
|
||||
PerfexCRMTasks::TASK_3_DAY_TRANSFER_4,
|
||||
PerfexCRMTasks::TASK_3_DAY_TRANSFER_5,
|
||||
PerfexCRMTasks::TASK_3_DAY_TRANSFER_6,
|
||||
];
|
||||
}
|
||||
else if($model->owner->service_id == 4){
|
||||
$tasks = [
|
||||
PerfexCRMTasks::TASK_1,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_1,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_2,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_3,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_4,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_5,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_6,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_7,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_8,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_9,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_10,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_11,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_12,
|
||||
PerfexCRMTasks::TASK_1688_PAYMENT_13,
|
||||
|
||||
];
|
||||
}
|
||||
$initialPerfexCRMObject = new InitialPerfexCRMObject(
|
||||
$companyName,
|
||||
$companyReference,
|
||||
@@ -79,64 +106,12 @@ class TransactionToPerfexCRMProcessor
|
||||
$bookingMarking,
|
||||
$projectName,
|
||||
[],
|
||||
[
|
||||
PerfexCRMTasks::TASK_1,
|
||||
]
|
||||
$tasks
|
||||
);
|
||||
|
||||
//$this->initializePerfexCRMProcessor->execute($initialPerfexCRMObject);
|
||||
InitializePerfexCRM::dispatch($initialPerfexCRMObject);
|
||||
|
||||
// $updatePerfexCRMObject = new UpdatePerfexCRMObject(
|
||||
// $companyName,
|
||||
// $companyReference,
|
||||
// $contactEmail,
|
||||
// $bookingMarking,
|
||||
// $companyReference.'-'.$bookingMarking,
|
||||
// PerfexCRMTasks::TASK_1['milestone'],
|
||||
// PerfexCRMTasks::TASK_1['name']
|
||||
// );
|
||||
|
||||
// //Mark task in Perfex CRM as done (5 means completed task)
|
||||
// // $this->updatePerfexCRMProcessor->execute($updatePerfexCRMObject);
|
||||
// UpdatePerfexCRM::dispatch($updatePerfexCRMObject);
|
||||
}
|
||||
|
||||
/*
|
||||
else if($model->owner instanceof \App\Models\Booking && $status == ApprovalStatus::APPROVED){
|
||||
|
||||
$updatePerfexCRMObject = new UpdatePerfexCRMObject(
|
||||
$companyName,
|
||||
$companyReference,
|
||||
$contactEmail,
|
||||
$bookingMarking,
|
||||
$companyReference.'-'.$bookingMarking,
|
||||
PerfexCRMTasks::TASK_3['milestone'],
|
||||
PerfexCRMTasks::TASK_3['name']
|
||||
);
|
||||
|
||||
//Mark task in Perfex CRM as done (5 means completed task)
|
||||
// $this->updatePerfexCRMProcessor->execute($updatePerfexCRMObject);
|
||||
UpdatePerfexCRM::dispatch($updatePerfexCRMObject);
|
||||
}
|
||||
else if($model->owner instanceof \App\Models\Booking && $status == ApprovalStatus::PENDING_VERIFICATION){
|
||||
|
||||
$updatePerfexCRMObject = new UpdatePerfexCRMObject(
|
||||
$companyName,
|
||||
$companyReference,
|
||||
$contactEmail,
|
||||
$bookingMarking,
|
||||
$companyReference.'-'.$bookingMarking,
|
||||
PerfexCRMTasks::TASK_2['milestone'],
|
||||
PerfexCRMTasks::TASK_2['name']
|
||||
);
|
||||
|
||||
//Mark task in Perfex CRM as done (5 means completed task)
|
||||
//$this->updatePerfexCRMProcessor->execute($updatePerfexCRMObject);
|
||||
UpdatePerfexCRM::dispatch($updatePerfexCRMObject);
|
||||
}
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,25 +10,46 @@ class CreatesPerfexCRMTask
|
||||
{
|
||||
/**
|
||||
* @param string $taskName
|
||||
* @param string $taskDescription
|
||||
* @param string $leadId
|
||||
* @param string $milestoneId
|
||||
* @param string $projectId
|
||||
* @param string $reference, default: ''
|
||||
* @param string $on_task_completion, default: ''
|
||||
* @param string $status, default: 1
|
||||
* @return null|object
|
||||
* @throws MalformedRequestException
|
||||
*/
|
||||
public function execute(string $taskName, string $milestoneId, string $projectId, string $reference = '', string $status = "1") {
|
||||
public function execute(string $taskName, string $taskDescription, string $leadId, string $milestoneId, string $projectId, string $reference = '', string $on_task_completion = '', string $status = "1") {
|
||||
try{
|
||||
$data = [
|
||||
'name' => $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);
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PerfexCRM\Services;
|
||||
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use App\Classes\Exceptions\MalformedRequestException;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class FetchesPerfexCRMLead
|
||||
{
|
||||
/**
|
||||
* @param string $email
|
||||
* @return null|object
|
||||
* @throws MalformedRequestException
|
||||
*/
|
||||
public function execute(string $email) {
|
||||
try{
|
||||
$response = Http::withHeaders([
|
||||
'authtoken' => 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -6,52 +6,400 @@ 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_1_DAY_TRANSFER_1 = [
|
||||
'name' => 'Map Bank Transaction Record',
|
||||
'description' => '○ Purpose: To map a transaction to bank transaction in the bank statement<br>
|
||||
○ Initial Status: <b>In Progress</b> <br>
|
||||
○ Deadline: If payment is created before 4:30 pm, it must be made on the same day. If payment is created after 4:30 pm, it must be made the next day <br>
|
||||
○ Responsible department: Accounts <br>
|
||||
○ Next step: Change the status of the Approve payment status to "In Progress" upon successful completion of the operation. <br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.** <br>
|
||||
○ Dependencies: None <br>
|
||||
○ Outcomes: Bank transaction is mapped successfully, allowing the next steps in the process to be initiated. <br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'THIS_IS_TASK_NUMBER_6'
|
||||
'reference' => 'TASK_1_DAY_TRANSFER_1',
|
||||
'on_task_completion' => 'TASK_1_DAY_TRANSFER_2',
|
||||
'status' => PerfexCRMStatus::IN_PROGRESS
|
||||
];
|
||||
public const TASK_7 = [
|
||||
'name' => 'TASK G',
|
||||
public const TASK_1_DAY_TRANSFER_2 = [
|
||||
'name' => 'Approve Payment',
|
||||
'description' => '○ Purpose: To verify and approve the customer\'s payment on exchange<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline:If payment is created before 4:30 pm, it must be made on the same day. If payment is created after 4:30 pm, it must be made the next day<br>
|
||||
○ Responsible department: Accounts<br>
|
||||
○ Next step:<br>
|
||||
i. Change the status of the Issue Exchange Autocount Invoice operation to "In Progress"<br>
|
||||
ii. Change the status of the Order Placed in White Form operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: When the payment method is FPX or Wallet this task is performed automatically by the system.<br>
|
||||
○ Dependencies: Map Transaction operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The payment will be approved in exchange, allowing the next steps in the process to be initiated.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'THIS_IS_TASK_NUMBER_7'
|
||||
'reference' => 'TASK_1_DAY_TRANSFER_2',
|
||||
'on_task_completion' => 'TASK_1_DAY_TRANSFER_3',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_8 = [
|
||||
'name' => 'TASK H',
|
||||
public const TASK_1_DAY_TRANSFER_3 = [
|
||||
'name' => 'Issue Exchange Autocount Invoince',
|
||||
'description' => '○ Purpose: To issue an invoice for the customer\'s payment in accounting software.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Next day<br>
|
||||
○ Responsible department: Accounts<br>
|
||||
○ Next step: Change the status of the Knockoff Invoice operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Approve Payment operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: An invoice will be issued in accounting software for the customer\'s payment.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'THIS_IS_TASK_NUMBER_8'
|
||||
'reference' => 'TASK_1_DAY_TRANSFER_3',
|
||||
'on_task_completion' => 'TASK_1_DAY_TRANSFER_4',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_9 = [
|
||||
'name' => 'TASK I',
|
||||
public const TASK_1_DAY_TRANSFER_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.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Next day.<br>
|
||||
○ Responsible Department: Accounts<br>
|
||||
○ Next Step: None<br>
|
||||
○ Additional Details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Issue Exchange Autocount Invoice operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer\'s payment is applied to the accounting software invoice and invoice is marked as paid.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'THIS_IS_TASK_NUMBER_9'
|
||||
'reference' => 'TASK_1_DAY_TRANSFER_4',
|
||||
'on_task_completion' => 'TASK_1_DAY_TRANSFER_5',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_10 = [
|
||||
'name' => 'TASK J',
|
||||
public const TASK_1_DAY_TRANSFER_5 = [
|
||||
'name' => 'Order Placed in White Form',
|
||||
'description' => '○ Purpose: To confirm that the order has been placed with the supplier.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Upload China Bank Slip operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Approve Payment operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The order is placed with a supplier and the customer\'s order is confirmed.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'THIS_IS_TASK_NUMBER_10'
|
||||
'reference' => 'TASK_1_DAY_TRANSFER_5',
|
||||
'on_task_completion' => 'TASK_1_DAY_TRANSFER_6',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1_DAY_TRANSFER_6 = [
|
||||
'name' => 'Upload China Bank Slip',
|
||||
'description' => '○ Purpose: To confirm that the customer order has been transferred to the customer\'s supplier.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Next day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: None<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Order Placed in White Form operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer can download the payment transfer proof to send to their supplier.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1_DAY_TRANSFER_6',
|
||||
'on_task_completion' => '',
|
||||
'status' => ''
|
||||
];
|
||||
|
||||
public const TASK_3_DAY_TRANSFER_1 = [
|
||||
'name' => 'Map Bank Transaction Record',
|
||||
'description' => '○ Purpose: To map a transaction to bank transaction in the bank statement<br>
|
||||
○ Initial Status: <b>In Progress</b> <br>
|
||||
○ Deadline: If payment is created before 4:30 pm, it must be made on the same day. If payment is created after 4:30 pm, it must be made the next day <br>
|
||||
○ Responsible department: Accounts <br>
|
||||
○ Next step: Change the status of the Approve payment status to "In Progress" upon successful completion of the operation. <br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.** <br>
|
||||
○ Dependencies: None <br>
|
||||
○ Outcomes: Bank transaction is mapped successfully, allowing the next steps in the process to be initiated. <br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_3_DAY_TRANSFER_1',
|
||||
'on_task_completion' => 'TASK_3_DAY_TRANSFER_2',
|
||||
'status' => PerfexCRMStatus::IN_PROGRESS
|
||||
];
|
||||
public const TASK_3_DAY_TRANSFER_2 = [
|
||||
'name' => 'Approve Payment',
|
||||
'description' => '○ Purpose: To verify and approve the customer\'s payment on exchange<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline:If payment is created before 4:30 pm, it must be made on the same day. If payment is created after 4:30 pm, it must be made the next day<br>
|
||||
○ Responsible department: Accounts<br>
|
||||
○ Next step:<br>
|
||||
i. Change the status of the Issue Exchange Autocount Invoice operation to "In Progress"<br>
|
||||
ii. Change the status of the Order Placed in White Form operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: When the payment method is FPX or Wallet this task is performed automatically by the system.<br>
|
||||
○ Dependencies: Map Transaction operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The payment will be approved in exchange, allowing the next steps in the process to be initiated.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_3_DAY_TRANSFER_2',
|
||||
'on_task_completion' => 'TASK_3_DAY_TRANSFER_3',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_3_DAY_TRANSFER_3 = [
|
||||
'name' => 'Issue Exchange Autocount Invoince',
|
||||
'description' => '○ Purpose: To issue an invoice for the customer\'s payment in accounting software.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Next day<br>
|
||||
○ Responsible department: Accounts<br>
|
||||
○ Next step: Change the status of the Knockoff Invoice operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Approve Payment operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: An invoice will be issued in accounting software for the customer\'s payment.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_3_DAY_TRANSFER_3',
|
||||
'on_task_completion' => 'TASK_3_DAY_TRANSFER_4',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_3_DAY_TRANSFER_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.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Next day.<br>
|
||||
○ Responsible Department: Accounts<br>
|
||||
○ Next Step: None<br>
|
||||
○ Additional Details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Issue Exchange Autocount Invoice operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer\'s payment is applied to the accounting software invoice and invoice is marked as paid.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_3_DAY_TRANSFER_4',
|
||||
'on_task_completion' => 'TASK_3_DAY_TRANSFER_5',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_3_DAY_TRANSFER_5 = [
|
||||
'name' => 'Order Placed in White Form',
|
||||
'description' => '○ Purpose: To confirm that the order has been placed with the supplier.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: After 2 days<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Upload China Bank Slip operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Approve Payment operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The order is placed with a supplier and the customer\'s order is confirmed.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_3_DAY_TRANSFER_5',
|
||||
'on_task_completion' => 'TASK_3_DAY_TRANSFER_6',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_3_DAY_TRANSFER_6 = [
|
||||
'name' => 'Upload China Bank Slip',
|
||||
'description' => '○ Purpose: To confirm that the customer order has been transferred to the customer\'s supplier.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: After 3 days<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: None<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Order Placed in White Form operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer can download the payment transfer proof to send to their supplier.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_3_DAY_TRANSFER_6',
|
||||
'on_task_completion' => '',
|
||||
'status' => ''
|
||||
];
|
||||
|
||||
|
||||
public const TASK_1688_PAYMENT_1 = [
|
||||
'name' => 'Map Bank Transaction Record',
|
||||
'description' => '○ Purpose: To map a transaction to bank transaction in the bank statement<br>
|
||||
○ Initial Status: In Progress<br>
|
||||
○ Deadline: If payment is created before 4:30 pm, it must be made on the same day. If payment is created after 4:30 pm, it must be made the next day<br>
|
||||
○ Responsible department: Accounts<br>
|
||||
○ Next step: Change the status of the Approve payment status to "In Progress" upon successful completion of the operation.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: None<br>
|
||||
○ Outcomes: Bank transaction is mapped successfully, allowing the next<br>
|
||||
steps in the process to be initiated.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_1',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_2',
|
||||
'status' => PerfexCRMStatus::IN_PROGRESS
|
||||
];
|
||||
public const TASK_1688_PAYMENT_2 = [
|
||||
'name' => 'Approve Payment',
|
||||
'description' => '○ Purpose: To verify and approve the customer\'s payment on exchange<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline:If payment is created before 4:30 pm, it must be made on the same day. If payment is created after 4:30 pm, it must be made the next day<br>
|
||||
○ Responsible department: Accounts<br>
|
||||
○ Next step:<br>
|
||||
i. Change the status of the Issue Exchange Autocount Invoice operation to "In Progress"<br>
|
||||
ii. Change the status of the Order Placed in White Form operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: When the payment method is FPX or Wallet this task is performed automatically by the system.<br>
|
||||
○ Dependencies: Map Transaction operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The payment will be approved in exchange, allowing the next steps in the process to be initiated.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_2',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_3',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_3 = [
|
||||
'name' => 'Issue Exchange Autocount Invoice',
|
||||
'description' => '○ Purpose: To issue an invoice for the customer\'s payment in accounting software.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Next day<br>
|
||||
○ Responsible department: Accounts<br>
|
||||
○ Next step: Change the status of the Knockoff Invoice operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Approve Payment operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: An invoice will be issued in accounting software for the customer\'s payment.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_3',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_4',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_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.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Next day.<br>
|
||||
○ Responsible Department: Accounts<br>
|
||||
○ Next Step: None<br>
|
||||
○ Additional Details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Issue Exchange Autocount Invoice operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer\'s payment is applied to the accounting software invoice and invoice is marked as paid.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_4',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_5',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_5 = [
|
||||
'name' => 'Order Placed in White Form',
|
||||
'description' => '○ Purpose: To confirm that the order has been placed with the supplier.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same Day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Send White Form to Operation<br>
|
||||
Department operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Approve Payment operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The order is placed with a supplier and the customer\'s order is confirmed.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_5',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_6',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_6 = [
|
||||
'name' => 'Send White Form to Operation Department',
|
||||
'description' => '○ Purpose: To give confirmation to the operation department to process the order.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Upload China Bank Slip operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Order Placed in White Form operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer\'s order is confirmed and placed in a white form.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_6',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_7',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_7 = [
|
||||
'name' => 'Authorize Customer\'s 1688 Account',
|
||||
'description' => '○ Purpose: To authorize the alipay account to make payment to the customer\'s 1688 account.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Make Payment for Customer 1688<br>
|
||||
Order operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Send White Form to Operation Department operation<br>
|
||||
must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer\'s 1688 account is authorized to use the alipay account for making payments.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_7',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_8',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_8 = [
|
||||
'name' => 'Make Payment for Customer 1688 Order',
|
||||
'description' => '○ Purpose: To confirm that the order has been placed with the supplier.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Upload China Bank Slip operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Authorize Customer’s 1688 Account operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer’s 1688 order is paid.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_8',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_9',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_9 = [
|
||||
'name' => 'Upload China Bank Slip',
|
||||
'description' => '○ Purpose: To confirm that the customer order has been transferred to the customer\'s supplier.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: After 3 days<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: None<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Make Payment for Customer 1688 Order operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The customer can download the payment transfer proof to send to their supplier.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_9',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_10',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_10 = [
|
||||
'name' => 'Upload 1688 Purchase Order PDF',
|
||||
'description' => '○ Purpose: To store a copy of the original purchase order document for bookkeeping.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Upload China Bank Slip operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Make Payment for Customer 1688 Order operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The 1688 purchase order’s pdf is attached to the booking.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_10',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_11',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_11 = [
|
||||
'name' => 'Fill Up Purchase Order',
|
||||
'description' => '○ Purpose: To store the purchase order details to generate the invoice.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Approve Purchase Order operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Upload 1688 Purchase Order PDF operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The purchase order’s details are added to the booking.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_11',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_12',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_12 = [
|
||||
'name' => 'Approve Purchase Order',
|
||||
'description' => '○ Purpose: To check that the customer submitted a purchase order that complies with our company’s guidelines.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: Change the status of Complete Order bookkeeping operation to "In Progress" upon successful completion.<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Fill Up Purchase Order operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The purchase order submitted is approved.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_12',
|
||||
'on_task_completion' => 'TASK_1688_PAYMENT_13',
|
||||
'status' => ''
|
||||
];
|
||||
public const TASK_1688_PAYMENT_13 = [
|
||||
'name' => 'Complete Order bookeeping',
|
||||
'description' => '○ Purpose: To complete the bookkeeping for the booking.<br>
|
||||
○ Initial Status: Not Started<br>
|
||||
○ Deadline: Same day<br>
|
||||
○ Responsible department: Operations<br>
|
||||
○ Next step: None<br>
|
||||
○ Additional details: ** Any specific requirements or notes for the operation.**<br>
|
||||
○ Dependencies: Approve Purchase Order and Upload China Bank Slip operation must be completed before this operation can begin.<br>
|
||||
○ Outcomes: The order is placed with a supplier and the customer’s order is confirmed.<br>',
|
||||
'milestone' => '',
|
||||
'reference' => 'TASK_1688_PAYMENT_13',
|
||||
'on_task_completion' => '',
|
||||
'status' => ''
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user