Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Only use EasyPost when the item has a ShippingCategory that uses EasyPost #75

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

brchristian
Copy link
Contributor

This is an attempt to address some of the functionality desired by #47.

Here is one way that a store (like ours, which offers subscription products and digital products that don’t ship normally and have very specific custom shipping rates) can use SolidusEasypost along more custom functionality.

It adds a use_easypost boolean to each Shipping Category (true by default). Then there is a check to see if a package belongs to any shipping categories that use EasyPost. If so, it overrides the estimator shipping rates as normal for solidus_easypost. If not, it falls back to the default Solidus behavior for those shipping categories.

Something like this would be terrific for a store like ours, and would be the start of the work described in #47.

@vassalloandrea what do you think?

@brchristian
Copy link
Contributor Author

Note that we’ll have to tinker with the specs at

let(:package) do
instance_double(Spree::Stock::Package, easypost_shipment: fake_shipment)
end
let(:fake_shipment) do
double(EasyPost::Shipment, rates: [])
end

...which are a bit brittle at the moment, but we can sort that out easily enough if this general approach looks good!

@vassalloandrea vassalloandrea self-requested a review August 7, 2020 08:49
Copy link
Contributor

@vassalloandrea vassalloandrea left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @brchristian, thank you for your PR! We really appreciate your input 🔥
Your solution likes simple and correct but what do you think about merging the Easypost rates with the Solidus ones?
Merging them we can use the Easypost rates like USPS and permit the customer to get the package directly to the warehouse with pick up in the area option 😄
Example
app/prependers/models/spree/stock/estimator/override_shipping_rates.rb

shipping_rates = method(:shipping_rates)
      .super_method
      .call(package, frontend_only)
      .concat(
        super(package, frontend_only)
      )
    # Here we should choose the default shipping rate
    shipping_rates

Another problem occurs when the admin user tries to ship the rate since this extension will buy the rates from Easypost and with the changes above, we can ship the packages also with the Solidus ones.
To correct this bug we need something like this:

  • Add a custom field to the shipping methods that defines if it is custom (created from the Solidus admin panel) or not custom (created by Easypost)
  • When the package is marked as shipped, buy the Easypost rate only if the shipping method isn't custom
    Example:
module Spree::Shipment::AllowCustomShipping
  def buy_easypost_rate
    return if shipping_method.custom?
    super
  rescue EasyPost::Error => e
    raise e unless e.code == 'SHIPMENT.POSTAGE.EXISTS'
  end
end

What do you think about it?
BTW, I'm already writing a PR to solve this problem and it is almost ready. If you like this approach, I will undertake to merge it as soon as possible.

@brchristian
Copy link
Contributor Author

@vassalloandrea merging the Easypost rates with the Solidus ones sounds like a great idea! Go for it and LMK if I can be helpful!

@stale
Copy link

stale bot commented Oct 7, 2020

This issue has been automatically marked as stale because it has not had recent activity. It might be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the stale label Oct 7, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants