<?php
/*
(c) Noel Kenfack <noel.kenfack@yahoo.fr> Février 2015
*/
namespace App\Controller\Produit\Produit;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\Produit\Produit\Produit;
use App\Entity\Produit\Produit\Coutlivraison;
use App\Entity\Produit\Produit\Panier;
use App\Entity\Users\User\User;
use App\Entity\Produit\Produit\Produitpanier;
use App\Entity\Produit\Produit\Imgproduit;
use App\Entity\Produit\ProduitBundle\Form\ProduitType;
use App\Entity\Produit\ProduitBundle\Form\CoutlivraisonType;
use App\Entity\Produit\Produit\Souscategorie;
use General\TemplateBundle\Entites\Recherche;
use SoapClient;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use App\Service\Email\Singleemail;
use App\Service\Servicetext\GeneralServicetext;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Produit\Service\Typearticle;
use App\Entity\Produit\Service\Service;
use App\Entity\Users\User\Billet;
use App\Entity\Tresorerie\Investisseur\Categorieinvestisseur;
use App\Entity\Produit\Produit\Cataloguechantier;
use App\Entity\Users\User\Contacts;
use App\Entity\Produit\Service\Pays;
use App\Entity\Produit\Produit\Caracteristiqueproduit;
class ProduitController extends AbstractController
{
private $params;
private $_servicemail;
public function __construct(ParameterBagInterface $params, Singleemail $servicemail)
{
$this->params = $params;
$this->_servicemail = $servicemail;
}
public function modifierproduit(GeneralServicetext $service, Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
if(isset($_GET['id']))
{
$id = $_GET['id'];
}else{
$id = $id;
}
$produit = $em->getRepository(Produit::class)
->find($id);
if($produit != null)
{
$formpro = $this->createForm(ProduitType::class, $produit, array('cat'=>$produit->getsouscategorie()->getCategorie()));
if ($request->getMethod() == 'POST'){
$formpro->handleRequest($request);
$produit->setServicetext($service);
if($produit->getImgproduit() != null)
{
$produit->getImgproduit()->setServicetext($service);
}
if ($formpro->isValid()){
if(isset($_POST['prixrenew']))
{
$produit->setPrixrenew($_POST['prixrenew']);
}
if(isset($_POST['prixtransfert']))
{
$produit->setPrixtransfert($_POST['prixtransfert']);
}
$em->flush();
$this->get('session')->getFlashBag()->add('information','Modification effectuée avec succès');
}else{
$this->get('session')->getFlashBag()->add('information','Une ereur a été rencontrée!');
}
return $this->redirect($this->generateUrl('users_adminuser_liste_produit_souscategorie', array('id'=>$produit->getSouscategorie()->getId())));
}
$type_domaine = $em->getRepository(Typearticle::class)
->findBy(array('position'=>'domaine'));
return $this->render('Theme/Users/Adminuser/Produit/modifierproduit.html.twig',
array('produit'=>$produit,'formpro'=>$formpro->createView(),'type_domaine'=>$type_domaine));
}else{
echo 'Echec ! Une erreur a été rencontrée.';
exit;
}
}
public function supprimerimage(Imgproduit $imgproduit, Request $request)
{
$em = $this->getDoctrine()->getManager();
$formsupp = $this->createFormBuilder()->getForm();
$produit = $imgproduit->getProduit();
if ($request->getMethod() == 'POST') {
$formsupp->handleRequest($request);
if ($formsupp->isValid()){
if(count($produit->getImgproduits()) > 1)
{
$em->remove($imgproduit);
$em->flush();
$this->get('session')->getFlashBag()->add('informationsupp','Suppression effectuée avec succés');
}else{
$this->get('session')->getFlashBag()->add('informationsupp','Un produit doit avoir au mions une images');
}
return $this->redirect($this->generateUrl('users_adminuser_update_courant_produit',array('id'=>$produit->getId())));
}
}
$this->get('session')->getFlashBag()->add('supprime_image',$imgproduit->getId());
$this->get('session')->getFlashBag()->add('supprime_image',$imgproduit->getProduit()->getNom());
return $this->redirect($this->generateUrl('users_adminuser_update_courant_produit',array('id'=>$produit->getId())));
}
public function listeproduituser(Souscategorie $souscategorie)
{
$em = $this->getDoctrine()->getManager();
if($souscategorie->getTypebusiness() == 'programme')
{
return $this->render('Theme/Produit/Produit/Produit/programmefinnacement.html.twig',
array('souscategorie'=>$souscategorie));
}else{
return $this->render('Theme/Produit/Produit/Produit/businessretenu.html.twig',
array('souscategorie'=>$souscategorie));
}
}
public function detailproduit(Produit $produit, $type, $page, $page2)
{
$em = $this->getDoctrine()->getManager();
$liste_produit = $em->getRepository(Produit::class)
->findBestProduit(20);
$presentation_produit = $em->getRepository(Service::class)
->findArticleProduit($produit->getId(), $page, 6, 'presentation');
$faq_produit = $em->getRepository(Service::class)
->findArticleProduit($produit->getId(), $page2, 6, 'faq');
$liste_billet = $em->getRepository(Billet::class)
->myFindReview(1,8);
return $this->render('Theme/Produit/Produit/Produit/detailproduit.html.twig',
array('produit'=>$produit, 'page'=>$page, 'page2'=>$page2, 'type'=>$type, 'liste_produit'=>$liste_produit,
'presentation_produit'=>$presentation_produit, 'faq_produit'=>$faq_produit, 'liste_billet'=>$liste_billet, 'nombrepage' => ceil(count($presentation_produit)/6),
'nombrepage2' => ceil(count($faq_produit)/6)));
}
public function documentationproduit(Produit $produit, $page)
{
$em = $this->getDoctrine()->getManager();
$liste_scat = $em->getRepository(Souscategorie::class)
->souscategorieDocument(10);
$documentation_produit = $em->getRepository(Service::class)
->findArticleProduit($produit->getId(), $page, 6, 'documentation');
return $this->render('Theme/Produit/Produit/Produit/documentationproduit.html.twig',
array('produit'=>$produit, 'page'=>$page, 'liste_scat'=>$liste_scat, 'documentation_produit'=>$documentation_produit,
'nombrepage' => ceil(count($documentation_produit)/6)));
}
public function souscriptionprojet()
{
$em = $this->getDoctrine()->getManager();
$liste_business = $em->getRepository(Souscategorie::class)
->findBy(array('typebusiness'=>'business'), array('rang'=>'asc'));
$type_investisseur = $em->getRepository(Categorieinvestisseur::class)
->findBy(array('typeoperation'=>'actionnariat'), array('rang'=>'asc'));
return $this->render('Theme/Produit/Produit/Produit/souscriptionprojet.html.twig',
array('liste_business'=>$liste_business, 'type_investisseur'=>$type_investisseur));
}
public function souscriptionamorcage()
{
$em = $this->getDoctrine()->getManager();
$liste_business = $em->getRepository(Souscategorie::class)
->findBy(array('typebusiness'=>'programme'), array('rang'=>'asc'));
$type_investisseur = $em->getRepository(Categorieinvestisseur::class)
->findBy(array('typeoperation'=>'amorcage'), array('rang'=>'asc'));
return $this->render('Theme/Produit/Produit/Produit/souscriptionamorcage.html.twig',
array('liste_business'=>$liste_business, 'type_investisseur'=>$type_investisseur));
}
public function souscriptiondonation()
{
$em = $this->getDoctrine()->getManager();
$liste_business = $em->getRepository(Souscategorie::class)
->findProgrammeAndBusiness();
$type_investisseur = $em->getRepository(Categorieinvestisseur::class)
->findBy(array('typeoperation'=>'donnation'), array('rang'=>'asc'));
return $this->render('Theme/Produit/Produit/Produit/souscriptiondonation.html.twig',
array('liste_business'=>$liste_business, 'type_investisseur'=>$type_investisseur));
}
public function ajouterpanier($id, $position)
{
$em = $this->getDoctrine()->getManager();
$session = $this->get('session');
if(isset($_POST['typeprojet']) and isset($_POST['typeinvest']) and $position == 'product')
{
$typeprojet = $em->getRepository(Souscategorie::class)
->find($_POST['typeprojet']);
$typeinvest = $em->getRepository(Categorieinvestisseur::class)
->find($_POST['typeinvest']);
if($typeprojet != null and $typeinvest != null)
{
$liste_catalogue = $em->getRepository(Cataloguechantier::class)
->myfindAll();
foreach($liste_catalogue as $catalogue)
{
$catalogue->setEm($em);
}
return $this->render('Theme/Produit/Produit/Produit/ajouterpanier.html.twig',
array('position'=>$position, 'liste_catalogue'=>$liste_catalogue, 'typeprojet'=>$typeprojet, 'typeinvest'=>$typeinvest));
}else{
echo 2;
exit;
}
}else if($position == 'amountinvest'){
$typeinvest = $em->getRepository(Categorieinvestisseur::class)
->find($id);
if(isset($_POST['amountint']) and isset($_POST['projetselect']) and $typeinvest != null and isset($_POST['username']))
{
$projetselect = $em->getRepository(Produit::class)
->find($_POST['projetselect']);
$amountint = $_POST['amountint'];
$username = $_POST['username'];
if($projetselect != null and $typeinvest->getMinimum() <= $amountint and $amountint <= $typeinvest->getMaximum())
{
$idcard = 0;
if(isset($_COOKIE["PIDCARD"]) and $_COOKIE["PIDCARD"] != 'empty')
{
$idcard = $_COOKIE["PIDCARD"];
}
$oldpanier = $em->getRepository(Panier::class)
->findOneBy(array('id'=>$idcard,'sousmis'=>0));
if($oldpanier == null and $this->getUser() != null)
{
$oldpanier = $em->getRepository(Panier::class)
->findOneBy(array('user'=>$this->getUser(),'sousmis'=>0));
}
if($oldpanier == null)
{
$panier = new Panier();
$panier->setUser($this->getUser());
$panier->setMontantttc($amountint);
$panier->setTel($username);
$em->persist($panier);
$produitpanier = new Produitpanier();
$produitpanier->setPanier($panier);
$produitpanier->setProduit($projetselect);
$produitpanier->setCategorieinvestisseur($typeinvest);
$produitpanier->setTypeOperation($typeinvest->getTypeoperation());
$em->persist($produitpanier);
$em->flush();
// Stock les infos du cookie
$cookie_info = array(
'name' => 'PIDCARD',
'value' => $panier->getId(),
'time' => time() + (3600 * 24 * 360)
);
// Cree le cookie
setCookie($cookie_info['name'], $cookie_info['value'], $cookie_info['time'],'/');
setCookie('PIDCARDDUR',$cookie_info['time'], $cookie_info['time'],'/');
}else{
$oldpanier->setUser($this->getUser());
$oldpanier->setMontantttc($amountint);
$oldpanier->setTel($username);
foreach($oldpanier->getProduitpaniers() as $prodpan)
{
$prodpan->setProduit($projetselect);
$prodpan->setCategorieinvestisseur($typeinvest);
break;
}
$em->flush();
$panier = $oldpanier;
}
$session->set('reset_commande_user', $panier->getId());
$liste_contact = new \Doctrine\Common\Collections\ArrayCollection();
if($this->getUser() != null)
{
$liste_contact = $em->getRepository(Contacts::class)
->findBy(array('user'=>$this->getUser()));
}else if($panier->getUser() != null)
{
$liste_contact = $em->getRepository(Contacts::class)
->findBy(array('user'=>$panier->getUser()));
}
$liste_pays = $em->getRepository(Pays::class)
->myfindAll();
$liste_investment = $em->getRepository(Typearticle::class)
->myFindAllType('modepaiement');
foreach($liste_investment as $type)
{
$type->setEm($em);
}
return $this->render('Theme/Produit/Produit/Produit/ajouterpanier.html.twig',
array('position'=>$position, 'panier'=>$panier, 'projetselect'=>$projetselect, 'typeinvest'=>$typeinvest,
'liste_contact'=>$liste_contact, 'liste_pays'=>$liste_pays, 'liste_investment'=>$liste_investment));
}else{
echo 3;
exit;
}
}else{
echo 2;
exit;
}
}else{
echo 0;
exit;
}
}
public function reglementcommande(Panier $panier)
{
$em = $this->getDoctrine()->getManager();
$nbprod = 0;
$produitpanier = null;
$produitpanier = $panier->getProduitpaniers();
foreach($produitpanier as $prodpan)
{
$nbprod = $nbprod + $prodpan->getQuantite();
$prodpan->getProduit()->setEm($em);
}
$liste_article = $em->getRepository(Service::class)
->myFindType('modepaiement');
if(count($produitpanier) > 0 and $panier->getSousmis() == false)
{
return $this->render('Theme/Produit/Produit/Produit/reglementcommande.html.twig',
array('panier'=>$panier,'produitpanier'=>$produitpanier,'nbprod'=>$nbprod,'liste_article'=>$liste_article));
}else{
$this->get('session')->getFlashBag()->add('information','Le panier que vous assayez de payer est vide ou a déjà été payé !');
return $this->redirect($this->generateUrl('users_user_acces_plateforme'));
}
}
public function editcommande()
{
if(isset($_GET['id']))
{
$id = $_GET['id'];
}else{
$id = 0;
}
if(isset($_GET['quantite']))
{
$quantite = $_GET['quantite'];
}else{
$quantite = 0;
}
$em = $this->getDoctrine()->getManager();
$prodpan = $em->getRepository(Produitpanier::class)
->find($id);
if($prodpan != null)
{
$prodpan->setQuantite($quantite);
$em->flush();
echo 1;
exit;
}else{
echo 0;
exit;
}
}
public function eleveproduit()
{
$em = $this->getDoctrine()->getManager();
if(isset($_GET['id']))
{
$id = $_GET['id'];
}else{
$id = 0;
}
$prodpan = $em->getRepository(Produitpanier::class)
->find($id);
$idcard = 0;
if(isset($_COOKIE["PIDCARD"]) and $_COOKIE["PIDCARD"] != 'empty')
{
$idcard = $_COOKIE["PIDCARD"];
}
if($prodpan != null and (($this->getUser() == $prodpan->getpanier()->getUser()) or $prodpan->getPanier()->getId() == $idcard))
{
$panier = $prodpan->getPanier();
$em = $this->getDoctrine()->getManager();
$em->remove($prodpan);
$em->flush();
echo 1;
exit;
}
echo 0;
exit;
}
public function supprimerproduit(Produit $produit, Request $request)
{
$em = $this->getDoctrine()->getManager();
$prodpan = $em->getRepository(Produitpanier::class)
->findBy(array('produit'=>$produit));
$categorie = $produit->getSouscategorie();
$formsupp = $this->createFormBuilder()->getForm();
if ($request->getMethod() == 'POST') {
$formsupp->handleRequest($request);
if ($formsupp->isValid()){
$caract = $em->getRepository(Caracteristiqueproduit::class)
->findBy(array('produit'=>$produit));
if(count($prodpan) == 0 and count($caract) == 0){
$em->remove($produit);
$em->flush();
$this->get('session')->getFlashBag()->add('information','Suppression effectuée avec succès');
}else{
$this->get('session')->getFlashBag()->add('information','Action réfusée ! ce produit est déjà reservé par un utilisateur.');
}
}
}else{
$this->get('session')->getFlashBag()->add('supprime_prod',$produit->getId());
$this->get('session')->getFlashBag()->add('supprime_prod',$produit->getNom());
}
return $this->redirect($this->generateUrl('users_adminuser_liste_produit_souscategorie',array('id'=>$categorie->getId())));
}
public function rechercheproduit(Request $request)
{
$em = $this->getDoctrine()->getManager();
$recherche = new Recherche();
$formBuilder = $this->createFormBuilder($recherche);
$formBuilder
->add('donnee', 'text',array('attr'=>array('class'=>'form-control police2','placeholder'=>'Retrouver un produit','type'=>'search')));
$formrecher = $formBuilder->getForm();
$liste_produit = null;
if ($request->getMethod() == 'POST') {
$formrecher->handleRequest($request);
if ($formrecher->isValid()){
$liste_produit = $em->getRepository(Produit::class)
->findProduit($recherche->getDonnee());
}
}
return $this->render('Theme/Produit/Produit/Produit/recherche.html.twig', array('liste_produit'=>$liste_produit,'donnee'=>$recherche->getDonnee()));
}
public function addcoutlivraison(Produit $produit, Request $request, $service)
{
$em = $this->getDoctrine()->getManager();
$coutlivraison = new Coutlivraison($service);
$formlivraison = $this->createForm(CoutlivraisonType::class, $coutlivraison);
if ($request->getMethod() == 'POST'){
$formlivraison->handleRequest($request);
$coutlivraison->setUser($this->getUser());
$coutlivraison->setProduit($produit);
$oldcout = $em->getRepository(Coutlivraison::class)
->findOneBy(array('ville'=>$coutlivraison->getVille(),'produit'=>$produit));
if ($formlivraison->isValid() and $oldcout == null){
$em->persist($coutlivraison);
$em->flush();
$this->get('session')->getFlashBag()->add('informationsupp','Enregistrement effectué avec succès');
}
}
return $this->redirect($this->generateUrl('users_adminuser_update_courant_produit',array('id'=>$produit->getId())));
}
public function modifcoutlivraison(Coutlivraison $coutlivraison)
{
$em = $this->getDoctrine()->getManager();
if (isset($_POST['coutlivraison']) and is_numeric($_POST['coutlivraison'])){
$coutlivraison->setMontant(htmlspecialchars($_POST['coutlivraison']));
$em->flush();
$this->get('session')->getFlashBag()->add('informationsupp','Enregistrement effectué avec succès');
}
return $this->redirect($this->generateUrl('users_adminuser_update_courant_produit',array('id'=>$coutlivraison->getProduit()->getId())));
}
public function supprimercoutlivraison(Coutlivraison $coutlivraison)
{
$produit = $coutlivraison->getProduit();
$em = $this->getDoctrine()->getManager();
$em->remove($coutlivraison);
$em->flush();
return $this->redirect($this->generateUrl('users_adminuser_update_courant_produit',array('id'=>$produit->getId())));
}
public function recherchedomaine(GeneralServicetext $service, $id, $domaine, $chaine)
{
$em = $this->getDoctrine()->getManager();
if(isset($_POST['domainesubmit']) and isset($_POST['liste_extension']))
{
$chaine = $_POST['liste_extension'];
$domaine = $_POST['domainesubmit'];
}
$typedomaine = $em->getRepository(Typearticle::class)
->find($id);
if($typedomaine != null)
{
$extensions = array();
$compt = 0;
$typedomaine->setEm($em);
$liste_prod = $typedomaine->getProduitFilter();
foreach($liste_prod as $prod)
{
array_push($extensions, $prod->getId());
if($compt > 4)
{
break;
}
$compt++;
}
}else{
$extensions = explode('-',$chaine);
}
$tabdomaine = explode('.',$domaine);
$bestextension = '';
if(count($tabdomaine) > 1)
{
$bestextension = $tabdomaine[count($tabdomaine) - 1];
$bestdomaine = $tabdomaine[count($tabdomaine) - 2];
}else{
$bestdomaine = $domaine;
}
$liste_extension = $em->getRepository(Produit::class)
->findBy(array('id'=>$extensions));
$directextend = $em->getRepository(Produit::class)
->findOneBy(array('nom'=>$bestextension));
if($directextend != null)
{
$liste_extension[] = $directextend;
$chaine = $chaine.'-'.$directextend->getId();
}
$selection_extension = $em->getRepository(Produit::class)
->findDomainesRang(1004,6);
$domainetocheck = strtolower(trim($service->parseDomaine($bestdomaine)));
$type_domaine = $em->getRepository(Typearticle::class)
->findBy(array('position'=>'domaine'));
$liste_outils = $em->getRepository(Service::class)
->myFindCatType('1','nosoutils');
return $this->render('Theme/Produit/Produit/Produit/recherchedomaine.html.twig',
array('domainetocheck'=>$domainetocheck,'chaine'=>$chaine,'liste_extension'=>$liste_extension,
'selection_extension'=>$selection_extension,'type_domaine'=>$type_domaine, 'idtype'=>$id,'liste_outils'=>$liste_outils));
}
public function getstatutdomaine(GeneralServicetext $service)
{
$em = $this->getDoctrine()->getManager();
$domainename = "";
$id = 0;
$domaine = '';
if(isset($_POST['id']) and isset($_POST['chaine']))
{
$id = $_POST['id'];
$domaine = $_POST['chaine'];
$extension = $em->getRepository(Produit::class)
->find($id);
if($extension != null)
{
$domainename = $domaine.'.'.strtolower($extension->getNom());
}
}
$domaineresp = $domainename;
$result = "NOT CHECK";
$reason = "";
/*
if($domainename != "")
{
$clientSOAP = new SoapClient("http://api.francedns.com/2.0/api.wsdl");
try
{
$idSession = $clientSOAP->sessionOpen("NN104", "25Dec1988", "EN");
$StructDomainCheckResponse = $clientSOAP->domainCheck($idSession, $domainename);
foreach($StructDomainCheckResponse as $response){
$domaineresp = $response->domain;
$result = $response->result;
$reason = $response->reason;
}
}
catch(SoapFault $fault)
{
//Code d'erreur.
}
if(isset($idSession))
{
$clientSOAP->sessionClose($idSession);
}
}*/
if($result == 'AVAILABLE')
{
$result = 1;
}else if($result == 'NOT AVAILABLE')
{
$result = 2;
}else if($result == 'NOT CHECK'){
$result = 3;//La requete vers l'API n'a pas abouti.
}else{
$result = 4;//Au cas ou le résulat n'ast pas connu.
}
$tab = array();
$tab['id'] = $id;
$tab['domaineresp'] = $domaineresp;
$tab['result'] = $result;
$tab['reason'] = $reason;
return new Response(json_encode($tab));
}
public function listeProduitType($type)
{
$em = $this->getDoctrine()->getManager();
$liste_souscategorie = $em->getRepository(Souscategorie::class)
->myFindAllByType($type);
return $this->render('Theme/Produit/Produit/Produit/listeProduitType.html.twig',
array('type'=>$type, 'liste_souscategorie'=>$liste_souscategorie));
}
}