get('site')->site_id; $campagnes = Campagne::where('camp_siteId', $siteId)->get(); return view('campagnes.index')->with('campagnes', $campagnes); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('campagnes.create'); } /** * Store a newly created resource in storage. * * @param StoreCampaign $request * @return \Illuminate\Http\Response */ public function store(StoreCampaign $request) { // 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)) { if ($campagne->camp_type->equals(CampaignTypes::mur())) { File::copyDirectory(resource_path('/views/template/mur'), public_path('/landings/' . $campagne->camp_id)); } elseif ($campagne->camp_type->equals(CampaignTypes::panier())) { File::copyDirectory(resource_path('/views/template/panier'), public_path('/landings/' . $campagne->camp_id)); } elseif ($campagne->camp_type->equals(CampaignTypes::murss())) { File::copyDirectory(resource_path('/views/template/murnoselection'), public_path('/landings/' . $campagne->camp_id)); } elseif ($campagne->camp_type->equals(CampaignTypes::paniers())) { File::copyDirectory(resource_path('/views/template/panierselection'), public_path('/landings/' . $campagne->camp_id)); } } return redirect(route('campagne.edit', ['campagne' => $campagne])); } /** * Show the form for editing the specified resource. * * @param \App\Models\Campagne $campagne * @return \Illuminate\Http\Response */ public function edit(Campagne $campagne) { // TODO : Revoir le passage du site id $siteId = session()->get('site')->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(); return view('campagnes.edit', ['campagne' => $campagne, 'coupons' => $couponsNotLinked]); } /** * Update the specified resource in storage. * * @param UpdateCampaign $request * @param \App\Models\Campagne $campagne * @return \Illuminate\Http\Response */ public function update(UpdateCampaign $request, Campagne $campagne) { $campagne->fill($request->validated()); if (!isset($request->camp_limitedPrinting)) { $campagne->camp_limitedPrinting = 0; } if ($campagne->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('campagne.edit', ['campagne' => $campagne]); } /** * Remove the specified resource from storage. * * @param DeleteCampaign $request * @param \App\Models\Campagne $campagne * @return \Illuminate\Http\Response */ public function destroy(DeleteCampaign $request, Campagne $campagne) { $campagne->camp_published = 0; $campagne->save(); if ($campagne->delete()) { return redirect(route('campagne.index')); } else { session()->flash('delete_nok', 'Erreur lors de la suppression'); return view('campagnes.edit')->with('campagne', $campagne); } } // ---- Ajoute des coupons à une campagne public function addCoupons(AddCouponsCampaign $request, Campagne $campaign) { $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\Models\Notification $notification * * @return array */ public function deleteNotification(RemoveNotifCampaign $request, Notification $notification) { 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); $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) { $error = false; // ---- Contrôle des paramètres if (isset($request->refcamp) && $request->refcamp != "") { $refcamp = $request->refcamp; $campagne = Campagne::where(['camp_id' => $refcamp])->first(); if (!$campagne) { return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas' ]); } } else { $error = true; } if (isset($request->refsite) && $request->refsite != "") { $refsite = $request->refsite; $site = Site::where(['site_id' => $refsite])->first(); if (!$site) { return response()->json([ 'Statut' => 'KO', 'Code' => 102, 'Message' => 'Le site n\'existe pas' ]); }; } else { $error = true; } if ($campagne->camp_siteId != $site->site_id) { return response()->json([ 'Statut' => 'KO', 'Code' => 108, 'Message' => 'Pas de campagne pour ce site' ]); } 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' ]); } $enligne = ($campagne->camp_published == 1) ? "oui" : "non"; switch ($campagne->camp_type) { case CampaignTypes::mur(): $type = "mur"; break; case CampaignTypes::panier(): $type = "panier"; break; case CampaignTypes::murss(): $type = "mur sans sélection"; break; case CampaignTypes::paniers(): $type = "panier avec sélection"; break; } $data = array ( 'Site' => $site->site_nom, 'Ref campagne' => $campagne->camp_id, 'Nom campagne' => $campagne->camp_name, "En ligne" => $enligne, "Type" => $type, ); $coupons = $campagne->coupons()->get(); if ($coupons->count() > 0) { foreach ($coupons as $coupon) { // ---- Calcul du nombre de BR consommé $diffuseMur = Mur::where(['mur_campId' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->count(); $diffusePanier01 = PanierContent::where(['panier_content_couponId' => $coupon->coupon_id])->sum('panier_content_quantity'); $diffusePanier02 = PanierContent::where(['panier_content_couponId' => $coupon->coupon_id])->sum('panier_content_printed'); $diffusePanier = $diffusePanier01 + $diffusePanier02; if (!$diffusePanier) { $diffusePanier = 0; } $diffuse = $diffuseMur + $diffusePanier; // ---- Calcul de la quantité restante $qRestante = $this->getFullQuantity($coupon) - $this->getUsedQuantity($coupon); // ---- En ligne oui/non $enligne = ($coupon->coupon_published == 1) ? "oui" : "non"; // ---- Calcul de la date de fin de diffusion $dateFinDiffusion = "n/c"; if ($coupon->coupon_maxdatediffusion != null) { $dateFinDiffusion = date("d/m/Y", strtotime($coupon->coupon_maxdatediffusion)); } // ---- Calcul de la date de fin de validité $dateFinValidite = "n/c"; if ($coupon->coupon_maxdatevalidity != null) { $dateFinValidite = date("d/m/Y", strtotime($coupon->coupon_maxdatevalidity)); } $codeTraitement = array ( "Code traitement" => $coupon->coupon_code, "Nom" => $coupon->coupon_name, "Nb à diffuser" => $this->getFullQuantity($coupon), "Nb diffusé" => $diffuse, "Quantité restante" => $qRestante, "Valeur faciale" => $coupon->coupon_value . "€", "En ligne" => $enligne, "Date de fin de diffusion" => $dateFinDiffusion, "Date de fin de validité" => $dateFinValidite, ); $data['Coupons'][] = $codeTraitement; }//end foreach }//end if return response()->json([ 'Statut' => 'OK', 'Détails Campagne' => $data ]); } }