mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-09-01 19:04:08 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 128c8083c3 | |||
| d52131d9df |
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMInvoiceProcessor;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
|
||||||
|
class CreatePerfexCRMInvoice implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var Transaction $transaction*/
|
||||||
|
private $transaction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreatePerfexCRMInvoice constructor.
|
||||||
|
* @param Transaction $transaction
|
||||||
|
*/
|
||||||
|
public function __construct(Transaction $transaction)
|
||||||
|
{
|
||||||
|
$this->transaction = $transaction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
(App()->make(CreatePerfexCRMInvoiceProcessor::class))->execute($this->transaction);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,12 +4,12 @@ namespace App\Classes\Jobs;
|
|||||||
|
|
||||||
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMTaskProcessor;
|
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMTaskProcessor;
|
||||||
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMLead;
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMLead;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
|
|
||||||
|
|
||||||
class CreatePerfexCRMSingleTask implements ShouldQueue
|
class CreatePerfexCRMSingleTask implements ShouldQueue
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMInvoiceProcessor;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoicePayment;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMCustomer;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMInvoice;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMProject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMInvoice;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePaymentPerfexCRMObject;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMInvoiceStatus;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class UpdatePerfexCRMInvoice implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var UpdatePerfexCRMInvoiceObject */
|
||||||
|
private $updatePerfexCRMInvoiceObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreatePerfexCRMSingleTask constructor.
|
||||||
|
* @param UpdatePerfexCRMInvoiceObject $createTaskPerfexCRMObject
|
||||||
|
*/
|
||||||
|
public function __construct(UpdatePerfexCRMInvoiceObject $updatePerfexCRMInvoiceObject)
|
||||||
|
{
|
||||||
|
$this->updatePerfexCRMInvoiceObject = $updatePerfexCRMInvoiceObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
//get the client id
|
||||||
|
$customer = (App()->make(FetchesPerfexCRMCustomer::class))->execute($this->updatePerfexCRMInvoiceObject->getEmail());
|
||||||
|
$transaction = $this->updatePerfexCRMInvoiceObject->getTransaction();
|
||||||
|
|
||||||
|
//get the invoice id
|
||||||
|
$invoiceId = 0;
|
||||||
|
$invoiceStatus = 0;
|
||||||
|
$invoice = (App()->make(FetchesPerfexCRMInvoice::class))->execute($customer->userid,"INV-", $transaction->owner->bill_no);
|
||||||
|
|
||||||
|
if(is_null($invoice)){
|
||||||
|
$result = (App()->make(CreatePerfexCRMInvoiceProcessor::class))->execute($transaction->owner, $this->updatePerfexCRMInvoiceObject->getIsPaid());
|
||||||
|
$invoiceId = $result->payload['id'];
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$invoiceId = $invoice->id;
|
||||||
|
$invoiceStatus = $invoice->status;
|
||||||
|
|
||||||
|
//This only run when invoice already exist and the invoice does not have a PAID status
|
||||||
|
if($invoiceStatus != PerfexCRMInvoiceStatus::PAID){
|
||||||
|
//get project
|
||||||
|
$projectId = "";
|
||||||
|
if($transaction->owner instanceof Transaction){
|
||||||
|
$orderReference = $transaction->owner->owner->owner()->first()->reference;
|
||||||
|
$packingListReference = $transaction->owner->owner->reference;
|
||||||
|
$projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference;
|
||||||
|
$project = (App()->make(FetchesPerfexCRMProject::class))->execute($projectName, $customer->userid);
|
||||||
|
if(!is_null($project)){
|
||||||
|
$projectId = $project->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//update invoice
|
||||||
|
(App()->make(UpdatesPerfexCRMInvoice::class))->execute($invoice, $projectId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//create invoice payment
|
||||||
|
if($invoiceId != 0 && $invoiceStatus != PerfexCRMInvoiceStatus::PAID){
|
||||||
|
|
||||||
|
$date = Carbon::parse($transaction->created_at)->format('Y-m-d');
|
||||||
|
|
||||||
|
$invoicePaymentPerfexCRMObject = new InvoicePaymentPerfexCRMObject(
|
||||||
|
$invoiceId,
|
||||||
|
"$transaction->amount",
|
||||||
|
$date,
|
||||||
|
1,
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
);
|
||||||
|
(App()->make(CreatesPerfexCRMInvoicePayment::class))->execute($invoicePaymentPerfexCRMObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@ use App\Classes\General\Interfaces\DataTransferObject;
|
|||||||
|
|
||||||
class InvoicePerfexCRMObject implements DataTransferObject
|
class InvoicePerfexCRMObject implements DataTransferObject
|
||||||
{
|
{
|
||||||
/** @var int */
|
/** @var string */
|
||||||
private $clientId;
|
private $clientId;
|
||||||
|
|
||||||
/** @var string */
|
/** @var string */
|
||||||
@@ -56,9 +56,9 @@ class InvoicePerfexCRMObject implements DataTransferObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return int
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getClientId(): int
|
public function getClientId(): string
|
||||||
{
|
{
|
||||||
return $this->clientId;
|
return $this->clientId;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -14,7 +14,7 @@ class InvoiceSingleItemPerfexCRMObject implements DataTransferObject
|
|||||||
/** @var string */
|
/** @var string */
|
||||||
public $longDescription;
|
public $longDescription;
|
||||||
|
|
||||||
/** @var int */
|
/** @var float */
|
||||||
public $qty;
|
public $qty;
|
||||||
|
|
||||||
/** @var float */
|
/** @var float */
|
||||||
@@ -26,7 +26,7 @@ class InvoiceSingleItemPerfexCRMObject implements DataTransferObject
|
|||||||
/** @var string */
|
/** @var string */
|
||||||
public $unit;
|
public $unit;
|
||||||
|
|
||||||
public function __construct(string $description, string $longDescription, int $qty, float $rate, int $order, string $unit)
|
public function __construct(string $description, string $longDescription, float $qty, float $rate, int $order, string $unit)
|
||||||
{
|
{
|
||||||
$this->description = $description;
|
$this->description = $description;
|
||||||
$this->longDescription = $longDescription;
|
$this->longDescription = $longDescription;
|
||||||
@@ -53,9 +53,9 @@ class InvoiceSingleItemPerfexCRMObject implements DataTransferObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return int
|
* @return float
|
||||||
*/
|
*/
|
||||||
public function getQty(): int
|
public function getQty(): float
|
||||||
{
|
{
|
||||||
return $this->qty;
|
return $this->qty;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
|
||||||
|
class UpdatePerfexCRMInvoiceObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $email;
|
||||||
|
|
||||||
|
/** @var Transaction */
|
||||||
|
private $transaction;
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
|
private $isPaid;
|
||||||
|
|
||||||
|
public function __construct(string $email, Transaction $transaction, bool $isPaid)
|
||||||
|
{
|
||||||
|
$this->email = $email;
|
||||||
|
$this->transaction = $transaction;
|
||||||
|
$this->isPaid = $isPaid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getEmail(): string
|
||||||
|
{
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Transaction
|
||||||
|
*/
|
||||||
|
public function getTransaction(): Transaction
|
||||||
|
{
|
||||||
|
return $this->transaction;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getIsPaid(): bool
|
||||||
|
{
|
||||||
|
return $this->isPaid;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,13 +2,15 @@
|
|||||||
|
|
||||||
namespace App\Classes\Modules\PerfexCRM\Processors;
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||||
|
|
||||||
// use App\Classes\Modules\PerfexCRM\DataTransferObjects\ContactObject;
|
use App\Models\Transaction;
|
||||||
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoice;
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoice;
|
||||||
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoicePayment;
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoicePayment;
|
||||||
use App\Classes\Modules\PerfexCRM\Services\ConvertsPerfexCRMLeadToCustomer;
|
use App\Classes\Modules\PerfexCRM\Services\ConvertsPerfexCRMLeadToCustomer;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMProject;
|
||||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePerfexCRMObject;
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePerfexCRMObject;
|
||||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePaymentPerfexCRMObject;
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePaymentPerfexCRMObject;
|
||||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoiceSingleItemPerfexCRMObject;
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoiceSingleItemPerfexCRMObject;
|
||||||
|
use App\Models\PackingList;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
|
||||||
class CreatePerfexCRMInvoiceProcessor
|
class CreatePerfexCRMInvoiceProcessor
|
||||||
@@ -23,42 +25,52 @@ class CreatePerfexCRMInvoiceProcessor
|
|||||||
/** @var ConvertsPerfexCRMLeadToCustomer */
|
/** @var ConvertsPerfexCRMLeadToCustomer */
|
||||||
private $convertsPerfexCRMLeadToCustomer;
|
private $convertsPerfexCRMLeadToCustomer;
|
||||||
|
|
||||||
|
/** @var FetchesPerfexCRMProject */
|
||||||
|
private $fetchesPerfexCRMProject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreatePerfexCRMInvoiceProcessor constructor.
|
* CreatePerfexCRMInvoiceProcessor constructor.
|
||||||
* @param CreatesPerfexCRMInvoice $createsPerfexCRMInvoice
|
* @param CreatesPerfexCRMInvoice $createsPerfexCRMInvoice
|
||||||
*/
|
*/
|
||||||
public function __construct(CreatesPerfexCRMInvoice $createsPerfexCRMInvoice,
|
public function __construct(CreatesPerfexCRMInvoice $createsPerfexCRMInvoice,
|
||||||
CreatesPerfexCRMInvoicePayment $createsPerfexCRMInvoicePayment,
|
CreatesPerfexCRMInvoicePayment $createsPerfexCRMInvoicePayment,
|
||||||
ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer)
|
ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer,
|
||||||
|
FetchesPerfexCRMProject $fetchesPerfexCRMProject)
|
||||||
{
|
{
|
||||||
$this->createsPerfexCRMInvoice = $createsPerfexCRMInvoice;
|
$this->createsPerfexCRMInvoice = $createsPerfexCRMInvoice;
|
||||||
$this->createsPerfexCRMInvoicePayment = $createsPerfexCRMInvoicePayment;
|
$this->createsPerfexCRMInvoicePayment = $createsPerfexCRMInvoicePayment;
|
||||||
$this->convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer;
|
$this->convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer;
|
||||||
|
$this->fetchesPerfexCRMProject = $fetchesPerfexCRMProject;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $transaction
|
* @param Transaction $transaction
|
||||||
* @param $purchaseOrder
|
* @param bool $isPaid, default: false
|
||||||
* @param $supplier
|
|
||||||
* @return null|object
|
* @return null|object
|
||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
*/
|
*/
|
||||||
public function execute($transaction, $purchaseOrder, $supplier) {
|
public function execute(Transaction $transaction, bool $isPaid = false) {
|
||||||
$clientId = "";
|
$clientId = "";
|
||||||
$number = $transaction->bill_no;
|
$number = $transaction->bill_no;
|
||||||
$prefix = "INV-";
|
$prefix = "INV-";
|
||||||
|
|
||||||
|
//This will remove the prefix if prefix already exist in the string
|
||||||
if (substr($number, 0, strlen($prefix)) == $prefix) {
|
if (substr($number, 0, strlen($prefix)) == $prefix) {
|
||||||
$number = substr($number, strlen($prefix));
|
$number = substr($number, strlen($prefix));
|
||||||
}
|
}
|
||||||
|
|
||||||
$date = Carbon::parse($transaction->booking->created_at)->format('Y-m-d');
|
$date = Carbon::parse($transaction->created_at)->format('Y-m-d');
|
||||||
$dueDate = Carbon::parse($transaction->booking->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
|
$currency = 1; //cief TODO: To look into Malaysia and Chinese currency
|
||||||
$subTotal = 0.00;
|
$subTotal = 0.00;
|
||||||
$total = 0.00;
|
$total = 0.00;
|
||||||
|
|
||||||
|
$companyModule = $transaction->owner->owner->companyModule;
|
||||||
$billingStreet = "";
|
$billingStreet = "";
|
||||||
$addresses = $supplier->addresses()->where('billing', '=', true)->first();
|
$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_one;
|
||||||
$billingStreet = $billingStreet.$addresses->street_two.',';
|
$billingStreet = $billingStreet.$addresses->street_two.',';
|
||||||
@@ -67,40 +79,40 @@ class CreatePerfexCRMInvoiceProcessor
|
|||||||
$billingStreet = $billingStreet.$addresses->state()->first()->name.',';
|
$billingStreet = $billingStreet.$addresses->state()->first()->name.',';
|
||||||
$billingStreet = $billingStreet.$addresses->country()->first()->name;
|
$billingStreet = $billingStreet.$addresses->country()->first()->name;
|
||||||
|
|
||||||
$projectId = "";
|
|
||||||
$allowedPaymentModes = [];
|
$allowedPaymentModes = [];
|
||||||
$invoiceItems = [];
|
$invoiceItems = [];
|
||||||
|
|
||||||
$email = $supplier->employees()->first()->email;
|
$employee = $companyModule->employees()->first();
|
||||||
$email = 'dillon37@yahoo.com'; //cief TODO: To be updated to user actual email address
|
$email = $employee->email;
|
||||||
|
|
||||||
$result = $this->convertsPerfexCRMLeadToCustomer->execute($email);
|
$result = $this->convertsPerfexCRMLeadToCustomer->execute($email);
|
||||||
if(isset($result->payload)){
|
if(isset($result->payload)){
|
||||||
$clientId = $result->payload['client_id'];
|
$clientId = $result->payload['client_id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//get project
|
||||||
|
$projectId = ""; //Project only exist in CRM if the customer already made payment
|
||||||
|
if($isPaid){
|
||||||
|
if($transaction->owner instanceof PackingList){
|
||||||
|
$orderReference = $transaction->owner->owner->reference;
|
||||||
|
$packingListReference = $transaction->owner->reference;
|
||||||
|
$projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference;
|
||||||
|
$project = (App()->make(FetchesPerfexCRMProject::class))->execute($projectName, $clientId);
|
||||||
|
if(!is_null($project)){
|
||||||
|
$projectId = $project->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//newitems
|
//newitems
|
||||||
foreach ($purchaseOrder->transactionDetails as $key => $transaction_detail){
|
foreach ($transaction->transactionDetails as $key => $transaction_detail){
|
||||||
$order = $key + 1;
|
$order = $key + 1;
|
||||||
$stockCode = $transaction_detail->product_code;
|
$description = $transaction_detail->name;
|
||||||
$description = $transaction_detail->product_name;
|
|
||||||
$quantity = $transaction_detail->quantity;
|
$quantity = $transaction_detail->quantity;
|
||||||
$unitPrice = 0.00;
|
$unitPrice = $transaction_detail->price;
|
||||||
if($transaction->booking()->first()->fix_currency_id !== 1)
|
|
||||||
$unitPrice = (1/$transaction->currency_rate) * $transaction_detail->price;
|
|
||||||
else
|
|
||||||
$unitPrice = $transaction_detail->price;
|
|
||||||
|
|
||||||
//$totalAmount = 0.00;
|
$subTotal = $transaction_detail->amount;
|
||||||
if($transaction->booking()->first()->fix_currency_id !== 1){
|
|
||||||
|
|
||||||
//$totalAmount = (float)number_format( (1/$transaction->currency_rate) * $transaction_detail->price, 2,'.','')*$transaction_detail->quantity;
|
|
||||||
$subTotal += (1/$transaction->currency_rate) * $transaction_detail->price * $transaction_detail->quantity;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//$totalAmount = (float)number_format($transaction_detail->price, 2,'.','')*$transaction_detail->quantity;
|
|
||||||
$subTotal += $transaction_detail->price * $transaction_detail->quantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
//string $description, string $longDescription, int $qty, int $rate, int $order, string $unit
|
//string $description, string $longDescription, int $qty, int $rate, int $order, string $unit
|
||||||
$invoiceSingleItem = new InvoiceSingleItemPerfexCRMObject(
|
$invoiceSingleItem = new InvoiceSingleItemPerfexCRMObject(
|
||||||
@@ -114,16 +126,11 @@ class CreatePerfexCRMInvoiceProcessor
|
|||||||
array_push($invoiceItems, $invoiceSingleItem);
|
array_push($invoiceItems, $invoiceSingleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($transaction->booking()->first()->fix_currency_id !== 1){
|
$total = $transaction->amount;
|
||||||
$total = ((1/$transaction->currency_rate) * $transaction->amount) + $transaction->service_charge + $transaction->tax;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$total = $transaction->amount + $transaction->service_charge + $transaction->tax;
|
|
||||||
}
|
|
||||||
|
|
||||||
//cief TODO: To be updated, temporarily hardcoded allow payment modes
|
//This setting is similar to Setup > Leads > Sources, Setup > Leads > Statuses
|
||||||
|
//Can be found at Finance > Payment Modes
|
||||||
array_push($allowedPaymentModes, 1, 2);
|
array_push($allowedPaymentModes, 1, 2);
|
||||||
|
|
||||||
$invoicePerfexCRMObject = new InvoicePerfexCRMObject(
|
$invoicePerfexCRMObject = new InvoicePerfexCRMObject(
|
||||||
$clientId,
|
$clientId,
|
||||||
$number,
|
$number,
|
||||||
@@ -140,20 +147,7 @@ class CreatePerfexCRMInvoiceProcessor
|
|||||||
|
|
||||||
$result = $this->createsPerfexCRMInvoice->execute($invoicePerfexCRMObject);
|
$result = $this->createsPerfexCRMInvoice->execute($invoicePerfexCRMObject);
|
||||||
|
|
||||||
//If there is a checking whether an payment to an invoice need to be generated, do it here
|
return $result;
|
||||||
if(true && $result->payload['id']){
|
|
||||||
$invoicePaymentPerfexCRMObject = new InvoicePaymentPerfexCRMObject(
|
|
||||||
$result->payload['id'],
|
|
||||||
$total,
|
|
||||||
$date,
|
|
||||||
1,
|
|
||||||
"",
|
|
||||||
""
|
|
||||||
);
|
|
||||||
$this->createsPerfexCRMInvoicePayment->execute($invoicePaymentPerfexCRMObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,13 +8,15 @@ use App\Classes\Modules\PerfexCRM\Services\Init;
|
|||||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
||||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InitialPerfexCRMObject;
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InitialPerfexCRMObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject;
|
||||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||||
use App\Classes\ValueObjects\Constants\PerfexCRMMilestones;
|
use App\Classes\ValueObjects\Constants\PerfexCRMMilestones;
|
||||||
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
|
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
|
||||||
use App\Models\Transaction;
|
|
||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Classes\Jobs\InitializePerfexCRM;
|
use App\Classes\Jobs\InitializePerfexCRM;
|
||||||
|
use App\Classes\Jobs\UpdatePerfexCRMInvoice;
|
||||||
use App\Classes\Jobs\UpdatePerfexCRM;
|
use App\Classes\Jobs\UpdatePerfexCRM;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
|
||||||
class TransactionToPerfexCRMProcessor
|
class TransactionToPerfexCRMProcessor
|
||||||
{
|
{
|
||||||
@@ -83,7 +85,15 @@ class TransactionToPerfexCRMProcessor
|
|||||||
|
|
||||||
//$this->initializePerfexCRMProcessor->execute($initialPerfexCRMObject);
|
//$this->initializePerfexCRMProcessor->execute($initialPerfexCRMObject);
|
||||||
InitializePerfexCRM::dispatch($initialPerfexCRMObject);
|
InitializePerfexCRM::dispatch($initialPerfexCRMObject);
|
||||||
|
|
||||||
|
$updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject(
|
||||||
|
$contactEmail,
|
||||||
|
$model,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
UpdatePerfexCRMInvoice::dispatch($updatePerfexCRMInvoiceOject);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ class CreatesPerfexCRMInvoice
|
|||||||
'date' => $invoicePerfexCRMObject->getDate(),
|
'date' => $invoicePerfexCRMObject->getDate(),
|
||||||
'duedate' => $invoicePerfexCRMObject->getDueDate(),
|
'duedate' => $invoicePerfexCRMObject->getDueDate(),
|
||||||
'currency' => $invoicePerfexCRMObject->getCurrency(),
|
'currency' => $invoicePerfexCRMObject->getCurrency(),
|
||||||
'subtotal' => $invoicePerfexCRMObject->getSubTotal(),
|
'subtotal' => number_format($invoicePerfexCRMObject->getSubTotal(), 2, '.', ''),
|
||||||
'total' => $invoicePerfexCRMObject->getTotal(),
|
'total' => number_format($invoicePerfexCRMObject->getTotal(), 2, '.', ''),
|
||||||
'billing_street' => $invoicePerfexCRMObject->getBillingStreet(),
|
'billing_street' => $invoicePerfexCRMObject->getBillingStreet(),
|
||||||
'project_id' => $invoicePerfexCRMObject->getProjectId(),
|
'project_id' => $invoicePerfexCRMObject->getProjectId(),
|
||||||
'allowed_payment_modes[0]' => 1,
|
'allowed_payment_modes[0]' => 1,
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreatesPerfexCRMInvoicePayment
|
|||||||
try{
|
try{
|
||||||
$data = [
|
$data = [
|
||||||
'invoiceid' => $invoicePaymentPerfexCRMObject->getInvoiceId(),
|
'invoiceid' => $invoicePaymentPerfexCRMObject->getInvoiceId(),
|
||||||
'amount' => $invoicePaymentPerfexCRMObject->getAmount(),
|
'amount' => number_format($invoicePaymentPerfexCRMObject->getAmount(), 2, '.', ''),
|
||||||
'date' => $invoicePaymentPerfexCRMObject->getDate(),
|
'date' => $invoicePaymentPerfexCRMObject->getDate(),
|
||||||
'paymentmode' => $invoicePaymentPerfexCRMObject->getPaymentMode(),
|
'paymentmode' => $invoicePaymentPerfexCRMObject->getPaymentMode(),
|
||||||
'transactionid' => $invoicePaymentPerfexCRMObject->getTransactionId(),
|
'transactionid' => $invoicePaymentPerfexCRMObject->getTransactionId(),
|
||||||
|
|||||||
@@ -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 FetchesPerfexCRMCustomer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @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/customers/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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Services;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class FetchesPerfexCRMInvoice
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $clientId
|
||||||
|
* @param string $invoicePrefix
|
||||||
|
* @param string $invoiceNumber
|
||||||
|
* @return null|object
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(string $clientId, string $invoicePrefix, string $invoiceNumber) {
|
||||||
|
try{
|
||||||
|
$response = Http::withHeaders([
|
||||||
|
'authtoken' => config('perfexcrm.api_key'),])
|
||||||
|
->get(config('perfexcrm.base_url').'/api/invoices/customsearch/'.$clientId.'/'.$invoicePrefix.'/'.$invoiceNumber);
|
||||||
|
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Services;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class UpdatesPerfexCRMInvoice
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $invoice
|
||||||
|
* @param string $projectId
|
||||||
|
* @return null|object
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute($invoice, string $projectId) {
|
||||||
|
try{
|
||||||
|
// <p>The Invoice number field is required.<\/p>
|
||||||
|
// <p>The Invoice date field is required.<\/p>
|
||||||
|
// <p>The Currency field is required.<\/p>
|
||||||
|
// <p>The Items field is required.<\/p>
|
||||||
|
// <p>The Allow Payment Mode field is required.<\/p>
|
||||||
|
// <p>The Billing Street field is required.<\/p>
|
||||||
|
// <p>The Sub Total field is required.<\/p>
|
||||||
|
// <p>The Total field is required.<\/p>
|
||||||
|
|
||||||
|
$newInvoiceItems = [];
|
||||||
|
foreach ($invoice->items as $item) {
|
||||||
|
$item['itemid'] = $item['id'];
|
||||||
|
unset($item['id']);
|
||||||
|
$item['order'] = $item['item_order'];
|
||||||
|
unset($item['item_order']);
|
||||||
|
array_push($newInvoiceItems,$item);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'number' => $invoice->number,
|
||||||
|
'date' => $invoice->date,
|
||||||
|
'duedate' => $invoice->date,
|
||||||
|
'currency' => $invoice->currency,
|
||||||
|
'subtotal' => $invoice->subtotal,
|
||||||
|
'total' => $invoice->total,
|
||||||
|
'billing_street' => $invoice->billing_street,
|
||||||
|
'shipping_street' => $invoice->billing_street,
|
||||||
|
'project_id' => $projectId,
|
||||||
|
'items' => $newInvoiceItems,
|
||||||
|
'allowed_payment_modes' => $invoice->allowed_payment_modes,
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = Http::asJson()->withHeaders([
|
||||||
|
'authtoken' => config('perfexcrm.api_key')])
|
||||||
|
->put(config('perfexcrm.base_url').'/api/invoices/'.$invoice->id, $data);
|
||||||
|
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
@@ -16,6 +16,7 @@ use App\Classes\Modules\Documents\Services\CreatesFiles;
|
|||||||
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
use App\Classes\Modules\Documents\Services\CreatesDocument;
|
||||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||||
|
use App\Classes\Jobs\CreatePerfexCRMInvoice;
|
||||||
|
|
||||||
class ApproveShippingInvoiceTransactionProcessor
|
class ApproveShippingInvoiceTransactionProcessor
|
||||||
{
|
{
|
||||||
@@ -29,6 +30,7 @@ class ApproveShippingInvoiceTransactionProcessor
|
|||||||
/** @var CreatesFiles */
|
/** @var CreatesFiles */
|
||||||
private $createsFiles;
|
private $createsFiles;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||||
* @param CreatesDocument $createsDocument
|
* @param CreatesDocument $createsDocument
|
||||||
@@ -72,6 +74,12 @@ class ApproveShippingInvoiceTransactionProcessor
|
|||||||
if(app()->environment(['production'])) {
|
if(app()->environment(['production'])) {
|
||||||
$user->notify(new InvoiceIssuedEmail($user, $packingList));
|
$user->notify(new InvoiceIssuedEmail($user, $packingList));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update perfex crm
|
||||||
|
if(config('perfexcrm.is_enabled') == 'true'){
|
||||||
|
CreatePerfexCRMInvoice::dispatch($invoice_transaction);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\ValueObjects\Constants;
|
||||||
|
|
||||||
|
final class PerfexCRMInvoiceStatus {
|
||||||
|
|
||||||
|
public const UNPAID = 1;
|
||||||
|
|
||||||
|
public const PAID = 2;
|
||||||
|
|
||||||
|
public const PARTIALLY_PAID = 3;
|
||||||
|
|
||||||
|
public const OVERDUE = 4;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user