CREATE TABLE TBPEDIDO_ITEM_CUSTO (
    ID INTEGER,
    PEDIDO_ITEM_ID INTEGER,
    MARGEM NUMERIC(18,4),
    VALOR NUMERIC(18,4),
    C_MPR NUMERIC(18,4),
    C_STP NUMERIC(18,4),
    C_MOD NUMERIC(18,4),
    C_MOI_PR NUMERIC(18,4),
    C_MOI_AB NUMERIC(18,4),
    PERCENTUAL_PERDA NUMERIC(18,4),
    CONTAS NUMERIC(18,8),
    COMISSAO NUMERIC(18,8),
    FRETE NUMERIC(18,8),
    TRIBUTOS NUMERIC(18,8),
    PERCENTUAL_IR NUMERIC(18,8),
    C_DIR COMPUTED BY (((C_STP + C_MPR + C_MOD)*(1+COALESCE(PERCENTUAL_PERDA,0)))),
    CUSTO COMPUTED BY ((
(C_MPR + C_STP + C_MOD + C_MOI_PR + C_MOI_AB) * (PERCENTUAL_PERDA + 1)
)),
    GASTO COMPUTED BY ((CUSTO + COMISSAO + FRETE + TRIBUTOS + CONTAS)),
    MARGEM_CONTRIBUICAO COMPUTED BY ((IIF(  cast(((VALOR + COALESCE(MARGEM,0)) - GASTO) / (VALOR + COALESCE(MARGEM,0)) as numeric(18,4)) > 0,
(
  cast(((VALOR + COALESCE(MARGEM,0)) - GASTO) / (VALOR + COALESCE(MARGEM,0)) as numeric(18,4))
   - 
  (cast(((VALOR + COALESCE(MARGEM,0)) - GASTO) / (VALOR + COALESCE(MARGEM,0)) as numeric(18,4))
      
  * cast(PERCENTUAL_IR / 100 as numeric(18,4)))
)
,
(
  cast(((VALOR + COALESCE(MARGEM,0)) - GASTO) / (VALOR + COALESCE(MARGEM,0)) as numeric(18,4))
))
)));

CREATE SEQUENCE GTBPEDIDO_ITEM_CUSTO;

create trigger Ttbpedido_item_custo_b01i for tbpedido_item_custo
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbpedido_item_custo,1);
end;

COMMENT ON TABLE TBPEDIDO_ITEM_CUSTO IS 'CUSTO DOS ITENS DOS PEDIDOS';

ALTER TABLE TBPEDIDO_ITEM_CUSTO
    ADD DATA DATE,
    ADD CLIENTE INTEGER,
    ADD PRODUTO_ID INTEGER,
    ADD TAMANHO INTEGER;

CREATE INDEX ITBPEDIDO_ITEM_CUSTO_02
ON TBPEDIDO_ITEM_CUSTO (CLIENTE,DATA,PRODUTO_ID,TAMANHO);

CREATE INDEX ITBPEDIDO_ITEM_CUSTO_01
ON TBPEDIDO_ITEM_CUSTO (ID);


ALTER TABLE TBDOLAR_MENSAL
    ADD DATA TIMESTAMP DEFAULT 'now';

ALTER TABLE TBDOLAR_MENSAL
    ADD DIA INTEGER;

alter table TBDOLAR_MENSAL
alter ID position 1;

alter table TBDOLAR_MENSAL
alter DATA position 2;

alter table TBDOLAR_MENSAL
alter ANO position 3;

alter table TBDOLAR_MENSAL
alter MES position 4;

alter table TBDOLAR_MENSAL
alter DIA position 5;

alter table TBDOLAR_MENSAL
alter UPDATE_DV position 6;

alter table TBDOLAR_MENSAL
alter UPDATE_DC position 7;

alter table TBDOLAR_MENSAL
alter DOLAR_COMPRA position 8;

alter table TBDOLAR_MENSAL
alter DOLAR_VENDA position 9;

ALTER TABLE TBREGRA_CALCULO_CUSTO
    ADD QUANTIDADE INTEGER;

