src/Repository/DeliveryParcelRepository.php line 564

Open in your IDE?
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: parcel
  5. * Date: 1/23/19
  6. * Time: 7:35 AM
  7. */
  8. namespace App\Repository;
  9. use App\Entity\Delivery;
  10. use Doctrine\DBAL\Exception;
  11. use Doctrine\ORM\EntityRepository;
  12. use Doctrine\ORM\NonUniqueResultException;
  13. use Doctrine\ORM\NoResultException;
  14. class DeliveryParcelRepository extends EntityRepository{
  15. public function deliveryParcels(Delivery $delivery) {
  16. $qb = $this->createQueryBuilder('dp');
  17. $qb->join("dp.parcel", "p")
  18. ->join("dp.delivery", "d")
  19. ->join("dp.createdBy", "cb")
  20. ->select("p.id as parcel")
  21. ->addSelect("dp.id as id")
  22. ->addSelect("d.id as delivery")
  23. ->addSelect("dp.isCancelled as is_cancelled")
  24. ->addSelect("dp.cancelledBecause as cancelled_because")
  25. ->addSelect("cb.id as created_by")
  26. ->where("dp.delivery=:delivery")
  27. ->setParameter("delivery", $delivery);
  28. return $qb
  29. ->getQuery()
  30. ->execute();
  31. }
  32. public function outGoingDeliveryParcels($station, $lastDelivery) {
  33. $qb = $this->createQueryBuilder('dp');
  34. $qb->join("dp.parcel", "p")
  35. ->join('p.waybill', 'w')
  36. ->join("dp.delivery", "d")
  37. ->join("dp.createdBy", "cb")
  38. ->select("p.id as parcel")
  39. ->addSelect("dp.id as online_id")
  40. ->addSelect("d.id as delivery")
  41. ->addSelect("dp.isCancelled as is_cancelled")
  42. ->addSelect("dp.cancelledBecause as cancelled_because")
  43. ->addSelect('d.isReceivedFully as is_received_fully')
  44. ->addSelect('dp.isReceived as is_received')
  45. ->addSelect("cb.id as created_by")
  46. ->where("d.originStation=:station")
  47. ->andWhere('d.isVerified = false')
  48. ->andWhere("d.id >:last_delivery")
  49. ->setParameter("last_delivery", $lastDelivery)
  50. ->setParameter("station", $station);
  51. return $qb
  52. ->getQuery()
  53. ->execute();
  54. }
  55. public function getDeliveryParcels($delivery) {
  56. $qb = $this->createQueryBuilder('dp');
  57. $qb->join("dp.parcel", "p")
  58. ->join('p.waybill', 'w')
  59. ->join('w.transaction', 'transaction')
  60. ->join('w.toStation', 'toStation')
  61. ->join("dp.delivery", "d")
  62. ->join("dp.createdBy", "cb")
  63. ->join("cb.person", "person")
  64. ->select("dp.id as id")
  65. ->addSelect("w.id as waybill")
  66. ->addSelect("toStation.stationName as to_station_name")
  67. ->addSelect("transaction.amount as amount")
  68. ->addSelect("d.id as delivery")
  69. ->addSelect("p.id as parcel_id")
  70. ->addSelect("dp.isCancelled as is_cancelled")
  71. ->addSelect("dp.cancelledBecause as cancelled_because")
  72. ->addSelect("person.firstName as created_by")
  73. ->addSelect("p.description as description")
  74. ->where("d.id =:delivery")
  75. ->setParameter("delivery", $delivery);
  76. return $qb
  77. ->getQuery()
  78. ->execute();
  79. }
  80. public function deliveryIncomingParcels($station, $lastDelivery) {
  81. $qb = $this->createQueryBuilder('dp');
  82. $qb->join("dp.parcel", "p")
  83. ->join('p.waybill', 'w')
  84. ->join("dp.delivery", "d")
  85. ->join("dp.createdBy", "cb")
  86. ->select("p.id as parcel")
  87. ->addSelect("dp.id as id")
  88. ->addSelect("d.id as delivery")
  89. ->addSelect("dp.isCancelled as is_cancelled")
  90. ->addSelect("dp.cancelledBecause as cancelled_because")
  91. ->addSelect('d.isReceivedFully as is_received_fully')
  92. ->addSelect('dp.isReceived as is_received')
  93. ->addSelect("cb.id as created_by")
  94. ->where("d.destination=:station")
  95. ->andWhere('d.isCancelled = false')
  96. ->andWhere('d.isVerified = true')
  97. ->andWhere('d.id >:last_delivery')
  98. // ->andWhere('d.isReceived = false')
  99. ->andWhere('w.isCollected = false')
  100. // ->andWhere('dp.id >:last_id')
  101. ->setParameter('last_delivery', $lastDelivery)
  102. ->setParameter("station", $station);
  103. return $qb
  104. ->getQuery()
  105. ->execute();
  106. }
  107. public function commonDeliveryIncomingParcels($delivery_id) {
  108. $qb = $this->createQueryBuilder('dp');
  109. $qb->join("dp.parcel", "p")
  110. ->join("dp.delivery", "d")
  111. ->join("dp.createdBy", "cb")
  112. ->join('p.waybill', 'w')
  113. ->join("w.fromStation", "ft")
  114. ->join("w.toStation", "tt")
  115. ->join("w.transaction", "t")
  116. ->join("w.organization", "o")
  117. ->select("dp.id as id")
  118. ->addSelect("d.id as delivery")
  119. ->addSelect('dp.isReceived as is_received')
  120. ->addSelect("cb.id as created_by")
  121. // Beginning incoming parcel
  122. ->addSelect("p.id as parcel")
  123. ->addSelect("dp.isCancelled as is_cancelled")
  124. ->addSelect("dp.cancelledBecause as cancelled_because")
  125. ->addSelect("p.description as description")
  126. ->addSelect('d.isReceivedFully as is_received_fully')
  127. ->addSelect('p.number as number')
  128. // Beginning waybill
  129. ->addSelect("w.id as waybill")
  130. ->addSelect("w.senderName as sender_name")
  131. ->addSelect("w.senderPhoneNumber as sender_phone_number")
  132. ->addSelect("w.receiverName as receiver_name")
  133. ->addSelect("w.receiverPhoneNumber as receiver_phone_number")
  134. ->addSelect("ft.id as from_station")
  135. ->addSelect("tt.id as to_station")
  136. ->addSelect("tt.stationName as to_station_name")
  137. ->addSelect("DATE_FORMAT(w.createdAt, '%Y-%m-%d %H:%i:%s') as created_at")
  138. ->addSelect("t.id as transaction_id")
  139. ->addSelect("t.amount as amount")
  140. ->addSelect("w.isCollected as is_collected")
  141. ->addSelect("o.id as organization")
  142. ->addSelect("w.percelCount as parcel_count")
  143. ->where('d.isCancelled = false')
  144. ->andWhere('dp.isCancelled = false')
  145. ->andWhere('d.isVerified = true')
  146. ->andWhere('d.id = :delivery')
  147. ->setParameter('delivery', $delivery_id);
  148. return $qb
  149. ->getQuery()
  150. ->execute();
  151. }
  152. public function oneDeliveryIncomingParcels($delivery_number) {
  153. $qb = $this->createQueryBuilder('dp');
  154. $qb->join("dp.parcel", "p")
  155. ->join('p.waybill', 'w')
  156. ->join("dp.delivery", "d")
  157. ->join("dp.createdBy", "cb")
  158. ->select("p.id as parcel")
  159. ->addSelect("dp.id as id")
  160. ->addSelect("d.id as delivery")
  161. ->addSelect("dp.isCancelled as is_cancelled")
  162. ->addSelect("dp.cancelledBecause as cancelled_because")
  163. ->addSelect('d.isReceivedFully as is_received_fully')
  164. ->addSelect('dp.isReceived as is_received')
  165. ->addSelect("cb.id as created_by")
  166. ->where("d.id=:delivery_number")
  167. ->setParameter('delivery_number', $delivery_number);
  168. return $qb
  169. ->getQuery()
  170. ->execute();
  171. }
  172. public function getOutGoingParcels($station, $lastWaybill) {
  173. $qb = $this->createQueryBuilder("dp")
  174. ->join("dp.parcel", "p")
  175. ->join("p.waybill", "w")
  176. ->select("p.id")
  177. ->addSelect("w.id as waybill")
  178. ->addSelect("p.number as number")
  179. ->addSelect("p.isInDelivery as is_in_delivery")
  180. ->addSelect("p.description")
  181. ->addSelect("p.createdAt as created_at")
  182. ->where("w.id >:lastWaybill")
  183. ->andWhere("w.fromStation =:fromStation")
  184. ->andWhere("w.createdAt >:today")
  185. ->setParameter("today", new \DateTime("-5 days"))
  186. ->setParameter("fromStation", $station)
  187. ->setParameter("lastWaybill", $lastWaybill);
  188. return $qb
  189. ->getQuery()
  190. ->execute();
  191. }
  192. public function getIncomingParcels($station, $lastDelivery) {
  193. $qb = $this->createQueryBuilder("dp")
  194. ->join("dp.parcel", "p")
  195. ->join("p.waybill", "w")
  196. ->join("dp.delivery", "d")
  197. ->select("distinct(p.id) as id")
  198. ->addSelect("w.id as waybill")
  199. ->addSelect("p.number as number")
  200. ->addSelect("p.isInDelivery as is_in_delivery")
  201. ->addSelect("p.description")
  202. ->addSelect("p.createdAt as created_at")
  203. ->where("d.id >:last_delivery")
  204. ->andWhere('dp.isCancelled = false')
  205. ->andWhere("d.destination =:destination")
  206. ->andWhere("w.isCollected = false")
  207. ->andWhere("d.isVerified = true")
  208. // ->andWhere("w.createdAt >:today")
  209. // ->setParameter("today", new \DateTime("-5 days"))
  210. ->setParameter("destination", $station)
  211. ->setParameter("last_delivery", $lastDelivery);
  212. return $qb
  213. ->getQuery()
  214. ->execute();
  215. }
  216. public function getOneDeliveryIncomingParcels($delivery_number) {
  217. $qb = $this->createQueryBuilder("dp")
  218. ->join("dp.parcel", "p")
  219. ->join("p.waybill", "w")
  220. ->join("dp.delivery", "d")
  221. ->select("distinct(p.id) as id")
  222. ->addSelect("w.id as waybill")
  223. ->addSelect("p.number as number")
  224. ->addSelect("p.isInDelivery as is_in_delivery")
  225. ->addSelect("p.description")
  226. ->addSelect("p.createdAt as created_at")
  227. ->where("d.id = :delivery_number")
  228. ->setParameter("delivery_number", $delivery_number);
  229. return $qb
  230. ->getQuery()
  231. ->execute();
  232. }
  233. public function incomingParcels($station, $lastDelivery) {
  234. $qb = $this->createQueryBuilder("dp")
  235. ->join("dp.delivery", "d")
  236. ->join("dp.parcel", "p")
  237. ->join("p.waybill", "w")
  238. ->select("p.id")
  239. ->addSelect("w.id as waybill")
  240. ->addSelect("p.number as number")
  241. ->addSelect("p.isInDelivery as is_in_delivery")
  242. ->addSelect("p.description")
  243. ->addSelect("p.createdAt as created_at")
  244. ->where("d.id >:last_delivery")
  245. ->andWhere("d.destination =:destination")
  246. ->andWhere("d.isReceivedFully = false")
  247. ->andWhere("d.isVerified = true")
  248. ->setParameter("last_delivery", $lastDelivery)
  249. ->setParameter("destination", $station);
  250. return $qb
  251. ->getQuery()
  252. ->execute();
  253. }
  254. public function findAllWaybills($last_id, $station){
  255. $qb = $this->createQueryBuilder("dp")
  256. ->join("dp.parcel", "p")
  257. ->join("p.waybill", "w")
  258. ->join("w.fromStation", "ft")
  259. ->join("w.toStation", "tt")
  260. ->join("w.createdBy", "cb")
  261. ->join("w.transaction", "t")
  262. ->join("w.organization", "o")
  263. ->select("DISTINCT(w.id) as id")
  264. ->addSelect("w.senderName as sender_name")
  265. ->addSelect("w.senderPhoneNumber as sender_phone_number")
  266. ->addSelect("w.receiverName as receiver_name")
  267. ->addSelect("w.receiverPhoneNumber as receiver_phone_number")
  268. ->addSelect("ft.id as from_station")
  269. ->addSelect("tt.id as to_station")
  270. ->addSelect("w.createdAt as created_at")
  271. ->addSelect("cb.id as created_by")
  272. ->addSelect("t.id as transaction_id")
  273. ->addSelect("t.amount as amount")
  274. ->addSelect("w.isCollected as is_collected")
  275. ->addSelect("o.id as organization")
  276. ->addSelect("w.percelCount as parcel_count")
  277. ->where("w.id > :lastID")
  278. ->andWhere("w.toStation =:toStation")
  279. // ->andWhere("ft.id =:fromStation OR tt.id =:toStation")
  280. ->setParameter("lastID", $last_id)
  281. ->setParameter("toStation", $station);
  282. return $qb
  283. ->getQuery()
  284. ->execute();
  285. }
  286. public function findWaybill($station, $waybill){
  287. $qb = $this->createQueryBuilder("dp")
  288. ->join("dp.parcel", "p")
  289. ->join("dp.delivery", "d")
  290. ->join("p.waybill", "w")
  291. ->join("w.fromStation", "ft")
  292. ->join("w.toStation", "tt")
  293. ->join("w.createdBy", "cb")
  294. ->join("w.transaction", "t")
  295. ->join("w.organization", "o")
  296. ->select("DISTINCT(w.id) as id")
  297. ->addSelect("w.senderName as sender_name")
  298. ->addSelect("w.senderPhoneNumber as sender_phone_number")
  299. ->addSelect("w.receiverName as receiver_name")
  300. ->addSelect("w.receiverPhoneNumber as receiver_phone_number")
  301. ->addSelect("ft.id as from_station")
  302. ->addSelect("tt.id as to_station")
  303. ->addSelect("w.createdAt as created_at")
  304. ->addSelect("cb.id as created_by")
  305. ->addSelect("t.id as transaction_id")
  306. ->addSelect("t.amount as amount")
  307. ->addSelect("w.isCollected as is_collected")
  308. ->addSelect("o.id as organization")
  309. ->addSelect("w.percelCount as parcel_count")
  310. ->addSelect("d.id as delivery_id")
  311. ->where("w.id =:waybill")
  312. ->andWhere("w.toStation =:toStation")
  313. // ->andWhere("ft.id =:fromStation OR tt.id =:toStation")
  314. ->setParameter("waybill", $waybill)
  315. ->setParameter("toStation", $station);
  316. try {
  317. return $qb
  318. ->getQuery()
  319. ->getSingleResult();
  320. } catch (NoResultException $e) {
  321. } catch (NonUniqueResultException $e) {
  322. }
  323. }
  324. public function findAllDeliveryWaybills($station,$lastDelivery){
  325. $qb = $this->createQueryBuilder("dp")
  326. ->join("dp.parcel","p")
  327. ->join("p.waybill", "w")
  328. ->join("w.fromStation", "ft")
  329. ->join("w.toStation", "tt")
  330. ->join("w.createdBy", "cb")
  331. ->join("w.transaction", "t")
  332. ->join("w.organization", "o")
  333. ->join("dp.delivery", "d")
  334. ->select("DISTINCT(w.id) as id")
  335. ->addSelect("w.senderName as sender_name")
  336. ->addSelect("w.senderPhoneNumber as sender_phone_number")
  337. ->addSelect("w.receiverName as receiver_name")
  338. ->addSelect("w.receiverPhoneNumber as receiver_phone_number")
  339. ->addSelect("ft.id as from_station")
  340. ->addSelect("tt.id as to_station")
  341. ->addSelect("w.createdAt as created_at")
  342. ->addSelect("cb.id as created_by")
  343. ->addSelect("t.id as transaction_id")
  344. ->addSelect("t.amount as amount")
  345. ->addSelect("w.isCollected as is_collected")
  346. ->addSelect("o.id as organization")
  347. ->addSelect("w.percelCount as parcel_count")
  348. ->where("d.id >:last_delivery")
  349. ->andWhere("d.destination =:destination")
  350. ->andWhere("d.isVerified = true")
  351. ->andWhere("w.isCollected = false")
  352. ->setParameter("last_delivery", $lastDelivery)
  353. ->setParameter("destination", $station);
  354. return $qb
  355. ->getQuery()
  356. ->execute();
  357. }
  358. public function findAllOneDeliveryWaybills($delivery_number){
  359. $qb = $this->createQueryBuilder("dp")
  360. ->join("dp.parcel","p")
  361. ->join("p.waybill", "w")
  362. ->join("w.fromStation", "ft")
  363. ->join("w.toStation", "tt")
  364. ->join("w.createdBy", "cb")
  365. ->join("w.transaction", "t")
  366. ->join("w.organization", "o")
  367. ->join("dp.delivery", "d")
  368. ->select("DISTINCT(w.id) as id")
  369. ->addSelect("w.senderName as sender_name")
  370. ->addSelect("w.senderPhoneNumber as sender_phone_number")
  371. ->addSelect("w.receiverName as receiver_name")
  372. ->addSelect("w.receiverPhoneNumber as receiver_phone_number")
  373. ->addSelect("ft.id as from_station")
  374. ->addSelect("tt.id as to_station")
  375. ->addSelect("w.createdAt as created_at")
  376. ->addSelect("cb.id as created_by")
  377. ->addSelect("t.id as transaction_id")
  378. ->addSelect("t.amount as amount")
  379. ->addSelect("w.isCollected as is_collected")
  380. ->addSelect("o.id as organization")
  381. ->addSelect("w.percelCount as parcel_count")
  382. ->where("d.id =:delivery_number")
  383. ->setParameter("delivery_number", $delivery_number);
  384. return $qb
  385. ->getQuery()
  386. ->execute();
  387. }
  388. public function unCollectedParcel($waybill) {
  389. $qb = $this->createQueryBuilder('dp');
  390. $qb->join('dp.parcel', 'p')
  391. ->join('p.waybill', 'w')
  392. ->join('dp.delivery', 'd');
  393. $qb->andWhere('d.isVerified = true')
  394. ->andWhere('p.waybill = :waybill')
  395. ->andWhere('dp.isReceived = true')
  396. ->andWhere('w.isCollected = false')
  397. ->setParameter('waybill', $waybill);
  398. return $qb
  399. ->getQuery()
  400. ->execute();
  401. }
  402. public function findUnReceivedParcels($stationID) {
  403. $qb = $this->createQueryBuilder('dp');
  404. $qb->join('dp.parcel', 'p')
  405. ->join('dp.delivery', 'd');
  406. $qb->andWhere('d.isReceivedFully = false')
  407. ->andWhere('d.isVerified = true')
  408. ->andWhere('dp.isReceived = false')
  409. ->andWhere('d.destination =:toStation')
  410. ->setParameter('toStation', $stationID);
  411. return $qb
  412. ->getQuery()
  413. ->execute();
  414. }
  415. public function findEnRouteDeliveries($filterRules, $fromStation, $offset, $rows): ?array
  416. {
  417. $conn = $this->getEntityManager()->getConnection();
  418. $additionalFilter = '';
  419. if (!empty($filterRules)){
  420. $filterRules = json_decode($filterRules);
  421. foreach($filterRules as $rule){
  422. $rule = get_object_vars($rule);
  423. $field = $rule['field'];
  424. // $fieldPlace = str_replace(".", "", $field);
  425. $op = $rule['op'];
  426. $value = $rule['value'];
  427. if ($value == 0 || !empty($value)){
  428. if ($op == 'contains'){
  429. $additionalFilter .= " AND ".$field." like'%".$value."%'";
  430. } else if($op == 'equal'){
  431. if($field == 'a.created_at')
  432. $additionalFilter .= " AND cast(".$field." as date) = cast('${value}' as date)";
  433. else
  434. $additionalFilter .= " AND ".$field."= ${value}";
  435. }else if($op == 'less'){
  436. if($field == 'a.created_at')
  437. $additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
  438. else
  439. $additionalFilter .= " AND ".$field." < ${value}";
  440. }else if($op == 'greater'){
  441. if($field == 'a.created_at')
  442. $additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
  443. else
  444. $additionalFilter .= " AND ".$field." > ${value}";
  445. }else if($op == 'greater_equal'){
  446. if($field == 'a.created_at')
  447. $additionalFilter .= " AND cast(".$field." as date) >= cast('${value}' as date)";
  448. else
  449. $additionalFilter .= " AND ".$field." >= ${value}";
  450. }
  451. }
  452. }
  453. }
  454. $sql = "SELECT b.id as id, e.station_name,b.parcel_count,b.created_at,
  455. b.is_verified,b.loaded_at,g.reg_number
  456. FROM delivery b
  457. JOIN delivery_vehicle d ON d.delivery_id = b.id
  458. JOIN station e ON e.id = b.destination
  459. JOIN station f ON f.id = b.origin_station
  460. JOIN vehicle g ON g.id = d.vehicle_id
  461. WHERE b.origin_station = ${fromStation} ${additionalFilter} ORDER BY b.id DESC LIMIT ${offset},${rows}";
  462. try {
  463. $stmt = $conn->prepare($sql);
  464. return $stmt->executeQuery()->fetchAllAssociative();
  465. } catch (Exception | \Doctrine\DBAL\Exception $e) {
  466. return null;
  467. }
  468. }
  469. public function findTotalEnRouteDeliveries($filterRules, $fromStation) {
  470. $qb = $this->createQueryBuilder('dp');
  471. $qb->join('dp.delivery', 'd')
  472. ->join('dp.parcel', 'p')
  473. ->join('d.deliveryVehicle', 'dv')
  474. ->join('d.destination', 'e')
  475. ->join('d.originStation', 'os')
  476. ->join('dv.vehicle', 'v')
  477. ->join('d.createdBy', 'cb')
  478. ->join('cb.person', 'up');
  479. $qb->select("count(d.id) as total");
  480. $qb->andWhere('d.isReceived = false')
  481. ->andWhere('d.originStation =:fromStation')
  482. ->setParameter('fromStation', $fromStation);
  483. if (!empty($filterRules) && !is_null($filterRules)){
  484. $filterRules = json_decode($filterRules);
  485. foreach($filterRules as $rule){
  486. $rule = get_object_vars($rule);
  487. $field = $rule['field'];
  488. $fieldPlace = str_replace(".", "", $field);
  489. $op = $rule['op'];
  490. $value = $rule['value'];
  491. if (!empty($value)){
  492. if ($op == 'contains'){
  493. $qb->andWhere($field." LIKE :".$fieldPlace);
  494. $qb->setParameter($fieldPlace, '%'.$value.'%');
  495. } else if($op == 'equal'){
  496. if($value > 0) {
  497. $qb->andWhere($field."=".$value);
  498. // $qb->setParameter($field, $value);
  499. }
  500. }else if($op == 'less'){
  501. if($value > 0) {
  502. $qb->andWhere($field."<".$value);
  503. // $qb->setParameter($field, $value);
  504. }
  505. }else if($op == 'greater'){
  506. if($value > 0) {
  507. $qb->andWhere($field.">".$value);
  508. // $qb->setParameter($field, $value);
  509. }
  510. }
  511. }
  512. }
  513. }
  514. return $qb->getQuery()
  515. ->getSingleScalarResult();
  516. }
  517. public function findDeliveryParcels($delivery_id) {
  518. $qb = $this->createQueryBuilder('dp');
  519. $qb->join('dp.parcel', 'p')
  520. ->join('dp.delivery', 'd')
  521. ->join('p.waybill', 'w')
  522. ->join('w.toStation', 'ts')
  523. ->join('w.transaction', 't');
  524. $qb->select("w.id as id")
  525. ->addSelect('ts.stationName as station_name')
  526. ->addSelect('w.senderName as sender_name')
  527. ->addSelect('w.senderPhoneNumber as sender_phone_number')
  528. ->addSelect('w.receiverName as receiver_name')
  529. ->addSelect('w.receiverPhoneNumber as receiver_phone_number')
  530. ->addSelect('p.description');
  531. $qb->where('d.id =:delivery_id')
  532. ->setParameter('delivery_id', $delivery_id);
  533. return
  534. $qb->getQuery()
  535. ->execute();
  536. }
  537. public function findEnRouteParcels($filterRules, $fromStation, $offset, $rows) {
  538. $qb = $this->createQueryBuilder('dp');
  539. $qb->join('dp.parcel', 'p')
  540. ->join('dp.delivery', 'd')
  541. ->join('d.deliveryVehicle', 'dv')
  542. ->join('dv.vehicle', 'v')
  543. ->join('p.waybill', 'w')
  544. ->join('w.toStation', 'ts')
  545. ->join('w.transaction', 't');
  546. $qb->select("w.id as id")
  547. ->addSelect('ts.stationName as station_name')
  548. ->addSelect('w.senderName as sender_name')
  549. ->addSelect('w.senderPhoneNumber as sender_phone_number')
  550. ->addSelect('w.receiverName as receiver_name')
  551. ->addSelect('w.receiverPhoneNumber as receiver_phone_number')
  552. ->addSelect('p.description')
  553. ->addSelect('d.id as delivery_id')
  554. ->addSelect('v.regNumber as reg_number');
  555. $qb->andWhere('d.isReceived = false')
  556. ->andWhere('d.isVerified = true')
  557. ->andWhere('d.originStation =:fromStation')
  558. ->setParameter('fromStation', $fromStation);
  559. if (!empty($filterRules) && !is_null($filterRules)){
  560. $filterRules = json_decode($filterRules);
  561. foreach($filterRules as $rule){
  562. $rule = get_object_vars($rule);
  563. $field = $rule['field'];
  564. $fieldPlace = str_replace(".", "", $field);
  565. $op = $rule['op'];
  566. $value = $rule['value'];
  567. if (!empty($value)){
  568. if ($op == 'contains'){
  569. $qb->andWhere($field." LIKE :".$fieldPlace);
  570. $qb->setParameter($fieldPlace, '%'.$value.'%');
  571. } else if($op == 'equal'){
  572. if($value > 0) {
  573. $qb->andWhere($field."=".$value);
  574. // $qb->setParameter($field, $value);
  575. }
  576. }else if($op == 'less'){
  577. if($value > 0) {
  578. $qb->andWhere($field."<".$value);
  579. // $qb->setParameter($field, $value);
  580. }
  581. }else if($op == 'greater'){
  582. if($value > 0) {
  583. $qb->andWhere($field.">".$value);
  584. // $qb->setParameter($field, $value);
  585. }
  586. }
  587. }
  588. }
  589. }
  590. return $qb
  591. ->setFirstResult($offset)
  592. ->setMaxResults($rows)
  593. ->getQuery()
  594. ->execute();
  595. }
  596. public function findTotalEnRouteParcels($filterRules, $fromStation) {
  597. $qb = $this->createQueryBuilder('dp')
  598. ->select('count(t.id)');
  599. $qb->join('dp.parcel', 'p')
  600. ->join('dp.delivery', 'd')
  601. ->join('d.deliveryVehicle', 'dv')
  602. ->join('p.waybill', 'w')
  603. ->join('w.transaction', 't');
  604. $qb->andWhere('d.isReceived = false')
  605. ->andWhere('d.isVerified = true')
  606. ->andWhere('d.originStation =:fromStation')
  607. ->setParameter('fromStation', $fromStation);
  608. if (!empty($filterRules) && !is_null($filterRules)){
  609. $filterRules = json_decode($filterRules);
  610. foreach($filterRules as $rule){
  611. $rule = get_object_vars($rule);
  612. $field = $rule['field'];
  613. $fieldPlace = str_replace(".", "", $field);
  614. $op = $rule['op'];
  615. $value = $rule['value'];
  616. if (!empty($value)){
  617. if ($op == 'contains'){
  618. $qb->andWhere($field." LIKE :".$fieldPlace);
  619. $qb->setParameter($fieldPlace, '%'.$value.'%');
  620. } else if($op == 'equal'){
  621. if($value > 0) {
  622. $qb->andWhere($field."=".$value);
  623. // $qb->setParameter($field, $value);
  624. }
  625. }else if($op == 'less'){
  626. if($value > 0) {
  627. $qb->andWhere($field."<".$value);
  628. // $qb->setParameter($field, $value);
  629. }
  630. }else if($op == 'greater'){
  631. if($value > 0) {
  632. $qb->andWhere($field.">".$value);
  633. // $qb->setParameter($field, $value);
  634. }
  635. }
  636. }
  637. }
  638. }
  639. try {
  640. return $qb->getQuery()
  641. ->getSingleScalarResult();
  642. } catch (NoResultException $e) {
  643. } catch (NonUniqueResultException $e) {
  644. }
  645. }
  646. public function findIncomingParcels($filterRules, $toStation, $offset, $rows) {
  647. $conn = $this->getEntityManager()->getConnection();
  648. $additionalFilter = '';
  649. if (!empty($filterRules)){
  650. $filterRules = json_decode($filterRules);
  651. foreach($filterRules as $rule){
  652. $rule = get_object_vars($rule);
  653. $field = $rule['field'];
  654. // $fieldPlace = str_replace(".", "", $field);
  655. $op = $rule['op'];
  656. $value = $rule['value'];
  657. if ($value == 0 || !empty($value)){
  658. if ($op == 'contains'){
  659. $additionalFilter .= " AND ".$field." like'%".$value."%'";
  660. } else if($op == 'equal'){
  661. if($field == 'a.created_at')
  662. $additionalFilter .= " AND cast(".$field." as date) = cast('${value}' as date)";
  663. else
  664. $additionalFilter .= " AND ".$field."= ${value}";
  665. }else if($op == 'less'){
  666. if($field == 'a.created_at')
  667. $additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
  668. else
  669. $additionalFilter .= " AND ".$field." < ${value}";
  670. }else if($op == 'greater'){
  671. if($field == 'a.created_at')
  672. $additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
  673. else
  674. $additionalFilter .= " AND ".$field." > ${value}";
  675. }else if($op == 'greater_equal'){
  676. if($field == 'a.created_at')
  677. $additionalFilter .= " AND cast(".$field." as date) >= cast('${value}' as date)";
  678. else
  679. $additionalFilter .= " AND ".$field." >= ${value}";
  680. }
  681. }
  682. }
  683. }
  684. $sql = "SELECT distinct(b.id) as id, f.station_name,
  685. i.first_name,i.second_name,i.sir_name,b.parcel_count,b.created_at,
  686. b.is_verified,b.loaded_at,g.reg_number
  687. FROM delivery b
  688. JOIN delivery_parcel a ON b.id = a.delivery_id
  689. JOIN parcel c ON c.id = a.parcel_id
  690. JOIN delivery_vehicle d ON d.id = b.id
  691. JOIN station e ON e.id = b.destination
  692. JOIN station f ON f.id = b.origin_station
  693. JOIN vehicle g ON g.id = d.vehicle_id
  694. JOIN user h ON h.id = a.created_by
  695. JOIN person i ON i.id = h.person_id
  696. WHERE b.destination = ${toStation} ${additionalFilter} ORDER BY b.id DESC LIMIT ${offset},${rows}";
  697. try {
  698. $stmt = $conn->prepare($sql);
  699. return $stmt->executeQuery()->fetchAllAssociative();
  700. } catch (Exception | \Doctrine\DBAL\Exception $e) {
  701. return null;
  702. }
  703. }
  704. public function findTotalIncomingParcels($filterRules, $toStation) {
  705. $qb = $this->createQueryBuilder('dp')
  706. ->select('count(t.id)');
  707. $qb->join('dp.parcel', 'p')
  708. ->join('dp.delivery', 'd')
  709. ->join('p.waybill', 'w')
  710. ->join('w.transaction', 't');
  711. $qb->andWhere('d.isReceivedFully = false')
  712. ->andWhere('w.isCollected = false')
  713. ->andWhere('d.isVerified = true')
  714. ->andWhere('d.destination =:toStation')
  715. ->setParameter('toStation', $toStation);
  716. if (!empty($filterRules) && !is_null($filterRules)){
  717. $filterRules = json_decode($filterRules);
  718. foreach($filterRules as $rule){
  719. $rule = get_object_vars($rule);
  720. $field = $rule['field'];
  721. $fieldPlace = str_replace(".", "", $field);
  722. $op = $rule['op'];
  723. $value = $rule['value'];
  724. if (!empty($value)){
  725. if ($op == 'contains'){
  726. $qb->andWhere($field." LIKE :".$fieldPlace);
  727. $qb->setParameter($fieldPlace, '%'.$value.'%');
  728. } else if($op == 'equal'){
  729. if($value > 0) {
  730. $qb->andWhere($field."=".$value);
  731. // $qb->setParameter($field, $value);
  732. }
  733. }else if($op == 'less'){
  734. if($value > 0) {
  735. $qb->andWhere($field."<".$value);
  736. // $qb->setParameter($field, $value);
  737. }
  738. }else if($op == 'greater'){
  739. if($value > 0) {
  740. $qb->andWhere($field.">".$value);
  741. // $qb->setParameter($field, $value);
  742. }
  743. }
  744. }
  745. }
  746. }
  747. try {
  748. return $qb->getQuery()
  749. ->getSingleScalarResult();
  750. } catch (NoResultException $e) {
  751. } catch (NonUniqueResultException $e) {
  752. }
  753. }
  754. public function findReceivedParcels($filterRules, $stationTo, $offset, $rows) {
  755. $qb = $this->createQueryBuilder('dp');
  756. $qb->join('dp.parcel', 'p')
  757. ->join('dp.delivery', 'd')
  758. ->join('d.deliveryVehicle', 'dv')
  759. ->join('p.waybill', 'w')
  760. ->join('w.transaction', 't');
  761. $qb->andWhere('d.isReceived = true')
  762. ->andWhere('w.isCollected = false')
  763. ->andWhere('d.isVerified = true')
  764. ->andWhere('d.destination =:toStation')
  765. ->setParameter('toStation', $stationTo);
  766. if (!empty($filterRules) && !is_null($filterRules)){
  767. $filterRules = json_decode($filterRules);
  768. foreach($filterRules as $rule){
  769. $rule = get_object_vars($rule);
  770. $field = $rule['field'];
  771. $fieldPlace = str_replace(".", "", $field);
  772. $op = $rule['op'];
  773. $value = $rule['value'];
  774. if (!empty($value)){
  775. if ($op == 'contains'){
  776. $qb->andWhere($field." LIKE :".$fieldPlace);
  777. $qb->setParameter($fieldPlace, '%'.$value.'%');
  778. } else if($op == 'equal'){
  779. if($value > 0) {
  780. $qb->andWhere($field."=".$value);
  781. // $qb->setParameter($field, $value);
  782. }
  783. }else if($op == 'less'){
  784. if($value > 0) {
  785. $qb->andWhere($field."<".$value);
  786. // $qb->setParameter($field, $value);
  787. }
  788. }else if($op == 'greater'){
  789. if($value > 0) {
  790. $qb->andWhere($field.">".$value);
  791. // $qb->setParameter($field, $value);
  792. }
  793. }
  794. }
  795. }
  796. }
  797. return
  798. $qb
  799. ->setFirstResult($offset)
  800. ->setMaxResults($rows)
  801. ->getQuery()
  802. ->execute();
  803. }
  804. public function findTotalReceivedParcels($filterRules, $toStation) {
  805. $qb = $this->createQueryBuilder('dp')
  806. ->select('count(t.id)');
  807. $qb->join('dp.parcel', 'p')
  808. ->join('dp.delivery', 'd')
  809. ->join('p.waybill', 'w')
  810. ->join('w.transaction', 't');
  811. $qb->andWhere('d.isReceived = true')
  812. ->andWhere('w.isCollected = false')
  813. ->andWhere('d.isVerified = true')
  814. ->andWhere('d.destination =:toStation')
  815. ->setParameter('toStation', $toStation);
  816. if (!empty($filterRules) && !is_null($filterRules)){
  817. $filterRules = json_decode($filterRules);
  818. foreach($filterRules as $rule){
  819. $rule = get_object_vars($rule);
  820. $field = $rule['field'];
  821. $fieldPlace = str_replace(".", "", $field);
  822. $op = $rule['op'];
  823. $value = $rule['value'];
  824. if (!empty($value)){
  825. if ($op == 'contains'){
  826. $qb->andWhere($field." LIKE :".$fieldPlace);
  827. $qb->setParameter($fieldPlace, '%'.$value.'%');
  828. } else if($op == 'equal'){
  829. if($value > 0) {
  830. $qb->andWhere($field."=".$value);
  831. // $qb->setParameter($field, $value);
  832. }
  833. }else if($op == 'less'){
  834. if($value > 0) {
  835. $qb->andWhere($field."<".$value);
  836. // $qb->setParameter($field, $value);
  837. }
  838. }else if($op == 'greater'){
  839. if($value > 0) {
  840. $qb->andWhere($field.">".$value);
  841. // $qb->setParameter($field, $value);
  842. }
  843. }
  844. }
  845. }
  846. }
  847. try {
  848. return $qb->getQuery()
  849. ->getSingleScalarResult();
  850. } catch (NoResultException $e) {
  851. } catch (NonUniqueResultException $e) {
  852. }
  853. }
  854. public function findCollectedParcels($filterRules, $stationTo, $offset, $rows) {
  855. $conn = $this->getEntityManager()->getConnection();
  856. $additionalFilter = '';
  857. if (!empty($filterRules)){
  858. $filterRules = json_decode($filterRules);
  859. foreach($filterRules as $rule){
  860. $rule = get_object_vars($rule);
  861. $field = $rule['field'];
  862. // $fieldPlace = str_replace(".", "", $field);
  863. $op = $rule['op'];
  864. $value = $rule['value'];
  865. if ($value == 0 || !empty($value)){
  866. if ($op == 'contains'){
  867. $additionalFilter .= " AND ".$field." like'%".$value."%'";
  868. } else if($op == 'equal'){
  869. if($field == 'a.created_at')
  870. $additionalFilter .= " AND cast(".$field." as date) = cast('${value}' as date)";
  871. else
  872. $additionalFilter .= " AND ".$field."= ${value}";
  873. }else if($op == 'less'){
  874. if($field == 'a.created_at')
  875. $additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
  876. else
  877. $additionalFilter .= " AND ".$field." < ${value}";
  878. }else if($op == 'greater'){
  879. if($field == 'a.created_at')
  880. $additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
  881. else
  882. $additionalFilter .= " AND ".$field." > ${value}";
  883. }else if($op == 'greater_equal'){
  884. if($field == 'a.created_at')
  885. $additionalFilter .= " AND cast(".$field." as date) >= cast('${value}' as date)";
  886. else
  887. $additionalFilter .= " AND ".$field." >= ${value}";
  888. }
  889. }
  890. }
  891. }
  892. $sql = "SELECT b.way_bill_id as waybill, a.delivery_id, e.sender_name,e.sender_phone_number,e.receiver_name,e.receiver_phone_number,
  893. h.station_name,b.description, c.parcel_count
  894. FROM delivery_parcel a
  895. JOIN parcel b on a.parcel_id = b.id
  896. JOIN delivery c ON a.delivery_id = c.id
  897. JOIN way_bill e ON e.id = b.way_bill_id
  898. JOIN transaction f ON f.way_bill_id = e.id
  899. JOIN station h ON h.id = e.from_station_id
  900. WHERE c.is_received = 1 AND c.is_cancelled = 0 AND e.is_collected = 1 AND c.is_verified = 1 AND c.destination = :station ${additionalFilter} ORDER BY e.id DESC LIMIT ${offset},${rows}";
  901. $sql_count = "EXPLAIN SELECT count(a.id) as total_count
  902. FROM delivery_parcel a
  903. JOIN parcel b on a.parcel_id = b.id
  904. JOIN delivery c ON a.delivery_id = c.id
  905. JOIN delivery_vehicle d ON a.delivery_id = d.delivery_id
  906. JOIN way_bill e ON e.id = b.way_bill_id
  907. JOIN transaction f ON f.way_bill_id = e.id
  908. JOIN collected_parcel g ON g.waybill_id = e.id
  909. JOIN station h ON h.id = e.from_station_id
  910. WHERE c.is_received = true AND c.is_cancelled = false AND e.is_collected = true AND c.is_verified = true AND c.destination = :station ${additionalFilter} ORDER BY e.id DESC LIMIT ${offset},${rows}";
  911. try {
  912. $stmt = $conn->prepare($sql);
  913. $results = $stmt->executeQuery(['station' => $stationTo])->fetchAllAssociative();
  914. $stmt = $conn->prepare($sql_count);
  915. $resultCount = $stmt->executeQuery(['station' => $stationTo])->fetchAssociative();
  916. // dump($resultCount); die;
  917. return [
  918. 'results' => $results,
  919. 'total_count' => $resultCount['rows']
  920. ];
  921. } catch (Exception | \Doctrine\DBAL\Exception $e) {
  922. return null;
  923. }
  924. }
  925. }