CREATE OR REPLACE PROCEDURE GRAVA_TOTALDIACAIXA(P_CDFILIAL IN VARCHAR,
                                                P_CDCAIXA IN VARCHAR)
AS
   V_COUNT NUMBER;
   V_DTINI DATE;
   V_DTFIN DATE;
   V_COUNT2 NUMBER;
BEGIN
   V_DTINI := TRUNC(SYSDATE)-30;
   V_DTFIN := TRUNC(SYSDATE)-1;
   BEGIN
      SELECT COUNT(*)
        INTO V_COUNT
        FROM TOTALDIACAIXA
       WHERE CDFILIAL = P_CDFILIAL
         AND ((CDCAIXA = P_CDCAIXA) OR ('T' = P_CDCAIXA));
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
          V_COUNT := 0;
    END;
    IF V_COUNT = 0 THEN
       FOR C_CAIXA IN
          (SELECT CDFILIAL, CDCAIXA
             FROM CAIXA
            WHERE CDFILIAL = P_CDFILIAL
              AND ((CDCAIXA = P_CDCAIXA) OR ('T' = P_CDCAIXA))) LOOP
          FOR C_VENDAS IN
             (SELECT ROUND(SUM(((TRUNC(IT.QTPRODVEND * (IT.VRUNITVEND + NVL(IT.VRUNITVENDCL,0)),2)) - NVL(IT.VRDESITVEND,0)+NVL(IT.VRACRITVEND,0))), 2) VRTOTAL
                FROM VENDA V, ITEMVENDA IT
               WHERE V.CDFILIAL = IT.CDFILIAL
                 AND V.CDCAIXA = IT.CDCAIXA
                 AND V.NRSEQVENDA = IT.NRSEQVENDA
                 AND V.IDSITUVENDA = 'O'
                 AND V.DTENTRVENDA BETWEEN V_DTINI AND V_DTFIN
                 AND V.CDFILIAL = C_CAIXA.CDFILIAL
                 AND V.CDCAIXA = C_CAIXA.CDCAIXA) LOOP
                       
                 BEGIN
                    SELECT COUNT(*)
                      INTO V_COUNT2
                      FROM TOTALDIACAIXA
                     WHERE CDFILIAL = C_CAIXA.CDFILIAL
                       AND CDCAIXA = C_CAIXA.CDCAIXA 
                       AND DTTOTAL = V_DTFIN+1;
                  EXCEPTION
                    WHEN NO_DATA_FOUND THEN
                        V_COUNT := 0;
                  END;
                  IF V_COUNT2 = 0 THEN
                  INSERT INTO TOTALDIACAIXA
                              (CDFILIAL, CDCAIXA, DTTOTAL, VRGTINI, VRGTFIN, IDIMPTOTDIACAIXA)
                          VALUES
                              (C_CAIXA.CDFILIAL, C_CAIXA.CDCAIXA, V_DTFIN + 1, C_VENDAS.VRTOTAL, NULL, 'S');
                  END IF;
          END LOOP;
       END LOOP;
    END IF;
END;
/