Files
exchange-2.0/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierBillGroupLogic.php
T
JiaSheng b6162f5355 update
2023-12-23 16:29:06 +08:00

135 lines
4.7 KiB
PHP

<?php
namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\Modules\Transactions\Processors\CreateSupplierTransactionProcessor;
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
use App\Models\Document;
use App\Models\Group;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\Modules\Documents\Services\CreatesFiles;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\BillGroup;
class CreateSupplierBillGroupLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Create Supplier White Form Order',
'message' => 'You have successfully created currency supplier white form order'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var CreatesTransaction */
private $createsTransaction;
/** @var CreatesDocument */
private $createsDocument;
/** @var CreatesFiles */
private $createsFile;
/** @var GeneratesTransactionBillNumber */
private $generatesTransactionBillNumber;
/** @var UpdateGroupLogic */
private $updateGroupLogic;
/**
* CreateSupplierBillGroupLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param CreatesTransaction $createsTransaction
* @param CreatesDocument $createsDocument
* @param CreatesFiles $createsFile
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
* @param UpdateGroupLogic $updateGroupLogic
*/
public function __construct(FetchesCompany $fetchesCompany, CreatesTransaction $createsTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesTransactionBillNumber $generatesTransactionBillNumber, UpdateGroupLogic $updateGroupLogic)
{
$this->fetchesCompany = $fetchesCompany;
$this->createsTransaction = $createsTransaction;
$this->createsDocument = $createsDocument;
$this->createsFile = $createsFile;
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
$this->updateGroupLogic = $updateGroupLogic;
}
public function logic(Request $request) : JsonResponse
{
$supplier = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$payments = $request->input('payments');
$amount = 0;
$original_amount = 0;
foreach ($payments as $payment) {
$amount += round($payment['amount'], 2);
$original_amount += round($payment['original_amount'], 2);
}
$service_charges = 0;
if ($supplier->id === 4548 || $supplier->id === 2729) {
$amount = round(floatval(str_replace(',', '', $request->input('payment_total'))), 2);
} else {
$service_charges = round(floatval(str_replace(',', '', $request->input('service_charges'))), 2);
}
$rate = $original_amount / $amount;
if ($supplier->id === 4548 || $supplier->id === 2729) {
$request['rate'] = $rate;
$request['supplier_id'] = $supplier->id;
foreach ($payments as $payment) {
$request->route()->setParameter('id', $payment['id']);
$this->updateGroupLogic->execute($request);
}
}
$billGroup = new BillGroup();
$billGroup->issuer = $supplier->id;
$billGroup->receiver = 1;
$billGroup->reference = $this->generatesTransactionBillNumber->execute('BSPO-');
$billGroup->amount = $amount;
$billGroup->original_amount = $original_amount;
$billGroup->currency_id = 1;
$billGroup->original_currency_id = $payments[0]['original_currency']['id'];
$billGroup->currency_rate = $rate;
$billGroup->tax = 0;
$billGroup->service_charge = $service_charges;
$billGroup->status = ApprovalStatus::PENDING_SUBMISSION;
$billGroup->save();
foreach ($payments as $payment) {
$billGroup->groups()->sync($payment['id'], false);
}
return $this->response([]);
}
}