smartsendio / woocommerce

Smart Send module for WooCommerce
GNU General Public License v3.0
0 stars 2 forks source link

Agent search by postal code + filters #25

Open Saggre opened 2 years ago

Saggre commented 2 years ago

Add the following filters for modifying agent search address:

and allow searching for agents with just country and postcode when no street is provided.

My use case for this is that some payment gateways like Klarna (widely used in many countries that PostNord also operates in), only dynamically update shipping country and postcode at checkout and leave city and street address blank. This solution should work out of the box with Klarna and gives more flexibility to users.

bilfeldt commented 2 years ago

@Saggre Thanks for the PR - the issue regarding Klarna is clearly worth addressing.

I suggest that instead of implementing multiple filters, then a single filter is added like so:

$agentSearchAddress = apply_filters('smart_send_agent_search_address', [
    'country' => empty($_POST['s_country']) ? null : wc_clean($_POST['s_country']),
    'postal_code' => empty($_POST['s_postcode']) ? null : wc_clean($_POST['s_postcode']),
    'city' => empty($_POST['s_city']) ? null : wc_clean($_POST['s_city']),
    'address' => empty($_POST['s_address']) ? null : wc_clean($_POST['s_address']),
]);

let me know if this would cover the use-case you have in mind?

Saggre commented 2 years ago

@bilfeldt Yeah, this will work as well as long as city and street are allowed to be empty after the filter (and postal code search will be used as a fallback)

if(empty($street) || strlen($street) < 5){
  $ss_agents = $this->find_closest_agents_by_postal_code($carrier, $country, $postal_code);
}else{
  $ss_agents = $this->find_closest_agents_by_address($carrier, $country, $postal_code, $city, $street);
}
bilfeldt commented 2 years ago

@Saggre I have made the proposed changes now. Do you agree this will solve the challenges you have had?

Saggre commented 2 years ago

@bilfeldt Yeah this will solve our problem. I just removed an extra comma