feat: take all VB commits from old git repo

This commit is contained in:
Noah Lancien 2025-08-05 14:47:02 +02:00
parent 4ebbd47982
commit 0d648778ae
80 changed files with 2704 additions and 1890 deletions

1
.composer/.htaccess Normal file
View file

@ -0,0 +1 @@
Deny from all

View file

@ -2,12 +2,33 @@
namespace App;
use App\Enums\CampaignTypes;
use App\Models\Basket;
use App\Models\PrintedWalls;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Kwaadpepper\Enum\Traits\CastsEnums;
class Campagne extends Model
{
use SoftDeletes;
use CastsEnums;
public $enumCasts = [
'camp_type' => CampaignTypes::class
];
/**
* @var array
*/
protected $fillable = [
'camp_siteId',
'camp_name',
'camp_type',
'camp_limitedPrinting',
'camp_published'
];
/**
* @var string
@ -86,13 +107,20 @@ class Campagne extends Model
}
/**
* @var array
* printedWalls relation
* @return HasMany
*/
protected $fillable = [
'camp_siteId',
'camp_name',
'camp_type',
'camp_limitedPrinting',
'camp_published'
];
public function printedWalls()
{
return $this->hasMany(PrintedWalls::class, 'camp_id');
}
/**
* Basket model relation
* @return HasMany
*/
public function baskets()
{
return $this->hasMany(Basket::class);
}
}

View file

@ -2,6 +2,7 @@
namespace App;
use App\Models\BasketContent;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
@ -34,6 +35,40 @@ class Coupon extends Model
*/
protected $primaryKey = 'coupon_id';
/**
* @var array
*/
protected $fillable = [
'coupon_code',
'coupon_norme',
'coupon_gs1code',
'coupon_name',
'coupon_value',
'coupon_enablelimitquantity',
'coupon_limitquantity',
'coupon_enablelimitperiod',
'coupon_limitperiod',
'coupon_validity',
'coupon_mindatediffusion',
'coupon_maxdatediffusion',
'coupon_maxdatevalidity',
'coupon_thumbnail1',
'coupon_thumbnail2',
'coupon_thumbnail3',
'coupon_thumbnail4',
'coupon_image',
'coupon_published',
'coupon_logo_image',
'coupon_rcs',
'coupon_decoration_image',
'coupon_validity_text',
'coupon_site_contact',
'coupon_legal_mentions',
'coupon_legal_mentions_splitted',
'coupon_seuil_alert',
'coupon_treatment_center'
];
/**
* OneToMany
* Coupon -> Calendrier
@ -88,36 +123,11 @@ class Coupon extends Model
}
/**
* @var array
* BasketContent model relation
* @return HasMany
*/
protected $fillable = [
'coupon_code',
'coupon_norme',
'coupon_gs1code',
'coupon_name',
'coupon_value',
'coupon_enablelimitquantity',
'coupon_limitquantity',
'coupon_enablelimitperiod',
'coupon_limitperiod',
'coupon_validity',
'coupon_mindatediffusion',
'coupon_maxdatediffusion',
'coupon_maxdatevalidity',
'coupon_thumbnail1',
'coupon_thumbnail2',
'coupon_thumbnail3',
'coupon_thumbnail4',
'coupon_image',
'coupon_published',
'coupon_logo_image',
'coupon_rcs',
'coupon_decoration_image',
'coupon_validity_text',
'coupon_site_contact',
'coupon_legal_mentions',
'coupon_legal_mentions_splitted',
'coupon_seuil_alert',
'coupon_treatment_center'
];
public function basketContents()
{
return $this->hasMany(BasketContent::class);
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnum;
/**
* @method static self mur()
* value 0 Mur (POUR LES MURS)
* @method static self panier()
* value 1 Panier (POUR LES PANIERS)
* @method static self murss()
* value 2 Mur sans sélection (POUR LES MURS SANS SELECTION)
* @method static self paniers()
* value 3 Panier Sélectionnable (POUR LES PANIERS AVEC SELECTION)
*/
class CampaignTypes extends BaseEnum
{
protected static function values(): array
{
return [
'mur' => 0,
'panier' => 1,
'murss' => 2,
'paniers' => 3,
];
}
protected static function labels(): array
{
return [
'mur' => trans('Mur'),
'panier' => trans('Panier'),
'murss' => trans('Mur sans sélection'),
'paniers' => trans('Panier Sélectionnable'),
];
}
}

32
app/Enums/Countries.php Normal file
View file

@ -0,0 +1,32 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnum;
/**
* @method static self france()
* @method static self belgique()
* @method static self luxembourg()
*/
class Countries extends BaseEnum
{
protected static function values(): array
{
return [
'france' => 250,
'belgique' => 56,
'luxembourg' => 442,
];
}
protected static function labels(): array
{
return [
'france' => 'France',
'belgique' => 'Belgique',
'luxembourg' => 'Luxembourg',
];
}
}

32
app/Enums/UserRoles.php Normal file
View file

@ -0,0 +1,32 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnum;
/**
* @method static self superadmin()
* @method static self admin()
* @method static self marketing()
*/
class UserRoles extends BaseEnum
{
protected static function values(): array
{
return [
'superadmin' => 'superadmin',
'admin' => 'admin',
'marketing' => 'marketing'
];
}
protected static function labels(): array
{
return [
'superadmin' => trans('Super-Admin'),
'admin' => trans('Admin'),
'marketing' => trans('Marketing')
];
}
}

View file

@ -2,10 +2,8 @@
namespace App\Http\Controllers;
use App\Campagne;
use App\Coupon;
use App\Contact;
use App\Panier;
use App\Enums\CampaignTypes;
use App\PanierContent;
use App\Statistique;
use App\Mur;
@ -13,42 +11,14 @@ use App\Log;
use Illuminate\Http\Request;
use App\Traits\GenerateBR;
use App\Traits\CouponTrait;
use App\Http\Controllers;
use Carbon\Carbon;
class AjaxController extends Controller
{
use GenerateBR;
use CouponTrait;
// ---- Ajoute des coupons à une campagne
public function add_coupons_ajax(Request $request)
{
$camp_id = $request->input('campid');
$campagne = Campagne::where('camp_id', $camp_id)->first();
$ids = $request->input('ids');
$coupons = Coupon::find($ids);
$campagne->coupons()->attach($coupons);
return json_encode($coupons);
}
// ---- Efface des coupons d'une campagne
public function remove_coupons_ajax(Request $request)
{
$camp_id = $request->input('campid');
$campagne = Campagne::where('camp_id', $camp_id)->first();
$coupon_id = $request->input('couponid');
$coupon = Coupon::find($coupon_id);
$campagne->coupons()->detach($coupon_id);
return json_encode($coupon);
}
// ---- Dépublie un coupon
public function unpublish_coupons_ajax(Request $request)
public function unpublishCouponsAjax(Request $request)
{
$coupon_id = $request->input('couponid');
$coupon = Coupon::find($coupon_id);
@ -59,7 +29,7 @@ class AjaxController extends Controller
}
// ---- Publie un coupon
public function publish_coupons_ajax(Request $request)
public function publishCouponsAjax(Request $request)
{
$coupon_id = $request->input('couponid');
$coupon = Coupon::find($coupon_id);
@ -69,31 +39,8 @@ class AjaxController extends Controller
return json_encode($coupon);
}
// ---- Dépublie une campagne
public function unpublish_camp_ajax(Request $request)
{
$campid = $request->input('campid');
$campagne = Campagne::find($campid);
$campagne->camp_published = 0;
$campagne->save();
return json_encode($campagne);
}
// ---- Publie une campagne
public function publish_camp_ajax(Request $request)
{
$campid = $request->input('campid');
$campagne = Campagne::find($campid);
$campagne->camp_published = 1;
$campagne->save();
return json_encode($campagne);
}
// ---- Impression des BR
public function impression_ajax(Request $request)
public function impressionAjax(Request $request)
{
if ($request->session()->has('coupons')) {
@ -132,7 +79,7 @@ class AjaxController extends Controller
$coupons = '<TABLE width="100%" align="center" cellpadding="0" cellspacing="0" border="0">';
$coupons .= '<TR><TD width="100%" align="center"><div>';
if ($campagne->camp_type == 0) {
if ($campagne->camp_type->equals(CampaignTypes::mur())) {
// ---- POUR LES MURS
if (!isset($couponsToPrint)) {
die();
@ -167,7 +114,7 @@ class AjaxController extends Controller
$stat->save();
}//end if
}//end foreach
} elseif ($campagne->camp_type == 1) {
} elseif ($campagne->camp_type->equals(CampaignTypes::panier())) {
// ---- POUR LES PANIERS
if (!isset($panier)) {
die();
@ -235,7 +182,7 @@ class AjaxController extends Controller
$panier->panier_pending = 1;
}
$panier->save();
} elseif ($campagne->camp_type == 2) {
} elseif ($campagne->camp_type->equals(CampaignTypes::murss())) {
// ---- POUR LES MURS SANS SELECTION
$nbCoupon = 0;
$cps = $campagne->coupons()->get();
@ -266,7 +213,7 @@ class AjaxController extends Controller
$stat->save();
}//end if
}//end foreach
} elseif ($campagne->camp_type == 3) {
} elseif ($campagne->camp_type->equals(CampaignTypes::paniers())) {
// ---- POUR LES PANIERS AVEC SELECTION
if (!isset($couponsToPrint)) {
die();
@ -339,12 +286,12 @@ class AjaxController extends Controller
$contact = $request->session()->get('contact');
}
if ($campagne->camp_type == 0 || $campagne->camp_type == 2) {
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 == 1 || $campagne->camp_type == 3) {
} elseif ($campagne->camp_type->equals(CampaignTypes::panier()) || $campagne->camp_type->equals(CampaignTypes::paniers())) {
if ($request->session()->has('panier')) {
$panier = $request->session()->get('panier');
} else {
@ -353,289 +300,4 @@ class AjaxController extends Controller
return redirect(url('/') . '/?basketid=' . $panier->panier_ref);
}
}
// ---- Charge les widget d'assistance
public function load_widget(Request $request)
{
if (isset($request->camp_id)) {
$camp_id = $request->camp_id;
} else {
die;
}
if (isset($request->contact_hash)) {
$contact_hash = $request->contact_hash;
} else {
die;
}
$campagne = Campagne::where(['camp_id' => $camp_id])->first();
$contact = Contact::where(['contact_hash' => $contact_hash])->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);
}
}
if ($campagne->camp_type == 0 || $campagne->camp_type == 2) {
// ---- Pour les types murs
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 (sizeof($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));
}//end if
}
// ---- Montre les campagnes avec un compte de démo
public function show_demo(Request $request)
{
if (isset($request->camp_id)) {
$camp_id = $request->camp_id;
} else {
die;
}
$campagne = Campagne::where(['camp_id' => $camp_id])->first();
$siteId = $campagne->camp_siteId;
$demoContact = Contact::where(['contact_siteId' => $siteId, 'contact_ref' => 'DEMO'])->first();
if (!isset($demoContact)) {
$req = new \Illuminate\Http\Request();
$req->setMethod('POST');
$req->request->add([
'refsite' => $siteId,
'refadherent' => 'DEMO',
'prenom' => 'Compte',
'nom' => 'Démonstration',
'email' => 'demo@demo.fr',
'code_postal' => '72000',
'commune' => 'Le Mans',
'pays' => 250
]);
$contact = new Controllers\ContactController();
$res = $contact->updateContact($req);
$demoContact = Contact::where(['contact_siteId' => $siteId, 'contact_ref' => 'DEMO'])->first();
}
if ($campagne->camp_type == 0 || $campagne->camp_type == 2) {
// ---- DEMONSTRATION POUR LES MURS
$myRequest = new \Illuminate\Http\Request();
$myRequest->setMethod('POST');
$myRequest->request->add(['refcamp' => $camp_id, 'refadherent' => 'DEMO', 'admin' => 1]);
// ---- EFFACER LES CONTROLES SI EXISTANT
$mur = new Controllers\MurController();
$res = $mur->deleteControlContact($myRequest);
// ---- RETOURNE l'URL
$url = "/?refsite=" . $siteId . "&refcamp=" . $camp_id . "&hash=" . $demoContact->contact_hash;
return json_encode($url);
} else {
// ---- DEMONSTRATION POUR LES PANIERS
$panier = Panier::where(['panier_campId' => $camp_id, 'panier_contactId' => $demoContact->contact_id, 'panier_pending' => 1])->first();
if ($panier) {
$url = "/?basketid=" . $panier->panier_ref;
} else {
// --- Pas de panier Création d'un nouveau
// --- Récuperation des coupons de la campagne
$coupons = $campagne->coupons()->get();
foreach ($coupons as $key => $coupon) {
if (!$this->isAvailableToPrint($coupon, $campagne)) {
$coupons->forget($key);
}
}
$couponsTotal = sizeof($coupons);
$couponsAdded = 0;
$basketContent = "";
foreach ($coupons as $coupon) {
$basketContent .= "(1)" . $coupon->coupon_code;
$couponsAdded++;
if ($couponsAdded != $couponsTotal) {
$basketContent .= ",";
}
}
// --- création de l'objet request
$req = new \Illuminate\Http\Request();
$req->setMethod('POST');
$req->request->add([
'refsite' => $siteId,
'refcamp' => $camp_id,
'refadherent' => $demoContact->contact_ref,
'nom' => $demoContact->contact_nom,
'prenom' => $demoContact->contact_prenom,
'email' => $demoContact->contact_email,
'code_postal' => $demoContact->contact_cp,
'commune' => $demoContact->contact_ville,
'pays' => $demoContact->contact_country,
'panier' => $basketContent,
'admin' => 1
]);
$panier = new Controllers\PanierController();
$res = $panier->updateBasket($req);
$url = "/?basketid=" . $res->original['Panier']->Panier;
}//end if
return json_encode($url);
}//end if
}
// ---- MAINTENANCE : CLEAN DE LA BDD
// ---- Fonction de récap des contacts que l'on va effacer
public function get_clean_contacts_detail(Request $request)
{
$contacts = Contact::where('contact_updatedate', '<', Carbon::now()->subMonth())->get();
$date = Carbon::now();
$contact_count = 0;
foreach ($contacts as $contact) {
$paniers = $contact->paniers()->get();
$canbeDeleted = true;
foreach ($paniers as $panier) {
if ($panier->panier_pending == 1) {
$canbeDeleted = false;
}
}
if ($canbeDeleted) {
$contact_count++;
// $testcontact .= $contact->contact_id.", ";
}
}
return json_encode(['date' => $date, 'contact_count' => $contact_count]);
}
// ---- Fonction de nettoyage de la base contact
public function clean_contacts(Request $request)
{
$contacts = Contact::where('contact_updatedate', '<', Carbon::now()->subMonth())->get();
$testcontact = "";
foreach ($contacts as $contact) {
$paniers = $contact->paniers()->get();
$canbeDeleted = true;
foreach ($paniers as $panier) {
if ($panier->panier_pending == 1) {
$canbeDeleted = false;
}
}
$murs = $contact->murs()->get();
if (isset($murs) && !empty($murs)) {
$canbeDeleted = false;
}
if ($canbeDeleted) {
$contact->delete();
$testcontact .= $contact->contact_id . ", ";
}
}
return json_encode($testcontact);
}
// ---- Fonction de nettoyage de la base mur
public function clean_walls(Request $request)
{
$murs = Mur::where('mur_createdate', '<', Carbon::now()->subYear())->where(['mur_deleted' => 1])->get();
$testmur = "";
foreach ($murs as $mur) {
$mur->delete();
$testmur .= $mur->mur_id . ", ";
}
return json_encode($testmur);
}
// ---- Fonction de nettoyage de la base panier et panierContent
public function clean_baskets(Request $request)
{
$paniers = Panier::where('panier_createdate', '<', Carbon::now()->subMonth(2))->where(['panier_pending' => 0])->get();
$testpanier = "";
foreach ($paniers as $panier) {
$testpanier .= $panier->panier_id . ": ";
$panierContents = $panier->panierContents()->get();
foreach ($panierContents as $panierContent) {
$testpanier .= $panierContent->panier_content_id . ', ';
$panierContent->delete();
}
$panier->delete();
}
return json_encode($testpanier);
}
}

View file

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\v1;
use App\Campagne;
use App\Coupon;
use App\Enums\CampaignTypes;
use App\Http\Controllers\Controller;
use App\Http\Requests\Coupons\PrintRequest;
use App\Http\Resources\StatusResource;
@ -58,7 +59,7 @@ class CouponsController extends Controller
// TODO : Vérifier si les coupons sont dans la campagne
// TODO : Logs
$coupons = [];
if ($campagne->camp_type == 0) {
if ($campagne->camp_type->equals(CampaignTypes::mur())) {
// ---- POUR LES MURS
foreach ($couponsToPrint as $key => $coupon_code) {
$cp = Coupon::where(['coupon_code' => $coupon_code])->first();

View file

@ -4,20 +4,25 @@ namespace App\Http\Controllers\Api\v1;
use App\Calendrier;
use App\Campagne;
use App\Enums\CampaignTypes;
use App\Http\Requests\Customers\StoreRequest;
use App\Http\Resources\CustomersResource;
use App\Http\Resources\StatusResource;
use App\Models\Customers;
use App\Http\Controllers\Controller;
use App\Http\Requests\Customers\BasketRequest;
use App\Http\Requests\Customers\MurRequest;
use App\Http\Requests\Customers\PrintBasketRequest;
use App\Http\Resources\CouponsResource;
use App\Traits\CouponTrait;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Request;
use LDC\LDCCRM\CrmApiV2;
class CustomerController extends Controller
{
use CouponTrait;
use GenerateBR;
/**
* Display a listing of the resource.
@ -107,12 +112,22 @@ class CustomerController extends Controller
return new StatusResource(['status' => 'KO', 'code' => '501', 'message' => 'Not Implemented']);
}
/**
* Recupere le contenu d'un mur pour une campagne et un user
* @param MurRequest $request
* @return StatusResource
* @throws ValidationException
*/
public function mur(MurRequest $request)
{
$datas = $request->validated();
$customer = Customers::where('hashcode', $datas['hashcode'])->first();
$campagne = Campagne::find($datas['refcamp']);
if (!$campagne->camp_type->equals(CampaignTypes::mur())) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign is not mur.']);
}
if ($campagne->camp_published === 0) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign not found.']);
}
@ -158,4 +173,140 @@ class CustomerController extends Controller
'coupons' => CouponsResource::collection($coupons)
]);
}
/**
* Recupere le contenu d'un panier pour une campagne et un user
* @param BasketRequest $request
* @return StatusResource
* @throws ValidationException
*/
public function basket(BasketRequest $request)
{
$montantDispo = 0;
$montantTotal = 0;
$nbCoupons = 0;
$couponTotal = 0;
$coupons = [];
$datas = $request->validated();
$customer = Customers::where('hashcode', $datas['hashcode'])->first();
$campagne = Campagne::find($datas['refcamp']);
if (!$campagne->camp_type->equals(CampaignTypes::panier())) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign is not basket.']);
}
if ($campagne->camp_published === 0) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign not found.']);
}
$basket = $customer->baskets()->where('campagne_id', $campagne->camp_id)->first();
if (is_null($basket)) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Basket not found.']);
}
foreach ($basket->contents as $content)
{
$published = true;
$nbCoupons += $content->quantity;
$couponTotal += $content->printed;
$montantTotal += ($content->coupon->coupon_value * $content->printed);
$coupon = $content->coupon()->whereRaw("coupon_published = 1 AND (coupon_mindatediffusion IS NULL OR coupon_mindatediffusion <= NOW()) AND (coupon_maxdatediffusion IS NULL OR coupon_maxdatediffusion >= NOW()) AND (coupon_maxdatevalidity IS NULL OR coupon_maxdatevalidity >= NOW())")->first();
if (!is_null($coupon))
{
// ---- Contrôle des calendriers de diffusion
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
if (!$calendars->isEmpty()) {
$published = false;
foreach ($calendars as $calendar) {
if (strtotime(date('Y-m-d H:i:s')) > strtotime($calendar->calendrier_startdate) && strtotime(date('Y-m-d H:i:s')) < strtotime($calendar->calendrier_enddate)) {
$published = true;
}
}
}
if ($published){
$montantDispo += ($coupon->coupon_value * $content->quantity);
$montantTotal += ($coupon->coupon_value * $content->quantity);
$couponTotal += $content->quantity;
$coupons = array_merge($coupons, [
'quantity' => $content->quantity,
'coupon' => new CouponsResource($coupon)
]);
}
}
}
return new StatusResource([
'status' => "OK",
'name' => $campagne->camp_name,
'limited_printing' => $campagne->camp_limitedPrinting,
'available_coupon' => $nbCoupons,
'available_amount' => $montantDispo,
'total_coupon' => $couponTotal,
'total_amount' => $montantTotal,
'coupons' => $coupons
]);
}
public function printBasket(PrintBasketRequest $request)
{
$datas = $request->validated();
$customer = Customers::where('hashcode', $datas['hashcode'])->first();
$campagne = Campagne::find($datas['refcamp']);
if (!$campagne->camp_type->equals(CampaignTypes::panier())) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign is not basket.']);
}
if ($campagne->camp_published === 0) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign not found.']);
}
if ($campagne->site->crm_token === null) {
return new StatusResource(['status' => 'KO', 'code' => 500, 'message' => 'CRM Token is missing for site_id : ' . $campagne->site->site_id]);
}
if ($campagne->site->crm_password === null) {
return new StatusResource(['status' => 'KO', 'code' => 500, 'message' => 'CRM Password is missing for site_id : ' . $campagne->site->site_id]);
}
$basket = $customer->baskets()->where('campagne_id', $campagne->camp_id)->first();
if (is_null($basket)) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Basket not found.']);
}
$crm = new CrmApiV2(config('crm.CRM_ENDPOINT'), $campagne->site->crm_token, $campagne->site->crm_password);
try {
/**
* @var \LDC\LDCCRM\Models\Customer
*/
$crmInfos = $crm->getCustomer($customer->hashcode);
} catch (\Exception $e) {
Log::critical($e->getMessage());
return new StatusResource(['status' => 'KO', 'code' => 422, 'message' => 'Customer not found.']);
}
if (is_null($crmInfos)) {
return new StatusResource(['status' => 'KO', 'code' => 422, 'message' => 'Customer not found.']);
}
foreach ($basket->contents as $content)
{
$published = true;
$coupon = $content->coupon()->whereRaw("coupon_published = 1 AND (coupon_mindatediffusion IS NULL OR coupon_mindatediffusion <= NOW()) AND (coupon_maxdatediffusion IS NULL OR coupon_maxdatediffusion >= NOW()) AND (coupon_maxdatevalidity IS NULL OR coupon_maxdatevalidity >= NOW())")->first();
$b64img = $this->printCoupon($coupon, $customer, $crmInfos);
if (!is_null($coupon))
{
// ---- Contrôle des calendriers de diffusion
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
if (!$calendars->isEmpty()) {
$published = false;
foreach ($calendars as $calendar) {
if (strtotime(date('Y-m-d H:i:s')) > strtotime($calendar->calendrier_startdate) && strtotime(date('Y-m-d H:i:s')) < strtotime($calendar->calendrier_enddate)) {
$published = true;
}
}
}
if ($published){
// TODO : Print coupon
$b64img = $this->printCoupon($coupon, $customer, $crmInfos);
dd($b64img);
}
}
}
}
}

