SolidusTecEstimator
Uma extensão para Solidus que fornece um sistema flexível de estimativa de frete com suporte a múltiplos provedores de entrega.
Características
- Sistema de Provedores Plugável: Arquitetura modular que permite adicionar facilmente novos provedores de entrega
- Entrega Local: Provedor integrado para entrega local com estimativas de tempo em tempo real
- Interface Administrativa: Interface web para gerenciar provedores de entrega
- Integração com Solidus Brazilian Adaptations: Compatibilidade total com adaptações brasileiras do Solidus
- Cálculo Dinâmico de Frete: Estimativas baseadas em peso, localização e disponibilidade de estoque
- Estimativas de Tempo de Entrega: Cálculo automático de janelas de entrega baseado em horários comerciais
Instalação
Adicione esta linha ao Gemfile da sua aplicação:
gem 'solidus_tec_estimator'
E execute:
$ bundle install
Ou instale diretamente:
$ gem install solidus_tec_estimator
Configuração
Execute o gerador de instalação:
$ rails generate solidus_tec_estimator:install
Execute as migrações:
$ rails db:migrate
Configuração da Interface Administrativa
Para acessar a interface administrativa dos provedores, você precisa adicionar uma aba na seção de shipping do painel administrativo do Solidus.
Crie o arquivo app/views/spree/admin/shared/_shipping_tabs.html.erb no seu projeto (se não existir) copiando o conteúdo do arquivo original do Solidus e adicione o seguinte bloco:
<% if can?(:show, Spree::ShippingMethod) %>
<%= settings_tab_item "Providers", admin_solidus_tec_estimator_providers_path %>
<% end %>
O arquivo completo deve ficar assim:
<% content_for :tabs do %>
<nav>
<ul class="tabs" data-hook="admin_settings_shipping_tabs">
<% if can?(:show, Spree::ShippingMethod) %>
<%= settings_tab_item plural_resource_name(Spree::ShippingMethod), spree.admin_shipping_methods_path %>
<% end %>
<% if can?(:show, Spree::ShippingCategory) %>
<%= settings_tab_item plural_resource_name(Spree::ShippingCategory), spree.admin_shipping_categories_path %>
<% end %>
<% if can?(:show, Spree::StockLocation) %>
<%= settings_tab_item plural_resource_name(Spree::StockLocation), spree.admin_stock_locations_path %>
<% end %>
<% if can?(:show, Spree::ShippingMethod) %>
<%= settings_tab_item "Providers", admin_solidus_tec_estimator_providers_path %>
<% end %>
</ul>
</nav>
<% end %>
Uso
Configuração Básica
A gem estende o sistema de estimativa de frete do Solidus, permitindo que você use tanto os métodos de envio tradicionais quanto provedores personalizados.
Provedores de Entrega
Criando um Novo Provedor
Para criar um novo provedor de entrega, crie uma classe que implemente a interface do provedor:
module SolidusTecEstimator
module Providers
class MeuProvedor
attr_accessor :package, :shipping_methods
def initialize(package, shipping_methods)
@package = package
@shipping_methods = shipping_methods
end
def self.install
# Lógica para instalar/configurar o método de envio
Spree::ShippingMethod.find_or_create_by(code: name.underscore) do |shipping_method|
shipping_method.name = "Meu Provedor"
shipping_method.carrier = "Transportadora Custom"
shipping_method.code = name.underscore
# ... outras configurações
end
end
def shipping_rates
# Retorna um array de Spree::ShippingRate
[]
end
end
end
end
Registrando um Provedor
Para registrar um novo provedor:
SolidusTecEstimator::Provider.create!(
name: "Meu Provedor",
class_name: "SolidusTecEstimator::Providers::MeuProvedor",
active: true
)
Provedor de Entrega Local
A gem inclui um provedor de entrega local (LocalDelivery) que oferece:
- Verificação de CEP para São João da Boa Vista
- Validação de estoque na filial F1
- Cálculo de tempo de entrega baseado em horários comerciais
- Limite de peso de 50kg
Interface Administrativa
Acesse a interface administrativa em:
/admin/solidus_tec_estimator/providers
Através desta interface você pode:
- Visualizar todos os provedores cadastrados
- Ativar/desativar provedores
- Adicionar novos provedores
- Editar configurações dos provedores
Estrutura do Projeto
app/
├── controllers/
│ └── spree/admin/solidus_tec_estimator/
│ └── providers_controller.rb # Controller administrativo
├── models/
│ └── solidus_tec_estimator/
│ ├── estimator.rb # Motor principal de estimativas
│ ├── provider.rb # Model do provedor
│ └── providers/
│ └── local_delivery.rb # Provedor de entrega local
└── views/
└── spree/admin/solidus_tec_estimator/
└── providers/ # Views administrativas
Dependências
solidus_brazilian_adaptations- Adaptações brasileiras para Solidus- Rails 7.1+
- Solidus
Como Funciona
Estimador Principal: A classe
SolidusTecEstimator::Estimatoré responsável por coletar estimativas de todos os métodos de envio e provedores ativos.Provedores: Cada provedor implementa sua própria lógica de cálculo de frete e tempo de entrega.
Seleção Automática: O sistema automaticamente seleciona uma opção padrão baseada na configuração do Solidus.
Filtragem: Os métodos de envio são filtrados baseados em disponibilidade, localização e outros critérios.
Exemplo de Integração
# No seu modelo de Order ou similar
def shipping_rates_for_package(package)
estimator = SolidusTecEstimator::Estimator.new
estimator.shipping_rates(package)
end
Versão
Versão atual: 2.1.2