src/Api/CollectionController.php line 100

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: parcel
  5.  * Date: 10/26/18
  6.  * Time: 3:19 AM
  7.  */
  8. namespace App\Api;
  9. use App\Controller\SendSms;
  10. use App\Entity\CollectedParcel;
  11. use App\Entity\OrganizationUser;
  12. use App\Entity\Parcel;
  13. use App\Entity\Sms;
  14. use App\Entity\UserStation;
  15. use App\Entity\WayBill;
  16. use App\Form\CollectionForm;
  17. use App\Service\ActionMatrix;
  18. use DateTime;
  19. use Doctrine\Persistence\ManagerRegistry;
  20. use Doctrine\Persistence\ObjectManager;
  21. use Exception;
  22. use FOS\RestBundle\Controller\AbstractFOSRestController;
  23. use FOS\RestBundle\View\View;
  24. use Psr\Log\LoggerInterface;
  25. use Symfony\Component\HttpFoundation\JsonResponse;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\Messenger\MessageBusInterface;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Component\Validator\ConstraintViolation;
  31. use FOS\RestBundle\Controller\Annotations as Rest;
  32. class CollectionController extends AbstractFOSRestController {
  33.     private ObjectManager $em;
  34.     private LoggerInterface $logger;
  35.     private MessageBusInterface $messageBus;
  36.     private ActionMatrix $actionMatrix;
  37.     public function __construct(LoggerInterface $loggerManagerRegistry $managerRegistryMessageBusInterface $messageBus){
  38.         $this->logger $logger;
  39.         $this->em $managerRegistry->getManager();
  40.         $this->messageBus $messageBus;
  41.     }
  42.     /**
  43.      * @Rest\Post("/collection/parcels", name="receivedParcelList_")
  44.      */
  45.     public function getReceivedParcels(Request $request){
  46.         $content $request->getContent();
  47. //        [2019-10-08 12:00:36] app.INFO: {"origin":0,"search":"","search_parameter":""} [] []
  48.         $data json_decode($contenttrue);
  49. //        dump($data['receiver']); die;
  50.         $searchParameter null;
  51.         $search null;
  52.         $origin null;
  53.         if(isset($data['origin']) && $data['origin'] !== 0){
  54.             $origin $data['origin'];
  55.         }
  56.         if(isset($data['search_parameter']) && isset($data['search'])){
  57.             $searchParameter $data['search_parameter'];
  58.             $search $data['search'];
  59.         }
  60.         $em $this->em;
  61.         $userStation $em->getRepository(UserStation::class)->findOneBy([
  62.             'user' => $this->getUser()
  63.         ], ['id' => 'DESC']);
  64.         $parcels $em->getRepository(WayBill::class)->findReceivedWaybillsRawSql(
  65.             $userStation->getStation()->getId(), $origin$searchParameter$search
  66.         );
  67.         return new JsonResponse($parcelsResponse::HTTP_OK);
  68.     }
  69.     /**
  70.      * @Rest\Post("/collections", name="collectorDetailsfd_")
  71.      */
  72.     public function makeCollection(Request $request): JsonResponse
  73.     {
  74.         $em $this->em;
  75.         $content $request->getContent();
  76.         $data json_decode($contenttrue);
  77. //        {"collector_name":"GEORGE IKAHU","consignee_national_id":"5255418855","id":0,"is_consignee":true,"national_id":"5255418855","waybill_id":62}
  78. //        {"collector_name":"evelyn karu","consignee_national_id":"27787431","id":0,"is_consignee":true,"national_id":"27787431","waybill_id":252587}
  79.         $this->logger->debug('COLLECTION '.$content);
  80.         $consigneeId null;
  81.         $collectorName null;
  82.         $collectorNationalId null;
  83.         $waybillId null;
  84.         $isConsignee  false;
  85.         if(isset($data['consignee_national_id'])
  86.             && isset($data['collector_name'])
  87.             && isset($data['national_id'])
  88.             && isset($data['waybill_id'])
  89.             && isset($data['is_consignee']) ){
  90.             $waybillId $data['waybill_id'];
  91.             $collectorName $data['collector_name'];
  92.             $collectorNationalId $data['national_id'];
  93.             $consigneeId $data['consignee_national_id'];
  94.             $isConsignee $data['is_consignee'];
  95.             $waybill $em->getRepository(WayBill::class)->findOneBy([
  96.                 'id' => $waybillId
  97.             ]);
  98.             if(!$waybill){
  99.                 $data = [
  100.                     'error' => 'Waybill not found'
  101.                 ];
  102.                 return new JsonResponse($dataResponse::HTTP_NOT_FOUND);
  103.             }else if($waybill->getIsCollected()){
  104.                 $data = [
  105.                     'error' => 'Waybill found but is collected'
  106.                 ];
  107.                 return new JsonResponse($dataResponse::HTTP_EXPECTATION_FAILED);
  108.             }
  109.         }else{
  110.             $data = [
  111.                 'error' => 'Please fill in all fields for collection'
  112.             ];
  113.             return new JsonResponse($dataResponse::HTTP_EXPECTATION_FAILED);
  114.         }
  115.         $waybill->setIsCollected(true);
  116.         $collectedParcel = new CollectedParcel();
  117.         $collectedParcel->setCollectorName($collectorName);
  118.         $collectedParcel->setConsigneeNationalId($consigneeId);
  119.         $collectedParcel->setWaybill($waybill);
  120.         $collectedParcel->setCreatedAt(new DateTime());
  121.         $collectedParcel->setCreatedBy($this->getUser());
  122.         $collectedParcel->setIsConsignee($isConsignee);
  123.         $collectedParcel->setNationalId($collectorNationalId);
  124.         try{
  125.             $em->persist($collectedParcel);
  126.             $em->flush();
  127.             $data = [
  128.                 'message'=> 'saved successfully'
  129.             ];
  130.             $this->actionMatrix = new ActionMatrix($this->messageBus,$this->em,$waybill);
  131.             $this->actionMatrix->collectingAction($this->getUser());
  132.             return new JsonResponse($dataResponse::HTTP_CREATED);
  133.         } catch (Exception $e){
  134.             $message = [
  135.                 'error'=>"could not save collector information",
  136.                 "data" =>$collectedParcel
  137.             ];
  138. //            $view = $this->view($message, Response::HTTP_EXPECTATION_FAILED);
  139. //            return $view;
  140.             return new JsonResponse($messageResponse::HTTP_OK );
  141.         }
  142.     }
  143.     /**
  144.      * @Rest\Post("/parcels/collect/parcel/{id}", name="collectOneParcel")
  145.      */
  146.     public function  receiveParcel($idRequest $request) {
  147.         $em $this->getDoctrine()->getManager();
  148.         /** @var Parcel $parcel */
  149.         $parcel $em->getRepository(Parcel::class)->findOneBy([
  150.             'id' => $id
  151.         ]);
  152.         if(!$parcel) {
  153.             $data = [
  154.                 'error' => 'Parcel does not exist'
  155.             ];
  156. //            return $this->view($data, Response::HTTP_NOT_FOUND);
  157.             return new JsonResponse($dataResponse::HTTP_NOT_FOUND);
  158.         }
  159.         if(!$parcel->getWaybill()->getisReceived()){
  160.             $data = [
  161.                 'error' => "THIS PARCEL FROM {$parcel->getWaybill()->getFromStation()} HAS NOT BEEN RECEIVED"
  162.             ];
  163. //            return $this->view($data, Response::HTTP_EXPECTATION_FAILED);
  164.             return new JsonResponse($dataResponse::HTTP_EXPECTATION_FAILED);
  165.         }
  166.         if($parcel->getWaybill()->getIsCollected()){
  167.             $data = [
  168.                 'error' => 'THIS PARCEL HAS ALREADY BEEN COLLECTED'
  169.             ];
  170. //            return $this->view($data, Response::HTTP_EXPECTATION_FAILED);
  171.             return new JsonResponse($dataResponse::HTTP_EXPECTATION_FAILED);
  172.         }
  173.         /** @var UserStation $user */
  174.         $user $em->getRepository(UserStation::class)->findOneBy([
  175.             'user' => $this->getUser()
  176.         ],['id' => 'DESC']);
  177.         if($parcel->getWaybill()->getToStation()->getId() != $user->getStation()->getId()){
  178.             $data = [
  179.                 'error' => 'You are not logged in from '.$parcel->getWaybill()->getToStation()->getStationName()
  180.             ];
  181. //            return $this->view($data, Response::HTTP_EXPECTATION_FAILED);
  182.             return new JsonResponse($dataResponse::HTTP_EXPECTATION_FAILED);
  183.         }
  184.         $content $request->getContent();
  185.         $data json_decode($contenttrue);
  186.         $p = new Parcel();
  187.         $form $this->createForm(CollectionForm::class, $p,[
  188.             'validation_groups' => [
  189.                 'collection'
  190.             ]
  191.         ]);
  192.         $form->submit($data);
  193. //      dump($data); die;
  194.         $validator $this->get('validator');
  195.         /** @var  $errors*/
  196.         $errors $validator->validate($pnull, ["collection"]);
  197. //        dump($collectParcel);die;
  198.         if(count($errors) > 0){
  199.             $fields = array();
  200.             /** @var  $error ConstraintViolation */
  201.             foreach ($errors as $key => $error){
  202.                 $fields[$error->getPropertyPath()] = $error->getMessage();
  203.             }
  204.             $data = [
  205.                 'error' => 'Please check this fields for errors',
  206.                 'fields' => $fields
  207.             ];
  208. //            $view = $this->view($data, Response::HTTP_BAD_REQUEST);
  209. //
  210. //            return $view;
  211.             return new JsonResponse($dataResponse::HTTP_BAD_REQUEST);
  212.         }
  213. //        dump($collectParcel);die;
  214.         /** @var OrganizationUser $organization */
  215.         $organization $em->getRepository('AppBundle:OrganizationUser')->findOneBy([
  216.             'user' => $this->getUser()
  217.         ]);
  218.         if(!$parcel->getisEnRoute()){
  219.             $data = [
  220.                 'error' => "THIS PARCEL HAS NOT BEEN LOADED TO VEHICLE"
  221.             ];
  222. //            return $this->view($data, Response::HTTP_EXPECTATION_FAILED);
  223.             return new JsonResponse($dataResponse::HTTP_EXPECTATION_FAILED);
  224.         }
  225.         if(!$parcel->getWaybill()->getIsReceived()){
  226.             $data = [
  227.                 'error' => "THIS PARCEL HAS NOT BEEN RECEIVED YET"
  228.             ];
  229. //            return $this->view($data, Response::HTTP_EXPECTATION_FAILED);
  230.             return new JsonResponse($dataResponse::HTTP_EXPECTATION_FAILED);
  231.         }
  232.         $parcel->setCollectedAt(new \DateTime());
  233.         $parcel->setCollectedOfficerBy($this->getUser());
  234.         $parcel->setIsCollected(true);
  235.         $parcel->setCollectorNationalId($p->getCollectorNationalId());
  236.         try{
  237.             $smsMessage = new Sms();
  238.             $smsMessage->setTransaction($parcel->getWaybill()->getTransaction());
  239.             $smsMessage->setRecepient($parcel->getWaybill()->getSenderPhoneNumber());
  240.             $smsMessage->setCreatedAt(new \DateTime());
  241.             $smsMessage->setCreatedBy($this->getUser());
  242.             $smsMessage->setSms("HELLO {$parcel->getWaybill()->getSenderName()} 1 OF THE PARCELS YOU SENT TO {$parcel->getWaybill()->getReceiverName()} IN {$parcel->getWaybill()->getToStation()->getStationName()} FROM {$parcel->getWaybill()->getFromStation()->getStationName()} HAS BEEN COLLECTED BY {$parcel->getWaybill()->getReceiverName()}");
  243.             $smsMessage->setOrganization($organization->getOrganization());
  244.             $sms = new SendSms();
  245.             $smsMessage $sms->sendSms($smsMessage);
  246.             $em->persist($smsMessage);
  247.             $em->flush();
  248. //            $view = $this->view($parcel->getWaybill(), Response::HTTP_CREATED);
  249. //
  250. //            return $view;
  251.             return new JsonResponse($parcel->getWaybill(), Response::HTTP_CREATED);
  252.         } catch (\PDOException $e){
  253. //            $view = $this->view($parcel->getWaybill(), Response::HTTP_EXPECTATION_FAILED);
  254. //
  255. //            return $view;
  256.             return new JsonResponse($parcel->getWaybill(), Response::HTTP_EXPECTATION_FAILED);
  257.         }
  258.     }
  259. }