View file

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\v1;
use App\Calendrier;
use App\Campagne;
use App\Enums\CampaignTypes;
use App\Http\Controllers\Controller;
use App\Http\Requests\Murs\MursShowRequest;
use App\Http\Resources\CouponsResource;
@ -22,7 +23,7 @@ class MurController extends Controller
if ($campagne->camp_published === 0) {
return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign not found.']);
}
if ($campagne->camp_type !== 0) {
if ($campagne->camp_type->equals(CampaignTypes::mur())) {
return new StatusResource(['status' => 'KO', 'code' => 403, 'message' => 'Campaign type error.']);
}

View file

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\BrandChange\InvokeBrandChange;
class BrandChangeController extends Controller
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\InvokeBrandChange $request
* @return \Illuminate\Http\Response
*/
public function __invoke(InvokeBrandChange $request)
{
// TODO : Revoir le passage du site
$site = \App\Site::find($request->site_id);
session()->put('site', $site);
return redirect()->back();
}
}

View file

@ -6,17 +6,25 @@ use App\Campagne;
use App\Site;
use App\Coupon;
use App\Contact;
use App\Enums\CampaignTypes;
use App\Http\Requests\Campaign\AddCouponsCampaign;
use App\Http\Requests\Campaign\DeleteCampaign;
use App\Http\Requests\Campaign\RemoveCouponCampaign;
use App\Http\Requests\Campaign\RemoveNotifCampaign;
use App\Http\Requests\Campaign\ShowDemoCampaign;
use App\Http\Requests\Campaign\StoreCampaign;
use App\Http\Requests\Campaign\StoreNotifCampaign;
use App\Http\Requests\Campaign\UpdateCampaign;
use App\Mur;
use App\PanierContent;
use App\Notification;
use App\Panier;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use App\Traits\CouponTrait;
use Response;
class CampagneController extends Controller
{
// use BarcodeGenerator;
use CouponTrait;
/**
@ -26,8 +34,11 @@ class CampagneController extends Controller
*/
public function index()
{
$campagnes = Campagne::where('camp_siteId', session()->get('site')->site_id)->get();
return view('campagne.index')->with('campagnes', $campagnes);
// TODO : Revoir le passage du site id ?
$siteId = session()->get('site')->site_id;
$campagnes = Campagne::where('camp_siteId', $siteId)->get();
return view('campagnes.index')->with('campagnes', $campagnes);
}
/**
@ -37,38 +48,32 @@ class CampagneController extends Controller
*/
public function create()
{
return view('campagne.create');
return view('campagnes.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param StoreCampaign $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
public function store(StoreCampaign $request)
{
$campagne = new Campagne();
$campagne->camp_name = $request->input('camp_name');
$campagne->camp_type = $request->input('camp_type');
$campagne->camp_published = $request->input('camp_published');
if (null !== $request->input('camp_limitedPrinting')) {
$campagne->camp_limitedPrinting = $request->input('camp_limitedPrinting');
}
$campagne->camp_siteId = session()->get('site')->site_id;
// TODO : Revoir le passage du site
$site = session()->get('site');
$campagne = new Campagne();
$campagne->fill(array_merge($request->validated(), ['camp_siteId' => $site->site_id]));
$campagne->save();
if ($site->campagnes()->save($campagne)) {
// File::makeDirectory(public_path('/landings/' . $campagne->camp_id));
if ($campagne->camp_type == 0) {
if ($campagne->camp_type->equals(CampaignTypes::mur())) {
File::copyDirectory(resource_path('/views/template/mur'), public_path('/landings/' . $campagne->camp_id));
} elseif ($campagne->camp_type == 1) {
} elseif ($campagne->camp_type->equals(CampaignTypes::panier())) {
File::copyDirectory(resource_path('/views/template/panier'), public_path('/landings/' . $campagne->camp_id));
} elseif ($campagne->camp_type == 2) {
} elseif ($campagne->camp_type->equals(CampaignTypes::murss())) {
File::copyDirectory(resource_path('/views/template/murnoselection'), public_path('/landings/' . $campagne->camp_id));
} elseif ($campagne->camp_type == 3) {
} elseif ($campagne->camp_type->equals(CampaignTypes::paniers())) {
File::copyDirectory(resource_path('/views/template/panierselection'), public_path('/landings/' . $campagne->camp_id));
}
}
@ -84,45 +89,35 @@ class CampagneController extends Controller
*/
public function edit(Campagne $campagne)
{
$site = Site::findOrFail(session()->get('site')->id)->first();
// TODO : Revoir le passage du site id
$siteId = session()->get('site')->id;
$couponsLinked = $campagne->coupons()->get();
$campid = $campagne->camp_id;
$couponsNotLinked = Coupon::whereDoesntHave('campagnes', function ($q) use ($campagne) {
$q->where('campagne_id', $campagne->camp_id);
})->where('coupon_siteId', $siteId)->where('coupon_published', 1)->get();
$couponsNotLinked = Coupon::whereDoesntHave('campagnes', function ($q) use ($campid) {
$q->where('campagne_id', $campid);
})->where('coupon_siteId', session()->get('site')->id)->get();
return view('campagne.edit', ['campagne' => $campagne, 'coupons' => $couponsNotLinked, 'couponsLinked' => $couponsLinked]);
return view('campagnes.edit', ['campagne' => $campagne, 'coupons' => $couponsNotLinked]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param UpdateCampaign $request
* @param \App\Campagne $campagne
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Campagne $campagne)
public function update(UpdateCampaign $request, Campagne $campagne)
{
$site = Site::findOrFail(session()->get('site')->id)->first();
$couponsLinked = $campagne->coupons()->get();
$campid = $campagne->camp_id;
$couponsNotLinked = Coupon::whereDoesntHave('campagnes', function ($q) use ($campid) {
$q->where('campagne_id', $campid);
})->where('coupon_siteId', session()->get('site')->id)->get();
$campagne->fill($request->validated());
if (!isset($request->camp_limitedPrinting)) {
$campagne->camp_limitedPrinting = 0;
$campagne->save();
}
if ($campagne->update($request->all())) {
session()->flash('update_ok', 'La campagne a bien été modifiée');
if ($campagne->save()) {
session()->flash('update_ok', __('La campagne a bien été modifiée'));
} else {
session()->flash('update_nok', 'Erreur lors de l\'enregistrement');
session()->flash('update_nok', __("Erreur lors de l'enregistrement"));
}
return redirect()->route('campagne.edit', ['campagne' => $campagne]);
@ -131,45 +126,60 @@ class CampagneController extends Controller
/**
* Remove the specified resource from storage.
*
* @param DeleteCampaign $request
* @param \App\Campagne $campagne
* @return \Illuminate\Http\Response
*/
public function destroy(Campagne $campagne)
public function destroy(DeleteCampaign $request, Campagne $campagne)
{
$campagne->camp_published = 0;
$campagne->save();
// File::deleteDirectory(public_path('/landings/' . $campagne->camp_id));
if ($campagne->delete()) {
return redirect(route('campagne.index'));
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return view('campagne.edit')->with('campagne', $campagne);
return view('campagnes.edit')->with('campagne', $campagne);
}
}
/**
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function saveNotification(Request $request)
// ---- Ajoute des coupons à une campagne
public function addCoupons(AddCouponsCampaign $request, Campagne $campaign)
{
$notification = new Notification();
$notification->notif_name = $request->input('notif_name');
$notification->notif_email = $request->input('notif_email');
$notification->notif_campId = $request->input('notif_campId');
$coupons = Coupon::find($request->ids);
$campaign->coupons()->attach($coupons);
return json_encode($coupons);
}
// ---- Efface des coupons d'une campagne
public function removeCoupon(RemoveCouponCampaign $request, Campagne $campaign, Coupon $coupon)
{
$campaign->coupons()->detach($coupon);
return json_encode($coupon);
}
/**
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function saveNotification(StoreNotifCampaign $request, Campagne $campaign)
{
$notification = new Notification();
$notification->fill(array_merge($request->validated(), ['notif_campId' => $campaign->camp_id]));
$notification->save();
return redirect()->back();
}
/**
* @param RemoveNotifCampaign $request
* @param \App\Notification $notification
*
* @return array
*/
public function deleteNotification($id)
public function deleteNotification(RemoveNotifCampaign $request, Notification $notification)
{
$notification = Notification::find($id);
if ($notification->delete()) {
return redirect()->back();
} else {
@ -178,21 +188,107 @@ class CampagneController extends Controller
}
}
/**
* @param \App\Coupon $coupon
*
* @return array
*/
// public function deleteCoupon($id)
// {
// $coupon = Coupon::find($id);
// if ($notification->delete()) {
// return redirect()->back();
// } else {
// session()->flash('delete_nok', 'Erreur lors de la suppression');
// return redirect()->back();
// }
// }
// ---- Montre les campagnes avec un compte de démo
public function showDemo(ShowDemoCampaign $request, Campagne $campaign)
{
$siteId = $campaign->camp_siteId;
$demoContact = Contact::where(['contact_siteId' => $siteId, 'contact_ref' => 'DEMO'])->first();
if (!isset($demoContact)) {
$req = new \Illuminate\Http\Request();
$req->setMethod('POST');
$req->request->add([
'refsite' => $siteId,
'refadherent' => 'DEMO',
'prenom' => 'Compte',
'nom' => 'Démonstration',
'email' => 'demo@demo.fr',
'code_postal' => '72000',
'commune' => 'Le Mans',
'pays' => 250
]);
$contact = new \App\Http\Controllers\ContactController();
$res = $contact->updateContact($req);
$demoContact = Contact::where(['contact_siteId' => $siteId, 'contact_ref' => 'DEMO'])->first();
}
if ($campaign->camp_type->equals(CampaignTypes::mur()) || $campaign->camp_type->equals(CampaignTypes::murss())) {
// ---- DEMONSTRATION POUR LES MURS
$myRequest = new \Illuminate\Http\Request();
$myRequest->setMethod('POST');
$myRequest->request->add(['refcamp' => $campaign->camp_id, 'refadherent' => 'DEMO', 'admin' => 1]);
// ---- EFFACER LES CONTROLES SI EXISTANT
$mur = new \App\Http\Controllers\MurController();
$res = $mur->deleteControlContact($myRequest);
// ---- RETOURNE l'URL
$url = "/?refsite=" . $siteId . "&refcamp=" . $campaign->camp_id . "&hash=" . $demoContact->contact_hash;
return json_encode($url);
} else {
// ---- DEMONSTRATION POUR LES PANIERS
$panier = Panier::where(['panier_campId' => $campaign->camp_id, 'panier_contactId' => $demoContact->contact_id, 'panier_pending' => 1])->first();
if ($panier) {
$url = "/?basketid=" . $panier->panier_ref;
} else {
// --- Pas de panier Création d'un nouveau
// --- Récuperation des coupons de la campagne
$coupons = $campaign->coupons()->get();
foreach ($coupons as $key => $coupon) {
if (!$this->isAvailableToPrint($coupon, $campaign)) {
$coupons->forget($key);
}
}
$couponsTotal = count($coupons);
$couponsAdded = 0;
$basketContent = "";
foreach ($coupons as $coupon) {
$basketContent .= "(1)" . $coupon->coupon_code;
$couponsAdded++;
if ($couponsAdded != $couponsTotal) {
$basketContent .= ",";
}
}
// --- création de l'objet request
$req = new \Illuminate\Http\Request();
$req->setMethod('POST');
$req->request->add([
'refsite' => $siteId,
'refcamp' => $campaign->camp_id,
'refadherent' => $demoContact->contact_ref,
'nom' => $demoContact->contact_nom,
'prenom' => $demoContact->contact_prenom,
'email' => $demoContact->contact_email,
'code_postal' => $demoContact->contact_cp,
'commune' => $demoContact->contact_ville,
'pays' => $demoContact->contact_country,
'panier' => $basketContent,
'admin' => 1
]);
$panier = new \App\Http\Controllers\PanierController();
$res = $panier->updateBasket($req);
dd($res->original, $req);
$url = "/?basketid=" . $res->original['Panier']->Panier;
}
return json_encode($url);
}
}
// ---- Dépublie une campagne
public function togglePublish(Request $request, Campagne $campaign, int $state)
{
$campaign->camp_published = $state;
$campaign->save();
return json_encode($campaign);
}
public function getDetail(Request $request)
{
@ -203,7 +299,7 @@ class CampagneController extends Controller
$refcamp = $request->refcamp;
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
if (!$campagne) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
@ -216,7 +312,7 @@ class CampagneController extends Controller
$refsite = $request->refsite;
$site = Site::where(['site_id' => $refsite])->first();
if (!$site) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site n\'existe pas'
@ -227,7 +323,7 @@ class CampagneController extends Controller
}
if ($campagne->camp_siteId != $site->site_id) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 108,
'Message' => 'Pas de campagne pour ce site'
@ -235,7 +331,7 @@ class CampagneController extends Controller
}
if ($error) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -244,16 +340,16 @@ class CampagneController extends Controller
$enligne = ($campagne->camp_published == 1) ? "oui" : "non";
switch ($campagne->camp_type) {
case 0:
case CampaignTypes::mur():
$type = "mur";
break;
case 1:
case CampaignTypes::panier():
$type = "panier";
break;
case 2:
case CampaignTypes::murss():
$type = "mur sans sélection";
break;
case 3:
case CampaignTypes::paniers():
$type = "panier avec sélection";
break;
}
@ -314,7 +410,7 @@ class CampagneController extends Controller
$data['Coupons'][] = $codeTraitement;
}//end foreach
}//end if
return Response::json([
return response()->json([
'Statut' => 'OK',
'Détails Campagne' => $data
]);
@ -328,7 +424,7 @@ class CampagneController extends Controller
$refcamp = $request->refcamp;
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
if (!$campagne) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
@ -341,7 +437,7 @@ class CampagneController extends Controller
$refsite = $request->refsite;
$site = Site::where(['site_id' => $refsite])->first();
if (!$site) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site n\'existe pas'
@ -355,7 +451,7 @@ class CampagneController extends Controller
$refadherent = $request->refadherent;
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if (!$contact) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
@ -366,7 +462,7 @@ class CampagneController extends Controller
}
if ($error) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -399,6 +495,6 @@ class CampagneController extends Controller
$data['Codes traitement'][] = $codeTraitement;
}
}
return Response::json($data);
return response()->json($data);
}
}

View file

@ -1,24 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ChangeMarqueController extends Controller
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function __invoke(Request $request)
{
$siteId = $request->input('site_id');
$currentRoute = $request->input('current_route');
$site = \App\Site::findOrFail($siteId);
session()->put('site', $site);
return redirect('/bo/' . $currentRoute);
}
}

View file

@ -5,11 +5,21 @@ namespace App\Http\Controllers;
use App\Contact;
use App\Site;
use App\Campagne;
use Response;
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;
class ContactController extends Controller
{
use CouponTrait;
/**
* Display a listing of the resource.
*
@ -17,46 +27,34 @@ class ContactController extends Controller
*/
public function index(Request $request)
{
$contacts = Contact::where('contact_siteId', session()->get('site')->site_id)->orderBy('contact_createdate', 'DESC')->take(10)->get();
return view('contact.index')->with('contacts', $contacts)->with('search', false);
return view('contact.index')->with('search', false);
}
public function search_contact(Request $request)
public function search_contact(SearchContact $request)
{
session()->put('active_route', 'contact');
$page = $request->input('page');
$name = $request->input('searchName');
$firstname = $request->input('searchFirstname');
$email = $request->input('searchEmail');
$cp = $request->input('searchCp');
$ville = $request->input('searchVille');
$country = $request->input('searchCountry');
session()->put('active_route', 'contact');
if (isset($name) || isset($firstname) || isset($email) || isset($cp) || isset($ville) || isset($country)) {
$contacts = Contact::where('contact_siteId', session()->get('site')->site_id)
->searchFirstname($firstname)
->searchName($name)
->searchEmail($email)
->searchCp($cp)
->searchVille($ville)
->searchCountry($country)
->paginate(2, ['*'], 'page', $page);
$searchData = array(
'name' => $name,
'firstname' => $firstname,
'email' => $email,
'cp' => $cp,
'ville' => $ville,
'pays' => $country
);
return view('contact.index')->with('contacts', $contacts)->with('search', true)->with('searchData', $searchData);
} else {
$contacts = Contact::where('contact_siteId', session()->get('site')->site_id)->orderBy('contact_createdate', 'DESC')->take(10)->get();
$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);
return view('contact.index')->with('contacts', $contacts)->with('search', false);
}//end if
$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);
}
/**
@ -72,46 +70,22 @@ class ContactController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param StoreContact $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
public function store(StoreContact $request)
{
$validatedData = $request->validate([
'contact_ref' => 'required|unique:contact',
'contact_nom' => 'required',
'contact_prenom' => 'required',
'contact_email' => 'required',
'contact_cp' => 'required',
'contact_ville' => 'required',
'contact_country' => 'required'
]);
$contact = new Contact();
$contact->contact_nom = $request->input('contact_nom');
$contact->contact_prenom = $request->input('contact_prenom');
$contact->contact_ref = $request->input('contact_ref');
$contact->contact_email = $request->input('contact_email');
$contact->contact_cp = $request->input('contact_cp');
$contact->contact_ville = $request->input('contact_ville');
$contact->contact_country = $request->input('contact_country');
$contact->contact_hash = strtoupper(md5(uniqid(time(), true)));
// $site = Site::findOrFail(session()->get('site')->id)->first();
// 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();
$contacts = Contact::where('contact_siteId', session()->get('site')->site_id)->orderBy('contact_createdate', 'DESC')->take(10)->get();
$campagnes = Campagne::where(['camp_siteId' => $contact->contact_siteId, 'camp_published' => 1])->get();
return view('contact.edit', ['contact' => $contact, 'created' => true, 'contacts' => $contacts, 'campagnes' => $campagnes]);
return redirect()->route('contact.edit', ['contact' => $contact]);
}
/**
* Show the form for editing the specified resource.
*
@ -125,47 +99,26 @@ class ContactController extends Controller
return view('contact.edit', ['contact' => $contact, 'campagnes' => $campagnes]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Contact $contact
* @param UpdateContact $request
* @param \App\Contact $contact
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Contact $contact)
public function update(UpdateContact $request, Contact $contact)
{
$validatedData = $request->validate([
'contact_ref' => 'required',
'contact_nom' => 'required',
'contact_prenom' => 'required',
'contact_email' => 'required',
'contact_cp' => 'required',
'contact_ville' => 'required',
'contact_country' => 'required'
]);
$campagnes = Campagne::where(['camp_siteId' => $contact->contact_siteId, 'camp_published' => 1])->get();
if ($contact->update($request->all())) {
session()->flash('update_ok', 'La campagne a bien été modifiée');
$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');
session()->flash('update_nok', "Erreur lors de l'enregistrement");
}
return redirect()->route('contact.edit', ['contact' => $contact]);
}
public function updateContact(Request $request)
{
if (isset($request->admin)) {
$source = 'ADMIN';
} else {
$source = 'API';
}
// ---- INIT du log
// $log = new Log();
// $log->log_action = config('constants.updatecontact');
// $log->log_source = $source;
$error = false;
// ---- Contrôle des paramètres
if (isset($request->refadherent) && $request->refadherent != "") {
@ -215,11 +168,7 @@ class ContactController extends Controller
}
if ($error) {
// $log->log_params = json_encode(['refadherent' => $request->refadherent, 'refsite'=>$request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune]);
// $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([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -258,12 +207,7 @@ class ContactController extends Controller
$contact->contact_hash = strtoupper(md5(uniqid(time(), true)));
}
} else {
// $log->log_params = json_encode(['refadherent' => $request->refadherent, 'refsite'=>$request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune]);
// $log->log_refsite = $request->refsite;
// $log->log_statut = 'NOK';
// $log->log_message = "Le site spécifié n'existe pas";
// $log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site spécifié n\'existe pas'
@ -272,21 +216,114 @@ class ContactController extends Controller
}//end if
if ($contact->save()) {
return Response::json([
return response()->json([
'Statut' => 'OK',
'contact' => $contact
]);
} else {
// $log->log_params = json_encode(['refadherent' => $request->refadherent, 'refsite'=>$request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune]);
// $log->log_refsite = $request->refsite;
// $log->log_statut = 'NOK';
// $log->log_message = "Une erreur est survenue";
// $log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 109,
'Message' => 'Une erreur est survenue'
]);
}
}
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

@ -9,9 +9,10 @@ use App\Site;
use App\Campagne;
use App\Mouvement;
use App\Calendrier;
use App\Http\Requests\Coupons\StoreCoupons;
use App\Http\Requests\Coupons\UpdateCoupons;
use App\Traits\GenerateBR;
use App\Traits\CouponTrait;
use Validator;
class CouponController extends Controller
{
@ -25,23 +26,16 @@ class CouponController extends Controller
*/
public function index()
{
$campIds = Campagne::where('camp_siteId', session()->get('site')->site_id)
->get()
->pluck('camp_id')
->flatten()
->toArray();
$coupons = Coupon::where('coupon_siteId', session()->get('site')->id)->get();
// TODO : Revoir le passage du site
$site = session()->get('site');
$coupons = Coupon::where('coupon_siteId', $site->id)->get();
foreach ($coupons as $coupon) {
// ---- Calcul de la quantité mise à disposition grace aux fonctions dans CouponTrait.php
$coupon->coupon_quantity = $this->getFullQuantity($coupon);
// ---- Calcul de la quantité restante toutes campagnes comprises grace aux fonctions dans CouponTrait.php
$coupon->coupon_left = 0;
// $coupon->coupon_quantity - $this->getUsedQuantity($coupon);
$coupon->coupon_left = $coupon->coupon_quantity - $this->getUsedQuantity($coupon);
}
return view('coupon.index', ['coupons' => $coupons, 'camps' => $campIds]);
return view('coupon.index', ['coupons' => $coupons]);
}
/**
@ -51,51 +45,32 @@ class CouponController extends Controller
*/
public function create()
{
// TODO : Revoir le passage du site
$site = session()->get('site');
$campagnes = Campagne::where('camp_siteId', session()->get('site')->site_id)->get()
->pluck('camp_name', 'camp_id');
$site = Site::where(['id' => session()->get('site')->id])->first();
$site = Site::findOrFail($site->id);
return view('coupon.create')->with('campagnes', $campagnes)->with('site', $site);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param StoreCoupons $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
public function store(StoreCoupons $request)
{
$data = $request->all();
$v = Validator::make($data, [
'coupon_validity_text' => 'required',
'coupon_legal_mentions' => 'required',
'coupon_decoration_image' => 'required|image|mimes:jpeg,png',
'coupon_logo_image' => 'required|image|mimes:jpeg,png',
'coupon_rcs' => 'required',
'coupon_site_contact' => 'required',
]);
$v->sometimes('coupon_gs1code', 'required|image|mimes:jpeg', function ($input) {
return isset($input->coupon_norme);
});
if ($v->fails()) {
return redirect('bo/coupon/' . $coupon->coupon_id . '/edit')
->withErrors($v)
->withInput();
}
$site_id = $request->site_id;
$datas = $this->saveImg($request);
$coupon = new Coupon();
$coupon->fill($datas);
$coupon = new Coupon();
$coupon->coupon_code = $datas['coupon_code'];
$coupon->coupon_name = $datas['coupon_name'];
$coupon->coupon_value = $datas['coupon_value'];
// TODO : A revoir au moment ou on enlevera les images mobiles
if (isset($datas['coupon_thumbnail1'])) {
$coupon->coupon_thumbnail1 = $datas['coupon_thumbnail1'];
}
@ -111,46 +86,21 @@ class CouponController extends Controller
if (isset($datas['coupon_image'])) {
$coupon->coupon_image = $datas['coupon_image'];
}
if (isset($datas['coupon_norme'])) {
$coupon->coupon_norme = $datas['coupon_norme'];
$coupon->coupon_gs1code = $datas['coupon_gs1code'];
}
if (isset($datas['coupon_enablelimitquantity'])) {
$coupon->coupon_enablelimitquantity = $datas['coupon_enablelimitquantity'];
$coupon->coupon_limitquantity = $datas['coupon_limitquantity'];
}
if (isset($datas['coupon_enablelimitperiod'])) {
$coupon->coupon_enablelimitperiod = $datas['coupon_enablelimitperiod'];
$coupon->coupon_limitperiod = $datas['coupon_limitperiod'];
}
if (isset($datas['coupon_published'])) {
$coupon->coupon_published = $datas['coupon_published'];
} else {
//TODO : Voir si on peut mettre le set a 0 dans la request
if (!isset($datas['coupon_published'])) {
$coupon->coupon_published = 0;
}
if (isset($datas['coupon_legal_mentions_splitted'])) {
$coupon->coupon_legal_mentions_splitted = $datas['coupon_legal_mentions_splitted'];
} else {
if (!isset($datas['coupon_legal_mentions_splitted'])) {
$coupon->coupon_legal_mentions_splitted = 0;
}
$coupon->coupon_validity = $datas['coupon_validity'];
$coupon->coupon_mindatediffusion = $datas['coupon_mindatediffusion'];
$coupon->coupon_maxdatediffusion = $datas['coupon_maxdatediffusion'];
$coupon->coupon_maxdatevalidity = $datas['coupon_maxdatevalidity'];
$coupon->coupon_validity_text = $datas['coupon_validity_text'];
$coupon->coupon_legal_mentions = $datas['coupon_legal_mentions'];
if (isset($datas['coupon_decoration_image'])) {
$coupon->coupon_decoration_image = $datas['coupon_decoration_image'];
}
if (isset($datas['coupon_logo_image'])) {
$coupon->coupon_logo_image = $datas['coupon_logo_image'];
}
$coupon->coupon_rcs = $datas['coupon_rcs'];
$coupon->coupon_site_contact = $datas['coupon_site_contact'];
$coupon->coupon_seuil_alert = $datas['coupon_seuil_alert'];
$br_path = $this->generateBase($request, $coupon);
$coupon->coupon_image = $br_path;
$coupon->coupon_siteId = $site_id;
$coupon->save();
$site = Site::find($request->input('site_id'));
$site = Site::findOrFail($site_id);
$site->coupons()->save($coupon);
@ -160,15 +110,6 @@ class CouponController extends Controller
$coupon->mouvements()->save($mouvement);
}
if (isset($datas['mouvementNbre'])) {
foreach ($datas['mouvementNbre'] as $key => $value) {
$mouvement = new Mouvement();
$mouvement->mouvement_nombre = $value;
$mouvement->mouvement_created_at = $datas['mouvementDate'][$key];
$coupon->mouvements()->save($mouvement);
}
}
if (isset($datas['startdate'])) {
foreach ($datas['startdate'] as $key => $value) {
$calendar = new Calendrier();
@ -178,22 +119,7 @@ class CouponController extends Controller
}
}
$br_path = $this->generateBase($request, $coupon);
$coupon->coupon_image = $br_path;
$coupon->save();
return view('coupon.edit', ['coupon' => $coupon]);
}
/**
* Display the specified resource.
*
* @param \App\Coupon $coupon
* @return \Illuminate\Http\Response
*/
public function show(Coupon $coupon)
{
return view('coupon.show', ['coupon' => $coupon]);
return redirect()->route('coupon.edit', ['coupon' => $coupon]);
}
/**
@ -210,33 +136,13 @@ class CouponController extends Controller
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param UpdateCoupons $request
* @param \App\Coupon $coupon
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Coupon $coupon)
public function update(UpdateCoupons $request, Coupon $coupon)
{
$data = $request->all();
$v = Validator::make($data, [
'coupon_decoration_image' => 'image|mimes:jpeg,png',
'coupon_logo_image' => 'image|mimes:jpeg,png',
]);
$v->sometimes('coupon_gs1code', 'required|image|mimes:jpeg', function ($input) {
if (isset($input->coupon_gs1code_image_hidden)) {
return false;
}
return isset($input->coupon_norme);
});
if ($v->fails()) {
return redirect('bo/coupon/' . $coupon->coupon_id . '/edit')
->withErrors($v)
->withInput();
}
//TODO : Voir si on peut mettre le set a 0 dans la request
if (!isset($request->coupon_enablelimitquantity)) {
$coupon->coupon_enablelimitquantity = 0;
}
@ -252,11 +158,17 @@ class CouponController extends Controller
if (!isset($request->coupon_legal_mentions_splitted)) {
$coupon->coupon_legal_mentions_splitted = 0;
}
if ($coupon->update($this->saveImg($request))) {
$datas = $this->saveImg($request);
$datas = $this->saveImg($request);
// On sauvegarde les informations
if ($coupon->update($datas)) {
// Si l'update est OK on met à jour l'image du BR
$br_path = $this->generateBase($request, $coupon);
$coupon->coupon_image = $br_path;
$coupon->update($this->saveImg($request));
$coupon->save();
// Si on ajoute des BR
// TODO : Gestion de l'erreur si on ajoute une ligne vide
if (isset($datas['mouvementNbre'])) {
foreach ($datas['mouvementNbre'] as $key => $value) {
$mouvement = new Mouvement();
@ -265,6 +177,8 @@ class CouponController extends Controller
$coupon->mouvements()->save($mouvement);
}
}
// Si on ajoute une plage de diffusion
// TODO : Gestion de l'erreur si on ajoute une ligne vide
if (isset($datas['startdate'])) {
$coupon->calendriers()->delete();
foreach ($datas['startdate'] as $key => $value) {
@ -295,10 +209,10 @@ class CouponController extends Controller
$coupon->coupon_published = 0;
$coupon->save();
if ($coupon->delete()) {
return redirect(route('coupon.index'));
return redirect()->route('coupon.index');
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return view('coupon.edit')->with('coupon', $coupon);
return back();
}
}
@ -311,8 +225,6 @@ class CouponController extends Controller
{
$datas = collect($request->all());
$imgs = collect(array());
foreach ($datas as $key => $item) {
if ($key == 'coupon_image' || $key == 'coupon_gs1code' || $key == 'coupon_decoration_image' || $key == 'coupon_logo_image' || (substr($key, 7, 9) == 'thumbnail' && strlen($key) < 18)) {
if (isset($item)) {

View file

@ -0,0 +1,33 @@
<?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('printedWalls', 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

@ -9,6 +9,7 @@ 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;
@ -34,11 +35,12 @@ class ExportController extends Controller
}
// ------ AJAX Export
public function export_coupons(Request $request)
public function exportCoupons(PDFExport $request)
{
$ids = $request->input('ids');
$startdate = date('Y-m-d', strtotime($request->input('startdate')));
$enddate = date('Y-m-d', strtotime($request->input('enddate')));
$ids = $request->ids;
$startdate = $request->startdate;
$enddate = $request->enddate;
$coupons = Coupon::find($ids);
$labels = $this->getLabelsForStats($startdate, $enddate);
@ -47,8 +49,7 @@ class ExportController extends Controller
foreach ($coupons as $coupon) {
$cpName = str_replace(' ', '', $coupon->coupon_name);
$now = strtotime(now());
$full_path = 'export/' . $cpName . '_' . $now . '.pdf';
$full_path = 'export/' . $cpName . '_' . date('d_m_Y') . '.pdf';
$dataCoupon = $this->getDataForCouponAllCamp($labels, $coupon);
$coupon->couponQuantity = $this->getFullQuantity($coupon);
$coupon->couponFullPrinted = $this->getUsedQuantity($coupon);
@ -71,12 +72,10 @@ class ExportController extends Controller
$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));
$LabelSettings = array("NoTitle" => true);
$myPicture->Render('export/temp.png');
$view = view('export.template')->with(['src' => 'export/temp.png', 'coupon' => $coupon, 'startdate' => $startdate, 'enddate' => $enddate])->render();
// var_dump($view);
$pdf->loadHTML($view);
$pdf->save($full_path);
array_push($paths, $full_path);

View file

@ -1,35 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Campagne;
use Barryvdh\Debugbar\Facade as Debugbar;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
// $this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$test = Campagne::find(102);
Debugbar::info($test);
return view('home')->with([
'test' => $test,
]);
}
}

View file

@ -2,6 +2,8 @@
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;
@ -15,15 +17,8 @@ class MaintenanceController extends Controller
{
$users = User::all();
foreach ($users as &$user) {
$sites = $user->sites()->get();
$user->linkedSites = "";
foreach ($sites as $site) {
$user->linkedSites .= '<p>' . $site->site_nom . '</p>';
}
}
$dates = array(date('m/Y'));
for ($i = 1; $i < 12; $i++) {
for ($i = 1; $i < 6; $i++) {
$datebefore = date("m/Y", strtotime("-" . $i . " months"));
array_push($dates, $datebefore);
}
@ -33,14 +28,6 @@ class MaintenanceController extends Controller
array_push($count, [$month, $logs]);
}
// $logArray = array();
// foreach ($logs as $logMonth) {
// $count = count($logMonth);
// foreach ($logMonth as $log) {
// $date = Carbon::parse($log->created_at)->format('m/Y');
// }
// array_push($logArray, [$date, $count]);
// }
return view('maintenance.index')->with(['users' => $users, 'logs' => $count]);
}
@ -50,38 +37,17 @@ class MaintenanceController extends Controller
return view('user.create')->with(['sites' => $sites]);
}
public function userstore(Request $request)
public function userstore(StoreUsers $request)
{
$validatedData = $request->validate([
'email' => 'required|unique:users|email',
'name' => 'required',
'password' => 'required'
]);
$nom = $request->name;
$email = $request->email;
$password = $request->password;
$role = $request->roles;
$user = new User();
$user->name = $nom;
$user->email = $email;
$user->password = Hash::make($password);
$user->roles = $role;
$user = new User();
$user->fill($request->validated());
$user->password = Hash::make($request->password);
$user->save();
// MAJ des sites liés
if (isset($request->site)) {
$siteids = $request->site;
$sites = Site::whereIn('site_id', $siteids)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
}
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
$sites = Site::all();
$usersites = $user->sites()->get()->pluck('site_id')->toArray();
return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]);
return redirect()->route('maintenance.user.edit', ['user' => $user]);
}
public function useredit(User $user)
@ -91,55 +57,32 @@ class MaintenanceController extends Controller
return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]);
}
public function userdestroy(User $user)
public function userupdate(UpdateUsers $request, 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);
}
}
public function userupdate(Request $request, User $user)
{
// MAJ du User
$user->name = $request->name;
$user->email = $request->email;
$user->roles = $request->roles;
//MAJ du User
$user->fill($request->validated());
$user->save();
// MAJ des sites liés
$siteids = $request->site;
$sites = Site::whereIn('site_id', $siteids)->get()->pluck('id')->toArray();
//MAJ des sites liés
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
$marques = Auth::user()->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');
}
$users = User::all();
foreach ($users as &$user) {
$sites = $user->sites()->get();
$user->linkedSites = "";
foreach ($sites as $site) {
$user->linkedSites .= '<p>' . $site->site_nom . '</p>';
}
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);
}
$dates = array('02/2019');
for ($i = 1; $i < 12; $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]);
}
}

View file

@ -1,28 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Mouvement;
use App\Coupon;
use Illuminate\Http\Request;
class MouvementController extends Controller
{
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$mouvement = new Mouvement();
$mouvement->mouvement_type = $request->input('mouvement_type');
$mouvement->mouvement_nombre = $request->input('mouvement_nombre');
$mouvement->mouvement_commentaire = $request->input('mouvement_commentaire');
$coupon = Coupon::find($request->input('coupon_id'));
$coupon->mouvements()->save($mouvement);
}
}

View file

@ -9,7 +9,6 @@ use App\Mur;
use App\Log;
use App\Traits\CouponTrait;
use App\Traits\ThanksTrait;
use Response;
class MurController extends Controller
{
@ -28,7 +27,7 @@ class MurController extends Controller
if (!isset($datas['refsite'])) {
abort(404);
}
if (!isset($campagne) || $campagne->camp_published == 0 || ($campagne->camp_type != 0 && $campagne->camp_type != 2)) {
if (!isset($campagne) || $campagne->camp_published == 0 || ($campagne->camp_type->value != 0 && $campagne->camp_type->value != 2)) {
abort(404);
}
@ -123,7 +122,7 @@ class MurController extends Controller
$log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -138,7 +137,7 @@ class MurController extends Controller
$log->log_statut = 'NOK';
$log->log_message = "La campagne n'existe pas";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
@ -156,7 +155,7 @@ class MurController extends Controller
$log->log_message = "Le contact n'existe pas";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
@ -173,7 +172,7 @@ class MurController extends Controller
$log->log_statut = 'OK';
$log->log_message = $mur . " enregistrements ont été mis à jour.";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'OK',
'Message' => $mur . " enregistrements ont été mis à jour."
]);
@ -184,7 +183,7 @@ class MurController extends Controller
$log->log_statut = 'OK';
$log->log_message = 'Aucun contrôle à effacer';
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 110,
'Message' => 'Aucun contrôle à effacer'
@ -201,7 +200,7 @@ class MurController extends Controller
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
} else {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -211,7 +210,7 @@ class MurController extends Controller
// ------ Recuperation de la campagne
$camp = Campagne::where(['camp_id' => $refcamp])->first();
if (!$camp) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
@ -221,7 +220,7 @@ class MurController extends Controller
// ------ Récupération des coupons de la campagne
$coupons = $camp->coupons()->where(['coupon_published' => 1])->get();
if (count($coupons) == 0) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 105,
'Message' => 'La campagne est vide'
@ -237,7 +236,7 @@ class MurController extends Controller
$montantTotal = number_format($montantTotal, 2, ",", " ");
$montantTotal = str_pad($montantTotal, 6, "0", STR_PAD_LEFT);
return Response::json([
return response()->json([
'Statut' => 'OK',
'Message' => $montantTotal
]);
@ -265,7 +264,7 @@ class MurController extends Controller
}
if ($error) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -275,7 +274,7 @@ class MurController extends Controller
$campagne = Campagne::where(['camp_id' => $refcamp])->where('camp_type', 'IN', array(0,2))->first();
if (!$campagne) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
@ -284,7 +283,7 @@ class MurController extends Controller
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if (!$contact) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
@ -308,7 +307,7 @@ class MurController extends Controller
$montantDispo = number_format($montantDispo, 2, ",", " ");
$montantDispo = str_pad($montantDispo, 6, "0", STR_PAD_LEFT);
return Response::json([
return response()->json([
'Statut' => 'OK',
'Message' => $montantDispo
]);

View file

@ -7,12 +7,12 @@ use App\Panier;
use App\Campagne;
use App\Coupon;
use App\Contact;
use App\Enums\CampaignTypes;
use App\Site;
use App\Log;
use App\PanierContent;
use App\Traits\CouponTrait;
use App\Traits\ThanksTrait;
use Response;
class PanierController extends Controller
{
@ -40,7 +40,7 @@ class PanierController extends Controller
}
session()->put('campagne', $campagne);
if ($campagne->camp_type == 1) {
if ($campagne->camp_type->equals(CampaignTypes::panier())) {
$coupons = $this->getCouponsPublished($campagne);
} else {
$panierContents = $this->getPanierContentPublished($panier);
@ -97,7 +97,7 @@ class PanierController extends Controller
$log->log_message = "Le panier n'existe pas";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
@ -115,7 +115,7 @@ class PanierController extends Controller
$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([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -136,7 +136,7 @@ class PanierController extends Controller
$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([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -148,7 +148,7 @@ class PanierController extends Controller
foreach ($coupons as $code => $qty) {
array_push($panierCoupons, ['cp_code' => $code, 'qty' => $qty]);
}
if (sizeof($coupons) == 0) {
if (count($coupons) == 0) {
die();
}
} else {
@ -156,7 +156,7 @@ class PanierController extends Controller
$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([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -196,7 +196,7 @@ class PanierController extends Controller
$log->log_message = "Le coupon ne correspond pas aux coupons liés a la campagne";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 110,
'Message' => 'Le coupon ne correspond pas aux coupons liés a la campagne'
@ -254,12 +254,12 @@ class PanierController extends Controller
$response->panierContent = $panCont;
return Response::json([
return response()->json([
'Statut' => 'OK',
'Panier' => $response
]);
} else {
return Response::json([
return response()->json([
'Statut' => 'OK',
'Panier' => $panier
]);
@ -269,7 +269,7 @@ class PanierController extends Controller
$log->log_statut = 'NOK';
$log->log_message = "Le panier n'existe pas";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
@ -280,7 +280,7 @@ class PanierController extends Controller
$log->log_statut = 'NOK';
$log->log_message = "Le panier n'existe pas";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
@ -292,13 +292,13 @@ class PanierController extends Controller
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
if (!$campagne || $campagne->camp_published == 0 || ($campagne->camp_type != 1 && $campagne->camp_type != 3)) {
if (!$campagne || $campagne->camp_published == 0 || ($campagne->camp_type->value != 1 && $campagne->camp_type->value != 3)) {
$log->log_params = json_encode(['refcamp' => $refcamp]);
$log->log_statut = 'NOK';
$log->log_message = "La campagne n'existe pas ou n'est pas un panier";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas ou n\'est pas un panier'
@ -320,7 +320,7 @@ class PanierController extends Controller
if (isset($request->refsite) && $request->refsite != "") {
$refsite = $request->refsite;
if ($refsite != $campagne->camp_siteId) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne ne correspond à aucune campagnes du site'
@ -381,7 +381,7 @@ class PanierController extends Controller
}
}
}
if (sizeof($coupons) == 0) {
if (count($coupons) == 0) {
die();
}
} else {
@ -403,7 +403,7 @@ class PanierController extends Controller
$log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
@ -442,7 +442,7 @@ class PanierController extends Controller
$log->log_message = "Le site spécifié n'existe pas";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site spécifié n\'existe pas'
@ -454,7 +454,7 @@ class PanierController extends Controller
$log->log_statut = 'NOK';
$log->log_message = "Une erreur est survenue";
$log->save();
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 109,
'Message' => 'Une erreur est survenue'
@ -551,12 +551,12 @@ class PanierController extends Controller
$response->panierContent = $panCont;
return Response::json([
return response()->json([
'Statut' => 'OK',
'Panier' => $response
]);
} else {
return Response::json([
return response()->json([
'Statut' => 'OK',
'Panier' => $panier
]);
@ -570,7 +570,7 @@ class PanierController extends Controller
if (isset($request->basketid) && $request->basketid != "") {
$basketid = $request->basketid;
} else {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
@ -579,7 +579,7 @@ class PanierController extends Controller
$panier = Panier::where('panier_ref', $basketid)->first();
if (!$panier) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
@ -594,7 +594,7 @@ class PanierController extends Controller
$contact = $panier->contact()->where(['contact_id' => $panier->panier_contactId])->first();
if (!$contact) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
@ -603,7 +603,7 @@ class PanierController extends Controller
$campagne = $panier->campagne()->where(['camp_id' => $panier->panier_campId])->first();
if (!$campagne) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
@ -612,7 +612,7 @@ class PanierController extends Controller
$site = $campagne->site()->first();
if ($site === null) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site n\'existe pas'
@ -621,7 +621,7 @@ class PanierController extends Controller
$allPanierContent = $panier->panierContents()->get();
if ($allPanierContent->count() == 0) {
return Response::json([
return response()->json([
'Statut' => 'KO',
'Code' => 108,
'Message' => 'Le panier n\'a pas de coupons liés'
@ -649,7 +649,7 @@ class PanierController extends Controller
$response->panierContent = $panCont;
return Response::json([
return response()->json([
'Statut' => 'OK',
'Informations Panier' => $response
]);

View file

@ -25,20 +25,6 @@ class StatistiqueController extends Controller
if (isset($site->campagnes)) {
$campagnes = $site->campagnes;
foreach ($campagnes as $campagne) {
switch ($campagne->camp_type) {
case 0:
$campagne->camp_type = "Mur";
break;
case 1:
$campagne->camp_type = "Panier";
break;
case 2:
$campagne->camp_type = "Mur sans sélection";
break;
case 3:
$campagne->camp_type = "Panier Sélectionnable";
break;
}
$coupons = $campagne->coupons;
foreach ($coupons as $coupon) {
$coupon->quantity = $this->getFullQuantity($coupon);
@ -62,20 +48,6 @@ class StatistiqueController extends Controller
{
$count = 0;
$colors = config('constants.colors');
switch ($campagne->camp_type) {
case 0:
$campagne->camp_type = "Mur";
break;
case 1:
$campagne->camp_type = "Panier";
break;
case 2:
$campagne->camp_type = "Mur sans sélection";
break;
case 3:
$campagne->camp_type = "Panier Sélectionnable";
break;
}
$coupons = $campagne->coupons;
foreach ($coupons as $coupon) {
@ -92,7 +64,7 @@ class StatistiqueController extends Controller
return view('stats.detail')->with(['campagne' => $campagne, 'startdate' => $startdate, 'enddate' => $enddate]);
}
public function load_stats(Request $request)
public function loadStats(Request $request)
{
$campid = $request->campid;
$startdate = $request->startdate;

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\BrandChange;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class InvokeBrandChange 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 [
'site_id' => 'exists:site,id|required'
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class AddCouponsCampaign 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 [
'ids' => 'required'
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class DeleteCampaign 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 [
//
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class RemoveCouponCampaign 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 [
//
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class RemoveNotifCampaign 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 [
//
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class ShowDemoCampaign 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 [
//
];
}
}

View file

@ -0,0 +1,35 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreCampaign 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 [
'camp_name' => 'min:5|required',
'camp_type' => 'integer|required',
'camp_published' => 'integer|required',
'camp_limitedPrinting' => 'sometimes|integer|required'
];
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class StoreNotifCampaign 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 [
'notif_name' => 'min:5|required',
'notif_email' => [
'required',
Rule::unique('notification')->where(function ($query) {
return $query->where('notif_campId', $this->campaign->camp_id);
}),
]
];
}
}

View file

@ -0,0 +1,35 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class UpdateCampaign 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 [
'camp_name' => 'min:5|required',
'camp_type' => 'integer|required',
'camp_published' => 'integer|required',
'camp_limitedPrinting' => 'sometimes|integer|required'
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Contact;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class LoadWidgetContact 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 [
'camp_id' => 'required|exists:campagne,camp_id'
];
}
}

View file

@ -0,0 +1,38 @@
<?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

@ -0,0 +1,38 @@
<?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

@ -0,0 +1,42 @@
<?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

@ -0,0 +1,75 @@
<?php
namespace App\Http\Requests\Coupons;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class StoreCoupons 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 [
'coupon_code' => [
'required',
Rule::unique('coupon', 'coupon_code')
],
'coupon_name' => 'string|required',
'coupon_value' => 'numeric|required',
'coupon_validity_text' => 'required',
'coupon_legal_mentions' => 'required',
'coupon_decoration_image' => 'required|image|mimes:jpeg,png',
'coupon_logo_image' => 'required|image|mimes:jpeg,png',
'coupon_rcs' => 'required',
'coupon_site_contact' => 'required',
'coupon_seuil_alert' => 'integer|required',
'coupon_enablelimitperiod' => 'sometimes|integer|required',
'coupon_enablelimitquantity' => 'sometimes|integer|required',
'coupon_mindatediffusion' => 'nullable',
'coupon_maxdatediffusion' => 'nullable',
'coupon_validity' => 'integer|required',
'coupon_maxdatevalidity' => 'nullable',
'coupon_legal_mentions_splitted' => 'sometimes|integer|required',
];
}
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->sometimes('coupon_gs1code', 'required|image|mimes:jpeg', function ($input) {
return isset($input->coupon_norme);
});
$validator->sometimes('coupon_limitquantity', 'integer|required', function ($input) {
return !is_null($input->coupon_enablelimitquantity);
});
$validator->sometimes('coupon_limitperiod', 'integer|required', function ($input) {
return !is_null($input->coupon_enablelimitperiod);
});
}
}

View file

@ -0,0 +1,82 @@
<?php
namespace App\Http\Requests\Coupons;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class UpdateCoupons 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 [
'coupon_code' => [
'required',
Rule::unique('coupon', 'coupon_code')->ignore($this->coupon->coupon_id, 'coupon_id')
],
'coupon_name' => 'string|required',
'coupon_value' => 'numeric|required',
'coupon_seuil_alert' => 'integer|required',
'coupon_enablelimitperiod' => 'sometimes|integer|required',
'coupon_enablelimitquantity' => 'sometimes|integer|required',
'coupon_mindatediffusion' => 'nullable',
'coupon_maxdatediffusion' => 'nullable',
'coupon_validity' => 'integer|required',
'coupon_maxdatevalidity' => 'nullable',
'coupon_treatment_center' => 'integer|required',
'coupon_validity_text' => 'required',
'coupon_legal_mentions' => 'required',
'coupon_rcs' => 'required',
'coupon_site_contact' => 'email|required',
'coupon_norme' => 'sometimes|integer|required',
'coupon_published' => 'sometimes|integer|required',
'coupon_legal_mentions_splitted' => 'sometimes|integer|required',
'coupon_decoration_image' => 'image|mimes:jpeg,png',
'coupon_logo_image' => 'image|mimes:jpeg,png',
];
}
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->sometimes('coupon_gs1code', 'required|image|mimes:jpeg', function ($input) {
if (isset($input->coupon_gs1code_image_hidden)) {
return false;
}
return isset($input->coupon_norme);
});
$validator->sometimes('coupon_limitquantity', 'integer|required', function ($input) {
return !is_null($input->coupon_enablelimitquantity);
});
$validator->sometimes('coupon_limitperiod', 'integer|required', function ($input) {
return !is_null($input->coupon_enablelimitperiod);
});
}
}

View file

@ -0,0 +1,45 @@
<?php
namespace App\Http\Requests\Customers;
use App\Http\Resources\StatusResource;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
class BasketRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'refcamp' => 'string|exists:campagne,camp_id|required',
'hashcode' => 'string|exists:customers,hashcode|required'
];
}
protected function failedValidation(Validator $validator)
{
if ($this->wantsJson()) {
throw new HttpResponseException(response()->json(new StatusResource([
'status' => 'KO',
'code' => 422,
'message' => $validator->errors()->messages()
]), 422));
}
}
}

View file

@ -0,0 +1,52 @@
<?php
namespace App\Http\Requests\Customers;
use App\Http\Resources\StatusResource;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;
class PrintBasketRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'refcamp' => 'string|exists:campagne,camp_id|required',
'hashcode' => 'string|exists:customers,hashcode|required'
];
}
/**
* failedValidation
* @param Validator $validator
* @return void
* @throws BindingResolutionException
* @throws HttpResponseException
*/
protected function failedValidation(Validator $validator)
{
if ($this->wantsJson()) {
throw new HttpResponseException(response()->json(new StatusResource([
'status' => 'KO',
'code' => 422,
'message' => $validator->errors()->messages()
]), 422));
}
}
}

View file

@ -0,0 +1,33 @@
<?php
namespace App\Http\Requests\Customers;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class SearchCustomers extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check()
&& in_array(Auth::user()->roles, [UserRoles::superadmin()->value, UserRoles::admin()->value]);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'sometimes|email|required'
];
}
}

