ALTER TABLE TBNFS_PARCELAMENTO
    ADD CASO_ID INTEGER DEFAULT 0;

COMMENT ON COLUMN TBNFS_PARCELAMENTO.CASO_ID IS
'ID do caso que a percela esta vinculado (regua de cobranca)';

/****************************************************************************/
/****************************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbnfs_parcelamento_b9u for tbnfs_parcelamento
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_CASO VARCHAR(500);
DECLARE VARIABLE NEW_CASO VARCHAR(500);
begin

    HISTORICO = '';
    if (New.Controle > 0) then
       Begin
    
           if (OLD.DATA_VENCIMENTO <> NEW.DATA_VENCIMENTO) THEN
               BEGIN
               HISTORICO = HISTORICO||' DT.VCTO.'||OLD.DATA_VENCIMENTO||'->'||NEW.DATA_VENCIMENTO;

                   INSERT INTO TBNFS_PARCELAMENTO_VENCIMENTO
                   (NFS_PARCELAMENTO_ID, DATA_VENCIMENTO_ANTIGA, DATA_VENCIMENTO_NOVA)
                   VALUES (NEW.CONTROLE, OLD.DATA_VENCIMENTO, NEW.DATA_VENCIMENTO);

               END
           IF (OLD.VALOR <> NEW.VALOR) THEN
               BEGIN
               HISTORICO = HISTORICO||' VALOR '||OLD.VALOR||'->'||NEW.VALOR;
               END
           IF (OLD.VALOR_DESCONTO <> NEW.VALOR_DESCONTO) THEN
               BEGIN
               HISTORICO = HISTORICO||' VR.DESC.'||OLD.VALOR_DESCONTO||'->'||NEW.VALOR_DESCONTO;
               END
           IF (OLD.CONTA_RECEBER_OPERACAO <> NEW.CONTA_RECEBER_OPERACAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' OPER.'||OLD.CONTA_RECEBER_OPERACAO||'->'||NEW.CONTA_RECEBER_OPERACAO;
               END
           IF (OLD.CONTA_RECEBER_BANCO <> NEW.CONTA_RECEBER_BANCO) THEN
               BEGIN
               HISTORICO = HISTORICO||' BCO.'||OLD.CONTA_RECEBER_BANCO||'->'||NEW.CONTA_RECEBER_BANCO;
               END
           IF (OLD.CONTA_RECEBER_MODALIDADE <> NEW.CONTA_RECEBER_MODALIDADE) THEN
               BEGIN
               HISTORICO = HISTORICO||' MOD.'||OLD.CONTA_RECEBER_MODALIDADE||'->'||NEW.CONTA_RECEBER_MODALIDADE;
               END
           IF (OLD.CONTA_RECEBER_POSICAO <> NEW.CONTA_RECEBER_POSICAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' POS.'||OLD.CONTA_RECEBER_POSICAO||'->'||NEW.CONTA_RECEBER_POSICAO;
               END
           IF (OLD.CONTA_RECEBER_COBRANCA <> NEW.CONTA_RECEBER_COBRANCA) THEN
               BEGIN
               HISTORICO = HISTORICO||' COB.'||OLD.CONTA_RECEBER_COBRANCA||'->'||NEW.CONTA_RECEBER_COBRANCA;
               END

           IF (OLD.PAGAMENTO_FORMA <> NEW.PAGAMENTO_FORMA) THEN
               BEGIN
               HISTORICO = HISTORICO||' PG.FORMA.'||OLD.PAGAMENTO_FORMA||'->'||NEW.PAGAMENTO_FORMA;
               END
           IF (OLD.CLASSIFICACAO_CONTABIL <> NEW.CLASSIFICACAO_CONTABIL) THEN
               BEGIN
               HISTORICO = HISTORICO||' CLASS.FIN.'||OLD.CLASSIFICACAO_CONTABIL||'->'||NEW.CLASSIFICACAO_CONTABIL;
               END
           IF (OLD.CCUSTO <> NEW.CCUSTO) THEN
               BEGIN
               HISTORICO = HISTORICO||' C.CUSTO '||OLD.CCUSTO||'->'||NEW.CCUSTO;
               END
           IF (OLD.ACEITE <> NEW.ACEITE) THEN
               BEGIN
               HISTORICO = HISTORICO||' ACEITE '||OLD.ACEITE||'->'||NEW.ACEITE;
               END
           IF (OLD.VIA_DUPLICATA <> NEW.VIA_DUPLICATA) THEN
               BEGIN
               HISTORICO = HISTORICO||' VIA DUP.'||OLD.VIA_DUPLICATA||'->'||NEW.VIA_DUPLICATA;
               END

          IF (OLD.REMESSA_NUMERO_BANCO <> NEW.REMESSA_NUMERO_BANCO) THEN
               BEGIN
               HISTORICO = HISTORICO||' NR.BCO.COB.'||OLD.REMESSA_NUMERO_BANCO||'->'||NEW.REMESSA_NUMERO_BANCO;
               END
           IF (OLD.REMESSA_ARQUIVO <> NEW.REMESSA_ARQUIVO) THEN
               BEGIN
               HISTORICO = HISTORICO||' ARQ.COB.'||OLD.REMESSA_ARQUIVO||'->'||NEW.REMESSA_ARQUIVO;
               END
           IF (OLD.REMESSA_DATA <> NEW.REMESSA_DATA) THEN
               BEGIN
               HISTORICO = HISTORICO||' DT.COB.'||OLD.REMESSA_DATA||'->'||NEW.REMESSA_DATA;
               END
           IF (OLD.VALOR_SALDO <> NEW.VALOR_SALDO) THEN
               BEGIN
               HISTORICO = HISTORICO||' SALDO '||OLD.VALOR_SALDO||'->'||NEW.VALOR_SALDO;
               END

           IF (OLD.OBSERVACAO <> NEW.OBSERVACAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' OBS.'||OLD.OBSERVACAO||'->'||NEW.OBSERVACAO;
               END

           IF (OLD.REPRESENTANTE_COMISSAO <> NEW.REPRESENTANTE_COMISSAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' %COM.'||OLD.REPRESENTANTE_COMISSAO||'->'||NEW.REPRESENTANTE_COMISSAO;
               END

           IF (OLD.FORMA_COMISSAO <> NEW.FORMA_COMISSAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' FORMA COM.'||OLD.FORMA_COMISSAO||'->'||NEW.FORMA_COMISSAO;
               END

           IF (OLD.CASO_ID <> NEW.CASO_ID) THEN
               BEGIN

               OLD_CASO = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 6, '0')||' ('||B.DESCRICAO||')' FROM TBCASO_REGISTRO A, TBCASO_STATUS B WHERE A.STATUS_ID = B.ID AND A.PAINEL_ID = B.PAINEL_ID AND A.ID = OLD.CASO_ID), '');
               NEW_CASO = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 6, '0')||' ('||B.DESCRICAO||')' FROM TBCASO_REGISTRO A, TBCASO_STATUS B WHERE A.STATUS_ID = B.ID AND A.PAINEL_ID = B.PAINEL_ID AND A.ID = NEW.CASO_ID), '');

               HISTORICO = HISTORICO||' CASO:'||OLD_CASO||'->'||NEW_CASO;

               END

       if (HISTORICO <> '') then
           Begin
             INSERT INTO TBHISTORICO
                      (
                      TABELA,
                      TABELA_ID,
                      USUARIO, IP,
                      HISTORICO
                      )
               VALUES(
                      'TBNFS_PARCELAMENTO',
                      Old.CONTROLE,
                      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
                      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
                      FN_ELIPSE(:Historico, 500)
                      );

              IF(NEW.nfs_controle > 0)THEN
              BEGIN
                  INSERT INTO TBHISTORICO
                      (
                      TABELA,
                      TABELA_ID,
                      USUARIO, IP,
                      HISTORICO
                      )
                    VALUES(
                      'TBNFS',
                      Old.nfs_controle,
                      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
                      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
                      'PARC.'||fn_lpad(new.parcela, 2,0)||''||FN_ELIPSE(:Historico, 450)
                      );
              END

              IF(NEW.pdv_cfe_forma_pagamento_id > 0)THEN
              BEGIN
                  INSERT INTO TBHISTORICO
                     (
                      TABELA,
                      TABELA_ID,
                      USUARIO, IP,
                      HISTORICO
                      )
                    VALUES(
                      'TBPDV_CFE',
                      COALESCE((SELECT FIRST 1 C.PDV_CFE_ID FROM tbpdv_cfe_forma_pagamento C WHERE C.ID = NEW.pdv_cfe_forma_pagamento_id),0),
                      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
                      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
                      'PARC.'||fn_lpad(new.parcela, 2,0)||''||FN_ELIPSE(:Historico, 450)
                    );
              END

           End
       End

end
^

SET TERM ; ^

/****************************************************************************/
/****************************************************************************/

