SolidusTecEstimator

Gem Version

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

  1. Estimador Principal: A classe SolidusTecEstimator::Estimator é responsável por coletar estimativas de todos os métodos de envio e provedores ativos.

  2. Provedores: Cada provedor implementa sua própria lógica de cálculo de frete e tempo de entrega.

  3. Seleção Automática: O sistema automaticamente seleciona uma opção padrão baseada na configuração do Solidus.

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