ldc-gen-game-web/app/Http/Controllers/Fo/DiscountController.php

95 lines
2.6 KiB
PHP
Raw Normal View History

2025-10-27 16:23:02 +01:00
<?php
2026-10-02 12:09:46 +02:00
declare(strict_types=1);
2025-10-27 16:23:02 +01:00
namespace App\Http\Controllers\Fo;
use App\Http\Controllers\Controller;
use App\Models\Customer;
2026-10-02 12:09:46 +02:00
use Illuminate\Http\RedirectResponse;
2025-10-27 16:23:02 +01:00
use Illuminate\Support\Arr;
2026-10-02 12:09:46 +02:00
use LDC\MESBR\MesBr;
use RuntimeException;
2025-10-27 16:23:02 +01:00
class DiscountController extends Controller
{
/**
* Fetch PDF BR.
*/
2026-10-02 12:09:46 +02:00
public function fetchBrPdf(): RedirectResponse
2025-10-27 16:23:02 +01:00
{
2026-10-02 12:09:46 +02:00
/** @var Customer $customer */
2025-10-27 16:23:02 +01:00
$customer = auth('frontend')->user();
$pdf = $this->fetchBrPdfFromMesBr($customer);
if ($pdf === null) {
\back()->withErrors([
2026-10-02 12:09:46 +02:00
'coupon' => trans('front.messages.pdf_download_error'),
2025-10-27 16:23:02 +01:00
])->throwResponse();
}
2025-11-05 19:12:03 +01:00
return redirect()->to(
sprintf(
2026-10-02 12:09:46 +02:00
'%s/basket/%s/print',
2025-11-05 19:12:03 +01:00
config('mesbr.endpoint'),
$pdf
)
);
2025-10-27 16:23:02 +01:00
}
/**
* Fetch coupons PDF.
*
* @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh
*/
private function fetchBrPdfFromMesBr(Customer $customer): ?string
{
// phpcs:enable
// * Phase - 1 Recupération des informations CRM
2026-10-02 12:09:46 +02:00
/** @var Customer $customer */
2025-10-27 16:23:02 +01:00
$customer = auth('frontend')->user();
/** @var \LDC\LDCCRM\Models\Customer $crmCustomer */
$crmCustomer = $customer->api_data;
try {
2026-10-02 12:09:46 +02:00
/** @var MesBr */
$mesBr = resolve('mesBrAPI');
2025-11-05 19:12:03 +01:00
$result = $mesBr->getBasket($crmCustomer);
2025-10-27 16:23:02 +01:00
$result = \is_object($result) ? (array) $result : $result;
2026-10-02 12:09:46 +02:00
if (Arr::get($result, 'status') !== 'OK') {
report(new RuntimeException(
2025-10-27 16:23:02 +01:00
\sprintf(
'MESBR : Une erreur est survenue. Code : %s Message : %s',
2026-10-02 12:09:46 +02:00
Arr::get($result, 'code') ?? 'Undefined',
2025-10-27 16:23:02 +01:00
Arr::get($result, 'message') ?? 'Undefined',
)
));
2026-10-02 12:09:46 +02:00
2025-10-27 16:23:02 +01:00
return null;
}
// * La réponse est conforme ?
2025-11-05 19:12:03 +01:00
$needed_fields = ['uuid'];
2026-10-02 12:09:46 +02:00
if (! Arr::has($result, $needed_fields)) {
report(new RuntimeException(sprintf(
2025-10-27 16:23:02 +01:00
'MESBR : Il manques des champs dans la réponse, attendu => %s, donné => %s',
json_encode($needed_fields),
json_encode($result),
)));
2026-10-02 12:09:46 +02:00
2025-10-27 16:23:02 +01:00
return null;
}
// * Tout est OK
2025-11-05 19:12:03 +01:00
return Arr::get($result, 'uuid') ?: null;
2026-10-02 12:09:46 +02:00
} catch (RuntimeException $e) {
2025-10-27 16:23:02 +01:00
report($e);
2026-10-02 12:09:46 +02:00
2025-10-27 16:23:02 +01:00
// * Retenter ?
return null;
2026-10-02 12:09:46 +02:00
} // end try
2025-10-27 16:23:02 +01:00
}
}