/* pARTE DIARIO */

--SELECT * FROM OP_SUMMARYDAY
--OP_CerrarParteDiarioProc
--CREATE   Procedure OP_CerrarParteDiarioProc
ALTER   Procedure OP_CerrarParteDiarioProc
(@SITEID       UD_IDSITE = '76  ',
 @MONEDABASE   UD_CURYID = 'PEN',
 @MONEDAEXTR   UD_CURYID = 'USD',
 @USERID       UD_USERID = 'SYSADMIN',
 @CURYTYPEID   UD_CURYTYPEID = 'TCONV'
)
as      
BEGIN    
    DECLARE @FECHAPROCESO  UD_FECHA     
    Select @FECHAPROCESO=DATEPROCE from setup 
--SET @FECHAPROCESO = '31/07/2008'
PRINT CAST(@FECHAPROCESO AS VARCHAR(20))
    if EXISTS(select BATNBRDIARYSUMMARY from OP_SUMMARYDAY where SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO)  
       BEGIN     
          RAISERROR 20000 'Parte Diario ya Fue cerrado'                                          
          RETURN(1)                  
       END

    BEGIN TRAN
        
        UPDATE SETUP SET GENRESUPART=0 
  
  	IF (@@ERROR!=0 or @@rowcount=0) 
           BEGIN  
            ROLLBACK TRAN
            RAISERROR  20000 'No se pudo Iniciar el proceso grabación '            
            RETURN(1)    
        END   
                 
        UPDATE OP_CTRLFUEL SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
        IF (@@ERROR!=0)-- OR @@ROWCOUNT=0) 
           BEGIN  
             ROLLBACK  
             RAISERROR 20000 'No se pudo Actualizar el Estado en Control de Combustibles [OP_CTRLFUEL]'                                          
             RETURN(1)
           END
                 
        UPDATE OP_CTRLFUELPRICE SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
        IF (@@ERROR!=0) --OR @@ROWCOUNT=0) 
           BEGIN  
             ROLLBACK  
             RAISERROR 20000 'No se pudo Actualizar el Estado en Control de Combustibles [OP_CTRLFUELPRICE]'                                          
             RETURN(1)            
           END


        UPDATE OP_CTRLFUELPRICESALES SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
--         *****************************************************************************************************************************************************************************************************************777
/*        IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
           BEGIN  
             ROLLBACK  
             RAISERROR 20000 'No se pudo Actualizar el Estado en Control de Combustibles [OP_CTRLFUELPRICESALES]'                                          
             RETURN(1)
           END
*/

        UPDATE OP_CARD_MONT SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
       -- IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
          -- BEGIN  
          --   ROLLBACK  
         --    RAISERROR 20000 'No se pudo Actualizar el Estado en el Resumen de Tarjetas [OP_CARD_MONT] '                                          
            -- RETURN(1)
           --END
        UPDATE OP_CARD_MONTSALES SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
      --  IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
        --   BEGIN  
          --   ROLLBACK  
            -- RAISERROR 20000 'No se pudo Actualizar el Estado en el Resumen de Tarjetas [OP_CARD_MONTSALES] '                                          
            -- RETURN(1)
           --END
--SELECT * FROM OP_SUMMARYSALES WHERE SITEID='76  ' AND DATEPROCE='20080301'  Pablo N.
        UPDATE OP_SUMMARYSALES SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
/*        IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
           BEGIN  
             ROLLBACK  
             RAISERROR 20000 'No se pudo Actualizar el Estado en el Resumen de Ventas [OP_SUMMARYSALES]'                                          
             RETURN(1)
           END
*/
        UPDATE OP_DEPOSITSITE SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
/*        IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
           BEGIN  
             ROLLBACK  
             RAISERROR 20000 'No se pudo Actualizar el Estado en el Control de depósitos [OP_DEPOSITSITE]'                                          
             RETURN(1)
           END
*/
        UPDATE OP_DEPOSITSITEDET SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