View file

@ -0,0 +1,34 @@
<?php
namespace App\Http\Requests\Export;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class PDFExport 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 [
'ids' => 'required',
'startdate' => 'date|required',
'enddate' => 'date|required'
];
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace App\Http\Requests\Users;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreUsers 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 [
'email' => 'required|unique:users|email',
'name' => 'required',
'password' => 'min:8|required',
'site' => 'required',
'roles' => 'required'
];
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Http\Requests\Users;
use App\Enums\UserRoles;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class UpdateUsers 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 [
'email' => [
'required',
Rule::unique('users')->ignore($this->user->id)
],
'name' => 'required',
'site' => 'required',
'roles' => 'required'
];
}
}

View file

@ -14,7 +14,7 @@ class CouponsResource extends JsonResource
*/
public function toArray($request)
{
return [
$coupon = [
'code' => $this->coupon_code,
'name' => $this->coupon_name,
'value' => $this->coupon_value,
@ -25,6 +25,13 @@ class CouponsResource extends JsonResource
'mobile_image_unavailable' => $this->returnUrl($this->coupon_thumbnail4),
'validity_text' => $this->coupon_validity_text
];
if (isset($this->isUsed)){
return array_merge($coupon, [
'used' => $this->isUsed,
]);
}
return $coupon;
}
private function returnUrl($assets)

41
app/Models/Basket.php Normal file
View file

@ -0,0 +1,41 @@
<?php
namespace App\Models;
use App\Campagne;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Basket extends Model
{
use HasFactory;
/**
* Customer model relation
* @return BelongsTo
*/
public function customer()
{
return $this->belongsTo(Customers::class);
}
/**
* Campagne model relation
* @return BelongsTo
*/
public function campagne()
{
return $this->belongsTo(Campagne::class);
}
/**
* BasketContent model relation
* @return HasMany
*/
public function contents()
{
return $this->hasMany(BasketContent::class);
}
}

View file

@ -0,0 +1,31 @@
<?php
namespace App\Models;
use App\Coupon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class BasketContent extends Model
{
use HasFactory;
/**
* Basket model relation
* @return HasOne
*/
public function basket()
{
return $this->hasOne(Basket::class);
}
/**
* Coupon model relation
* @return HasOne
*/
public function coupon()
{
return $this->hasOne(Coupon::class, 'coupon_id', 'coupon_id');
}
}

View file

@ -70,4 +70,13 @@ class Customers extends Model
{
return $this->hasMany(PrintedWalls::class, 'customer_id', 'id');
}
/**
* Basket model relation
* @return HasMany
*/
public function baskets()
{
return $this->hasMany(Basket::class, 'customer_id', 'id');
}
}

