2021-03-14 10:45:42 +01:00
|
|
|
<?php
|
|
|
|
|
|
2021-07-28 14:18:47 +02:00
|
|
|
namespace App\Http\Controllers\Api\V2;
|
2021-03-14 10:45:42 +01:00
|
|
|
|
|
|
|
|
use App\Enums\ArcadiaMailType;
|
|
|
|
|
use App\Enums\ArcadiaOrderType;
|
|
|
|
|
use App\Http\Controllers\Controller;
|
2021-08-06 15:57:48 +02:00
|
|
|
use App\Http\Requests\Api\V2\BaseApiRequest;
|
|
|
|
|
use App\Http\Requests\Api\V2\SendArchadiaDefaultMailRequest;
|
|
|
|
|
use App\Http\Requests\Api\V2\SendArchadiaGameMailRequest;
|
2021-03-14 10:45:42 +01:00
|
|
|
use App\Mail\CourrierArcadiaError;
|
|
|
|
|
use DOMDocument;
|
2021-12-19 15:57:24 +01:00
|
|
|
use Illuminate\Http\JsonResponse;
|
2021-03-14 10:45:42 +01:00
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
|
use Illuminate\Support\Facades\Storage;
|
2021-10-19 17:15:34 +02:00
|
|
|
use Illuminate\Support\Str;
|
2021-03-14 10:45:42 +01:00
|
|
|
|
2021-08-06 15:57:48 +02:00
|
|
|
/**
|
2021-12-19 15:57:24 +01:00
|
|
|
* ! Ici c'est du sale à cause d'arcadia
|
2021-08-06 15:57:48 +02:00
|
|
|
* Ils ont fait le choix de rajouter une fonctionnalité
|
2021-12-19 15:57:24 +01:00
|
|
|
* sur une methode existante en rajoutant des conditions
|
|
|
|
|
* sales. Ils ont donc une seule méthode pour envoyer plusieurs
|
|
|
|
|
* types de réclas avec des champs différents...
|
2021-08-06 15:57:48 +02:00
|
|
|
*
|
2021-12-19 15:57:24 +01:00
|
|
|
* Donc une séparation est faite sur les endpoints CRM et dans le client
|
|
|
|
|
* pour éviter une confusion de nos utilisateurs
|
2021-08-06 15:57:48 +02:00
|
|
|
*/
|
2021-03-14 10:45:42 +01:00
|
|
|
class ArcadiaController extends Controller
|
|
|
|
|
{
|
2021-12-19 15:57:24 +01:00
|
|
|
/**
|
|
|
|
|
* Send arcadia default mail (reclamations)
|
|
|
|
|
*
|
2023-06-23 17:18:59 +02:00
|
|
|
* @param \App\Http\Requests\Api\V2\SendArchadiaDefaultMailRequest $request
|
|
|
|
|
* @return \Illuminate\Http\JsonResponse
|
2021-12-19 15:57:24 +01:00
|
|
|
*/
|
|
|
|
|
public function outgoingMailDefault(SendArchadiaDefaultMailRequest $request): JsonResponse
|
2021-03-14 10:45:42 +01:00
|
|
|
{
|
2021-12-19 15:57:24 +01:00
|
|
|
return $this->handleArcadiaMail($request, ArcadiaMailType::default());
|
2021-08-06 15:57:48 +02:00
|
|
|
}
|
|
|
|
|
|
2021-12-19 15:57:24 +01:00
|
|
|
/**
|
|
|
|
|
* Send arcadia game mail (games)
|
|
|
|
|
*
|
2023-06-23 17:18:59 +02:00
|
|
|
* @param \App\Http\Requests\Api\V2\SendArchadiaGameMailRequest $request
|
|
|
|
|
* @return \Illuminate\Http\JsonResponse
|
2021-12-19 15:57:24 +01:00
|
|
|
*/
|
|
|
|
|
public function outgoingMailGame(SendArchadiaGameMailRequest $request): JsonResponse
|
2021-08-06 15:57:48 +02:00
|
|
|
{
|
2021-12-19 15:57:24 +01:00
|
|
|
return $this->handleArcadiaMail($request, ArcadiaMailType::game());
|
2021-08-06 15:57:48 +02:00
|
|
|
}
|
|
|
|
|
|
2021-12-19 15:57:24 +01:00
|
|
|
/**
|
|
|
|
|
* Form xml message and save it in the apropriate storage location
|
|
|
|
|
* to be picked up by the arcadia job
|
|
|
|
|
*
|
2023-06-23 17:18:59 +02:00
|
|
|
* @param \App\Http\Requests\Api\V2\BaseApiRequest $request
|
|
|
|
|
* @param \App\Enums\ArcadiaMailType $type
|
|
|
|
|
* @return \Illuminate\Http\JsonResponse
|
2021-12-19 15:57:24 +01:00
|
|
|
* @throws \Exception If an error occurs while generating and saving the xml file.
|
|
|
|
|
*/
|
|
|
|
|
private function handleArcadiaMail(BaseApiRequest $request, ArcadiaMailType $type): JsonResponse
|
|
|
|
|
{
|
2021-08-06 15:57:48 +02:00
|
|
|
$request = $request->merge([
|
2021-10-19 17:15:34 +02:00
|
|
|
'order_num' => str_pad(\intval($request->order_num), 9, '0', STR_PAD_LEFT)
|
2021-08-06 15:57:48 +02:00
|
|
|
]);
|
|
|
|
|
$xml = 'none';
|
2021-03-14 10:45:42 +01:00
|
|
|
try {
|
2021-10-18 09:03:00 +02:00
|
|
|
$customerInfo = \array_intersect_key($request->all()['deliver'], [
|
|
|
|
|
'email' => '',
|
|
|
|
|
'firstname' => '',
|
|
|
|
|
'lastname' => '',
|
|
|
|
|
'address' => '',
|
|
|
|
|
'address2' => '',
|
|
|
|
|
'city' => '',
|
|
|
|
|
'postcode' => '',
|
|
|
|
|
'phone' => ''
|
|
|
|
|
]);
|
2021-03-14 10:45:42 +01:00
|
|
|
$orderType = ArcadiaOrderType::make(intval($request->state_order));
|
2021-10-18 09:03:00 +02:00
|
|
|
$xml = $this->makeXml($request, $type, $orderType, $customerInfo);
|
2021-03-14 10:45:42 +01:00
|
|
|
|
2021-12-19 15:57:24 +01:00
|
|
|
// * Format xml.
|
2021-03-14 10:45:42 +01:00
|
|
|
$doc = new DOMDocument('1.0', 'utf-8');
|
2021-10-19 17:15:34 +02:00
|
|
|
$doc->xmlStandalone = true;
|
|
|
|
|
$doc->preserveWhiteSpace = false;
|
2021-03-14 10:45:42 +01:00
|
|
|
$doc->formatOutput = true;
|
|
|
|
|
$doc->loadXML($xml);
|
|
|
|
|
$xml = $doc->saveXML();
|
|
|
|
|
|
2021-10-19 17:15:34 +02:00
|
|
|
Storage::disk('arcadia')->put(Str::slug(sprintf(
|
2021-12-19 15:57:24 +01:00
|
|
|
'v2_order_%s_%s_%s%s',
|
2021-11-15 11:34:57 +01:00
|
|
|
$request->order_num,
|
2021-10-19 17:15:34 +02:00
|
|
|
$type->label,
|
|
|
|
|
date('Ymd_His'),
|
|
|
|
|
\microtime(true)
|
2021-12-19 15:57:24 +01:00
|
|
|
)) . '.xml', $xml);
|
2021-03-14 10:45:42 +01:00
|
|
|
return response()->json();
|
2021-12-19 15:57:24 +01:00
|
|
|
// @codeCoverageIgnoreStart
|
2021-03-14 10:45:42 +01:00
|
|
|
} catch (\Exception $e) {
|
2021-11-10 09:13:45 +01:00
|
|
|
Log::critical("ARCADIA XML CREATION FAILED FOR $request->order_num : " . $e->getMessage());
|
2021-03-14 10:45:42 +01:00
|
|
|
if (!config('app.debug')) {
|
2021-11-10 09:13:45 +01:00
|
|
|
dispatch(function () use ($xml, $e, $request) {
|
2021-03-14 10:45:42 +01:00
|
|
|
Mail::to(config('mail.MAIL_ADMIN'))->send(new CourrierArcadiaError(
|
2021-11-10 09:13:45 +01:00
|
|
|
"ARCADIA XML CREATION FAILED FOR $request->order_num",
|
2021-03-14 10:45:42 +01:00
|
|
|
"Une erreur est survenue lors de la création du fichier XML : " . $e->getMessage(),
|
2021-12-19 15:57:24 +01:00
|
|
|
$xml ?: ''
|
2021-03-14 10:45:42 +01:00
|
|
|
));
|
|
|
|
|
})->afterResponse();
|
|
|
|
|
}
|
2021-12-19 15:57:24 +01:00
|
|
|
throw $e;
|
|
|
|
|
// @codeCoverageIgnoreEnd
|
|
|
|
|
}//end try
|
2021-03-14 10:45:42 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* render Arcadia xml for order
|
|
|
|
|
*
|
2023-06-23 17:18:59 +02:00
|
|
|
* @param \App\Http\Requests\Api\V2\BaseApiRequest $request
|
|
|
|
|
* @param \App\Enums\ArcadiaMailType $type
|
|
|
|
|
* @param \App\Enums\ArcadiaOrderType $orderType
|
|
|
|
|
* @param array $customerInfo
|
2021-03-14 10:45:42 +01:00
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
private function makeXml(
|
2021-08-06 15:57:48 +02:00
|
|
|
BaseApiRequest $request,
|
2021-03-14 10:45:42 +01:00
|
|
|
ArcadiaMailType $type,
|
|
|
|
|
ArcadiaOrderType $orderType,
|
2021-10-18 09:03:00 +02:00
|
|
|
array $customerInfo
|
2021-03-14 10:45:42 +01:00
|
|
|
): string {
|
2021-12-19 15:57:24 +01:00
|
|
|
$arcadiaMailType = $type->equals(ArcadiaMailType::default()) ?
|
|
|
|
|
'mail.arcadiaOrders.default' : 'mail.arcadiaOrders.game';
|
|
|
|
|
return view($arcadiaMailType, [
|
|
|
|
|
'request' => $request,
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'orderType' => $orderType,
|
|
|
|
|
'customerInfo' => $customerInfo
|
|
|
|
|
])->render();
|
2021-03-14 10:45:42 +01:00
|
|
|
}
|
|
|
|
|
}
|