handleArcadiaMail($request, ArcadiaMailType::default(), $service); } public function outgoingMailGame(SendArchadiaGameMailRequest $request, Service $service) { return $this->handleArcadiaMail($request, ArcadiaMailType::game(), $service); } private function handleArcadiaMail( BaseApiRequest $request, ArcadiaMailType $type ) { $request = $request->merge([ 'order_num' => str_pad(\intval($request->order_num), 9, '0', STR_PAD_LEFT) ]); $xml = 'none'; try { $customerInfo = \array_intersect_key($request->all()['deliver'], [ 'email' => '', 'firstname' => '', 'lastname' => '', 'address' => '', 'address2' => '', 'city' => '', 'postcode' => '', 'phone' => '' ]); $orderType = ArcadiaOrderType::make(intval($request->state_order)); $xml = $this->makeXml($request, $type, $orderType, $customerInfo); // Format xml $doc = new DOMDocument('1.0', 'utf-8'); $doc->xmlStandalone = true; $doc->preserveWhiteSpace = false; $doc->formatOutput = true; $doc->loadXML($xml); $xml = $doc->saveXML(); Storage::disk('arcadia')->put(Str::slug(sprintf( 'v2_%s_%s%s.xml', $type->label, date('Ymd_His'), \microtime(true) )), $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 CrmException('Failed to create the arcadia xml file', 0, $e); } } /** * render Arcadia xml for order * * @param SendArchadiaMailRequest $request * @param ArcadiaMailType $type * @param ArcadiaOrderType $orderType * @param array $customerInfo * @return string */ private function makeXml( BaseApiRequest $request, ArcadiaMailType $type, ArcadiaOrderType $orderType, array $customerInfo ): string { return view( $type->equals(ArcadiaMailType::default()) ? 'mail.arcadiaOrders.default' : 'mail.arcadiaOrders.game', [ 'request' => $request, 'type' => $type, 'orderType' => $orderType, 'customerInfo' => $customerInfo ] )->render(); } }