Class: SolidusTiny::Order
- Inherits:
-
Object
- Object
- SolidusTiny::Order
- Defined in:
- app/models/solidus_tiny/order.rb
Instance Method Summary collapse
- #build_cupons(cupons) ⇒ Object
- #build_order_url ⇒ Object
- #customer ⇒ Object
- #forma_pagamento ⇒ Object
-
#initialize(spree_order, account = SolidusTiny::Account.first) ⇒ Order
constructor
A new instance of Order.
- #observacoes_internas ⇒ Object
- #parcelas ⇒ Object
- #products ⇒ Object
- #seller_external_id ⇒ Object
- #send ⇒ Object
- #transportador ⇒ Object
Constructor Details
#initialize(spree_order, account = SolidusTiny::Account.first) ⇒ Order
Returns a new instance of Order.
3 4 5 6 |
# File 'app/models/solidus_tiny/order.rb', line 3 def initialize spree_order, account=SolidusTiny::Account.first @order = spree_order @account = account end |
Instance Method Details
#build_cupons(cupons) ⇒ Object
116 117 118 119 120 121 122 |
# File 'app/models/solidus_tiny/order.rb', line 116 def build_cupons cupons string_cupons = "" if !cupons.empty? string_cupons = "Cupons utilizados: #{cupons.pluck(:label).join(", ")}" end string_cupons end |
#build_order_url ⇒ Object
124 125 126 |
# File 'app/models/solidus_tiny/order.rb', line 124 def build_order_url "Link para o pedido: #{@order.store.url}/pedidos/#{@order.number}" end |
#customer ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/models/solidus_tiny/order.rb', line 48 def customer ship_address = @order.ship_address { nome: ship_address.name, tipo_pessoa: @order.tax_id.length > 14 ? "J" : "F", cpf_cnpj: @order.tax_id, endereco: ship_address.address1, numero: ship_address.number, complemento: ship_address.address2, bairro: ship_address.district, cep: ship_address.zipcode, cidade: ship_address.city, uf: ship_address.state.abbr, fone: ship_address.phone, email: @order.email } end |
#forma_pagamento ⇒ Object
86 87 88 89 |
# File 'app/models/solidus_tiny/order.rb', line 86 def forma_pagamento spree_payment = @order.payments.valid.last payment_method = @account.payment_methods.find_by(spree_payment_method_id: spree_payment.payment_method_id).alias end |
#observacoes_internas ⇒ Object
105 106 107 108 109 110 111 112 113 114 |
# File 'app/models/solidus_tiny/order.rb', line 105 def observacoes_internas parcelas = @order.payments.last.source.try(:installments) || 1 "Pagamento: #{parcelas}x R$ #{(@order.total.to_f / parcelas).round(2)}" \ "\n" \ "Forma de envio: #{@order.shipments.last.selected_shipping_rate.name}" \ "\n" + build_cupons(@order.adjustments.where(source_type: "Spree::PromotionAction", eligible: true)).to_s + "\n" + build_order_url.to_s end |
#parcelas ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/models/solidus_tiny/order.rb', line 91 def parcelas parcelas = @order.payments.last.source.try(:installments) || 1 valor_parcela = @order.total.to_f / parcelas 1.upto(parcelas).map do |parcela| { parcela: { data: (@order.completed_at + parcela.months).strftime("%d/%m/%Y"), valor: valor_parcela, forma_pagamento: forma_pagamento } } end end |
#products ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 |
# File 'app/models/solidus_tiny/order.rb', line 66 def products @order.line_items.map do |item| { item: { codigo: item.sku, quantidade: item.quantity, valor_unitario: item.price } } end end |
#seller_external_id ⇒ Object
78 79 80 |
# File 'app/models/solidus_tiny/order.rb', line 78 def seller_external_id @order.solidus_tiny_seller_id ? @account.sellers.find(@order.solidus_tiny_seller_id).external_id : SolidusTiny::Seller.default.external_id end |
#send ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'app/models/solidus_tiny/order.rb', line 8 def send tiny_event = SolidusTiny::Event.new(internal_id: @order.id) begin TinyErpApi.configure { |config| config.access_token = @account.api_key } tiny_shipping_method = transportador order_body = { data_pedido: @order.completed_at.strftime("%d/%m/%Y"), transportador: tiny_shipping_method.company, forma_pagamento: forma_pagamento, valor_frete: @order.shipment_total, valor_desconto: @order.adjustment_total.abs, numero_pedido: @order.number, observacoes: "Número do pedido loja: #{@order.number}", parcelas: parcelas, observacoes_internas: observacoes_internas, forma_envio: tiny_shipping_method.name, forma_frete: tiny_shipping_method.service, cliente: customer, itens: products, id_vendedor: seller_external_id, deposito: @account.stock_location, id_natureza_operacao: @account.operation_id } tiny_event.body = order_body tiny_order = TinyErpApi::Order.new(**order_body).create if tiny_order @order.update(tiny_order_id: tiny_order.id) tiny_event.status = "success" tiny_event. = "Pedido enviado" end rescue => e tiny_event.status = "error" tiny_event. = e.to_json ensure tiny_event.save! end end |
#transportador ⇒ Object
82 83 84 |
# File 'app/models/solidus_tiny/order.rb', line 82 def transportador @account.shipping_methods.find_by(spree_shipping_method_id: @order.shipments.last.shipping_method.id) end |