View file

@ -21,6 +21,8 @@ class Notification extends Model
*/
public $timestamps = false;
protected $fillable = ['notif_name', 'notif_email', 'notif_campId'];
/**
* ManyToOne
* Notification -> Campagne

View file

@ -12,7 +12,7 @@ class AuthServiceProvider extends ServiceProvider
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
// 'App\Model' => 'App\Policies\ModelPolicy',
];
/**

View file

@ -6,8 +6,10 @@ use App\Campagne;
use App\Coupon;
use App\Contact;
use App\Calendrier;
use App\Enums\CampaignTypes;
use App\Models\Customers;
use App\Models\PrintedWalls;
use App\Mouvement;
use App\Mur;
use App\Panier;
use App\PanierContent;
@ -147,22 +149,28 @@ trait CouponTrait
public function isAvailableToPrint(Coupon $coupon, Campagne $campagne)
{
$availableToPrint = true;
// ---- Contrôle de la publication
if ($coupon->coupon_published == 0) {
$availableToPrint = false;
/**
* Contrôle de la publication de la campagne
*/
if ($campagne->camp_published === 0) {
return false;
}
// ---- Contrôle de la publication du coupon
if ($coupon->coupon_published === 0) {
return false;
}
// ---- Contrôle la date de début de diffusion
if ($coupon->coupon_mindatediffusion != null) {
if ($coupon->coupon_mindatediffusion !== null) {
if (strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)) {
$availableToPrint = false;
return false;
}
}
// ---- Contrôle la date de validité
if ($coupon->coupon_maxdatediffusion != null) {
if ($coupon->coupon_maxdatediffusion !== null) {
if (strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)) {
$availableToPrint = false;
return false;
}
}
@ -176,31 +184,25 @@ trait CouponTrait
}
}
if (!$pub) {
$availableToPrint = false;
return false;
}
}
if ($campagne->camp_published == 0) {
$availableToPrint = false;
}
return $availableToPrint;
return true;
}
public function isPausedToPrint(Coupon $coupon, Campagne $campagne)
{
$availableToPrint = true;
// ---- Contrôle la date de début de diffusion
if ($coupon->coupon_mindatediffusion != null) {
if ($coupon->coupon_mindatediffusion !== null) {
if (strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)) {
$availableToPrint = false;
return false;
}
}
// ---- Contrôle la date de validité
if ($coupon->coupon_maxdatediffusion != null) {
if ($coupon->coupon_maxdatediffusion !== null) {
if (strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)) {
$availableToPrint = false;
return false;
}
}
@ -214,11 +216,11 @@ trait CouponTrait
}
}
if (!$pub) {
$availableToPrint = false;
return false;
}
}
return $availableToPrint;
return true;
}
@ -263,28 +265,22 @@ trait CouponTrait
public function getFullQuantity(Coupon $coupon)
{
$mouvements = $coupon->mouvements()->get();
$nombre = array();
foreach ($mouvements as $mouvement) {
array_push($nombre, $mouvement->mouvement_nombre);
}
return array_sum($nombre);
return (int)Mouvement::where('mouvement_couponId', $coupon->coupon_id)->sum('mouvement_nombre');
}
public function getUsedQuantity(Coupon $coupon)
{
$countPrinted = 0;
$couponId = $coupon->coupon_id;
$campagnes = $coupon->campagnes()->get();
foreach ($campagnes as $campagne) {
if ($campagne->camp_type == 0 || $campagne->camp_type == 2) {
// Murs
$murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->get();
$countPrinted = $countPrinted + count($murs);
foreach ($coupon->campagnes as $campagne) {
if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) {
// Murs
$murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->count();
$countPrinted += $murs;
} else {
// Paniers
$campagneId = $campagne->camp_id;
$countPrinted = PanierContent::where('panier_content_couponId', $couponId)->whereHas('panier', function ($query) use ($campagneId) {
// Paniers
// TODO : Revoir la requete
$campagneId = $campagne->camp_id;
$countPrinted = PanierContent::where('panier_content_couponId', $coupon->coupon_id)->whereHas('panier', function ($query) use ($campagneId) {
$query->where('panier_campId', $campagneId);
})->sum('panier_content_printed');
}
@ -295,17 +291,15 @@ trait CouponTrait
public function getDiffusedQuantity(Coupon $coupon)
{
$countPrinted = 0;
$couponId = $coupon->coupon_id;
$campagnes = $coupon->campagnes()->get();
foreach ($campagnes as $campagne) {
if ($campagne->camp_type == 0 || $campagne->camp_type == 2) {
// Murs
$murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->get();
$countPrinted = $countPrinted + count($murs);
foreach ($coupon->campagnes as $campagne) {
if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) {
// Murs
$murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->count();
$countPrinted += $murs;
} else {
// Paniers
// Paniers
$campagneId = $campagne->camp_id;
$panierContents = PanierContent::where('panier_content_couponId', $couponId)->whereHas('panier', function ($query) use ($campagneId) {
$panierContents = PanierContent::where('panier_content_couponId', $coupon->coupon_id)->whereHas('panier', function ($query) use ($campagneId) {
$query->where('panier_campId', $campagneId);
})->get();
$panierContentCountPrinted = $panierContents->sum('panier_content_printed');
@ -323,7 +317,7 @@ trait CouponTrait
$enddate = date('Y-m-d H:i:s', strtotime($enddate));
$campagnes = $coupon->campagnes()->get();
foreach ($campagnes as $campagne) {
if ($campagne->camp_type == 0 || $campagne->camp_type == 2) {
if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) {
// Murs
$murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->whereBetween('mur_createdate', [$startdate, $enddate])->get();
$countPrinted = $countPrinted + count($murs);

View file

@ -18,8 +18,8 @@ trait GenerateBR
$hand_picture = 'build/assets/images/coupons/hand.png';
$mask_img = 'build/assets/images/coupons/mask.png';
if (null !== $request->input('site_id')) {
$site = Site::where(['id' => $request->input('site_id')])->first();
if (!is_null($request->site_id)) {
$site = Site::where(['id' => $request->site_id])->first();
} else {
$site = $coupon->site()->first();
}
@ -31,32 +31,10 @@ trait GenerateBR
$mask = imagecreatefrompng($mask_img);
list($maskWidth, $maskHeight) = getimagesize($mask_img);
// ---- Contact distributeur
$text = $coupon->coupon_site_contact;
if (strlen($text) < 30) {
$ImageFond = imagecreate(165, 27);
$box1 = imagettfbbox(8, 0, $arial, $text);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
$this->imagettftextSp($ImageFond, 8, 0, 5, 23, $black, $arial, $text, 0.01);
imagecolortransparent($ImageFond, $white);
imagecopy($mask, $ImageFond, 743, 365, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
} else {
$ImageFond = imagecreate(195, 27);
$box1 = imagettfbbox(7, 0, $arial, $text);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
$this->imagettftextSp($ImageFond, 7, 0, 5, 23, $black, $arial, $text, 0);
imagecolortransparent($ImageFond, $white);
imagecopy($mask, $ImageFond, 713, 365, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
}
// ----- Mentions légales + RCS
if ($coupon->coupon_legal_mentions_splitted == 0) {
$txt_mentions = $coupon->coupon_legal_mentions . " " . $coupon->coupon_rcs;
$ImageMentionFond = imagecreate(415, 100);
$boxMentions = imagettfbbox(7, 0, $arial, $txt_mentions);
$white = imagecolorallocate($ImageMentionFond, 255, 255, 255);
imagefilledrectangle($ImageMentionFond, 0, 0, 414, 99, $white);
$black = imagecolorallocate($ImageMentionFond, 0, 0, 0);
@ -66,8 +44,17 @@ trait GenerateBR
$this->imagettftextSp($ImageMentionFond, 7, 0, 15, $y, $black, $arial, $line, 0.01);
$y = $y + 9;
}
// imagecolortransparent($ImageMentionFond, $white);
$this->imagettftextSp(
$ImageMentionFond,
7,
0,
15,
$y,
$black,
$arialbd,
sprintf("%s : %s", __('Renseignements'), $coupon->coupon_site_contact),
0.01
);
imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond));
}
@ -86,9 +73,9 @@ trait GenerateBR
$black = imagecolorallocate($ImageFond, 0, 0, 0);
$blue = imagecolorallocate($ImageFond, 8, 169, 223);
$grey = imagecolorallocate($ImageFond, 219, 219, 221);
$this->imagettftext_contour($ImageFond, 95, 0, 5, 110, $grey, $impact, $textMontant, $blue, 3, 3, 3, 3);
$this->imagettftext_contour($ImageFond, 50, 0, 220, 55, $grey, $arial, $textEuro, $blue, 2, 2, 2, 2);
$this->imagettftext_contour($ImageFond, 16, 0, 0, 150, $grey, $impact, $libReduc, $blue, 1, 1, 1, 1);
$this->imagettftextContour($ImageFond, 95, 0, 5, 110, $grey, $impact, $textMontant, $blue, 3, 3, 3, 3);
$this->imagettftextContour($ImageFond, 50, 0, 220, 55, $grey, $arial, $textEuro, $blue, 2, 2, 2, 2);
$this->imagettftextContour($ImageFond, 16, 0, 0, 150, $grey, $impact, $libReduc, $blue, 1, 1, 1, 1);
imagecolortransparent($ImageFond, $white);
imagecopy($mask, $ImageFond, 360, 10, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
@ -107,13 +94,11 @@ trait GenerateBR
$textFiliLines = explode("\r\n", $textFili);
$ImageFond = imagecreate(402, 240);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$blackOpac = imagecolorallocatealpha($ImageFond, 0, 0, 0, 20);
$y = 0;
foreach ($textFiliLines as $textFiliLine) {
$y = $y + 20;
$this->imagettftextSp($ImageFond, 11, 25, -100, $y, $black, $arial, $textFiliLine, 0.01);
}
// imagettftext($ImageFond , 11 , 25, -100, 11, $blackOpac, $arial, $textReduc);
imagecolortransparent($ImageFond, $white);
imagecopymerge($mask, $ImageFond, 349, 1, 0, 0, imagesx($ImageFond), imagesy($ImageFond), 30);
@ -159,7 +144,7 @@ trait GenerateBR
imagecolortransparent($ImageFond, $white);
imagecopy($mask, $ImageFond, 360, 170, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
}//end if
// imagettftext($ImageFond , 12 , 0, 0, 14, $black, $arialbd, $textReduc);
// ---- Copie le produit dans le mask
$size = getimagesize($product_image);
switch ($size['mime']) {
@ -221,7 +206,7 @@ trait GenerateBR
function imagettftext_contour($image, $fontsize, $angle, $x, $y, $color, $font, $text, $color_contour, $contour_haut = 1, $contour_bas = 1, $contour_gauche = 1, $contour_droite = 1)
function imagettftextContour($image, $fontsize, $angle, $x, $y, $color, $font, $text, $color_contour, $contour_haut = 1, $contour_bas = 1, $contour_gauche = 1, $contour_droite = 1)
{
$coords_x = array();
$coords_y = array();
@ -417,6 +402,7 @@ trait GenerateBR
// imagecolortransparent($ImageMentionFond, $white);
imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond));
} else {
// FIXME : Semble non utilise ici
// FR
$txt_mentions = $legalMentions[0] . " " . $coupon->coupon_rcs;
$ImageMentionFond = imagecreate(415, 100);
@ -438,7 +424,15 @@ trait GenerateBR
// ---- Inscription de l'utilisateur et de la ville
$libelle = "OFFRE RÉSERVÉE À";
$user = $crmInfos->firstname . " " . $crmInfos->lastname . "\r\n" . $crmInfos->postcode . " " . $crmInfos->city;
$user = sprintf(
"%s %s\r\n%s\r\n%s %s\r\n%s",
$crmInfos->firstname,
$crmInfos->lastname,
$crmInfos->address,
$crmInfos->postcode,
$crmInfos->city,
sprintf("id %s", $crmInfos->crm_id)
);
$ImageFond = imagecreate(120, 40);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
@ -447,7 +441,7 @@ trait GenerateBR
imagettftext($ImageFond, 8, 0, (120 / 2) - (abs($box2[4]) - abs($box2[6])) / 2, 10, $black, $arialbd, $libelle);
imagettftext($ImageFond, 8, 0, (120 / 2) - (abs($box1[4]) - abs($box1[6])) / 2, 25, $black, $arial, $user);
imagecolortransparent($ImageFond, $white);
imagecopy($mask, $ImageFond, 770, 50, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
imagecopy($mask, $ImageFond, 770, 40, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
// ---- Inscription de la date de validité
$libelle = "Valable jusqu'au :";
@ -467,6 +461,21 @@ trait GenerateBR
imagecolortransparent($ImageFond, $white);
imagecopy($mask, $ImageFond, 780, 142, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
// Right barcode
$codeBarre = "0000000000001"; // FIXME : put real id here
$generator = new \Picqer\Barcode\BarcodeGeneratorPNG();
$base64 = $generator->getBarcode($codeBarre, $generator::TYPE_CODE_128_A, 2, 46);
$barcodeImage = imagecreatefromstring($base64);
imagecopy($mask, $barcodeImage, 540, 342, 0, 0, imagesx($barcodeImage), imagesy($barcodeImage));
// Text
$ImageFond = imagecreate(380, 15);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
imagettftext($ImageFond, 11, 0, 0, 14, $black, $arial, $codeBarre);
imagecopy($mask, $ImageFond, 795, 390, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
// End text
// End right barcode
// ---- Création code barre
if ($customer->country !== 250) {
$textReduc = "Traitement ScanCoupon/HighCo Data Benelux";
@ -486,7 +495,7 @@ trait GenerateBR
imagecopy($mask, $ImageFond, 52, 322, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
}
// Left barcode
if ($customer->country !== 250) {
$codeBarre = imagecreatefromjpeg($coupon->coupon_gs1code);
imageresolution($codeBarre, 72);
@ -506,22 +515,18 @@ trait GenerateBR
imagecopy($mask, $test, 60, 250, 0, 0, imagesx($test), imagesy($test));
} else {
$codeBarre = $coupon->coupon_code . strtoupper($customer->crm_id);
$codeBarrePrint = $codeBarre;
if (strpos($customer->crm_id, "@") !== false) {
$codeBarre = $coupon->coupon_code . strtolower($customer->crm_id);
$codeBarrePrint = $coupon->coupon_code . ".@.";
}
$codeBarre = $coupon->coupon_code;
$generator = new \Picqer\Barcode\BarcodeGeneratorPNG();
$base64 = $generator->getBarcode($codeBarrePrint, $generator::TYPE_CODE_128_A, 2, 46);
$base64 = $generator->getBarcode($codeBarre, $generator::TYPE_CODE_128_A, 2, 46);
$barcodeImage = imagecreatefromstring($base64);
imagecopy($mask, $barcodeImage, 52, 342, 0, 0, imagesx($barcodeImage), imagesy($barcodeImage));
imagecopy($mask, $barcodeImage, 10, 342, 0, 0, imagesx($barcodeImage), imagesy($barcodeImage));
$ImageFond = imagecreate(380, 15);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
imagettftext($ImageFond, 11, 0, 0, 14, $black, $arial, $codeBarre);
imagecopy($mask, $ImageFond, 52, 390, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
}//end if
// End left barcode
ob_start();
imagejpeg($mask, null, 100);

View file

@ -14,11 +14,12 @@
"barryvdh/laravel-dompdf": "^0.9.0",
"doctrine/dbal": "^2.8",
"fideloper/proxy": "^4.0",
"kwaadpepper/enum": "^2.0",
"laravel/framework": "^8.0",
"laravel/tinker": "^2.0",
"laravel/ui": "^3.0",
"laravelcollective/html": "6.*",
"ldc/ldccrmv2client": "^3.0",
"ldc/ldccrmv2client": "^3.0.5",
"picqer/php-barcode-generator": "^0.3.0",
"sentry/sentry-laravel": "^4.13",
"szymach/c-pchart": "^3.0",

View file

@ -213,6 +213,9 @@ return [
'Html' => Collective\Html\HtmlFacade::class,
'Debugbar' => Barryvdh\Debugbar\Facade::class,
'PDF' => Barryvdh\DomPDF\Facade::class,
'CampaignTypes' => \App\Enums\CampaignTypes::class,
'Countries' => \App\Enums\Countries::class,
'UserRoles' => \App\Enums\UserRoles::class,
],
];

View file

@ -35,5 +35,8 @@
"sweetalert": "^2.0.8",
"vue": "^2.5.7",
"webpack-cli": "^6.0.1"
},
"dependencies": {
"node-sass": "^6.0.1"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 68 KiB

56
resources/js/ajax.js vendored
View file

@ -6,7 +6,7 @@ $('#addCoupons').on('click', function(event){
if($(this).is(':checked')){
ids.push($(this).val());
}
})
$.ajaxSetup({
headers: {
@ -15,14 +15,13 @@ $('#addCoupons').on('click', function(event){
});
$.ajax({
url: '/add-coupons-ajax',
url: '/bo/campagne/'+ campid +'/add-coupons',
type: 'POST',
data: {
ids: ids ,
campid: campid
ids: ids
},
dataType: 'JSON',
success: function (reponse) {
success: function (reponse) {
$.each(reponse, function(index, coupon){
var html = '<tr>';
html += '<td>'+coupon.coupon_code+'</td>';
@ -34,7 +33,7 @@ $('#addCoupons').on('click', function(event){
$('#addCoupons').parent().find('.inputGroup input').each(function(event){
if($(this).val() == coupon.coupon_id){
$(this).parent('.inputGroup').remove();
}
}
})
$.fancybox.close();
});
@ -43,7 +42,7 @@ $('#addCoupons').on('click', function(event){
console.log(e.responseText);
}
});
})
})
@ -59,21 +58,18 @@ $('body').on('click', '.delete-coupon', function(event){
callback : function (value) {
if (value) {
event.preventDefault();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
}
});
$.ajax({
url: '/remove-coupons-ajax',
url: '/bo/campagne/'+ campid +'/remove-coupon/' + couponid,
type: 'POST',
data: {
couponid: couponid,
campid: campid
},
data: {},
dataType: 'JSON',
success: function (reponse) {
success: function (reponse) {
trLinked.remove();
var html = "<div class='inputGroup'>";
html += "<input id='coupon["+reponse.coupon_id+"]' name='coupon["+reponse.coupon_id+"]' type='checkbox' value='"+reponse.coupon_id+"' >";
@ -87,7 +83,7 @@ $('body').on('click', '.delete-coupon', function(event){
});
}
}
});
});
})
@ -114,14 +110,14 @@ $('body').on('click', '.unpublish', function(event){
couponid: couponid
},
dataType: 'JSON',
success: function (reponse) {
success: function (reponse) {
element.empty().html('<i data-couponid="'+couponid+'" class="fas fa-times-circle red publish"></i>')
}
});
}
}
});
})
$('body').on('click', '.publish', function(event){
@ -147,14 +143,14 @@ $('body').on('click', '.publish', function(event){
couponid: couponid
},
dataType: 'JSON',
success: function (reponse) {
success: function (reponse) {
element.empty().html('<i data-couponid="'+couponid+'" class="fas fa-check-circle green unpublish"></i>')
}
});
}
}
});
})
@ -175,20 +171,18 @@ $('body').on('click', '.unpublishcamp', function(event){
}
});
$.ajax({
url: '/unpublish-camp-ajax',
url: '/bo/campagne/'+ campid +'/toggle-publish/0',
type: 'POST',
data: {
campid: campid
},
data: {},
dataType: 'JSON',
success: function (reponse) {
success: function (reponse) {
element.empty().html('<i data-campid="'+campid+'" class="fas fa-times-circle red publishcamp"></i>')
}
});
}
}
});
})
$('body').on('click', '.publishcamp', function(event){
@ -208,18 +202,16 @@ $('body').on('click', '.publishcamp', function(event){
}
});
$.ajax({
url: '/publish-camp-ajax',
url: '/bo/campagne/'+ campid +'/toggle-publish/1',
type: 'POST',
data: {
campid: campid
},
data: {},
dataType: 'JSON',
success: function (reponse) {
success: function (reponse) {
element.empty().html('<i data-campid="'+campid+'" class="fas fa-check-circle green unpublishcamp"></i>')
}
});
}
}
});
})
})

