Correções para funcionamento da criação do login motorista no qual não permitia email nulo
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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?
|
||||
|
||||
|
||||
@@ -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 %>;
|
||||
|
||||
Reference in New Issue
Block a user