Correções para funcionamento da criação do login motorista no qual não permitia email nulo

This commit is contained in:
2026-06-16 16:00:36 -03:00
parent 6efbb45b70
commit ae6f0122d4
6 changed files with 321 additions and 3 deletions

View File

@@ -40,15 +40,19 @@ class Entrega < ApplicationRecord
}
# Filtra pela(s) conta(s) configurada(s) em DB_EXISTING_ACCOUNT_ID.
# A coluna account_id é TEXTO e pode vir vazia, então comparamos como string.
# A coluna account_id é TEXTO e pode vir vazia/NULL, então comparamos como string.
# IMPORTANTE: o valor é uma LISTA separada por vírgula — NÃO um trecho de SQL.
# Aceita: "95907" (uma) | "95907,12345" (várias) | "all" ou vazio (sem filtro).
# Use "95907," (com vírgula) para incluir também os registros de conta vazia.
# Use "95907," (vírgula no fim) para incluir também registros de conta vazia/NULL.
scope :da_conta_gade, -> {
contas = ENV.fetch('DB_EXISTING_ACCOUNT_ID', '95907').to_s.strip
if contas.empty? || contas.casecmp?('all')
all
else
where(account_id: contas.split(',', -1).map(&:strip))
valores = contas.split(',', -1).map(&:strip)
# Token vazio (ex.: "95907,") → inclui também as linhas sem conta (NULL).
valores << nil if valores.any?(&:empty?)
where(account_id: valores)
end
}

View File

@@ -27,6 +27,10 @@ class User < ApplicationRecord
validate :pin_unico_para_motoristas, if: :motorista?
# E-mail em branco vira NULL: evita colisão no índice único quando vários
# motoristas são criados sem e-mail (no Postgres NULLs são distintos entre si).
before_validation :normalizar_email_em_branco
# Motoristas podem não ter e-mail (login via PIN)
def email_required?
!motorista?
@@ -65,6 +69,10 @@ class User < ApplicationRecord
private
def normalizar_email_em_branco
self.email = nil if email.blank?
end
def pin_unico_para_motoristas
return if pin_code.blank?

View File

@@ -1,6 +1,12 @@
<%# app/views/dashboard/index.html.erb %>
<%# Fase 3: Dashboard com cards, gráfico Chart.js e cálculo ao vivo %>
<%# Não cachear no Turbo: o snapshot congelava o gráfico/calendário (DOM já
<%# alterado pelo JS, sem reexecutar scripts) e só voltava com F5. %>
<% content_for :head do %>
<meta name="turbo-cache-control" content="no-cache">
<% end %>
<div class="space-y-6">
<%# Header + filtro por faixa de datas %>
@@ -196,6 +202,10 @@
const ctx = document.getElementById('grafico-diario');
if (!ctx || typeof Chart === 'undefined') return;
// Destrói gráfico anterior preso ao mesmo canvas (evita "Canvas is already
// in use" quando o Turbo reexecuta o script ao navegar).
Chart.getChart(ctx)?.destroy();
const labels = <%= raw @grafico_diario[:labels].to_json %>;
const valores = <%= raw @grafico_diario[:valores].to_json %>;
const qtds = <%= raw @grafico_diario[:qtds].to_json %>;