Correção de horario e implantação da geração de Romaneio
This commit is contained in:
51
db/migrate/20260827000003_create_romaneio_linhas.rb
Normal file
51
db/migrate/20260827000003_create_romaneio_linhas.rb
Normal file
@@ -0,0 +1,51 @@
|
||||
# Uma PARADA do romaneio — vira uma linha da tabela do PDF.
|
||||
#
|
||||
# ⚠️ "linhas" e não "itens": "RomaneioItem".tableize dá `romaneio_items`, e o
|
||||
# inflector pt-BR do projeto (config/initializers/inflections.rb) não conhece
|
||||
# item/itens — ensiná-lo renomearia todo `item`/`items` do app. `RomaneioLinha`
|
||||
# pluraliza sozinho, e `linhas` já é a palavra que os serviços usam
|
||||
# (PlanilhaEntregas#linhas, PlanilhaCarga#linhas). Travado em
|
||||
# spec/models/table_names_spec.rb, que existe porque ConsolidacaoMotorista já
|
||||
# quebrou em produção por causa do inflector.
|
||||
#
|
||||
# `chave_origem` é a identidade ESTÁVEL entre reimportações: a NF quando existe,
|
||||
# senão "T:<md5(titulo|endereco)>". Sem esse fallback, duas linhas cujo "Título" não
|
||||
# casa o padrão "NF n - NOME" colidiriam no índice único e a importação inteira
|
||||
# estouraria. Veículo e ordem NÃO entram na chave: eles mudam quando o plano é
|
||||
# reotimizado, e a linha continua sendo a mesma entrega.
|
||||
#
|
||||
# `origem` = snapshot do que o PLANO trouxe na última importação (para o
|
||||
# diff e para o botão "restaurar do plano").
|
||||
# `campos_editados` = nomes dos campos que o operador sobrescreveu. É ISTO que
|
||||
# sobrevive à reimportação — dirty tracking POR CAMPO, não por
|
||||
# linha: "corrigi o telefone" não pode significar "também
|
||||
# respondo pelo endereço" e congelar um endereço velho.
|
||||
# `removido_em` = a linha saiu do plano mas tinha edição humana. Soft, porque
|
||||
# apagar levaria junto o trabalho sem deixar rastro na tela.
|
||||
class CreateRomaneioLinhas < ActiveRecord::Migration[7.1]
|
||||
def change
|
||||
create_table :romaneio_linhas do |t|
|
||||
t.references :romaneio, null: false, foreign_key: true
|
||||
t.string :veiculo, null: false
|
||||
t.integer :ordem, null: false, default: 0
|
||||
t.string :chave_origem, null: false
|
||||
|
||||
t.string :nota_fiscal, null: false, default: ''
|
||||
t.string :nome, null: false, default: ''
|
||||
t.text :endereco, null: false, default: ''
|
||||
t.string :aparelho, null: false, default: '' # 'SIM' ou ''
|
||||
t.string :telefones, null: false, default: ''
|
||||
|
||||
t.jsonb :origem, null: false, default: {}
|
||||
t.jsonb :campos_editados, null: false, default: []
|
||||
t.datetime :removido_em
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
add_index :romaneio_linhas, %i[romaneio_id chave_origem],
|
||||
unique: true, name: 'idx_romaneio_linha_chave_unico'
|
||||
add_index :romaneio_linhas, %i[romaneio_id veiculo ordem],
|
||||
name: 'idx_romaneio_linha_ordem'
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user