View file

@ -1,33 +0,0 @@
@extends('layouts.main')
@section('content')
<h2><i class="fa fa-folder"><i class="fas fa-ticket-alt"></i></i> Nouvelle campagne</h2>
<div class="form-wrapper">
{!! Form::open(['route' => 'campagne.store']) !!}
<div class="form-split">
<div class="form-field">
{!! Form::label('camp_name', 'Nom') !!}
{!! Form::input('text', 'camp_name', null, ['required']) !!}
</div>
<div class="form-field">
{!! Form::label('camp_type', 'Type') !!}
{!! Form::select('camp_type', ['Mur', 'Panier', 'Mur sans sélection', 'Panier Sélectionnable']) !!}
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('camp_published', 'Publier') !!}
{!! Form::select('camp_published', ['Non', 'Oui']) !!}
</div>
<div class="form-field limitPrinting">
{!! Form::label('camp_limitedPrinting', 'Limiter les impressions à 1 BR à la fois') !!}
{!! Form::checkbox('camp_limitedPrinting', 1, false, array('id'=>'camp_limitedPrinting')) !!}
{!! Form::label('camp_limitedPrinting', '') !!}
</div>
</div>
<div class="form-field submit">
{!! Form::submit('Enregistrer') !!}
</div>
{!! Form::close() !!}
</div>
@endsection

View file

@ -1,117 +0,0 @@
@extends('layouts.main')
@section('content')
<h2><i class="fa fa-folder"><i class="fas fa-ticket-alt"></i></i> Editer la campagne</h2>
<div class="form-wrapper">
{!! Form::model($campagne, ['route' => ['campagne.update', $campagne]]) !!}
@method('PUT')
<div class="form-split">
<div class="form-field">
{!! Form::label('camp_name', 'Nom') !!}
{!! Form::input('text', 'camp_name', null, ['required']) !!}
</div>
<div class="form-field">
{!! Form::label('camp_type', 'Type') !!}
{!! Form::select('camp_type', ['Mur', 'Panier', 'Mur sans sélection', 'Panier Sélectionnable']) !!}
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('camp_published', 'Publier') !!}
{!! Form::select('camp_published', ['Non', 'Oui']) !!}
</div>
<div class="form-field limitPrinting">
{!! Form::label('camp_limitedPrinting', 'Limiter les impressions à 1 BR à la fois') !!}
{!! Form::checkbox('camp_limitedPrinting', 1, ($campagne->camp_limitedPrinting ==1?true:null), array('id'=>'camp_limitedPrinting')) !!}
{!! Form::label('camp_limitedPrinting', '') !!}
</div>
</div>
<div class="form-field submit">
{!! Form::submit('Mettre à jour') !!}
</div>
{!! Form::close() !!}
</div>
<div class="coupons-wrapper">
<h2><i class="fas fa-ticket-alt"></i> Coupons de la campagne</h2>
<table>
<thead>
<th>Code</th>
<th>Nom</th>
<th></th>
</thead>
@foreach($couponsLinked as $coupon)
<tr class="@if($coupon->coupon_published == 0) notPublished @endif">
<td>{{ $coupon->coupon_code }}</td>
<td>{{ $coupon->coupon_name }}</td>
<td><i class="fas fa-times delete-coupon" data-campid={{$campagne->camp_id}} data-couponid={{$coupon->coupon_id}}></i></td>
</tr>
@endforeach
</table>
@if(count($couponsLinked) == 0)
<p class="no-result">Pas de coupons liés</p>
@endif
<input type="hidden" name="csrf" id="csrf" value="<?php echo csrf_token(); ?>">
<button data-fancybox data-src="#coupons-list" href="javascript:;">
Ajouter des coupons a cette campagne
</button>
</div>
<div class="notifs-wrapper">
<h2><i class="fas fa-bell"></i> Notifications par mail</h2>
<div class="form-wrapper">
{!! Form::open(['action' => 'CampagneController@saveNotification']) !!}
<div class="form-split">
<div class="form-field">
{!! Form::label('notif_name', 'Nom') !!}
{!! Form::input('text', 'notif_name', null, ['required']) !!}
{{ Form::hidden('notif_campId', $campagne->camp_id) }}
</div>
<div class="form-field"></div>
<div class="form-field">
{!! Form::label('notif_email', 'Email') !!}
{!! Form::input('text', 'notif_email', null, ['required']) !!}
</div>
<div class="form-field">
<span></span>
{!! Form::submit('Ajouter') !!}
</div>
</div>
{!! Form::close() !!}
</div>
<table>
<thead>
<tr>
<th>{{__('No') }}</th>
<th>{{__('Nom') }}</th>
<th>{{__('Email') }}</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($campagne->notifications as $n)
<tr>
<td>{{ $n->notif_id }}</td>
<td>{{ $n->notif_name }}</td>
<td>{{ $n->notif_email }}</td>
<td><a href="{{ route('campagne.deleteNotif', $n) }}"><i class="fas fa-times delete-icon"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div id="coupons-list" style="display:none;">
<h2><i class="fas fa-ticket-alt"></i> Ajouter des Coupons</h2>
@foreach($coupons as $coupon)
<div class="inputGroup @if($coupon->coupon_published == 0) notPublished @endif">
<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
<input type="hidden" name="camp_id" id="camp_id" value="{{ $campagne->camp_id }}">
<input type="hidden" name="csrf" id="csrf" value="<?php echo csrf_token(); ?>">
<input type="submit" id="addCoupons" value="Ajouter">
</div>
{!! Form::open(['id' => 'delete-hidden']) !!}
@method('DELETE')
{!! Form::close() !!}
@endsection

View file

@ -0,0 +1,55 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fa fa-folder">
<i class="fas fa-ticket-alt"></i>
</i>
{{ __('Nouvelle campagne') }}
</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('campagne.store') }}" method="POST">
@csrf
<div class="form-split">
<div class="form-field">
<label>{{ __('Nom') }}</label>
<input type="text" name="camp_name" value="{{ old('camp_name') }}" required>
</div>
<div class="form-field">
<label>{{ __('Type') }}</label>
<select name="camp_type" id="camp_type">
@foreach (CampaignTypes::toArray() as $type)
<option value="{{ $type->value }}" @if (old('camp_type') === $type->value) selected @endif>{{ $type->label }}</option>
@endforeach
</select>
</div>
</div>
<div class="form-split">
<div class="form-field">
<label>{{ __('Publier') }}</label>
<select name="camp_published">
<option value="0" @if (old('camp_published') === 0) selected @endif>{{ __('Non') }}</option>
<option value="1" @if (old('camp_published') === 1) selected @endif>{{ __('Oui') }}</option>
</select>
</div>
<div class="form-field limitPrinting">
<label for="camp_limitedPrinting">{{ __('Limiter les impressions à 1 BR à la fois') }}</label>
<input id="camp_limitedPrinting" name="camp_limitedPrinting" type="checkbox" value="1">
<label for="camp_limitedPrinting"></label>
</div>
</div>
<div class="form-field submit">
<input type="submit" value="{{ __('Enregistrer') }}">
</div>
</form>
</div>
@endsection

View file

@ -0,0 +1,147 @@
@extends('layouts.main')
@section('content')
<h2>
<i class="fa fa-folder">
<i class="fas fa-ticket-alt"></i>
</i>
{{ __('Editer la campagne') }}
</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('campagne.update', ['campagne' => $campagne]) }}" method="POST">
@csrf
@method('PUT')
<div class="form-split">
<div class="form-field">
<label>{{ __('Nom') }}</label>
<input type="text" name="camp_name" value="{{ $campagne->camp_name }}" required>
</div>
<div class="form-field">
<label>{{ __('Type') }}</label>
<select name="camp_type" id="camp_type">
@foreach (CampaignTypes::toArray() as $type)
<option value="{{ $type->value }}" @if ($campagne->camp_type->equals($type)) selected @endif>{{ $type->label }}</option>
@endforeach
</select>
</div>
</div>
<div class="form-split">
<div class="form-field">
<label>{{ __('Publier') }}</label>
<select name="camp_published">
<option value="0" @if ($campagne->camp_published === 0) selected @endif>{{ __('Non') }}</option>
<option value="1" @if ($campagne->camp_published === 1) selected @endif>{{ __('Oui') }}</option>
</select>
</div>
<div class="form-field limitPrinting">
<label for="camp_limitedPrinting">{{ __('Limiter les impressions à 1 BR à la fois') }}</label>
<input id="camp_limitedPrinting" {{ $campagne->camp_limitedPrinting === 1 ? 'checked="checked"' : '' }} name="camp_limitedPrinting" type="checkbox" value="{{ $campagne->camp_limitedPrinting }}">
<label for="camp_limitedPrinting"></label>
</div>
</div>
<div class="form-field submit">
<input type="submit" value="{{ __('Mettre à jour') }}">
</div>
</form>
</div>
<div class="coupons-wrapper">
<h2>
<i class="fas fa-ticket-alt"></i>
{{ __('Coupons de la campagne') }}
</h2>
<table>
<thead>
<th>{{ __('Code') }}</th>
<th>{{ __('Nom') }}</th>
<th></th>
</thead>
@foreach($campagne->coupons as $coupon)
<tr class="@if($coupon->coupon_published == 0) notPublished @endif">
<td>{{ $coupon->coupon_code }}</td>
<td>{{ $coupon->coupon_name }}</td>
<td><i class="fas fa-times delete-coupon" data-campid={{$campagne->camp_id}} data-couponid={{$coupon->coupon_id}}></i></td>
</tr>
@endforeach
</table>
@if(count($campagne->coupons) === 0)
<p class="no-result">{{ __('Pas de coupons liés') }}</p>
@endif
<input type="hidden" name="csrf" id="csrf" value="<?= csrf_token(); ?>">
<button data-fancybox data-src="#coupons-list" href="javascript:;">
{{ __('Ajouter des coupons a cette campagne') }}
</button>
</div>
<div class="notifs-wrapper">
<h2><i class="fas fa-bell"></i> {{ __('Notifications par mail') }}</h2>
<div class="form-wrapper">
<form action="{{ route('campaign.new-notif', ['campaign' => $campagne]) }}" method="POST">
@csrf
<div class="form-split">
<div class="form-field">
<label>{{ __('Nom') }}</label>
<input type="text" name="notif_name" required>
</div>
<div class="form-field"></div>
<div class="form-field">
<label>{{ __('Email') }}</label>
<input type="email" name="notif_email" required>
</div>
<div class="form-field">
<span></span>
<input type="submit" value="{{ __('Ajouter') }}">
</div>
</div>
</form>
</div>
<table>
<thead>
<tr>
<th>{{__('No') }}</th>
<th>{{__('Nom') }}</th>
<th>{{__('Email') }}</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($campagne->notifications as $n)
<tr>
<td>{{ $n->notif_id }}</td>
<td>{{ $n->notif_name }}</td>
<td>{{ $n->notif_email }}</td>
<td><a href="{{ route('campaign.delete-notif', $n->notif_id) }}"><i class="fas fa-times delete-icon"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div id="coupons-list" style="display:none;">
<h2>
<i class="fas fa-ticket-alt"></i>
{{ __('Ajouter des Coupons') }}
</h2>
@foreach($coupons as $coupon)
<div class="inputGroup @if($coupon->coupon_published == 0) notPublished @endif">
<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
<input type="hidden" name="camp_id" id="camp_id" value="{{ $campagne->camp_id }}">
<input type="hidden" name="csrf" id="csrf" value="<?= csrf_token(); ?>">
<input type="submit" id="addCoupons" value="Ajouter">
</div>
<form method="POST" id="delete-hidden">
@csrf
@method('DELETE')
</form>
@endsection

