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;
|
2021-08-09 08:55:39 +02:00
|
|
|
use App\Exceptions\Api\V2\CrmException;
|
2021-03-14 10:45:42 +01:00
|
|
|
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 App\Models\Service;
|
|
|
|
|
use DOMDocument;
|
|
|
|
|
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
|
|
|
/**
|
|
|
|
|
* TODO: séparer ça quand coté arcadia ils auront branché le cerveau
|
|
|
|
|
* Ici c'est du sale à cause d'arcadia
|
|
|
|
|
* Ils ont fait le choix de rajouter une fonctionnalité
|
|
|
|
|
* sur un methode existant en rajoutant des conditions
|
|
|
|
|
* sales
|
|
|
|
|
*
|
|
|
|
|
* Donc un séparation est faite sur les endpoints CRM et dans le client
|
|
|
|
|
* pour éviter une confusion de noes utilisateurs
|
|
|
|
|
*/
|
2021-03-14 10:45:42 +01:00
|
|
|
class ArcadiaController extends Controller
|
|
|
|
|
{
|
2021-10-18 09:03:00 +02:00
|
|
|
public function outgoingMailDefault(SendArchadiaDefaultMailRequest $request, Service $service)
|
2021-03-14 10:45:42 +01:00
|
|
|
{
|
2021-10-18 09:03:00 +02:00
|
|
|
return $this->handleArcadiaMail($request, ArcadiaMailType::default(), $service);
|
2021-08-06 15:57:48 +02:00
|
|
|
}
|
|
|
|
|
|
2021-10-18 09:03:00 +02:00
|
|
|
public function outgoingMailGame(SendArchadiaGameMailRequest $request, Service $service)
|
2021-08-06 15:57:48 +02:00
|
|
|
{
|
2021-10-18 09:03:00 +02:00
|
|
|
return $this->handleArcadiaMail($request, ArcadiaMailType::game(), $service);
|
2021-08-06 15:57:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function handleArcadiaMail(
|
|
|
|
|
BaseApiRequest $request,
|
2021-10-18 09:03:00 +02:00
|
|
|
ArcadiaMailType $type
|
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
|
|
|
|
|
|
|
|
// Format xml
|
|
|
|
|
$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(
|
|
|
|
|
'v2_%s_%s%s.xml',
|
|
|
|
|
$type->label,
|
|
|
|
|
date('Ymd_His'),
|
|
|
|
|
\microtime(true)
|
|
|
|
|
)), $xml);
|
2021-03-14 10:45:42 +01:00
|
|
|
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;
|
|
|
|
|
}
|
2021-08-09 08:55:39 +02:00
|
|
|
throw new CrmException('Failed to create the arcadia xml file', 0, $e);
|
2021-03-14 10:45:42 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* render Arcadia xml for order
|
|
|
|
|
*
|
|
|
|
|
* @param SendArchadiaMailRequest $request
|
|
|
|
|
* @param ArcadiaMailType $type
|
|
|
|
|
* @param ArcadiaOrderType $orderType
|
2021-10-18 09:03:00 +02:00
|
|
|
* @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 {
|
|
|
|
|
return view(
|
2021-10-19 17:15:34 +02:00
|
|
|
$type->equals(ArcadiaMailType::default()) ?
|
|
|
|
|
'mail.arcadiaOrders.default' : 'mail.arcadiaOrders.game',
|
2021-03-14 10:45:42 +01:00
|
|
|
[
|
|
|
|
|
'request' => $request,
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'orderType' => $orderType,
|
|
|
|
|
'customerInfo' => $customerInfo
|
|
|
|
|
]
|
|
|
|
|
)->render();
|
|
|
|
|
}
|
|
|
|
|
}
|