/*        IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
           BEGIN  
             ROLLBACK  
             RAISERROR 20000 'No se pudo Actualizar el Estado en el Control de depósitos [OP_DEPOSITSITEDET]'                                          
             RETURN(1)
           END
*/
        UPDATE OP_CCSALESPERSON SET STATUS=1 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
--  IF (@@ERROR!=0 OR @@ROWCOUNT=0)     
---********************************************************************************************************************************************************************************************************************************7777
/*
           BEGIN
             ROLLBACK
             RAISERROR 20000 'No se pudo Actualizar el Estado en Faltantes/Sobrantes [OP_CCSALESPERSON]'                                            
             RETURN(1) 
           END       
*/
--SELECT @SITEID,@FECHAPROCESO Pablo N.
        UPDATE OP_DOCSUMMARY SET STKPROCE=1 WHERE SITEID=@SITEID AND DOCDATE=@FECHAPROCESO   
/*        IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
           BEGIN
             ROLLBACK
             RAISERROR 20000 'No se pudo Actualizar el Estado en Faltantes/Sobrantes [OP_CCSALESPERSON]'
             RETURN(1) 
           END
*/
         /****************************************************************************************/
         -- Hay que llenar las Tablas de Resumen de Inventarios

-----INICIO------Pablo Neyra.------BLOQUEO PROCESO ORIGINAL--*********************************************************************************************

         
         DECLARE @VALORRETORNO INT
         SET EXEC @VALORRETORNO=GENERA_RESUMENES_MOVIMIENTOS_PROC @FECHAPROCESO,@FECHAPROCESO
         
         IF @VALORRETORNO!=0
            BEGIN 
              ROLLBACK TRAN
              RAISERROR 20000 'No se pudo Generar Resumen de Movimientos de Inventarios'    
              RETURN(1)
            END
      
         -- Hay que Obtener el Correlativo para grabar en OP_SUMMARYDAY

         DECLARE @TSTAMP         TIMESTAMP
         DECLARE @NBRCORELATIVE  UD_CORRELATIVOS 

         SELECT @NBRCORELATIVE=NBRCORELATIVE,@TSTAMP=TSTAMP 
                FROM OP_CORELATIVE WHERE TYPECORELATIVE='BATNBRDIARYSUMMARY' 

         UPDATE OP_CORELATIVE SET NBRCORELATIVE=@NBRCORELATIVE+1 
                              WHERE TYPECORELATIVE='BATNBRDIARYSUMMARY' AND TSTAMP=@TSTAMP 
                                              
         IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
           BEGIN  
             ROLLBACK  
             RAISERROR 20000 'No se pudo Actualizar el Correlativo para el Resumen de Parte Diario'                                          
             RETURN(1)
           END

         -- Hay que Obtener el Monto del Tipo de Cambio          
         
         DECLARE @MONTOCAMBIO       UD_CURYRATE                                                        

         SELECT @MONTOCAMBIO=RATE FROM CURYRATE WHERE CURYTYPEID=@CURYTYPEID AND
                FROMCURYID=@MONEDABASE AND TOCURYID=@MONEDAEXTR AND
                CURYDATE=(SELECT MAX(CURYDATE)FROM CURYRATE WHERE CURYDATE<=@FECHAPROCESO AND CURYTYPEID=@CURYTYPEID)         
         
    
         -- Hay que Obtener los Datos del Parte Diario 
         
         DECLARE @COMMENT   varchar(40)
         DECLARE @TOTALPEN  UD_MONTO
        
         SELECT @COMMENT=COMMENT,@TOTALPEN=TOTALPEN FROM OP_SUMMARYSALES
                                 WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO

         -- Pasos para Obtener el Campo Round
         DECLARE @CUSTIDSETUP              UD_CODCLIENT
         DECLARE @CCLASSIDANTICIPATE       UD_CUSTCLASSID          
         DECLARE @TOTALPENDEPOSITO         UD_MONTO   
         DECLARE @TOTALPENSUMMARY          UD_MONTO
         DECLARE @TOTALDIFERENCIA          UD_MONTO

         DECLARE @MAXDIFDIARY              UD_MONTO
         
         SELECT @MAXDIFDIARY=maxdifdiary,@CUSTIDSETUP=CUSTID FROM SETUP    
         SELECT @CCLASSIDANTICIPATE=CCLASSIDANTICIPATE FROM OP_SETUP 
          
	 set @CUSTIDSETUP='SS00000' + rtrim(ltrim(@SITEID)) + '1'