View file

@ -1,7 +1,16 @@
@extends('layouts.main')
@section('content')
<h2><i class="fa fa-folder"><i class="fas fa-ticket-alt"></i></i> Campagnes <a href="{{ route('campagne.create') }}" class="add-button"><i class="fas fa-plus-square"></i> Ajouter</a></h2>
<h2>
<i class="fa fa-folder">
<i class="fas fa-ticket-alt"></i>
</i>
{{ __('Campagnes') }}
<a href="{{ route('campagne.create') }}" class="add-button">
<i class="fas fa-plus-square"></i>
{{ __('Ajouter') }}
</a>
</h2>
<div class="content-list">
<table>
<thead>
@ -19,49 +28,52 @@
<tr>
<td>{{ $c->camp_id }}</td>
<td><a href="{{ route('campagne.edit', $c) }}">{{ $c->camp_name }}</a></td>
<td>{{ $c->camp_createdate }}</td>
<td>{{ date('d/m/Y H:i', strtotime($c->camp_createdate)) }}</td>
@if ( $c->camp_published === 1)
<td class="pub center"><i data-campid="{{ $c->camp_id }}" class="fas fa-check-circle green unpublishcamp"></i></td>
@else
<td class="pub center"><i data-campid="{{ $c->camp_id }}" class="fas fa-times-circle red publishcamp"></i></td>
@endif
<td class="center"><i class="fas fa-eye showTemplate" data-campid="{{ $c->camp_id }}"></i></td>
<td><a href="{{ route('campagne.destroy', $c) }}"><i class="fas fa-times delete-icon"></i></a></td>
<td class="center">
@if ( $c->camp_published === 1)
<i class="fas fa-eye showTemplate" data-campid="{{ $c->camp_id }}"></i>
@endif
</td>
<td>
@if ($c->camp_published === 0)
<a href="{{ route('campagne.destroy', $c) }}"><i class="fas fa-times delete-icon"></i></a>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
<input type="hidden" name="csrf" id="csrf" value="<?php echo csrf_token(); ?>">
</div>
<div class="actions">
</div>
{!! Form::open(['id' => 'delete-hidden']) !!}
<form method="POST" id="delete-hidden">
@csrf
@method('DELETE')
{!! Form::close() !!}
</form>
<input type="hidden" id="csrf" value="<?= csrf_token(); ?>">
@endsection
@section('scripts')
<script>
$('.content-list').on('click', '.showTemplate', function(event){
event.preventDefault();
let campid = $(this).attr('data-campid');
event.preventDefault();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
});
$.ajax({
url: '/showDemo',
url: '/bo/campagne/'+ campid +'/showDemo',
type: 'POST',
data: {
camp_id: campid,
},
data: {},
dataType: 'JSON',
success: function (response) {
window.open(response, '_blank');
//console.log(response);
success: function (response) {
window.open(response, '_blank');
},
error: function (e) {
console.log(e.responseText);

View file

@ -1,7 +1,10 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-users"></i> Créer un contact</h2>
<h2>
<i class="fas fa-users"></i>
{{ __('Créer un contact') }}
</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@ -12,53 +15,52 @@
</div>
@endif
<div class="form-wrapper">
{!! Form::open(['route' => 'contact.store', 'enctype' => 'multipart/form-data']) !!}
<form action="{{ route('contact.store') }}" method="POST">
@csrf
<div class="form-split">
<div class="form-field">
{!! Form::label('contact_ref', 'Ref *') !!}
{!! Form::input('text', 'contact_ref', null, ['required']) !!}
<label>{{ __('Ref') }} *</label>
<input type="text" name="contact_ref" required>
</div>
<div class="form-field">
{!! Form::label('contact_email', 'Email *') !!}
{!! Form::email('contact_email', null, ['required']) !!}
<label>{{ __('Email') }} *</label>
<input type="email" name="contact_email" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('contact_nom', 'Nom *') !!}
{!! Form::input('text','contact_nom', null, ['required']) !!}
<label>{{ __('Nom') }} *</label>
<input type="text" name="contact_nom" required>
</div>
<div class="form-field">
{!! Form::label('contact_prenom', 'Prénom *') !!}
{!! Form::input('text','contact_prenom', null, ['required']) !!}
<label>{{ __('Prénom') }} *</label>
<input type="text" name="contact_prenom" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('contact_cp', 'Code Postal *') !!}
{!! Form::input('text','contact_cp', null, ['required']) !!}
<label>{{ __('Code Postal') }} *</label>
<input type="text" name="contact_cp" required>
</div>
<div class="form-field">
{!! Form::label('contact_ville', 'Ville *') !!}
{!! Form::input('text','contact_ville', null, ['required']) !!}
</div>
<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>
<label for="contact_country">{{ __('Pays') }}</label>
<select name="contact_country" id="contact_country">
<option value="250">France</option>
<option value="056">Belgique</option>
<option value="442">Luxembourg</option>
@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>
{!! Form::submit('Enregistrer') !!}
<span>{{ __('Les champs avec un * sont obligatoires') }}</span>
<input type="submit" value="{{ __('Enregistrer') }}">
</div>
{!! Form::close() !!}
</form>
</div>
@endsection

View file

@ -1,7 +1,10 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-users"></i> Editer le contact</h2>
<h2>
<i class="fas fa-users"></i>
{{ __('Editer le contact') }}
</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@ -12,81 +15,76 @@
</div>
@endif
<div class="form-wrapper">
{!! Form::model($contact, ['route' => ['contact.update', $contact], 'enctype' => 'multipart/form-data']) !!}
<form action="{{ route('contact.update', $contact) }}" method="POST">
@csrf
@method('PUT')
<div class="form-split">
<div class="form-field">
{!! Form::label('contact_ref', 'Ref *') !!}
{!! Form::input('text', 'contact_ref', null, ['required', 'readonly']) !!}
<label>{{ __('Ref') }} *</label>
<input type="text" name="contact_ref" value="{{ $contact->contact_ref }}" required readonly>
</div>
<div class="form-field">
{!! Form::label('contact_email', 'Email *') !!}
{!! Form::email('contact_email', null, ['required']) !!}
<label>{{ __('Email') }} *</label>
<input type="email" name="contact_email" value="{{ $contact->contact_email }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('contact_nom', 'Nom *') !!}
{!! Form::input('text','contact_nom', null, ['required']) !!}
<label>{{ __('Nom') }} *</label>
<input type="text" name="contact_nom" value="{{ $contact->contact_nom }}" required>
</div>
<div class="form-field">
{!! Form::label('contact_prenom', 'Prénom *') !!}
{!! Form::input('text','contact_prenom', null, ['required']) !!}
<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">
{!! Form::label('contact_cp', 'Code Postal *') !!}
{!! Form::input('text','contact_cp', null, ['required']) !!}
<label>{{ __('Code Postal') }} *</label>
<input type="text" name="contact_cp" value="{{ $contact->contact_cp }}" required>
</div>
<div class="form-field">
{!! Form::label('contact_ville', 'Ville *') !!}
{!! Form::input('text','contact_ville', null, ['required']) !!}
<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>
<label for="contact_country">{{ __('Pays') }}</label>
<select name="contact_country" id="contact_country">
<option value="" >Tous</option>
<option value="250" @if ($contact->contact_country == 250) selected="selected" @endif>France</option>
<option value="56" @if ($contact->contact_country == 56) selected="selected" @endif>Belgique</option>
<option value="442" @if ($contact->contact_country == 442) selected="selected" @endif>Luxembourg</option>
@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>
{!! Form::submit('Mettre à jour') !!}
<span>{{ __('Les champs avec un * sont obligatoires') }}</span>
<input type="submit" value="{{ __('Mettre à jour') }}">
</div>
{!! Form::close() !!}
</form>
</div>
<h2><i class="fa fa-folder"><i class="fas fa-ticket-alt"></i></i> Campagnes liées</h2>
<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="hash" id="hash" value="{{ $contact->contact_hash }}">
<input type="hidden" name="csrf" id="csrf" value="<?php echo csrf_token(); ?>">
<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>
@switch($campagne->camp_type)
@case(0)
<p>Type : Mur</p>
@break
@case(1)
<p>Type : Panier</p>
@break
@case(2)
<p>Type : Mur non sélectionnable</p>
@break
@case(3)
<p>Type : Panier sélectionnable</p>
@break
@endswitch
<p>{{ __('Type') }} : {{ $campagne->camp_type->label }}</p>
<div class="loader">
<div class="lds-ripple"><div></div><div></div></div>
<h4>Chargement...</h4>
<div class="lds-ripple">
<div></div>
<div></div>
</div>
<h4>{{ __('Chargement') }}...</h4>
</div>
</div>
@ -104,10 +102,9 @@
});
$.ajax({
url: '/loadWidget',
url: '/bo/contact/'+ $('#contact_id').val() +'/load-widget',
type: 'POST',
data: {
contact_hash: $('#hash').val(),
camp_id : campagne.attr('data-campid'),
},
dataType: 'JSON',
@ -116,7 +113,7 @@
campagne.append(reponse.html);
$('.loader').hide();
} else {
campagne.append("Erreur lors du chargement");
campagne.append("{{ __('Erreur lors du chargement') }}");
}
},
error: function (e) {
@ -159,15 +156,15 @@
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',
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)
console.log("{{ __('Erreur') }} : "+reponse.Code+" - "+reponse.Message)
}
},
error: function (e) {
@ -221,9 +218,9 @@
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',
title : "<i class='fas fa-info-circle'></i> {{ __('Succès') }}",
message : "{{ __('Le panier a bien été mis à jour.') }}",
okButton : "{{ __('Valider') }}",
noButton : "",
callback : function (value) {
}
@ -261,9 +258,9 @@
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',
title : "<i class='fas fa-info-circle'></i> {{ __('Succès') }}",
message : "{{ __('Le panier a bien été créé.') }}",
okButton : "{{ __('Valider') }}",
noButton : "",
callback : function (value) {
}
@ -282,16 +279,3 @@
</script>
@endsection
@if(isset($created) && $created)
@section('scripts')
<script defer>
$.fancyInfo({
title : "<i class='fas fa-info-circle'></i> Parfait",
message : "Le contact a bien été créé.",
okButton : 'Valider',
callback : function (value) {
}
});
</script>
@endsection
@endif

View file

@ -2,46 +2,69 @@
@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>
<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>
<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>
<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>
<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>
<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>
<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>
<label for="searchCountry">{{ __('Pays') }}</label>
<select name="searchCountry" id="searchCountry">
<option value="">Tous</option>
<option value="250" @if(isset($searchData['pays']) && $searchData['pays'] == 250) selected @endif>France</option>
<option value="056" @if(isset($searchData['pays']) && $searchData['pays'] == 056) selected @endif>Belgique</option>
<option value="442" @if(isset($searchData['pays']) && $searchData['pays'] == 442) selected @endif>Luxembourg</option>
<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">
<input type="submit" value="{{ __('Rechercher') }}">
</div>
</form>
</div>
@ -50,28 +73,17 @@
<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>
<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
switch ($contact->contact_country) {
case 250:
$contact->contact_country = 'France';
break;
case 56:
$contact->contact_country = 'Belgique';
break;
case 442:
$contact->contact_country = 'Luxembourg';
break;
default:
$contact->contact_country = 'France';
break;
if (!in_array($contact->contact_country, Countries::toValues())) {
$contact->contact_country = 250;
}
@endphp
<tr>
@ -80,7 +92,7 @@
<td>{{ $contact->contact_email }}</td>
<td>{{ $contact->contact_cp }}</td>
<td>{{ $contact->contact_ville }}</td>
<td>{{ $contact->contact_country }}</td>
<td>{{ Countries::make($contact->contact_country)->label }}</td>
</tr>
@endforeach
<tfoot>

View file

@ -11,186 +11,192 @@
</div>
@endif
<div class="form-wrapper">
<h2><i class="fas fa-ticket-alt"></i> Nouveau Coupon</h2>
{!! Form::open(['route' => 'coupon.store', 'enctype' => 'multipart/form-data']) !!}
<h2>
<i class="fas fa-ticket-alt"></i>
{{ __('Nouveau Coupon') }}
</h2>
<form method="POST" action="{{ route('coupon.store') }}" enctype="multipart/form-data">
@csrf
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_code', 'Code de traitement *') !!}
{!! Form::input('text', 'coupon_code', null, ['required']) !!}
<label>{{ __('Code de traitement') }} *</label>
<input type="text" name="coupon_code" value="{{ old('coupon_code') }}" required>
</div>
<div class="form-field">
{!! Form::label('coupon_name', 'Nom interne *') !!}
{!! Form::input('text', 'coupon_name', null, ['required']) !!}
<label>{{ __('Nom interne') }} *</label>
<input type="text" name="coupon_name" value="{{ old('coupon_name') }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_value', 'Valeur faciale *') !!}
{!! Form::number('coupon_value', null, ['step' => '0.05', 'required']) !!}
<label>{{ __('Valeur faciale') }} *</label>
<input type="number" name="coupon_value" step="0.05" value="{{ old('coupon_value') }}" required>
</div>
<div class="form-field">
{!! Form::label('initial_quantity', 'Quantité initiale *') !!}
{!! Form::text('initial_quantity', null, ['required']) !!}
<label>{{ __('Quantité initiale') }} *</label>
<input type="text" name="initial_quantity" value="{{ old('initial_quantity') }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_norme', 'Activer la Norme GS1') !!}
{!! Form::checkbox('coupon_norme', 1, false, array('id'=>'coupon_norme')) !!}
{!! Form::label('coupon_norme', 'Activer') !!}
<label for="coupon_norme">{{ __('Activer la Norme GS1') }}</label>
<input type="checkbox" id="coupon_norme" name="coupon_norme" value="1" {{ (old('coupon_norme') === 1 ? 'checked' : null) }}>
<label for="coupon_norme">{{ __('Activer') }}</label>
</div>
<div class="form-field">
{!! Form::label('coupon_seuil_alert', 'Seuil d\'alerte *') !!}
{!! Form::number('coupon_seuil_alert', 100, ['required']) !!}
<label>{{ __("Seuil d'alerte") }} *</label>
<input type="number" name="coupon_seuil_alert" value="{{ !empty(old('coupon_seuil_alert')) ? old('coupon_seuil_alert') : 100 }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_enablelimitquantity', 'Activer La limite de quantité') !!}
{!! Form::checkbox('coupon_enablelimitquantity', 1, false, array('id'=>'coupon_enablelimitquantity')) !!}
{!! Form::label('coupon_enablelimitquantity', 'Activer') !!}
<label for="coupon_enablelimitquantity">{{ __('Activer La limite de quantité') }}</label>
<input type="checkbox" id="coupon_enablelimitquantity" name="coupon_enablelimitquantity" value="1" {{ (old('coupon_enablelimitquantity') === 1 ? 'checked' : null) }}>
<label for="coupon_enablelimitquantity">{{ __('Activer') }}</label>
</div>
<div class="form-field">
{!! Form::label('coupon_enablelimitperiod', 'Activer la limite sur une période') !!}
{!! Form::checkbox('coupon_enablelimitperiod', 1, false, array('id'=>'coupon_enablelimitperiod')) !!}
{!! Form::label('coupon_enablelimitperiod', 'Activer') !!}
<label for="coupon_enablelimitperiod">{{ __('Activer la limite sur une période') }}</label>
<input type="checkbox" id="coupon_enablelimitperiod" name="coupon_enablelimitperiod" value="1" {{ (old('coupon_enablelimitperiod') === 1 ? 'checked' : null) }}>
<label for="coupon_enablelimitperiod">{{ __('Activer') }}</label>
</div>
</div>
<div class="form-split">
<div class="form-field enablelimitquantity">
{!! Form::label('coupon_limitquantity', 'Limiter la diffusion à') !!}
<label>{{ __('Limiter la diffusion à') }}</label>
<span>
{!! Form::number('coupon_limitquantity', null, ['class'=>'small']) !!} coupons
<input type="number" name="coupon_limitquantity" value="{{ old('coupon_limitquantity') }}" class="small"> {{ __('coupons') }}
</span>
</div>
<div class="form-field enablelimitperiod">
{!! Form::label('coupon_limitperiod', 'Limiter la diffusion à une offre tous les') !!}
<label>{{ __('Limiter la diffusion à une offre tous les') }}</label>
<span>
{!! Form::number('coupon_limitperiod', null, ['class'=>'small']) !!} jours
<input type="number" name="coupon_limitperiod" value="{{ old('coupon_limitperiod') }}" class="small"> {{ __('jours') }}
</span>
</div>
</div>
<h4>Validité</h4>
<h4>{{ __('Validité') }}</h4>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_mindatediffusion', 'Date de début de diffusion') !!}
{!! Form::date('coupon_mindatediffusion') !!}
<label>{{ __('Date de début de diffusion') }}</label>
<input type="date" name="coupon_mindatediffusion">
</div>
<div class="form-field">
{!! Form::label('coupon_maxdatediffusion', 'Date de fin de diffusion') !!}
{!! Form::date('coupon_maxdatediffusion') !!}
<label>{{ __('Date de fin de diffusion') }}</label>
<input type="date" name="coupon_maxdatediffusion">
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_validity', 'Durée de validité à l\'impression') !!}
<span>
{!! Form::number('coupon_validity', 30, ['class'=>'small', 'required']) !!} jours
</span>
</div>
<label>{{ __("Durée de validité à l'impression") }}</label>
<span>
<input type="number" name="coupon_validity" value="{{ !empty(old('coupon_validity')) ? old('coupon_validity') : 30 }}" class="small" required> {{ __('jours') }}
</span>
</div>
<div class="form-field">
{!! Form::label('coupon_maxdatevalidity', 'Date de fin de validité') !!}
{!! Form::date('coupon_maxdatevalidity') !!}
<label>{{ __('Date de fin de validité') }}</label>
<input type="date" name="coupon_maxdatevalidity" value="{{ old('coupon_maxdatevalidity') }}">
</div>
</div>
<div class="calendar">
<h4><i class="fas fa-plus-square addcalendar"></i> Calendrier de diffusion</h4>
<h4><i class="fas fa-plus-square addcalendar"></i> {{ __('Calendrier de diffusion') }}</h4>
</div>
<h4>Vignettes</h4>
<h4>{{ __('Vignettes') }}</h4>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_thumbnail1', 'Vignette Desktop active') !!}
{!! Form::file('coupon_thumbnail1', ['class' => 'input-file']) !!}
<label for="coupon_thumbnail1">{{ __('Vignette Desktop active') }}</label>
<input type="file" id="coupon_thumbnail1" name="coupon_thumbnail1" class="input-file">
</div>
<div class="form-field">
{!! Form::label('coupon_thumbnail2', 'Vignette Desktop grise') !!}
{!! Form::file('coupon_thumbnail2', ['class' => 'input-file']) !!}
<label for="coupon_thumbnail2">{{ __('Vignette Desktop grise') }}</label>
<input type="file" id="coupon_thumbnail2" name="coupon_thumbnail2" class="input-file">
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_thumbnail3', 'Vignette Mobile active') !!}
{!! Form::file('coupon_thumbnail3', ['class' => 'input-file']) !!}
<label for="coupon_thumbnail3">{{ __('Vignette Mobile active') }}</label>
<input type="file" id="coupon_thumbnail3" name="coupon_thumbnail3" class="input-file">
</div>
<div class="form-field">
{!! Form::label('coupon_thumbnail4', 'Vignette Mobile grise') !!}
{!! Form::file('coupon_thumbnail4', ['class' => 'input-file']) !!}
<label for="coupon_thumbnail4">{{ __('Vignette Mobile grise') }}</label>
<input type="file" id="coupon_thumbnail4" name="coupon_thumbnail4" class="input-file">
</div>
</div>
<h4>Informations pour génération</h4>
<?php
<h4>{{ __('Informations pour génération') }}</h4>
<?php
$mentions = "Sur remise de ce bon en caisse, votre magasin vous fera bénéficier\r\nde la remise correspondante. Aucune monnaie ne sera rendue en\r\ncaisse. Toute photocopie ou utilisation de ce bon pour tout autre\r\nachat qu'un des produits mentionnés ci-dessous donnera lieu à des\r\npoursuites. Valable en France métropolitaine seulement (Corse\r\ncomprise) dans la période de validité. Offre non cumulable avec\r\nun autre bon de réduction ou offre promotionnelle. Ne peut être\r\nvendu.";
?>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_treatment_center', 'Centre de traitement *') !!}
{!! Form::select('coupon_treatment_center', ['HighCo', 'Sogec']) !!}
<label>{{ __('Centre de traitement') }} *</label>
<select name="coupon_treatment_center">
<option value="0" @if (old('coupon_treatment_center') === 0) selected @endif>HighCo</option>
<option value="1" @if (old('coupon_treatment_center') === 1) selected @endif>Sogec</option>
</select>
</div>
<div class="form-field">
{!! Form::label('coupon_legal_mentions_splitted', 'Activer les mentions internationnales') !!}
{!! Form::checkbox('coupon_legal_mentions_splitted', 1, false) !!}
{!! Form::label('coupon_legal_mentions_splitted', 'Activer') !!}
<label for="coupon_legal_mentions_splitted">{{ __('Activer les mentions internationnales') }}</label>
<input type="checkbox" id="coupon_legal_mentions_splitted" name="coupon_legal_mentions_splitted" value="1" {{ (old('coupon_legal_mentions_splitted') === 1 ? 'checked' : null) }}>
<label for="coupon_legal_mentions_splitted">{{ __('Activer') }}</label>
</div>
</div>
<div class="form-split">
<div class="form-field-textarea">
{!! Form::label('coupon_validity_text', 'Texte de validité *') !!}
{!! Form::textarea('coupon_validity_text', null, ['required']) !!}
<label>{{ __('Texte de validité') }} *</label>
<textarea name="coupon_validity_text" cols="30" rows="10" required>{{ old('coupon_validity_text') }}</textarea>
</div>
<div class="form-field-textarea">
{!! Form::label('coupon_legal_mentions', 'Mentions légales *') !!}
{!! Form::textarea('coupon_legal_mentions', $mentions, ['required']) !!}
<label>{{ __('Mentions légales') }} *</label>
<textarea name="coupon_legal_mentions" cols="30" rows="10" required>{{ !empty(old('coupon_legal_mentions')) ? old('coupon_legal_mentions') : $mentions }}</textarea>
</div>
</div>
<div class="form-split">
<div class="form-field">
<div class="title">
{!! Form::label('coupon_decoration_image', 'Image de décoration *') !!}
<span>(280x260px ou 280x160px si GS1)</span>
<span>Formats : JPG ou PNG</span>
<label for="coupon_decoration_image">{{ __('Image de décoration') }} *</label>
<span>{{ __('280x260px ou 280x160px si GS1') }}</span>
<span>{{ __('Formats : JPG ou PNG') }}</span>
</div>
{!! Form::file('coupon_decoration_image', ['class' => 'input-file', 'required', 'accept' => '.jpg,.jpeg,.png']) !!}
<input type="file" id="coupon_decoration_image" name="coupon_decoration_image" class="input-file" accept=".jpg,.jpeg,.png">
</div>
<div class="form-field">
<div class="title">
{!! Form::label('coupon_logo_image', 'Logo à afficher *') !!}
<span>135x70px</span>
<span>Formats : JPG ou PNG</span>
<label for="coupon_logo_image">{{ __('Logo à afficher') }} *</label>
<span>{{ __('135x70px') }}</span>
<span>{{ __('Formats : JPG ou PNG') }}</span>
</div>
{!! Form::file('coupon_logo_image', ['class' => 'input-file', 'required']) !!}
<input type="file" id="coupon_logo_image" name="coupon_logo_image" class="input-file" accept=".jpg,.jpeg,.png">
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_rcs', 'RCS du site *') !!}
{!! Form::text('coupon_rcs', $site->site_rcs, ['required']) !!}
<label>{{ __('RCS du site') }} *</label>
<input type="text" name="coupon_rcs" value="{{ !empty(old('coupon_rcs')) ? old('coupon_rcs') : $site->site_rcs }}" required>
</div>
<div class="form-field">
{!! Form::label('coupon_site_contact', 'Contact mail *') !!}
{!! Form::text('coupon_site_contact', $site->site_contact, ['required']) !!}
<label>{{ __('Contact mail') }} *</label>
<input type="text" name="coupon_site_contact" value="{{ !empty(old('coupon_site_contact')) ? old('coupon_site_contact') : $site->site_contact }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field gs1code">
<div class="title">
{!! Form::label('coupon_gs1code', 'Image du code barre GS1 *') !!}
<span>Formats : JPG</span>
<label for="coupon_gs1code">{{ __('Image du code barre GS1') }} *</label>
<span>{{ __('Formats : JPG') }}</span>
</div>
{!! Form::file('coupon_gs1code', ['class' => 'input-file']) !!}
<input type="file" id="coupon_gs1code" name="coupon_gs1code" class="input-file" accept=".jpg">
</div>
<div class="form-field">
{!! Form::label('coupon_published', 'Publié ?') !!}
{!! Form::checkbox('coupon_published', 1, false, array('id'=>'coupon_published')) !!}
{!! Form::label('coupon_published', 'Activer') !!}
<label for="coupon_published">{{ __('Publié ?') }}</label>
<input type="checkbox" id="coupon_published" name="coupon_published" value="1" {{ (old('coupon_published') === 1 ? 'checked' : null) }}>
<label for="coupon_published">{{ __('Activer') }}</label>
</div>
</div>
{!! Form::hidden('site_id', session()->get('site')->id) !!}
<!-- TODO : Revoir le passage du site_id -->
<input type="hidden" name="site_id" value="{{ session()->get('site')->id }}">
<div class="form-field submit">
<span>Les champs avec un * sont obligatoires</span>
{!! Form::submit('Créer coupon') !!}
<span>{{ __('Les champs avec un * sont obligatoires') }}</span>
<input type="submit" value="{{ __('Créer coupon') }}">
</div>
{!! Form::close() !!}
</form>
</div>
@endsection

