Files
exchange-2.0/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php
T
2023-02-17 06:28:59 +08:00

145 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)
{
$proceed = false;
if($model->owner instanceof \App\Models\Booking){
//For owner_type > App\Models\Booking
$companyReference = $model->owner->company->reference;
$companyName = $model->owner->company->name;
$employee = $model->owner->company->employees()->first();
$contactEmail = $employee->email;
$contactName = $employee->name;
$proceed = true;
}
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;
}
$bookingMarking = $model->owner->marking;
if($proceed && $model->owner instanceof \App\Models\Booking && $model->payment_reference != null && $status == ApprovalStatus::APPROVED){
$initialPerfexCRMObject = new InitialPerfexCRMObject(
$companyName,
$companyReference,
$contactName,
$contactEmail,
$bookingMarking,
$companyReference.'-'.$bookingMarking,
[],
[
PerfexCRMTasks::TASK_1,
]
);
//$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;
}
}