GO
DROP PROCEDURE OP_CierreX_Tienda_Proc
GO
CREATE PROCEDURE OP_CierreX_Tienda_Proc
(@PTOVTA   UD_PTOVTA,
 @SALESPERID  UD_SALESPERSONID)
as
BEGIN
   -- *************************************************************************************
   -- Declaracion de Variables 
   DECLARE @DATEPROCESALES     SMALLDATETIME
   DECLARE @DOCTYPEIDTICKET    UD_DOCTYPEID   
   DECLARE @SERIALNUMBER       CHAR(16) 
   DECLARE @FECHASERVIDOR      SMALLDATETIME
   DECLARE @TIPODETIPODECAMBIO UD_CURYTYPEID
   DECLARE @MONEDACAJA         UD_CURYID
   DECLARE @MONEDAINVERSA      UD_CURYID
   DECLARE @MONTOTIPOCAMBIO    UD_CURYRATE
   DECLARE @MONEDABASE 	char(3)
   
   SELECT @MONEDABASE =(SELECT CURYORIG FROM SETUP) 
   -- *************************************************************************************
   SELECT @DOCTYPEIDTICKET=DOCTYPEIDTICKET  from OP_SETUP
   SELECT @DATEPROCESALES=DATEPROCESALES FROM OP_SETUP  
   SELECT @SERIALNUMBER=SERIALNUMBER,@MONEDACAJA=CURYID FROM OP_salespointsetting  WHERE SALESPOINT=@PTOVTA
   SELECT @FECHASERVIDOR=GETDATE()
   SELECT @MONEDAINVERSA=CURYID FROM CURRENCY WHERE CURYID NOT IN (SELECT @MONEDACAJA)

   --  Obtener el Monto del Tipo de Cambio de la Moneda de la Caja a la Moneda Extranjera   
   
   SELECT @TIPODETIPODECAMBIO=CURYTYPEIDSALES FROM SETUP 
   SELECT @MONTOTIPOCAMBIO=RATE FROM CURYRATE WHERE CURYTYPEID=@TIPODETIPODECAMBIO AND fromcuryid=@MONEDACAJA
                                                    AND TOCURYID=@MONEDAINVERSA AND CURYDATE= 
                                                    (SELECT MAX(CURYDATE)FROM CURYRATE WHERE CURYDATE<=@DATEPROCESALES)      
                                
   --  Parte de la Cabecera     
   --  Variables para el Manejo de la Cabecera 
   
   DECLARE @NROTRANSAC               INTEGER
   DECLARE @TICKECTBOLEINI           UD_CORRELATIVOS
   DECLARE @TICKECTFACTINI           UD_CORRELATIVOS
   DECLARE @TOTALTICKETBOLETASOL     UD_MONTO  
   DECLARE @TOTALTICKETBOLETADOL     UD_MONTO  
   DECLARE @TOTALTICKETFACTURASOL    UD_MONTO       
   DECLARE @TOTALTICKETFACTURADOL    UD_MONTO              
   

   DECLARE @VALORVENTASOLES     UD_MONTO  
   DECLARE @VALORVENTADOLARES   UD_MONTO       
   DECLARE @NOAFECTOSOLES       UD_MONTO          
   DECLARE @NOAFECTODOLARES     UD_MONTO          
   DECLARE @IGVSOLES            UD_MONTO          
   DECLARE @IGVDOLARES          UD_MONTO                
   DECLARE @TOTALSOLES          UD_MONTO 
   DECLARE @TOTALDOLARES        UD_MONTO 
   DECLARE @TICKESTANUL         INTEGER    
   DECLARE @MONTOTICKESTANULSOL UD_MONTO 
   DECLARE @MONTOTICKESTANULDOL UD_MONTO 
   
   -- Esta Tabla Temporal Contiene el Resultado General (OP_sales y OP_salesdet)         

   SELECT * INTO #TMP_CIERREXGENERAL FROM VW_CIERREX 
            WHERE @SALESPERID=@SALESPERID AND SALESPOINT=@PTOVTA 
   
      
   -- Se realiza un Select DISTINCT para Generar la Cabecera (Queda Pendiente si se Hace un Vista a OP_SALES sin
   -- op_salesdet
   -- o se Utiliza esta forma con el DISTINCT
  
   SELECT DISTINCT DOCTYPEID,NBRDOCUMENT,SITEID,TYPEPAYMENTID,CURYID,DOCSTATUSID,SALESPERID,SALESPERNAME,
                   USERID,DATEDOC,
                   DATEPROCESALES,PERPOST,TOTALPEN,TOTALUSD,SUBTOTALPEN,SUBTOTALUSD,TAXIGVPEN,
                   TAXIGVUSD,TAXISCPEN,TAXISCUSD,TOTALNOTAFFECTPEN,TOTALNOTAFFECTUSD,TOTCASHPEN,
                   TOTCASHUSD,custidss,taxregnbr,CUSTNAME,PLACA,NBRBONUS,CURYTYPEID,STKCLOSEDX,
                   CURYRATE,SALESPOINT INTO #TMP_CIERREX from #TMP_CIERREXGENERAL 
    
   SELECT @NROTRANSAC=COUNT(*) FROM #TMP_CIERREX     
  
   SELECT @TICKECTBOLEINI=MIN(NBRDOCUMENT),@TOTALTICKETBOLETASOL=SUM(TOTALPEN),@TOTALTICKETBOLETADOL=SUM(TOTALUSD) 
                                           FROM #TMP_CIERREX 
                                           WHERE (taxregnbr IS NULL OR taxregnbr='') AND DOCSTATUSID <> 'AN' AND DOCTYPEID=@DOCTYPEIDTICKET
   
   SELECT @TICKECTFACTINI=MIN(NBRDOCUMENT),@TOTALTICKETFACTURASOL=SUM(TOTALPEN),@TOTALTICKETFACTURADOL=SUM(TOTALUSD)
                                           FROM #TMP_CIERREX 
                                           WHERE (NOT taxregnbr IS NULL AND taxregnbr <> '') AND DOCSTATUSID <> 'AN' AND DOCTYPEID=@DOCTYPEIDTICKET
  
   SELECT @TOTALSOLES=SUM(TOTALPEN),@TOTALDOLARES=SUM(TOTALUSD),@VALORVENTASOLES=SUM(SUBTOTALPEN),
          @VALORVENTADOLARES=SUM(SUBTOTALUSD),@IGVSOLES=SUM(TAXIGVPEN),
          @IGVDOLARES=SUM(TAXIGVUSD),@NOAFECTOSOLES=SUM(TOTALNOTAFFECTPEN),
          @NOAFECTODOLARES=SUM(TOTALNOTAFFECTUSD) FROM #TMP_CIERREX WHERE DOCSTATUSID <> 'AN'
   
   SELECT @TICKESTANUL=COUNT(*),@MONTOTICKESTANULSOL=ISNULL(SUM(TOTALPEN),0),@MONTOTICKESTANULDOL=ISNULL(SUM(TOTALUSD),0) 
                                           FROM #TMP_CIERREX WHERE DOCSTATUSID = 'AN'

    

   -- SELECT PARA LA CABECERA 
   IF(@MONEDACAJA=@MONEDABASE)
   BEGIN
   	SELECT 	@SERIALNUMBER,@DATEPROCESALES,@MONTOTIPOCAMBIO,@SALESPERID,@NROTRANSAC,@TICKECTBOLEINI,
	  	@TICKECTFACTINI,@VALORVENTASOLES,@NOAFECTOSOLES,@IGVSOLES,@TOTALSOLES,@TICKESTANUL,@MONTOTICKESTANULSOL
   END
   ELSE
   BEGIN
   	SELECT 	@SERIALNUMBER,@DATEPROCESALES,@MONTOTIPOCAMBIO,@SALESPERID,@NROTRANSAC,@TICKECTBOLEINI,
	  	@TICKECTFACTINI,@VALORVENTADOLARES,@NOAFECTODOLARES,@IGVDOLARES,@TOTALDOLARES,@TICKESTANUL,@MONTOTICKESTANULDOL
   END 
  
   --HASTA AQUI TODO BIEN -------------------------------------------------

   --   Parte de Resumen de Venta
   DECLARE @TOTALBOLFACTBASE UD_MONTO
   DECLARE @TOTALBOLFACTEXT UD_MONTO       

   SELECT @TOTALBOLFACTBASE=SUM(@TOTALTICKETBOLETASOL+@TOTALTICKETFACTURASOL),
          @TOTALBOLFACTEXT=SUM(@TOTALTICKETBOLETADOL+@TOTALTICKETFACTURADOL)
       
   --   Resumen por Tipos de Pagos
   --   Parte de Efectivo 
   
   DECLARE @TOTALEFECTIVOBASE UD_MONTO
   DECLARE @TOTALEFECTIVOEXT UD_MONTO
   DECLARE @TOTALTARJETABASE UD_MONTO
   DECLARE @TOTALTARJETAEXT UD_MONTO
   DECLARE @TOTALCREDITOBASE UD_MONTO
   DECLARE @TOTALCREDITOEXT UD_MONTO
   
 
      
   SELECT @TOTALEFECTIVOBASE=SUM(TOTCASHPEN),
          @TOTALEFECTIVOEXT=SUM(TOTCASHUSD) FROM #TMP_CIERREX WHERE DOCSTATUSID <> 'AN' AND TYPEPAYMENTID <> '01'
                                                                                             
   --   Parte de Tarjeta de Credito  
   
   SELECT @TOTALCREDITOBASE=SUM(TOTALPEN),
          @TOTALCREDITOEXT=SUM(TOTALUSD) FROM #TMP_CIERREX WHERE DOCSTATUSID <> 'AN' AND TYPEPAYMENTID <> '02'   
      
   --   Parte de Crédito

   SELECT SUM(TOTALPEN),SUM(TOTALUSD) FROM #TMP_CIERREX WHERE DOCSTATUSID <> 'AN' AND TYPEPAYMENTID <> '06'   
   
   --   Resumen por Categoría se Realiza del #TMP_CIERREXGENERAL (OP_SALES Y OP_SALESDET) 
   
   SELECT CLASSID,DESCATEGORIA,SUM(TOTALPENDET),SUM(TOTALUSDDET),'CAT' 
          FROM  #TMP_CIERREXGENERAL GROUP BY CLASSID,DESCATEGORIA
   
   --   Resumen por Producto se Realiza del #TMP_CIERREXGENERAL (OP_SALES Y OP_SALESDET) 
   
   SELECT INVTIDSKU,DESCRPRODUCTO,SUM(TOTALPENDET),SUM(TOTALUSDDET),SUM(QTY),'INV' 
          FROM #TMP_CIERREXGENERAL GROUP BY INVTIDSKU,DESCRPRODUCTO

END


OP_CierreX_Tienda_Proc 'PTOVTA01  ','ENRIQUETA'


