mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
133 lines
4.8 KiB
PHP
133 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
|
|
|
use App\Models\Transaction;
|
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoice;
|
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoicePayment;
|
|
use App\Classes\Modules\PerfexCRM\Services\ConvertsPerfexCRMLeadToCustomer;
|
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePerfexCRMObject;
|
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePaymentPerfexCRMObject;
|
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoiceSingleItemPerfexCRMObject;
|
|
use Carbon\Carbon;
|
|
|
|
class CreatePerfexCRMInvoiceProcessor
|
|
{
|
|
|
|
/** @var CreatesPerfexCRMInvoice */
|
|
private $createsPerfexCRMInvoice;
|
|
|
|
/** @var CreatesPerfexCRMInvoicePayment */
|
|
private $createsPerfexCRMInvoicePayment;
|
|
|
|
/** @var ConvertsPerfexCRMLeadToCustomer */
|
|
private $convertsPerfexCRMLeadToCustomer;
|
|
|
|
/**
|
|
* CreatePerfexCRMInvoiceProcessor constructor.
|
|
* @param CreatesPerfexCRMInvoice $createsPerfexCRMInvoice
|
|
*/
|
|
public function __construct(CreatesPerfexCRMInvoice $createsPerfexCRMInvoice,
|
|
CreatesPerfexCRMInvoicePayment $createsPerfexCRMInvoicePayment,
|
|
ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer)
|
|
{
|
|
$this->createsPerfexCRMInvoice = $createsPerfexCRMInvoice;
|
|
$this->createsPerfexCRMInvoicePayment = $createsPerfexCRMInvoicePayment;
|
|
$this->convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer;
|
|
}
|
|
|
|
/**
|
|
* @param Transaction $transaction
|
|
* @return null|object
|
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
|
*/
|
|
public function execute(Transaction $transaction) {
|
|
$clientId = "";
|
|
$number = $transaction->bill_no;
|
|
$prefix = "INV-";
|
|
|
|
//This will remove the prefix if prefix already exist in the string
|
|
if (substr($number, 0, strlen($prefix)) == $prefix) {
|
|
$number = substr($number, strlen($prefix));
|
|
}
|
|
|
|
$date = Carbon::parse($transaction->created_at)->format('Y-m-d');
|
|
$dueDate = Carbon::parse($transaction->created_at)->format('Y-m-d');
|
|
$currency = 1; //cief TODO: To look into Malaysia and Chinese currency
|
|
$subTotal = 0.00;
|
|
$total = 0.00;
|
|
|
|
$companyModule = $transaction->owner->owner->companyModule;
|
|
$billingStreet = "";
|
|
$addresses = $companyModule
|
|
->addresses()
|
|
->where('status', '=', \App\Classes\ValueObjects\Constants\ApprovalStatus::APPROVED)
|
|
->where('type', '=', \App\Classes\ValueObjects\Constants\AddressType::BILLING)->first();
|
|
|
|
$billingStreet = $billingStreet.$addresses->street_one;
|
|
$billingStreet = $billingStreet.$addresses->street_two.',';
|
|
$billingStreet = $billingStreet.$addresses->district()->first()->name.',';
|
|
$billingStreet = $billingStreet.$addresses->postcode;
|
|
$billingStreet = $billingStreet.$addresses->state()->first()->name.',';
|
|
$billingStreet = $billingStreet.$addresses->country()->first()->name;
|
|
|
|
$projectId = "";
|
|
$allowedPaymentModes = [];
|
|
$invoiceItems = [];
|
|
|
|
$employee = $companyModule->employees()->first();
|
|
$email = $employee->email;
|
|
|
|
$result = $this->convertsPerfexCRMLeadToCustomer->execute($email);
|
|
if(isset($result->payload)){
|
|
$clientId = $result->payload['client_id'];
|
|
}
|
|
|
|
//newitems
|
|
foreach ($transaction->transactionDetails as $key => $transaction_detail){
|
|
$order = $key + 1;
|
|
$description = $transaction_detail->name;
|
|
$quantity = $transaction_detail->quantity;
|
|
$unitPrice = $transaction_detail->price;
|
|
|
|
$subTotal = $transaction_detail->amount;
|
|
|
|
|
|
//string $description, string $longDescription, int $qty, int $rate, int $order, string $unit
|
|
$invoiceSingleItem = new InvoiceSingleItemPerfexCRMObject(
|
|
$description,
|
|
"",
|
|
$quantity,
|
|
$unitPrice,
|
|
$order,
|
|
""
|
|
);
|
|
array_push($invoiceItems, $invoiceSingleItem);
|
|
}
|
|
|
|
$total = $transaction->amount;
|
|
|
|
//This setting is similar to Setup > Leads > Sources, Setup > Leads > Statuses
|
|
//Can be found at Finance > Payment Modes
|
|
array_push($allowedPaymentModes, 1, 2);
|
|
$invoicePerfexCRMObject = new InvoicePerfexCRMObject(
|
|
$clientId,
|
|
$number,
|
|
$date,
|
|
$dueDate,
|
|
$currency,
|
|
$subTotal,
|
|
$total,
|
|
$billingStreet,
|
|
$projectId,
|
|
$allowedPaymentModes,
|
|
$invoiceItems
|
|
);
|
|
|
|
$result = $this->createsPerfexCRMInvoice->execute($invoicePerfexCRMObject);
|
|
|
|
return $result;
|
|
}
|
|
|
|
}
|