/* Todos os Bancos exceto a DELFA */
UPDATE TBCASO_HTML
    SET HTML = '                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                        </td>
                    </tr>
                    
                    <tr style="background-color: black;">
                        <td colspan="1" rowspan="1">&nbsp;</td>
                    </tr>
                    
                    <tr style="background-color: #ffe6bc;">
                        <td colspan="1" rowspan="1">&nbsp;</td>
                    </tr>
                    
                    <tr style="background-color: black;">
                        <td colspan="1" rowspan="1">&nbsp;</td>
                    </tr>
                </tbody>
            </table>
            <p>&nbsp;</p>
    </body>
</html>'
WHERE ID = 2;

/****************************************************************************/
/****************************************************************************/

SET TERM ^ ;

CREATE OR ALTER procedure SPU_REGUA_COBRANCA_CASO (
    IPAINEL_ID integer not null,
    IDIAS integer = 0)
as
declare variable VEMPRESA_ID integer;
declare variable VVINCULO_CASO_ID integer;
declare variable VQTD_DOCUMENTOS integer;
declare variable VTOTAL_VALOR numeric(15,4);
declare variable VNFS_PARC_ID varchar(6000);
declare variable VDOCUMENTOS varchar(6000);
declare variable VVINCULO_CASO_SITUACAO integer;
declare variable VFEED_ID integer;
declare variable VCASO_ID integer;
declare variable VSPLIT varchar(6000);
declare variable VMENSAGEM varchar(6000);
declare variable VASSUNTO varchar(6000);
declare variable PAINEL_ID integer;
declare variable MOTIVO_ID integer;
declare variable TIPO_ID integer;
declare variable ORIGEM_ID integer;
declare variable CASO_ID integer;
declare variable CASO_ID2 integer;
BEGIN

    FOR
        SELECT /*FIRST 5*/ DISTINCT
            X.EMPRESA_CODIGO AS EMPRESA_ID,
            X.CASO_ID,
        
            COUNT(X.NUMERO_NOTAFISCAL) AS QTD_DOCUMENTOS,
            CAST(SUM(X.VALOR_SALDO) AS NUMERIC(15,4)) AS TOTAL_VALOR,
        
            LIST(X.CONTROLE, ',') AS NFS_PARC_ID,
            LIST('ESTAB.: '||FN_LPAD(X.ESTABELECIMENTO_ID, 4, '0')||' | DOC.: '||FN_LPAD(X.NUMERO_NOTAFISCAL, 8, '0')||'/'||FN_LPAD(X.SERIE, 3, '0')||'-'||FN_LPAD(X.PARCELA, 3, '0')||' | DT.VENC.: '||FORMATDATE(X.DATA_VENCIMENTO)||' | VALOR: R$ '||FN_LPAD(FN_FORMAT_NUMBER2(X.VALOR_SALDO, 2), 10, ' '), '; ') AS DOCUMENTOS
        
        FROM (
            SELECT
                A.EMPRESA_CODIGO,
            
                A.ESTABELECIMENTO_CODIGO AS ESTABELECIMENTO_ID,
                A.NUMERO_NOTAFISCAL,
                A.SERIE,
                A.PARCELA,
                A.DATA_EMISSAO,
                A.DATA_VENCIMENTO,
                A.VALOR_SALDO,

                A.CONTROLE,

                COALESCE(A.CASO_ID, 0) AS CASO_ID
            
            FROM (
                SELECT
                    CAST(DATEADD(DAY, -CAST(:IDIAS AS INTEGER), CURRENT_TIMESTAMP) AS DATE) AS DATA_TOLERANCIA
        
                FROM RDB$DATABASE
            ) B, TBNFS_PARCELAMENTO A
            WHERE A.SITUACAO = 1
            AND A.DATA_VENCIMENTO < B.DATA_TOLERANCIA
            AND A.VALOR_SALDO > 0
            
            ORDER BY
                A.EMPRESA_CODIGO,
                A.DATA_VENCIMENTO
        ) X
        
        GROUP BY
            X.EMPRESA_CODIGO,
            X.CASO_ID

    INTO
        :VEMPRESA_ID,
        :VVINCULO_CASO_ID,
        :VQTD_DOCUMENTOS,
        :VTOTAL_VALOR,
        :VNFS_PARC_ID,
        :VDOCUMENTOS

    DO
    BEGIN
        
        FOR
            SELECT
                D.PAINEL_ID,
                D.MOTIVO_ID,
                D.TIPO_ID,
                D.ORIGEM_ID,
    
                COALESCE((SELECT FIRST 1
                            E.REGISTRO_ID
                        FROM TBCASO_REGISTRO_DETALHE E, TBCASO_PAINEL_CONF E2
                        WHERE E.CAMPO_ID = E2.ID
                        AND E.PAINEL_ID = E2.PAINEL_ID
                        AND E.PAINEL_ID = D.PAINEL_ID
                        AND E2.PARAM_EXEC = 1
                        AND TRIM(E.VALOR) = :VEMPRESA_ID), 0) AS CASO_ID,
    
                COALESCE((SELECT FIRST 1
                            C.ID
                        FROM TBCASO_REGISTRO C
                        WHERE C.PAINEL_ID = D.PAINEL_ID
                        AND C.CASO_ORIGEM_ID = :VEMPRESA_ID
                        AND C.CASO_ORIGEM_TABELA = 'TBCLIENTE'), 0) AS CASO_ID2
    
            FROM TBCASO_PAINEL_PROCEDIMENTO D
            WHERE D.PAINEL_ID = :IPAINEL_ID
            AND D.OPERACAO = 0

        INTO
           :PAINEL_ID,
           :MOTIVO_ID,
           :TIPO_ID,
           :ORIGEM_ID,
           :CASO_ID,
           :CASO_ID2

        DO
        BEGIN

            IF ((COALESCE(:CASO_ID, 0) > 0) OR (COALESCE(:CASO_ID2, 0) > 0)) THEN
            BEGIN

                :VVINCULO_CASO_SITUACAO = COALESCE((SELECT FIRST 1 S.TIPO FROM TBCASO_REGISTRO C, TBCASO_STATUS S WHERE C.STATUS_ID = S.ID AND C.PAINEL_ID = S.PAINEL_ID AND C.ID = :VVINCULO_CASO_ID), 0);

                IF (
                    (COALESCE(:VVINCULO_CASO_ID, 0) = 0) OR
                    (COALESCE(:VVINCULO_CASO_ID, 0) > 0 AND COALESCE(:VVINCULO_CASO_ID, 0) <> COALESCE(:CASO_ID2, 0) AND COALESCE(:VVINCULO_CASO_ID, 0) <> COALESCE(:CASO_ID, 0)) OR
                    (COALESCE(:VVINCULO_CASO_ID, 0) > 0 AND COALESCE(:VVINCULO_CASO_SITUACAO, 0) > 2)
                ) THEN
                BEGIN

                    /* verificando o ID do caso */
                    :VCASO_ID = 0;
                    IF (COALESCE(:CASO_ID, 0) > 0) THEN
                    BEGIN
                        :VCASO_ID = :CASO_ID;
                    END ELSE
                    BEGIN
                        :VCASO_ID = :CASO_ID2;
                    END
    
    
                    :VMENSAGEM = '<p><strong>Parcelas do Cliente fora do Periodo de Tolerancia ('||:IDIAS||' dias):</strong> '||:VQTD_DOCUMENTOS||' Parcelas Vinculadas </p>';
                    :VASSUNTO  = 'AGENDAMENTO: [CASO: '||FN_LPAD(:VCASO_ID, 8, '0')||'] - INFORMACOES DE COBRANCA';
    
                    FOR
                        SELECT
                            SP.OSPLIT
                        FROM SPLIT_V2(:VDOCUMENTOS, ';') SP
    
                    INTO
                        :VSPLIT
    
                    DO
                    BEGIN
    
                        :VMENSAGEM = :VMENSAGEM ||'<p> '|| :VSPLIT ||' </p>';
    
                    END
    
    
                    /* Inclusão do FEED no caso */
                    :VFEED_ID = GEN_ID(GTBCASO_FEED, 1);
    
                    INSERT INTO TBCASO_FEED (ID, DE, PARA, EM_COPIA, EM_COPIA_OCULTA, MENSAGEM, ASSUNTO, PAINEL_ID, CASO_ID, FILES, SUBFEED, TIPO, USUARIO_ID, COMENTARIO, LISTA_FILE, WORKFLOW_ITEM_ID)
                        VALUES (:VFEED_ID, '', '', '', '', :VMENSAGEM, FN_ELIPSE(:VASSUNTO, 300), :PAINEL_ID, :VCASO_ID, 1, 0, 2, 99999, 0, '', 0);


                    /* Atualizando vinculo das parcelas */
                    FOR
                        SELECT
                            SP.OSPLIT
                        FROM SPLIT_V2(:VNFS_PARC_ID, ',') SP

                    INTO
                        :VSPLIT

                    DO
                    BEGIN

                        UPDATE TBNFS_PARCELAMENTO
                            SET CASO_ID = :VCASO_ID
                            WHERE CONTROLE = :VSPLIT;

                    END
                END

            END ELSE
            BEGIN

                :VCASO_ID = 0;
                FOR
                    SELECT
                        SPC.OCASO_ID
                    FROM SPI_CASO(:PAINEL_ID, :MOTIVO_ID, :TIPO_ID, :ORIGEM_ID, 'AGENDA_AUT', :VEMPRESA_ID, CAST(:VTOTAL_VALOR AS NUMERIC(15,2)), FN_ELIPSE(:VDOCUMENTOS, 6000), '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, 'TBAGENDAMENTO') SPC
    
                INTO
                    :VCASO_ID
    
                DO
                BEGIN

                    /* Atualizando vinculo das parcelas */
                    FOR
                        SELECT
                            SP.OSPLIT
                        FROM SPLIT_V2(:VNFS_PARC_ID, ',') SP

                    INTO
                        :VSPLIT

                    DO
                    BEGIN

                        UPDATE TBNFS_PARCELAMENTO
                            SET CASO_ID = :VCASO_ID
                            WHERE CONTROLE = :VSPLIT;

                    END
    
                    /* Historico para geracao de novo caso */
                    EXECUTE PROCEDURE SPI_CASO_HISTORICO(:VCASO_ID, :PAINEL_ID, 'CASO REGISTRADO VIA AGENDAMENTO DE SISTEMA - '||:VQTD_DOCUMENTOS||' Parcelas Vinculadas');

                END
            END

        END
    END
END
^

SET TERM ; ^

COMMENT ON PARAMETER SPU_REGUA_COBRANCA_CASO.IDIAS IS
'Dias de tolerância';