View file

@ -11,90 +11,94 @@
</div>
@endif
<div class="form-wrapper">
<h2><i class="fas fa-ticket-alt"></i> Editer le Coupon</h2>
{!! Form::model($coupon, ['route' => ['coupon.update', $coupon], 'enctype' => 'multipart/form-data']) !!}
<h2>
<i class="fas fa-ticket-alt"></i>
{{ __('Editer le Coupon')}}
</h2>
<form method="POST" action="{{ route('coupon.update', $coupon) }}" enctype="multipart/form-data">
@csrf
@method('PUT')
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_code', 'Code de traitement *') !!}
{!! Form::input('text', 'coupon_code', $coupon->coupon_code, ['required']) !!}
<label>{{ __('Code de traitement') }} *</label>
<input type="text" name="coupon_code" value="{{ $coupon->coupon_code }}" required>
</div>
<div class="form-field">
{!! Form::label('coupon_name', 'Nom interne *') !!}
{!! Form::input('text', 'coupon_name', $coupon->coupon_name, ['required']) !!}
<label>{{ __('Nom interne') }} *</label>
<input type="text" name="coupon_name" value="{{ $coupon->coupon_name }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_value', 'Valeur faciale *') !!}
{!! Form::number('coupon_value', null, ['step' => '0.05', 'required']) !!}
<label>{{ __('Valeur faciale') }} *</label>
<input type="number" name="coupon_value" value="{{ $coupon->coupon_value }}" step="0.05" required>
</div>
<div class="form-field">
{!! Form::label('coupon_norme', 'Activer la Norme GS1') !!}
{!! Form::checkbox('coupon_norme', 1, ($coupon->coupon_norme ==1?true:null), array('id'=>'coupon_norme')) !!}
{!! Form::label('coupon_norme', 'Activer') !!}
<label for="coupon_norme">{{ __('Activer la Norme GS1') }}</label>
<input type="checkbox" id="coupon_norme" name="coupon_norme" value="1" {{ ($coupon->coupon_norme === 1 ? 'checked' : null) }}>
<label for="coupon_norme">{{ __('Activer') }}</label>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_seuil_alert', 'Seuil d\'alerte *') !!}
{!! Form::number('coupon_seuil_alert', $coupon->coupon_seuil_alert, ['required']) !!}
<label>{{ __("Seuil d'alerte") }} *</label>
<input type="number" name="coupon_seuil_alert" value="{{ $coupon->coupon_seuil_alert }}" required>
</div>
<div class="form-field">
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_enablelimitquantity', 'Activer La limite de quantité') !!}
{!! Form::checkbox('coupon_enablelimitquantity', 1, ($coupon->coupon_enablelimitquantity ==1?true:null), array('id'=>'coupon_enablelimitquantity')) !!}
{!! Form::label('coupon_enablelimitquantity', 'Activer') !!}
<label for="coupon_enablelimitquantity">{{ __('Activer La limite de quantité') }}</label>
<input type="checkbox" id="coupon_enablelimitquantity" name="coupon_enablelimitquantity" value="1" {{ ($coupon->coupon_enablelimitquantity === 1 ? 'checked' : null) }}>
<label for="coupon_enablelimitquantity">{{ __('Activer') }}</label>
</div>
<div class="form-field">
{!! Form::label('coupon_enablelimitperiod', 'Activer la limite sur une période') !!}
{!! Form::checkbox('coupon_enablelimitperiod', 1, ($coupon->coupon_enablelimitperiod ==1?true:null), array('id'=>'coupon_enablelimitperiod')) !!}
{!! Form::label('coupon_enablelimitperiod', 'Activer') !!}
<label for="coupon_enablelimitperiod">{{ __('Activer la limite sur une période') }}</label>
<input type="checkbox" id="coupon_enablelimitperiod" name="coupon_enablelimitperiod" value="1" {{ ($coupon->coupon_enablelimitperiod === 1 ? 'checked' : null) }}>
<label for="coupon_enablelimitperiod">{{ __('Activer') }}</label>
</div>
</div>
<div class="form-split">
<div class="form-field enablelimitquantity">
{!! Form::label('coupon_limitquantity', 'Limiter la diffusion à') !!}
<label>{{ __('Limiter la diffusion à') }}</label>
<span>
{!! Form::number('coupon_limitquantity', null, ['class'=>'small']) !!} coupons
<input type="number" name="coupon_limitquantity" class="small" value="{{ $coupon->coupon_limitquantity }}"> {{ __('coupons') }}
</span>
</div>
<div class="form-field enablelimitperiod">
{!! Form::label('coupon_limitperiod', 'Limiter la diffusion à une offre tous les') !!}
<label>{{ __('Limiter la diffusion à une offre tous les') }}</label>
<span>
{!! Form::number('coupon_limitperiod', null, ['class'=>'small']) !!} jours
<input type="number" name="coupon_limitperiod" value="{{ $coupon->coupon_limitperiod }}" class="small"> {{ __('jours') }}
</span>
</div>
</div>
<h4>Validité</h4>
<h4>{{ __('Validité') }}</h4>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_mindatediffusion', 'Date de début de diffusion') !!}
{!! Form::date('coupon_mindatediffusion') !!}
<label>{{ __('Date de début de diffusion') }}</label>
<input type="date" name="coupon_mindatediffusion" value="{{ $coupon->coupon_mindatediffusion }}"">
</div>
<div class="form-field">
{!! Form::label('coupon_maxdatediffusion', 'Date de fin de diffusion') !!}
{!! Form::date('coupon_maxdatediffusion') !!}
<label>{{ __('Date de fin de diffusion') }}</label>
<input type="date" name="coupon_maxdatediffusion" value="{{ $coupon->coupon_maxdatediffusion }}">
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_validity', 'Durée de validité à l\'impression') !!}
<label>{{ __("Durée de validité à l'impression") }}</label>
<span>
{!! Form::number('coupon_validity', null, ['class'=>'small', 'required']) !!} jours
<input type="number" name="coupon_validity" value="{{ $coupon->coupon_validity }}" class="small" required> {{ __('jours') }}
</span>
</div>
<div class="form-field">
{!! Form::label('coupon_maxdatevalidity', 'Date de fin de validité') !!}
{!! Form::date('coupon_maxdatevalidity') !!}
<label>{{ __('Date de fin de validité') }}</label>
<input type="date" name="coupon_maxdatevalidity" value="{{ $coupon->coupon_maxdatevalidity }}">
</div>
</div>
<div class="calendar">
<h4><i class="fas fa-plus-square addcalendar"></i> Calendrier de diffusion</h4>
<h4><i class="fas fa-plus-square addcalendar"></i> {{ __('Calendrier de diffusion') }}</h4>
@foreach ($coupon->calendriers()->get() as $calendrier)
<div class="form-field-calendar">
<input type="date" name="startdate[]" value="{{ $calendrier->calendrier_startdate->format('Y-m-d') }}">
@ -103,12 +107,12 @@
</div>
@endforeach
</div>
<h4>Mouvements</h4>
<h4>{{ __('Mouvements') }}</h4>
<div class="form-field">
<table>
<thead>
<th>Date</th>
<th class="center">Quantité</th>
<th>{{ __('Date') }}</th>
<th class="center">{{ __('Quantité') }}</th>
<th></th>
</thead>
@foreach ($coupon->mouvements()->get() as $mouvement)
@ -126,136 +130,138 @@
</table>
</div>
<h4>Vignettes</h4>
<h4>{{ __('Vignettes') }}</h4>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_thumbnail1', 'Vignette Desktop active') !!}
{!! Form::file('coupon_thumbnail1', ['class' => 'input-file']) !!}
<label for="coupon_thumbnail1">{{ __('Vignette Desktop active') }}</label>
<input type="file" id="coupon_thumbnail1" name="coupon_thumbnail1" class="input-file">
@if($coupon->coupon_thumbnail1 != "")
<figure class="figure-desktop">
<img src="{{ asset($coupon->coupon_thumbnail1) }}" alt="{{ $coupon->coupon_name }}">
</figure>
@endif
{!! Form::input('hidden', 'coupon_thumbnail1_hidden', $coupon->coupon_thumbnail1) !!}
<input type="hidden" name="coupon_thumbnail1_hidden" value="{{ $coupon->coupon_thumbnail1 }}">
</div>
<div class="form-field">
{!! Form::label('coupon_thumbnail2', 'Vignette Desktop grise') !!}
{!! Form::file('coupon_thumbnail2', ['class' => 'input-file']) !!}
<label for="coupon_thumbnail2">{{ __('Vignette Desktop grise') }}</label>
<input type="file" id="coupon_thumbnail2" name="coupon_thumbnail2" class="input-file">
@if($coupon->coupon_thumbnail2 != "")
<figure class="figure-desktop">
<img src="{{ asset($coupon->coupon_thumbnail2) }}" alt="{{ $coupon->coupon_name }}">
</figure>
@endif
{!! Form::input('hidden', 'coupon_thumbnail2_hidden', $coupon->coupon_thumbnail2) !!}
<input type="hidden" name="coupon_thumbnail2_hidden" value="{{ $coupon->coupon_thumbnail2 }}">
</div>
</div>
<div class="form-split align-start">
<div class="form-field">
{!! Form::label('coupon_thumbnail3', 'Vignette Mobile active') !!}
{!! Form::file('coupon_thumbnail3', ['class' => 'input-file']) !!}
<label for="coupon_thumbnail3">{{ __('Vignette Mobile active') }}</label>
<input type="file" id="coupon_thumbnail3" name="coupon_thumbnail3" class="input-file">
@if($coupon->coupon_thumbnail3 != "")
<figure class="figure-mobile">
<img src="{{ asset($coupon->coupon_thumbnail3) }}" alt="{{ $coupon->coupon_name }}">
</figure>
@endif
{!! Form::input('hidden', 'coupon_thumbnail3_hidden', $coupon->coupon_thumbnail3) !!}
<input type="hidden" name="coupon_thumbnail3_hidden" value="{{ $coupon->coupon_thumbnail3 }}">
</div>
<div class="form-field">
{!! Form::label('coupon_thumbnail4', 'Vignette Mobile grise') !!}
{!! Form::file('coupon_thumbnail4', ['class' => 'input-file']) !!}
<label for="coupon_thumbnail4">{{ __('Vignette Mobile grise') }}</label>
<input type="file" id="coupon_thumbnail4" name="coupon_thumbnail4" class="input-file">
@if($coupon->coupon_thumbnail4 != "")
<figure class="figure-mobile">
<img src="{{ asset($coupon->coupon_thumbnail4) }}" alt="{{ $coupon->coupon_name }}">
</figure>
@endif
{!! Form::input('hidden', 'coupon_thumbnail4_hidden', $coupon->coupon_thumbnail4) !!}
<input type="hidden" name="coupon_thumbnail4_hidden" value="{{ $coupon->coupon_thumbnail4 }}">
</div>
</div>
<h4>Informations pour génération</h4>
<h4>{{ __('Informations pour génération') }}</h4>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_treatment_center', 'Centre de traitement *') !!}
{!! Form::select('coupon_treatment_center', ['HighCo', 'Sogec']) !!}
<label>{{ __('Centre de traitement') }} *</label>
<select name="coupon_treatment_center">
<option value="0" @if ($coupon->coupon_treatment_center === 0) selected @endif>HighCo</option>
<option value="1" @if ($coupon->coupon_treatment_center === 1) selected @endif>Sogec</option>
</select>
</div>
<div class="form-field">
{!! Form::label('coupon_legal_mentions_splitted', 'Activer les mentions internationnales') !!}
{!! Form::checkbox('coupon_legal_mentions_splitted', 1, ($coupon->coupon_legal_mentions_splitted ==1?true:null)) !!}
{!! Form::label('coupon_legal_mentions_splitted', 'Activer') !!}
<label for="coupon_legal_mentions_splitted">{{ __('Activer les mentions internationnales') }}</label>
<input type="checkbox" id="coupon_legal_mentions_splitted" name="coupon_legal_mentions_splitted" value="1" {{ ($coupon->coupon_legal_mentions_splitted === 1 ? 'checked' : null) }}>
<label for="coupon_legal_mentions_splitted">{{ __('Activer') }}</label>
</div>
</div>
<div class="form-split">
<div class="form-field-textarea">
{!! Form::label('coupon_validity_text', 'Texte de validité *') !!}
{!! Form::textarea('coupon_validity_text', null, ['required']) !!}
<label>{{ __('Texte de validité') }} *</label>
<textarea name="coupon_validity_text" cols="30" rows="10" required>{{ $coupon->coupon_validity_text }}</textarea>
</div>
<div class="form-field-textarea">
{!! Form::label('coupon_legal_mentions', 'Mentions légales *') !!}
{!! Form::textarea('coupon_legal_mentions', null, ['required']) !!}
<label>{{ __('Mentions légales') }} *</label>
<textarea name="coupon_legal_mentions" cols="30" rows="10" required>{{ $coupon->coupon_legal_mentions }}</textarea>
</div>
</div>
<div class="form-split align-start">
<div class="form-field">
<div class="title">
{!! Form::label('coupon_decoration_image', 'Image de décoration *') !!}
<span>280x260px ou 280x160px si GS1</span>
<span>Formats : JPG ou PNG</span>
<label for="coupon_decoration_image">{{ __('Image de décoration') }} *</label>
<span>{{ __('280x260px ou 280x160px si GS1') }}</span>
<span>{{ __('Formats : JPG ou PNG') }}</span>
</div>
{!! Form::file('coupon_decoration_image', ['class' => 'input-file', 'accept' => '.jpg,.jpeg,.png']) !!}
<input type="file" id="coupon_decoration_image" name="coupon_decoration_image" class="input-file" accept=".jpg,.jpeg,.png">
@if($coupon->coupon_decoration_image != "")
<figure class="figure-desktop">
<img src="{{ asset($coupon->coupon_decoration_image) }}" alt="{{ $coupon->coupon_name }}">
</figure>
@endif
{!! Form::input('hidden', 'coupon_decoration_image_hidden', $coupon->coupon_decoration_image) !!}
<input type="hidden" name="coupon_decoration_image_hidden" value="{{ $coupon->coupon_decoration_image }}">
</div>
<div class="form-field">
<div class="title">
{!! Form::label('coupon_logo_image', 'Logo à afficher *') !!}
<span>135x70px</span>
<span>Formats : JPG ou PNG</span>
<label for="coupon_logo_image">{{ __('Logo à afficher') }} *</label>
<span>{{ __('135x70px') }}</span>
<span>{{ __('Formats : JPG ou PNG') }}</span>
</div>
{!! Form::file('coupon_logo_image', ['class' => 'input-file']) !!}
<input type="file" id="coupon_logo_image" name="coupon_logo_image" class="input-file" accept=".jpg,.jpeg,.png">
@if($coupon->coupon_logo_image != "")
<figure class="figure-desktop">
<img src="{{ asset($coupon->coupon_logo_image) }}" alt="{{ $coupon->coupon_name }}">
</figure>
@endif
{!! Form::input('hidden', 'coupon_logo_image_hidden', $coupon->coupon_logo_image) !!}
<input type="hidden" name="coupon_logo_image_hidden" value="$coupon->coupon_logo_image">
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('coupon_rcs', 'RCS du site *') !!}
{!! Form::text('coupon_rcs', null, ['required']) !!}
<label>{{ __('RCS du site') }} *</label>
<input type="text" name="coupon_rcs" value="{{ $coupon->coupon_rcs }}" required>
</div>
<div class="form-field">
{!! Form::label('coupon_site_contact', 'Contact mail *') !!}
{!! Form::text('coupon_site_contact', null, ['required']) !!}
<label>{{ __('Contact mail') }} *</label>
<input type="text" name="coupon_site_contact" value="{{ $coupon->coupon_site_contact }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field gs1code">
<div class="title">
{!! Form::label('coupon_gs1code', 'Image du code barre GS1 *') !!}
<span>Formats : JPG</span>
<label for="coupon_gs1code">{{ __('Image du code barre GS1') }} *</label>
<span>{{ __('Formats : JPG') }}</span>
</div>
{!! Form::file('coupon_gs1code', ['class' => 'input-file']) !!}
<input type="file" id="coupon_gs1code" name="coupon_gs1code" class="input-file" accept=".jpg">
@if($coupon->coupon_gs1code != "")
<figure class="figure-mobile">
<img src="{{ asset($coupon->coupon_gs1code) }}" alt="{{ $coupon->coupon_name }}">
</figure>
{!! Form::input('hidden', 'coupon_gs1code_image_hidden', $coupon->coupon_gs1code, array('id'=>'coupon_gs1code_image_hidden')) !!}
<input type="hidden" name="coupon_gs1code_image_hidden" value="{{ $coupon->coupon_gs1code }}">
@endif
</div>
<div class="form-field">
{!! Form::label('coupon_published', 'Publié ?') !!}
{!! Form::checkbox('coupon_published', 1, ($coupon->coupon_published ==1?true:null), array('id'=>'coupon_published')) !!}
{!! Form::label('coupon_published', 'Activer') !!}
<label for="coupon_published">{{ __('Publié ?') }}</label>
<input type="checkbox" id="coupon_published" name="coupon_published" value="1" {{ ($coupon->coupon_published === 1 ? 'checked' : null) }}>
<label for="coupon_published">{{ __('Activer') }}</label>
</div>
</div>
<h4>Bon généré :</h4>
<h4>{{ __('Bon généré') }} :</h4>
<div class="form-split" style="justify-content:center;">
@if($coupon->coupon_image != "")
<figure class="figure-mobile">
@ -263,12 +269,13 @@
</figure>
@endif
</div>
{!! Form::hidden('site_id', session()->get('site')->id) !!}
<!-- TODO : Revoir le passage du site_id -->
<input type="hidden" name="site_id" value="{{ session()->get('site')->id }}">
<div class="form-field submit">
{!! Form::submit('Mettre à jour') !!}
<input type="submit" value="{{ __('Mettre à jour') }}">
</div>
{!! Form::close() !!}
</form>
</div>
@endsection

