cleeeeaaaaannnnnnnnnnn

This commit is contained in:
Vincent BRIDIER 2025-11-06 16:17:22 +01:00 • committed by Noah Lancien
parent 94a4e04b50
commit cfd7b828da
50 changed files with 283 additions and 2779 deletions

View file

@ -6,7 +6,6 @@ use Kwaadpepper\Enum\BaseEnum;
/**
* @method static self updatebasket()
* @method static self delctrlcontact()
* @method static self impression()
* @method static self updatecontact()
*/
@ -17,7 +16,6 @@ class LogActions extends BaseEnum
{
return [
'updatebasket' => 1,
'delctrlcontact' => 2,
'impression' => 3,
'updatecontact' => 4,
];
@ -27,7 +25,6 @@ class LogActions extends BaseEnum
{
return [
'updatebasket' => 'Mise à jour du panier',
'delctrlcontact' => 'Réinitialisation du mur',
'impression' => 'Impression',
'updatecontact' => 'Mise à jour du contact',
];

View file

@ -309,16 +309,7 @@ class AjaxController extends Controller
die();
}
if ($request->session()->has('contact')) {
$contact = $request->session()->get('contact');
}
if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) {
if (!isset($contact)) {
die();
}
return redirect(url('/') . '/?refsite=' . $campagne->camp_siteId . '&refcamp=' . $campagne->camp_id . '&hash=' . $contact->contact_hash);
} elseif ($campagne->camp_type->equals(CampaignTypes::panier()) || $campagne->camp_type->equals(CampaignTypes::paniers())) {
if ($campagne->camp_type->equals(CampaignTypes::panier()) || $campagne->camp_type->equals(CampaignTypes::paniers())) {
if ($request->session()->has('panier')) {
$panier = $request->session()->get('panier');
} else {

View file

@ -44,6 +44,6 @@ class LoginController extends Controller
*/
protected function authenticated()
{
return redirect()->route('home');
return redirect('/');
}
}

View file

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Log;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class MaintenanceController extends Controller
{
public function index(Request $request)
{
$datas = Log::select(
DB::raw("DATE_FORMAT(created_at, '%m/%Y') as month"),
DB::raw("COUNT(*) as count")
)
->where('log_statut', 'NOK')
->where('created_at', '>=', Carbon::now()->subMonths(5)->startOfMonth())
->groupBy('month')
->orderBy('month', 'asc')
->get();
$logs = $datas->toArray();
return view('bo.maintenance.index', compact('logs'));
}
}

View file

@ -0,0 +1,76 @@
<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\Users\DestroyUserRequest;
use App\Http\Requests\Bo\Users\StoreUserRequest;
use App\Http\Requests\Bo\Users\UpdateUserRequest;
use Illuminate\Http\Request;
use App\Site;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
public function index(Request $request)
{
$users = User::all();
return view('bo.users.index')->with(['users' => $users, 'logs' => []]);
}
public function create(Request $request)
{
$sites = Site::all();
return view('bo.users.create', compact('sites'));
}
public function store(StoreUserRequest $request)
{
$user = new User();
$user->fill($request->validated());
$user->password = Hash::make($request->password);
$user->save();
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
return redirect()->route('bo.users.edit', $user);
}
public function edit(User $user)
{
$sites = Site::all();
$usersites = $user->sites()->get()->pluck('site_id')->toArray();
return view('bo.users.edit', compact('user', 'sites', 'usersites'));
}
public function update(UpdateUserRequest $request, User $user)
{
$user->fill($request->validated());
$user->save();
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
$marques = Auth::user()->sites;
$submarques = $marques->map(function ($marque) {
return $marque->only(['id', 'site_nom', 'site_id', 'site_logo']);
});
session()->put('marques', $submarques);
return redirect()->route('bo.users.edit', $user);
}
public function destroy(DestroyUserRequest $request, User $user)
{
if ($user->delete()) {
return redirect()->route('bo.users.index');
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return view('bo.user.index');
}
}
}

View file

@ -412,86 +412,4 @@ class CampagneController extends Controller
'Détails Campagne' => $data
]);
}
public function getDiffCamp(Request $request)
{
$error = false;
// ---- Contrôle des paramètres
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
if (!$campagne) {
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
} else {
$error = true;
}
if (isset($request->refsite) && $request->refsite != "") {
$refsite = $request->refsite;
$site = Site::where(['site_id' => $refsite])->first();
if (!$site) {
return response()->json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site n\'existe pas'
]);
};
} else {
$error = true;
}
if (isset($request->refadherent) && $request->refadherent != "") {
$refadherent = $request->refadherent;
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if (!$contact) {
return response()->json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
]);
}
} else {
$error = true;
}
if ($error) {
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
$data = array (
'Statut' => 'OK',
'Site' => $site->site_nom,
'Ref campagne' => $campagne->camp_id,
'Nom campagne' => $campagne->camp_name,
"Ref contact" => $refadherent,
"Email contact" => $contact->contact_email,
);
$coupons = $campagne->coupons()->get();
if ($coupons->count() > 0) {
foreach ($coupons as &$coupon) {
if ($this->isAvailable($coupon, $campagne, $contact)) {
$dispo = 1;
} else {
$dispo = 0;
}
$codeTraitement = array (
"Code traitement" => $coupon->coupon_code,
"Nom" => $coupon->coupon_name,
"Nb disponible" => $dispo,
);
$data['Codes traitement'][] = $codeTraitement;
}
}
return response()->json($data);
}
}

View file

@ -4,15 +4,6 @@ namespace App\Http\Controllers;
use App\Contact;
use App\Site;
use App\Campagne;
use App\Enums\CampaignTypes;
use App\Http\Requests\Contact\LoadWidgetContact;
use App\Http\Requests\Contact\SearchContact;
use App\Http\Requests\Contact\StoreContact;
use App\Http\Requests\Contact\UpdateContact;
use App\Log;
use App\Panier;
use App\PanierContent;
use App\Traits\CouponTrait;
use Illuminate\Http\Request;
@ -20,103 +11,6 @@ class ContactController extends Controller
{
use CouponTrait;
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
return view('contact.index')->with('search', false);
}
public function search(SearchContact $request)
{
session()->put('active_route', 'contact');
$contacts = Contact::where('contact_siteId', session()->get('site')->site_id)
->searchFirstname($request->searchFirstname)
->searchName($request->searchName)
->searchEmail($request->searchEmail)
->searchCp($request->searchCp)
->searchVille($request->searchVille)
->searchCountry($request->searchCountry)
->orderBy('contact_createdate', 'DESC')
->paginate(15, ['*'], 'page', $request->page);
$searchData = array(
'name' => $request->searchName,
'firstname' => $request->searchFirstname,
'email' => $request->searchEmail,
'cp' => $request->searchCp,
'ville' => $request->searchVille,
'pays' => $request->searchCountry
);
return view('contact.index')->with('contacts', $contacts)->with('search', true)->with('searchData', $searchData);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('contact.create');
}
/**
* Store a newly created resource in storage.
*
* @param StoreContact $request
* @return \Illuminate\Http\Response
*/
public function store(StoreContact $request)
{
// TODO : Revoir le passage du site
$site = session()->get('site');
$contact = new Contact();
$contact->fill($request->validated());
$contact->contact_siteId = $site->site_id;
$contact->save();
return redirect()->route('contact.edit', ['contact' => $contact]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Campagne $campagne
* @return \Illuminate\Http\Response
*/
public function edit(Contact $contact)
{
$campagnes = Campagne::where(['camp_siteId' => $contact->contact_siteId, 'camp_published' => 1])->get();
return view('contact.edit', ['contact' => $contact, 'campagnes' => $campagnes]);
}
/**
* Update the specified resource in storage.
*
* @param UpdateContact $request
* @param \App\Contact $contact
* @return \Illuminate\Http\Response
*/
public function update(UpdateContact $request, Contact $contact)
{
$contact->fill($request->validated());
if ($contact->save()) {
session()->flash('update_ok', __('La campagne a bien été modifiée'));
} else {
session()->flash('update_nok', "Erreur lors de l'enregistrement");
}
return redirect()->route('contact.edit', ['contact' => $contact]);
}
public function updateContact(Request $request)
{
$error = false;
@ -228,102 +122,4 @@ class ContactController extends Controller
]);
}
}
public function loadWidget(LoadWidgetContact $request, Contact $contact)
{
$camp_id = $request->camp_id;
$campagne = Campagne::where(['camp_id' => $camp_id])->first();
$coupons = $campagne->coupons;
foreach ($coupons as $key => $coupon) {
if (!$this->isAvailableToPrint($coupon, $campagne)) {
$coupons->forget($key);
}
}
$allLogs = Log::where(['log_refsite' => $campagne->camp_siteId, 'log_contactId' => $contact->contact_id, 'log_statut' => 'OK'])->orderBy('created_at', 'DESC')->get();
$logs = array();
foreach ($allLogs as &$l) {
$params = json_decode($l->log_params);
if ($l->log_action == 3 || $l->log_action == 1) {
$l->log_message = json_decode($l->log_message, true);
}
if (intval($params->refcamp) == $camp_id) {
array_push($logs, $l);
}
}
// ---- Pour les types murs
if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) {
foreach ($coupons as &$coupon) {
$coupon->isAvailable = $this->isAvailable($coupon, $campagne, $contact);
}
unset($coupon);
// Montant total et Nombre réductions disponible
$montantDispo = 0;
$montantTotal = 0;
$nbCoupon = 0;
foreach ($coupons as $coupon) {
$montantTotal += $coupon->coupon_value;
if ($coupon->isAvailable == true) {
$montantDispo += $coupon->coupon_value;
$nbCoupon++;
}
}
if (count($coupons) === $nbCoupon) {
$reset = false;
} else {
$reset = true;
}
$campagne->url = url('/') . "/?refsite=" . $campagne->camp_siteId . "&refcamp=" . $camp_id . "&hash=" . $contact->contact_hash;
$returnHTML = view('widgets.mur')
->with([
'campagne' => $campagne,
'reset' => $reset,
'montantTotal' => $montantTotal,
'montantDispo' => $montantDispo,
'logs' => $logs,
'contact' => $contact])
->renderSections()['widget'];
return json_encode(array('success' => true, 'html' => $returnHTML));
} else {
// ---- Pour les types paniers
$panier = Panier::where(['panier_campId' => $campagne->camp_id, 'panier_contactId' => $contact->contact_id, 'panier_pending' => 1])->first();
if ($panier) {
$panier_ref = $panier->panier_ref;
foreach ($coupons as &$coupon) {
$paniercontent = PanierContent::where(['panier_content_couponId' => $coupon->coupon_id, 'panier_content_panierId' => $panier->panier_id])->first();
if ($paniercontent) {
$coupon->qty = $paniercontent->panier_content_quantity;
} else {
$coupon->qty = 0;
}
}
$campagne->url = url('/') . "/?basketid=" . $panier_ref;
unset($coupon);
} else {
$panier_ref = "";
foreach ($coupons as &$coupon) {
$coupon->qty = 0;
}
$campagne->url = "Pas d'url disponible (panier non créé)";
}
$returnHTML = view('widgets.panier')
->with([
'campagne' => $campagne,
'contact' => $contact,
'panier' => $panier_ref,
'logs' => $logs,
'coupons' => $coupons
])
->renderSections()['widget'];
return json_encode(array('success' => true, 'html' => $returnHTML));
}
}
}

