<?php
/**
* Created by PhpStorm.
* User: parcel
* Date: 1/23/19
* Time: 7:35 AM
*/
namespace App\Repository;
use App\Entity\Delivery;
use Doctrine\DBAL\Exception;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\NoResultException;
class DeliveryParcelRepository extends EntityRepository{
public function deliveryParcels(Delivery $delivery) {
$qb = $this->createQueryBuilder('dp');
$qb->join("dp.parcel", "p")
->join("dp.delivery", "d")
->join("dp.createdBy", "cb")
->select("p.id as parcel")
->addSelect("dp.id as id")
->addSelect("d.id as delivery")
->addSelect("dp.isCancelled as is_cancelled")
->addSelect("dp.cancelledBecause as cancelled_because")
->addSelect("cb.id as created_by")
->where("dp.delivery=:delivery")
->setParameter("delivery", $delivery);
return $qb
->getQuery()
->execute();
}
public function outGoingDeliveryParcels($station, $lastDelivery) {
$qb = $this->createQueryBuilder('dp');
$qb->join("dp.parcel", "p")
->join('p.waybill', 'w')
->join("dp.delivery", "d")
->join("dp.createdBy", "cb")
->select("p.id as parcel")
->addSelect("dp.id as online_id")
->addSelect("d.id as delivery")
->addSelect("dp.isCancelled as is_cancelled")
->addSelect("dp.cancelledBecause as cancelled_because")
->addSelect('d.isReceivedFully as is_received_fully')
->addSelect('dp.isReceived as is_received')
->addSelect("cb.id as created_by")
->where("d.originStation=:station")
->andWhere('d.isVerified = false')
->andWhere("d.id >:last_delivery")
->setParameter("last_delivery", $lastDelivery)
->setParameter("station", $station);
return $qb
->getQuery()
->execute();
}
public function getDeliveryParcels($delivery) {
$qb = $this->createQueryBuilder('dp');
$qb->join("dp.parcel", "p")
->join('p.waybill', 'w')
->join('w.transaction', 'transaction')
->join('w.toStation', 'toStation')
->join("dp.delivery", "d")
->join("dp.createdBy", "cb")
->join("cb.person", "person")
->select("dp.id as id")
->addSelect("w.id as waybill")
->addSelect("toStation.stationName as to_station_name")
->addSelect("transaction.amount as amount")
->addSelect("d.id as delivery")
->addSelect("p.id as parcel_id")
->addSelect("dp.isCancelled as is_cancelled")
->addSelect("dp.cancelledBecause as cancelled_because")
->addSelect("person.firstName as created_by")
->addSelect("p.description as description")
->where("d.id =:delivery")
->setParameter("delivery", $delivery);
return $qb
->getQuery()
->execute();
}
public function deliveryIncomingParcels($station, $lastDelivery) {
$qb = $this->createQueryBuilder('dp');
$qb->join("dp.parcel", "p")
->join('p.waybill', 'w')
->join("dp.delivery", "d")
->join("dp.createdBy", "cb")
->select("p.id as parcel")
->addSelect("dp.id as id")
->addSelect("d.id as delivery")
->addSelect("dp.isCancelled as is_cancelled")
->addSelect("dp.cancelledBecause as cancelled_because")
->addSelect('d.isReceivedFully as is_received_fully')
->addSelect('dp.isReceived as is_received')
->addSelect("cb.id as created_by")
->where("d.destination=:station")
->andWhere('d.isCancelled = false')
->andWhere('d.isVerified = true')
->andWhere('d.id >:last_delivery')
// ->andWhere('d.isReceived = false')
->andWhere('w.isCollected = false')
// ->andWhere('dp.id >:last_id')
->setParameter('last_delivery', $lastDelivery)
->setParameter("station", $station);
return $qb
->getQuery()
->execute();
}
public function commonDeliveryIncomingParcels($delivery_id) {
$qb = $this->createQueryBuilder('dp');
$qb->join("dp.parcel", "p")
->join("dp.delivery", "d")
->join("dp.createdBy", "cb")
->join('p.waybill', 'w')
->join("w.fromStation", "ft")
->join("w.toStation", "tt")
->join("w.transaction", "t")
->join("w.organization", "o")
->select("dp.id as id")
->addSelect("d.id as delivery")
->addSelect('dp.isReceived as is_received')
->addSelect("cb.id as created_by")
// Beginning incoming parcel
->addSelect("p.id as parcel")
->addSelect("dp.isCancelled as is_cancelled")
->addSelect("dp.cancelledBecause as cancelled_because")
->addSelect("p.description as description")
->addSelect('d.isReceivedFully as is_received_fully')
->addSelect('p.number as number')
// Beginning waybill
->addSelect("w.id as waybill")
->addSelect("w.senderName as sender_name")
->addSelect("w.senderPhoneNumber as sender_phone_number")
->addSelect("w.receiverName as receiver_name")
->addSelect("w.receiverPhoneNumber as receiver_phone_number")
->addSelect("ft.id as from_station")
->addSelect("tt.id as to_station")
->addSelect("tt.stationName as to_station_name")
->addSelect("DATE_FORMAT(w.createdAt, '%Y-%m-%d %H:%i:%s') as created_at")
->addSelect("t.id as transaction_id")
->addSelect("t.amount as amount")
->addSelect("w.isCollected as is_collected")
->addSelect("o.id as organization")
->addSelect("w.percelCount as parcel_count")
->where('d.isCancelled = false')
->andWhere('dp.isCancelled = false')
->andWhere('d.isVerified = true')
->andWhere('d.id = :delivery')
->setParameter('delivery', $delivery_id);
return $qb
->getQuery()
->execute();
}
public function oneDeliveryIncomingParcels($delivery_number) {
$qb = $this->createQueryBuilder('dp');
$qb->join("dp.parcel", "p")
->join('p.waybill', 'w')
->join("dp.delivery", "d")
->join("dp.createdBy", "cb")
->select("p.id as parcel")
->addSelect("dp.id as id")
->addSelect("d.id as delivery")
->addSelect("dp.isCancelled as is_cancelled")
->addSelect("dp.cancelledBecause as cancelled_because")
->addSelect('d.isReceivedFully as is_received_fully')
->addSelect('dp.isReceived as is_received')
->addSelect("cb.id as created_by")
->where("d.id=:delivery_number")
->setParameter('delivery_number', $delivery_number);
return $qb
->getQuery()
->execute();
}
public function getOutGoingParcels($station, $lastWaybill) {
$qb = $this->createQueryBuilder("dp")
->join("dp.parcel", "p")
->join("p.waybill", "w")
->select("p.id")
->addSelect("w.id as waybill")
->addSelect("p.number as number")
->addSelect("p.isInDelivery as is_in_delivery")
->addSelect("p.description")
->addSelect("p.createdAt as created_at")
->where("w.id >:lastWaybill")
->andWhere("w.fromStation =:fromStation")
->andWhere("w.createdAt >:today")
->setParameter("today", new \DateTime("-5 days"))
->setParameter("fromStation", $station)
->setParameter("lastWaybill", $lastWaybill);
return $qb
->getQuery()
->execute();
}
public function getIncomingParcels($station, $lastDelivery) {
$qb = $this->createQueryBuilder("dp")
->join("dp.parcel", "p")
->join("p.waybill", "w")
->join("dp.delivery", "d")
->select("distinct(p.id) as id")
->addSelect("w.id as waybill")
->addSelect("p.number as number")
->addSelect("p.isInDelivery as is_in_delivery")
->addSelect("p.description")
->addSelect("p.createdAt as created_at")
->where("d.id >:last_delivery")
->andWhere('dp.isCancelled = false')
->andWhere("d.destination =:destination")
->andWhere("w.isCollected = false")
->andWhere("d.isVerified = true")
// ->andWhere("w.createdAt >:today")
// ->setParameter("today", new \DateTime("-5 days"))
->setParameter("destination", $station)
->setParameter("last_delivery", $lastDelivery);
return $qb
->getQuery()
->execute();
}
public function getOneDeliveryIncomingParcels($delivery_number) {
$qb = $this->createQueryBuilder("dp")
->join("dp.parcel", "p")
->join("p.waybill", "w")
->join("dp.delivery", "d")
->select("distinct(p.id) as id")
->addSelect("w.id as waybill")
->addSelect("p.number as number")
->addSelect("p.isInDelivery as is_in_delivery")
->addSelect("p.description")
->addSelect("p.createdAt as created_at")
->where("d.id = :delivery_number")
->setParameter("delivery_number", $delivery_number);
return $qb
->getQuery()
->execute();
}
public function incomingParcels($station, $lastDelivery) {
$qb = $this->createQueryBuilder("dp")
->join("dp.delivery", "d")
->join("dp.parcel", "p")
->join("p.waybill", "w")
->select("p.id")
->addSelect("w.id as waybill")
->addSelect("p.number as number")
->addSelect("p.isInDelivery as is_in_delivery")
->addSelect("p.description")
->addSelect("p.createdAt as created_at")
->where("d.id >:last_delivery")
->andWhere("d.destination =:destination")
->andWhere("d.isReceivedFully = false")
->andWhere("d.isVerified = true")
->setParameter("last_delivery", $lastDelivery)
->setParameter("destination", $station);
return $qb
->getQuery()
->execute();
}
public function findAllWaybills($last_id, $station){
$qb = $this->createQueryBuilder("dp")
->join("dp.parcel", "p")
->join("p.waybill", "w")
->join("w.fromStation", "ft")
->join("w.toStation", "tt")
->join("w.createdBy", "cb")
->join("w.transaction", "t")
->join("w.organization", "o")
->select("DISTINCT(w.id) as id")
->addSelect("w.senderName as sender_name")
->addSelect("w.senderPhoneNumber as sender_phone_number")
->addSelect("w.receiverName as receiver_name")
->addSelect("w.receiverPhoneNumber as receiver_phone_number")
->addSelect("ft.id as from_station")
->addSelect("tt.id as to_station")
->addSelect("w.createdAt as created_at")
->addSelect("cb.id as created_by")
->addSelect("t.id as transaction_id")
->addSelect("t.amount as amount")
->addSelect("w.isCollected as is_collected")
->addSelect("o.id as organization")
->addSelect("w.percelCount as parcel_count")
->where("w.id > :lastID")
->andWhere("w.toStation =:toStation")
// ->andWhere("ft.id =:fromStation OR tt.id =:toStation")
->setParameter("lastID", $last_id)
->setParameter("toStation", $station);
return $qb
->getQuery()
->execute();
}
public function findWaybill($station, $waybill){
$qb = $this->createQueryBuilder("dp")
->join("dp.parcel", "p")
->join("dp.delivery", "d")
->join("p.waybill", "w")
->join("w.fromStation", "ft")
->join("w.toStation", "tt")
->join("w.createdBy", "cb")
->join("w.transaction", "t")
->join("w.organization", "o")
->select("DISTINCT(w.id) as id")
->addSelect("w.senderName as sender_name")
->addSelect("w.senderPhoneNumber as sender_phone_number")
->addSelect("w.receiverName as receiver_name")
->addSelect("w.receiverPhoneNumber as receiver_phone_number")
->addSelect("ft.id as from_station")
->addSelect("tt.id as to_station")
->addSelect("w.createdAt as created_at")
->addSelect("cb.id as created_by")
->addSelect("t.id as transaction_id")
->addSelect("t.amount as amount")
->addSelect("w.isCollected as is_collected")
->addSelect("o.id as organization")
->addSelect("w.percelCount as parcel_count")
->addSelect("d.id as delivery_id")
->where("w.id =:waybill")
->andWhere("w.toStation =:toStation")
// ->andWhere("ft.id =:fromStation OR tt.id =:toStation")
->setParameter("waybill", $waybill)
->setParameter("toStation", $station);
try {
return $qb
->getQuery()
->getSingleResult();
} catch (NoResultException $e) {
} catch (NonUniqueResultException $e) {
}
}
public function findAllDeliveryWaybills($station,$lastDelivery){
$qb = $this->createQueryBuilder("dp")
->join("dp.parcel","p")
->join("p.waybill", "w")
->join("w.fromStation", "ft")
->join("w.toStation", "tt")
->join("w.createdBy", "cb")
->join("w.transaction", "t")
->join("w.organization", "o")
->join("dp.delivery", "d")
->select("DISTINCT(w.id) as id")
->addSelect("w.senderName as sender_name")
->addSelect("w.senderPhoneNumber as sender_phone_number")
->addSelect("w.receiverName as receiver_name")
->addSelect("w.receiverPhoneNumber as receiver_phone_number")
->addSelect("ft.id as from_station")
->addSelect("tt.id as to_station")
->addSelect("w.createdAt as created_at")
->addSelect("cb.id as created_by")
->addSelect("t.id as transaction_id")
->addSelect("t.amount as amount")
->addSelect("w.isCollected as is_collected")
->addSelect("o.id as organization")
->addSelect("w.percelCount as parcel_count")
->where("d.id >:last_delivery")
->andWhere("d.destination =:destination")
->andWhere("d.isVerified = true")
->andWhere("w.isCollected = false")
->setParameter("last_delivery", $lastDelivery)
->setParameter("destination", $station);
return $qb
->getQuery()
->execute();
}
public function findAllOneDeliveryWaybills($delivery_number){
$qb = $this->createQueryBuilder("dp")
->join("dp.parcel","p")
->join("p.waybill", "w")
->join("w.fromStation", "ft")
->join("w.toStation", "tt")
->join("w.createdBy", "cb")
->join("w.transaction", "t")
->join("w.organization", "o")
->join("dp.delivery", "d")
->select("DISTINCT(w.id) as id")
->addSelect("w.senderName as sender_name")
->addSelect("w.senderPhoneNumber as sender_phone_number")
->addSelect("w.receiverName as receiver_name")
->addSelect("w.receiverPhoneNumber as receiver_phone_number")
->addSelect("ft.id as from_station")
->addSelect("tt.id as to_station")
->addSelect("w.createdAt as created_at")
->addSelect("cb.id as created_by")
->addSelect("t.id as transaction_id")
->addSelect("t.amount as amount")
->addSelect("w.isCollected as is_collected")
->addSelect("o.id as organization")
->addSelect("w.percelCount as parcel_count")
->where("d.id =:delivery_number")
->setParameter("delivery_number", $delivery_number);
return $qb
->getQuery()
->execute();
}
public function unCollectedParcel($waybill) {
$qb = $this->createQueryBuilder('dp');
$qb->join('dp.parcel', 'p')
->join('p.waybill', 'w')
->join('dp.delivery', 'd');
$qb->andWhere('d.isVerified = true')
->andWhere('p.waybill = :waybill')
->andWhere('dp.isReceived = true')
->andWhere('w.isCollected = false')
->setParameter('waybill', $waybill);
return $qb
->getQuery()
->execute();
}
public function findUnReceivedParcels($stationID) {
$qb = $this->createQueryBuilder('dp');
$qb->join('dp.parcel', 'p')
->join('dp.delivery', 'd');
$qb->andWhere('d.isReceivedFully = false')
->andWhere('d.isVerified = true')
->andWhere('dp.isReceived = false')
->andWhere('d.destination =:toStation')
->setParameter('toStation', $stationID);
return $qb
->getQuery()
->execute();
}
public function findEnRouteDeliveries($filterRules, $fromStation, $offset, $rows): ?array
{
$conn = $this->getEntityManager()->getConnection();
$additionalFilter = '';
if (!empty($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
// $fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if ($value == 0 || !empty($value)){
if ($op == 'contains'){
$additionalFilter .= " AND ".$field." like'%".$value."%'";
} else if($op == 'equal'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) = cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field."= ${value}";
}else if($op == 'less'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." < ${value}";
}else if($op == 'greater'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." > ${value}";
}else if($op == 'greater_equal'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) >= cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." >= ${value}";
}
}
}
}
$sql = "SELECT b.id as id, e.station_name,b.parcel_count,b.created_at,
b.is_verified,b.loaded_at,g.reg_number
FROM delivery b
JOIN delivery_vehicle d ON d.delivery_id = b.id
JOIN station e ON e.id = b.destination
JOIN station f ON f.id = b.origin_station
JOIN vehicle g ON g.id = d.vehicle_id
WHERE b.origin_station = ${fromStation} ${additionalFilter} ORDER BY b.id DESC LIMIT ${offset},${rows}";
try {
$stmt = $conn->prepare($sql);
return $stmt->executeQuery()->fetchAllAssociative();
} catch (Exception | \Doctrine\DBAL\Exception $e) {
return null;
}
}
public function findTotalEnRouteDeliveries($filterRules, $fromStation) {
$qb = $this->createQueryBuilder('dp');
$qb->join('dp.delivery', 'd')
->join('dp.parcel', 'p')
->join('d.deliveryVehicle', 'dv')
->join('d.destination', 'e')
->join('d.originStation', 'os')
->join('dv.vehicle', 'v')
->join('d.createdBy', 'cb')
->join('cb.person', 'up');
$qb->select("count(d.id) as total");
$qb->andWhere('d.isReceived = false')
->andWhere('d.originStation =:fromStation')
->setParameter('fromStation', $fromStation);
if (!empty($filterRules) && !is_null($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
$fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if (!empty($value)){
if ($op == 'contains'){
$qb->andWhere($field." LIKE :".$fieldPlace);
$qb->setParameter($fieldPlace, '%'.$value.'%');
} else if($op == 'equal'){
if($value > 0) {
$qb->andWhere($field."=".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'less'){
if($value > 0) {
$qb->andWhere($field."<".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'greater'){
if($value > 0) {
$qb->andWhere($field.">".$value);
// $qb->setParameter($field, $value);
}
}
}
}
}
return $qb->getQuery()
->getSingleScalarResult();
}
public function findDeliveryParcels($delivery_id) {
$qb = $this->createQueryBuilder('dp');
$qb->join('dp.parcel', 'p')
->join('dp.delivery', 'd')
->join('p.waybill', 'w')
->join('w.toStation', 'ts')
->join('w.transaction', 't');
$qb->select("w.id as id")
->addSelect('ts.stationName as station_name')
->addSelect('w.senderName as sender_name')
->addSelect('w.senderPhoneNumber as sender_phone_number')
->addSelect('w.receiverName as receiver_name')
->addSelect('w.receiverPhoneNumber as receiver_phone_number')
->addSelect('p.description');
$qb->where('d.id =:delivery_id')
->setParameter('delivery_id', $delivery_id);
return
$qb->getQuery()
->execute();
}
public function findEnRouteParcels($filterRules, $fromStation, $offset, $rows) {
$qb = $this->createQueryBuilder('dp');
$qb->join('dp.parcel', 'p')
->join('dp.delivery', 'd')
->join('d.deliveryVehicle', 'dv')
->join('dv.vehicle', 'v')
->join('p.waybill', 'w')
->join('w.toStation', 'ts')
->join('w.transaction', 't');
$qb->select("w.id as id")
->addSelect('ts.stationName as station_name')
->addSelect('w.senderName as sender_name')
->addSelect('w.senderPhoneNumber as sender_phone_number')
->addSelect('w.receiverName as receiver_name')
->addSelect('w.receiverPhoneNumber as receiver_phone_number')
->addSelect('p.description')
->addSelect('d.id as delivery_id')
->addSelect('v.regNumber as reg_number');
$qb->andWhere('d.isReceived = false')
->andWhere('d.isVerified = true')
->andWhere('d.originStation =:fromStation')
->setParameter('fromStation', $fromStation);
if (!empty($filterRules) && !is_null($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
$fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if (!empty($value)){
if ($op == 'contains'){
$qb->andWhere($field." LIKE :".$fieldPlace);
$qb->setParameter($fieldPlace, '%'.$value.'%');
} else if($op == 'equal'){
if($value > 0) {
$qb->andWhere($field."=".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'less'){
if($value > 0) {
$qb->andWhere($field."<".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'greater'){
if($value > 0) {
$qb->andWhere($field.">".$value);
// $qb->setParameter($field, $value);
}
}
}
}
}
return $qb
->setFirstResult($offset)
->setMaxResults($rows)
->getQuery()
->execute();
}
public function findTotalEnRouteParcels($filterRules, $fromStation) {
$qb = $this->createQueryBuilder('dp')
->select('count(t.id)');
$qb->join('dp.parcel', 'p')
->join('dp.delivery', 'd')
->join('d.deliveryVehicle', 'dv')
->join('p.waybill', 'w')
->join('w.transaction', 't');
$qb->andWhere('d.isReceived = false')
->andWhere('d.isVerified = true')
->andWhere('d.originStation =:fromStation')
->setParameter('fromStation', $fromStation);
if (!empty($filterRules) && !is_null($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
$fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if (!empty($value)){
if ($op == 'contains'){
$qb->andWhere($field." LIKE :".$fieldPlace);
$qb->setParameter($fieldPlace, '%'.$value.'%');
} else if($op == 'equal'){
if($value > 0) {
$qb->andWhere($field."=".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'less'){
if($value > 0) {
$qb->andWhere($field."<".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'greater'){
if($value > 0) {
$qb->andWhere($field.">".$value);
// $qb->setParameter($field, $value);
}
}
}
}
}
try {
return $qb->getQuery()
->getSingleScalarResult();
} catch (NoResultException $e) {
} catch (NonUniqueResultException $e) {
}
}
public function findIncomingParcels($filterRules, $toStation, $offset, $rows) {
$conn = $this->getEntityManager()->getConnection();
$additionalFilter = '';
if (!empty($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
// $fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if ($value == 0 || !empty($value)){
if ($op == 'contains'){
$additionalFilter .= " AND ".$field." like'%".$value."%'";
} else if($op == 'equal'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) = cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field."= ${value}";
}else if($op == 'less'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." < ${value}";
}else if($op == 'greater'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." > ${value}";
}else if($op == 'greater_equal'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) >= cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." >= ${value}";
}
}
}
}
$sql = "SELECT distinct(b.id) as id, f.station_name,
i.first_name,i.second_name,i.sir_name,b.parcel_count,b.created_at,
b.is_verified,b.loaded_at,g.reg_number
FROM delivery b
JOIN delivery_parcel a ON b.id = a.delivery_id
JOIN parcel c ON c.id = a.parcel_id
JOIN delivery_vehicle d ON d.id = b.id
JOIN station e ON e.id = b.destination
JOIN station f ON f.id = b.origin_station
JOIN vehicle g ON g.id = d.vehicle_id
JOIN user h ON h.id = a.created_by
JOIN person i ON i.id = h.person_id
WHERE b.destination = ${toStation} ${additionalFilter} ORDER BY b.id DESC LIMIT ${offset},${rows}";
try {
$stmt = $conn->prepare($sql);
return $stmt->executeQuery()->fetchAllAssociative();
} catch (Exception | \Doctrine\DBAL\Exception $e) {
return null;
}
}
public function findTotalIncomingParcels($filterRules, $toStation) {
$qb = $this->createQueryBuilder('dp')
->select('count(t.id)');
$qb->join('dp.parcel', 'p')
->join('dp.delivery', 'd')
->join('p.waybill', 'w')
->join('w.transaction', 't');
$qb->andWhere('d.isReceivedFully = false')
->andWhere('w.isCollected = false')
->andWhere('d.isVerified = true')
->andWhere('d.destination =:toStation')
->setParameter('toStation', $toStation);
if (!empty($filterRules) && !is_null($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
$fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if (!empty($value)){
if ($op == 'contains'){
$qb->andWhere($field." LIKE :".$fieldPlace);
$qb->setParameter($fieldPlace, '%'.$value.'%');
} else if($op == 'equal'){
if($value > 0) {
$qb->andWhere($field."=".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'less'){
if($value > 0) {
$qb->andWhere($field."<".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'greater'){
if($value > 0) {
$qb->andWhere($field.">".$value);
// $qb->setParameter($field, $value);
}
}
}
}
}
try {
return $qb->getQuery()
->getSingleScalarResult();
} catch (NoResultException $e) {
} catch (NonUniqueResultException $e) {
}
}
public function findReceivedParcels($filterRules, $stationTo, $offset, $rows) {
$qb = $this->createQueryBuilder('dp');
$qb->join('dp.parcel', 'p')
->join('dp.delivery', 'd')
->join('d.deliveryVehicle', 'dv')
->join('p.waybill', 'w')
->join('w.transaction', 't');
$qb->andWhere('d.isReceived = true')
->andWhere('w.isCollected = false')
->andWhere('d.isVerified = true')
->andWhere('d.destination =:toStation')
->setParameter('toStation', $stationTo);
if (!empty($filterRules) && !is_null($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
$fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if (!empty($value)){
if ($op == 'contains'){
$qb->andWhere($field." LIKE :".$fieldPlace);
$qb->setParameter($fieldPlace, '%'.$value.'%');
} else if($op == 'equal'){
if($value > 0) {
$qb->andWhere($field."=".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'less'){
if($value > 0) {
$qb->andWhere($field."<".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'greater'){
if($value > 0) {
$qb->andWhere($field.">".$value);
// $qb->setParameter($field, $value);
}
}
}
}
}
return
$qb
->setFirstResult($offset)
->setMaxResults($rows)
->getQuery()
->execute();
}
public function findTotalReceivedParcels($filterRules, $toStation) {
$qb = $this->createQueryBuilder('dp')
->select('count(t.id)');
$qb->join('dp.parcel', 'p')
->join('dp.delivery', 'd')
->join('p.waybill', 'w')
->join('w.transaction', 't');
$qb->andWhere('d.isReceived = true')
->andWhere('w.isCollected = false')
->andWhere('d.isVerified = true')
->andWhere('d.destination =:toStation')
->setParameter('toStation', $toStation);
if (!empty($filterRules) && !is_null($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
$fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if (!empty($value)){
if ($op == 'contains'){
$qb->andWhere($field." LIKE :".$fieldPlace);
$qb->setParameter($fieldPlace, '%'.$value.'%');
} else if($op == 'equal'){
if($value > 0) {
$qb->andWhere($field."=".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'less'){
if($value > 0) {
$qb->andWhere($field."<".$value);
// $qb->setParameter($field, $value);
}
}else if($op == 'greater'){
if($value > 0) {
$qb->andWhere($field.">".$value);
// $qb->setParameter($field, $value);
}
}
}
}
}
try {
return $qb->getQuery()
->getSingleScalarResult();
} catch (NoResultException $e) {
} catch (NonUniqueResultException $e) {
}
}
public function findCollectedParcels($filterRules, $stationTo, $offset, $rows) {
$conn = $this->getEntityManager()->getConnection();
$additionalFilter = '';
if (!empty($filterRules)){
$filterRules = json_decode($filterRules);
foreach($filterRules as $rule){
$rule = get_object_vars($rule);
$field = $rule['field'];
// $fieldPlace = str_replace(".", "", $field);
$op = $rule['op'];
$value = $rule['value'];
if ($value == 0 || !empty($value)){
if ($op == 'contains'){
$additionalFilter .= " AND ".$field." like'%".$value."%'";
} else if($op == 'equal'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) = cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field."= ${value}";
}else if($op == 'less'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." < ${value}";
}else if($op == 'greater'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) > cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." > ${value}";
}else if($op == 'greater_equal'){
if($field == 'a.created_at')
$additionalFilter .= " AND cast(".$field." as date) >= cast('${value}' as date)";
else
$additionalFilter .= " AND ".$field." >= ${value}";
}
}
}
}
$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,
h.station_name,b.description, c.parcel_count
FROM delivery_parcel a
JOIN parcel b on a.parcel_id = b.id
JOIN delivery c ON a.delivery_id = c.id
JOIN way_bill e ON e.id = b.way_bill_id
JOIN transaction f ON f.way_bill_id = e.id
JOIN station h ON h.id = e.from_station_id
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}";
$sql_count = "EXPLAIN SELECT count(a.id) as total_count
FROM delivery_parcel a
JOIN parcel b on a.parcel_id = b.id
JOIN delivery c ON a.delivery_id = c.id
JOIN delivery_vehicle d ON a.delivery_id = d.delivery_id
JOIN way_bill e ON e.id = b.way_bill_id
JOIN transaction f ON f.way_bill_id = e.id
JOIN collected_parcel g ON g.waybill_id = e.id
JOIN station h ON h.id = e.from_station_id
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}";
try {
$stmt = $conn->prepare($sql);
$results = $stmt->executeQuery(['station' => $stationTo])->fetchAllAssociative();
$stmt = $conn->prepare($sql_count);
$resultCount = $stmt->executeQuery(['station' => $stationTo])->fetchAssociative();
// dump($resultCount); die;
return [
'results' => $results,
'total_count' => $resultCount['rows']
];
} catch (Exception | \Doctrine\DBAL\Exception $e) {
return null;
}
}
}