<?php
// src/Controller/EntrepriseController.php
namespace App\Controller;
use App\Entity\AppUser;
use App\Entity\SlidePhoto;
use App\Entity\ImageArticleBlog;
use App\Entity\CategorieArticle;
use App\Entity\FactureAcompte;
use App\Entity\ProductPhoto;
use App\Form\ArticleEditType;
use App\Form\ArticleType;
use App\Entity\Article;
use App\Entity\Product;
use App\Entity\ProductOrder;
use App\Entity\TVA;
use App\Entity\Pays;
use App\Form\TVAEditType;
use App\Form\TVAType;
use App\Entity\PaymentMethod;
use App\Form\PaymentMethodEditType;
use App\Form\PaymentMethodType;
use App\Form\ProduitType;
use App\Form\ProduitEditType;
use App\Form\SujetFAQType;
use App\Form\SujetFAQEditType;
use App\Entity\Entreprise;
use App\Form\ProductType;
use App\Form\ProductEditType;
use App\Entity\Tiers;
use App\Entity\Produit;
use App\Entity\ProduitCommande;
use App\Entity\Category;
use App\Entity\SubCategory;
use App\Form\CategorieProduitType;
use App\Form\CategorieArticleEditType;
use App\Form\CategorieArticleType;
use App\Form\CategoryType;
use App\Entity\ShippingMethod;
use App\Form\ShippingMethodType;
use App\Form\ShippingMethodEditType;
use App\Form\CategoryEditType;
use App\Form\SubCategoryType;
use App\Form\SubCategoryEditType;
use App\Form\ArticleAideType;
use App\Entity\ArticleAide;
use App\Entity\Boutique;
use App\Form\ArticleAideEditType;
use App\Entity\Coupon;
use App\Entity\PrixProduit;
use App\Form\CouponType;
use App\Form\CouponEditType;
use App\Form\BoutiqueType;
use App\Form\CategorieProduitEditType;
use App\Entity\Commande;
use App\Entity\CategorieProduit;
use App\Form\TiersType;
use App\Form\TiersEditType;
use App\Entity\ModeleReglement;
use App\Entity\Payment;
use App\Entity\ValiditeService;
use App\Entity\UserBoutique;
use App\Form\CategorieArticleAideType;
use App\Form\CategorieArticleAideEditType;
use App\Entity\Ticket;
use App\Form\TicketType;
use App\Entity\CommentaireTicket;
use App\Form\CommentaireTicketType;
use App\Services\ChiffreEnLettre;
use App\Entity\RequeteAjoutBoutique;
use App\Entity\EntreeDeStock;
use App\Entity\ProduitEntreeDeStock;
use App\Entity\Expensive;
use App\Form\ExpensiveType;
use App\Form\ExpensiveEditType;
use App\Entity\PresenceEmploye;
use App\Entity\PresenceEmployeUser;
use App\Entity\RubriqueSalaire;
use App\Form\RubriqueSalaireType;
use App\Form\RubriqueSalaireEditType;
use App\Entity\RubriqueSalaireEmploye;
use App\Entity\Conge;
use App\Entity\Compte;
use App\Form\CompteType;
use App\Form\EcritureComptableType;
use App\Form\JournalComptabiliteType;
use App\Entity\JournalComptabilite;
use App\Entity\EcritureComptable;
use App\Entity\RubriqueSalairePaiement;
use App\Entity\PaiementSalaire;
use App\Entity\GroupeEcritureComptable;
use App\Form\CategorieDepenseType;
use App\Entity\CategorieDepense;
use App\Form\CategorieDepenseEditType;
use App\Form\EmployeType;
use App\Form\EmployeEditType;
use App\Entity\Photo;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use Spipu\Html2Pdf\Html2Pdf;
/**
* @Route("/{_locale}/dashboard")
*/
class AdminController extends AbstractController
{
private $kernel;
public function __construct(KernelInterface $kernel)
{
$this->kernel = $kernel;
}
/**
* @Route("/shop/{slug}", name="admin.show_shop")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function afficherBoutiqueAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$dateFin->setTime(23, 59);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$invoices = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'invoice', $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/afficher_boutique.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
]);
}
/**
* @Route("/shop/{slug}/mini-statistic", name="admin.mini_statistic")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function miniStatisticAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$mois = date('mY');
$annee = date('Y');
$chiffrDAffaireMois = $em->getRepository(Commande::class)
->chiffrDAffairePeriodique($mois, $boutique->getId());
$chiffrDAffaireAnnee = $em->getRepository(Commande::class)
->chiffrDAffairePeriodique($annee, $boutique->getId());
$depenseMois = $em->getRepository(Expensive::class)
->depensePeriodique($mois, $boutique->getId());
$depenseAnnee = $em->getRepository(Expensive::class)
->depensePeriodique($annee, $boutique->getId());
$nombreTiers = 0;
$nombreTiers = $em->getRepository(Tiers::class)
->nombreTiers($boutique->getId());
$nombreProduit = $em->getRepository(Produit::class)
->nombreProduit($boutique->getId());
$commandParMois = $em->getRepository(Commande::class)
->chiffrDAffaireParMois($annee, $boutique->getId());
$chiffreDAffaireSurPlsAnnees = $em->getRepository(Commande::class)
->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$dateFin->setTime(23, 59);
if($request->getMethod() == 'POST'){
$dateDebut = $request->request->get('dateDebut');
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = $request->request->get('dateFin');
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
}
$chiffreDAffaireDUnePeriode = $em->getRepository(Commande::class)
->chiffreDAffaireDUnePeriode('invoice', $boutique->getId(), $dateDebut, $dateFin);
$devisPeriodique = $em->getRepository(Commande::class)
->chiffreDAffaireDUnePeriode('proposal', $boutique->getId(), $dateDebut, $dateFin);
if(!empty($devisPeriodique)){
$devisPeriodique = $devisPeriodique[0]['totalVente'];
}else{
$devisPeriodique = 0;
}
if(!empty($chiffreDAffaireDUnePeriode)){
$chiffreDAffaireDUnePeriode = $chiffreDAffaireDUnePeriode[0]['totalVente'];
}else{
$chiffreDAffaireDUnePeriode = 0;
}
$paiementDUnePeriode = $em->getRepository(Payment::class)
->paiementDUnePeriode($boutique, $dateDebut, $dateFin);
if(!empty($paiementDUnePeriode)){
$paiementDUnePeriode = $paiementDUnePeriode[0]['montantTotal'];
}else{
$paiementDUnePeriode = 0;
}
$totalDepenseParDate = $em->getRepository(Expensive::class)
->totalDepenseParDate($boutique->getId(), $dateDebut, $dateFin);
if(!empty($totalDepenseParDate)){
$totalDepenseParDate = $totalDepenseParDate[0]['totalDepense'];
} else{
$totalDepenseParDate = 0;
}
$soldeTimbreFNE = $boutique->getSoldeTimbreFNE();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/mini_statistic.html.twig', [
'boutique' => $boutique,
'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
'chiffrDAffaireMois' => $chiffrDAffaireMois,
'nombreTiers' => $nombreTiers,
'nombreProduit' => $nombreProduit,
'commandParMois' => $commandParMois,
'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
'userBoutique' => $userBoutique,
'depenseMois' => $depenseMois,
'depenseAnnee' => $depenseAnnee,
'chiffreDAffaireDUnePeriode' => $chiffreDAffaireDUnePeriode,
'totalDepenseParDate' => $totalDepenseParDate,
'soldeTimbreFNE' => $soldeTimbreFNE,
'paiementDUnePeriode' => $paiementDUnePeriode,
'devisPeriodique' => $devisPeriodique
]);
}
/**
* @Route("/sales-total/{slug}", name="admin.sales_total")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function salesTotal(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$mois = date('mY');
$annee = date('Y');
$chiffrDAffaireMois = $em->getRepository(Commande::class)
->chiffrDAffairePeriodique($mois, $boutique->getId());
$chiffrDAffaireAnnee = $em->getRepository(Commande::class)
->chiffrDAffairePeriodique($annee, $boutique->getId());
$nombreTiers = 0;
$nombreTiers = $em->getRepository(Tiers::class)
->nombreTiers($boutique->getId());
$nombreProduit = $em->getRepository(Produit::class)
->nombreProduit($boutique->getId());
$commandParMois = $em->getRepository(Commande::class)
->chiffrDAffaireParMois($annee, $boutique->getId());
$chiffreDAffaireSurPlsAnnees = $em->getRepository(Commande::class)
->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/sales_total.html.twig', [
'boutique' => $boutique,
'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
'chiffrDAffaireMois' => $chiffrDAffaireMois,
'nombreTiers' => $nombreTiers,
'nombreProduit' => $nombreProduit,
'commandParMois' => $commandParMois,
'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/verifier-abonnement", name="admin.verifier_abonnement")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function verifierAbonnementAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$derniereValiditeService = $em->getRepository(ValiditeService::class)
->derniereValiditeService($boutique->getId());
$user = $this->getUser();
$nombreDeJour = 0;
$aujourdhui = new \DateTime();
$interV = '';
if(null !== $derniereValiditeService){
$interV = $aujourdhui->diff($derniereValiditeService->getValableJusquAu());
$nombreDeJour = $interV->days;
}
//var_dump($interV);
if($nombreDeJour <= 0){
//return $this->redirectToRoute('choose_paied_plan');
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/verifier_abonnement.html.twig', [
'boutique' => $boutique,
'derniereValiditeService' => $derniereValiditeService,
'nombreDeJour' => $nombreDeJour,
'userBoutique' => $userBoutique
]);
}
//Proposals
/**
* @Route("/{slug}/proposals", name="admin.proposals")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function proposalsAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$dateFin->setTime(23, 59);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$proposals = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
if('POST' == $request->getMethod()){
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
$proposals = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
return $this->render('admin/proposals_table_content.html.twig', [
'boutique' => $boutique,
'proposals' => $proposals
]);
}
return $this->render('admin/proposals.html.twig', [
'boutique' => $boutique,
'proposals' => $proposals,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
'userBoutique' => $userBoutique
]);
}
//Proposals
/**
* @Route("/{slug}/deposits", name="admin.deposits")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function depositsAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$deposits = $em->getRepository(FactureAcompte::class)
->factureParDate($boutique->getId(), $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
if('POST' == $request->getMethod()){
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$dateDebut = new \DateTime($dateDebut);
$dateFin = new \DateTime($dateFin);
$deposits = $em->getRepository(FactureAcompte::class)
->factureParDate($boutique->getId(), $dateDebut, $dateFin);
return $this->render('admin/deposits_table_content.html.twig', [
'boutique' => $boutique,
'deposits' => $deposits
]);
}
return $this->render('admin/deposits.html.twig', [
'boutique' => $boutique,
'deposits' => $deposits,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
'userBoutique' => $userBoutique
]);
}
//Proposals
/**
* @Route("/{slug}/new-deposit", name="admin.new_deposit")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newDepositAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$responseFNE = '';
$vehicules = array(1, 22, 23, 28);
$em = $this->getDoctrine()
->getManager();
$tvas = $em->getRepository(TVA::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
$factures = $em->getRepository(Commande::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'typeFacture' => 'invoice'
)
);
$editMode = 'new';
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
if($request->getMethod() == 'POST'){
$facture = $_POST['facture'];
$facture = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $facture
)
);
$montant = $_POST['montant'];
$valableJusquAu = '';
if(isset($_POST['valableJusquAu'])){
$valableJusquAu = $_POST['valableJusquAu'];
}
$pourcentage = $_POST['pourcentage'];
$appliquerTVA = false;
if(isset($_POST['appliquerTVA'])){
$appliquerTVA = (bool) $_POST['appliquerTVA'];
}
$tva = 0;
if(isset($_POST['tva'])){
$tva = $_POST['tva'];
}
$laDate = '';
if(isset($_POST['laDate'])){
$laDate = $_POST['laDate'];
}
$deposit = new FactureAcompte;
$deposit->setTotalHT($montant);
$deposit->setPourcentage($pourcentage);
$deposit->setBoutique($boutique);
$deposit->setTiers($facture->getTiers());
$deposit->setFacture($facture);
$deposit->setLaDate(new \DateTime($laDate));
$deposit->setValableJusquAu(new \DateTime($valableJusquAu));
$deposit->setNumero($this->getNumero('deposit', $boutique));
if($appliquerTVA){
$deposit->setTotalTVA(($montant * $tva)/100);
$ttc = $montant * (1 + $tva/100);
$deposit->setTotalTTC($ttc);
$deposit->setValeurTVA($tva);
} else{
$deposit->setTotalTTC($montant);
$deposit->setValeurTVA(0);
}
$em->persist($deposit);
$em->flush();
$pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
$content = $this->renderView('pdf/facture_acompte.html.twig', [
'boutique' => $boutique,
'facture' => $deposit,
]);
$pdf->writeHTML($content);
$name = 'deposit'.$deposit->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
$lienPhysique = $deposit->getUploadRootDir().$name;
$deposit->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
$pdf->output($lienPhysique, 'F');
$em->flush();
return $this->render('admin/response_new_sale.html.twig', [
'boutique' => $boutique,
'commande' => $deposit,
'responseFNE' => $responseFNE,
'vehicules' => $vehicules
]);
}
return $this->render('admin/new_deposit.html.twig', [
'boutique' => $boutique,
'factures' => $factures,
'editMode' => $editMode,
'tvas' => $tvas,
'userBoutique' => $userBoutique
]);
}
//Proposals
/**
* @Route("/{slug}/edit-deposit/{id}", name="admin.edit_deposit")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editDepositAction( Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$factures = $em->getRepository(Commande::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'typeFacture' => 'invoice'
)
);
$tvas = $em->getRepository(TVA::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
$deposit = $em->getRepository(FactureAcompte::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
$editMode = 'edit';
if($request->getMethod() == 'POST'){
$facture = $_POST['facture'];
$facture = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $facture
)
);
$montant = $_POST['montant'];
$pourcentage = $_POST['pourcentage'];
$appliquerTVA = false;
if(isset($_POST['appliquerTVA'])){
$appliquerTVA = (bool) $_POST['appliquerTVA'];
}
$tva = 0;
if(isset($_POST['tva'])){
$tva = $_POST['tva'];
}
$laDate = '';
if(isset($_POST['laDate'])){
$laDate = $_POST['laDate'];
}
$deposit->setTotalHT($montant);
$deposit->setPourcentage($pourcentage);
$deposit->setBoutique($boutique);
$deposit->setTiers($facture->getTiers());
$deposit->setLaDate(new \DateTime($laDate));
if($appliquerTVA){
$deposit->setTotalTVA(($montant * $tva)/100);
$ttc = $montant * (1 + $tva)/100;
$deposit->setTotalTVA(($montant * $tva)/100);
$deposit->setTotalTTC($ttc);
$deposit->setValeurTVA($tva);
} else{
$deposit->setTotalTTC($montant);
$deposit->setValeurTVA(0);
$deposit->setTotalTVA(0);
}
$em->flush();
}
return $this->render('admin/edit_deposit.html.twig', [
'boutique' => $boutique,
'factures' => $factures,
'editMode' => $editMode,
'tvas' => $tvas,
'deposit' => $deposit,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/delete-deposit/{id}", name="admin.delete_deposit")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteDepositAction( Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$deposit = $em->getRepository(FactureAcompte::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null != $deposit){
$em->remove($deposit);
$em->flush();
}
return $this->redirectToRoute('admin.deposits', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/invoices", name="admin.invoices")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function invoicesAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$paymentMethods = $em->getRepository(PaymentMethod::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$dateFin->setTime(23, 59);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$invoices = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'invoice', $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$clients = $em->getRepository(Tiers::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'estSupprime' => false
),
array(
'nom' => 'ASC'
)
);
if('POST' == $request->getMethod()){
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
$invoices = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'invoice', $dateDebut, $dateFin);
return $this->render('admin/invoices_table_content.html.twig', [
'boutique' => $boutique,
'invoices' => $invoices
]);
}
return $this->render('admin/invoices.html.twig', [
'boutique' => $boutique,
'paymentMethods' => $paymentMethods,
'invoices' => $invoices,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
'userBoutique' => $userBoutique,
'clients' => $clients
]);
}
/**
* @Route("/{slug}/point-par-client/{id}/{dateDebut}/{dateFin}", name="admin_point_par_client")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function pointParClientAction( Request $request, $slug, $id = 0, $dateDebut = '', $dateFin = '')
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$client = $em->getRepository(Tiers::class)
->findOneById($id);
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
$invoices = $em->getRepository(Commande::class)
->commandeParClientDateEtType($boutique->getId(), 'invoice', $client->getId(), $dateDebut, $dateFin);
return $this->render('admin/point_par_client.html.twig', [
'boutique' => $boutique,
'invoices' => $invoices,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'userBoutique' => $userBoutique,
]);
}
/**
* @Route("/{slug}/imprimer-point-par-client/{id}/{dateDebut}/{dateFin}", name="admin_imprimer_point_par_client")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function imprimerPointParClientAction( Request $request, $slug, $id = 0, $dateDebut = '', $dateFin = '')
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$client = $em->getRepository(Tiers::class)
->findOneById($id);
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
$invoices = $em->getRepository(Commande::class)
->commandeParClientDateEtType($boutique->getId(), 'invoice', $client->getId(), $dateDebut, $dateFin);
$pdf = new Html2Pdf('P', 'A4', 'fr');
$content = $this->renderView('pdf/point_par_client.html.twig', [
'boutique' => $boutique,
'client' => $client,
'invoices' => $invoices,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'userBoutique' => $userBoutique,
]);
$pdf->writeHTML($content);
$name = time().$boutique->getId().rand(1, 10000).'.pdf';
$photo = new Photo;
$lienPhysique = $photo->getUploadRootDir().$name;
$pdf->output($lienPhysique, 'I');
return $this->render('pdf/point_par_client.html.twig', [
'boutique' => $boutique,
'client' => $client,
'invoices' => $invoices,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'userBoutique' => $userBoutique,
]);
}
//Proposals
/**
* @Route("/{slug}/detail-commande/{id}", name="admin_detail_commande")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function detailCommandeAction( Request $request, $slug, $id=0)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$produitCommandes = $em->getRepository(ProduitCommande::class)
->findBy(
array(
'commande' => $id
)
);
return $this->render('admin/detail_commande.html.twig', [
'produitCommandes' => $produitCommandes,
]);
}
/**
* @Route("/{slug}/rh/tableau-de-bord", name="admin_rh_tableau_de_bord")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function rhTableauDeBordAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$dateFin->setTime(23, 59);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$estParti = false;
$nombreDEmployeActuel = $em->getRepository(UserBoutique::class)
->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE', $estParti);
$nombreDEmployeActuel = $nombreDEmployeActuel[0]['nombreEmploye'];
$estParti = true;
$nombreDEmployeParti = $em->getRepository(UserBoutique::class)
->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE', $estParti);
$nombreDEmployeParti = $nombreDEmployeParti[0]['nombreEmploye'];
$heureDeTravails = $em->getRepository(PresenceEmployeUser::class)
->heureDeTravail($boutique->getId(), $dateDebut, $dateFin);
$tempsDeTravail = 0;
$heureSupplementaires = 0;
if(!empty($heureDeTravails)){
$tempsDeTravail = $heureDeTravails[0]['tempsDeTravail'];
$heureSupplementaires = $heureDeTravails[0]['heureSupplementaire'];
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/rh_tableau_de_bord.html.twig', [
'boutique' => $boutique,
'nombreDEmployeParti' => $nombreDEmployeParti,
'userBoutique' => $userBoutique,
'nombreDEmployeActuel' => $nombreDEmployeActuel,
'tempsDeTravail' => $tempsDeTravail,
'heureSupplementaires' => $heureSupplementaires,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
]);
}
/**
* @Route("/{slug}/rh/employees", name="admin_rh_employees")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function employeesAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$employes = $em->getRepository(AppUser::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/employes.html.twig', [
'boutique' => $boutique,
'employes' => $employes,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/rh/pointage-journalier", name="admin_pointage_journalier")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function pointageJournalierAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$presenceEmployeParDates = $em->getRepository(PresenceEmploye::class)
->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
if($request->getMethod() == 'POST'){
$dateDebut = $request->request->get('dateDebut');
$dateDebut = new \DateTime($dateDebut);
$dateFin = $request->request->get('dateFin');
$dateFin = new \DateTime($dateFin);
$presenceEmployeParDates = $em->getRepository(PresenceEmploye::class)
->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
return $this->render('admin/contenu_table_pointage_journalier.html.twig', [
'presenceEmployeParDates' => $presenceEmployeParDates
]);
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/pointage_journalier.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'presenceEmployeParDates' => $presenceEmployeParDates,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
]);
}
/**
* @Route("/{slug}/rh/element-pointage-journalier/{idPresence}", name="admin_element_pointage_journalier")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function elementPointageJournalierAction( Request $request, Boutique $boutique, $idPresence = '')
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$presenceEmploye = $em->getRepository(PresenceEmploye::class)
->findOneById($idPresence);
$presenceEmployeUsers = $em->getRepository(PresenceEmployeUser::class)
->findByPresenceEmploye($presenceEmploye);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/element_pointage_journalier.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'presenceEmployeUsers' => $presenceEmployeUsers,
]);
}
/**
* @Route("/{slug}/rh/nouveau-pointage-journalier", name="admin_nouveau_pointage_journalier")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouveauPointageJournalierAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$presenceEmployeParDates = $em->getRepository(PresenceEmploye::class)
->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$employes = $em->getRepository(UserBoutique::class)
->findBy(
array(
'boutique' => $boutique,
'estParti' => false
)
);
if($request->getMethod() == 'POST'){
$laDate = $request->request->get('la_date');
$laDate = new \DateTime($laDate);
$presenceEmploye = new PresenceEmploye;
$presenceEmploye->setBoutique($boutique);
$presenceEmploye->setLaDate($laDate);
$em->persist($presenceEmploye);
$em->flush();
foreach($employes as $employe){
$estPresent = (bool)$request->request->get('est_present'.$employe->getUser()->getId());
$heureDebut = $request->request->get('heure_debut'.$employe->getUser()->getId());
$heureDebut = new \DateTime($heureDebut);
$heureFin = $request->request->get('heure_fin'.$employe->getUser()->getId());
$heureFin = new \DateTime($heureFin);
$tempsDeTravail = (float)$request->request->get('temps_de_travail'.$employe->getUser()->getId());
$heureSupplementaire = $request->request->get('heure_supplementaire'.$employe->getUser()->getId());
if($estPresent){
$presenceEmployeUser = new PresenceEmployeUser;
$presenceEmployeUser->setUser($employe->getUser());
$presenceEmployeUser->setBoutique($boutique);
$presenceEmployeUser->setPresenceEmploye($presenceEmploye);
$presenceEmployeUser->setEstPresent($estPresent);
$presenceEmployeUser->setDatePresence($laDate);
$presenceEmployeUser->setHeureArrivee($heureDebut);
$presenceEmployeUser->setHeureDepart($heureFin);
$presenceEmployeUser->setHeurePassee($tempsDeTravail);
$presenceEmployeUser->setHeureSupplementaire($heureSupplementaire);
$em->persist($presenceEmployeUser);
$em->flush();
}
}
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/nouveau_pointage_journalier.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'employes' => $employes,
'presenceEmployeParDates' => $presenceEmployeParDates,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
]);
}
//Salaire
/**
* @Route("/{slug}/rh/salaire", name="admin_rh_salaires")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function salairesAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$employes = $em->getRepository(UserBoutique::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'estParti' => false
)
);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$mois = $this->getMois();
$annees = $this->getAnnee();
$moyenDePaiements = array(
'VIREMENT BANCAIRE', 'CHEQUE', 'ESPECE', 'WAVE', 'ORANGE MONEY', 'MTN MONEY', 'MOOV MONEY'
);
return $this->render('admin/salaries.html.twig', [
'boutique' => $boutique,
'employes' => $employes,
'userBoutique' => $userBoutique,
'mois' => $mois,
'annees' => $annees,
'moyenDePaiements' => $moyenDePaiements
]);
}
/**
* @Route("/{slug}/rh/calculer-salaire", name="admin_rh_calcuer_salaire")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function calculerSalaireAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$rubriques = array();
if($request->getMethod() == 'POST'){
$idEmploye = $request->request->get('idEmploye');
$mois = (int)$request->request->get('mois');
$annee = $request->request->get('annee');
$moyenDePaiement = $request->request->get('moyenDePaiement');
$employe = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $idEmploye,
'boutique' => $boutique->getId()
)
);
if($mois < 10){
$mois = '0'.$mois;
}
$dateDebutPaiementSalaire = $annee.'-'.$mois.'-01';
$dateDebutPaiementSalaire = new \DateTime($dateDebutPaiementSalaire);
$laDatePaiement = $annee.'-'.$mois.'-01';
$datePaiementSalaire = new \DateTime($laDatePaiement);
$datePaiementSalaire = $datePaiementSalaire->modify('last day of this month');
$anncienete = $employe->getDateDePriseDeFonction()->diff($datePaiementSalaire);
$nNombreDeJourDeTravail = 30;
$nNombreDeJourDeConge = 0;
//Salaire de base
$salaireDeBase = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'SALAIRE DE BASE'
)
);
$rSalaireDeBase = $salaireDeBase->getLaBase();
//Congé
$totaux = array();
$conge = $em->getRepository(Conge::class)
->dernierConge($boutique->getId(), $employe->getUser()->getId());
$bFautAjouterCongePaye = false;
if(!empty($conge)){
$dateDebut = $conge[0]->getDateDebut();
$dateDiff = $dateDebut->diff($datePaiementSalaire);
$nombreDeJour = $dateDiff->format("%a");
if($nombreDeJour > 0 && $nombreDeJour <= 30 ){
$totaux['dateDebutConge'] = $conge[0]->getDateDebut();
$totaux['dateFinConge'] = $conge[0]->getDateFin();
$nNombreDeJourDeConge = $conge[0]->getNombreDeJour();
$bFautAjouterCongePaye = true;
if($datePaiementSalaire > $conge[0]->getDateDebut()){
$nNombreDeJourDeTravail -= $nNombreDeJourDeConge;
}
$rSalaireDeBase = ($salaireDeBase->getLaBase() * $nNombreDeJourDeTravail)/30;
}
}
$rubrique = array(
'code' => $salaireDeBase->getCode(),
'designation' => $salaireDeBase->getDesignation(),
'nombre' => $nNombreDeJourDeTravail,
'base' => $rSalaireDeBase,
'tauxSalarial' => 0,
'gainSalarial' => $rSalaireDeBase,
'retenueSalarial' => 0,
'tauxPatronal' => 0,
'gainPatronal' => 0,
'retenuePatronal' => 0
);
array_push($rubriques, $rubrique);
$rIndemniteCongePaye = 0;
if($bFautAjouterCongePaye){
$rIndemniteCongePaye = ($salaireDeBase->getLaBase() * 12 * $nNombreDeJourDeConge)/(10 * 30);
$rubrique = array(
'code' => '100',
'designation' => 'INDEMNITE CONGE PAYE',
'nombre' => $nNombreDeJourDeConge,
'base' => $rIndemniteCongePaye,
'tauxSalarial' => '',
'gainSalarial' => $rIndemniteCongePaye,
'retenueSalarial' => '',
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
}
//Sursalaire
$surSalaire = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'SURSALAIRE'
)
);
$rubrique = array(
'code' => $surSalaire->getCode(),
'designation' => $surSalaire->getDesignation(),
'nombre' => $nNombreDeJourDeTravail,
'base' => $surSalaire->getLaBase(),
'tauxSalarial' => '',
'gainSalarial' => $surSalaire->getLaBase(),
'retenueSalarial' => '',
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
//
// Ancienneté
$anciennte = 0;
$dateAnciennete = $datePaiementSalaire->diff($employe->getDateDePriseDeFonction());
$anneeAnciennete = $dateAnciennete->format('%y');
$moisAnciennete = $dateAnciennete->format('%m');
if(($anneeAnciennete >= 2 && $moisAnciennete >= 1) || $anneeAnciennete > 2){
$anciennte = $anneeAnciennete;
}
$rMontantAnciennete = ($anciennte * $salaireDeBase->getLaBase())/100;
$rubrique = array(
'code' => $salaireDeBase->getCode(),
'designation' => 'ANCIENNETE',
'nombre' => '',
'base' => $salaireDeBase->getLaBase(),
'tauxSalarial' => $anciennte,
'gainSalarial' => $rMontantAnciennete,
'retenueSalarial' => '',
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$rTotalBrut = $rSalaireDeBase + $surSalaire->getLaBase() + $rMontantAnciennete + $rIndemniteCongePaye;
$rubrique = array(
'code' => '',
'designation' => 'TOTAL BRUT',
'nombre' => '',
'base' => '',
'tauxSalarial' => '',
'gainSalarial' => $rTotalBrut,
'retenueSalarial' => '',
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
$rImpotNet = 0;
$rTranche1 = 0;
$rTranche2 = 0;
if($rTotalBrut > 75000 && $rTotalBrut <= 240000){
$rTranche2 = (($rTotalBrut - 75000)*16)/100;
}else{
if($rTotalBrut > 240000){
$rTranche2 = ((240000 - 75000)*16)/100;
}
}
$rTranche3 = 0;
if ($rTotalBrut > 240000 && $rTotalBrut <= 800000){
$rTranche3 = (($rTotalBrut - 240000)*21)/100;
}else{
if($rTotalBrut > 800000){
$rTranche3 = ((800000 - 240000)*21)/100;
}
}
$rTranche4 = 0;
if($rTotalBrut > 800000 && $rTotalBrut <= 2400000){
$rTranche4 = (($rTotalBrut - 800000)*24)/100;
} else{
if($rTotalBrut > 2400000){
$rTranche4 = ((2400000 - 800000)*24)/100;
}
}
$rTranche5 = 0;
if($rTotalBrut > 2400000 && $rTotalBrut <= 8000000){
$rTranche5 = ((rTotalBrut - 2400000)*28)/100;
} else{
if($rTotalBrut > 8000000){
$rTranche5 = ((8000000 - 2400000)*28)/100;
}
}
$rTranche6 = 0;
if($rTotalBrut > 8000000){
$rTranche6 = ((rTotalBrut - 8000000)*32)/100;
}
$rImpotBrut = $rTranche1 + $rTranche2 + $rTranche3 + $rTranche4 + $rTranche5 + $rTranche6;
$rPartIGR = $employe->getIgr();
$rReductionImpt1 = 0;
$rReductionImpt2 = 0;
if ($rPartIGR == 1.5){
$rReductionImpt2 = 5500;
}
$rReductionImpt3 = 0;
if($rPartIGR == 2){
$rReductionImpt3 = 11000;
}
$rReductionImpt4 = 0;
if($rPartIGR == 2.5){
$rReductionImpt4 = 16500;
}
$rReductionImpt5 = 0;
if($rPartIGR == 3){
$rReductionImpt5 = 22000;
}
$rReductionImpt6 = 0;
if($rPartIGR == 3.5){
$rReductionImpt6 = 27500;
}
$rReductionImpt7 = 0;
if($rPartIGR == 4){
$rReductionImpt7 = 33000;
}
$rReductionImpt8 = 0;
if($rPartIGR == 4.5){
$rReductionImpt8 = 38500;
}
$rReductionImpt9 = 0;
if($rPartIGR == 5){
$rReductionImpt9 = 44000;
}
$rReduction = $rReductionImpt1 + $rReductionImpt2 + $rReductionImpt3 + $rReductionImpt4 + $rReductionImpt5 + $rReductionImpt6 + $rReductionImpt7 + $rReductionImpt8 + $rReductionImpt9;
$rImpotNet = $rImpotBrut - $rReduction;
if($rImpotNet <= 0){
$rImpotNet = 0;
}
$rubrique = array(
'code' => '04',
'designation' => 'IMPOT NET',
'nombre' => '',
'base' => '',
'tauxSalarial' => '',
'gainSalarial' => '',
'retenueSalarial' => $rImpotNet,
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
$rCNPSSalarie = 0;
$rCNPSEmployeur = 0;
$cnps = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'CNPS'
)
);
$rCNPSSalarie = ($rTotalBrut * 6.3)/100;
$rCNPSEmployeur = ($rTotalBrut * 7.7)/100;
$rubrique = array(
'code' => $cnps->getCode(),
'designation' => $cnps->getDesignation(),
'nombre' => '',
'base' => $rTotalBrut,
'tauxSalarial' => 6.3,
'gainSalarial' => '',
'retenueSalarial' => $rCNPSSalarie,
'tauxPatronal' => 7.7,
'gainPatronal' => '',
'retenuePatronal' => $rCNPSEmployeur
);
array_push($rubriques, $rubrique);
$rCMU = 1000 + 1000 * $employe->getNombreDEnfant();
$rCMUSalarie = $rCMU/2;
$rCMUEmployeur = $rCMU/2;
$cmu = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'CMU'
)
);
$rubrique = array(
'code' => $cmu->getCode(),
'designation' => $cmu->getDesignation(),
'nombre' => '',
'base' => '',
'tauxSalarial' => '',
'gainSalarial' => '',
'retenueSalarial' => $rCMUSalarie,
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => $rCMUEmployeur
);
array_push($rubriques, $rubrique);
$rPrestationFamiliale = 0;
$prestation = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'PRESTATION FAMILIALE'
)
);
$rPrestationFamiliale = ($prestation->getLaBase() * $prestation->getTaux())/100;
$rubrique = array(
'code' => $prestation->getCode(),
'designation' => $prestation->getDesignation(),
'nombre' => '',
'base' => $prestation->getLaBase(),
'tauxSalarial' => '',
'gainSalarial' => '',
'retenueSalarial' => '',
'tauxPatronal' => $prestation->getTaux(),
'gainPatronal' => '',
'retenuePatronal' => $rPrestationFamiliale
);
array_push($rubriques, $rubrique);
$rAccidentDeTravail = 0;
$accident = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'ACCIDENT DE TRAVAIL'
)
);
$rAccidentDeTravail = ($accident->getLaBase() * $accident->getTaux())/100;
$rubrique = array(
'code' => $accident->getCode(),
'designation' => $accident->getDesignation(),
'nombre' => '',
'base' => $accident->getLaBase(),
'tauxSalarial' => '',
'gainSalarial' => '',
'retenueSalarial' => '',
'tauxPatronal' => $accident->getTaux(),
'gainPatronal' => '',
'retenuePatronal' => $rAccidentDeTravail
);
array_push($rubriques, $rubrique);
$rTaxeDApprentissage = 0;
$taxeAppr = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'TAXE D\'APPRENTISSAGE'
)
);
$rTaxeDApprentissage = ($rTotalBrut * $taxeAppr->getTaux())/100;
$rubrique = array(
'code' => $taxeAppr->getCode(),
'designation' => $taxeAppr->getDesignation(),
'nombre' => '',
'base' => $rTotalBrut,
'tauxSalarial' => '',
'gainSalarial' => '',
'retenueSalarial' => '',
'tauxPatronal' => $taxeAppr->getTaux(),
'gainPatronal' => '',
'retenuePatronal' => $rTaxeDApprentissage
);
array_push($rubriques, $rubrique);
$rFormationContinue = 0;
$formationC = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'FORMATION CONTINUE'
)
);
$rFormationContinue = ($rTotalBrut * $formationC->getTaux())/100;
$rubrique = array(
'code' => $formationC->getCode(),
'designation' => $formationC->getDesignation(),
'nombre' => '',
'base' => $rTotalBrut,
'tauxSalarial' => '',
'gainSalarial' => '',
'retenueSalarial' => '',
'tauxPatronal' => $formationC->getTaux(),
'gainPatronal' => '',
'retenuePatronal' => $rFormationContinue
);
array_push($rubriques, $rubrique);
$rCE = 0;
$ce = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'CE'
)
);
$rCE = ($rTotalBrut *2.8 )/100;
$rubrique = array(
'code' => $ce->getCode(),
'designation' => $ce->getDesignation(),
'nombre' => '',
'base' => '',
'tauxSalarial' => '',
'gainSalarial' => '',
'retenueSalarial' => '',
'tauxPatronal' => 2.8,
'gainPatronal' => '',
'retenuePatronal' => $rCE
);
array_push($rubriques, $rubrique);
$rChargeSalariales = $rImpotNet + $rCNPSSalarie + $rCMUSalarie;
$rChargeEmployeur = $rCNPSEmployeur + $rCE + $rCMUEmployeur + $rPrestationFamiliale + $rAccidentDeTravail + $rTaxeDApprentissage + $rFormationContinue;
$rubrique = array(
'code' => '',
'designation' => 'TOTAL COTISATION',
'nombre' => '',
'base' => '',
'tauxSalarial' => '',
'gainSalarial' => '',
'retenueSalarial' => $rChargeSalariales,
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => $rChargeEmployeur
);
array_push($rubriques, $rubrique);
$primeDeTransport = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'PRIME DE TRANSPORT'
)
);
$rubrique = array(
'code' => $primeDeTransport->getCode(),
'designation' => $primeDeTransport->getDesignation(),
'nombre' => '',
'base' => $primeDeTransport->getLaBase(),
'tauxSalarial' => '',
'gainSalarial' => $primeDeTransport->getLaBase(),
'retenueSalarial' => '',
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
$rPrimeDeSalissure = 0;
$salissure = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'PRIME DE SALISSURE'
)
);
if($salissure != null){
$rPrimeDeSalissure = $salissure->getLaBase() * 7;
if($rPrimeDeSalissure > 0){
$rubrique = array(
'code' => $salissure->getCode(),
'designation' => $salissure->getDesignation(),
'nombre' => 7,
'base' => $salissure->getLaBase(),
'tauxSalarial' => '',
'gainSalarial' => $rPrimeDeSalissure,
'retenueSalarial' => '',
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
}
}
$rPrimeDeTenue = 0;
$tenue = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'designation' => 'PRIME DE TENUE'
)
);
if($tenue != null){
$rPrimeDeTenue = $tenue->getLaBase() * 3;
if($rPrimeDeTenue > 0){
$rubrique = array(
'code' => $tenue->getCode(),
'designation' => $tenue->getDesignation(),
'nombre' => 3,
'base' => $tenue->getLaBase(),
'tauxSalarial' => '',
'gainSalarial' => $rPrimeDeTenue,
'retenueSalarial' => '',
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
}
}
//Heures supplementaires
$heureDeTravail = $em->getRepository(PresenceEmployeUser::class)
->heureDeTravail($boutique, $dateDebutPaiementSalaire, $datePaiementSalaire);
$heuresSupplementaires = 0;
$heuresTravaillees = 0;
$rTauxHoraire = 470;
$rValeureuresSupplementaires = 0;
if(!empty($heureDeTravail)){
$lesHeurs = (float)$heureDeTravail[0]['heureSupplementaire'];
$heuresTravaillees = $heureDeTravail[0]['tempsDeTravail'];
$heuresSupplementaires = $heureDeTravail[0]['heureSupplementaire'];
if( $lesHeurs> 0){
$rValeureuresSupplementaires = $lesHeurs * $rTauxHoraire * (1.25);
$rubrique = array(
'code' => '00',
'designation' => 'HEURES SUPPLEMENTAIRES',
'nombre' => $lesHeurs,
'base' => $rTauxHoraire,
'tauxSalarial' => '',
'gainSalarial' => $rValeureuresSupplementaires,
'retenueSalarial' => '',
'tauxPatronal' => '',
'gainPatronal' => '',
'retenuePatronal' => ''
);
array_push($rubriques, $rubrique);
}
}
$supprimerPaiementSalaireDUnMoisDunEmploye = $em->getRepository(RubriqueSalairePaiement::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'moisPaiementSalaire' =>$mois,
'anneePaiementSalaire' => $annee
)
);
foreach($supprimerPaiementSalaireDUnMoisDunEmploye as $rb){
$em->remove($rb);
}
$em->flush();
foreach($rubriques as $rub){
$rubriqueSalairePaiement = new RubriqueSalairePaiement;
$rubriqueSalairePaiement->setBoutique($boutique);
$rubriqueSalairePaiement->setUser($employe->getUser());
$rubriqueSalairePaiement->setCode($rub['code']);
$rubriqueSalairePaiement->setDesignation($rub['designation']);
$rubriqueSalairePaiement->setNombre((float)$rub['nombre']);
$rubriqueSalairePaiement->setLaBase((float)$rub['base']);
$rubriqueSalairePaiement->setTauxSalarial((float)$rub['tauxSalarial']);
$rubriqueSalairePaiement->setGainSalarial((float)$rub['gainSalarial']);
$rubriqueSalairePaiement->setRetenueSalarial((float)$rub['retenueSalarial']);
$rubriqueSalairePaiement->setTauxPatronal((float)$rub['tauxPatronal']);
$rubriqueSalairePaiement->setGainPatronal((float)$rub['gainPatronal']);
$rubriqueSalairePaiement->setRetenuePatronal((float)$rub['retenuePatronal']);
$rubriqueSalairePaiement->setMoisPaiementSalaire($mois);
$rubriqueSalairePaiement->setAnneePaiementSalaire($annee);
$rubriqueSalairePaiement->setDatePaiementSalaire(new \DateTime());
$em->persist($rubriqueSalairePaiement);
}
$em->flush();
$paiementSalaireASupprimer = $em->getRepository(PaiementSalaire::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' =>$employe->getUser()->getId(),
'moisSalaire' =>$mois,
'anneeSalaire' => $annee
)
);
if($paiementSalaireASupprimer != null){
$em->remove($paiementSalaireASupprimer);
$em->flush();
}
$salaireNetAPayer = $rTotalBrut - $rChargeSalariales + $primeDeTransport->getLaBase();
$paiementSalaire = new PaiementSalaire;
$paiementSalaire->setBoutique($boutique);
$paiementSalaire->setUser($employe->getUser());
$paiementSalaire->setSalaireBrut($rTotalBrut);
$paiementSalaire->setChargesSalariales($rChargeSalariales);
$paiementSalaire->setChargesPatronales($rChargeEmployeur);
$paiementSalaire->setHeuresTravaillees($heuresTravaillees);
$paiementSalaire->setHeuresSupplementaires($heuresSupplementaires);
$paiementSalaire->setSalaireNetAPayer($salaireNetAPayer);
$paiementSalaire->setDatePaiementFinDuMois($datePaiementSalaire);
$paiementSalaire->setMoisSalaire($mois);
$paiementSalaire->setAnneeSalaire($annee);
$cumulElementPaiementSalaire = $em->getRepository(PaiementSalaire::class)
->cumulElementPaiementSalaire($boutique->getId(), $employe->getUser()->getId(), new \DateTime());
$cumulSalaireBrut = $rTotalBrut + (float)$cumulElementPaiementSalaire['0']['cumulSalaireBrut'];
$paiementSalaire->setCumulSalaireBrut($cumulSalaireBrut);
$cumulChargesSalariales = $rChargeSalariales + (float)$cumulElementPaiementSalaire['0']['cumulChargesSalariales'];
$paiementSalaire->setCumulChargesSalariales($cumulChargesSalariales);
$cumulChargesPatronales = $rChargeEmployeur + (float)$cumulElementPaiementSalaire['0']['cumulChargesPatronales'];
$paiementSalaire->setCumulChargesPatronales($cumulChargesPatronales);
$cumulHeuresTravaillees = $heuresTravaillees + (float)$cumulElementPaiementSalaire['0']['cumulHeuresTravaillees'];
$paiementSalaire->setCumulHeuresTravaillees($cumulHeuresTravaillees);
$cumulHeuresSupplementaires = $heuresSupplementaires + (float)$cumulElementPaiementSalaire['0']['cumulHeuresSupplementaires'];
$paiementSalaire->setCumulHeuresSupplementaires($cumulHeuresSupplementaires);
$cumulSalaireNetAPayer = $salaireNetAPayer + (float)$cumulElementPaiementSalaire['0']['cumulSalaireNetAPayer'];
$paiementSalaire->setCumulSalaireNetAPayer($cumulSalaireNetAPayer);
$em->persist($paiementSalaire);
$em->flush();
}
return $this->render('admin/calculer_salaire.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/rh/imprimer-bulletin-salaire/{employe}/{dateDebut}/{dateFin}/{moyenDePaiement}", name="admin_imprimer_bulletin_salaire")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function imprimerBulletinSalaireAction( Request $request, Boutique $boutique, $employe = 0, $dateDebut = '', $dateFin = '', $moyenDePaiement = '')
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$employe = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'boutique' => $boutique,
'user' => $employe
)
);
$dateDebut = new \DateTime($dateDebut);
$dateFin = new \DateTime($dateFin);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$rubriques = $em->getRepository(RubriqueSalairePaiement::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'user' => $employe->getUser()->getId(),
'moisPaiementSalaire' => $dateDebut->format('m'),
'anneePaiementSalaire' => $dateDebut->format('Y')
)
);
$paiementSalaire = $em->getRepository(PaiementSalaire::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user' =>$employe->getUser()->getId(),
'moisSalaire' =>$dateDebut->format('m'),
'anneeSalaire' => $dateDebut->format('Y')
)
);
$pdf = new Html2Pdf('P', 'A4', 'fr');
$content = $this->renderView('pdf/bulletin_de_salaire.html.twig', [
'boutique' => $boutique,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'moyenDePaiement' => $moyenDePaiement,
'rubriques' => $rubriques,
'employe' => $employe,
'paiementSalaire' => $paiementSalaire
]);
$pdf->writeHTML($content);
$name = $employe->getUser()->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
$photo = new Photo;
$lienPhysique = $photo->getUploadRootDir().$name;
$pdf->output($lienPhysique, 'I');
return $this->render('pdf/bulletin_de_salaire.html.twig', [
'boutique' => $boutique,
'rubriques' => $rubriques,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/rh/rubriques-salaires", name="admin_rubriques_slaires")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function rubriquesSalairesAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$rubriquesSalaires = $em->getRepository(RubriqueSalaire::class)
->findBy(
array(
'boutique' => $boutique->getId(),
)
);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/rubriques_slaires.html.twig', [
'boutique' => $boutique,
'rubriquesSalaires' => $rubriquesSalaires,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/rh/editer-rubriques-salaires-employer/{id}", name="admin_editer_rubriques_slaires_employe")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editerRubriquesSalairesEmployeAction( Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$rubriquesSalaires = $em->getRepository(RubriqueSalaire::class)
->findBy(
array(
'boutique' => $boutique->getId(),
)
);
$employe = $em->getRepository(AppUser::class)
->findOneById($id);
$rubriqueSalaireEmployes = $em->getRepository(RubriqueSalaireEmploye::class)
->findBy(
array(
'boutique' => $boutique,
'user' => $employe
)
);
$lesRubriques = array();
//var_dump($rubriqueSalaireEmployes);
foreach($rubriquesSalaires as $rubriquesSalaire){
$estDeDans = false;
if(empty($rubriqueSalaireEmployes))
{
$r = array(
'code' => $rubriquesSalaire->getCode(),
'designation' => $rubriquesSalaire->getDesignation(),
'laBase' => '',
'taux' => '',
'part' => $rubriquesSalaire->getPart(),
'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
'existeDeja' => false
);
array_push($lesRubriques, $r);
}else{
$taux = 0;
$laBase = 0;
$existeDeja = false;
foreach($rubriqueSalaireEmployes as $rubriqueSalaireEmploye){
if($rubriqueSalaireEmploye->getCode() == $rubriquesSalaire->getCode()){
//existe_deja permet de savoir si le
$taux = $rubriqueSalaireEmploye->getTaux();
$laBase = $rubriqueSalaireEmploye->getLaBase();
$existeDeja = true;
}else{
$existeDeja = false;
}
}
$r = array(
'code' => $rubriquesSalaire->getCode(),
'designation' => $rubriquesSalaire->getDesignation(),
'laBase' => $laBase,
'taux' => $taux,
'part' =>$rubriquesSalaire->getPart(),
'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
'existeDeja' => $existeDeja
);
array_push($lesRubriques, $r);
}
}
if($request->getMethod() == 'POST'){
$i = 0;
foreach($rubriquesSalaires as $rubriquesSalaire){
$i++;
$laBase = (float)$request->request->get('la_base'.$i);
$taux = (float)$request->request->get('taux'.$i);
$existeDeja = (bool)$request->request->get('existe_deja'.$i);
$rubrique = $em->getRepository(RubriqueSalaireEmploye::class)
->findOneBy(
array(
'boutique' => $boutique,
'user' => $employe,
'code' =>$rubriquesSalaire->getCode()
)
);
if($rubrique == null){
$rubrique = new RubriqueSalaireEmploye;
$rubrique->setUser($employe);
$rubrique->setBoutique($boutique);
$rubrique->setCode($rubriquesSalaire->getCode());
$rubrique->setDesignation($rubriquesSalaire->getDesignation());
$rubrique->setPart($rubriquesSalaire->getPart());
$rubrique->setGainOuRetenu($rubriquesSalaire->getGainOuRetenu());
}
$rubrique->setLaBase($laBase);
$rubrique->setTaux($taux);
$em->persist($rubrique);
$em->flush();
}
return $this->redirectToRoute('admin_rh_salaires', array('slug' => $boutique->getSlug()));
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/editer_rubriques_slaires_employe.html.twig', [
'boutique' => $boutique,
'rubriquesSalaires' => $rubriquesSalaires,
'userBoutique' => $userBoutique,
'employe' => $employe,
'rubriqueSalaireEmployes' => $rubriqueSalaireEmployes,
'lesRubriques' => $lesRubriques
]);
}
/**
* @Route("/{slug}/rh/rubriques-salaires/nouveau", name="admin_nouvelle_rubrique_slaire")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouvelleRubriqueSalaireAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$rubriquesSalaire = new RubriqueSalaire;
$form = $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$rubriquesSalaire->setBoutique($boutique);
$em->persist($rubriquesSalaire);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
$rubriquesSalaire = new RubriqueSalaire;
$form = $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/nouvelle_rubrique_salaire.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'form' =>$form->createView()
]);
}
/**
* @Route("/{slug}/rh/rubriques-salaires/modifier/{id}", name="admin_modifier_rubrique_salaire")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function modifierRubriqueSalaireAction( Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$rubriqueSalaire = $em->getRepository(RubriqueSalaire::class)
->findOneById($id);
$form = $this->createForm(RubriqueSalaireEditType::class, $rubriqueSalaire);
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
} else {
$error =" Veillez corrigez vos erreurs";
}
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/modifier_rubrique_salaire.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'form' =>$form->createView()
]);
}
/**
* @Route("/{slug}/rh/rubriques-salaires/supprimer/{id}", name="admin_supprimer_rubrique_salaire")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function supprimerRubriqueSalaireAction( Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$rubriquesSalaire = $em->getRepository(RubriqueSalaire::class)
->findOneById($id);
if(null !== $rubriquesSalaire){
$em->remove($rubriquesSalaire);
$em->flush();
}
return $this->redirectToRoute('admin_rubriques_slaires', array('slug'=>$boutique->getSlug()));
}
/**
* @Route("/{slug}/rh/conges", name="admin_conges")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function congesAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutiques = $em->getRepository(UserBoutique::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'estParti' => false
)
);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$employes = array();
foreach($userBoutiques as $ub){
$e = array(
'id' =>$ub->getUser()->getId(),
'name' =>$ub->getUser()->getNom().' '.$ub->getUser()->getPrenom(),
'department' => $ub->getDepartementEmploi()
);
array_push($employes, $e);
}
$employes = json_encode($employes);
$conges = $em->getRepository(Conge::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
$cgs = array();
foreach($conges as $conge){
$cg = array(
'id' => $conge->getId(),
'employeeId' =>$conge->getUser()->getId(),
'employeeName' => $conge->getUser()->getNom(). ' '.$conge->getUser()->getPrenom(),
'type' => $conge->getTypeConge(),
'startDate' => $conge->getDateDebut()->format('Y-m-d'),
'endDate' => $conge->getDateFin()->format('Y-m-d'),
'notes' => $conge->getNotes()
);
array_push($cgs, $cg);
}
return $this->render('admin/conges.html.twig', [
'boutique' => $boutique,
'userBoutiques' => $userBoutiques,
'userBoutique' => $userBoutique,
'employes' => $employes,
'conges' => json_encode($cgs)
]);
}
/**
* @Route("/{slug}/rh/nouveau-conge", name="admin_rh_nouveau_conge")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouveauCongeAction( Request $request, $slug)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
if($request->getMethod() == 'POST'){
$employe = $request->request->get('employe');
$employe = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'user'=>$employe
)
);
$typeConge = $request->request->get('typeConge');
$notes = $request->request->get('notes');
$dateDebut = $request->request->get('dateDebut');
$dateDebut = new \DateTime($dateDebut);
$dateFin = $request->request->get('dateFin');
$dateFin = new \DateTime($dateFin);
$conge = new Conge;
$conge->setDateDebut($dateDebut);
$conge->setDateFin($dateFin);
$conge->setTypeConge($typeConge);
$conge->setNotes($notes);
$conge->setUser($employe->getUser());
$conge->setBoutique($boutique);
$conge->setAnnee($dateDebut->format('Y'));
$conge->setMois($dateDebut->format('m'));
$nombreDeJour = $dateFin->diff($dateDebut)->format("%a");
$conge->setNombreDeJour($nombreDeJour);
$em->persist($conge);
$em->flush();
return $this->redirectToRoute('admin_conges', array('slug'=>$boutique->getSlug()));
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/nouveau_conge.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
]);
}
/**
* @Route("/{slug}/rh/nouvel-employe", name="admin.nouvel_employe")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouvelEmployeAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$employe = new AppUser;
$form = $this->createForm(EmployeType::class, $employe);
$error = '';
$ok_submission = '';
if('POST' == $request->getMethod()){
$form->handleRequest($request);
if($form->isValid()){
$employe->setUsername($form->getData()->getNom().$form->getData()->getPrenom().time());
$roles = $employe->getRoles();
$roles[] = 'ROLE_EMPLOYE';
$employe->setRoles($roles);
$employe->setEnabled(true);
$employe->setBoutique($boutique);
$email = $form->getData()->getEmail();
if($email == ''){
$employe->setEmail($form->getData()->getNom().$form->getData()->getPrenom().time());
}
//$hashedPassword = $passwordHasher->hashPassword($planteur, $form->getData()->getNom().$form->getData()->getPrenom());
$employe->setPassword('A changer');
$em->persist($employe);
$em->flush();
$matricule = $request->request->get('matricule');
$salaire = (float)$request->request->get('salaire');
$laFonction = $request->request->get('la_fonction');
$categorie = $request->request->get('categorie');
$departement = $request->request->get('departement');
$dateDePriseDeFonction = $request->request->get('date_de_prise_de_fonction');
$dateDePriseDeFonction = new \DateTime($dateDePriseDeFonction);
$nombreDEnfant = (float)$request->request->get('nombre_d_enfant');
$igr = (float)$request->request->get('igr');
$employeBoutique = new UserBoutique;
$employeBoutique->setUser($employe);
$employeBoutique->setBoutique($boutique);
$employeBoutique->setMatricule($matricule);
$employeBoutique->setSalaire($salaire);
$employeBoutique->setLaFonction($laFonction);
$employeBoutique->setCategorieEmploi($categorie);
$employeBoutique->setDepartementEmploi($departement);
$employeBoutique->setDateDePriseDeFonction($dateDePriseDeFonction);
$employeBoutique->setNombreDEnfant($nombreDEnfant);
$employeBoutique->setIgr($igr);
$employeBoutique->setRole('ROLE_EMPLOYE');
$em->persist($employeBoutique);
$em->flush();
$employe = new AppUser;
$form = $this->createForm(EmployeType::class, $employe);
$ok_submission = 'Enregistrement effectué';
} else{
$error = 'error';
}
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $this->getUser(),
'boutique' => $boutique
)
);
return $this->render('admin/nouvel_employe.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'ok_submission' => $ok_submission,
'error' => $error,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/rh/modifier-employe/{id}", name="admin.modifier_employe")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function modifierEmployeAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$employe = $em->getRepository(AppUser::class)
->findOneById($id);
$form = $this->createForm(EmployeEditType::class, $employe);
$error = '';
$ok_submission = '';
if('POST' == $request->getMethod()){
$form->handleRequest($request);
if($form->isValid()){
$em->flush();
$ok_submission = 'Enregistrement effectué';
} else{
$error = 'error';
}
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $this->getUser(),
'boutique' => $boutique
)
);
return $this->render('admin/modifier_employe.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'ok_submission' => $ok_submission,
'error' => $error,
'userBoutique' => $userBoutique,
'employe' => $employe
]);
}
/**
* @Route("/{slug}/comptes", name="admin_comptabilite_comptes")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function comptesAction(Request $request, $slug)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $this->getUser(),
'boutique' => $boutique
)
);
$comptes = $em->getRepository(Compte::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateDebut->setTime(0, 0);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$dateFin->setTime(23, 59);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$invoices = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'invoice', $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$user = $this->getUser();
return $this->render('admin/comptes.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'comptes' => $comptes,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
]);
}
/**
* @Route("/{slug}/ecritures-comptable-d-un-compte", name="admin_ecritures_comptale_d_un_compte")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function ecrituresComptableDUnCompteAction(Request $request, $slug)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $this->getUser(),
'boutique' => $boutique
)
);
if($request->getMethod() == 'POST'){
$compte = $request->request->get('compte');
$dateDebut = $request->request->get('dateDebut');
$dateDebut = new \DateTime($dateDebut);
$dateFin = $request->request->get('dateFin');
$dateFin = new \DateTime($dateFin);
$ecrituresComptables = $em->getRepository(EcritureComptable::class)
->ecrituresComptableParDate($boutique, $dateDebut, $dateFin, $compte);
}
return $this->render('admin/ecritures_comptale_d_un_compte.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'ecrituresComptables' => $ecrituresComptables
]);
}
/**
* @Route("/{slug}/nouveau-compte", name="admin_nouveau_compte")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouveauCompteAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$compte = new Compte;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$compte->setBoutique($boutique);
$em->persist($compte);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
unset($compte);
unset($form);
$compte = new Compte;
$form = $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/nouveau_compte.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/journaux", name="admin_comptabilite_journaux")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function journauxAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$compte = new Compte;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$journaux = $em->getRepository(JournalComptabilite::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
return $this->render('admin/journaux.html.twig', [
'boutique' => $boutique,
'journaux' => $journaux,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/nouveau-journal", name="admin_comptabilite_nouveau_journal")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouveauJournalAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$journal = new JournalComptabilite;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(JournalComptabiliteType::class, $journal);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$journal->setBoutique($boutique);
$em->persist($journal);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
unset($journal);
unset($form);
$journal = new JournalComptabilite;
$form = $this->createForm(JournalComptabiliteType::class, $journal);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/nouveau_journal.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/etats-financiers", name="admin_comptabilite_etats_financiers")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function etatsFinanciersAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = date('Y-01-01');
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = date('Y-12-31');
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$chargeDExploitations = $em->getRepository(Expensive::class)
->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges d\'exploitation');
$chargeFinancieres = $em->getRepository(Expensive::class)
->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges financières');
$chargeExceptionnelles = $em->getRepository(Expensive::class)
->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges exceptionnelles');
$impotSurLeBenefice = $em->getRepository(Expensive::class)
->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Impôts sur les bénéficices');
$venteDeMarchandise = $em->getRepository(Commande::class)
->chiffreDAffaireDUnePeriode('invoice', $boutique->getId(), $dateDebut, $dateFin);
if(!empty($venteDeMarchandise)){
$venteDeMarchandise = $venteDeMarchandise['0'];
}else{
$venteDeMarchandise = array(
'totalVente' => 0
);
}
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$user = $this->getUser();
if($request->getMethod() == 'POST'){
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/etats_financiers.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'intervalleDeDate' => $intervalleDeDate,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'intervalleMois' => $intervalleMois,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
'chargeDExploitations' => $chargeDExploitations,
'chargeFinancieres' => $chargeFinancieres,
'chargeExceptionnelles' => $chargeExceptionnelles,
'impotSurLeBenefice' => $impotSurLeBenefice,
'venteDeMarchandise' => $venteDeMarchandise
]);
}
/**
* @Route("/{slug}/ecritures-comptable", name="admin_comptabilite_ecritures_comptable")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function ecrituresEomptableAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$compte = new Compte;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$ecritureComptables = $em->getRepository(EcritureComptable::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
if($request->getMethod() == 'POST'){
$ecritureComptables = array();
}
return $this->render('admin/ecriture_comptables.html.twig', [
'boutique' => $boutique,
'ecritureComptables' => $ecritureComptables,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/grand-livre", name="admin_comptabilite_grand_livre")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function grandLivreAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$compte = new Compte;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = date('Y-01-01');
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = date('Y-12-31');
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$ecritureComptables = $em->getRepository(EcritureComptable::class)
->grandLivre($boutique->getId(), $dateDebut, $dateFin);
if($request->getMethod() == 'POST'){
$ecritureComptables = array();
}
return $this->render('admin/grand_livre.html.twig', [
'boutique' => $boutique,
'ecritureComptables' => $ecritureComptables,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/nouvelle-ecriture-comptable", name="admin_comptabilite_nouvelle_ecriture_comptable")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouvelleEcritureEomptableAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$ecritureComptable = new EcritureComptable;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(EcritureComptableType::class, $ecritureComptable, array('boutique' => $boutique->getId()));
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$ecritureComptable->setBoutique($boutique);
$em->persist($ecritureComptable);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
unset($ecritureComptable);
unset($form);
$ecritureComptable = new EcritureComptable;
$form = $this->createForm(EcritureComptableType::class, $ecritureComptable, array('boutique' => $boutique->getId()));
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/nouvelle_ecriture_comptable.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/new-payment/{id}", name="admin.new_payment")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newPaymentAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
$factures = $em->getRepository(Commande::class)
->facturesPourVersement($boutique->getId());
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$paymentMethods = $em->getRepository(PaymentMethod::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$laDate = $request->request->get('laDate');
$frais = (float)$request->request->get('frais');
$paymentMethod = $request->request->get('paymentMethod');
$montant = (float)$request->request->get('montant');
$referencePaiement = $request->request->get('referencePaiement');
$commande = $request->request->get('facture');
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' =>$boutique->getId(),
'id' => $commande
)
);
if((float)$commande->getResteAPayer() < $montant || $montant == 0){
$this->addFlash(
'danger',
'Montant invalide '. $montant
);
} else{
$laDate = new \DateTime($laDate);
$payment = new Payment;
$payment->setLaDate($laDate);
$payment->setCommande($commande);
$payment->setBoutique($boutique);
$payment->setMontant($montant);
$payment->setReferencePaiement($referencePaiement);
$payment->setMoyenDePaiement($paymentMethod);
$em->persist($payment);
$commande->setMontantPaye($commande->getMontantPaye() + $montant);
$commande->setResteAPayer($commande->getResteAPayer() - $montant);
$em->flush();
$groupeEcritureComptable = new GroupeEcritureComptable;
$groupeEcritureComptable->setBoutique($boutique);
$groupeEcritureComptable->setLibelleEcriture('Règlement client');
$groupeEcritureComptable->setDebit($montant);
$groupeEcritureComptable->setCredit($montant);
$groupeEcritureComptable->setLaDate($payment->getLaDate());
$groupeEcritureComptable->setNumeroPiece($commande->getNumero());
$groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
$groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
$em->persist($groupeEcritureComptable);
$em->flush();
//Ecriture comptable
if($paymentMethod == 'check' || $paymentMethod == 'transfer'){
//Debit
$leJournal = $em->getRepository(JournalComptabilite::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'reference' => 'BQ',
'nom' => 'Banque'
)
);
$ecritureComptable = new EcritureComptable;
$groupeEcritureComptable->setLeJournal($leJournal);
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('521'); //Banque
$compte->setSolde($compte->getSolde() + $montant);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setDebit($montant);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
//Credit
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('411'); //Client
$compte->setSolde($compte->getSolde() - $montant);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setCredit($montant);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}
if($paymentMethod == 'cash'){
//Débit
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$leJournal = $em->getRepository(JournalComptabilite::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'reference' => 'CA',
'nom' => 'Caisse'
)
);
$groupeEcritureComptable->setLeJournal($leJournal);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('5711'); //caisse
$compte->setSolde($compte->getSolde() + $montant);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setDebit($montant);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
//Credit
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('411'); //Client
$compte->setSolde($compte->getSolde() - $montant);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setCredit($montant);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}
if($paymentMethod == 'card'){
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setBoutique($boutique);
$leJournal = $em->getRepository(JournalComptabilite::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'reference' => 'BQ',
'nom' => 'Banque'
)
);
$ecritureComptable->setLeJournal($leJournal);
$groupeEcritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('521'); //Banque
$compte->setSolde($compte->getSolde() + $montant - $frais);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setDebit($montant - $frais);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
if($frais > 0){
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('6315'); //Commissions sur cartes de crédit
$compte->setSolde($compte->getSolde() + $frais);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setDebit($frais);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}
//Credit
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('515'); //CARTES DE CREDIT A ENCAISSER
$compte->setSolde($compte->getSolde() - $montant );
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setCredit($montant);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}
if($paymentMethod == 'mobile-money'){
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$leJournal = $em->getRepository(JournalComptabilite::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'reference' => 'CA',
'nom' => 'Caisse'
)
);
$ecritureComptable->setLeJournal($leJournal);
$groupeEcritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('5711'); //Caisse en monnaie nationale
$compte->setSolde($compte->getSolde() + $montant - $frais);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setDebit($montant - $frais);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
if($frais > 0){
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('6317'); //Frais sur instruments monnaie électronique
$compte->setSolde($compte->getSolde() + $frais);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setDebit($frais);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}
//Credit
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('554'); //PORTE-MONNAIE ELECTRONIQUE
$compte->setSolde($compte->getSolde() - $montant);
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture('Règlement client');
$ecritureComptable->setCredit($montant);
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($payment->getLaDate());
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}
$em->flush();
$this->addFlash(
'success',
'Enregistrement effectué'
);
}
}
return $this->render('admin/new_payment.html.twig', [
'boutique' => $boutique,
'commande' => $commande,
'paymentMethods' => $paymentMethods,
'factures' => $factures,
'userBoutique' => $userBoutique
]);
}
//bill_credit
/**
* @Route("/{slug}/bill-credits", name="admin.bill_credits")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function billCreditsAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$billCredits = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'bill_credit', $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
if('POST' == $request->getMethod()){
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$dateDebut = new \DateTime($dateDebut);
$dateFin = new \DateTime($dateFin);
$billCredits = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'bill_credit', $dateDebut, $dateFin);
return $this->render('admin/bill_credits_table_content.html.twig', [
'boutique' => $boutique,
'billCredits' => $billCredits
]);
}
return $this->render('admin/bill_credits.html.twig', [
'boutique' => $boutique,
'billCredits' => $billCredits,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
'userBoutique' => $userBoutique
]);
}
//Sales
/**
* @Route("/{slug}/proposals/new", name="admin.new_proposal")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newProposalsAction( Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$proposals = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
if('POST' == $request->getMethod()){
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$dateDebut = new \DateTime($dateDebut);
$dateFin = new \DateTime($dateFin);
$proposals = $em->getRepository(Commande::class)
->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
return $this->render('admin/proposals_table_content.html.twig', [
'boutique' => $boutique,
'proposals' => $proposals
]);
}
return $this->render('admin/nouvelle_commande.html.twig', [
'boutique' => $boutique,
'proposals' => $proposals,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
'userBoutique' => $userBoutique
]);
}
//Sales
/**
* @Route("/{slug}/sales", name="admin.sales")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function salesAction( Request $request, ChiffreEnLettre $chiffreEnLettre, Boutique $boutique, $type = 'Invoice')
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$produits = $em->getRepository(Produit::class)
->findByBoutique($boutique);
$modeleReglements = $em->getRepository(ModeleReglement::class)
->findByBoutique($boutique);
$tiers = $em->getRepository(Tiers::class)
->findByBoutique($boutique);
$user = $this->getUser();
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$typeFacture = $_POST['typeFacture'];
$modeleReglement = $_POST['modeleReglement'];
$client = $_POST['client'];
$dateCommande = $_POST['dateCommande'];
$montantHT = $_POST['montantHT'];
$montantTVA = $_POST['montantTVA'];
$montantTTC = $_POST['montantTTC'];
$listeProduits = json_decode($_POST['listeProduits']);
$commande = new Commande;
$commande->setBoutique($boutique);
$client = $em->getRepository(Tiers::class)
->findOneById($client);
if(null !== $client){
$commande->setTiers($client);
}
$laDate = new \DateTime($dateCommande);
$commande->setLaDate($laDate);
$commande->setTotalHT($montantHT);
$commande->setTotalTVA($montantTVA);
$commande->setTotalTTC($montantTTC);
$montantlettre = strtoupper($chiffreEnLettre->Conversion($montantTTC));
$commande->setMontantEnLettre($montantlettre);
$commande->setTypeFacture($typeFacture);
$em->persist($commande);
$em->flush();
$produitCommandes = array();
foreach($listeProduits as $listeProduit){
$listeProduit = (array)$listeProduit;
$leProduit = $em->getRepository(Produit::class)->findOneById($listeProduit['idProduit']);
$produitCommande = new ProduitCommande;
$produitCommande->setProduit($leProduit);
$produitCommande->setCommande($commande);
$produitCommande->setQuantite($listeProduit['quantite']);
$produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
$produitCommande->setRemise($listeProduit['reduction']);
$produitCommande->setTotalHT($listeProduit['totalHT']);
$produitCommande->setTotalTVA($listeProduit['totalTVA']);
$produitCommande->setTotalTTC($listeProduit['totalTTC']);
$em->persist($produitCommande);
array_push($produitCommandes, $produitCommande);
}
$em->flush();
return $this->render('admin/facture.html.twig', [
'boutique' => $boutique,
'commande' => $commande,
'typeFacture' => $typeFacture,
'client' => $client,
'produitCommandes' => $produitCommandes,
'listeProduit' => $listeProduit,
'montantHT' => $montantHT,
'montantTVA' => $montantTVA,
'montantTTC' => $montantTTC,
'userBoutique' => $userBoutique
]);
}
return $this->render('admin/nouvelle_commande.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'modeleReglements' => $modeleReglements,
'tiers' => $tiers,
'userBoutique' => $userBoutique
]);
}
//Vente
/**
* @Route("/{slug}/new-sale/{type}", name="admin.new_sale")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newSaleAction( Request $request, ChiffreEnLettre $chiffreEnLettre, Boutique $boutique, $type = 'invoice')
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$produits = $em->getRepository(Produit::class)
->findByBoutique($boutique);
$modeleReglements = $em->getRepository(ModeleReglement::class)
->findByBoutique($boutique);
$tiers = $em->getRepository(Tiers::class)
->findByBoutique($boutique);
$user = $this->getUser();
$vehicules = array( 22, 23, 28);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$ok_soumission = '';
$error = '';
$editMode = 'new';
$responseFNE = '';
$natureFacture = '';
if($request->getMethod() == 'POST'){
$typeFacture = $_POST['typeFacture'];
$modeleReglement = $_POST['modeleReglement'];
$client = $_POST['client'];
$moyenDePaiement = $_POST['moyenDePaiement'];
$dateCommande = $_POST['dateCommande'];
$montantHT = (float)$_POST['montantHT'];
$remise = (float)$_POST['remise'];
$remisePourcentage = (float)$_POST['remisePourcentage'];
$totalHTApresRemise = (float)$_POST['totalHTApresRemise'];
$montantTVA = (float)$_POST['montantTVA'];
$montantTTC = (float)$_POST['montantTTC'];
$titreDocument = $_POST['titreDocument'];
$valableJusquAu = $_POST['valableJusquAu'];
$observation = $_POST['observation'];
$matriculeVehicule = $_POST['matriculeVehicule'];
$marqueVehicule = $_POST['marqueVehicule'];
$kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
$listeProduits = json_decode($_POST['listeProduits']);
$natureFacture = $_POST['natureFacture'];
$commande = new Commande;
$commande->setNatureFacture($natureFacture);
$commande->setCreePar($user);
$commande->setBoutique($boutique);
$client = $em->getRepository(Tiers::class)
->findOneById($client);
if(null !== $client){
$commande->setTiers($client);
}
$laDate = new \DateTime($dateCommande);
$commande->setLaDate($laDate);
$commande->setMoyenDePaiement($moyenDePaiement);
$commande->setMatriculeVehicule($matriculeVehicule);
$commande->setMarqueVehicule($marqueVehicule);
$commande->setKilometrageVehicule($kilometrageVehicule);
$commande->setTotalHT($montantHT);
$commande->setRemise($remise);
$commande->setRemisePourcentage(round($remisePourcentage, 2));
$commande->setTotalHTApresRemise($totalHTApresRemise);
if($commande->getNatureFacture() == 'purchase'){
$commande->setTotalTVA(0);
$commande->setTotalTTC($totalHTApresRemise);
$commande->setResteAPayer($totalHTApresRemise);
}else{
$commande->setTotalTVA($montantTVA);
$commande->setTotalTTC($montantTTC);
$commande->setResteAPayer($montantTTC);
}
$commande->setTitreDocument($titreDocument);
$commande->setObservation($observation);
if($valableJusquAu != ''){
$commande->setValableJusquAu(new \DateTime($valableJusquAu));
}
$montantlettre = strtoupper($chiffreEnLettre->Conversion($commande->getTotalTTC()));
$commande->setMontantEnLettre($montantlettre);
$commande->setTypeFacture($type);
if($commande->getNumero() == ''){
$commande->setNumero($this->getNumero($type, $boutique));
}
$em->persist($commande);
$em->flush();
$produitCommandes = array();
foreach($listeProduits as $listeProduit){
$listeProduit = (array)$listeProduit;
$idDuProduit = $listeProduit['idProduit'];
if($idDuProduit == ''){
//Produit inexistant, il faut le créer
$leProduit = new Produit;
$leProduit->setNom($listeProduit['nomProduit']);
$em->persist($leProduit);
$em->flush();
//TVA
if($listeProduit['tva'] > 0){
$tva = $em->getRepository(TVA::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'valeur' => $listeProduit['tva']
)
);
if($tva == null){
$tva = new TVA;
$tva->setValeur($listeProduit['tva']);
$em->persist($tva);
$em->flush();
}
$leProduit->setTva($tva);
}else{
$tva = $em->getRepository(TVA::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'estPrincipale' => true
)
);
$leProduit->setTva($tva);
}
//Prix
$produitP = new PrixProduit;
$produitP->setValeur($listeProduit['prixUnitaire']);
$leProduit->addPrix($produitP);
$leProduit->setPrixActuel($produitP);
$leProduit->setBoutique($boutique);
$em->persist($produitP);
$em->persist($leProduit);
$em->flush();
} else{
$leProduit = $em->getRepository(Produit::class)
->findOneById($idDuProduit);
}
$produitCommande = new ProduitCommande;
$produitCommande->setProduit($leProduit);
$produitCommande->setCommande($commande);
$produitCommande->setQuantite((float)$listeProduit['quantite']);
$produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
$produitCommande->setRemise((float)$listeProduit['reduction']);
$produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
$produitCommande->setTotalHT((float)$listeProduit['totalHT']);
$produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
$produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
$produitCommande->setTva((float)$listeProduit['tva']);
$produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
if($produitCommande->getProduit()->getTypeProduit() == 'produit'){
if($type == 'invoice'){
$produitVendu = $em->getRepository(Produit::class)
->findOneById($idDuProduit);
$produitVendu->setStockDisponible($produitVendu->getStockDisponible() - $produitCommande->getQuantite());
}
}
$em->persist($produitCommande);
array_push($produitCommandes, $produitCommande);
}
$em->flush();
$pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
$content = '';
switch($type){
case 'invoice':
$commande->setEtat(Commande::ETAT_FACTURE_PROVISOIRE);
$content = $this->renderView('pdf/facture.html.twig', [
'boutique' => $boutique,
'facture' => $commande,
'produits' => $produitCommandes,
'natureFacture' => $natureFacture,
'vehicules' => $vehicules
]);
//Facture FNE qui
if($boutique->getApiKeyFNE() != ''){
if($boutique->getSettings()->isGenererAutomatiquementFNE()){
$responseFNE = $this->genererFactureFNE($boutique->getSlug(), $commande->getId(), $natureFacture);
}
}
$this->genererEcritureComptableDeVente($boutique, $commande);
//Ecriture comptable
$em->flush();
break;
case 'proposal':
$commande->setEtat(Commande::ETAT_DEVIS_PROVISOIRE);
$content = $this->renderView('pdf/devis.html.twig', [
'boutique' => $boutique,
'facture' => $commande,
'produits' => $produitCommandes,
'vehicules' => $vehicules
]);
break;
case 'bill_credit':
$content = $this->renderView('pdf/facture_avoir.html.twig', [
'boutique' => $boutique,
'facture' => $commande,
'produits' => $produitCommandes,
'vehicules' => $vehicules
]);
break;
}
$pdf->writeHTML($content);
$name = $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
$lienPhysique = $commande->getUploadRootDir().$name;
$commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
$pdf->output($lienPhysique, 'F');
$em->flush();
return $this->render('admin/response_new_sale.html.twig', [
'boutique' => $boutique,
'commande' => $commande,
'responseFNE' => $responseFNE,
'vehicules' => $vehicules
]);
/*
return $this->render('admin/facture.html.twig', [
'boutique' => $boutique,
'commande' => $commande,
'typeFacture' => $typeFacture,
'client' => $client,
'produitCommandes' => $produitCommandes,
'listeProduit' => $listeProduit,
'montantHT' => $montantHT,
'montantTVA' => $montantTVA,
'montantTTC' => $montantTTC,
'userBoutique' => $userBoutique
]);
*/
}
return $this->render('admin/nouvelle_commande.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'modeleReglements' => $modeleReglements,
'tiers' => $tiers,
'editMode' => $editMode,
'userBoutique' => $userBoutique,
'responseFNE' => $responseFNE,
'type' => $type,
'vehicules' => $vehicules
]);
}
public function genererEcritureComptableDeVente($boutique, $commande)
{
$em = $this->getDoctrine()
->getManager();
$groupeEcritureComptable = new GroupeEcritureComptable;
$groupeEcritureComptable->setBoutique($boutique);
$libelle = 'Vente client';
if($commande->getTiers() != null){
$libelle = 'Vente à ' . $commande->getTiers()->getNom();
}
$groupeEcritureComptable->setLibelleEcriture($libelle);
$groupeEcritureComptable->setDebit($commande->getTotalTTC());
$groupeEcritureComptable->setCredit($commande->getTotalTTC());
$groupeEcritureComptable->setLaDate($commande->getLaDate());
$groupeEcritureComptable->setNumeroPiece($commande->getNumero());
$groupeEcritureComptable->setAnnee($commande->getLaDate()->format('Y'));
$groupeEcritureComptable->setMois($commande->getLaDate()->format('m'));
$em->persist($groupeEcritureComptable);
$em->flush();
//Débit
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$journal = $em->getRepository(JournalComptabilite::class)
->findOneBy(
array(
'reference' => 'VE',
'nom' => 'Vente',
'boutique' => $boutique->getId()
)
);
$ecritureComptable->setLeJournal($journal);
$groupeEcritureComptable->setLeJournal($journal);
$compteClient = $em->getRepository(Compte::class)
->findOneBy(
array(
'numero' => '411',
'boutique' =>$boutique->getId()
)
);
$compteClient->setSolde($compteClient->getSolde() + $commande->getTotalTTC());
$ecritureComptable->setCompte($compteClient);
$ecritureComptable->setNumeroPiece($commande->getNumero());
$nomClient = '';
if($commande->getTiers() != null){
$nomClient = ' à '.$commande->getTiers()->getNom();
}
$ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
$ecritureComptable->setDebit($commande->getTotalTTC());
$ecritureComptable->setSolde($compteClient->getSolde());
$ecritureComptable->setLaDate($commande->getLaDate());
$ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
$ecritureComptable->setMois($commande->getLaDate()->format('m'));
$em->persist($ecritureComptable);
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
//Crédit
$ecritureComptable->setLeJournal($journal);
$compte = $em->getRepository(Compte::class)
->findOneBy(
array(
'numero' => '701',
'boutique' => $boutique->getId()
)
);
$compte->setSolde($compte->getSolde() - $commande->getTotalHTApresRemise() );
$ecritureComptable->setCompte($compte);
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
$ecritureComptable->setCredit($commande->getTotalHTApresRemise());
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($commande->getLaDate());
$ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
$ecritureComptable->setMois($commande->getLaDate()->format('m'));
$em->persist($ecritureComptable);
//TVA pour une entreprise qui facture la TVA
if($commande->getTotalTVA() > 0){
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setLeJournal($journal);
$compte = $em->getRepository(Compte::class)
->findOneBy(
array(
'numero' => '4431',
'boutique' => $boutique->getId()
)
);
$compte->setSolde($compte->getSolde() - $commande->getTotalTVA() );
$ecritureComptable->setCompte($compte);
$ecritureComptable->setNumeroPiece($commande->getNumero());
$ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
$ecritureComptable->setCredit($commande->getTotalTVA());
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($commande->getLaDate());
$ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
$ecritureComptable->setMois($commande->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}
$em->flush();
}
/**
* @Route("/{slug}/generer-facture-fne/{id}", name="admin_url_generer_facture_fne")
*/
public function urlGenererFactureFNEAction(Request $request, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$commande = $em->getRepository(Commande::class)
->findOneById($id);
$reponse = '';
if($boutique->getApiKeyFNE() != ''){
$reponse = $this->genererFactureFNE($slug, $id, $commande->getNatureFacture());
//$reponse = json_decode($reponse);
if(isset($reponse['invoice']['id'])){
$commande->setIdFactureFNE($reponse['invoice']['id']);
}
if(isset($reponse['token'])){
$commande->seTtokenFNE($reponse['token']);
}
if(isset($reponse['balance_sticker'])){
$boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
}
if(isset($reponse['balance_sticker'])){
$boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
}
if(isset($reponse['balance_funds'])){
$boutique->setSoldeTimbreFNE($reponse['balance_funds']);
}
$em->flush();
}
return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
return $this->render('admin/admin_generer_facture_fne.html.twig', [
'boutique' => $boutique,
'content' => $content,
'userBoutique' => $userBoutique
]);
}
public function genererFactureFNE($slug, $idCommande, $invoiceType = 'sale')
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$commande = $em->getRepository(Commande::class)
->findOneById($idCommande);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user,
'boutique' => $boutique
)
);
$url = $boutique->getUrlFNEDeBase().'/external/invoices/sign';
$produitCommandes = $em->getRepository(ProduitCommande::class)
->findByCommande($commande);
$globalCustomTaxes = array();
$items = array();
foreach($produitCommandes as $produitCommande){
$tvas = array();
$customTaxes = array();
if($invoiceType == 'sale'){
if($produitCommande->getProduit()->getTVA() != null){
array_push($tvas, $produitCommande->getProduit()->getTVA()->getLibelleInterne());
$nested = array(
'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
'amount' =>$produitCommande->getProduit()->getTVA()->getValeur()
);
$nested = json_encode($nested);
array_push($customTaxes, $nested);
}
}else{
array_push($tvas, 'TVAD');
$nested = array(
'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
'amount' =>0
);
$nested = json_encode($nested);
array_push($customTaxes, $nested);
}
$item = array(
//'taxes' => $tvas,
//'customTaxes' => $customTaxes,
'reference' => $produitCommande->getProduit()->getReference(),
'description' => $produitCommande->getProduit()->getNom(),
'quantity' => $produitCommande->getQuantite(),
'amount' => $produitCommande->getPrix(),
'discount' => $produitCommande->getRemisePourcentage(),
'measurementUnit' => $produitCommande->getProduit()->getUniteDeMesure()
);
if($invoiceType == 'sale'){
$item['taxes'] = $tvas;
}
array_push($items, $item);
}
$clientNcc = '';
if($invoiceType == 'sale'){
if($commande->getTiers() != null){
$clientNcc = $commande->getTiers()->getCodeTVA();
}
}
$content = array(
'invoiceType' => $invoiceType ,
'paymentMethod'=> $commande->getMoyenDePaiement(),
'template' => $commande->getTiers()->getTypeClient(),
'isRne' => false,
'clientNcc' => $clientNcc,
'clientCompanyName' => $commande->getTiers()->getNom(),
'clientPhone' => $commande->getTiers()->getTelephone(),
'clientEmail' => $commande->getTiers()->getEmail(),
'clientSellerName' => $user->getNomComplet(),
'pointOfSale' => $userBoutique->getNomPointDeVenteFNE(),
'establishment' => $userBoutique->getNomEtablissementFNE(),
'commercialMessage' => $commande->getTitreDocument(),
'footer' => 'Arrêtée la presente facture à la somme de '.$commande->getMontantEnLettre().' '.$boutique->getSettings()->getDevise(),
//'foreignCurrency' => '',
//'foreignCurrencyRate' => 0,
'items' => $items,
'discount' => $commande->getRemise()
);
if($invoiceType == 'sale'){
$content['customTaxes'] = $globalCustomTaxes;
}
$content = json_encode($content);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$boutique->getApiKeyFNE()]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$serverOutput = curl_exec($ch);
curl_close($ch);
$response = new JsonResponse;
//$response->setContent(json_encode($serverOutput));
//return $response;
$serverOutput = json_decode($serverOutput, true);
if(isset($serverOutput['invoice'])){
$commande->setIdFactureFNE($serverOutput['invoice']['id']);
$commande->seTtokenFNE($serverOutput['token']);
//$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
if(isset($serverOutput['balance_funds'])){
$boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
}
if(isset($serverOutput['balance_sticker'])){
$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
}
//Mettre aussi les produitCommande Ajour pour d'eventuel facture d'avoir
$itemsRetournes = $serverOutput['invoice']['items'];
foreach($itemsRetournes as $itemsRetourne){
$pro = $em->getRepository(Produit::class)
->findOneBy(
array(
'boutique' => $boutique,
'nom' => $itemsRetourne['description'],
'reference' => $itemsRetourne['reference']
)
);
if($pro != null){
$proCom = $em->getRepository(ProduitCommande::class)
->findOneBy(
array(
'commande' => $commande,
'produit' => $pro
)
);
$proCom->setIdProduitPourFactureDAvoirFNE($itemsRetourne['id']);
$em->persist($proCom);
}
}
$em->flush();
}
return $serverOutput;
}
/**
* @Route("/{slug}/url-generer-facture-d-avoir-fne/{id}", name="admin_url_generer_facture_d_avoir_fne")
*/
public function urlGenererFactureDAvoirFNEAction(Request $request, ChiffreEnLettre $chiffreEnLettre, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$commande = $em->getRepository(Commande::class)
->findOneById($id);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user,
'boutique' => $boutique
)
);
$produitCommandes = $em->getRepository(ProduitCommande::class)
->findByCommande($commande);
$reponse = '';
if($boutique->getApiKeyFNE() != ''){
if($request->getMethod() == 'POST'){
$chiffreEnLettre = new ChiffreEnLettre;
$reponse = $this->genererFactureDAvoirFNE($chiffreEnLettre, $boutique->getSlug(), $commande->getId());
}
}
return $this->render('admin/url_generer_facture_d_avoir_fne.html.twig', [
'boutique' => $boutique,
'reponse' => $reponse,
'userBoutique' => $userBoutique,
'produitCommandes' => $produitCommandes
]);
}
public function genererFactureDAvoirFNE(ChiffreEnLettre $chiffreEnLettre, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$commande = $em->getRepository(Commande::class)
->findOneById($id);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user,
'boutique' => $boutique
)
);
$url = $boutique->getUrlFNEDeBase().'/external/invoices/'.$commande->getIdFactureFNE().'/refund';
$produitCommandes = $em->getRepository(ProduitCommande::class)
->findByCommande($commande);
$items = array();
$avoir = new Commande;
$avoir->setBoutique($boutique);
$avoir->setTypeFacture('bill_credit');
$avoir->setNumero($this->getNumero('bill_credit', $boutique));
$avoir->setTiers($commande->getTiers());
$avoir->setIdFactureDeBase($commande->getId());
$em->persist($avoir);
$em->flush();
$avoirProduits = array();
foreach($produitCommandes as $produitCommande){
$idProduitPourFactureDAvoirFNE = $_POST['idProduit'.$produitCommande->getProduit()->getId()];
$quantiteRetournee = (float)$_POST['quantite'.$produitCommande->getProduit()->getId()];
if($quantiteRetournee > 0 && $quantiteRetournee <= $produitCommande->getQuantite()){
$item = array(
'id' => $idProduitPourFactureDAvoirFNE,
'quantity' => $quantiteRetournee,
);
array_push($items, $item);
$avoirProduit = new ProduitCommande;
$avoirProduit->setCommande($avoir);
$avoirProduit->setProduit($produitCommande->getProduit());
$avoirProduit->setQuantite($quantiteRetournee);
$avoirProduit->setPrix($produitCommande->getPrix());
$totalHt = $quantiteRetournee * $produitCommande->getPrix();
$totalTTC = $totalHt + $totalHt * $produitCommande->getTva()/100;
$avoirProduit->setTotalHT($totalHt);
$avoirProduit->setTva($produitCommande->getTva());
$avoirProduit->setTotalTTC($totalTTC);
$em->persist($avoirProduit);
array_push($avoirProduits, $avoirProduit);
$totalTVA = $produitCommande->getPrix() * $produitCommande->getTva()/100;
$avoir->setTotalHT($avoir->getTotalHT()+ $totalHt);
$avoir->setTotalHTApresRemise($avoir->getTotalHTApresRemise() + $totalHt);
$avoir->setTotalTTC($avoir->getTotalTTC()+ $totalTTC);
$avoir->setTotalTVA($avoir->getTotalTVA()+ $totalTVA);
}
}
$avoir->setmontantEnLettre($chiffreEnLettre->Conversion($avoir->getTotalTTC()));
$em->flush();
$pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
$pdfContent = $this->renderView('pdf/facture_avoir.html.twig', [
'boutique' => $boutique,
'facture' => $avoir,
'produits' => $avoirProduits,
'commandeDeBasse' => $commande
]);
$pdf->writeHTML($pdfContent);
$name = $avoir->getTypeFacture().$avoir->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
$lienPhysique = $avoir->getUploadRootDir().$name;
$avoir->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
$pdf->output($lienPhysique, 'F');
// Fin facture PDF
$em->flush();
$content = array(
'id' => $commande->getIdFactureFNE(),
'items' => $items
);
$content = json_encode($content);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$boutique->getApiKeyFNE()]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$serverOutput = curl_exec($ch);
curl_close($ch);
$response = new JsonResponse;
//$response->setContent(json_encode($serverOutput));
//return $response;
$serverOutput = json_decode($serverOutput, true);
//$commande->setIdFactureFNE($serverOutput['invoice']['id']);
$avoir->seTtokenFNE($serverOutput['token']);
//$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
if(isset($serverOutput['balance_funds'])){
$boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
}
if(isset($serverOutput['balance_sticker'])){
$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
}
$em->flush();
return $serverOutput;
}
//Vente
/**
* @Route("/{slug}/change-sale-state/{type}/{id}/{state}", name="admin.change_sale_state")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function changeSaleStateAction(Request $request, $slug, $type, $id, $state)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
));
if($commande->getNumero() == ''){
$commande->setNumero($this->getNumero($type, $boutique));
}
$commande->setEtat($state);
$em->flush();
//Produit commande du devis
$produitCommandesDevis = $em->getRepository(ProduitCommande::class)
->findByCommande($commande);
//
$produitCommandes = array();
switch($type){
case 'proposal':
$facture = new Commande;
$facture->setTypeFacture('invoice');
$facture->setNatureFacture('sale');
$facture->setEtat(Commande::ETAT_FACTURE_FINALISE);
$facture->setLaDate(new \DateTime());
$facture->setTotalHT($commande->getTotalHT());
$facture->setTotalHTApresRemise($commande->getTotalHTApresRemise());
$facture->setTotalTVA($commande->getTotalTVA());
$facture->setTotalTTC($commande->getTotalTTC());
$facture->setResteAPayer($commande->getTotalTTC());
$facture->setRemise($commande->getRemise());
$facture->setRemisePourcentage($commande->getRemisePourcentage());
$facture->setMontantEnLettre($commande->getMontantEnLettre());
$facture->setBoutique($commande->getBoutique());
$facture->setTiers($commande->getTiers());
$facture->setNumero($this->getNumero('invoice', $boutique));
$em->persist($facture);
$em->flush();
$this->genererEcritureComptableDeVente($boutique, $facture);
if($boutique->getApiKeyFNE() != ''){
if($boutique->getSettings()->isGenererAutomatiquementFNE()){
$responseFNE = $this->genererFactureFNE($boutique->getSlug(), $facture->getId(), $facture->getNatureFacture());
}
}
foreach($produitCommandesDevis as $produitCommandeDevis){
$prodCom = new ProduitCommande;
$prodCom->setProduit($produitCommandeDevis->getProduit());
$prodCom->setCommande($facture);
$prodCom->setQuantite($produitCommandeDevis->getQuantite());
$prodCom->setPrix($produitCommandeDevis->getPrix());
$prodCom->setRemise($produitCommandeDevis->getRemise());
$prodCom->setTotalHT($produitCommandeDevis->getTotalHT());
$prodCom->setTotalTVA($produitCommandeDevis->getTotalTVA());
$prodCom->setTotalTTC($produitCommandeDevis->getTotalTTC());
$prodCom->setTva($produitCommandeDevis->getTva());
if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
$produitCommandeDevis->getProduit()->setStockDisponible($produitCommandeDevis->getProduit()->getStockDisponible() - $produitCommandeDevis->getQuantite());
}
if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
if($type == 'invoice'){
$produitVendu = $em->getRepository(Produit::class)
->findOneById($idDuProduit);
$produitVendu->setStockDisponible($produitVendu->getStockDisponible() - $produitCommandeDevis->getQuantite());
}
}
$em->persist($prodCom);
array_push($produitCommandes, $prodCom);
}
$pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
$content = $this->renderView('pdf/facture.html.twig', [
'boutique' => $boutique,
'facture' => $facture,
'produits' => $produitCommandes
]);
$pdf->writeHTML($content);
$lienPhysique = $facture->getUploadRootDir().$facture->getTypeFacture().$facture->getId().'.pdf';
$facture->setLienPDF($this->getDomain().'/pdf478njkp01/'.$facture->getTypeFacture().$facture->getId().'.pdf');
$pdf->output($lienPhysique, 'F');
$commande->setEtat(Commande::ETAT_DEVIS_FINALISE);
$em->flush();
return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
break;
case 'invoice':
$pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
$content = $this->renderView('pdf/facture.html.twig', [
'boutique' => $boutique,
'facture' => $commande,
'produits' => $produitCommandes
]);
$pdf->writeHTML($content);
$lienPhysique = $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
$commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
$commande->setEtat(Commande::ETAT_FACTURE_FINALISE);
$pdf->output($lienPhysique, 'F');
$em->flush();
return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
break;
}
return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/check-customer-vat-status", name="admin.check_customer_vat_status")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function checkCustomerVATStatusAction(Request $request, $slug)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$response = new JsonResponse;
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Content-Type', 'application/json');
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$data = array();
if($request->getMethod() == 'POST'){
$id = $_POST['id'];
$customer = $em->getRepository(Tiers::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
));
$data = array(
"assujettiALaTVA" => $customer->getAssujettiALaTVA()
);
}
$response->setContent(json_encode($data));
return $response;
}
//Vente
/**
* @Route("/{slug}/edit-sale/{type}/{id}", name="admin.edit_sale")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editSaleAction(Request $request, ChiffreEnLettre $chiffreEnLettre, $slug, $type, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$produits = $em->getRepository(Produit::class)
->findByBoutique($boutique->getId());
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
));
$ancienProduitCommandes = $em->getRepository(ProduitCommande::class)
->findBy(
array(
'commande' => $commande->getId()
));
$modeleReglements = $em->getRepository(ModeleReglement::class)
->findByBoutique($boutique);
$tiers = $em->getRepository(Tiers::class)
->findByBoutique($boutique);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$vehicules = array(1, 22, 23, 28);
$ok_soumission = '';
$error = '';
$editMode = 'edit';
if($request->getMethod() == 'POST'){
$typeFacture = $_POST['typeFacture'];
$observation = $_POST['observation'];
$modeleReglement = $_POST['modeleReglement'];
$moyenDePaiement = $_POST['moyenDePaiement'];
$client = $_POST['client'];
$dateCommande = $_POST['dateCommande'];
$montantHT = (float)$_POST['montantHT'];
$remise = (float)$_POST['remise'];
$remisePourcentage = (float)$_POST['remisePourcentage'];
$totalHTApresRemise = (float)$_POST['totalHTApresRemise'];
$montantTVA = (float)$_POST['montantTVA'];
$montantTTC = (float)$_POST['montantTTC'];
$matriculeVehicule = $_POST['matriculeVehicule'];
$marqueVehicule = $_POST['marqueVehicule'];
$kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
$listeProduits = json_decode($_POST['listeProduits']);
$client = $em->getRepository(Tiers::class)
->findOneById($client);
if(null !== $client){
$commande->setTiers($client);
}
$laDate = new \DateTime($dateCommande);
$commande->setLaDate($laDate);
$commande->setObservation($observation);
$commande->setModifiePar($user);
$commande->setMoyenDePaiement($moyenDePaiement);
$commande->setMatriculeVehicule($matriculeVehicule);
$commande->setMarqueVehicule($marqueVehicule);
$commande->setKilometrageVehicule($kilometrageVehicule);
$commande->setTotalHT($montantHT);
$commande->setRemise($remise);
$commande->setRemisePourcentage(round($remisePourcentage, 2));
$commande->setTotalHTApresRemise($totalHTApresRemise);
$commande->setTotalTVA($montantTVA);
$commande->setTotalTTC($montantTTC);
$commande->setResteAPayer($montantTTC);
$montantlettre = strtoupper($chiffreEnLettre->Conversion($montantTTC));
$commande->setMontantEnLettre($montantlettre);
$commande->setTypeFacture($type);
if($commande->getNumero() == ''){
$commande->setNumero($this->getNumero($type, $boutique));
}
$em->flush();
//Supprimer les ancien ProduitCommande lié
foreach($ancienProduitCommandes as $ancienProduitCommande){
$em->remove($ancienProduitCommande);
}
$em->flush();
$produitCommandes = array();
foreach($listeProduits as $listeProduit){
$listeProduit = (array)$listeProduit;
$idDuProduit = $listeProduit['idProduit'];
if($idDuProduit == ''){
//Produit inexistant, il faut le créer
$leProduit = new Produit;
$leProduit->setNom($listeProduit['nomProduit']);
$em->persist($leProduit);
//TVA
if($listeProduit['tva'] > 0){
$tva = $em->getRepository(TVA::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'valeur' => $listeProduit['tva']
)
);
if($tva == null){
$tva = new TVA;
$tva->setValeur($listeProduit['tva']);
$em->persist($tva);
$em->flush();
}
$leProduit->setTva($tva);
}
//Prix
$produitP = new PrixProduit;
$produitP->setValeur($listeProduit['prixUnitaire']);
$produitP->setBoutique($boutique);
$leProduit->addPrix($produitP);
$leProduit->setPrixActuel($produitP);
$leProduit->setBoutique($boutique);
$em->persist($produitP);
$em->persist($leProduit);
$em->flush();
} else{
$leProduit = $em->getRepository(Produit::class)
->findOneById($idDuProduit);
}
$produitCommande = new ProduitCommande;
$produitCommande->setProduit($leProduit);
$produitCommande->setCommande($commande);
$produitCommande->setQuantite((float)$listeProduit['quantite']);
$produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
$produitCommande->setRemise((float)$listeProduit['reduction']);
$produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
$produitCommande->setTotalHT((float)$listeProduit['totalHT']);
$produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
$produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
$produitCommande->setTva((float)$listeProduit['tva']);
$produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
$em->persist($produitCommande);
array_push($produitCommandes, $produitCommande);
}
$em->flush();
$pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
$content = '';
switch($type){
case 'invoice':
$content = $this->renderView('pdf/facture.html.twig', [
'boutique' => $boutique,
'facture' => $commande,
'produits' => $produitCommandes
]);
break;
case 'proposal':
$content = $this->renderView('pdf/devis.html.twig', [
'boutique' => $boutique,
'facture' => $commande,
'produits' => $produitCommandes
]);
break;
}
$pdf->writeHTML($content);
$lienPhysique = $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
$commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
$pdf->output($lienPhysique, 'F');
$em->flush();
return $this->render('admin/facture.html.twig', [
'boutique' => $boutique,
'commande' => $commande,
'typeFacture' => $typeFacture,
'client' => $client,
'produitCommandes' => $produitCommandes,
'listeProduit' => $listeProduit,
'montantHT' => $montantHT,
'montantTVA' => $montantTVA,
'montantTTC' => $montantTTC,
'userBoutique' => $userBoutique
]);
}
return $this->render('admin/edit_sale.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'modeleReglements' => $modeleReglements,
'tiers' => $tiers,
'editMode' => $editMode,
'commande' => $commande,
'ancienProduitCommandes' => $ancienProduitCommandes,
'type' => $type,
'userBoutique' => $userBoutique,
'vehicules' => $vehicules
]);
}
/**
* @Route("/{slug}/bon-de-livraison/{id}", name="admin.bon_de_livraison")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function bonDeLivraisonAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
));
$listeProduits = $em->getRepository(ProduitCommande::class)
->findBy(
array(
'commande' => $commande->getId()
));
$produitCommandes = array();
foreach($listeProduits as $listeProduit){
array_push($produitCommandes, $listeProduit);
}
$pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
$content = $this->renderView('pdf/bon_de_livraison.html.twig', [
'boutique' => $boutique,
'facture' => $commande,
'produits' => $produitCommandes
]);
$pdf->writeHTML($content);
$lienPhysique = $commande->getUploadRootDir().'_bon_de_livraison_'.$commande->getId().'.pdf';
$pdf->output($lienPhysique, 'I');
return $this->renderView('pdf/bon_de_livraison.html.twig', [
'boutique' => $boutique,
'facture' => $commande,
'produits' => $produitCommandes
]);
}
/**
* @Route("/{slug}/duplicate-sale/{id}", name="admin.duplicate_sale")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function duplicateSaleAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
));
$listeProduits = $em->getRepository(ProduitCommande::class)
->findBy(
array(
'commande' => $commande->getId()
));
$nouvelleCommande = new Commande;
$nouvelleCommande->setBoutique($boutique);
$nouvelleCommande->setTiers($commande->getTiers());
$nouvelleCommande->setLaDate(new \DateTime());
$nouvelleCommande->setTotalHT($commande->getTotalHT());
$nouvelleCommande->setTotalHTApresRemise($commande->getTotalHTApresRemise());
$nouvelleCommande->setRemise($commande->getRemise());
$nouvelleCommande->setRemisePourcentage($commande->getRemisePourcentage());
$nouvelleCommande->setTotalTVA($commande->getTotalTVA());
$nouvelleCommande->setTotalAutreTaxe($commande->getTotalAutreTaxe());
$nouvelleCommande->setTotalTTC($commande->getTotalTTC());
$nouvelleCommande->setResteAPayer($commande->getTotalTTC());
$nouvelleCommande->setTitreDocument($commande->getTitreDocument());
$nouvelleCommande->setObservation($commande->getObservation());
$nouvelleCommande->setValableJusquAu($commande->getValableJusquAu());
$nouvelleCommande->setMontantEnLettre($commande->getMontantEnLettre());
$nouvelleCommande->setTypeFacture($commande->getTypeFacture());
$nouvelleCommande->setNatureFacture($commande->getNatureFacture());
$nouvelleCommande->setNumero($this->getNumero($nouvelleCommande->getTypeFacture(), $boutique));
$em->persist($nouvelleCommande);
$em->flush();
$produitCommandes = array();
foreach($listeProduits as $listeProduit){
$produitCommande = new ProduitCommande;
$produitCommande->setProduit($listeProduit->getProduit());
$produitCommande->setCommande($nouvelleCommande);
$produitCommande->setQuantite($listeProduit->getQuantite());
$produitCommande->setPrix($listeProduit->getPrix());
$produitCommande->setRemise($listeProduit->getRemise());
$produitCommande->setRemisePourcentage($listeProduit->getRemisePourcentage());
$produitCommande->setTotalHT($listeProduit->getTotalHT());
$produitCommande->setTotalHTApresRemise($listeProduit->getTotalHTApresRemise());
$produitCommande->setTotalTVA($listeProduit->getTotalTVA());
$produitCommande->setAutreTaxe($listeProduit->getAutreTaxe());
$produitCommande->setTotalTTC($listeProduit->getTotalTTC());
$em->persist($produitCommande);
array_push($produitCommandes, $produitCommande);
}
$em->flush();
if($nouvelleCommande->getTypeFacture() == 'invoice'){
if($boutique->getApiKeyFNE() != ''){
if($boutique->getSettings()->isGenererAutomatiquementFNE()){
$responseFNE = $this->genererFactureFNE($boutique->getSlug(), $nouvelleCommande->getId(), $nouvelleCommande->getNatureFacture());
}
}
$this->genererEcritureComptableDeVente($boutique, $nouvelleCommande);
//Ecriture comptable
}
$pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
$content = '';
switch($commande->getTypeFacture()){
case 'invoice':
$content = $this->renderView('pdf/facture.html.twig', [
'boutique' => $boutique,
'facture' => $nouvelleCommande,
'produits' => $produitCommandes
]);
break;
case 'proposal':
$content = $this->renderView('pdf/devis.html.twig', [
'boutique' => $boutique,
'facture' => $nouvelleCommande,
'produits' => $produitCommandes
]);
break;
}
$pdf->writeHTML($content);
$lienPhysique = $nouvelleCommande->getUploadRootDir().$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf';
$nouvelleCommande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf');
$pdf->output($lienPhysique, 'F');
$em->flush();
switch($commande->getTypeFacture()){
case 'invoice':
return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
break;
case 'proposal':
return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
break;
case 'bill_credit':
return $this->redirectToRoute('admin.bill_credits', array('slug' => $boutique->getSlug()));
break;
case 'deposit':
return $this->redirectToRoute('admin.deposits', array('slug' => $boutique->getSlug()));
break;
}
}
/**
* @Route("/{slug}/delete-sale/{type}/{id}", name="admin.delete_sale")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteSaleAction(Request $request, $slug, $type, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
));
/*
$produitCommandes = $em->getRepository(ProduitCommande::class)
->findByCommande($commande->getId());
foreach($produitCommandes as $produitCommande){
$em->remove($produitCommande);
}
$em->flush();
$em->remove($commande);
*/
$commande->setEstSupprime(true);
$commande->setSupprimePar($user);
$em->flush();
switch($type){
case 'invoice':
return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
break;
case 'bill_credit':
return $this->redirectToRoute('admin.bill_credits', array('slug' => $boutique->getSlug()));
break;
case 'proposal':
return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
break;
}
}
/**
* @Route("/{slug}/product/list", name="admin.list_product")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listProductAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$produits = $em->getRepository(Produit::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'estSupprime' => false
),
array(
'nom' => 'ASC'
)
);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/liste_produit.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/new-product", name="admin.new_product")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newProductAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$produit = new Produit;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$em->persist($produit);
$em->flush();
//Prix
$prix = (float)$_POST['prix'];
$produitP = new PrixProduit;
$produitP->setValeur($prix);
$produitP->setBoutique($boutique);
$produit->addPrix($produitP);
$produit->setPrixActuel($produitP);
$produit->setBoutique($boutique);
$em->persist($produitP);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
unset($produit);
unset($form);
$produit = new Produit;
$form = $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/nouveau_produit.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/product/edit/{id}", name="admin.edit_product")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function edtProductAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$produit = $em->getRepository(Produit::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(ProduitEditType::class, $produit, array('boutique' => $boutique->getId()));
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
//Prix
$prix = (float)$_POST['prix'];
if($prix > 0 && $produit->getPrixActuel()->getValeur() != $prix){
$produit->getPrixActuel()->setValeur($prix);
$produitP = new PrixProduit;
$produitP->setValeur($prix);
$produit->addPrix($produitP);
$produit->setPrixActuel($produitP);
$produit->setBoutique($boutique);
$em->persist($produitP);
}
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/edit_product.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'produit' => $produit,
'userBoutique' => $userBoutique
]);
}
//Produit/Service
/**
* @Route("/{slug}/delete-product/{id}", name="admin.delete_product")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteProductAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$product = $em->getRepository(Produit::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $product){
$product->setEstSupprime(true);
$em->flush();
}
return $this->redirectToRoute('admin.list_product', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/product-category/list", name="admin.category_product")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listeCategoryProductAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$categories = $em->getRepository(CategorieProduit::class)
->findByBoutique($boutique);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/category_product.html.twig', [
'categories' => $categories,
'boutique' => $boutique,
'userBoutique' => $userBoutique
]);
}
//Produit/Service
/**
* @Route("/{slug}/new-product-category", name="admin.new_product_category")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newProductCategoryAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$categorie = new CategorieProduit;
$form = $this->createForm(CategorieProduitType::class, $categorie);
$ok_soumission = '';
$error = '';
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$categorie->setBoutique($boutique);
$em->persist($categorie);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
unset($categorie);
unset($form);
$categorie = new CategorieProduit;
$form = $this->createForm(CategorieProduitType::class, $categorie);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/new_product_category.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
//Produit/Service
/**
* @Route("/{slug}/edit-product-category/{id}", name="admin.edit_product_category")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editProductCategoryAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$categorie = $em->getRepository(CategorieProduit::class)
->findOneById($id);
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(CategorieProduitEditType::class, $categorie);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/edit_product_category.html.twig', [
'boutique' => $boutique,
'categorie' => $categorie,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
//Produit/Service
/**
* @Route("/{slug}/delete-product-category/{id}", name="admin.delete_product_category")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteProductCategoryAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$categorie = $em->getRepository(CategorieProduit::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $categorie){
$em->remove($categorie);
$em->flush();
}
return $this->redirectToRoute('admin.category_product', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/tax/list", name="admin.list_tax")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listTaxAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$taxes = $em->getRepository(TVA::class)
->findByBoutique($boutique);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/liste_tva.html.twig', [
'boutique' => $boutique,
'taxes' => $taxes,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/new-tax", name="admin.new_tax")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newTaxAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$tva = new TVA;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(TVAType::class, $tva);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$tva->setBoutique($boutique);
$em->persist($tva);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
unset($tva);
unset($form);
$tva = new TVA;
$form = $this->createForm(TVAType::class, $tva);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/nouvelle_tva.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/edit-tax/{tva}", name="admin.edit_tax")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editTaxAction(Request $request, $slug, $tva)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$tva = $em->getRepository(TVA::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $tva
)
);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(TVAEditType::class, $tva);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/edit_tax.html.twig', [
'boutique' => $boutique,
'tva' => $tva,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/delete-tax/{id}", name="admin.delete_tax")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteTaxAction(Request $request, $slug, TVA $tva)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$tva = $em->getRepository(TVA::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $tva
)
);
if(null !== $tva){
$em->remove($tva);
$em->flush();
}
return $this->redirectToRoute('admin.list_tax', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/payment-method/list", name="admin.payment_methods")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function paymentMethodsAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$paymentMethods = $em->getRepository(PaymentMethod::class)
->findByBoutique($boutique);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/payment_methods.html.twig', [
'boutique' => $boutique,
'paymentMethods' => $paymentMethods,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/payment-method/new", name="admin.new_payment_method")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newPaymentMethodAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$paymentMethod = new PaymentMethod;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(PaymentMethodType::class, $paymentMethod);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$paymentMethod->setBoutique($boutique);
$em->persist($paymentMethod);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
$paymentMethod = new PaymentMethod;
$form = $this->createForm(PaymentMethodType::class, $paymentMethod);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/new_payment_method.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/payment-method/edit/{paymentMethod}", name="admin.edit_payment_method")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editPaymentMethodAction(Request $request, $slug, $paymentMethod)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$paymentMethod = $em->getRepository(PaymentMethod::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $paymentMethod
)
);
$form = $this->createForm(PaymentMethodEditType::class, $paymentMethod);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/edit_payment_method.html.twig', [
'boutique' => $boutique,
'paymentMethod' => $paymentMethod,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/payment-method/delete/{id}", name="admin.delete_payment_method")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deletePaymentMethodAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$paymentMethod = $em->getRepository(PaymentMethod::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $paymentMethod){
$em->remove($paymentMethod);
$em->flush();
}
return $this->redirectToRoute('admin.payment_methods', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/expensives/list", name="admin.expensives")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function expensivesAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$expensives = $em->getRepository(Expensive::class)
->depenseParDate($boutique->getId(), $dateDebut, $dateFin);
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
if('POST' == $request->getMethod()){
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$dateDebut = new \DateTime($dateDebut);
$dateFin = new \DateTime($dateFin);
$expensives = $em->getRepository(Expensive::class)
->depenseParDate($boutique->getId(), $dateDebut, $dateFin);
return $this->render('admin/expensives_table_content.html.twig', [
'boutique' => $boutique,
'expensives' => $expensives
]);
}
return $this->render('admin/expensives.html.twig', [
'boutique' => $boutique,
'expensives' => $expensives,
'userBoutique' => $userBoutique,
'intervalleDeDate' => $intervalleDeDate,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'intervalleMois' => $intervalleMois,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear
]);
}
/**
* @Route("/{slug}/expensives/new", name="admin.new_expensive")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newExpensiveAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$expensive = new Expensive;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(ExpensiveType::class, $expensive, array('boutique' => $boutique->getId()));
$ok_soumission = '';
$error = '';
$laDate = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$data = $form->getData();
$expensive->setBoutique($boutique);
$expensive->setCreePar($user);
$em->persist($expensive);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
$moyenDePaiement = $request->request->get('moyenDePaiement');
$expensive->setMoyenDePaiement($moyenDePaiement);
$libelle = 'Règlement fournisseur';
if($expensive->getTiers() != null){
$libelle = $libelle. ' '. $expensive->getTiers()->getNom();
}
$groupeEcritureComptable = new GroupeEcritureComptable;
$groupeEcritureComptable->setBoutique($boutique);
$groupeEcritureComptable->setLibelleEcriture($libelle);
$groupeEcritureComptable->setDebit($data->getMontant());
$groupeEcritureComptable->setCredit($data->getMontant());
$groupeEcritureComptable->setLaDate($data->getLaDate());
$groupeEcritureComptable->setNumeroPiece($data->getPiece());
$groupeEcritureComptable->setAnnee($data->getLaDate()->format('Y'));
$groupeEcritureComptable->setMois($data->getLaDate()->format('m'));
$em->persist($groupeEcritureComptable);
$em->flush();
//Ecriture comptable
if($moyenDePaiement == 'cash' || $moyenDePaiement == 'mobile-money'){
//Debit
$leJournal = $em->getRepository(JournalComptabilite::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'reference' => 'CA',
'nom' => 'Caisse'
)
);
$groupeEcritureComptable->setLeJournal($leJournal);
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('5711'); //Caisse
$compte->setSolde($compte->getSolde() - $data->getMontant());
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture($libelle);
$ecritureComptable->setCredit($data->getMontant());
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($data->getLaDate());
$ecritureComptable->setNumeroPiece($data->getPiece());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
//Debit
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('658'); //Charge divers
$compte->setSolde($compte->getSolde() + $data->getMontant());
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture($libelle);
$ecritureComptable->setDebit($data->getMontant());
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($data->getLaDate());
$ecritureComptable->setNumeroPiece($data->getPiece());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}else{
$leJournal = $em->getRepository(JournalComptabilite::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'reference' => 'BQ',
'nom' => 'Banque'
)
);
$groupeEcritureComptable->setLeJournal($leJournal);
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('521'); //Banque
$compte->setSolde($compte->getSolde() - $data->getMontant());
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture($libelle);
$ecritureComptable->setCredit($data->getMontant());
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($data->getLaDate());
$ecritureComptable->setNumeroPiece($data->getPiece());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
//Debit
$ecritureComptable = new EcritureComptable;
$ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
$ecritureComptable->setBoutique($boutique);
$ecritureComptable->setLeJournal($leJournal);
$compte = $em->getRepository(Compte::class)
->findOneByNumero('658'); //Charge divers
$compte->setSolde($compte->getSolde() + $data->getMontant());
$ecritureComptable->setCompte($compte);
$ecritureComptable->setLibelleEcriture($libelle);
$ecritureComptable->setDebit($data->getMontant());
$ecritureComptable->setSolde($compte->getSolde());
$ecritureComptable->setLaDate($data->getLaDate());
$ecritureComptable->setNumeroPiece($data->getPiece());
$ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
$ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
$em->persist($ecritureComptable);
}
$em->flush();
$expensive = new Expensive;
$form = $this->createForm(ExpensiveType::class, $expensive);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/new_expensive.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/expensive/edit/{id}", name="admin.edit_expensive")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editExpensivesAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$expensive = $em->getRepository(Expensive::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
$form = $this->createForm(ExpensiveEditType::class, $expensive, array('boutique' => $boutique->getId()));
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$expensive->setModifiePar($user);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/edit_expensive.html.twig', [
'boutique' => $boutique,
'expensive' => $expensive,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/expensive/delete/{id}", name="admin.delete_expensive")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteExpensiveAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$expensive = $em->getRepository(Expensive::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $expensive){
$expensive->setEstSupprime(true);
$expensive->setSupprimePar($user);
//$em->remove($expensive);
$em->flush();
}
return $this->redirectToRoute('admin.expensives', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/categorie-depense/list", name="admin_categorie_depenses")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function categorieDepenseAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$categorieDepenses = $em->getRepository(CategorieDepense::class)
->findBy(
array(
'boutique' => $boutique->getId()
)
);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/categorie_depenses.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'categorieDepenses' => $categorieDepenses
]);
}
/**
* @Route("/{slug}/categorie-depense/nouveau", name="admin_nouvelle_categorie_dedepense")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouvelleCategorieDepenseAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$categorieDepense = new CategorieDepense;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(CategorieDepenseType::class, $categorieDepense);
$ok_soumission = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$categorieDepense->setBoutique($boutique);
$em->persist($categorieDepense);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
$categorieDepense = new CategorieDepense;
$form = $this->createForm(CategorieDepenseType::class, $categorieDepense);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/nouvelle_categorie_depense.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/categorie-depense/modifier/{id}", name="admin_modifier_categorie_depense")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function modifierCategorieDepenseAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$categorieDepense = $em->getRepository(CategorieDepense::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
$form = $this->createForm(CategorieDepenseEditType::class, $categorieDepense);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/modifier_categorie_depense.html.twig', [
'boutique' => $boutique,
'categorieDepense' => $categorieDepense,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/categorie-depense/supprimer/{id}", name="admin_supprimer_categorie_depense")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function supprimerCategorieDepenseAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$categorieDepense = $em->getRepository(CategorieDepense::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $categorieDepense){
$em->remove($categorieDepense);
$em->flush();
}
return $this->redirectToRoute('admin_categorie_depenses', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/third/list", name="admin.liste_tiers")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listeTiersAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$tiers = $em->getRepository(Tiers::class)
->findBy(
array(
'boutique' => $boutique->getId(),
'estSupprime' => false
),
array(
'nom' => 'ASC'
)
);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/liste_tiers.html.twig', [
'boutique' => $boutique,
'tiers' => $tiers,
'userBoutique' => $userBoutique
]);
}
//Service
/**
* @Route("/{slug}/new-third", name="admin.new_third")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newThirdAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$tiers = new Tiers;
$form = $this->createForm(TiersType::class, $tiers);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$tiers->setBoutique($boutique);
$tiers->setCreePar($user);
$em->persist($tiers);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
$tiers = new Tiers;
$form = $this->createForm(TiersType::class, $tiers);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/nouveau_tiers.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/edit-third/{third}", name="admin.edit_third")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editThirdAction(Request $request, Boutique $boutique, $third)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$third = $em->getRepository(Tiers::class)
->findOneById($third);
$form = $this->createForm(TiersEditType::class, $third);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$third->setModifiePar($user);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/edit_third.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'third' => $third,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/delete-third/{third}", name="admin.delete_third")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteThirdAction(Request $request, Boutique $boutique, $third)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$third = $em->getRepository(Tiers::class)
->findOneById($third);
if(null != $third){
$third->setEstSupprime(true);
$third->setSupprimePar($user);
$em->flush();
}
return $this->redirectToRoute('admin.liste_tiers', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/statistics", name="admin.statistics")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function statisticsAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$tiers = $em->getRepository(Tiers::class)
->findByBoutique($boutique);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/statistics.html.twig', [
'boutique' => $boutique,
'tiers' => $tiers,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/promotions", name="admin.promotions")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function promotionsAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$tiers = $em->getRepository(Tiers::class)
->findByBoutique($boutique);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/liste_tiers.html.twig', [
'boutique' => $boutique,
'tiers' => $tiers,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/new-payment-patern", name="admin.new_payment_patern")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newPayementPaternMethodAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$modeleReglement = new ModeleReglement;
$form = $this->createForm(ModeleReglementType::class, $modeleReglement);
$ok_soumission = '';
$error = '';
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$modeleReglement->setBoutique($boutique);
$em->persist($modeleReglement);
$em->flush();
$ok_soumission =" Votre message a été pris en compte";
unset($modeleReglement);
unset($form);
$modeleReglement = new ModeleReglement;
$form = $this->createForm(ModeleReglementType::class, $modeleReglement);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/nouveau_modele_reglement.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/payment-patern/list", name="admin.list_payment_patern")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listeModeleReglementAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$modeleReglements = $em->getRepository(ModeleReglement::class)
->findByBoutique($boutique);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/liste_modele_reglement.html.twig', [
'boutique' => $boutique,
'modeleReglements' => $modeleReglements,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/send-document-mail/{id}", name="admin.send_document_mail")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function sendDocumentMailAction(Request $request, \Swift_Mailer $mailer, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
$appName = $this->getParameter('app_name');
if('POST'== $request->getMethod()){
$from = $_POST['from'];
$to = $_POST['to_mail'];
$subject = $_POST['subject'];
$contenu = $_POST['message'];
$sendAttachment = (bool)$_POST['send_attachment'];
$message = (new \Swift_Message($subject))
->setFrom([$from => $appName])
->setTo([$to])
->setBody(
$this->renderView(
'admin/document_email.html.twig',
[
'message' => $contenu
]
),
'text/html'
);
if($sendAttachment){
$message->attach(\Swift_Attachment::fromPath($commande->getLienPDF()));
}
$mailer->send($message);
}
return $this->render('admin/send_document_mail.html.twig', [
'boutique' => $boutique,
'commande' => $commande,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/nombre-commande-en-retard", name="admin.nombre_commande_en_retard")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nombreCommandeEnRetard(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$nombreCommandeEnRetard = $em->getRepository(Commande::class)
-> nombreCommandeEnRetard($boutique->getId());
$nombreCommandeEnRetard = count($nombreCommandeEnRetard);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/nombre_commande_en_retard.html.twig', [
'boutique' => $boutique,
'nombreCommandeEnRetard' => $nombreCommandeEnRetard,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/liste-commande-en-retard", name="admin.liste_commande_en_retard")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listeCommandeEnRetard(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$nombreCommandeEnRetards = $em->getRepository(Commande::class)
-> nombreCommandeEnRetard($boutique->getId());
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/liste_commande_en_retard.html.twig', [
'boutique' => $boutique,
'nombreCommandeEnRetards' => $nombreCommandeEnRetards,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/my-invoices", name="admin.my_invoices")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function myInvoicesAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$toutesLesValiditeServices = $em->getRepository(ValiditeService::class)
->toutesLesValiditeService($boutique->getId());
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/my_invoices.html.twig', [
'toutesLesValiditeServices' => $toutesLesValiditeServices,
'boutique' => $boutique,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/my-tickets/{id}", name="admin.my_tickets")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function myTicketsAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$tickets = $em->getRepository(Ticket::class)
->findBy(
array(
'boutique'=>$boutique->getId(),
'user' => $user->getId()
)
);
return $this->render('admin/my_tickets.html.twig', [
'boutique' => $boutique,
'tickets' => $tickets,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/new-ticket", name="admin.new_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newTicketAction(Request $request, $slug)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$ticket = new Ticket;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(TicketType::class, $ticket);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$ticket->setBoutique($boutique);
$ticket->setUser($user);
$em->persist($ticket);
$em->flush();
return $this->redirectToRoute('admin.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
$ok_soumission =" Votre message a été pris en compte";
$ticket = new Ticket;
$form = $this->createForm(TicketType::class, $ticket);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/new_ticket.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/display-ticket/{id}", name="admin.display_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function displayTicketAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$ticket = $em->getRepository(Ticket::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
$commentaires = $em->getRepository(CommentaireTicket::class)
->findByTicket($ticket->getId());
$commentaireTicket = new CommentaireTicket;
$user = $this->getUser();
$form = $this->createForm(CommentaireTicketType::class, $commentaireTicket);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$commentaireTicket->setTicket($ticket);
$commentaireTicket->setUser($user);
$em->persist($commentaireTicket);
$em->flush();
$commentaires = $em->getRepository(CommentaireTicket::class)
->findByTicket($ticket->getId());
$ok_soumission =" Votre message a été pris en compte";
$commentaireTicket = new CommentaireTicket;
$form = $this->createForm(CommentaireTicketType::class, $commentaireTicket);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('admin/display_ticket.html.twig', [
'boutique' => $boutique,
'ticket' => $ticket,
'form' => $form->createView(),
'commentaires' => $commentaires,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/close-ticket/{id}", name="admin.close_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function closeTicketAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$ticket = $em->getRepository(Ticket::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $ticket){
$ticket->setLesCommentairesSontFermes(true);
$em->flush();
}
return $this->redirectToRoute('admin.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
}
/**
* @Route("/{slug}/delete-ticket/{id}", name="admin.delete_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteTicketAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$ok_soumission = '';
$error = '';
$ticket = $em->getRepository(Ticket::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $ticket){
$commentaireTickets = $em->getRepository(CommentaireTicket::class)
->findByTicket($ticket->getId());
foreach($commentaireTickets as $commentaireTicket)
{
$em->remove($commentaireTicket);
}
$em->remove($ticket);
$em->flush();
}
return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
}
/**
* @Route("/{slug}/delete-commentaire-ticket/{id}", name="admin.delete_commentaire_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteCommentaireTicketAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$commentaireTicket = $em->getRepository(CommentaireTicket::class)
->findOneById($id);
if(null !== $commentaireTicket){
$em->remove($commentaireTicket);
$em->flush();
}
return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
}
/**
* @Route("/{slug}/liste-produit-lors-commande", name="admin.liste_produit_lors_commande")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listeProduitLorsCommandeAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$produits = $em->getRepository(Produit::class)
->findByBoutique($boutique->getId());
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/liste_produit_lors_commande.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/stock-management", name="admin.stock_management")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function stockManagementAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$produits = $em->getRepository(Produit::class)
->findByBoutique($boutique->getId());
$user = $this->getUser();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$stockEntries = $em->getRepository(EntreeDeStock::class)
->entreeParDateEtType($boutique->getId(), $dateDebut, $dateFin);
if('POST' == $request->getMethod()){
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$dateDebut = new \DateTime($dateDebut);
$dateFin = new \DateTime($dateFin);
$stockEntries = $em->getRepository(EntreeDeStock::class)
->entreeParDateEtType($boutique->getId(), $dateDebut, $dateFin);
return $this->render('admin/entries_table_content.html.twig', [
'boutique' => $boutique,
'stockEntries' => $stockEntries
]);
}
return $this->render('admin/stock_management.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'userBoutique' => $userBoutique,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
'stockEntries' => $stockEntries,
]);
}
/**
* @Route("/{slug}/nouvel-inventaire", name="admin_nouvel_inventaire")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function nouvelInventaireAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$produits = $em->getRepository(Produit::class)
->findByBoutique($boutique->getId());
$user = $this->getUser();
$intervalleDeDate = $this->intervalleSemaine(date('Y-m-d'));
$dateDebut = new \DateTime($intervalleDeDate['debut']);
$dateFin = new \DateTime($intervalleDeDate['fin']);
$intervalleMois = $this->intervalleMois(date('Y-m-d'));
$startMonth = $intervalleMois['debut'];
$endMonth = $intervalleMois['fin'];
$startYear = date('Y-01-01');
$endYear = date('Y-12-31');
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$stockEntries = $em->getRepository(EntreeDeStock::class)
->entreeParDateEtType($boutique->getId(), $dateDebut, $dateFin);
$produits = $em->getRepository(Produit::class)
->findBy(
array(
'boutique' => $boutique->getId()
),
array(
'nom' => 'ASC'
)
);
if('POST' == $request->getMethod()){
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$dateDebut = new \DateTime($dateDebut);
$dateFin = new \DateTime($dateFin);
$stockEntries = $em->getRepository(EntreeDeStock::class)
->entreeParDateEtType($boutique->getId(), $dateDebut, $dateFin);
return $this->render('admin/entries_table_content.html.twig', [
'boutique' => $boutique,
'stockEntries' => $stockEntries
]);
}
return $this->render('admin/nouvel_inventaire.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'userBoutique' => $userBoutique,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'startMonth' => $startMonth,
'endMonth' => $endMonth,
'startYear' => $startYear,
'endYear' => $endYear,
'stockEntries' => $stockEntries,
'produits' => $produits
]);
}
/**
* @Route("/{slug}/new-stock-entry", name="admin.new_stock_entry")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newStockEntryAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$produits = $em->getRepository(Produit::class)
->findByBoutique($boutique->getId());
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$editMode= 'new';
if($request->getMethod() == 'POST'){
$dateCommande = $_POST['dateCommande'];
$listeProduits = json_decode($_POST['listeProduits']);
$entreeDeStock = new EntreeDeStock;
$entreeDeStock->setBoutique($boutique);
$laDate = new \DateTime($dateCommande);
$entreeDeStock->setLaDate($laDate);
$em->persist($entreeDeStock);
$em->flush();
$produitCommandes = array();
foreach($listeProduits as $listeProduit){
$listeProduit = (array)$listeProduit;
$idDuProduit = $listeProduit['idProduit'];
$leProduit = $em->getRepository(Produit::class)
->findOneById($idDuProduit);
$leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
$produitEntreeDeStock = new ProduitEntreeDeStock;
$produitEntreeDeStock->setProduit($leProduit);
$produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
$produitEntreeDeStock->setQuantite($listeProduit['quantite']);
$em->persist($produitEntreeDeStock);
}
$em->flush();
}
return $this->render('admin/new_stock_entry.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'userBoutique' => $userBoutique,
'editMode' => $editMode,
]);
}
/**
* @Route("/{slug}/edit-stock-entry/{id}", name="admin.edit_stock_entry")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editStockEntryAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$produits = $em->getRepository(Produit::class)
->findByBoutique($boutique->getId());
$entreeDeStock = $em->getRepository(EntreeDeStock::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
));
$ancienProduitEntreeDeStocks = $em->getRepository(ProduitEntreeDeStock::class)
->findBy(
array(
'entreeDeStock' => $entreeDeStock->getId()
));
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$ok_soumission = '';
$error = '';
$editMode = 'edit';
if($request->getMethod() == 'POST'){
$dateCommande = $_POST['dateCommande'];
$listeProduits = json_decode($_POST['listeProduits']);
$em->flush();
//Supprimer les ancien ProduitCommande lié
foreach($ancienProduitEntreeDeStocks as $ancienProduitEntreeDeStock){
$em->remove($ancienProduitEntreeDeStock);
$leProduit = $em->getRepository(Produit::class)
->findOneById($ancienProduitEntreeDeStock->getProduit()->getId());
$leProduit->setStockDisponible($leProduit->getStockDisponible() - $ancienProduitEntreeDeStock->getQuantite());
}
$em->flush();
$produitEntreeDeStocks = array();
foreach($listeProduits as $listeProduit){
$listeProduit = (array)$listeProduit;
$idDuProduit = $listeProduit['idProduit'];
$leProduit = $em->getRepository(Produit::class)
->findOneById($idDuProduit);
$leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
$produitEntreeDeStock = new ProduitEntreeDeStock;
$produitEntreeDeStock->setProduit($leProduit);
$produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
$produitEntreeDeStock->setQuantite($listeProduit['quantite']);
$em->persist($produitEntreeDeStock);
}
$em->flush();
}
return $this->render('admin/edit_stock_entry.html.twig', [
'boutique' => $boutique,
'produits' => $produits,
'editMode' => $editMode,
'entreeDeStock' => $entreeDeStock,
'ancienProduitEntreeDeStocks' => $ancienProduitEntreeDeStocks,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/delete-stock-entry/{id}", name="admin.delete_stock_entry")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteStockEntryAction(Request $request, $slug, $id)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$entreeDeStock = $em->getRepository(EntreeDeStock::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null != $entreeDeStock){
$produitEntreeDeStocks = $em->getRepository(ProduitEntreeDeStock::class)
->findBy(
array(
'entreeDeStock' => $entreeDeStock->getId()
)
);
foreach($produitEntreeDeStocks as $produitEntreeDeStock){
$em->remove($produitEntreeDeStock);
$produit = $em->getRepository(Produit::class)
->findOneById($produitEntreeDeStock->getProduit()->getId());
$produit->setStockDisponible($produit->getStockDisponible() - $produitEntreeDeStock->getQuantite());
}
$em->flush();
$em->remove($entreeDeStock);
$em->flush();
}
return $this->redirectToRoute('admin.stock_management', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/import-products", name="admin.import_products")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function importProductsAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$error = '';
$success = '';
if('POST' == $request->getMethod()){
if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
{
//var_dump($_FILES['fichier']);
$em->flush();
if ($this->gererFichierMultipleImportation($_FILES['fichier'], $boutique)){
$success = 'success';
} else{
$error = 'error';
}
}
}
return $this->render('admin/import_products.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'error' => $error,
'success' => $success
]);
}
/**
* @Route("/{slug}/import-customers", name="admin.import_customers")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function importCustomersAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$error = '';
$success = '';
if('POST' == $request->getMethod()){
if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
{
//var_dump($_FILES['fichier']);
$em->flush();
if ($this->gererFichierMultipleCustomerImportation($_FILES['fichier'], $boutique)){
$success = 'success';
} else{
$error = 'error';
}
}
}
return $this->render('admin/import_customers.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'error' => $error,
'success' => $success
]);
}
/**
* @Route("/{slug}/users", name="admin.users")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function usersAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$userBoutiques = $em->getRepository(UserBoutique::class)
->findByBoutique($boutique->getId());
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('admin/users.html.twig', [
'boutique' => $boutique,
'userBoutiques' => $userBoutiques,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/add-user", name="admin.add_user")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function addUserAction(Request $request, \Swift_Mailer $mailer, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$userBoutiques = $em->getRepository(UserBoutique::class)
->findByBoutique($boutique->getId());
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$appName = $this->getParameter('app_name');
if('POST' == $request->getMethod()){
$email = $_POST['email'];
$role = $_POST['role'];
$requeteAjoutBoutique = new RequeteAjoutBoutique;
$requeteAjoutBoutique->setRole($role);
$requeteAjoutBoutique->setEmail($email);
$requeteAjoutBoutique->setBoutique($boutique);
$em->persist($requeteAjoutBoutique);
$em->flush();
//Envoi de mail
$message = (new \Swift_Message('Welcome to '.$appName))
->setFrom(['no-reply-myinvoice@assiemail.com' => $appName])
->setTo([$email])
->setBody(
$this->renderView(
'admin/requete_ajout_boutique_email.html.twig',
[
'appName' => $appName,
'role' => $role,
'boutique' => $boutique
]
),
'text/html'
);
$mailer->send($message);
}
return $this->render('admin/users.html.twig', [
'boutique' => $boutique,
'userBoutiques' => $userBoutiques,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/mon-compte", name="admin_mon_compte")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function monCompteAction(Request $request, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
return $this->render('admin/mon_compte.html.twig', [
'boutique' => $boutique,
'userBoutiques' => $userBoutiques,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/mot-de-passe", name="admin_mot_de_passe")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function motDePasseAction(Request $request, UserPasswordHasherInterface $passwordHasher, Boutique $boutique)
{
if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
return $this->redirectToRoute('security_login');
}
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$error = '';
$ok_submission = '';
$error_submission = '';
$actuel = $user->getPassword();
$hashed = '';
if('POST' == $request->getMethod())
{
$motDePasseActuel = $request->request->get('motDePasseActuel');
$nouveauMotDePasse = $request->request->get('nouveauMotDePasse');
$repeterMotDePasse = $request->request->get('repeterMotDePasse');
//$user->setPassword('');
//$hashed = $passwordHasher->hashPassword($user, $motDePasseActuel);
//if( $hashed == $user->getPassword()){
$user->setPassword('');
$hashedPassword = $passwordHasher->hashPassword($user, $nouveauMotDePasse);
$user->setPassword($hashedPassword);
$ok_submission = 'Mot de passe changé';
//}else{
// $error_submission = 'Ancien mot de passe incorrect';
//}
//Effacer l'ancien mot de passe
$em->flush();
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user,
'boutique' => $boutique
)
);
return $this->render('admin/mot_de_passe.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'ok_submission' => $ok_submission,
'error_submission' => $error_submission,
'hashed' => $hashed,
'actuel' => $actuel
]);
}
public function getDomain()
{
$domaine = $_SERVER['HTTP_HOST'];
$protocol = '';
if($domaine == 'localhost' || $domaine == '127.0.0.1'){
$domaine = $domaine.'/myinvoice-def/public';
}
if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
$protocol = 'https://';
} else{
$protocol = 'http://';
}
return $protocol.$domaine;
}
public function getNumero($type, $boutique)
{
$numero = '';
$em = $this->getDoctrine()
->getManager();
$nombre = 0;
if($type == 'deposit'){
$nombre = $em->getRepository(FactureAcompte::class)
->getNumero($type, $boutique->getId());
} else{
$nombre = $em->getRepository(Commande::class)
->getNumero($type, $boutique->getId());
}
if(empty($nombre)){
$nombre = 1 ;
} else {
$nombre = (int)$nombre[0]['nombre'];
$nombre++;
}
switch($type){
case 'invoice':
$numero .= $boutique->getSettings()->getLettreDebutFacture();
break;
case 'deposit':
$numero .= $boutique->getSettings()->getLettreDebutFactureAcompte();
break;
case 'bill_credit':
$numero .= $boutique->getSettings()->getLettreDebutFactureAvoir();
break;
case 'proposal':
$numero .= $boutique->getSettings()->getLettreDebutDevis();
break;
}
if($boutique->getSettings()->getIncluAnnee()){
$numero .= date('y');
}
$nombreDeZeroAAjouter = strlen((string)$nombre);
$nombreDeZeroAAjouter = $boutique->getSettings()->getNombreDeChiffre() - $nombreDeZeroAAjouter;
for($i = 0; $i < $nombreDeZeroAAjouter; $i++){
$numero .= '0';
}
$numero .= $nombre;
return $numero;
}
function intervalleMois($datestr)
{
date_default_timezone_set (date_default_timezone_get());
$dt = strtotime ($datestr);
return array (
"debut" => date ('Y-m-d', strtotime ('first day of this month', $dt)),
"fin" => date ('Y-m-d', strtotime ('last day of this month', $dt))
);
}
function intervalleSemaine($datestr) {
date_default_timezone_set (date_default_timezone_get());
$dt = strtotime ($datestr);
return array (
"debut" => date ('N', $dt) == 1 ? date ('Y-m-d', $dt) : date ('Y-m-d', strtotime ('last monday', $dt)),
"fin" => date('N', $dt) == 7 ? date ('Y-m-d', $dt) : date ('Y-m-d', strtotime ('next sunday', $dt))
);
}
public function gererFichierMultipleImportation($data, $boutique)
{
$leRetour = false;
$em = $this->getDoctrine()->getManager();
$ex = pathinfo($data['name'])['extension'];
$exA = array('csv');
if (in_array(strtolower($ex), $exA)){
} else{
throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
}
$name = time();
$namePourRepertoire = $name;
//hydratation des attributs de l'objet
$domaine = $_SERVER['HTTP_HOST'];
$protocol = '';
if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
$protocol = 'https://';
} else{
$protocol = 'http://';
}
//$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
//$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
$url = $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
//deplacement (création de l'image original)
//$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777, true))
{
throw new \RuntimeException('Impossible de créer le dossier de destination');
}
if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
{
throw new \RuntimeException('Désolé, une erreur s\'est produite.');
}
$fileToHandle = fopen($url, 'r');
$row = 1;
while (($data = fgetcsv($fileToHandle, 10000, ",")) !== false) {
$num = count($data);
//echo "<p> $num champs à la ligne $row: <br /></p>\n";
$row++;
$categorie = $data[0];
$categorieProduit = $em->getRepository(CategorieProduit::class)
->findOneByNom($categorie);
if(null == $categorieProduit){
$categorieProduit = new CategorieProduit;
$categorieProduit->setNom($categorie);
$em->persist($categorieProduit);
$em->flush();
}
$ref = $data[1];
$nomProd = $data[2];
$prix = $data[3];
$stockDisponible = $data[4];
$stockDAlerte = $data[5];
$stockDeSecurite = $data[6];
$stockMinimum = $data[7];
$stockMaximum = $data[8];
$stockOutil = $data[9];
$coutDeStockage = $data[10];
$produit = $em->getRepository(Produit::class)
->findOneBy(
array(
'reference' => $ref,
'nom' => $nomProd
)
);
if(null == $produit){
$produit = new Produit;
$produit->setCategorieProduit($categorieProduit);
$produit->setReference($ref);
$produit->setNom($nomProd);
$prixActuel = new PrixProduit;
$prixActuel->setValeur($prix);
$produit->addPrix($prixActuel);
$produit->setPrixActuel($prixActuel);
$produit->setStockDisponible($stockDisponible);
$produit->setStockDAlerte($stockDAlerte);
$produit->setStockDeSecurite($stockDeSecurite);
$produit->setStockMinimum($stockMinimum);
$produit->setStockMaximum($stockMaximum);
$produit->setStockOutil($stockOutil);
$produit->setCoutDeStockage($coutDeStockage);
$produit->setBoutique($boutique);
$em->persist($produit);
$em->flush();
}
}
$leRetour = true;
fclose($fileToHandle);
//$this->getDoctrine()->getManager()->flush();
return $leRetour;
}
public function gererFichierMultipleCustomerImportation($data, $boutique)
{
$leRetour = false;
$em = $this->getDoctrine()->getManager();
$ex = pathinfo($data['name'])['extension'];
$exA = array('csv');
if (in_array(strtolower($ex), $exA)){
} else{
throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
}
$name = time();
$namePourRepertoire = $name;
//hydratation des attributs de l'objet
$domaine = $_SERVER['HTTP_HOST'];
$protocol = '';
if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
$protocol = 'https://';
} else{
$protocol = 'http://';
}
//$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
//$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
$url = $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
//deplacement (création de l'image original)
//$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777, true))
{
throw new \RuntimeException('Impossible de créer le dossier de destination');
}
if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
{
throw new \RuntimeException('Désolé, une erreur s\'est produite.');
}
$fileToHandle = fopen($url, 'r');
$row = 1;
while (($data = fgetcsv($fileToHandle, 10000, ",")) !== false) {
$num = count($data);
$row++;
$nomClient = $data[0];
$adresse = $data[1];
$codePostal = $data[2];
$nomPays = $data[3];
$ville = $data[4];
$email = $data[5];
$telephone = $data[6];
$soumisALaTVA = $data[7];
$codeTVA = $data[8];
$tier = $em->getRepository(Tiers::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'nom' => $nomClient
)
);
if(null == $tier){
$tier = new Tiers;
$tier->setNom($nomClient);
$tier->setAdresse($adresse);
$tier->setCodePostal($codePostal);
$tier->setEmail($email);
$tier->setTelephone($telephone);
$tier->setVille($ville);
$tier->setAssujettiALaTVA($soumisALaTVA);
$tier->setCodeTVA($codeTVA);
$pays = $em->getRepository(Pays::class)
->findOneBy(
array(
'nom' => $nomPays
)
);
if (null == $pays){
$pays = $em->getRepository(Pays::class)
->findOneBy(
array(
'nomFr' => $nomPays
)
);
if(null == $pays){
$pays = new Pays;
$pays->setNom($nomPays);
$em->persist($pays);
$em->flush();
}
}
$tier->setPays($pays);
$tier->setBoutique($boutique);
$em->persist($tier);
$em->flush();
}
}
$leRetour = true;
fclose($fileToHandle);
//$this->getDoctrine()->getManager()->flush();
return $leRetour;
}
public function getMois()
{
$mois = array(
array(
'index' => 1,
'nom' => 'Janvier'
),
array(
'index' => 2,
'nom' => 'Février'
),
array(
'index' => 3,
'nom' => 'Mars'
),
array(
'index' => 4,
'nom' => 'Avril'
),
array(
'index' => 5,
'nom' => 'Mai'
),
array(
'index' => 6,
'nom' => 'Juin'
),
array(
'index' => 7,
'nom' => 'Juillet'
),
array(
'index' => 8,
'nom' => 'Août'
),
array(
'index' => 9,
'nom' => 'Septembre'
),
array(
'index' => 10,
'nom' => 'Octobre'
),
array(
'index' => 11,
'nom' => 'Novembre'
),
array(
'index' => 12,
'nom' => 'Décembre'
),
);
return $mois;
}
public function getAnnee()
{
$actuel = date('Y');
$annees = array();
for($i = $actuel; $i >= 2020; $i--){
array_push($annees, $i);
}
return $annees;
}
}