Compare commits
2 Commits
2cf3b08d84
...
aad167873f
| Author | SHA256 | Date | |
|---|---|---|---|
| aad167873f | |||
| 44843351ae |
@@ -365,6 +365,8 @@ docker-compose exec app bundle exec rspec
|
|||||||
- **Listagem de usuários** chamava o helper inexistente `badge_role` — criado em `ApplicationHelper`.
|
- **Listagem de usuários** chamava o helper inexistente `badge_role` — criado em `ApplicationHelper`.
|
||||||
- **Nova consolidação** estourava `NoMethodError: new?` — `ApplicationPolicy` agora define `new? = create?` e `edit? = update?`.
|
- **Nova consolidação** estourava `NoMethodError: new?` — `ApplicationPolicy` agora define `new? = create?` e `edit? = update?`.
|
||||||
- **Login do motorista (PIN)** derrubava `/motorista` com `PG::UndefinedTable: relation "consolidacao_motorista" does not exist` — o inflector pt-BR resolvia o composto no singular. `self.table_name` fixado explicitamente em `Consolidacao`, `ConsolidacaoMotorista`, `ConsolidacaoEntrega` e `Configuracao`.
|
- **Login do motorista (PIN)** derrubava `/motorista` com `PG::UndefinedTable: relation "consolidacao_motorista" does not exist` — o inflector pt-BR resolvia o composto no singular. `self.table_name` fixado explicitamente em `Consolidacao`, `ConsolidacaoMotorista`, `ConsolidacaoEntrega` e `Configuracao`.
|
||||||
|
- **Listagem de usuários** faltava o helper `badge_status_usuario` e a rota `toggle_ativo` estava sem o prefixo `admin_` (verbo errado também) — corrigidos.
|
||||||
|
- **Passo 3 (revisão) da consolidação** ficava em branco: `GROUP BY tipo` combinado com `ORDER BY created_at` é inválido no PostgreSQL (`PG::GroupingError`, vira 500/tela branca em produção). Corrigido com `reorder(nil)` no count agrupado.
|
||||||
|
|
||||||
### 🆕 Funcionalidades
|
### 🆕 Funcionalidades
|
||||||
- **Dashboard com filtro de faixa de datas** (Flatpickr, modo range) no lugar da navegação por mês; o controller passou a consultar por período e a respeitar `.da_conta_gade`.
|
- **Dashboard com filtro de faixa de datas** (Flatpickr, modo range) no lugar da navegação por mês; o controller passou a consultar por período e a respeitar `.da_conta_gade`.
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ class ConsolidacaoEntregasController < ApplicationController
|
|||||||
.where(motorista_nome: @motorista)
|
.where(motorista_nome: @motorista)
|
||||||
.order(:created_at)
|
.order(:created_at)
|
||||||
|
|
||||||
@resumo = @classificacoes.group(:tipo).count
|
# reorder(nil): GROUP BY tipo + ORDER BY created_at é inválido no PostgreSQL
|
||||||
|
@resumo = @classificacoes.reorder(nil).group(:tipo).count
|
||||||
@total = @classificacoes.sum do |c|
|
@total = @classificacoes.sum do |c|
|
||||||
c.tipo == 'desconto' ? -c.valor_aplicado : c.valor_aplicado
|
c.tipo == 'desconto' ? -c.valor_aplicado : c.valor_aplicado
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -43,6 +43,13 @@ module ApplicationHelper
|
|||||||
tag.span label, class: "inline-flex items-center px-2.5 py-1 rounded-full text-xs font-bold #{cfg[:cor]}"
|
tag.span label, class: "inline-flex items-center px-2.5 py-1 rounded-full text-xs font-bold #{cfg[:cor]}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Badge de status ativo/inativo do usuário
|
||||||
|
def badge_status_usuario(ativo)
|
||||||
|
cor = ativo ? 'bg-green-600 text-white' : 'bg-red-600 text-white'
|
||||||
|
label = ativo ? 'Ativo' : 'Inativo'
|
||||||
|
tag.span label, class: "inline-flex items-center px-2.5 py-1 rounded-full text-xs font-bold #{cor}"
|
||||||
|
end
|
||||||
|
|
||||||
# Barra de progresso laranja
|
# Barra de progresso laranja
|
||||||
def progress_bar(percentual, label: nil)
|
def progress_bar(percentual, label: nil)
|
||||||
pct = percentual.to_i.clamp(0, 100)
|
pct = percentual.to_i.clamp(0, 100)
|
||||||
|
|||||||
@@ -73,10 +73,10 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% if policy(usuario).toggle_ativo? %>
|
<% if policy(usuario).toggle_ativo? %>
|
||||||
<%= button_to toggle_ativo_usuario_path(usuario), method: :post,
|
<%= button_to toggle_ativo_admin_usuario_path(usuario), method: :patch,
|
||||||
class: "p-2 rounded-lg transition-colors #{usuario.ativo? ? 'text-green-400 hover:bg-green-900/30' : 'text-red-400 hover:bg-red-900/30'}",
|
class: "p-2 rounded-lg transition-colors #{usuario.ativo? ? 'text-green-400 hover:bg-green-900/30' : 'text-red-400 hover:bg-red-900/30'}",
|
||||||
title: usuario.ativo? ? 'Desativar' : 'Ativar',
|
title: usuario.ativo? ? 'Desativar' : 'Ativar',
|
||||||
data: { confirm: "#{usuario.ativo? ? 'Desativar' : 'Ativar'} #{usuario.nome}?" } do %>
|
form: { data: { turbo_confirm: "#{usuario.ativo? ? 'Desativar' : 'Ativar'} #{usuario.nome}?" } } do %>
|
||||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"/>
|
d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"/>
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
<%= button_to admin_usuario_path(usuario), method: :delete,
|
<%= button_to admin_usuario_path(usuario), method: :delete,
|
||||||
class: 'p-2 text-gray-600 hover:text-red-400 hover:bg-red-900/20 rounded-lg transition-colors',
|
class: 'p-2 text-gray-600 hover:text-red-400 hover:bg-red-900/20 rounded-lg transition-colors',
|
||||||
title: 'Excluir',
|
title: 'Excluir',
|
||||||
data: { confirm: "Excluir #{usuario.nome} permanentemente?" } do %>
|
form: { data: { turbo_confirm: "Excluir #{usuario.nome} permanentemente?" } } do %>
|
||||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||||
d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
|
d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
<div class="bg-[#1a1a1a] border border-orange-500 rounded-xl p-6 mb-6 text-center">
|
<div class="bg-[#1a1a1a] border border-orange-500 rounded-xl p-6 mb-6 text-center">
|
||||||
<p class="text-gray-400 text-sm mb-1">Total a pagar — <%= @motorista %></p>
|
<p class="text-gray-400 text-sm mb-1">Total a pagar — <%= @motorista %></p>
|
||||||
<p class="text-orange-500 font-black text-4xl"><%= moeda(@total) %></p>
|
<p class="text-orange-500 font-black text-4xl"><%= moeda(@total) %></p>
|
||||||
<p class="text-gray-500 text-xs mt-1"><%= @classificacoes.size %> entregas classificadas</p>
|
<p class="text-gray-500 text-xs mt-1"><%= @classificacoes.map(&:tracking_id).uniq.size %> entregas classificadas (<%= @classificacoes.size %> pilares)</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%# Detalhe das classificações %>
|
<%# Detalhe das classificações %>
|
||||||
|
|||||||
Reference in New Issue
Block a user