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:

gem 'solidus_me'

Execute:

$ bundle install

Execute o gerador de instalação:

$ rails generate solidus_me:install

Execute as migrações:

$ 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:

$ 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:

$ 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:

<% 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.

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

# Verificar saldo da conta
balance = .get_balance

# Obter dados da conta
 = .

SolidusMe::Label

Representa uma etiqueta de envio gerada para um pedido.

# 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:

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

Rotas

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

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