SolidusMe

Gem Version

Extensão do Solidus para integração com a API do Melhor Envio, permitindo:

  • Cálculo de frete em tempo real
  • Geração de etiquetas de envio
  • Gerenciamento de contas do Melhor Envio
  • Interface administrativa para controle de etiquetas

Requisitos

  • Ruby >= 2.7
  • Solidus >= 3.0
  • Rails >= 6.0

Instalação

Adicione esta linha ao Gemfile da sua aplicação:

ruby gem 'solidus_me'

Execute:

bash $ bundle install

Execute o gerador de instalação:

bash $ rails generate solidus_me:install

Execute as migrações:

bash $ rails db:migrate

Dependências

Esta gem depende de outras gems que precisam ser configuradas antes do uso:

1. SolidusTecEstimator

Execute o gerador de instalação:

bash $ rails generate solidus_tec_estimator:install

Siga as instruções de configuração da gem solidus_tec_estimator.

2. SolidusBrazilianAdaptations

Execute o gerador de instalação:

bash $ rails generate solidus_brazilian_adaptations:install

Siga as instruções de configuração da gem solidus_brazilian_adaptations.

Configuração

1. Configuração da Conta do Melhor Envio

Acesse o painel administrativo do Solidus e navegue até Configurações > Contas Melhor Envio para configurar suas credenciais da API.

2. Configuração do Provider de Frete

Configure o TecEstimator ou outro provider compatível para usar o “Melhor Envio” como provedor de frete.

3. Configuração da Interface de Etiquetas

Para exibir a aba “Etiqueta” nas ordens do painel administrativo, você precisa adicionar o seguinte código ao arquivo app/views/spree/admin/shared/_order_submenu.html.erb:

erb <% if @order.completed? %> <% provider_id = @order.shipments.sole.selected_shipping_rate.shipping_method.provider_id %> <% if provider_id && SolidusTecEstimator::Provider.find(provider_id).name == "Melhor Envio" %> <% label = SolidusMe::Label.find_by(spree_order_id: @order.id) %> <li class="tab" data-hook='admin_order_tabs_return_authorizations'> <% if label %> <a href="<%= admin_orders_label_path(order_number: @order.number, id: label.id) %>">Etiqueta</a> <% else %> <a href="<%= admin_orders_labels_path(order_number: @order.number) %>">Etiqueta</a> <% end %> </li> <% end %> <% end %>

Importante: Se o arquivo app/views/spree/admin/shared/_order_submenu.html.erb não existir na sua aplicação, você deve criá-lo copiando o arquivo original do Solidus:

👉 Baixar arquivo original do Solidus

Após baixar, coloque o arquivo no caminho correto da sua aplicação e adicione o código da aba de etiqueta.

Funcionalidades

Gerenciamento de Contas

  • Múltiplas contas: Suporte a contas de teste e produção
  • Autenticação OAuth2: Integração segura com a API do Melhor Envio
  • Sincronização automática: Atualização de saldos e informações da conta

Etiquetas de Envio

  • Geração de etiquetas: Criação automática de etiquetas após finalização do pedido
  • Rastreamento: Acompanhamento do status de entrega
  • Impressão: Interface para impressão de etiquetas
  • Histórico: Controle completo do ciclo de vida das etiquetas

Interface Administrativa

  • Dashboard de contas: Visualização de saldos e status das contas
  • Gestão de etiquetas: Interface completa para gerenciar etiquetas por pedido
  • Configurações: Painel de configuração das integrações

Modelos

SolidusMe::Account

Representa uma conta do Melhor Envio configurada no sistema.

```ruby # Buscar conta ativa em modo de teste account = SolidusMe::Account.first_active_test_mode

Verificar saldo da conta

balance = account.get_balance

Obter dados da conta

account_data = account.get_account_data ```

SolidusMe::Label

Representa uma etiqueta de envio gerada para um pedido.

```ruby # Buscar etiqueta por pedido label = SolidusMe::Label.find_by(spree_order_id: order.id)

Verificar status da etiqueta

puts label.status ```

Configuração Avançada

Inicializador

O gerador cria um arquivo de configuração em config/initializers/solidus_me.rb:

ruby SolidusMe.configure do |config| # Suas configurações personalizadas end

Rotas

As rotas são automaticamente montadas na aplicação:

ruby # config/routes.rb Rails.application.routes.draw do mount SolidusMe::Engine => "/solidus_me" # suas outras rotas... end