Implantação na hora de gerar o holerite de um motorista sem conta (deve aparecer o aviso)
This commit is contained in:
2280
Erros/holerite_carlos-matheus-pimentel_10-1.pdf
Normal file
2280
Erros/holerite_carlos-matheus-pimentel_10-1.pdf
Normal file
File diff suppressed because it is too large
Load Diff
13
README.md
13
README.md
@@ -619,6 +619,19 @@ Aplicar com: `docker-compose exec app bundle exec rails db:migrate`
|
|||||||
(selo de pagamento, total) tenha folga **≥ a própria altura** para não sobrepor o conteúdo
|
(selo de pagamento, total) tenha folga **≥ a própria altura** para não sobrepor o conteúdo
|
||||||
seguinte.
|
seguinte.
|
||||||
|
|
||||||
|
- **QR Code não aparecia para alguns motoristas:** o QR aponta para o painel do motorista
|
||||||
|
(`/motorista/acesso/:token`), que **exige uma conta de usuário** (`User` motorista com
|
||||||
|
`login_token`). Sem conta correspondente, `user_motorista` ficava `nil` e a seção do QR era
|
||||||
|
**omitida silenciosamente**. Duas causas tratadas:
|
||||||
|
- **Nome não batia** (espaços/maiúsculas) entre `consolidacao_motoristas.motorista_nome`
|
||||||
|
(dado externo) e `users.nome` (digitado no admin). ✅ `ConsolidacoesController#buscar_user_motorista`
|
||||||
|
agora tenta o match exato e, se falhar, compara nomes **normalizados** (sem espaços
|
||||||
|
extras/duplos, case-insensitive).
|
||||||
|
- **Motorista sem conta:** ✅ em vez de omitir, o holerite agora desenha um **aviso**
|
||||||
|
("Cadastro de acesso ainda não disponível… solicite ao administrador") no lugar do QR
|
||||||
|
(`HoleritePdf#desenhar_aviso_sem_acesso`). O QR só existe para motoristas **com cadastro**
|
||||||
|
no site — comportamento esperado, já que sem conta não há painel para acessar.
|
||||||
|
|
||||||
### 📌 Padrão (novo)
|
### 📌 Padrão (novo)
|
||||||
- **PDFs com Prawn**: usar **sempre** a fonte TTF registrada no `BasePdf` (DejaVu, UTF-8). Nunca
|
- **PDFs com Prawn**: usar **sempre** a fonte TTF registrada no `BasePdf` (DejaVu, UTF-8). Nunca
|
||||||
contar com a fonte embutida — ela quebra em qualquer caractere fora do Windows-1252.
|
contar com a fonte embutida — ela quebra em qualquer caractere fora do Windows-1252.
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ class ConsolidacoesController < ApplicationController
|
|||||||
def gerar_pdf_holerite
|
def gerar_pdf_holerite
|
||||||
autorizar_holerite!(params[:motorista])
|
autorizar_holerite!(params[:motorista])
|
||||||
motorista = params[:motorista]
|
motorista = params[:motorista]
|
||||||
user_mot = User.motorista.find_by('LOWER(nome) = ?', motorista.to_s.downcase)
|
user_mot = buscar_user_motorista(motorista)
|
||||||
user_mot&.regenerar_login_token! if user_mot&.login_token.blank?
|
user_mot&.regenerar_login_token! if user_mot&.login_token.blank?
|
||||||
cm = @consolidacao.consolidacao_motoristas.find_by(motorista_nome: motorista)
|
cm = @consolidacao.consolidacao_motoristas.find_by(motorista_nome: motorista)
|
||||||
|
|
||||||
@@ -245,6 +245,22 @@ class ConsolidacoesController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Acha o User motorista pelo nome para gerar o QR Code de acesso. O
|
||||||
|
# motorista_nome vem dos dados externos de entrega e o users.nome é digitado
|
||||||
|
# no admin — então toleramos diferenças de caixa e de espaços (extras/duplos).
|
||||||
|
# Sem isso, qualquer divergência deixava user_mot nil e o QR sumia do holerite.
|
||||||
|
def buscar_user_motorista(nome)
|
||||||
|
exato = User.motorista.find_by('LOWER(nome) = ?', nome.to_s.downcase.strip)
|
||||||
|
return exato if exato
|
||||||
|
|
||||||
|
alvo = normalizar_nome(nome)
|
||||||
|
User.motorista.find { |u| normalizar_nome(u.nome) == alvo }
|
||||||
|
end
|
||||||
|
|
||||||
|
def normalizar_nome(nome)
|
||||||
|
nome.to_s.strip.downcase.gsub(/\s+/, ' ')
|
||||||
|
end
|
||||||
|
|
||||||
# Staff (show?) baixa qualquer holerite. O motorista baixa só o PRÓPRIO — o PDF
|
# Staff (show?) baixa qualquer holerite. O motorista baixa só o PRÓPRIO — o PDF
|
||||||
# já é filtrado pelo nome dele, então não há vazamento de dados de terceiros.
|
# já é filtrado pelo nome dele, então não há vazamento de dados de terceiros.
|
||||||
def autorizar_holerite!(motorista_nome)
|
def autorizar_holerite!(motorista_nome)
|
||||||
|
|||||||
@@ -89,9 +89,14 @@ module Pdf
|
|||||||
|
|
||||||
# QR Code de login rápido. O Prawn não pagina imagem sozinho: se faltar
|
# QR Code de login rápido. O Prawn não pagina imagem sozinho: se faltar
|
||||||
# espaço, garantimos uma nova página para o QR não sumir no rodapé.
|
# espaço, garantimos uma nova página para o QR não sumir no rodapé.
|
||||||
|
# Motorista sem conta (sem login_token) não tem painel para acessar —
|
||||||
|
# mostramos um aviso no lugar do QR, em vez de omitir a seção.
|
||||||
if @user_motorista&.login_token.present?
|
if @user_motorista&.login_token.present?
|
||||||
@pdf.start_new_page if @pdf.cursor < 180
|
@pdf.start_new_page if @pdf.cursor < 180
|
||||||
desenhar_qrcode
|
desenhar_qrcode
|
||||||
|
else
|
||||||
|
@pdf.start_new_page if @pdf.cursor < 120
|
||||||
|
desenhar_aviso_sem_acesso
|
||||||
end
|
end
|
||||||
|
|
||||||
assinaturas(motorista: @motorista)
|
assinaturas(motorista: @motorista)
|
||||||
@@ -155,5 +160,23 @@ module Pdf
|
|||||||
arquivo&.close
|
arquivo&.close
|
||||||
arquivo&.unlink
|
arquivo&.unlink
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Exibido quando o motorista não tem conta de acesso (sem login_token).
|
||||||
|
# Sem conta não há painel para o QR apontar, então avisamos no lugar.
|
||||||
|
def desenhar_aviso_sem_acesso
|
||||||
|
secao "ACESSO AO SEU PAINEL"
|
||||||
|
|
||||||
|
altura = 56
|
||||||
|
topo = @pdf.cursor
|
||||||
|
@pdf.fill_color 'FEF3C7' # amarelo claro (aviso)
|
||||||
|
@pdf.fill_rounded_rectangle [0, topo], @pdf.bounds.width, altura, 6
|
||||||
|
@pdf.fill_color '92400E' # âmbar escuro (texto)
|
||||||
|
@pdf.text_box "Cadastro de acesso ainda não disponível para este motorista.\n" \
|
||||||
|
"Solicite ao administrador para receber seu PIN de 4 dígitos e o " \
|
||||||
|
"QR Code de acesso ao painel do motorista.",
|
||||||
|
at: [12, topo - 12], width: @pdf.bounds.width - 24, size: 10
|
||||||
|
@pdf.fill_color '000000'
|
||||||
|
@pdf.move_down altura + 8
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user