Files
exchange-2.0/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php
T
2023-01-03 15:41:30 +08:00

141 lines
5.6 KiB
PHP

<?php
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
{
/** @var FetchesCompany */
private $fetchesCompany;
/** @var UpdatePerfexCRMProcessor */
private $updatePerfexCRMProcessor;
/** @var InitializePerfexCRMProcessor */
private $initializePerfexCRMProcessor;
/**
* TransactionToPerfexCRMProcessor constructor.
* @param UpdatePerfexCRMProcessor $updatePerfexCRMProcessor
* @param InitializePerfexCRMProcessor $initializePerfexCRMProcessor
* @param FetchesCompany $fetchesCompany
*/
public function __construct(UpdatePerfexCRMProcessor $updatePerfexCRMProcessor, InitializePerfexCRMProcessor $initializePerfexCRMProcessor, FetchesCompany $fetchesCompany)
{
$this->updatePerfexCRMProcessor = $updatePerfexCRMProcessor;
$this->initializePerfexCRMProcessor = $initializePerfexCRMProcessor;
$this->fetchesCompany = $fetchesCompany;
}
/**
* @param Transaction $model
* @param int $status
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Transaction $model, int $status)
{
$companyName = "dillon36"; //cief TODO: To be updated by removing this line to user actual company name
if(!is_null($model->owner->company)){
//For owner_type > App\Models\Booking
$companyReference = $model->owner->company->reference;
}
else{
//For owner_type > App\Models\Wallet
$companyReference = $model->owner->owner->reference;
$company = $this->fetchesCompany->execute(['id' => $model->owner->owner->id]);
$email = $company->employees()->first()->email;
}
$contactEmail = "dillon36@yahoo.com"; //cief TODO: To be updated to user actual email address
$bookingMarking = $model->owner->marking;
if($model->owner instanceof \App\Models\Booking && $model->payment_reference != null && $status == ApprovalStatus::APPROVED){
$initialPerfexCRMObject = new InitialPerfexCRMObject(
$companyName,
$companyReference,
$contactEmail,
$bookingMarking,
$companyReference.'-'.$bookingMarking,
[],
[
PerfexCRMTasks::TASK_1,
PerfexCRMTasks::TASK_2,
PerfexCRMTasks::TASK_3,
PerfexCRMTasks::TASK_4,
PerfexCRMTasks::TASK_5,
PerfexCRMTasks::TASK_6,
PerfexCRMTasks::TASK_7,
PerfexCRMTasks::TASK_8,
PerfexCRMTasks::TASK_9,
PerfexCRMTasks::TASK_10,
]
);
//$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;
}
}