user(); if (!$customer) { abort(404); } /** @var \LDC\LDCCRM\Models\Customer $crmCustomer */ $crmCustomer = $customer->apiData; /** @var object $crmInfos */ $crmInfos = \json_decode(\json_encode($crmCustomer)); return view('front.customer.dashboard', compact('customer', 'crmInfos')); } /** * Show update customer informations form * * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory */ public function email() { return view('front.auth.change-email'); } /** * Uupdate customer email * * @param \App\Http\Requests\Fo\Customers\UpdateEmailRequest $request * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory */ public function emailSubmit(UpdateEmailRequest $request) { /** @var \App\Models\Customer */ $customer = \auth('frontend')->user(); // FIXME:Add warning email to customer !!! return $this->updateCrmCustomerInfo($customer, ['email' => $request->get('email')]) ? back()->with('success', trans('Vos informations ont bien été enregistrées.')) : back()->withInput()->withErrors(trans('Une erreur est survenue, merci de réessayer ultérieurement.')); } /** * Show update customer password form * * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory */ public function password() { return view('front.auth.passwords.change'); } /** * Update customer password * * @param UpdatePasswordRequest $request * @return \Illuminate\Http\RedirectResponse */ public function passwordSubmit(UpdatePasswordRequest $request) { /** @var \App\Models\Customer */ $customer = \auth('frontend')->user(); // FIXME:Add warning email to customer !!! return $this->updateCrmCustomerInfo($customer, ['password' => $request->get('password')]) ? back()->with('success', trans('Vos informations ont bien été enregistrées.')) : back()->withInput()->withErrors(trans('Une erreur est survenue, merci de réessayer ultérieurement.')); } /** * Send a request to the CRM to change the given customer's informations * @param \App\Http\Requests\Fo\UpdateInfosRequest $request * @return \Illuminate\Http\RedirectResponse */ public function updateInfos(UpdateInfosRequest $request) { /** @var \App\Models\Customer */ $customer = auth('frontend')->user(); return $this->updateCrmCustomerInfo($customer, $request->validated()) ? back()->with('success', trans('Vos informations ont bien été enregistrées.')) : back()->withInput()->withErrors(trans('Une erreur est survenue, merci de réessayer ultérieurement.')); } /** * Show customer delete account page * * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory */ public function destroy() { return view('front.customer.destroy'); } /** * Show customer delete account page * * @param \App\Http\Requests\Fo\Customers\ConfirmDeleteRequest $request * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory */ public function destroySubmit(ConfirmDeleteRequest $request) { if ($request->confirm) { try { return DB::transaction(function () { // FIXME:Add warning email to customer !!! /** @var \App\Models\Customer */ $customer = auth('frontend')->user(); /** @var \Ldc\LDCCRM\Models\Customer */ $crmCustomer = $customer->api_data; $customer->deleteOrFail(); $crmCustomer->delete(); // * Force logout auth('frontend')->logout(); return response()->redirectToRoute('home') ->with('info', trans( // phpcs:ignore Generic.Files.LineLength.TooLong 'Votre compte à bien été supprimé, si vous avez des commandes en cours vous pouvez utiliser le formulaire de contact en cas de besoin.' )); }); } catch (\Exception $e) { report($e); Session::flash('error', trans('Une erreur est survenue veuillez réssayer plus tard.')); } //end try } //end if return back(); } /** * Updates user info * * @param \App\Models\Customer $customer * @param array $data * @return boolean * @throws \Illuminate\Validation\ValidationException If something failed. */ private function updateCrmCustomerInfo(Customer $customer, array $data) { return DB::transaction(function () use ($customer, $data) { try { /** @var \LDC\LDCCRM\Models\Customer */ $crmCustomer = $customer->apiData; if (\array_key_exists('email', $data)) { $customer->email = $data['email']; $customer->saveOrFail(); } $crmCustomer->fill($data); return $crmCustomer->save(); } catch (CrmValidationException $e) { throw ValidationException::withMessages([ 'error' => $e->getMessage() ]); } catch (ApiErrorException $e) { if ($e->getApiError()->equals(ApiError::validationFailed())) { throw ValidationException::withMessages([ 'error' => $e->getMessage() ]); } report($e); return false; } //end try }); } // * --- END Backoffice --- /** * affichage des commandes du customer connecté * * @param Request $request * @return \Illuminate\Contracts\View\View * * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ public function myOrders(Request $request) { // @phpcs:enable $orders = Order::where('customer_id', Auth::guard('frontend')->user()->id)->orderBy('date', 'DESC')->get(); return view('front.customer.my-orders', compact('orders')); } /** * Show detail commande * * @param string $reference * @return \Illuminate\Contracts\View\View */ public function orderDetail(string $reference) { $order = Order::where('reference', '=', $reference) ->where('customer_id', Auth::guard('frontend')->user()->id) ->firstOrFail(); if ($order->status_id == 1) { $shop = null; } else { $shop = Shop::find($order->timeslot->shop->id); } return view('front.customer.order-detail', compact('order', 'shop')); } /** * Call the CRM to add a single optin * * @param Request $request * @return \Illuminate\Contracts\View\View * */ public function addOptIn(Request $request) { $validator = Validator::make($request->all(), ['email' => 'required|email']); if ($validator->fails()) { return __('L\'adresse email est incorrecte'); } try { SingleOptin::setStatus($request->email, true); return trans('Votre inscription à la newsletter a été prise en compte'); } catch (ApiErrorException $e) { // * Il y a deja un customerInfo avec optin a true pour ce customer if ($e->getApiError()->equals(ApiError::singleOptinCustomerExists())) { return trans('Vous êtes déjà inscrit avec cette adresse email'); } report($e); return trans('Une erreur est survenue, merci de réessayer ultérieurement'); } catch (CrmException $e) { report($e); return trans('Une erreur est survenue, merci de réessayer ultérieurement'); } return trans('Une erreur est survenue, merci de réessayer ultérieurement '); } }