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 $logger, ManagerRegistry $managerRegistry, MessageBusInterface $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($content, true);
  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($parcels, Response::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($content, true);
  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($data, Response::HTTP_NOT_FOUND);
  103. }else if($waybill->getIsCollected()){
  104. $data = [
  105. 'error' => 'Waybill found but is collected'
  106. ];
  107. return new JsonResponse($data, Response::HTTP_EXPECTATION_FAILED);
  108. }
  109. }else{
  110. $data = [
  111. 'error' => 'Please fill in all fields for collection'
  112. ];
  113. return new JsonResponse($data, Response::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($data, Response::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($message, Response::HTTP_OK );
  141. }
  142. }
  143. /**
  144. * @Rest\Post("/parcels/collect/parcel/{id}", name="collectOneParcel")
  145. */
  146. public function receiveParcel($id, Request $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($data, Response::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($data, Response::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($data, Response::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($data, Response::HTTP_EXPECTATION_FAILED);
  183. }
  184. $content = $request->getContent();
  185. $data = json_decode($content, true);
  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($p, null, ["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($data, Response::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($data, Response::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($data, Response::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. }