View file

@ -1,33 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Campagne;
use App\Http\Requests\Customers\SearchCustomers;
use App\Models\Customers;
use App\Site;
class CustomersController extends Controller
{
public function index(SearchCustomers $request, Site $site)
{
$campaigns = [];
$customer = null;
$email = $request->email;
$site->load("campagnes");
if ($email) {
$customer = Customers::where('email', $email)->first();
if ($customer) {
$publishedCampaign = $site->campagnes->where('camp_published', 1)->pluck('camp_id');
$campaigns = Campagne::where('camp_published', 1)->whereHas('printedCoupons', function ($q) use ($customer, $publishedCampaign) {
$q->where('customer_id', $customer->id)->whereIn('camp_id', $publishedCampaign);
})->get();
}
}
return view('customers.index', compact('site', 'customer', 'campaigns', 'email'));
}
}

View file

@ -1,86 +0,0 @@
<?php
namespace App\Http\Controllers;
use App;
use CpChart\Data;
use CpChart\Image;
use App\Traits\CouponTrait;
use App\Traits\GraphTrait;
use App\Site;
use App\Coupon;
use App\Http\Requests\Export\PDFExport;
use Datetime;
use Illuminate\Http\Request;
class ExportController extends Controller
{
use CouponTrait;
use GraphTrait;
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function show(Request $request)
{
$sites = Site::all();
$startdate = new DateTime("first day of last month");
$startdate = $startdate->format('Y-m-d');
$enddate = date('Y-m-d');
return view('export.index')->with(['sites' => $sites, 'startdate' => $startdate, 'enddate' => $enddate]);
}
// ------ AJAX Export
public function exportCoupons(PDFExport $request)
{
$ids = $request->ids;
$startdate = $request->startdate;
$enddate = $request->enddate;
$coupons = Coupon::find($ids);
$labels = $this->getLabelsForStats($startdate, $enddate);
$paths = array();
foreach ($coupons as $coupon) {
$cpName = str_replace(' ', '', $coupon->coupon_name);
$full_path = 'export/' . $cpName . '_' . date('d_m_Y') . '.pdf';
$dataCoupon = $this->getDataForCouponAllCamp($labels, $coupon);
$coupon->couponQuantity = $this->getFullQuantity($coupon);
$coupon->couponFullPrinted = $this->getUsedQuantity($coupon);
$coupon->couponPrinted = $this->getUsedQuantityOnPeriod($coupon, $startdate, $enddate);
$pdf = App::make('dompdf.wrapper');
$myData = new Data();
$myData->addPoints($dataCoupon, "My Serie 1");
$myData->addPoints($labels, "My Serie 2");
$myData->setAxisName(0, "Coupons Diffusés");
$myData->setAbscissa("My Serie 2");
$myData->setSerieTicks("My Serie 2", 2);
$serieSettings = array("R" => 229,"G" => 11,"B" => 11);
$myData->setPalette("My Serie 1", $serieSettings);
$myPicture = new Image(700, 230, $myData);
$myPicture->setGraphArea(60, 40, 670, 190);
$myPicture->setFontProperties(array("FontSize" => 10));
$myPicture->drawScale(array("DrawSubTicks" => true, 'LabelSkip' => 1, 'LabelRotation' => 25, "Mode" => SCALE_MODE_START0, "CycleBackground" => true,"GridR" => 102,"GridG" => 102,"GridB" => 102));
$myPicture->setShadow(true, array("X" => 1,"Y" => 1,"R" => 0,"G" => 0,"B" => 0,"Alpha" => 10));
$myPicture->drawLineChart(array("DisplayColor" => DISPLAY_AUTO));
$myPicture->Render('export/temp.png');
$view = view('export.template')->with(['src' => 'export/temp.png', 'coupon' => $coupon, 'startdate' => $startdate, 'enddate' => $enddate])->render();
$pdf->loadHTML($view);
$pdf->save($full_path);
array_push($paths, $full_path);
}//end foreach
return json_encode($paths);
}
}

View file

@ -1,88 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Users\StoreUsers;
use App\Http\Requests\Users\UpdateUsers;
use App\Site;
use App\User;
use App\Log;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class MaintenanceController extends Controller
{
public function show(Request $request)
{
$users = User::all();
$dates = array(date('m/Y'));
for ($i = 1; $i < 6; $i++) {
$datebefore = date("m/Y", strtotime("-" . $i . " months"));
array_push($dates, $datebefore);
}
$count = array();
foreach ($dates as $month) {
$logs = Log::where(['log_statut' => 'NOK'])->whereMonth('created_at', $month)->count();
array_push($count, [$month, $logs]);
}
return view('maintenance.index')->with(['users' => $users, 'logs' => $count]);
}
public function usercreate(Request $request)
{
$sites = Site::all();
return view('user.create')->with(['sites' => $sites]);
}
public function userstore(StoreUsers $request)
{
$user = new User();
$user->fill($request->validated());
$user->password = Hash::make($request->password);
$user->save();
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
return redirect()->route('maintenance.user.edit', ['user' => $user]);
}
public function useredit(User $user)
{
$sites = Site::all();
$usersites = $user->sites()->get()->pluck('site_id')->toArray();
return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]);
}
public function userupdate(UpdateUsers $request, User $user)
{
//MAJ du User
$user->fill($request->validated());
$user->save();
//MAJ des sites liés
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
$marques = Auth::user()->sites;
$submarques = $marques->map(function ($marque) {
return $marque->only(['id', 'site_nom', 'site_id', 'site_logo']);
});
session()->put('marques', $submarques);
return redirect()->route('maintenance.show');
}
public function userdestroy(User $user)
{
if ($user->delete()) {
return redirect()->route('maintenance.show');
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return view('maintenance.user.edit')->with('user', $user);
}
}
}

View file

@ -1,315 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Campagne;
use App\Contact;
use App\Mur;
use App\Log;
use App\Traits\CouponTrait;
use App\Traits\ThanksTrait;
class MurController extends Controller
{
use CouponTrait;
use ThanksTrait;
public function show(Request $request)
{
$datas = $request->all();
if (isset($datas['refcamp'])) {
$ref = intval($datas['refcamp']);
$campagne = Campagne::where(['camp_id' => $ref])->first();
} else {
abort(404);
}
if (!isset($datas['refsite'])) {
abort(404);
}
if (!isset($campagne) || $campagne->camp_published == 0 || ($campagne->camp_type->value != 0 && $campagne->camp_type->value != 2)) {
abort(404);
}
if (isset($datas['hash'])) {
$contact = Contact::where([
'contact_hash' => $datas['hash'], 'contact_siteId' => $campagne->camp_siteId
])->first();
} else {
abort(404);
}
$coupons = $this->getCouponsPublished($campagne);
foreach ($coupons as $coupon) {
$coupon->isAvailable = $this->isAvailable($coupon, $campagne, $contact);
$coupon->isAvailableToPrint = $this->isAvailableToPrint($coupon, $campagne);
}
unset($coupon);
// Montant total et Nombre réductions disponible
$montantDispo = 0;
$montantTotal = 0;
$nbCoupon = 0;
$nbCouponToPrint = 0;
foreach ($coupons as $coupon) {
$montantTotal += $coupon->coupon_value;
if ($coupon->isAvailable == true) {
$montantDispo += $coupon->coupon_value;
$nbCoupon++;
}
if ($coupon->isAvailableToPrint == true) {
$nbCouponToPrint++;
}
}
session()->put('campagne', $campagne);
session()->put('site', $campagne->site);
session()->put('contact', $contact);
return view('landings::' . $ref . '.index')
->with(['ref' => $ref, 'coupons' => $coupons, 'contact' => $contact, 'nb' => $nbCoupon, 'nbAvailableToPrint' => $nbCouponToPrint, 'montantDispo' => $montantDispo]);
}
public function printMur(Request $request)
{
if (isset($request->coupons)) {
session()->put('coupons', $request->coupons);
$coupons = $request->coupons;
}
if ($request->session()->has('campagne')) {
$campagne = $request->session()->get('campagne');
} else {
abort(419);
}
$ref = $campagne->camp_id;
return view('landings::' . $ref . '.imprimer')
->with(['ref' => $ref, 'coupons' => $coupons, 'contact' => $request->session()->get('contact')]);
}
public function deleteControlContact(Request $request)
{
if (isset($request->admin)) {
$source = 'ADMIN';
} else {
$source = 'API';
}
// ---- INIT du log
$log = new Log();
$log->log_action = config('constants.delctrlcontact');
$log->log_source = $source;
$error = false;
// ---- Contrôle des paramètres
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
} else {
$error = true;
}
if (isset($request->refadherent) && $request->refadherent != "") {
$refadherent = $request->refadherent;
} else {
$error = true;
}
// Erreur si paramètres mal renseignés
if ($error) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_statut = 'NOK';
$log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
// Check de la campagne
$campagne = Campagne::where('camp_id', $refcamp)->first();
if (!$campagne) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_statut = 'NOK';
$log->log_message = "La campagne n'existe pas";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
// Check du contact
$contact = Contact::where(['contact_ref' => $refadherent, 'contact_siteId' => $campagne->camp_siteId])->first();
if (!$contact) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_refsite = $campagne->camp_siteId;
$log->log_statut = 'NOK';
$log->log_message = "Le contact n'existe pas";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
]);
}
if ($campagne) {
// Update
$mur = Mur::where(['mur_campId' => $refcamp, 'mur_contactId' => $contact->contact_id])->update(['mur_deleted' => '1']);
if ($mur != 0) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_refsite = $campagne->camp_siteId;
$log->log_contactId = $contact->contact_id;
$log->log_statut = 'OK';
$log->log_message = $mur . " enregistrements ont été mis à jour.";
$log->save();
return response()->json([
'Statut' => 'OK',
'Message' => $mur . " enregistrements ont été mis à jour."
]);
} else {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_refsite = $campagne->camp_siteId;
$log->log_contactId = $contact->contact_id;
$log->log_statut = 'OK';
$log->log_message = 'Aucun contrôle à effacer';
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 110,
'Message' => 'Aucun contrôle à effacer'
]);
}//end if
}//end if
return;
}
public function montantDispoCampagne(Request $request)
{
// ---- Contrôle des paramètres
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
} else {
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
// ------ Recuperation de la campagne
$camp = Campagne::where(['camp_id' => $refcamp])->first();
if (!$camp) {
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
// ------ Récupération des coupons de la campagne
$coupons = $camp->coupons()->where(['coupon_published' => 1])->get();
if (count($coupons) == 0) {
return response()->json([
'Statut' => 'KO',
'Code' => 105,
'Message' => 'La campagne est vide'
]);
}
// ---- Montant total et Nombre réductions disponible
$montantTotal = 0;
foreach ($coupons as $coupon) {
$montantTotal += $coupon->coupon_value;
}
$montantTotal = number_format($montantTotal, 2, ",", " ");
$montantTotal = str_pad($montantTotal, 6, "0", STR_PAD_LEFT);
return response()->json([
'Statut' => 'OK',
'Message' => $montantTotal
]);
}
public function montantDispoContact(Request $request)
{
$error = false;
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
} else {
$error = true;
}
if (isset($request->refsite) && $request->refsite != "") {
$refsite = $request->refsite;
} else {
$error = true;
}
if (isset($request->refadherent) && $request->refadherent != "") {
$refadherent = $request->refadherent;
} else {
$error = true;
}
if ($error) {
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
$campagne = Campagne::where(['camp_id' => $refcamp])->where('camp_type', 'IN', array(0,2))->first();
if (!$campagne) {
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if (!$contact) {
return response()->json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
]);
}
$coupons = $this->getCouponsPublished($campagne);
foreach ($coupons as &$coupon) {
$coupon->isAvailable = $this->isAvailable($coupon, $campagne, $contact);
}
unset($coupon);
$montantDispo = 0;
foreach ($coupons as $coupon) {
if ($coupon->isAvailable == true) {
$montantDispo += $coupon->coupon_value;
}
}
$montantDispo = number_format($montantDispo, 2, ",", " ");
$montantDispo = str_pad($montantDispo, 6, "0", STR_PAD_LEFT);
return response()->json([
'Statut' => 'OK',
'Message' => $montantDispo
]);
}
}

