Implantação da função filtro de Operções exemplo UBS***
This commit is contained in:
@@ -35,6 +35,21 @@ class Entrega < ApplicationRecord
|
||||
where(vehicle: vehicle)
|
||||
}
|
||||
|
||||
# Restringe às entregas cujas NFs (reference_id) constam na(s) tabela(s) de
|
||||
# operação informada(s). O JOIN é o mesmo do script de gestão do cliente:
|
||||
# reference_id::text = <tabela_operacao>.nota_fiscal
|
||||
#
|
||||
# SEGURANÇA: o nome da tabela entra no SQL, então passa pela whitelist
|
||||
# (Operacao.sanitizar) e por quote_table_name. Nomes inválidos são descartados;
|
||||
# se nada sobrar, não filtra (all) — o filtro de operação é opcional.
|
||||
scope :da_operacoes, ->(tabelas) {
|
||||
validas = Operacao.sanitizar(tabelas)
|
||||
next all if validas.empty?
|
||||
|
||||
selects = validas.map { |t| "SELECT nota_fiscal FROM #{connection.quote_table_name(t)}" }
|
||||
where("reference_id::text IN (#{selects.join(' UNION ')})")
|
||||
}
|
||||
|
||||
scope :do_mes, ->(data = Date.current) {
|
||||
where(planned_date: data.beginning_of_month..data.end_of_month)
|
||||
}
|
||||
@@ -84,10 +99,11 @@ class Entrega < ApplicationRecord
|
||||
end
|
||||
|
||||
# Contagem de entregas pagas para cálculo estimado
|
||||
def self.contar_pagas(inicio:, fim:, motorista: nil, vehicle: nil)
|
||||
def self.contar_pagas(inicio:, fim:, motorista: nil, vehicle: nil, operacoes: nil)
|
||||
base = pagas.da_conta_gade.no_periodo(inicio, fim)
|
||||
base = base.do_motorista(motorista) if motorista.present?
|
||||
base = base.da_veiculo(vehicle) if vehicle.present?
|
||||
base = base.do_motorista(motorista) if motorista.present?
|
||||
base = base.da_veiculo(vehicle) if vehicle.present?
|
||||
base = base.da_operacoes(operacoes) if operacoes.present?
|
||||
base.count
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user