COMMENT ON COLUMN TBREGRA_CALCULO_CUSTO.QUANTIDADE IS
'quantidade padrao no calculo do custo';

ALTER TABLE TBPEDIDO_ITEM_CUSTO
    ADD QUANTIDADE NUMERIC(15,4);

ALTER TABLE TBCUSTO_PADRAO
    ADD FAMILIA_TROCA INTEGER;

COMMENT ON COLUMN TBCUSTO_PADRAO.FAMILIA_TROCA IS
'familia para troca padrao no custo';

ALTER TABLE TBCUSTO_PADRAO
    ADD JSON_TROCA VARCHAR(100);

COMMENT ON COLUMN TBCUSTO_PADRAO.JSON_TROCA IS
'json da familia de troca';

CREATE OR ALTER procedure spc_produto_densidade_espessura (
    iproduto_id integer)
returns (
    produto_id integer,
    modelo_id integer,
    modelo_descricao varchar(200),
    produto_descricao varchar(400),
    densidade integer,
    espessura numeric(18,1),
    tipo char(20))
as
begin
  for
    Select P.Codigo Produto_Id,
           M.Codigo Modelo_Id, M.Descricao Modelo_Descricao, p.descricao as PRODUTO_DESCRICAO,

           Coalesce(
          (Select First 1 M2.Densidade
             From TbModelo_Consumo MCC, TbProduto P2, TbModelo M2
            Where P2.Modelo_Codigo = M2.Codigo
              and MCC.modelo_codigo = M.Codigo
              and MCC.consumo_produto_codigo = P2.Codigo
              and P2.Familia_Codigo = 74
              ),
          coalesce((Select First 1 M2.Densidade
             From TbModelo_Consumo MCC, TbProduto P2, TbModelo M2
            Where P2.Modelo_Codigo = M2.Codigo
              and MCC.modelo_codigo = M.Codigo
              and MCC.consumo_produto_codigo = P2.Codigo
              and P2.Familia_Codigo = 13
              ),
          (Select First 1 M2.Densidade
             From TbModelo_Consumo MCC, TbProduto P2, TbModelo M2
            Where P2.Modelo_Codigo = M2.Codigo
              and MCC.modelo_codigo = M.Codigo
              and MCC.consumo_produto_codigo = P2.Codigo
              and P2.Familia_Codigo = 3
              ))) Densidade,

           Coalesce(
          (Select First 1 M2.Espessura
             From TbModelo_Consumo MCC, TbProduto P2, TbModelo M2
            Where P2.Modelo_Codigo = M2.Codigo
              and MCC.modelo_codigo = M.Codigo
              and MCC.consumo_produto_codigo = P2.Codigo
              and P2.Familia_Codigo = 74
              ),
          coalesce((Select First 1 M2.Espessura
             From TbModelo_Consumo MCC, TbProduto P2, TbModelo M2
            Where P2.Modelo_Codigo = M2.Codigo
              and MCC.modelo_codigo = M.Codigo
              and MCC.consumo_produto_codigo = P2.Codigo
              and P2.Familia_Codigo = 13
              ),
         (Select First 1 M2.Espessura
             From TbModelo_Consumo MCC, TbProduto P2, TbModelo M2
            Where P2.Modelo_Codigo = M2.Codigo
              and MCC.modelo_codigo = M.Codigo
              and MCC.consumo_produto_codigo = P2.Codigo
              and P2.Familia_Codigo = 13
              ))) Espessura

    From TbProduto P , TbModelo M
    Where P.Modelo_Codigo = M.Codigo
      and p.codigo = :IPRODUTO_ID
      And P.Status = '1'
      and M.Status = '1'
      --and M.T13 = '1'

  into
    :PRODUTO_ID,
    :MODELO_ID,
    :MODELO_DESCRICAO,
    :PRODUTO_DESCRICAO,
    :DENSIDADE,
    :ESPESSURA
  do begin
    :TIPO = '';
    suspend;
  end
end;