View file

@ -1,7 +1,14 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-ticket-alt"></i> Coupons <a href="{{ route('coupon.create') }}" class="add-button"><i class="fas fa-plus-square"></i> Ajouter</a></h2>
<h2>
<i class="fas fa-ticket-alt"></i>
{{ __('Coupons') }}
<a href="{{ route('coupon.create') }}" class="add-button">
<i class="fas fa-plus-square"></i>
{{ __('Ajouter') }}
</a>
</h2>
<div class="campagne-select"></div>
<div class="content-list">
<table>
@ -38,9 +45,10 @@
@endforeach
</tbody>
</table>
<input type="hidden" name="csrf" id="csrf" value="<?php echo csrf_token(); ?>">
<input type="hidden" name="csrf" id="csrf" value="<?= csrf_token(); ?>">
</div>
{!! Form::open(['id' => 'delete-hidden']) !!}
<form id="delete-hidden" method="POST">
@csrf
@method('DELETE')
{!! Form::close() !!}
</form>
@endsection

View file

@ -0,0 +1,81 @@
@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>
@dump($campaigns)
@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,29 +1,28 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-file-export"></i> Export des données coupons</h2>
<h2>
<i class="fas fa-file-export"></i>
{{ __('Export des données coupons') }}
</h2>
<div class="selector-export">
<h4>Période :</h4>
<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="<?php echo csrf_token(); ?>">
<a href="#" class="add-button export-data"><i class="fas fa-file-export"></i> Exporter les données</a>
<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>
@if (isset($site->coupons) && $site->coupons->count()>0)
@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
@endif
@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="#" 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>
@ -38,15 +37,19 @@
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: '/exportCoupon',
url: '/bo/export/coupon',
type: 'POST',
data: {
ids: ids,
@ -54,11 +57,11 @@
enddate: $('#enddate').val(),
},
dataType: 'JSON',
success: function (response) {
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);
@ -67,4 +70,4 @@
})
</script>
@endsection
@endsection

View file

@ -10,17 +10,17 @@
<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>
<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>
<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>
<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>
@ -30,17 +30,17 @@
@if($coupon->coupon_mindatediffusion != null)
<td>{{ date('d/m/Y', strtotime($coupon->coupon_mindatediffusion)) }}</td>
@else
<td>n/c</td>
<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>
<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>
<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>

View file

@ -3,11 +3,11 @@
<div class="title">
<a href="{{ route('home') }}" class="logo">
<i class="fas fa-ticket-alt"></i>
<i class="fas fa-hand-holding"></i>
<i class="fas fa-hand-holding"></i>
</a>
<h1>Mes BR</h1>
</div>
<div class="marque">
<img src="{{ asset(session()->get('current_logo')['site_logo']) }}" alt="Logo Marque">
<i class="fas fa-angle-down"></i>
@ -16,15 +16,15 @@
<ul>
@foreach (session()->get('marques') as $marque)
<li>
{!! Form::open(['route' => 'change_marque', 'class' => 'marques']) !!}
<input type="hidden" name="current_route" value="{{session()->get('active_route')}}">
<form action="{{ route('brand-change') }}" method="POST" class='marques'>
@csrf
<input type="hidden" name="site_id" value="{{ $marque['id'] }}">
<button type="submit">{{$marque['site_nom']}}</button>
{!! Form::close() !!}
<button type="submit">{{$marque['site_nom']}}</button>
</form>
</li>
@endforeach
</ul>
</div>
</div>
</header>

View file

@ -7,6 +7,7 @@
<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>
@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>

View file

@ -2,21 +2,24 @@
@section('content')
<h2><i class="fas fa-cogs"></i> Maintenance </h2>
<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 class="add-button" href="{{ route('maintenance.user.create') }}"><i class="fas fa-plus-square"></i> Ajouter</a>
<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>{{ __('Nom') }}</th>
<th>{{ __('Email') }}</th>
<th>{{ __('Rôle') }}</th>
<th>{{ __('Site liés') }}</th>
<th></th>
</thead>
@foreach ($users as $user)
@ -24,8 +27,12 @@
<td><a href="{{ route('maintenance.user.edit', $user) }}">{{ $user->name }}</a></td>
<td>{{ $user->email }}</td>
<td>{{ $user->roles }}</td>
<td class="sites">{!! $user->linkedSites !!}</td>
@if (Auth::user()->id == $user->id)
<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>
@ -41,53 +48,14 @@
</tr>
</tfoot>
</table>
{!! Form::open(['id' => 'delete-hidden']) !!}
@method('DELETE')
{!! Form::close() !!}
<form method="POST" id="delete-hidden">
@csrf
@method('DELETE')
</form>
@endif
</div>
<div class="clean-app">
<h5><i class="fas fa-database"></i> Nettoyage de la base</h5>
<div class="clean-line">
<p>Nettoyer les murs <span>(datant de plus d'un an)</span></p>
<div class="btn-clean">
<div class="loader-mini">
<div class="lds-ripple">
<div></div>
<div></div>
</div>
</div>
<a class="add-button clean-walls" href="#"><i class="fas fa-broom"></i> Nettoyer</a>
</div>
</div>
<div class="clean-line">
<p>Nettoyer les paniers <span>(qui ont été imprimés et datant de plus de deux mois)</span></p>
<div class="btn-clean">
<div class="loader-mini">
<div class="lds-ripple">
<div></div>
<div></div>
</div>
</div>
<a class="add-button clean-baskets" href="#"><i class="fas fa-broom"></i> Nettoyer</a>
</div>
</div>
<div class="clean-line">
<p>Nettoyer les contacts <span>(qui n'ont pas de paniers ni de murs liés et datant de plus d'un mois)</span></p>
<div class="btn-clean">
<div class="loader-mini">
<div class="lds-ripple">
<div></div>
<div></div>
</div>
</div>
<a class="add-button clean-contacts" href="#"><i class="fas fa-broom"></i> Nettoyer</a>
</div>
</div>
<input id="csrf" name="csrf" type="hidden" value="<?php echo csrf_token(); ?>">
</div>
<div class="error-log">
<h5><i class="fas fa-file-alt"></i> Erreur d'appels :</h5>
<h5><i class="fas fa-file-alt"></i> {{ __("Erreur d'appels") }} :</h5>
<canvas id="myChart" height="300" width="200"></canvas>
</div>
@endsection
@ -113,7 +81,7 @@
data: {
labels: labels,
datasets: [{
label: 'Nombres d\'erreurs API',
label: '{{ __("Erreurs") }}',,
data: errorCount,
backgroundColor: 'rgba(255, 0, 0, 0.2)',
borderColor: 'rgba(255,0,0,1)',
@ -132,164 +100,5 @@
}
}
});
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
}
});
$('.clean-app').on('click', '.clean-contacts', function(event) {
event.preventDefault();
let loader = $(this).parent().find('.loader-mini');
loader.show();
$.fancyConfirm({
title: "<i class='fas fa-broom'></i> Nettoyage",
message: "Êtes-vous sûr de vouloir nettoyer la base des contacts qui n'ont pas de paniers ni de murs liés et datant de plus d'un mois ?",
okButton: 'Supprimer',
noButton: 'Annuler',
callback: function(value) {
if (value) {
$.ajax({
url: '/displayCleanContacts',
type: 'POST',
data: {},
dataType: 'JSON',
success: function(response) {
$.fancyConfirm({
title: "<i class='fas fa-broom'></i> Nettoyage",
message: "Vous allez supprimer " + response.contact_count +
" contacts qui ont plus d'un mois et qui n'ont pas de panier ni de murs en cours, Êtes-vous sûr ?",
okButton: 'Supprimer',
noButton: "Annuler",
callback: function(value) {
if (value) {
$.ajax({
url: '/cleanContacts',
type: 'POST',
data: {},
dataType: 'JSON',
success: function(response) {
$.fancyInfo({
title: "<i class='fas fa-info-circle'></i> Succès",
message: "Le nettoyage des contacts a bien été effectué.",
okButton: 'Valider',
noButton: "",
callback: function(
value) {
if (
value) {} else {
loader
.hide();
}
}
});
loader.hide();
},
error: function(e) {
console.log(e.responseText);
}
});
} else {
loader.hide();
}
}
});
loader.hide();
},
error: function(e) {
console.log(e.responseText);
}
});
} else {
loader.hide();
}
}
});
})
$('.clean-app').on('click', '.clean-walls', function(event) {
event.preventDefault();
let loader = $(this).parent().find('.loader-mini');
loader.show();
$.fancyConfirm({
title: "<i class='fas fa-broom'></i> Nettoyage",
message: "Êtes-vous sûr de vouloir nettoyer la base des mur imprimés ?",
okButton: 'Supprimer',
noButton: 'Annuler',
callback: function(value) {
if (value) {
$.ajax({
url: '/cleanWalls',
type: 'POST',
data: {},
dataType: 'JSON',
success: function(response) {
$.fancyInfo({
title: "<i class='fas fa-info-circle'></i> Succès",
message: "Le nettoyage des murs a bien été effectué.",
okButton: 'Valider',
noButton: "",
callback: function(value) {
}
});
loader.hide();
},
error: function(e) {
console.log(e.responseText);
}
});
} else {
loader.hide();
}
}
});
})
$('.clean-app').on('click', '.clean-baskets', function(event) {
event.preventDefault();
let loader = $(this).parent().find('.loader-mini');
loader.show();
$.fancyConfirm({
title: "<i class='fas fa-broom'></i> Nettoyage",
message: "Êtes-vous sûr de vouloir nettoyer la base des panier imprimés ?",
okButton: 'Supprimer',
noButton: 'Annuler',
callback: function(value) {
if (value) {
$.ajax({
url: '/cleanBaskets',
type: 'POST',
data: {},
dataType: 'JSON',
success: function(response) {
$.fancyInfo({
title: "<i class='fas fa-info-circle'></i> Succès",
message: "Le nettoyage des paniers a bien été effectué.",
okButton: 'Valider',
noButton: "",
callback: function(value) {
}
});
loader.hide();
},
error: function(e) {
console.log(e.responseText);
}
});
} else {
loader.hide();
}
}
});
})
</script>
@endsection

View file

@ -28,7 +28,7 @@
</tr>
<tr>
<td>Type</td>
<td>{{ $campagne->camp_type }}</td>
<td>{{ $campagne->camp_type->label }}</td>
</tr>
<tr>
<td>Impression limité</td>

View file

@ -19,10 +19,10 @@
<i class="fas fa-check-circle green"></i>
@else
<i class="fas fa-times-circle red"></i>
@endif
@endif
</p>
<p><a href="{{ route('camp.stats', $campagne) }}">{{ $campagne->camp_name }} ({{ $campagne->camp_id }})</a></p>
<p>{{ $campagne->camp_type }}</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>
@ -64,7 +64,7 @@
@else
<i class="fas fa-times-circle red"></i>
@endif
@endif
@endif
</td>
{{-- <p>{{$coupon->remain}}/{{$coupon->quantity}}</p> --}}
</tr>
@ -73,11 +73,14 @@
</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>

View file

@ -1,7 +1,10 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-users-cog"></i> Nouvel utilisateur</h2>
<h2>
<i class="fas fa-users-cog"></i>
{{ __('Nouvel utilisateur') }}
</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@ -12,41 +15,46 @@
</div>
@endif
<div class="form-wrapper">
{!! Form::open(['route' => 'maintenance.user.create-submit', 'enctype' => 'multipart/form-data', 'autocomplete' => 'off']) !!}
<form method="POST" action="{{ route('maintenance.user.create-submit') }}" autocomplete="off">
@csrf
<div class="form-split">
<div class="form-field">
{!! Form::label('name', 'Nom *') !!}
{!! Form::text('name', null, ['required']) !!}
</div>
<div class="form-field">
{!! Form::label('email', 'Email *') !!}
{!! Form::input('text', 'email', null, ['required']) !!}
</div>
<div class="form-field">
<label>{{ __('Nom') }} *</label>
<input type="text" name="name" value="{{ old('name') }}" required>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('password', 'Mot de passe *') !!}
{!! Form::password('password', $attributes = ['autocomplete' => 'new-password', 'required' => 'required', 'minlength' => 6]) !!}
</div>
<div class="form-field">
{!! Form::label('roles', 'Rôle') !!}
{!! Form::select('roles', array('superadmin' => 'Super Administrateur', 'admin' => 'Administrateur', 'marketing' => 'Marketing')) !!}
</div>
<div class="form-field">
<label>{{ __('Email') }} *</label>
<input type="email" name="email" value="{{ old('email') }}" required>
</div>
<h4>Sites liés</h4>
<div class="form-split sitesChoice">
@foreach($sites as $site)
<div class="inputGroup">
<input id="site[{{$site->id}}]" name="site[{{$site->coupon_id}}]" type="checkbox" value="{{$site->site_id}}"/>
<label for="site[{{$site->id}}]">{{$site->site_nom}}</label>
<label for="site[{{$site->id}}]">{{$site->site_nom}}</label>
</div>
@endforeach
</div>
<div class="form-field submit">
<span>Les champs avec un * sont obligatoires</span>
{!! Form::submit('Enregistrer') !!}
</div>
{!! Form::close() !!}
<div class="form-split">
<div class="form-field">
<label>{{ __('Mot de passe') }} *</label>
<input type="password" name="password" autocomplete="new-password" minlength="8" required>
</div>
<div class="form-field">
<label>{{ __('Rôle') }}</label>
<select name="roles">
@foreach (UserRoles::toArray() as $role)
<option value="{{ $role->value }}" @if (old('roles') === $role->value) selected @endif>{{ $role->label }}</option>
@endforeach
</select>
</div>
</div>
<h4>{{ __('Sites liés') }}</h4>
<div class="form-split sitesChoice">
@foreach($sites as $site)
<div class="inputGroup">
<input id="site[{{$site->id}}]" name="site[{{$site->coupon_id}}]" type="checkbox" value="{{$site->site_id}}"/>
<label for="site[{{$site->id}}]">{{$site->site_nom}}</label>
<label for="site[{{$site->id}}]">{{$site->site_nom}}</label>
</div>
@endforeach
</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,27 +1,44 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-users-cog"></i> Editer l'utilisateur</h2>
<h2>
<i class="fas fa-users-cog"></i>
{{ __("Editer l'utilisateur") }}
</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::model($user, ['route' => ['maintenance.user.edit-submit', $user], 'enctype' => 'multipart/form-data']) !!}
<form method="POST" action="{{ route('maintenance.user.edit-submit', ['user' => $user]) }}">
@csrf
@method('PUT')
<div class="form-split">
<div class="form-field">
{!! Form::label('name', 'Nom') !!}
{!! Form::text('name', null, ['required']) !!}
<label>{{ __('Nom') }} *</label>
<input type="text" name="name" value="{{ $user->name }}" required>
</div>
<div class="form-field">
{!! Form::label('email', 'Email') !!}
{!! Form::input('text', 'email', null, ['required']) !!}
<label>{{ __('Email') }} *</label>
<input type="email" name="email" value="{{ $user->email }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('roles', 'Rôle') !!}
{!! Form::select('roles', array('superadmin' => 'Super Administrateur', 'admin' => 'Administrateur', 'marketing' => 'Marketing')) !!}
<label>{{ __('Rôle') }}</label>
<select name="roles">
@foreach (UserRoles::toArray() as $role)
<option value="{{ $role->value }}" @if ($user->roles === $role->value) selected @endif>{{ $role->label }}</option>
@endforeach
</select>
</div>
</div>
<h4>Sites liés</h4>
<h4>{{ __('Sites liés') }}</h4>
<div class="form-split sitesChoice">
@foreach($sites as $site)
<div class="inputGroup">
@ -32,8 +49,8 @@
@endforeach
</div>
<div class="form-field submit">
{!! Form::submit('Enregistrer') !!}
<input type="submit" value="{{ __('Enregistrer') }}">
</div>
{!! Form::close() !!}
</form>
</div>
@endsection

View file

@ -14,6 +14,8 @@
Route::prefix('v1')
->group(function () {
Route::get('/customer/mur', 'Api\v1\CustomerController@mur');
Route::get('/customer/basket', 'Api\v1\CustomerController@basket');
Route::get('/customer/basket/print', 'Api\v1\CustomerController@printBasket');
Route::resource('customer', 'Api\v1\CustomerController');
Route::get('/mur', 'Api\v1\MurController@show');
Route::get('/coupons/print', 'Api\v1\CouponsController@print');

View file

@ -13,10 +13,20 @@ Route::group(['prefix' => 'bo', 'middleware' => ['auth', 'saveroute']], function
Route::get('/statistiques/{campagne}', 'StatistiqueController@statdetail')->name('camp.stats');
// ---- Routes pour les ressources en CRUD
Route::resource('coupon', 'CouponController')->except(['show'])->middleware('admin');
// Routes campagne
Route::post('/campagne/{campaign}/add-coupons', 'CampagneController@addCoupons');
Route::post('/campagne/{campaign}/remove-coupon/{coupon}', 'CampagneController@removeCoupon');
Route::post('/campagne/{campaign}/new-notification', 'CampagneController@saveNotification')->name('campaign.new-notif');
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');
Route::resource('mouvement', 'MouvementController')->only(['store'])->middleware('admin');
// ----- Routes de la partie maintenance
Route::group(['middleware' => ['superadmin']], function () {
Route::get('maintenance', 'MaintenanceController@show')->middleware('superadmin')->name('maintenance.show');
@ -34,44 +44,23 @@ Route::group(['prefix' => 'bo', 'middleware' => ['auth', 'saveroute']], function
// ---- Logout
Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
// ---- Route de changement de site
Route::post('/change_marque', 'ChangeMarqueController')->name('change_marque');
// ---- Routes pour la gestion des mails d'alerte
Route::post('new-notification', array('uses' => 'CampagneController@saveNotification'));
Route::delete('delete-notification/{id}', array('uses' => 'CampagneController@deleteNotification'))
->name('campagne.deleteNotif');
Route::post('/brand-change', 'BrandChangeController')->name('brand-change');
// ---- Route Export PDF
Route::get('export', 'ExportController@show')->name('export.coupons');
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@unpublish_coupons_ajax');
Route::post('/publish-coupons-ajax', 'AjaxController@publish_coupons_ajax');
// ---- Publier/Depublier des campagnes
Route::post('/unpublish-camp-ajax', 'AjaxController@unpublish_camp_ajax');
Route::post('/publish-camp-ajax', 'AjaxController@publish_camp_ajax');
Route::post('/unpublish-coupons-ajax', 'AjaxController@unpublishCouponsAjax');
Route::post('/publish-coupons-ajax', 'AjaxController@publishCouponsAjax');
// ---- Impressions de coupons
Route::post('/ajx_impression', 'AjaxController@impression_ajax');
// ---- Recherche Contact
Route::any('bo/contact/search', 'ContactController@search_contact')->name('contact.search');
// ---- Chargement des widget par contacts
Route::post('/loadWidget', 'AjaxController@load_widget');
// ---- Visualisation des campagnes avec un compte démo
Route::post('/showDemo', 'AjaxController@show_demo');
// ---- Maintenance : Nettoyer les contacts
Route::post('/displayCleanContacts', 'AjaxController@get_clean_contacts_detail');
Route::post('/cleanContacts', 'AjaxController@clean_contacts');
// ---- Maintenance : Nettoyer les murs
Route::post('/cleanWalls', 'AjaxController@clean_walls');
// ---- Maintenance : Nettoyer les paniers
Route::post('/cleanBaskets', 'AjaxController@clean_baskets');
Route::post('/ajx_impression', 'AjaxController@impressionAjax');
// ---- Statistiques
Route::post('/loadStat', 'StatistiqueController@load_stats');
// ---- Export Coupons
Route::post('/exportCoupon', 'ExportController@export_coupons');
Route::post('/loadStat', 'StatistiqueController@loadStats');