View file

@ -15,16 +15,12 @@ class RedirectController extends Controller
*/
public function __invoke(Request $request)
{
$mur = new Controllers\MurController();
$panier = new Controllers\PanierController();
if (isset($request->basketid)) {
return $panier->showTemplate($request);
// $this->showTemplate($request);
} elseif (isset($request->hash)) {
return $mur->show($request);
} else {
return redirect()->route('home');
return redirect()->route('login');
}
}
}

View file

@ -1,93 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Campagne;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Traits\CouponTrait;
use App\Traits\GraphTrait;
class StatistiqueController extends Controller
{
use CouponTrait;
use GraphTrait;
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
// $sites = Auth::user()->sites()->get();
// foreach ($sites as $site) {
// if (isset($site->campagnes)) {
// $campagnes = $site->campagnes;
// foreach ($campagnes as $campagne) {
// $coupons = $campagne->coupons;
// foreach ($coupons as $coupon) {
// $coupon->quantity = $this->getFullQuantity($coupon);
// $coupon->remain = $this->getFullQuantity($coupon) - $this->getUsedQuantity($coupon);
// $coupon->diffused = $this->getDiffusedQuantity($coupon);
// $coupon->isPrintable = $this->isAvailableToPrint($coupon, $campagne);
// $coupon->isPaused = $this->isPausedToPrint($coupon, $campagne);
// }
// }//end foreach
// }//end if
// }//end foreach
$sites = [];
return view('stats.index')->with(['sites' => $sites]);
}
/**
* Show the stat detail of a campaign.
*
* @return \Illuminate\Http\Response
*/
public function statdetail(Campagne $campagne)
{
$count = 0;
$colors = config('constants.colors');
$coupons = $campagne->coupons;
foreach ($coupons as $coupon) {
$coupon->quantity = $this->getFullQuantity($coupon);
$coupon->remain = $coupon->quantity - $this->getUsedQuantity($coupon);
$coupon->diffused = $this->getDiffusedQuantity($coupon);
$coupon->isPrintable = $this->isAvailableToPrint($coupon, $campagne);
$coupon->isPaused = $this->isPausedToPrint($coupon, $campagne);
$coupon->color = $coupon->color = "#" . str_pad(dechex(mt_rand(0, 255)), 2, '0', STR_PAD_LEFT) . str_pad(dechex(mt_rand(0, 255)), 2, '0', STR_PAD_LEFT) . str_pad(dechex(mt_rand(0, 255)), 2, '0', STR_PAD_LEFT);
$count++;
}
$enddate = date('Y-m-d');
$startdate = date('Y-m-d', strtotime("-30 days"));
return view('stats.detail')->with(['campagne' => $campagne, 'startdate' => $startdate, 'enddate' => $enddate]);
}
public function loadStats(Request $request)
{
$campid = $request->campid;
$startdate = $request->startdate;
$enddate = $request->enddate;
// ---- Labels pour la période
$labels = $this->getLabelsForStats($startdate, $enddate);
// ---- Data pour le graphique global
$dataGlobal = $this->getDataForCamp($labels, $campid);
// ---- Data pour le graphique par coupons
$campagne = Campagne::where(['camp_id' => $campid])->first();
$coupons = $campagne->coupons;
$dataSpec = [];
foreach ($coupons as $coupon) {
$dataCoupon = $this->getDataForCoupon($labels, $campid, $coupon);
$dataSpec[$coupon->coupon_code] = $dataCoupon;
}
$data = array('labels' => $labels, 'dataGlobal' => $dataGlobal, 'dataSpec' => $dataSpec);
return json_encode($data);
}
}

View file

@ -60,11 +60,7 @@ class Kernel extends HttpKernel
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'process.url' => \App\Http\Middleware\ProcessSpecificUrl::class,
'saveroute' => \App\Http\Middleware\SaveCurrentRoute::class,
'superadmin' => \App\Http\Middleware\SuperAdmin::class,
'admin' => \App\Http\Middleware\Admin::class,
'marketing' => \App\Http\Middleware\Marketing::class,
];
/**

View file

@ -1,27 +0,0 @@
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->roles == 'admin') {
return $next($request);
} elseif (Auth::check() && Auth::user()->roles == 'superadmin') {
return $next($request);
} else {
return redirect('/bo/home');
}
}
}

View file

@ -1,20 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
class Marketing
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}

View file

@ -1,96 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use App\Http\Controllers;
class ProcessSpecificUrl
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$path = $request->path();
$params = $request->all();
$paramsCount = count($params);
$contact = new Controllers\ContactController();
$mur = new Controllers\MurController();
$panier = new Controllers\PanierController();
$campagne = new Controllers\CampagneController();
$ajax = new Controllers\AjaxController();
switch ($path) {
case 'updatecontact':
$res = $contact->updateContact($request);
break;
case 'delctrlcontact':
$res = $mur->deleteControlContact($request);
break;
case 'mntdispocampagne':
$res = $mur->montantDispoCampagne($request);
break;
case 'mntdispocontact':
$res = $mur->montantDispoContact($request);
break;
case 'updatebasket':
$res = $panier->updateBasket($request);
break;
case 'showbasket':
$res = $panier->showBasket($request);
break;
case 'getdetailcampaign':
$res = $campagne->getDetail($request);
break;
case 'getdiffctccampaign':
$res = $campagne->getDiffCamp($request);
break;
case 'imprime':
$res = $panier->printPanierSelect($request);
return $next($request);
break;
case 'imprimer':
$res = $mur->printMur($request);
return $next($request);
break;
case 'merci':
$res = $mur->getThanks($request);
return $next($request);
break;
case 'merci-panier':
$res = $panier->getThanks($request);
return $next($request);
break;
case 'index':
$res = $ajax->backToIndex($request);
break;
default:
switch ($paramsCount) {
case 0:
return redirect('bo/home');
break;
case 1:
$res = $panier->showTemplate($request);
return $next($request);
break;
case 3:
$res = $mur->show($request);
return $next($request);
break;
case 4:
$res = $mur->show($request);
return $next($request);
break;
default:
break;
}
break;
}//end switch
return $res;
}
}

View file

@ -18,7 +18,7 @@ class RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect()->route('home');
return redirect()->route('campagne.index');
}
return $next($request);

View file

@ -2,8 +2,8 @@
namespace App\Http\Middleware;
use Auth;
use Closure;
use Illuminate\Support\Facades\Auth;
class SaveCurrentRoute
{
@ -16,26 +16,22 @@ class SaveCurrentRoute
*/
public function handle($request, Closure $next)
{
$routeName = explode('.', \Route::currentRouteName());
session()->put('active_route', $routeName[0]);
$site = session()->get('site');
if (!isset($site)) {
session()->put('site', Auth::user()->sites->first());
}
$currentLogo = session()->get('site')->only(['site_logo']);
session()->put('current_logo', $currentLogo);
$siteId = session()->get('marques');
if (!isset($siteId)) {
$marques = Auth::user()->sites;
if (!$site) {
$site = Auth::user()->sites->first();
session()->put('site', $site);
}
$currentLogo = $site->only(['site_logo']);
session()->put('current_logo', $currentLogo);
if (!$siteId) {
$marques = Auth::user()->sites;
$submarques = $marques->map(function ($marque) {
return $marque->only(['id', 'site_nom', 'site_id', 'site_logo']);
});
session()->put('marques', $submarques);
}

View file

@ -1,25 +0,0 @@
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class SuperAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->roles == 'superadmin') {
return $next($request);
} else {
return redirect('/bo/home');
}
}
}

View file

@ -22,6 +22,5 @@ class VerifyCsrfToken extends Middleware
'updatecontact',
'updatebasket',
'showbasket',
'delctrlcontact'
];
}

View file

