-- ---------------------------------------------------------------------------
-- O item lancado no PDV antigo com "Usar pacote contratado: Nao" guarda a escolha
-- (D453, a resposta 80 do dono, 12/10/2026, a opcao "b").
--
--   mysql franquia_producao < scripts/migracao-vendas-produtos-pacote-recusado.sql
--
-- Roda no laco do passo 0 de `docs/procedimento-de-corte.md`, em PRODUCAO, e no
-- laco da copia do desenvolvimento de `docs/ensaio-geral-do-corte.md`, contra a
-- `franquiabv_dev`; os bancos da suite ja nascem com a coluna (`mysql.sql`, e o
-- `postgres/schema.sql` do gerador). NA COPIA LOCAL DESDE 12/10/2026, nos dois
-- bancos, pela resposta 83 do dono (a opcao (a): o esquema que so acrescenta entra
-- nas duas copias locais quando a resposta pedir). A base do teste do BVIP fica sem
-- ela ate a proxima copia exportada daqui, pela mao do dono.
--
-- Desde a resposta 61 (o D453, 10/10/2026), tirar da venda o item que gastou a
-- sessao do pacote passa a sessao ao item mais antigo do mesmo servico que saiu
-- pelo preco. O "Nao" do PDV antigo -- o cliente quis pagar e guardar a sessao --
-- valia so para o lancamento e nao ficava no item: o item lancado assim herdava a
-- sessao como qualquer outro. O dono escolheu (a 80, a opcao "b"): o item lancado
-- com "Nao" NAO herda, e a escolha fica gravada em cada item.
--
-- O QUE A COLUNA QUER DIZER: 1 = o operador escolheu "Nao" no lancamento deste
-- item (`VendasProdutosController::adicionarAction`). 0 = nao recusou -- o "Sim"
-- do PDV antigo, a tela nova (que nao tem o "Usar pacote", e cujos itens herdam,
-- como a resposta 61 pede ali), a comanda aberta pela agenda e todo item de antes
-- desta coluna. O padrao 0 e o valor que faz herdar: os itens ja gravados seguem
-- como hoje.
--
-- IDEMPOTENTE: so acrescenta se `pacote_recusado` nao existir.
--
-- NAO COPIA A TABELA: `ALGORITHM=INSTANT` acrescenta a coluna so no dicionario
-- (o MySQL de producao e 8.0.46, e o INSTANT de coluna no fim da tabela existe
-- desde o 8.0.12). Sao 3.264.661 linhas na copia, contadas em 12/10/2026. Se o
-- servidor recusar o INSTANT, o `ALTER` para com erro, em vez de reescrever a
-- tabela em silencio com as vendas esperando: rodar sem o `ALGORITHM` copia a
-- tabela, e e para fora do movimento.
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO CORTE -- o passo 0 de
-- `docs/procedimento-de-corte.md` (D323).
--
-- O passo 1 do corte refaz o `mysql.sql` a partir da estrutura de producao; sem
-- a coluna la, ela some do `schema.sql`, e o "Nao" volta a valer so para o
-- lancamento (o codigo pergunta se ela existe, `ISBase\Doctrine\ColunaNoBanco`, e
-- nao quebra: so deixa de gravar e de ler). A entidade NAO a mapeia, de
-- proposito: a base do teste do BVIP nao a tem ate a proxima copia exportada, e a
-- entidade mapeada pediria a coluna em toda leitura de item de venda (o D473). O
-- codigo antigo de producao nao a le nem a escreve, e o padrao 0 cobre o
-- `INSERT` dele.
-- ---------------------------------------------------------------------------

SET @existe = (
    SELECT COUNT(*) FROM information_schema.columns
     WHERE table_schema = DATABASE()
       AND table_name = 'vendas_produtos'
       AND column_name = 'pacote_recusado'
);

SET @sql = IF(@existe = 0,
    'ALTER TABLE vendas_produtos
       ADD COLUMN pacote_recusado tinyint(1) NOT NULL DEFAULT ''0''
       COMMENT ''1 = lancado no PDV antigo com Usar pacote: Nao; o item nao herda a sessao do item tirado (D453).''
       AFTER comissao,
       ALGORITHM=INSTANT',
    'SELECT ''coluna ja existe, nada a fazer'' AS aviso'
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

-- Conferencia. Antes do codigo novo no ar, o esperado e nenhum item recusado.
SELECT
    COUNT(*)                  AS itens,
    SUM(pacote_recusado = 1)  AS recusados
FROM vendas_produtos;
