329 lines
11 KiB
PHP
329 lines
11 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Contact;
|
|
use App\Site;
|
|
use App\Campagne;
|
|
use App\Enums\CampaignTypes;
|
|
use App\Http\Requests\Contact\LoadWidgetContact;
|
|
use App\Http\Requests\Contact\SearchContact;
|
|
use App\Http\Requests\Contact\StoreContact;
|
|
use App\Http\Requests\Contact\UpdateContact;
|
|
use App\Log;
|
|
use App\Panier;
|
|
use App\PanierContent;
|
|
use App\Traits\CouponTrait;
|
|
use Illuminate\Http\Request;
|
|
|
|
class ContactController extends Controller
|
|
{
|
|
use CouponTrait;
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
return view('contact.index')->with('search', false);
|
|
}
|
|
|
|
|
|
public function search(SearchContact $request)
|
|
{
|
|
session()->put('active_route', 'contact');
|
|
|
|
$contacts = Contact::where('contact_siteId', session()->get('site')->site_id)
|
|
->searchFirstname($request->searchFirstname)
|
|
->searchName($request->searchName)
|
|
->searchEmail($request->searchEmail)
|
|
->searchCp($request->searchCp)
|
|
->searchVille($request->searchVille)
|
|
->searchCountry($request->searchCountry)
|
|
->orderBy('contact_createdate', 'DESC')
|
|
->paginate(15, ['*'], 'page', $request->page);
|
|
|
|
$searchData = array(
|
|
'name' => $request->searchName,
|
|
'firstname' => $request->searchFirstname,
|
|
'email' => $request->searchEmail,
|
|
'cp' => $request->searchCp,
|
|
'ville' => $request->searchVille,
|
|
'pays' => $request->searchCountry
|
|
);
|
|
|
|
return view('contact.index')->with('contacts', $contacts)->with('search', true)->with('searchData', $searchData);
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function create()
|
|
{
|
|
return view('contact.create');
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param StoreContact $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store(StoreContact $request)
|
|
{
|
|
// TODO : Revoir le passage du site
|
|
$site = session()->get('site');
|
|
|
|
$contact = new Contact();
|
|
$contact->fill($request->validated());
|
|
$contact->contact_siteId = $site->site_id;
|
|
$contact->save();
|
|
|
|
return redirect()->route('contact.edit', ['contact' => $contact]);
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param \App\Campagne $campagne
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function edit(Contact $contact)
|
|
{
|
|
$campagnes = Campagne::where(['camp_siteId' => $contact->contact_siteId, 'camp_published' => 1])->get();
|
|
|
|
return view('contact.edit', ['contact' => $contact, 'campagnes' => $campagnes]);
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param UpdateContact $request
|
|
* @param \App\Contact $contact
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update(UpdateContact $request, Contact $contact)
|
|
{
|
|
$contact->fill($request->validated());
|
|
if ($contact->save()) {
|
|
session()->flash('update_ok', __('La campagne a bien été modifiée'));
|
|
} else {
|
|
session()->flash('update_nok', "Erreur lors de l'enregistrement");
|
|
}
|
|
return redirect()->route('contact.edit', ['contact' => $contact]);
|
|
}
|
|
|
|
public function updateContact(Request $request)
|
|
{
|
|
$error = false;
|
|
// ---- Contrôle des paramètres
|
|
if (isset($request->refadherent) && $request->refadherent != "") {
|
|
$refadherent = $request->refadherent;
|
|
} else {
|
|
$error = true;
|
|
}
|
|
if (isset($request->nom) && $request->nom != "") {
|
|
$nom = $request->nom;
|
|
} else {
|
|
$error = true;
|
|
}
|
|
if (isset($request->refsite) && $request->refsite != "") {
|
|
$refsite = $request->refsite;
|
|
} else {
|
|
$error = true;
|
|
}
|
|
|
|
if (isset($request->prenom) && $request->prenom != "") {
|
|
$prenom = $request->prenom;
|
|
} else {
|
|
$error = true;
|
|
}
|
|
if (isset($request->email) && $request->email != "" && filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
|
|
$email = $request->email;
|
|
} else {
|
|
$error = true;
|
|
}
|
|
if (isset($request->code_postal) && $request->code_postal != "") {
|
|
$code_postal = $request->code_postal;
|
|
} else {
|
|
$error = true;
|
|
}
|
|
if (isset($request->commune) && $request->commune != "") {
|
|
$commune = $request->commune;
|
|
} else {
|
|
$error = true;
|
|
}
|
|
if (isset($request->pays) && $request->pays != "") {
|
|
if (filter_var($request->pays, FILTER_VALIDATE_INT)) {
|
|
$pays = $request->pays;
|
|
} else {
|
|
$error = true;
|
|
}
|
|
} else {
|
|
$pays = 250;
|
|
}
|
|
|
|
if ($error) {
|
|
return response()->json([
|
|
'Statut' => 'KO',
|
|
'Code' => 101,
|
|
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
|
|
]);
|
|
}
|
|
|
|
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
|
|
|
|
if ($contact) {
|
|
$contact->contact_prenom = $prenom;
|
|
$contact->contact_nom = $nom;
|
|
$contact->contact_email = $email;
|
|
$contact->contact_cp = $code_postal;
|
|
$contact->contact_ville = $commune;
|
|
$contact->contact_country = $pays;
|
|
$contact->contact_updatedate = date('Y-m-d H:i:s');
|
|
if (isset($request->hashcode) && $request->hashcode != "") {
|
|
$contact->contact_hash = $request->hashcode;
|
|
}
|
|
} else {
|
|
$site = Site::where('site_id', $refsite)->first();
|
|
|
|
if ($site) {
|
|
$contact = new Contact();
|
|
$contact->contact_nom = $nom;
|
|
$contact->contact_prenom = $prenom;
|
|
$contact->contact_ref = $refadherent;
|
|
$contact->contact_email = $email;
|
|
$contact->contact_cp = $code_postal;
|
|
$contact->contact_ville = $commune;
|
|
$contact->contact_country = $pays;
|
|
$contact->contact_siteId = $refsite;
|
|
if (isset($request->hashcode) && $request->hashcode != "") {
|
|
$contact->contact_hash = $request->hashcode;
|
|
} else {
|
|
$contact->contact_hash = strtoupper(md5(uniqid(time(), true)));
|
|
}
|
|
} else {
|
|
return response()->json([
|
|
'Statut' => 'KO',
|
|
'Code' => 102,
|
|
'Message' => 'Le site spécifié n\'existe pas'
|
|
]);
|
|
}//end if
|
|
}//end if
|
|
|
|
if ($contact->save()) {
|
|
return response()->json([
|
|
'Statut' => 'OK',
|
|
'contact' => $contact
|
|
]);
|
|
} else {
|
|
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));
|
|
}
|
|
}
|
|
}
|