@ -1,12 +1,11 @@
<?php
namespace App\Http\Requests\Contact;
namespace App\Http\Requests\Bo\Users;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class LoadWidgetContact extends FormRequest
class DestroyUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
@ -15,7 +14,7 @@ class LoadWidgetContact extends FormRequest
*/
public function authorize()
{
return Auth::check() && (Auth::user()->roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value);
return Auth::check();
}
/**
@ -26,7 +25,7 @@ class LoadWidgetContact extends FormRequest
public function rules()
{
return [
'camp_id' => 'required|exists:campagne,camp_id'
//
];
}
}

View file

@ -1,12 +1,11 @@
<?php
namespace App\Http\Requests\Users;
namespace App\Http\Requests\Bo\Users;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreUsers extends FormRequest
class StoreUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
@ -15,7 +14,7 @@ class StoreUsers extends FormRequest
*/
public function authorize()
{
return Auth::check() && (Auth::user()->roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value);
return Auth::check();
}
/**

View file

@ -1,13 +1,12 @@
<?php
namespace App\Http\Requests\Users;
namespace App\Http\Requests\Bo\Users;
use App\Enums\UserRoles;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class UpdateUsers extends FormRequest
class UpdateUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
@ -16,7 +15,7 @@ class UpdateUsers extends FormRequest
*/
public function authorize()
{
return Auth::check() && (Auth::user()->roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value);
return Auth::check();
}
/**

View file

@ -1,38 +0,0 @@
<?php
namespace App\Http\Requests\Contact;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class SearchContact extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'page' => 'sometimes|integer|nullable',
'searchName' => 'sometimes|alpha|max:50|nullable',
'searchFirstname' => 'sometimes|alpha|max:50|nullable',
'searchEmail' => 'sometimes|email|max:100|nullable',
'searchCp' => 'sometimes|integer|max:10|nullable',
'searchVille' => 'sometimes|alpha|max:50|nullable',
'searchCountry' => 'sometimes|integer|nullable',
];
}
}

View file

@ -1,38 +0,0 @@
<?php
namespace App\Http\Requests\Contact;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreContact extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'contact_ref' => 'required|unique:contact',
'contact_nom' => 'min:3|max:50|required',
'contact_prenom' => 'min:3|max:50|required',
'contact_email' => 'email|required',
'contact_cp' => 'max:10|required',
'contact_ville' => 'max:50|required',
'contact_country' => 'integer|required'
];
}
}

View file

@ -1,42 +0,0 @@
<?php
namespace App\Http\Requests\Contact;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class UpdateContact extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'contact_ref' => [
'required',
Rule::unique('contact')->ignore($this->contact->contact_id, 'contact_id'),
],
'contact_nom' => 'min:3|max:50|required',
'contact_prenom' => 'min:3|max:50|required',
'contact_email' => 'email|required',
'contact_cp' => 'max:10|required',
'contact_ville' => 'max:50|required',
'contact_country' => 'integer|required'
];
}
}

View file

@ -1,76 +0,0 @@
<?php
namespace App\Traits;
use App\Statistique;
use DateTime;
trait GraphTrait
{
// ------ Make Labels
public function getLabelsForStats($startdate, $enddate)
{
// ---- Calcul de l'intervalle en jour
$datetime1 = new DateTime($startdate);
$datetime2 = new DateTime($enddate);
$interval = $datetime1->diff($datetime2);
$days = $interval->format('%a');
// ---- Labels des graphiques
$labels = [];
for ($i = 0; $i <= $days; $i++) {
$date = date('d/m/Y', strtotime("+" . $i . " days", strtotime($startdate)));
array_push($labels, $date);
}
return $labels;
}
// ---- Data for global graph
public function getDataForCamp($labels, $campid)
{
$dataGlobal = [];
foreach ($labels as $label) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
$stat = Statistique::where(['stat_campId' => $campid])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
if (isset($stat)) {
$dataGlobal[] = $stat;
} else {
$dataGlobal[] = 0;
}
}
return $dataGlobal;
}
// ---- Data for one coupon on one camp
public function getDataForCoupon($labels, $campid, $coupon)
{
$dataCoupon = [];
foreach ($labels as $label) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
$stat = Statistique::where(['stat_campId' => $campid, 'stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
if (isset($stat)) {
$dataCoupon[] = $stat;
} else {
$dataCoupon[] = 0;
}
}
return $dataCoupon;
}
// ---- Data for one coupon all camp
public function getDataForCouponAllCamp($labels, $coupon)
{
$dataCoupon = [];
foreach ($labels as $label) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
$stat = Statistique::where(['stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
if (isset($stat)) {
$dataCoupon[] = $stat;
} else {
$dataCoupon[] = 0;
}
}
return $dataCoupon;
}
}

View file

@ -1,11 +1,6 @@
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"name": "uwil/mesbr",
"description": "Webcoupon management system",
"type": "project",
"require": {
"php": "^7.3",
@ -22,7 +17,6 @@
"ldc/ldccrmv2client": "^3.0.5",
"picqer/php-barcode-generator": "^0.3.0",
"sentry/sentry-laravel": "^4.13",
"szymach/c-pchart": "^3.0",
"uxweb/sweet-alert": "^2.0",
"vladimir-yuldashev/laravel-queue-rabbitmq": "^11.3"
},

73
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "30db3ec95147621d8486d7ad5796a124",
"content-hash": "1b3d7e201bf5b5d95441c22f9c4d2265",
"packages": [
{
"name": "barryvdh/laravel-dompdf",
@ -6572,77 +6572,6 @@
],
"time": "2024-11-08T15:21:10+00:00"
},
{
"name": "szymach/c-pchart",
"version": "v3.0.17",
"source": {
"type": "git",
"url": "https://github.com/szymach/c-pchart.git",
"reference": "c022568da78f73bb7acf7db7a974934a434d47d7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/szymach/c-pchart/zipball/c022568da78f73bb7acf7db7a974934a434d47d7",
"reference": "c022568da78f73bb7acf7db7a974934a434d47d7",
"shasum": ""
},
"require": {
"ext-gd": "*",
"php": "^5.4|^7.0|^8.0"
},
"require-dev": {
"codeception/codeception": "^4.1.22",
"codeception/module-asserts": "^1.3",
"codeception/module-filesystem": "^1.0",
"phpunit/phpunit": "^5.7|^9.5",
"squizlabs/php_codesniffer": "^3.4"
},
"type": "library",
"extra": {
"branch-alias": {
"2.0": "2.0.x-dev",
"dev-master": "3.0.x-dev"
}
},
"autoload": {
"files": [
"constants.php"
],
"psr-4": {
"CpChart\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-3.0-only"
],
"authors": [
{
"name": "Jean-Damien Pogolotti",
"homepage": "http://www.pchart.net",
"role": "Creator of the original pChart library"
},
{
"name": "Piotr Szymaszek",
"homepage": "https://github.com/szymach",
"role": "Developer of the CpChart wrapper package"
}
],
"description": "Port of \"pChart\" library into PHP 5+",
"homepage": "https://github.com/szymach/c-pchart",
"keywords": [
"CpChart",
"c-pChart",
"charts",
"pchart",
"statistics"
],
"support": {
"issues": "https://github.com/szymach/c-pchart/issues",
"source": "https://github.com/szymach/c-pchart/tree/v3.0.17"
},
"time": "2023-05-27T11:12:02+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
"version": "v2.2.7",

View file

@ -2,7 +2,6 @@
return [
'updatebasket' => 1,
'delctrlcontact' => 2,
'impression' => 3,
'updatecontact' => 4,
'colors' => ['#ffe258', '#8c86ff', '#86ffbc', '#ffc286', '#86caff', '#ff86e7', '#ff869d', '#b9ff86', '#e7ff86', '#b986ff', '#ffae86', '#5c60ff', '#ff5c5c', '#3ba33b', '#8c86ff', '#86ffbc', '#ffc286', '#86caff', '#ff86e7', '#ff869d', '#b9ff86', '#e7ff86', '#b986ff', '#ffae86', '#5c60ff', '#ff5c5c', '#3ba33b']

14
resources/js/app.js vendored
View file

@ -306,17 +306,3 @@ $('body').on('click', '.expand', function(event){
contentDiv.slideUp();
}
})
$('.open-all-stats').on('click', function(event){
event.preventDefault();
$('.couponStats .content').each(function(){
$(this).slideDown(500);
})
})
$('.close-all-stats').on('click', function(event){
event.preventDefault();
$('.couponStats .content').each(function(){
$(this).slideUp(500);
})
})

View file

@ -0,0 +1,54 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fas fa-cogs"></i>
{{ __('Maintenance') }}
</h2>
<div class="error-log">
<h5><i class="fas fa-file-alt"></i> {{ __("Erreur d'appels") }} :</h5>
<canvas id="myChart" height="300" width="200"></canvas>
</div>
@endsection
@section('scripts')
<script src="{{ mix('js/Chart.js', 'build') }}" charset="utf-8"></script>
<script>
var truc = {!! json_encode($logs, JSON_UNESCAPED_SLASHES) !!};
var labels = [];
var errorCount = [];
$.each(truc, function(index, value) {
labels.push(value.month);
errorCount.push(value.count);
});
//---- GRAPH ERRORS
var ctx = document.getElementById("myChart").getContext('2d');
ctx.height = 300;
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: '{{ __("Erreurs") }}',
data: errorCount,
backgroundColor: 'rgba(255, 0, 0, 0.2)',
borderColor: 'rgba(255,0,0,1)',
borderWidth: 1
}]
},
options: {
maintainAspectRatio: false,
scales: {
yAxes: [{
ticks: {
beginAtZero: true,
stepSize: 1,
}
}]
}
}
});
</script>
@endsection

View file

@ -15,7 +15,7 @@
</div>
@endif
<div class="form-wrapper">
<form method="POST" action="{{ route('maintenance.user.create-submit') }}" autocomplete="off">
<form method="POST" action="{{ route('bo.users.store') }}" autocomplete="off">
@csrf
<div class="form-split">
<div class="form-field">

View file

@ -15,7 +15,7 @@
</div>
@endif
<div class="form-wrapper">
<form method="POST" action="{{ route('maintenance.user.edit-submit', ['user' => $user]) }}">
<form method="POST" action="{{ route('bo.users.update', $user) }}">
@csrf
@method('PUT')
<div class="form-split">

View file

@ -0,0 +1,51 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fas fa-cogs"></i>
{{ __('Users') }}
</h2>
<div class="user-app">
<div class="heading">
<h5><i class="fas fa-users-cog"></i> {{ __('Gestion des utilisateurs') }}</h5>
<a href="{{ route('bo.users.create') }}" class="add-button"><i class="fas fa-plus-square"></i> {{ __('Ajouter') }}</a>
</div>
@if (isset($users) && count($users) > 0)
<table>
<thead>
<th>{{ __('Nom') }}</th>
<th>{{ __('Email') }}</th>
<th>{{ __('Rôle') }}</th>
<th>{{ __('Site liés') }}</th>
<th></th>
</thead>
@foreach ($users as $user)
<tr>
<td><a href="{{ route('bo.users.edit', $user) }}">{{ $user->name }}</a></td>
<td>{{ $user->email }}</td>
<td>{{ $user->roles }}</td>
<td class="sites">
@foreach ($user->sites as $site)
<p>{{ $site->site_nom }}</p>
@endforeach
</td>
@if (Auth::user()->id === $user->id)
<td></td>
@else
<td>
<form action="{{ route('bo.users.destroy', $user) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit"><i class="fas fa-times"></i></button>
</form>
</td>
@endif
</tr>
@endforeach
</table>
@endif
</div>
@endsection

View file

@ -1,66 +0,0 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fas fa-users"></i>
{{ __('Créer un contact') }}
</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-wrapper">
<form action="{{ route('contact.store') }}" method="POST">
@csrf
<div class="form-split">
<div class="form-field">
<label>{{ __('Ref') }} *</label>
<input type="text" name="contact_ref" required>
</div>
<div class="form-field">
<label>{{ __('Email') }} *</label>
<input type="email" name="contact_email" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
<label>{{ __('Nom') }} *</label>
<input type="text" name="contact_nom" required>
</div>
<div class="form-field">
<label>{{ __('Prénom') }} *</label>
<input type="text" name="contact_prenom" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
<label>{{ __('Code Postal') }} *</label>
<input type="text" name="contact_cp" required>
</div>
<div class="form-field">
<label>{{ __('Ville') }} *</label>
<input type="text" name="contact_ville" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
<label for="contact_country">{{ __('Pays') }}</label>
<select name="contact_country" id="contact_country">
@foreach (Countries::toArray() as $country)
<option value="{{ $country->value }}">{{ $country->label }}</option>
@endforeach
</select>
</div>
</div>
<div class="form-field submit">
<span>{{ __('Les champs avec un * sont obligatoires') }}</span>
<input type="submit" value="{{ __('Enregistrer') }}">
</div>
</form>
</div>
@endsection

View file

@ -1,281 +0,0 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fas fa-users"></i>
{{ __('Editer le contact') }}
</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-wrapper">
<form action="{{ route('contact.update', $contact) }}" method="POST">
@csrf
@method('PUT')
<div class="form-split">
<div class="form-field">
<label>{{ __('Ref') }} *</label>
<input type="text" name="contact_ref" value="{{ $contact->contact_ref }}" required readonly>
</div>
<div class="form-field">
<label>{{ __('Email') }} *</label>
<input type="email" name="contact_email" value="{{ $contact->contact_email }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
<label>{{ __('Nom') }} *</label>
<input type="text" name="contact_nom" value="{{ $contact->contact_nom }}" required>
</div>
<div class="form-field">
<label>{{ __('Prénom') }} *</label>
<input type="text" name="contact_prenom" value="{{ $contact->contact_prenom }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
<label>{{ __('Code Postal') }} *</label>
<input type="text" name="contact_cp" value="{{ $contact->contact_cp }}" required>
</div>
<div class="form-field">
<label>{{ __('Ville') }} *</label>
<input type="text" name="contact_ville" value="{{ $contact->contact_ville }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
<label for="contact_country">{{ __('Pays') }}</label>
<select name="contact_country" id="contact_country">
@foreach (Countries::toArray() as $country)
<option value="{{ $country->value }}" @if ($contact->contact_country === $country->value) selected @endif>{{ $country->label }}</option>
@endforeach
</select>
</div>
</div>
<div class="form-field submit">
<span>{{ __('Les champs avec un * sont obligatoires') }}</span>
<input type="submit" value="{{ __('Mettre à jour') }}">
</div>
</form>
</div>
<h2>
<i class="fa fa-folder">
<i class="fas fa-ticket-alt"></i>
</i>
{{ __('Campagnes liées') }}
</h2>
<div class="contactWidgets">
<input type="hidden" name="contact_id" id="contact_id" value="{{ $contact->contact_id }}">
<input type="hidden" name="csrf" id="csrf" value="<?= csrf_token(); ?>">
@foreach ($campagnes as $campagne)
<div class="campagne" data-campid="{{ $campagne->camp_id }}" data-campsite = "{{ $campagne->camp_siteId }}">
<h4>{{$campagne->camp_name}}</h4>
<p>{{ __('Type') }} : {{ $campagne->camp_type->label }}</p>
<div class="loader">
<div class="lds-ripple">
<div></div>
<div></div>
</div>
<h4>{{ __('Chargement') }}...</h4>
</div>
</div>
@endforeach
</div>
@endsection
@section('scripts')
<script>
$('.loader').show();
function loadWidget(campagne){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
}
});
$.ajax({
url: '/bo/contact/'+ $('#contact_id').val() +'/load-widget',
type: 'POST',
data: {
camp_id : campagne.attr('data-campid'),
},
dataType: 'JSON',
success: function (reponse) {
if(reponse.success){
campagne.append(reponse.html);
$('.loader').hide();
} else {
campagne.append("{{ __('Erreur lors du chargement') }}");
}
},
error: function (e) {
console.log(e.responseText);
}
});
}
$('.campagne').each(function(index){
var camp = $(this);
loadWidget(camp);
});
// ---- widgets : Réinitialiser le mur
$('.campagne').on('click', '.update-wall', function(event){
event.preventDefault();
let campagne = $(this).parent().parent().parent('.campagne');
let campid = campagne.attr('data-campid');
let contactRef = $('#contact_ref').val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
}
});
$.ajax({
url: '/delctrlcontact',
type: 'POST',
data: {
refcamp: campid,
refadherent : contactRef,
admin : 1
},
dataType: 'JSON',
success: function (reponse) {
if(reponse.Statut == "OK"){
campagne.find('.widget').remove();
campagne.find('.loader').show();
loadWidget(campagne);
$.fancyInfo({
title : "<i class='fas fa-info-circle'></i> {{ __('Succès') }}",
message : "{{ __('Le mur a bien été réinitialisé.') }}",
okButton : "{{ __('Valider') }}",
noButton : "",
callback : function (value) {
}
});
} else {
console.log("{{ __('Erreur') }} : "+reponse.Code+" - "+reponse.Message)
}
},
error: function (e) {
console.log(e.responseText);
}
});
})
// ---- widgets : Ajout dans un panier ou création d'un panier
$('.campagne').on('click', '.update-basket', function(event){
let panierId = $(this).attr('data-panier');
let campagne = $(this).parent().parent().parent('.campagne');
let campid = campagne.attr('data-campid');
let campsiteid = campagne.attr('data-campsite');
let couponsList = $(this).parent('.widgetContent').find('.coupon');
let couponsTotal = couponsList.length;
let couponsAdded = 0;
let coupons = "";
couponsList.each(function(index){
let couponCode = $(this).find('input').attr('data-couponcode');
let couponQty = $(this).find('input').val();
coupons += "("+couponQty+")"+couponCode;
couponsAdded++;
if(couponsAdded < couponsTotal){
coupons += ",";
}
})
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
}
});
if(panierId != ""){
// ---- BasketId existant - Update du panier
$.ajax({
url: '/updatebasket',
type: 'POST',
data: {
basketid: panierId,
panier : coupons,
admin:1
},
dataType: 'JSON',
success: function (reponse) {
if(reponse.Statut == "OK"){
campagne.find('.widget').remove();
campagne.find('.loader').show();
loadWidget(campagne);
$.fancyInfo({
title : "<i class='fas fa-info-circle'></i> {{ __('Succès') }}",
message : "{{ __('Le panier a bien été mis à jour.') }}",
okButton : "{{ __('Valider') }}",
noButton : "",
callback : function (value) {
}
});
} else {
console.log("Erreur : "+reponse.Code+" - "+reponse.Message)
}
},
error: function (e) {
console.log(e.responseText);
}
});
} else {
// ---- BasketId non existant - Création du panier
$.ajax({
url: '/updatebasket',
type: 'POST',
data: {
refsite: campsiteid,
refcamp: campid,
refadherent: $('#contact_ref').val(),
nom: $('#contact_nom').val(),
prenom: $('#contact_prenom').val(),
email: $('#contact_email').val(),
code_postal: $('#contact_cp').val(),
commune: $('#contact_ville').val(),
pays: $('#contact_country').val(),
panier : coupons,
admin:1
},
dataType: 'JSON',
success: function (reponse) {
if(reponse.Statut == "OK"){
campagne.find('.widget').remove();
campagne.find('.loader').show();
loadWidget(campagne);
$.fancyInfo({
title : "<i class='fas fa-info-circle'></i> {{ __('Succès') }}",
message : "{{ __('Le panier a bien été créé.') }}",
okButton : "{{ __('Valider') }}",
noButton : "",
callback : function (value) {
}
});
} else {
console.log("Erreur : "+reponse.Code+" - "+reponse.Message)
}
},
error: function (e) {
console.log(e.responseText);
}
});
}
})
</script>
@endsection

View file

@ -1,111 +0,0 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fas fa-users"></i>
{{ __('Recherche de contacts') }}
<a href="{{ route('contact.create') }}" class="add-button">
<i class="fas fa-plus-square"></i>
{{ __('Ajouter') }}
</a>
</h2>
<div class="form-wrapper">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('contact.search') }}" method="GET" role="search">
<div class="form-split">
<div class="form-field">
<label for="searchName">{{ __('Nom') }}</label>
<input type="text" name="searchName" id="searchName" value="@if(isset($searchData['name'])){{$searchData['name']}}@endif">
</div>
<div class="form-field">
<label for="searchFirstname">{{ __('Prénom') }}</label>
<input type="text" name="searchFirstname" id="searchFirstname" value="@if(isset($searchData['firstname'])){{$searchData['firstname']}}@endif">
</div>
</div>
<div class="form-split">
<div class="form-field">
<label for="searchEmail">{{ __('Email') }}</label>
<input type="email" name="searchEmail" id="searchEmail" value="@if(isset($searchData['email'])){{$searchData['email']}}@endif">
</div>
<div class="form-field">
<label for="searchCp">{{ __('Code Postal') }}</label>
<input type="text" maxlength="6" name="searchCp" id="searchCp" value="@if(isset($searchData['cp'])){{$searchData['cp']}}@endif">
</div>
</div>
<div class="form-split">
<div class="form-field">
<label for="searchVille">{{ __('Ville') }}</label>
<input type="text" name="searchVille" id="searchVille" value="@if(isset($searchData['ville'])){{$searchData['ville']}}@endif">
</div>
<div class="form-field">
<label for="searchCountry">{{ __('Pays') }}</label>
<select name="searchCountry" id="searchCountry">
<option value="0">{{ __('Tous') }}</option>
@foreach (Countries::toArray() as $country)
<option
value="{{ $country->value }}"
@if(isset($searchData['pays']) && $searchData['pays'] == $country->value)
selected
@endif
>
{{ $country->label }}
</option>
@endforeach
</select>
</div>
</div>
<div class="form-field submit">
<input type="submit" value="{{ __('Rechercher') }}">
</div>
</form>
</div>
<div class="separator"></div>
@if(isset($contacts) && count($contacts)>0)
<div class="content-list">
<table>
<thead>
<th>{{ __('Ref') }}</th>
<th>{{ __('Nom') }}</th>
<th>{{ __('Email') }}</th>
<th>{{ __('Code Postal') }}</th>
<th>{{ __('Ville') }}</th>
<th>{{ __('Pays') }}</th>
</thead>
@foreach ($contacts as $contact)
@php
if (!in_array($contact->contact_country, Countries::toValues())) {
$contact->contact_country = 250;
}
@endphp
<tr>
<td>{{ $contact->contact_ref }}</td>
<td><a href="{{ route('contact.edit', $contact) }}">{{ $contact->contact_prenom }} {{$contact->contact_nom}}</a></td>
<td>{{ $contact->contact_email }}</td>
<td>{{ $contact->contact_cp }}</td>
<td>{{ $contact->contact_ville }}</td>
<td>{{ Countries::make($contact->contact_country)->label }}</td>
</tr>
@endforeach
<tfoot>
<tr>
<td colspan="7">
@if($search)
{{ $contacts->appends(request()->input())->links() }}
@endif
</td>
</tr>
</tfoot>
</table>
</div>
@endif
@endsection

View file

@ -1,80 +0,0 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fas fa-cogs"></i>
{{ __('Customers') }} {{ $site->site_nom }}
</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="user-app">
<div class="heading">
<form>
@csrf
<input type="email" name="email" placeholder="{{ __('Adresse email') }}" value="{{ $email }}" minlength="5" required>
<input type="submit" value="{{ __('Rechercher') }}">
</form>
</div>
@if (!is_null($email))
<table>
<thead>
<th>{{ __('Email') }}</th>
<th>{{ __('Pays') }}</th>
<th></th>
</thead>
<tbody>
@if (!count($campaigns))
<tr>
<td colspan="3">{{ __('Aucun résultat.') }}</td>
</tr>
@else
<tr>
<td>{{ $customer->email }}</td>
<td>{{ Countries::make($customer->country)->label }}</td>
<td><a href="#">Détails</a></td>
</tr>
@endif
</tbody>
</table>
@foreach ($campaigns as $campaign)
<div class="campagne" data-campid="102" data-campsite="LGL89">
<h4>{{ $campaign->camp_name }}</h4>
<p>Type : {{ $campaign->camp_type->label }}</p>
<div class="widget">
<div class="widgetContent">
<p>Pas de contrôle à réinitialiser</p>
</div>
</div>
</div>
@endforeach
@endif
{{-- <div class="contactWidgets">
<div class="campagne" data-campid="102" data-campsite="LGL89">
<h4>Mur BR Le Gaulois</h4>
<p>Type : Mur</p>
<div class="widget">
<div class="widgetContent">
<p>Pas de contrôle à réinitialiser</p>
</div>
</div>
</div>
<div class="campagne" data-campid="762" data-campsite="LGL89">
<h4>OP Gauloisirs</h4>
<p>Type : Panier</p>
<div class="widget">
<div class="widgetContent">
<input type="submit" class="update-basket" data-panier="" value="Valider">
</div>
</div>
</div>
</div> --}}
</div>
@endsection

View file

@ -1,73 +0,0 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fas fa-file-export"></i>
{{ __('Export des données coupons') }}
</h2>
<div class="selector-export">
<h4>{{ __('Période') }} :</h4>
<input type="date" name="startdate" id="startdate" value="{{ $startdate }}">
<input type="date" name="enddate" id="enddate" value="{{ $enddate }}">
<input type="hidden" name="csrf" id="csrf" value="<?= csrf_token(); ?>">
<a href="#" class="add-button export-data"><i class="fas fa-file-export"></i> {{ __('Exporter les données') }}</a>
</div>
@foreach ($sites as $site)
<h4>{{ $site->site_nom }} ({{ $site->site_id }})</h4>
@foreach ($site->coupons as $coupon)
<div class="inputGroup-export">
<input id="coupon[{{$coupon->coupon_id}}]" name="coupon[{{$coupon->coupon_id}}]" type="checkbox" value="{{$coupon->coupon_id}}"/>
<label for="coupon[{{$coupon->coupon_id}}]">{{$coupon->coupon_name}}</label>
</div>
@endforeach
@endforeach
<div class="export-btn">
<a href="#" class="add-button export-data"><i class="fas fa-file-export"></i> {{ __('Exporter les données') }}</a>
<a href="" download class="dl-pdf"></a>
</div>
@endsection
@section('scripts')
<script>
$('.export-data').on('click', function(event){
event.preventDefault();
let ids = [];
$('.inputGroup-export input').each(function(event){
if($(this).is(':checked')){
ids.push($(this).val());
}
});
if (ids.length === 0) {
alert('{{ __('Vous devez sélectionner au moins un coupon.') }}');
return;
}
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
}
});
$.ajax({
url: '/bo/export/coupon',
type: 'POST',
data: {
ids: ids,
startdate: $('#startdate').val(),
enddate: $('#enddate').val(),
},
dataType: 'JSON',
success: function (response) {
$.each(response, function(index, element){
$('.dl-pdf').attr("href", '/'+element);
$('.dl-pdf').get(0).click();
})
},
error: function (e) {
console.log(e.responseText);
}
});
})
</script>
@endsection

View file

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body style="font-family:Helvetica;">
<div class="wrapper">
<h1 style="text-align:center; margin-bottom:5px;">MesBR.eu</h1>
<h2 style="text-align:center; margin:5px;">{{ $coupon->coupon_name }}</h2>
<h3 style="margin-bottom:80px; margin-top:5px; text-align:center;">{{ __('Diffusions du') }} {{ date('d/m/Y', strtotime($startdate)) }} {{ __('au') }} {{ date('d/m/Y', strtotime($enddate)) }}</h3>
<img style="width:80%; margin-left:10%; margin-bottom:20px;" src="{{ $coupon->coupon_image }}" alt="">
<h3 style="margin:0; margin-bottom:10px;">{{ __('Détail du coupon') }}</h3>
<table style="font-size:12px;">
<tr style="background-color:#2d2d2d; color:#FFF; text-align:center;">
<th style="width:25%">{{ __('Nom') }}</th>
<th style="width:15%">{{ __('Code') }}</th>
<th style="width:10%">{{ __('Quantité totale') }}</th>
<th style="width:10%">{{ __('Qté totale diffusée') }}</th>
<th style="width:15%">{{ __('Date de début de diffusion') }}</th>
<th style="width:15%">{{ __('Date de fin de diffusion') }}</th>
</tr>
<tr style="background-color:#adb5bd; color:#000; text-align:center;">
<td style="padding:5px 0;">{{ $coupon->coupon_name }}</td>
<td>{{ $coupon->coupon_code }}</td>
<td>{{ $coupon->couponQuantity }}</td>
<td>{{ $coupon->couponFullPrinted }}</td>
@if($coupon->coupon_mindatediffusion != null)
<td>{{ date('d/m/Y', strtotime($coupon->coupon_mindatediffusion)) }}</td>
@else
<td>{{ __('n/c') }}</td>
@endif
@if($coupon->coupon_maxdatediffusion != null)
<td>{{ date('d/m/Y', strtotime($coupon->coupon_maxdatediffusion)) }}</td>
@else
<td>{{ __('n/c') }}</td>
@endif
</tr>
</table>
<h3>{{ __('Graphique de diffusion sur la période du') }} {{ date('d/m/Y', strtotime($startdate)) }} {{ __('au') }} {{ date('d/m/Y', strtotime($enddate)) }}</h3>
<p style="margin-bottom:20px;">{{ __('Nombre de coupons diffusés') }} : {{ $coupon->couponPrinted }}</p>
<img src="{{ $src }}" alt="">
</div>
</body>
</html>

View file

@ -1,7 +1,7 @@
<header>
<div class="marque-wrapper">
<div class="title">
<a href="{{ route('home') }}" class="logo">
<a href="/" class="logo">
<i class="fas fa-ticket-alt"></i>
<i class="fas fa-hand-holding"></i>
</a>

View file

@ -1,17 +1,17 @@
@php
$authUserRole = Auth::user()->roles;
@endphp
<nav>
<div class="menu-content">
<div class="menu-item-list">
<a href="{{ route('home') }}" class="menu-item @if(session()->get('active_route') == 'home' || session()->get('active_route') == 'camp') active @endif"><i class="fas fa-chart-line"></i> <span>Statistiques</span></a>
@if(Auth::user()->roles == "superadmin" || Auth::user()->roles == "admin")
<a href="{{ route('site.index') }}" class="menu-item @if(session()->get('active_route') == 'site') active @endif"><i class="fas fa-building"></i> <span>Sites</span></a>
<a href="{{ route('campagne.index') }}" class="menu-item @if(session()->get('active_route') == 'campagne') active @endif"><i class="fa fa-folder"><i class="fas fa-ticket-alt"></i></i> <span>Campagnes</span></a>
<a href="{{ route('coupon.index') }}" class="menu-item @if(session()->get('active_route') == 'coupon') active @endif"><i class="fas fa-ticket-alt"></i> <span>Coupons</span></a>
<a href="{{ route('contact.index') }}" class="menu-item @if(session()->get('active_route') == 'contact') active @endif"><i class="fas fa-users"></i> <span>Contacts</span></a>
<a href="{{ route('customer.index', ['site' => session()->has('site') ? session('site')->id : 1]) }}" class="menu-item @if(session()->get('active_route') == 'customer') active @endif"><i class="fas fa-users"></i> <span>{{ __('Customers') }}</span></a>
@if(in_array($authUserRole, ["superadmin", "admin"]))
<a href="{{ route('site.index') }}" class="menu-item @if(str_contains(Route::currentRouteName(), 'site')) active @endif"><i class="fas fa-building"></i> <span>Sites</span></a>
<a href="{{ route('campagne.index') }}" class="menu-item @if(str_contains(Route::currentRouteName(), 'campagne')) active @endif"><i class="fa fa-folder"><i class="fas fa-ticket-alt"></i></i> <span>Campagnes</span></a>
<a href="{{ route('coupon.index') }}" class="menu-item @if(str_contains(Route::currentRouteName(), 'coupon')) active @endif"><i class="fas fa-ticket-alt"></i> <span>Coupons</span></a>
@endif
@if(Auth::user()->roles == "superadmin")
<a href="{{ route('maintenance.show') }}" class="menu-item @if(session()->get('active_route') == 'maintenance') active @endif"><i class="fas fa-cogs"></i> <span>Maintenance</span></a>
<a href="{{ route('export.coupons') }}" class="menu-item @if(session()->get('active_route') == 'export') active @endif"><i class="fas fa-file-export"></i> <span>Exportation</span></a>
@if($authUserRole === "superadmin")
<a href="{{ route('bo.maintenance.index') }}" class="menu-item @if(str_contains(Route::currentRouteName(), 'bo.maintenance')) active @endif"><i class="fas fa-cogs"></i> <span>Maintenance</span></a>
<a href="{{ route('bo.users.index') }}" class="menu-item @if(str_contains(Route::currentRouteName(), 'bo.users')) active @endif"><i class="fas fa-users"></i> <span>{{ __('Users') }}</span></a>
@endif
<a href="{{ url('bo/logout') }}" class="menu-item logout"><i class="fas fa-sign-out-alt"></i> <span>Déconnexion</span></a>
</div>

View file

@ -1,104 +0,0 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fas fa-cogs"></i>
{{ __('Maintenance') }}
</h2>
<div class="user-app">
<div class="heading">
<h5><i class="fas fa-users-cog"></i> {{ __('Gestion des utilisateurs') }}</h5>
<a href="{{ route('maintenance.user.create') }}" class="add-button"><i class="fas fa-plus-square"></i> {{ __('Ajouter') }}</a>
</div>
@if (isset($users) && count($users) > 0)
<table>
<thead>
<th>{{ __('Nom') }}</th>
<th>{{ __('Email') }}</th>
<th>{{ __('Rôle') }}</th>
<th>{{ __('Site liés') }}</th>
<th></th>
</thead>
@foreach ($users as $user)
<tr>
<td><a href="{{ route('maintenance.user.edit', $user) }}">{{ $user->name }}</a></td>
<td>{{ $user->email }}</td>
<td>{{ $user->roles }}</td>
<td class="sites">
@foreach ($user->sites as $site)
<p>{{ $site->site_nom }}</p>
@endforeach
</td>
@if (Auth::user()->id === $user->id)
<td></td>
@else
<td><a href="{{ route('maintenance.user.destroy', $user) }}"><i class="fas fa-times delete-icon"></i></a></td>
@endif
</tr>
@endforeach
<tfoot>
<tr>
<td colspan="5">
</td>
</tr>
</tfoot>
</table>
<form method="POST" id="delete-hidden">
@csrf
@method('DELETE')
</form>
@endif
</div>
<div class="error-log">
<h5><i class="fas fa-file-alt"></i> {{ __("Erreur d'appels") }} :</h5>
<canvas id="myChart" height="300" width="200"></canvas>
</div>
@endsection
@section('scripts')
<script src="{{ mix('js/Chart.js', 'build') }}" charset="utf-8"></script>
<script>
var truc = {!! json_encode($logs, JSON_UNESCAPED_SLASHES) !!};
var labels = [];
var errorCount = [];
$.each(truc, function(index, value) {
labels.push(value[0]);
errorCount.push(value[1]);
})
labels = labels.reverse();
errorCount = errorCount.reverse();
//---- GRAPH ERRORS
var ctx = document.getElementById("myChart").getContext('2d');
ctx.height = 300;
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: '{{ __("Erreurs") }}',,
data: errorCount,
backgroundColor: 'rgba(255, 0, 0, 0.2)',
borderColor: 'rgba(255,0,0,1)',
borderWidth: 1
}]
},
options: {
maintainAspectRatio: false,
scales: {
yAxes: [{
ticks: {
beginAtZero: true,
stepSize: 1,
}
}]
}
}
});
</script>
@endsection

View file

@ -1,323 +0,0 @@
@extends('layouts.main')
@section('content')
<div class="title-stat">
<h2><i class="fas fa-chart-line"></i>Statistiques de la campagne</h2>
<div class="selector-stat">
<h4>Période :</h4>
<input id="startdate" name="startdate" type="date" value="{{ $startdate }}">
<input id="enddate" name="enddate" type="date" value="{{ $enddate }}">
<input id="csrf" name="csrf" type="hidden" value="<?php echo csrf_token(); ?>">
<a class="add-button reload-stats" id="reloader" data-campid="{{ $campagne->camp_id }}" href="#"><i
class="fas fa-chart-line"></i> Charger</a>
</div>
</div>
<div class="statistiquesGlobales">
<table class="campstat">
<thead>
<th colspan="2">{{ $campagne->camp_name }}</th>
</thead>
<tr>
<td>Référence</td>
<td>{{ $campagne->camp_id }}</td>
</tr>
<tr>
<td>Référence Site</td>
<td>{{ $campagne->camp_siteId }}</td>
</tr>
<tr>
<td>Type</td>
<td>{{ $campagne->camp_type->label }}</td>
</tr>
<tr>
<td>Impression limité</td>
<td>
@if ($campagne->camp_limitedPrinting === 1)
Oui
@else
Non
@endif
</td>
</tr>
<tr>
<td>Date de création</td>
<td>
{{ date('d/m/Y', strtotime($campagne->camp_createdate)) }}
</td>
</tr>
<tr>
<td>
Publiée ?
</td>
<td>
@if ($campagne->camp_published === 1)
<i class="fas fa-check-circle green"></i>
@else
<i class="fas fa-times-circle red"></i>
@endif
</td>
</tr>
</table>
<div class="graphStatsGlobales">
<h3>Consommation Globale</h3>
<canvas id="myChartGlobal" height="150" width="300"></canvas>
</div>
</div>
<div class="statistiquesContent">
<div class="couponStats">
<div class="title">
<h3>Les Coupons</h3>
<div class="btns">
<a class="add-button open-all-stats" href="#"><i class="fas fa-plus-square"></i> Tout Ouvrir</a>
<a class="add-button close-all-stats" href="#"><i class="fas fa-minus-square"></i> Tout Fermer</a>
</div>
</div>
@foreach ($campagne->coupons as $coupon)
<div class="couponStatsDetail">
<h4><span class="expand">{{ $coupon->coupon_name }}</span> <span class="couponLegend"
data-label="{{ $coupon->coupon_name }}" style="background-color:{{ $coupon->color }}"></span></h4>
<div class="content">
<figure>
<a data-fancybox="images" data-caption="{{ $coupon->coupon_name }}" href="{{ asset($coupon->coupon_image) }}"><img
src="{{ asset($coupon->coupon_image) }}" alt=""></a>
</figure>
<p><span>Code de traitement :</span> <span>{{ $coupon->coupon_code }}</span></p>
<p><span>Valeur :</span> <span>{{ str_replace('.', ',', number_format($coupon->coupon_value, 2)) }} €</span></p>
<p><span>Quantité Totale :</span> <span>{{ $coupon->quantity }}</span></p>
<p><span>Quantité Restante :</span> <span>{{ $coupon->remain }}</span></p>
<p><span>Quantité Diffusé :</span> <span>{{ $coupon->diffused }}</span></p>
<p><span>Quantité Imprimé :</span> <span>{{ $coupon->quantity - $coupon->remain }}</span></p>
@if ($coupon->coupon_mindatediffusion != null)
<p><span>Date de début de diffusion :</span>
<span>{{ date('d/m/Y', strtotime($coupon->coupon_mindatediffusion)) }}</span></p>
@else
<p><span>Date de début de diffusion :</span> <span>n/c</span></p>
@endif
@if ($coupon->coupon_maxdatediffusion != null)
<p><span>Date de fin de diffusion :</span>
<span>{{ date('d/m/Y', strtotime($coupon->coupon_maxdatediffusion)) }}</span></p>
@else
<p><span>Date de fin de diffusion :</span> <span>n/c</span></p>
@endif
@if ($coupon->coupon_published == 1)
<p><span>Publié ?</span><span><i class="fas fa-check-circle green"></i></span></p>
@else
<p><span>Publié ?</span><span><i class="fas fa-times-circle red"></i></span></p>
@endif
@if ($coupon->isPrintable == 1)
<p><span>Imprimable ?</span><span><i class="fas fa-check-circle green"></i></span></p>
@else
@if ($coupon->isPaused == 1)
<p><span>Imprimable ?</span><span><i class="fas fa-pause-circle orange"></i></span></p>
@else
<p><span>Imprimable ?</span><span><i class="fas fa-times-circle red"></i></span></p>
@endif
@endif
<input class="couponStatData" id="{{ $coupon->coupon_code }}" data-color="{{ $coupon->color }}"
data-name="{{ $coupon->coupon_name }}" type="hidden">
</div>
</div>
@endforeach
</div>
<div class="graphStats">
<h3>Consommation par coupons <i class="fas fa-eye"></i><i class="fas fa-eye-slash"></i></h3>
<canvas id="myChart" height="150" width="300"></canvas>
</div>
</div>
@endsection
@section('scripts')
<script src="{{ mix('js/Chart.js', 'build') }}" charset="utf-8"></script>
<script>
var myLine;
var myLineGlobal;
function load_graphs(campid, startdate, enddate) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
}
});
$.ajax({
url: '/loadStat',
type: 'POST',
data: {
campid: campid,
startdate: startdate,
enddate: enddate,
},
dataType: 'JSON',
success: function(response) {
//console.log("label", response.labels.reverse());
//Mise en place du graphique globa
var configGlobal = {
type: 'line',
data: {
labels: response.labels,
datasets: [{
label: "Coupons",
data: response.dataGlobal,
fill: false,
borderColor: '#de9700',
backgroundColor: '#de9700',
borderWidth: 1,
}]
},
options: {
maintainAspectRatio: true,
responsive: true,
legend: {
display: false,
},
title: {
display: false,
},
scales: {
yAxes: [{
ticks: {
fontColor: '#adb5bd'
},
}],
xAxes: [{
ticks: {
fontColor: '#adb5bd'
},
}]
}
}
}
var ctxGlobal = document.getElementById("myChartGlobal").getContext('2d');
myLineGlobal = new Chart(ctxGlobal, configGlobal);
//Mise en place du graphique spec
var dataSpecCp = [];
$.each(response.dataSpec, function(coupon_code, data) {
var dataset = {
label: $('#' + coupon_code).attr('data-name'),
borderColor: $('#' + coupon_code).attr('data-color'),
borderWidth: 1,
backgroundColor: $('#' + coupon_code).attr('data-color'),
fill: false,
data: data,
}
dataSpecCp.push(dataset);
})
var config = {
type: 'line',
data: {
labels: response.labels,
datasets: dataSpecCp,
},
options: {
maintainAspectRatio: true,
responsive: true,
legend: {
display: false,
position: 'bottom',
},
title: {
display: false,
text: 'Consommation de BR par jour'
},
scales: {
yAxes: [{
ticks: {
fontColor: '#adb5bd'
},
}],
xAxes: [{
ticks: {
fontColor: '#adb5bd'
},
}]
}
}
}
var ctx = document.getElementById("myChart").getContext('2d');
myLine = new Chart(ctx, config);
},
error: function(e) {
console.log(e.responseText);
}
});
}
window.onload = function() {
load_graphs($('#reloader').attr('data-campid'), $('#startdate').val(), $('#enddate').val());
// ---- SHOW ALL
$('.fa-eye').on('click', function() {
$('.couponLegend').each(function() {
$(this).find('.line').remove();
})
myLine.data.datasets.forEach(function(ds) {
ds.hidden = false;
});
myLine.update();
})
// ---- HIDE ALL
$('.fa-eye-slash').on('click', function() {
$('.couponLegend').each(function() {
$(this).append('<div class="line"></div>');
})
myLine.data.datasets.forEach(function(ds) {
ds.hidden = true;
});
myLine.update();
})
$('.couponStats').on('click', '.couponLegend', function(e) {
if ($(this).find('.line').length) {
$(this).find('.line').remove();
} else {
$(this).append('<div class="line"></div>');
}
var label = $(this).attr('data-label');
myLine.data.datasets.forEach(function(ds) {
if (ds.label == label) {
ds.hidden = !ds.hidden;
}
});
myLine.update();
})
}
$('.reload-stats').on('click', function(event) {
var campid = $(this).attr('data-campid');
var startdate = $('#startdate').val();
var enddate = $('#enddate').val();
event.preventDefault();
//console.log(enddate);
if (startdate != "" && enddate != "") {
teststartdate = new Date(startdate);
testenddate = new Date(enddate);
if (teststartdate < testenddate) {
myLine.destroy();
myLineGlobal.destroy();
load_graphs(campid, startdate, enddate);
} else {
$.fancyConfirm({
title: "<i class='fas fa-times-circle red'></i> Erreur",
message: "La date de fin doit être supérieure à la date de début.",
okButton: 'Valider',
noButton: "",
callback: function(value) {}
});
}
} else {
$.fancyConfirm({
title: "<i class='fas fa-times-circle red'></i> Erreur",
message: "Veuillez remplir les deux dates pour voir les données associées.",
okButton: 'Valider',
noButton: "",
callback: function(value) {}
});
}
})
</script>
@endsection

View file

@ -1,87 +0,0 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-tachometer-alt"></i>Tableau de bord</h2>
<h2 class="expand-action">
<a href="#" class="add-button open-all"><i class="fas fa-plus-square"></i> Tout Ouvrir</a>
<a href="#" class="add-button close-all"><i class="fas fa-minus-square"></i> Tout Fermer</a>
</h2>
<div class="chart-wrapper" id="chart-line1"></div>
@foreach ($sites as $site)
<h4>{{ $site->site_nom }} ({{ $site->site_id }})</h4>
<div class="siteContent">
@if (isset($site->campagnes) && $site->campagnes->count()>0)
@foreach ($site->campagnes as $campagne)
<div class="campContent">
<div class="campDetail">
<p>
@if ( $campagne->camp_published === 1)
<i class="fas fa-check-circle green"></i>
@else
<i class="fas fa-times-circle red"></i>
@endif
</p>
<p><a href="{{ route('camp.stats', $campagne) }}">{{ $campagne->camp_name }} ({{ $campagne->camp_id }})</a></p>
<p>{{ $campagne->camp_type->label }}</p>
<p>{{ $campagne->coupons->count() }} Coupon(s) <i class="fas fa-exclamation-triangle red tooltip"><span class="tooltiptext">Des coupons de cette campagne ne sont plus imprimables.</span></i></p>
<p>{{ date('d/m/Y', strtotime($campagne->camp_createdate)) }}</p>
<p>@if (isset($campagne->coupons) && $campagne->coupons->count()>0)<i class="fas fa-angle-down"></i>@endif</p>
</div>
@if (isset($campagne->coupons) && $campagne->coupons->count()>0)
<div class="coupons">
<table>
<thead>
<th>Code</th>
<th>Libellé</th>
<th>Valeur</th>
<th>Qté Totale</th>
<th>Qté Restante</th>
<th>Qté Diffusé</th>
<th>Qté Imp</th>
<th>Fin de diffusion</th>
<th>Statut</th>
</thead>
@foreach ($campagne->coupons as $coupon)
<tr class="couponDetail" @if($coupon->isPrintable) data-printable="1" @else data-printable="0" @endif>
<td>{{$coupon->coupon_code}}</td>
<td>{{ $coupon->coupon_name}}</td>
<td>{{ str_replace('.', ',', number_format($coupon->coupon_value, 2))}} €</td>
<td>{{$coupon->quantity}}</td>
<td>{{$coupon->remain}}</td>
<td>{{$coupon->diffused}}</td>
<td>{{$coupon->quantity - $coupon->remain}}</td>
@if($coupon->coupon_maxdatediffusion != null)
<td>{{ date('d/m/Y', strtotime($coupon->coupon_maxdatediffusion)) }}</td>
@else
<td>n/c</td>
@endif
<td>
@if ( $coupon->isPrintable == 1)
<i class="fas fa-check-circle green"></i>
@else
@if ($coupon->isPaused == 1)
<i class="fas fa-pause-circle orange"></i>
@else
<i class="fas fa-times-circle red"></i>
@endif
@endif
</td>
{{-- <p>{{$coupon->remain}}/{{$coupon->quantity}}</p> --}}
</tr>
@endforeach
</table>
</div>
@endif
</div>
{{-- LA CA MARCHE --}}
{{-- @dd('erherh') --}}
@endforeach
{{-- LA C PT --}}
@else
<h5>Pas de campagnes pour ce site</h5>
@endif
</div>
@endforeach
<svg></svg>
@endsection

View file

@ -1,64 +0,0 @@
@section('widget')
<div class="widget">
<div class="link-copied">
<i class="fas fa-copy"></i> Lien copié !
</div>
<p>Valeur Disponible : {{ $montantDispo }}€ / {{ $montantTotal }}€</p>
<p>URL publique : <span class="copy-url">{{ $campagne->url }}</span></p>
<div class="widgetContent">
@if ($reset)
<input type="submit" class="update-wall" value="Réinitialiser les contrôles">
@else
<p>Pas de contrôle à réinitialiser</p>
@endif
</div>
@if (isset($logs) && !empty($logs))
<div>
<h4><i class="fas fa-file-alt"></i> Logs :</h4>
<div class="logs-wrapper">
<table class="logs">
<thead>
<th>Date</th>
<th>Action</th>
<th>Message</th>
<th>Source</th>
</thead>
@foreach ($logs as $log)
<tr>
<td>{{ date('d/m/Y H:i:s' , strtotime($log->created_at)) }}</td>
<td>
@switch($log->log_action)
@case(1)
Mise à jour de panier
@break
@case(2)
Remise à zéro du mur
@break
@case(3)
Impressions
@break
@endswitch
</td>
<td>
@if ($log->log_action == 3 || $log->log_action == 1)
{{ $log->log_message['Message'] }}
<ul>
@foreach ($log->log_message['Coupons'] as $coupons)
<li>{{ $coupons['qty'] }} bon(s), code {{ $coupons['cp_code'] }}</li>
@endforeach
</ul>
@else
{{ $log->log_message }}
@endif
</td>
<td>
{{ $log->log_source }}
</td>
</tr>
@endforeach
</table>
</div>
</div>
@endif
</div>
@endsection

View file

@ -1,64 +0,0 @@
@section('widget')
<div class="widget">
<div class="link-copied">
<i class="fas fa-copy"></i> Lien copié !
</div>
<p>URL publique : <span class="copy-url">{{ $campagne->url }}</span></p>
<div class="widgetContent">
@foreach ($coupons as $coupon)
<div class="coupon">
<p><i class="fas fa-chevron-right"></i>{{$coupon->coupon_code}} - {{$coupon->coupon_name}} :</p> <p>{{$coupon->qty}} coupon(s) actuellement</p><p>Ajouter <input type="text" data-couponcode="{{ $coupon->coupon_code }}" value="0"> Coupon(s)</p>
</div>
@endforeach
<input type="submit" class="update-basket" data-panier="{{ $panier }}" value="Valider">
</div>
@if (isset($logs) && !empty($logs))
<div>
<h4><i class="fas fa-file-alt"></i> Logs :</h4>
<div class="logs-wrapper">
<table class="logs">
<thead>
<th>Date</th>
<th>Action</th>
<th>Message</th>
<th>Source</th>
</thead>
@foreach ($logs as $log)
<tr>
<td>{{ date('d/m/Y H:i:s' , strtotime($log->created_at)) }}</td>
<td>
@switch($log->log_action)
@case(1)
Mise à jour de panier
@break
@case(2)
Remise à zéro du mur
@break
@case(3)
Impressions
@break
@endswitch
</td>
<td>
@if ($log->log_action == 3 || $log->log_action == 1)
{{ $log->log_message['Message'] }}
<ul>
@foreach ($log->log_message['Coupons'] as $coupons)
<li>{{ $coupons['qty'] }} bon(s), code {{ $coupons['cp_code'] }}</li>
@endforeach
</ul>
@else
{{ $log->log_message }}
@endif
</td>
<td>
{{ $log->log_source }}
</td>
</tr>
@endforeach
</table>
</div>
</div>
@endif
</div>
@endsection

View file

@ -1,19 +1,23 @@
<?php
use App\Http\Controllers\Bo\MaintenanceController;
use App\Http\Controllers\Fo\BasketController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
Auth::routes(['verify' => false, 'register' => false, 'reset' => false]);
Route::any('/', "RedirectController");
Route::group(['prefix' => 'bo', 'middleware' => ['auth', 'saveroute']], function () {
Route::get('/', function () {
return redirect(route('home'));
return redirect(route('campagne.index'));
});
Route::get('/home', 'StatistiqueController@index')->name('home');
Route::get('/statistiques/{campagne}', 'StatistiqueController@statdetail')->name('camp.stats');
// ---- Routes pour les ressources en CRUD
Route::resource('coupon', 'CouponController')->except(['show'])->middleware('admin');
Route::resource('site', 'SiteController')->except(['destroy', 'show']);
Route::resource('campagne', 'CampagneController')->except(['show']);
Route::resource('coupon', 'CouponController')->except(['show']);
// Routes campagne
Route::post('/campagne/{campaign}/add-coupons', 'CampagneController@addCoupons');
Route::post('/campagne/{campaign}/remove-coupon/{coupon}', 'CampagneController@removeCoupon');
@ -21,68 +25,33 @@ Route::group(['prefix' => 'bo', 'middleware' => ['auth', 'saveroute']], function
Route::delete('/campagne/delete-notification/{notification}', 'CampagneController@deleteNotification')->name('campaign.delete-notif');
Route::post('/campagne/{campaign}/showDemo', 'CampagneController@showDemo');
Route::post('/campagne/{campaign}/toggle-publish/{state}', 'CampagneController@togglePublish');
Route::resource('campagne', 'CampagneController')->except(['show'])->middleware('admin');
// Routes contact
Route::get('/contact/search', 'ContactController@search')->name('contact.search');
Route::post('/contact/{contact}/load-widget', 'ContactController@loadWidget');
Route::resource('contact', 'ContactController')->except(['show', 'destroy'])->middleware('admin');
Route::resource('site', 'SiteController')->except(['destroy', 'show'])->middleware('admin');
// ----- Routes de la partie maintenance
Route::group(['middleware' => ['superadmin']], function () {
Route::get('maintenance', 'MaintenanceController@show')->middleware('superadmin')->name('maintenance.show');
Route::get('maintenance/utilisateur/create', 'MaintenanceController@usercreate')
->name('maintenance.user.create');
Route::post('maintenance/utilisateur/create', 'MaintenanceController@userstore')
->name('maintenance.user.create-submit');
Route::get('maintenance/utilisateur/{user}/edit', 'MaintenanceController@useredit')
->name('maintenance.user.edit');
Route::put('maintenance/utilisateur/{user}/edit', 'MaintenanceController@userupdate')
->name('maintenance.user.edit-submit');
Route::delete('maintenance/utilisateur/{user}', 'MaintenanceController@userdestroy')
->name('maintenance.user.destroy');
});
// ---- Logout
Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
// ---- Route de changement de site
Route::post('/brand-change', 'BrandChangeController')->name('brand-change');
// ---- Route Export PDF
Route::get('/export', 'ExportController@show')->name('export.coupons');
Route::post('/export/coupon', 'ExportController@exportCoupons');
// VB : V2
Route::resource('{site}/customer', 'CustomersController');
});
// ---- Routes Ajax:
// ---- Ajout/Suppression de coupons dans une campagne
Route::post('/add-coupons-ajax', 'AjaxController@add_coupons_ajax');
Route::post('/remove-coupons-ajax', 'AjaxController@remove_coupons_ajax');
// ---- Publier/Depublier des coupons
Route::post('/unpublish-coupons-ajax', 'AjaxController@unpublishCouponsAjax');
Route::post('/publish-coupons-ajax', 'AjaxController@publishCouponsAjax');
// ---- Impressions de coupons
Route::post('/ajx_impression', 'AjaxController@impressionAjax');
// ---- Statistiques
Route::post('/loadStat', 'StatistiqueController@loadStats');
// ----- Routes API ------ //
/**
* Keep Legacy
*/
// API
Route::any('/updatecontact', 'ContactController@updateContact');
Route::any('/delctrlcontact', 'MurController@deleteControlContact');
Route::any('/mntdispocampagne', 'MurController@montantDispoCampagne');
Route::any('/mntdispocontact', 'MurController@montantDispoContact');
Route::any('/updatebasket', 'PanierController@updateBasket');
/// Panier
Route::any('/showbasket', 'PanierController@showBasket');
Route::any('/updatebasket', 'PanierController@updateBasket');
Route::any('/imprime', 'PanierController@printPanierSelect');
Route::any('/merci-panier', 'PanierController@getThanks');
Route::any('/getdetailcampaign', 'CampagneController@getDetail');
Route::any('/getdiffctccampaign', 'CampagneController@getDiffCamp');
Route::any('/imprimer', 'MurController@printMur');
Route::any('/merci', 'MurController@getThanks');
/// Print Legacy Panier
Route::post('/ajx_impression', 'AjaxController@impressionAjax');
Route::any('/index', 'AjaxController@backToIndex');
Route::any('/', "RedirectController");
/// Campagne
Route::post('/add-coupons-ajax', 'AjaxController@add_coupons_ajax');
Route::post('/remove-coupons-ajax', 'AjaxController@remove_coupons_ajax');
Route::any('/getdetailcampaign', 'CampagneController@getDetail');
/// Coupon
Route::post('/unpublish-coupons-ajax', 'AjaxController@unpublishCouponsAjax');
Route::post('/publish-coupons-ajax', 'AjaxController@publishCouponsAjax');
/**
@ -94,3 +63,11 @@ Route::name('fo.')->group(function() {
Route::get('/{basket:uuid}/print', [BasketController::class, 'print'])->name('print');
});
});
Route::prefix('bo')->name('bo.')->middleware(['auth', 'saveroute'])->group(function() {
Route::name('maintenance.')->prefix('maintenance')->group(function () {
Route::get('/', [MaintenanceController::class, 'index'])->name('index');
});
Route::resource('users', '\App\Http\Controllers\Bo\UserController');
});