86 lines
2.9 KiB
PHP
86 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V2;
|
|
|
|
use App\Enums\ApiError;
|
|
use App\Enums\ArcadiaMailType;
|
|
use App\Enums\ArcadiaOrderType;
|
|
use App\Exceptions\Api\V2\ApiErrorException;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Api\V2\SendArchadiaMailRequest;
|
|
use App\Mail\CourrierArcadiaError;
|
|
use App\Models\Customer;
|
|
use App\Models\CustomerInfo;
|
|
use App\Models\Service;
|
|
use DOMDocument;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Mail;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class ArcadiaController extends Controller
|
|
{
|
|
public function outgoingMail(SendArchadiaMailRequest $request, Customer $customer, Service $service)
|
|
{
|
|
$xml = 'none';
|
|
try {
|
|
/** @var \App\Models\CustomerInfo $customerInfo */
|
|
$customerInfo = $customer->info($service->brand)->firstOrFail();
|
|
$type = ArcadiaMailType::make(intval($request->type));
|
|
$orderType = ArcadiaOrderType::make(intval($request->state_order));
|
|
$xml = $this->makeXml($request, $type, $orderType, $customer, $customerInfo);
|
|
|
|
// Format xml
|
|
$doc = new DOMDocument('1.0', 'utf-8');
|
|
$doc->preserveWhiteSpace = true;
|
|
$doc->formatOutput = true;
|
|
$doc->loadXML($xml);
|
|
$xml = $doc->saveXML();
|
|
|
|
Storage::disk('arcadia')->put(date("Ymd_His") . ".xml", $xml);
|
|
return response()->json();
|
|
} catch (\Exception $e) {
|
|
Log::critical("ARCADIA XML CREATION FAILED : " . $e->getMessage());
|
|
if (!config('app.debug')) {
|
|
dispatch(function () use ($xml, $e) {
|
|
Mail::to(config('mail.MAIL_ADMIN'))->send(new CourrierArcadiaError(
|
|
"ARCADIA XML CREATION FAILED",
|
|
"Une erreur est survenue lors de la création du fichier XML : " . $e->getMessage(),
|
|
$xml
|
|
));
|
|
})->afterResponse();
|
|
} else {
|
|
throw $e;
|
|
}
|
|
throw new ApiErrorException(ApiError::arcardiaXmlMailFailed());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* render Arcadia xml for order
|
|
*
|
|
* @param SendArchadiaMailRequest $request
|
|
* @param ArcadiaMailType $type
|
|
* @param ArcadiaOrderType $orderType
|
|
* @param Customer $customer
|
|
* @param CustomerInfo $customerInfo
|
|
* @return string
|
|
*/
|
|
private function makeXml(
|
|
SendArchadiaMailRequest $request,
|
|
ArcadiaMailType $type,
|
|
ArcadiaOrderType $orderType,
|
|
Customer $customer,
|
|
CustomerInfo $customerInfo
|
|
): string {
|
|
return view(
|
|
'mail.arcadiaOrders.default',
|
|
[
|
|
'request' => $request,
|
|
'type' => $type,
|
|
'orderType' => $orderType,
|
|
'customer' => $customer,
|
|
'customerInfo' => $customerInfo
|
|
]
|
|
)->render();
|
|
}
|
|
}
|