--       SELECT @TOTALPENDEPOSITO=TOTALPEN FROM OP_DEPOSITSITE WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO          

         SELECT @TOTALPENDEPOSITO=SUM(TOTALPEN) FROM OP_DEPOSITSITEDET INNER JOIN CUSTOMER ON 
                                  OP_DEPOSITSITEDET.CUSTIDSS=CUSTOMER.CUSTIDSS                           
                                  WHERE (CUSTOMER.CUSTIDSS=@CUSTIDSETUP OR CUSTOMER.CUSTCLASSID=@CCLASSIDANTICIPATE)
              AND SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
/*
            IF @TOTALPENDEPOSITO IS NULL  
               BEGIN
                 ROLLBACK  
                 RAISERROR 20000 'No existe Déposito para esta Fecha de Proceso '
                 RETURN(1)         
               END 
*/
   
         SELECT @TOTALPENSUMMARY=TOTALPEN FROM OP_SUMMARYSALES WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO
/*
            IF @TOTALPENSUMMARY IS NULL 
               BEGIN
                 ROLLBACK  
                 RAISERROR 20000 'No existe Resumen de Ventas para esta Fecha de Proceso '
                 RETURN(1)         
               END
*/

         DECLARE @TOTALPENTARJETAS  UD_MONTO
         DECLARE @TOTALPENSOBRANTE  UD_MONTO
         DECLARE @TOTALPENFALTANTE  UD_MONTO
         DECLARE @ERROR             INT         
         -- Hay que Verificar las Tarjetas

         SET EXEC @ERROR=OP_GRABAR_ADJUST_CARDPROC @SITEID,@FECHAPROCESO,@USERID 
            
         IF @ERROR!=0 
           BEGIN                       
             ROLLBACK  
             RAISERROR 20000 'No se pudo Generar Ajustes '
             RETURN(1)
           END         

         SELECT @TOTALPENTARJETAS =SUM(TOTALPENSALES) FROM Op_Card_montsales 
                                   WHERE Op_Card_montsales.SITEID=@SITEID AND 
                                         Op_Card_montsales.DATEPROCE=@FECHAPROCESO            
   
         -- Hay que Obtener el Faltante 
    SELECT @TOTALPENFALTANTE=SUM(CASE DEBEHABER WHEN 0 THEN TOTALPEN ELSE 0 END),
           @TOTALPENSOBRANTE=SUM(CASE DEBEHABER WHEN 1 THEN TOTALPEN ELSE 0 END)
           from op_ccsalespersondet D inner join OP_CCSALESPERSONTYPE T on D.CCSALESPERSONTYPEID = T.CCSALESPERSONTYPEID
           WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO      
