/
var
/
www
/
html
/
boaz2
/
src
/
Controller
/
Upload File
HOME
<?php namespace App\Controller; use App\Entity\Cargo; use App\Entity\Loading; use App\Entity\ReleaseOrder; use App\Entity\User; use App\Service\MailgunTransport; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Session\Session; use AfricasTalking\SDK\AfricasTalking; use App\Entity\Depot; use App\Entity\UserDepot; class ReleaseOrderController extends AbstractController { /** * * @var MailgunTransport */ private $mailgun; private $at; /** * * @param MailgunTransport $mailgun */ function __construct(MailgunTransport $mailgun) { $this->mailgun = $mailgun; $this->at = new AfricasTalking($_ENV['AT_USERNAME'], $_ENV['AT_KEY']); } /** * @Route("/generate", name="generate") */ public function generate() { $em = $this->getDoctrine()->getManager(); if(isset($_POST['submit'])) { $release = new ReleaseOrder(); $date = new \DateTime($_POST['date']); $date = $date->format('D, d M Y'); $name = $_POST['customer'] . "-" . $_POST['quantity'] . "-" . $date; $release->setCargo($em->getRepository(Cargo::class)->find($_POST['cargo'])); $release->setCustomer($_POST['customer']); $release->setQuantity(intval(str_replace(",", "", $_POST['quantity']))); $release->setDate($_POST['date']); $release->setDates(\DateTime::createFromFormat("m/d/Y", $_POST['date'])); $release->setDepot($em->getRepository(Depot::class)->find($_POST['depot'])); $release->setBank($_POST['bank']); $release->setName($name); $em->persist($release); $em->flush(); $url = $this->generateUrl('viewRelease', ['id' => $release->getId()], 0); $emailResponse = $this->sendEmail('release/new.html.twig', 'Ihuoma <ihuoma@boazcommodities.com>, Collins <collinsokafor77@gmail.com>', 'New Release Order', $url, $release); $newsms = $this->at->sms(); $msg = $newsms->send(['to' => ['+2348033440084', '+2348039615110'], 'message' => "New Release Order\r\n\r\n" . $url]); return $this->redirect($url); } $cargo = $em->getRepository(Cargo::class)->findNotEmpty(); $depots = $em->getRepository(Depot::class)->findBy([], ['name' => 'ASC']); return $this->render('release/generate.html.twig', ['title' => 'Generate Release Order', 'cargo' => $cargo, 'depots' => $depots]); } /** * @Route("/releases", name="allReleases") */ public function index() { $em = $this->getDoctrine()->getManager(); $release = $em->getRepository(ReleaseOrder::class)->findSigned(); return $this->render('release/list.html.twig', ['title' => 'Release Order', 'release' => $release]); } /** * @Route("/depot/{id}/releases", name="allReleasesByDepot") */ public function depotReleases($id) { $em = $this->getDoctrine()->getManager(); $release = $em->getRepository(ReleaseOrder::class)->findSignedByDepot($id); return $this->render('release/list.html.twig', ['title' => 'Depot', 'release' => $release]); } /** * Show Release order by ID or show all * @Route("/release/{id}", name="viewRelease", requirements={"id": "\s*|\d+"}) */ public function view($id, $next = null) { $em = $this->getDoctrine()->getManager(); $role = $this->getUser()->getRole(); $release = $em->getRepository(ReleaseOrder::class)->find($id); $editable = true; if ($role === 'ADMIN' && $release->getSigntwoid()) { $editable = false; } $load = $em->getRepository(Loading::class)->findBy(['release' => $id]); $total = $em->getRepository(ReleaseOrder::class)->findTotalLoaded($id); return $this->render('release/view.html.twig', ['title' => 'Release Order', 'release' => $release, 'load' => $load, 'total' => $total, 'editable' => $editable]); } /** * Show release orders not completely signed * @Route("/release/unsigned/all", name="unsignedReleases") */ public function unsigned(Request $request, $year = null) { $year = $_GET['year'] ?? date('Y'); $em = $this->getDoctrine()->getManager(); $unsigned = $em->getRepository(ReleaseOrder::class)->findUnsigned($year); $yline = $year ? " $year": ""; return $this->render('release/unsigned.html.twig', ['title' => 'Unsigned Release Orders' . $yline, 'release' => $unsigned, 'year' => $year]); } /** * @Route("/release-today", name="viewReleaseToday") */ public function today() { $today = new \DateTime("today"); $now = new \DateTime(); $release = $this->getDoctrine()->getRepository(ReleaseOrder::class)->findByDate($today, $now); return $this->render('release/today.html.twig', ['title' => 'Release Order Today', 'release' => $release]); } /** * @Route("/release/edit/{id}", name="editRelease") */ public function edit(ReleaseOrder $release) { $role = $this->getUser()->getRole(); if ($role === 'ADMIN' && $release->getSigntwoid()) { $this->denyAccessUnlessGranted('ROLE_MANAGEMENT', null, 'Unable to access this page!'); } $em = $this->getDoctrine()->getManager(); $cargo = $em->getRepository(Cargo::class)->findAll(); $depots = $em->getRepository(Depot::class)->findBy([], ['name' => 'ASC']); if(isset($_POST['submit'])) { $name = $_POST['customer'] . "-" . $_POST['quantity'] . "-" . $_POST['date']; $release->setCustomer($_POST['customer']); $release->setQuantity($_POST['quantity']); $release->setCargo($em->getRepository(Cargo::class)->find($_POST['cargo'])); $release->setDate($_POST['date']); $release->setDepot($em->getRepository(Depot::class)->find($_POST['depot'])); $release->setBank($_POST['bank']); $release->setName($name); $em->persist($release); $em->flush(); return $this->redirectToRoute('viewRelease', array('id' => $release->getId())); } return $this->render('release/edit.html.twig', ['title' => 'Release Order', 'release' => $release, 'cargo' => $cargo, 'depots' => $depots]); } /** * @Route("/release/delete/{id}", name="deleteRelease") */ public function delete($id) { $this->denyAccessUnlessGranted('ROLE_MANAGEMENT', null, 'Unable to access this page!'); $em = $this->getDoctrine()->getManager(); $release = $em->getRepository(ReleaseOrder::class)->find($id); if ($release) { $loads = $em->getRepository(Loading::class)->deleteByRelease($id); $em->remove($release); $em->flush(); } return $this->redirectToRoute('allReleases'); } /** * @Route("/release/ordered/sign/{id}", name="ordered") * **/ public function ordered($id) { $em = $this->getDoctrine()->getManager(); $user = $this->getUser(); $release = $em->getRepository(ReleaseOrder::class)->find($id); $release->setSignoneid($user); $em->persist($release); $em->flush(); return $this->redirectToRoute('viewRelease', array('id' => $id)); } /** * @Route("/release/authorized/sign/{id}", name="authorized") * **/ public function authorized($id) { $em = $this->getDoctrine()->getManager(); $user = $this->getUser(); $release = $em->getRepository(ReleaseOrder::class)->find($id); $release->setSigntwoid($user); $em->persist($release); $em->flush(); return $this->redirectToRoute('viewRelease', array('id' => $id)); } /** * @Route("/release/released/sign/{id}", name="released") * **/ public function released($id) { $em = $this->getDoctrine()->getManager(); $user = $this->getUser(); $release = $em->getRepository(ReleaseOrder::class)->find($id); $release->setSignthreeid($user); $em->persist($release); $em->flush(); return $this->redirectToRoute('viewRelease', array('id' => $id)); } /** * @Route("/release/sign/{sign}/{id}", name="signRelease") */ public function sign($sign, $id) { $user = $this->getUser(); $userid = $user->getId(); $em = $this->getDoctrine()->getManager(); $release = $em->getRepository(ReleaseOrder::class)->find($id); if($sign === 'ordered'){ $release->setSignoneid($user); }else if($sign === 'authorised'){ $checkedInUser = $em->getRepository(UserDepot::class)->findCheckedInUser($release->getDepot()); $url = $this->generateUrl('addLoad', ['id' => $release->getId()], 0); if($checkedInUser && $s = $checkedInUser[0]){ if(str_starts_with($s['telephone'], '08')) $ph = substr_replace($s['telephone'], "+234", 0, 1); $newsms = $this->at->sms(); $msg = $newsms->send(['to' => $ph, 'message' => "New Release Order\r\n\r\n" . $url]); $emailResponse = $this->sendEmail('release/new.html.twig', $s['email'], 'New Release Order', $url, $release); } $release->setSigntwoid($user); }else if($sign === 'released'){ $release->setSignthreeid($user); } $em->persist($release); $em->flush(); return $this->redirectToRoute('viewRelease', array('id' => $id)); } /** * [sendEmail description] * @param string $view The view to render * @param Users $user The user to send the email to * @param string $rand Random string * @param string $subject Email subject */ private function sendEmail($view, $to, $subject, $url = null, $release) { $message = $this->renderView( "emails/$view", [ 'url' => $url, 'id' => $release->getId(), 'customer' => $release->getCustomer(), 'quantity' => $release->getQuantity(), 'bank' => $release->getBank() ] ); $response = $this->mailgun->send($to, $subject, $message); return $response; } }