159 lines
5.4 KiB
PHP
159 lines
5.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Customers;
|
|
use App\Models\Products;
|
|
use App\Models\Recipes;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Validation\ValidationException as IlluminateValidationException;
|
|
use LDC\LDCCRM\Enums\ApiError;
|
|
use LDC\LDCCRM\Exceptions\ApiErrorException;
|
|
use LDC\LDCCRM\Exceptions\CrmException;
|
|
use LDC\LDCCRM\Exceptions\ValidationException;
|
|
use LDC\LDCCRM\Models\Customer;
|
|
|
|
class CustomerController extends Controller
|
|
{
|
|
/**
|
|
* Unsubscribe from newsletter
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
|
*/
|
|
public function unscribeNewsletter(Request $request)
|
|
{
|
|
// TODO: handle single optin avec hashcode.
|
|
$message = null;
|
|
|
|
/*
|
|
Unsubscribe single optin code.
|
|
try {
|
|
if ($request->hashcode) {
|
|
SingleOptin::setStatus($request->email, true);
|
|
$message = trans('Votre désinscription à la newsletter a été prise en compte');
|
|
}
|
|
} catch (ApiErrorException $e) {
|
|
if (!$e->getApiError()->equals(ApiError::singleOptinCustomerExists())) {
|
|
if (app()->bound('sentry')) {
|
|
app('sentry')->captureException($e);
|
|
}
|
|
$message = trans('Une erreur est survenue, merci de réessayer ultérieurement');
|
|
}
|
|
} catch (CrmException $e) {
|
|
if (app()->bound('sentry')) {
|
|
app('sentry')->captureException($e);
|
|
}
|
|
$message = trans('Une erreur est survenue, merci de réessayer ultérieurement');
|
|
}
|
|
*/
|
|
|
|
try {
|
|
// ? Is hashcode valid ?
|
|
Validator::validate([
|
|
'hashcode' => $request->hashcode
|
|
], [
|
|
'hashcode' => 'required|uuid'
|
|
]);
|
|
if ($customer = Customer::find($request->hashcode)) {
|
|
$customer->opt_in = false;
|
|
// ! Les données peuvent être parsés en retour de la crm et inconsitantes (Héritage vielle crm).
|
|
try {
|
|
$customer->save();
|
|
} catch (ValidationException $e) {
|
|
$message = null;
|
|
}
|
|
$message = trans('Votre désinscription à la newsletter a été prise en compte');
|
|
}
|
|
} catch (IlluminateValidationException $e) {
|
|
// Les données peuvent être parsés en retour de la crm et sont inconsitantes.
|
|
$message = null;
|
|
} catch (ApiErrorException $e) {
|
|
if (!$e->getApiError()->equals(ApiError::singleOptinCustomerExists())) {
|
|
if (app()->bound('sentry')) {
|
|
app('sentry')->captureException($e);
|
|
}
|
|
$message = trans('Une erreur est survenue, merci de réessayer ultérieurement');
|
|
}
|
|
} catch (CrmException $e) {
|
|
if (app()->bound('sentry')) {
|
|
app('sentry')->captureException($e);
|
|
}
|
|
$message = trans('Une erreur est survenue, merci de réessayer ultérieurement');
|
|
}//end try
|
|
|
|
if (!$message) {
|
|
$message = trans('Le lien de désinscription est invalide');
|
|
}
|
|
|
|
return view('front.singleoptin-unsubscribe', compact('message'));
|
|
}
|
|
|
|
/**
|
|
* setFavoriteRecipe
|
|
*
|
|
* @param \App\Models\Recipes $recipe
|
|
* @param boolean $status
|
|
* @return \Illuminate\Http\JsonResponse
|
|
* @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException.
|
|
*/
|
|
public function setFavoriteRecipe(Recipes $recipe, bool $status)
|
|
{
|
|
/** @var \App\Models\Customer */
|
|
$customer = Auth::guard('customer')->user();
|
|
if ($status) {
|
|
$customer->recipes()->attach($recipe);
|
|
} else {
|
|
$customer->recipes()->detach($recipe);
|
|
}
|
|
return response()->json();
|
|
}
|
|
|
|
/**
|
|
* Add item in customer shopping list
|
|
*
|
|
* @param \App\Models\Products $publishedProduct
|
|
* @param boolean $status
|
|
* @return void
|
|
*/
|
|
public function setItemInCart(Products $publishedProduct, bool $status): void
|
|
{
|
|
/** @var \App\Models\Customer */
|
|
$customer = Auth::guard('customer')->user();
|
|
if ($status) {
|
|
$customer->products()->attach($publishedProduct);
|
|
} else {
|
|
$customer->products()->detach($publishedProduct);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* delete
|
|
*
|
|
* @param integer $id
|
|
* @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
|
|
*/
|
|
public function delete(int $id)
|
|
{
|
|
// TODO : Implémenter la suppression lorsque la CRM sera prête pour le faire aussi.
|
|
dd('Not implemented yet');
|
|
// Suppression d'un compte client.
|
|
$customer = Customers::findOrFail($id);
|
|
$customer->recipes()->delete();
|
|
$customer->products()->delete();
|
|
$customer->answers()->delete();
|
|
|
|
// TODO : Suppression via la CRM.
|
|
|
|
/** @var \Illuminate\Auth\SessionGuard */
|
|
$guard = Auth::guard('customer');
|
|
if ($guard->user()->id === $customer->id) {
|
|
$guard->logout();
|
|
}
|
|
$customer->delete();
|
|
|
|
return redirect()->route('home');
|
|
}
|
|
}
|