--Antes: Pablo N.
--         SELECT @TOTALPENFALTANTE=SUM(CASE CCSALESPERSONTYPEID WHEN 1 THEN TOTALPEN ELSE 0 END),
--                @TOTALPENSOBRANTE=SUM(CASE CCSALESPERSONTYPEID WHEN 2 THEN TOTALPEN ELSE 0 END)
--                from op_ccsalespersondet 
--                WHERE SITEID=@SITEID AND DATEPROCE=@FECHAPROCESO      

         -- Capturar la Diferencia
        
         SET @TOTALDIFERENCIA=ISNULL(@TOTALPENDEPOSITO,0) + ISNULL(@TOTALPENTARJETAS,0) - ISNULL(@TOTALPENSOBRANTE,0) + ISNULL(@TOTALPENFALTANTE,0) - ISNUlL(@TOTALPENSUMMARY,0)
  
         IF @TOTALDIFERENCIA < 0 --Es Negativo  
           BEGIN     
             SET @TOTALDIFERENCIA=@TOTALDIFERENCIA *-1                  
           END
     
         IF @TOTALDIFERENCIA > @MAXDIFDIARY
           BEGIN                          
             ROLLBACK TRAN
             RAISERROR 20000 'Existe una Diferencia que excede la permitida'                                                       
             RETURN(1)
           END 
                                                                       
         -- Grabar en la Tabla op_summaryday
              
         INSERT INTO OP_SUMMARYDAY (BATNBRDIARYSUMMARY,SITEID,DATEPROCE,CURYRATE,ROUND,TOTALDIFERENCE,
                                    OBSERVATION1,TOTALPEN,USERID)
                 VALUES (@NBRCORELATIVE,@SITEID,@FECHAPROCESO,@MONTOCAMBIO,@TOTALDIFERENCIA,0,@COMMENT,
                         ISNULL(@TOTALPEN,0),@USERID)

         IF (@@ERROR!=0 OR @@ROWCOUNT=0) 
           BEGIN  
             ROLLBACK  
             RAISERROR 20000 'No se puede Insertar en OP_SUMMARYDAY'                                          
             RETURN(1)
           END
         
         --*** Hay que Grabar la Cabecera del Pago (AR_CCDOC_PAYMENT)***--    
                              
         DECLARE @BATNBRAR_CCDOCDET	   UD_CORRELATIVOS
         DECLARE @SITEIDPAG                UD_IDSITE  
         DECLARE @BATNBRDEPOSITSITE        UD_CORRELATIVOS 
         DECLARE @DATEPROCE                UD_FECHA 
         DECLARE @CUSTIDSS                 UD_CODCLIENT 
         DECLARE @DEPOSITPASSWORD          char(20)
         DECLARE @DATEDEPOSIT              smalldatetime
         DECLARE @CURYID                   char(3)
         DECLARE @CURYRATE                 UD_CURYRATE 
         DECLARE @TOTALPENPAG              NUMERIC(11,4)
         DECLARE @TOTALUSDPAG              NUMERIC(11,4)
         DECLARE @DEBEHABER                UD_DEBEHABER 
         DECLARE @STATUS                   BIT
         DECLARE @USERIDPAG                UD_USERID 

         DECLARE CUR_PAGOS CURSOR  
              FOR SELECT SITEID,BATNBRDEPOSITSITE,DATEPROCE,CUSTIDSS,DEPOSITPASSWORD,
                         DATEDEPOSIT,CURYID,CURYRATE,TOTALPEN,TOTALUSD,DEBEHABER,STATUS,USERID 
                  FROM OP_DEPOSITSITEDET WHERE DATEPROCE=@FECHAPROCESO AND SITEID=@SITEID 

         OPEN CUR_PAGOS
              FETCH NEXT FROM CUR_PAGOS
		 	 INTO @SITEIDPAG,@BATNBRDEPOSITSITE,@DATEPROCE,@CUSTIDSS,@DEPOSITPASSWORD,
                              @DATEDEPOSIT,@CURYID,@CURYRATE,@TOTALPENPAG,@TOTALUSDPAG,
                              @DEBEHABER,@STATUS,@USERIDPAG                                 
           
              WHILE @@FETCH_STATUS=0
                    BEGIN         
                     
                         -- Hay que Actualizar el Correlativo 
                             
                             UPDATE OP_CORELATIVE
                  	            SET  NBRCORELATIVE=(SELECT MAX (BATNBRAR_CCDOCDET)+1 FROM  AR_CCDOC_PAYMENT)
                                    WHERE TYPECORELATIVE='BATNBRAR_CCDOCDET' 
                                                           
                                  
                             SELECT @BATNBRAR_CCDOCDET=NBRCORELATIVE,@TSTAMP=TSTAMP FROM OP_CORELATIVE
 	    	  	     WHERE TYPECORELATIVE='BATNBRAR_CCDOCDET'
                        
                             UPDATE OP_CORELATIVE
                  	            SET  NBRCORELATIVE=NBRCORELATIVE+1   
                                    WHERE TYPECORELATIVE='BATNBRAR_CCDOCDET' AND NBRCORELATIVE=@BATNBRAR_CCDOCDET AND
                                          TSTAMP= @TSTAMP                    
                                                          
                             IF (@@error!=0 OR @@ROWCOUNT=0 )
    	                         BEGIN
                                   CLOSE CUR_PAGOS 
                                   DEALLOCATE CUR_PAGOS
	  	                   RAISERROR  20000 'Error Actualizando OP_CORELATIVE'
               	                   ROLLBACK TRAN
         	                   RETURN(1)
    	                         END
      
                         -- Fin de Actualizar el Correlativo
                         -- Hay que insertar en AR_CCDOC_PAYMENT

                            INSERT INTO AR_CCDOC_PAYMENT (BATNBRAR_CCDOCDET,SITEID,CUSTIDSS,DEPOSITPASSWORD,DATEDPROCE,
                                                          DATEDEPOSIT,CURYID,TOTALPEN,TOTALUSD,DOCBALPEN,DOCBALUSD,USERID) 
                                   VALUES (@BATNBRAR_CCDOCDET,@SITEIDPAG,@CUSTIDSS,@DEPOSITPASSWORD,@FECHAPROCESO,@DATEDEPOSIT,
                                           @CURYID,@TOTALPENPAG,@TOTALUSDPAG,@TOTALPENPAG,@TOTALUSDPAG,@USERIDPAG)

                             IF (@@error!=0 OR @@ROWCOUNT=0 )
    	                         BEGIN
                                   CLOSE CUR_PAGOS 
                                   DEALLOCATE CUR_PAGOS
	  	                   RAISERROR  20000 'Error Grabando Pago en AR_CCDOC_PAYMENT'
               	                   ROLLBACK TRAN
         	                   RETURN(1)
    	                         END


                         -- Fin de insertar en AR_CCDOC_PAYMENT                         
                         
                         FETCH NEXT FROM CUR_PAGOS
   		 	            INTO @SITEIDPAG,@BATNBRDEPOSITSITE,@DATEPROCE,@CUSTIDSS,@DEPOSITPASSWORD,
                                         @DATEDEPOSIT,@CURYID,@CURYRATE,@TOTALPENPAG,@TOTALUSDPAG,
                                         @DEBEHABER,@STATUS,@USERIDPAG 
                    END 
            CLOSE CUR_PAGOS 
            DEALLOCATE CUR_PAGOS
	            
------FIN-------PABLO NEYRA.---BLOQUEO DEL PROCESO NORIGINALL--*********************************************************************************************

            /*** Fin de Grabar en AR_CCDOC_PAYMENT */ 
            /**  Hay que Incrementar la Fecha de Proceso en un Día */
                                 
--                UPDATE SETUP SET DATEPROCE=DATEADD(day,1,DATEPROCE) 

--                IF (@@error!=0 OR @@ROWCOUNT=0 )
--                    BEGIN
--  	               RAISERROR  20000 'Error Grabando Actualizando la Fecha de Proceso'
--               	  ROLLBACK TRAN
--         	       RETURN(1)
--    	           END
                      
           /*  Fin de Incremenetar de Fecha de Proceso*/       
                                           
    COMMIT TRAN
    RETURN(0)
END



GO
