2017-11-03 7 views
1

私はCorreiosPACという新しいカスタムクラスを作成しました。これは、パッケージのコストと注文の配送時間(注文の締め切り)を計算します(下のコードを見てください)。配送時間を保存するために、ShippingRateモデルにdelivery_timeという新しいフィールドを追加しました。しかし、この値を保存して、ビューにクライアントに表示することはできません。これは私が思った最初の解決策でした。私は、これを行うための最善の解決策、パターン解決策を必要としています。私はこれを行う方法がわかりません。Spreeの子ShippingCalculatorカスタムクラス内に新しいメソッドを追加することは可能ですか?

モデル/電卓/出荷/ correios_pac.rb

require 'correios-frete' 

module Spree 
    module Calculator::Shipping 

    class CorreiosPAC < ShippingCalculator 
     attr_reader :delivery_time 

     def self.description 
     # Human readable description of the calculator 
     'Entrega Econômica (PAC)' 
     end 

     def compute_package(package) 
     # Returns the value after performing the required calculation 

     altura = package.quantity * 2 + 1 
     peso = (200.0 * package.quantity)/1000 + 0.2 
     cep_origem = '65086-110' 
     cep_destino = package.order.shipping_address.zipcode 

     @frete = Correios::Frete::Calculador.new(:cep_origem => cep_origem, 
      :cep_destino => cep_destino, 
      :peso => peso, 
      :comprimento => 30, 
      :largura => 30, 
      :altura => altura).calcular :pac 

     @delivery_time = @frete.prazo_entrega 
     @frete.valor 
     end 
    end 

    end 
end 

モデル/ shipping_rate_decorator.rb

Spree::ShippingRate.class_eval do 
    attr_accessor :delivery_time 
end 

答えて

1

それがために使用されるようなあなたは、電卓で納期を保存するべきではありません計算された出荷額。

アドレスの移行が完了した後で、リモートapi Correios :: Frete :: Calculadorを直接呼び出し(マイグレーションが必要)することができます。

次に、あなたは電卓でパッケージから順オブジェクトにアクセスすることができます

def compute_package(package) 
... 
package.order.frete.valor 
... 
end 
関連する問題