diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index c510db98..cbd1af10 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -1026,6 +1026,10 @@ class APIController extends Controller implements LoggedController if (!empty($sku)) $hub_criteria->addItem($batt->getSAPCode(), 1); + // add payment method to criteria + if (!empty($jo->getModeOfPayment())) + $hub_criteria->setPaymentMethod($jo->getModeOfPayment()); + // find nearest hubs $nearest_hubs = $hub_select->find($hub_criteria); @@ -2552,6 +2556,10 @@ class APIController extends Controller implements LoggedController if (!empty($sku)) $hub_criteria->addItem($batt->getSAPCode(), 1); + // add payment method to criteria + if (!empty($jo->getModeOfPayment())) + $hub_criteria->setPaymentMethod($jo->getModeOfPayment()); + // find nearest hubs $nearest_hubs = $hub_select->find($hub_criteria); diff --git a/src/Ramcar/HubCriteria.php b/src/Ramcar/HubCriteria.php index e211e9dc..91f19c0e 100644 --- a/src/Ramcar/HubCriteria.php +++ b/src/Ramcar/HubCriteria.php @@ -15,6 +15,7 @@ class HubCriteria protected $jo_type; // jo service needed protected $date_time; // date and time to check if hub is open or not protected $items; // array of items: items[sku] = quantity to check for + protected $payment_method; // payment method of JO public function __construct() { @@ -23,8 +24,9 @@ class HubCriteria $this->limit_distance = 500; $this->jo_type = ''; $this->date_time = null; - $this->flag_inventory_check = true; + $this->flag_inventory_check = false; $this->items = []; + $this->payment_method = ''; } public function setPoint(Point $point) @@ -105,4 +107,21 @@ class HubCriteria { return $this->items; } + + public function setItems($items) + { + $this->items = $items; + return $this; + } + + public function setPaymentMethod($payment_method) + { + $this->payment_method = $payment_method; + return $this; + } + + public function getPaymentMethod() + { + return $this->payment_method; + } } diff --git a/src/Service/HubSelector.php b/src/Service/HubSelector.php index 0e455045..a323a8c3 100644 --- a/src/Service/HubSelector.php +++ b/src/Service/HubSelector.php @@ -48,6 +48,7 @@ class HubSelector $flag_inventory_check = $criteria->hasInventoryCheck(); $items = $criteria->getItems(); $date_time = $criteria->getDateTime(); + $payment_method = $criteria->getPaymentMethod(); $results = []; @@ -64,6 +65,12 @@ class HubSelector $hubs_jo_type = $this->filterHubsByJoType($filtered_hubs, $jo_type); $filtered_hubs = $hubs_jo_type; + // filter hubs by payment methods + $hubs_payment_method = $this->filterHubsByPaymentMethod($filtered_hubs, $payment_method); + $filtered_hubs = $hubs_payment_method; + + // filter hubs by rider availability + // inventory filter $hubs_inventory = $this->filterHubsByInventory($filtered_hubs, $flag_inventory_check, $jo_type, $items); @@ -149,6 +156,47 @@ class HubSelector return $results; } + protected function filterHubsByPaymentMethod($hubs, $payment_method) + { + if (empty($hubs)) + return $hubs; + if (empty($payment_method)) + return $hubs; + + $results = []; + foreach ($hubs as $hub_data) + { + $hub = $hub_data['hub']; + + // name of payment method is what is saved + $payment_methods = $hub->getPaymentMethods(); + if ($payment_methods != null) + { + $flag_found_pmethod = false; + foreach ($payment_methods as $pmethod) + { + if ($pmethod == $payment_method) + { + $results[] = [ + 'hub' => $hub, + 'db_distance' => $hub_data['db_distance'], + 'distance' => $hub_data['distance'], + 'duration' => $hub_data['duration'], + ]; + } + $flag_found_pmethod = true; + } + + if (!$flag_found_pmethod) + $this->hub_filter_logger->logFilteredHub($hub, 'no_payment_method'); + } + else + $this->hub_filter_logger->logFilteredHub($hub, 'no_payment_method'); + } + + return $results; + } + protected function filterHubsByDateAndTime($hubs, $date_time) { if (empty($hubs)) diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 49317478..04e9e513 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -1898,11 +1898,39 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface // get rejection reasons $params['rejection_reasons'] = JORejectionReason::getCollection(); + // set hub criteria + $hub_criteria = new HubCriteria(); + + // get battery (if any) + $skus = []; + $items = []; + $invoice = $obj->getInvoice(); + $inv_items = $invoice->getItems(); + foreach ($inv_items as $inv_item) + { + $batt = $inv_item->getBattery(); + if ($batt == null) + continue; + + $skus[] = $batt->getSapCode(); + $item_count = 1; + if (!empty($batt->getSapCode())) + { + $sap_code = $batt->getSapCode(); + if (isset($items[$sap_code])) + $items[$sap_code] = $item_count + 1; + else + $items[$sap_code] = $item_count; + } + } + // get closest hubs // set hub criteria $hub_criteria = new HubCriteria(); $hub_criteria->setPoint($obj->getCoordinates()) - ->setLimitResults(50); + ->setLimitResults(50) + ->setPaymentMethod($obj->getModeOfPayment()) + ->setJoType($obj->getServiceType()); $hubs = $hub_selector->find($hub_criteria); //$hubs = $map_tools->getClosestHubs($obj->getCoordinates(), 50, date("H:i:s")); @@ -1971,19 +1999,6 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface // get template to display $params['template'] = $this->getTwigTemplate('jo_processing_form'); - // get battery (if any) - $skus = []; - $invoice = $obj->getInvoice(); - $inv_items = $invoice->getItems(); - foreach ($inv_items as $inv_item) - { - $batt = $inv_item->getBattery(); - if ($batt == null) - continue; - - $skus[] = $batt->getSapCode(); - } - // get inventory $mres = $motiv->getInventory($branch_codes, $skus); foreach ($mres as $mres_item)