Files
shipping-portal/app/Classes/Modules/Orders/ControllersLogic/CreateSupplierTaxRebateLogic.php
T
2024-11-26 19:05:01 +08:00

85 lines
2.6 KiB
PHP

<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\ChecksIfOrderNumberExists;
use App\Classes\Modules\Orders\Services\RestoresOrder;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\OrderResource;
use App\Models\Order;
use App\Models\SupplierTaxRebate;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class CreateSupplierTaxRebateLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Create Supplier Tax Refund',
'message' => 'You have successfully created a Supplier Tax Refund'
];
}
/** @var RestoresOrder */
private $restoresOrder;
/** @var FetchesOrder */
private $fetchesOrder;
/** @var ChecksIfOrderNumberExists */
private $checkIfOrderNumberExists;
/**
* CancelOrderLogic constructor.
* @param RestoresOrder $restoresOrder
* @param FetchesOrder $fetchesOrder
*/
public function __construct(RestoresOrder $restoresOrder, FetchesOrder $fetchesOrder, ChecksIfOrderNumberExists $checkIfOrderNumberExists)
{
$this->restoresOrder = $restoresOrder;
$this->fetchesOrder = $fetchesOrder;
$this->checkIfOrderNumberExists = $checkIfOrderNumberExists;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request): JsonResponse
{
/** @var Order $order */
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
$taxRebate = SupplierTaxRebate::create([
'order_id' => $order->id,
'supplier_name' => $request->input('supplier_name'),
'supplier_contact_number' => $request->input('supplier_contact_number'),
'reference_number' => $this->generateUniqueReferenceNumber(),
]);
return $this->resourceResponse(new OrderResource($order));
}
public function generateUniqueReferenceNumber(?string $prefix = '', ?int $length = 9): string
{
// regenerate new reference number until a new unique reference is found
do {
$reference = $prefix . rand((int)('1' . str_repeat('0', $length - 2) . '1'), (int) str_repeat('9', $length));
} while (
SupplierTaxRebate::where('reference_number', $reference)->exists() || $this->checkIfOrderNumberExists->execute($reference)
);
return $reference;
}
}