Class: SolidusTiny::Order

Inherits:
Object
  • Object
show all
Defined in:
app/models/solidus_tiny/order.rb

Instance Method Summary collapse

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, =SolidusTiny::Account.first
  @order = spree_order
  @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_urlObject



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

#customerObject



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_pagamentoObject



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_internasObject



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

#parcelasObject



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

#productsObject



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_idObject



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

#sendObject



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.message = "Pedido enviado"
    end
  rescue => e
    tiny_event.status = "error"
    tiny_event.message = e.to_json
  ensure
    tiny_event.save!
  end
end

#transportadorObject



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