<?php
namespace App\Controller;
use App\Entity\Billing;
use App\Entity\Reglement;
use App\Entity\Site;
use App\Form\Reglement\CancelReglementType;
use App\Form\Reglement\FilterType;
use App\Form\Reglement\ReglementType;
use App\Repository\BillingRepository;
use App\Repository\CompanyRepository;
use App\Repository\ReglementRepository;
use App\Service\PaytweakService;
use App\Traits\Autowired\Vendor\EntityManagerTrait;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
* @Route("/reglement")
*/
class ReglementController extends AbstractController
{
use EntityManagerTrait;
/**
* @Route("/liste")
* @Template()
*/
public function index(
Request $request,
ReglementRepository $repository,
CompanyRepository $companyRepository,
ManagerRegistry $em
)
{
$entityManager = $em->getManager();
$reglements = $repository->findBy([], ['id' => 'DESC'],300);
$societes = $companyRepository->findAll();
$filterForm = $this->createForm(FilterType::class);
$company = null;
$client = null;
$date = null;
// filter
$reglementsRemise = $repository->findForRemise($client,$date, null, $company);
$sites = $em->getRepository(Site::class)->findAll();
$filterForm->handleRequest($request);
if ($filterForm->isSubmitted() && $filterForm->isValid()) {
$billing = $filterForm['billing']->getData();
$reference = $filterForm['reference']->getData();
$ttc = $filterForm['ttc']->getData();
$company = $filterForm['company']->getData();
$mode = $filterForm['mode']->getData();
$statut = $filterForm['statut']->getData();
$site = $filterForm['site']->getData();
$client = $filterForm['client']->getData();
$date = $filterForm['date']->getData();
$dateEnd = $filterForm['dateEnd']->getData();
//global list
$reglements = $repository->filter($mode, $client, $date, $dateEnd, $company, $site, $statut, false, $billing, $reference, $ttc);
$reglementsRemise = $repository->findForRemise($client,$date, $dateEnd, $company);
}
$solde = $request->request->get('billing_solde');
if($request->isMethod(Request::METHOD_POST) && $solde) {
$remise = $request->request->get('remise');
$date = $request->request->get('date');
$societe = $request->request->get('societe');
$societe = $companyRepository->find($societe);
$reglementSelected = $request->request->get('reglements');
$dateRemise = $date ? date_create_from_format('d-m-Y', $date): null;
if($reglementSelected){
// a voir si création de remise.
foreach ($reglementSelected as $reglementSelect){
$reglement= $repository->find($reglementSelect);
if(!$remise){
continue;
}
$reglement->setNumeroRemise($remise);
if($date && $dateRemise){
$reglement->setDateRemiseChaque($dateRemise);
}
if($societe){
$reglement->setCompany($societe);
}
$entityManager->persist($reglement);
}
$entityManager->flush();
}
}
// $total = 0;
// /** @var Reglement $reglement */
// foreach ($reglements as $reglement){
// $total += $reglement->getTtc();
// }
return [
'company'=> $company,
'societes' => $societes,
'formFilter' => $filterForm->createView(),
'reglements' => $reglements,
'reglementsRemise' => $reglementsRemise,
'sites' => $sites,
// 'total' => $total
];
}
/**
* @Route("/paytweak/webhook")
* @Template()
*/
public function webhook(Request $request, BillingRepository $billingRepository, ReglementRepository $repository, CompanyRepository $companyRepository)
{
$entityManager = $this->getDoctrine()->getManager();
$notice =$request->request->get('notice');
if($notice == PaytweakService::NOTICE_PAYMENT){
$orderId =$request->request->get('order_id');
$status =$request->request->get('status');
$reason =$request->request->get('reason');
$amount = $request->request->get('amount');
$date_payment = $request->request->get('date_payment');
$authorisation_id = $request->request->get('authorisation_id');
$transaction_id = $request->request->get('transaction_id');
}
return new JsonResponse();
}
/**
* @Route("/edit/{id}", name="reglement_edit", methods={"GET","POST"})
* @Template()
*/
public function edit(Request $request, Reglement $reglement)
{
$entityManager = $this->getDoctrine()->getManager();
$form = $this->createForm(ReglementType::class, $reglement);
$cancelForm = $this->createForm(CancelReglementType::class, $reglement);
$form->handleRequest($request);
//dump($form->getErrors());die;
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($reglement);
$entityManager->flush();
return $this->redirectToRoute('app_reglement_index');
}
$cancelForm->handleRequest($request);
if ($cancelForm->isSubmitted() && $cancelForm->isValid()) {
foreach ($reglement->getBillings() as $billing){
$billing->setSolde($billing->getTtc());
$billing->setStatus(Billing::STATUS_SENT);
$this->em->persist($billing);
}
$reglement->setStatus(Reglement::STATUS_CANCEL);
$this->em->persist($reglement);
$this->em->flush();
return $this->redirectToRoute('app_reglement_index');
}
return [
'cancelForm' => $cancelForm->createView(),
'form' => $form->createView(),
'reglement' => $reglement
];
}
/**
* @Route("/cancel/{id}", name="reglement_cancel", methods={"GET","POST"})
*/
public function cancel(Request $request, Reglement $reglement)
{
foreach ($reglement->getBillings() as $billing){
$billing->setSolde($billing->getTtc());
$billing->setStatus(Billing::STATUS_SENT);
$this->em->persist($billing);
}
$reglement->setStatus(Reglement::STATUS_CANCEL);
$this->em->persist($reglement);
$this->em->flush();
return $this->redirectToRoute('app_reglement_index');
}
}