ALTER PROCEDURE OP_Verificar_ExisteVale 
(
 @CUSTIDSS  UD_CODCLIENT,    
 @NBRBONUS  NUMERIC(10)    
) 
as
BEGIN
	DECLARE @DOCTYPEIDTICKET UD_DOCTYPEID
	SET @DOCTYPEIDTICKET =(SELECT DOCTYPEIDTICKET FROM OP_SETUP)

	SELECT *
	FROM TMP_OP_BONUS 
	WHERE CUSTIDSS = @CUSTIDSS AND NBRBONUS = @NBRBONUS

END


ALTER PROCEDURE OP_Verificar_ExisteValeRegistrado 
(
 @CUSTIDSS  UD_CODCLIENT,    
 @NBRBONUS  NUMERIC(10)    
) 
as
BEGIN
	DECLARE @DOCTYPEIDTICKET UD_DOCTYPEID
	SET @DOCTYPEIDTICKET =(SELECT DOCTYPEIDTICKET FROM OP_SETUP)

	SELECT *
	FROM OP_BONUS 
	WHERE CUSTIDSS = @CUSTIDSS AND NBRBONUS = @NBRBONUS

END

ALTER Procedure OP_GrabarDocumnetoenTemporalProc
(@CONTADOCREDITO       TINYINT,  -- 1 es Contado , 0 es Credito 
 @NBRSIDE              UD_CARA     =     NULL,
 @CORRNBR              INT,
 -- @DOCTYPEID            UD_DOCTYPEID,     NO se necesita todo es Ticket
 @NBRDOCUMENT          UD_CORRELATIVOS,  -- NO se requiere en el Temporal
 @TYPEPAYMENTID        char(2),
 -- @STKINVENTORY         bit = 1, --Por defecto para los Tickets es 1   
 -- @SITEID               UD_IDSITE,
 @CURYID               UD_CURYID,
 -- @DOCSTATUSID          char(2)='NA', --Por Defecto es Ninguna Acción 
 -- @TERMID               char(2),    LA CONDICIO SE PUEDE HALLAR POR LA FORMA DE PAGO    
 @SALESPERID           UD_SALESPERSONID,  
 @USERID               UD_USERID, 
 -- @DATEDOC              UD_FECHA,   LA OBTENGO DEL SERVIDOR   
 -- @DATEPROCESALES       UD_FECHA,   LA FECHA DE PROCESO  
 -- @PERPOST              UD_PERPOST, SE GENERA POR LA FECHA DE PROCESO 
 @TAXIGVID             char(2)                     = NULL,
 @TAXISCID             char(2)                     = NULL,
 @TOTALPEN             UD_MONTO, 
 @TOTALUSD             UD_MONTO,
 @SUBTOTALPEN          UD_MONTO,
 @SUBTOTALUSD          UD_MONTO,
 @TAXIGVPEN            UD_MONTO,
 @TAXIGVUSD            UD_MONTO,
 @TAXISCPEN            UD_MONTO,
 @TAXISCUSD            UD_MONTO,
 @TOTALNOTAFFECTPEN    UD_MONTO,
 @TOTALNOTAFFECTUSD    UD_MONTO,
 @PORCENTDISCOUNT1     UD_PORCENTAJE,
 @PORCENTDISCOUNT2     UD_PORCENTAJE,
 @TOTDISCOUNTPEN       UD_MONTO,
 @TOTDISCOUNTUSD       UD_MONTO,
 @TOTRETURNEDPEN       UD_MONTO,
 @TOTRETURNEDUSD       UD_MONTO,
 @TOTCASHPEN           UD_MONTO,
 @TOTCASHUSD           UD_MONTO,
 @CUSTIDSS             UD_CODCLIENT                = NULL,
 @TAXREGNBR            UD_CODCLIENT                = NULL,
 @CUSTNAME             UD_NOMBRE                   = NULL,
 @PLACA                UD_PLACA,
-- @NBRBONUS             int,
 @CURYTYPEID           UD_CURYTYPEID,              
 @CURYRATE             UD_CAMBIO,
 @STKCLOSEDZ           bit=0,
 @STKCLOSEDX           bit=0,
 @PROMOTIONCARDID      char(20)                    = NULL,
 @POINTNUMBER          smallint,
 @SALESPOINT           UD_PTOVTA,
 @TERMINALNAME         varchar(25),
 @KILOMETRAJE          INT,
 @ADDRESS              UD_DIRECCION, 
 @TYPECUSTOMER         int,
 @DSCRTYPECUST         varchar(40),
 @IDESTADO             char(1), 
 @ESTADO               varchar(50), 
 @MONEDACREDITO        UD_CURYID, 
 @TIPODECAMBIO         UD_CURYTYPEID,
 @MONTOTIPOCAMBIO      UD_CURYRATE,
 @DIASDEGRACIA         int,
 @LIMITECRED           UD_MONTO,    
 @DEUDACLIENTE         UD_DEUDA,
 @MTOSURPLUS           UD_MONTO,
 @AFECTO               bit,
 @CARDID               CHAR(2),
 @NBRCARD              CHAR(20),
 @CURYIDCARD           UD_CURYID,
 @DESCRIPTARJETA       UD_NOMBRE)
AS
BEGIN
 --Declaraciónde Variables
 DECLARE @DOCTYPEIDTICKET  UD_DOCTYPEID
 DECLARE @SITEID UD_IDSITE
 DECLARE @TERMID  char(2)  
 DECLARE @DATEDOC UD_FECHA 
 DECLARE @DATEPROCESALES  UD_FECHA
 DECLARE @PERPOST  UD_PERPOST 
 DECLARE @STKINVENTORY BIT
 DECLARE @DOCSTATUSID char(2)
 DECLARE @RESULTADO char(2)
/****************************************************************************************************************/ 
 if rtrim(Ltrim(@CUSTIDSS))= ''
    set @CUSTIDSS=NULL
  
/****************************************************************************************************************/
  -- Obtener los Valores del Setup 

 SELECT @DOCTYPEIDTICKET=DOCTYPEIDTICKET  from OP_SETUP 
  
 SELECT @SITEID=SOURCESITE from setup 
 SELECT @DATEDOC=GETDATE()


 SELECT @DATEPROCESALES=DATEPROCESALES FROM OP_SETUP 

 -- Verificar si la Fecha de Proceso Existe 

 if @DATEPROCESALES is null 
    BEGIN
     RAISERROR  20000 'No existe Fecha de Proceso'
     RETURN(1)     
    END


 SET @PERPOST=RTRIM(LTRIM(DATEPART(yyyy,@DATEPROCESALES))) 

 SELECT @RESULTADO= CASE DATEPART(mm,@DATEPROCESALES) WHEN 1 THEN '01'  WHEN 2 THEN '02' WHEN 3 THEN '03'
                                                      WHEN 4 THEN '04'  WHEN 5 THEN '05' WHEN 6 THEN '06'
                                                      WHEN 7 THEN '07'  WHEN 8 THEN '08' WHEN 9 THEN '09'
                                                      WHEN 10 THEN '10' WHEN 11 THEN '11' WHEN 12 THEN '12' END          
         
 SET @PERPOST=RTRIM(LTRIM(@PERPOST)) + RTRIM(LTRIM(@RESULTADO))


 SELECT @STKINVENTORY= 1
 SELECT @DOCSTATUSID='NA'

 -- Obtener la Condicion de Pago

 if @CONTADOCREDITO=1 
    BEGIN  
      SET @TERMID='00' -- El pago es contado y no tiene condicio de pago        
    END
 else  
    BEGIN  
      SELECT @TERMID=TERMIDDOC from customer where CUSTIDSS=@CUSTIDSS 
      IF RTRIM(LTRIM(@TERMID))='' OR @TERMID IS NULL  -- No existe condicion de Pago   
         BEGIN
           SET @TERMID='00'    
         END      
    END
 
 -- Inicia la Transaccion     

    BEGIN TRAN
     
    INSERT INTO TMP_OP_SALES(NBRSIDE,CORRNBR,DOCTYPEID,NBRDOCUMENT,TYPEPAYMENTID,STKINVENTORY,SITEID,CURYID,
                             DOCSTATUSID,TERMID,SALESPERID,USERID,DATEDOC,DATEPROCESALES,PERPOST,TAXIGVID,
                             TAXISCID,TOTALPEN,TOTALUSD,SUBTOTALPEN,SUBTOTALUSD,TAXIGVPEN,TAXIGVUSD,TAXISCPEN,
                             TAXISCUSD,TOTALNOTAFFECTPEN,TOTALNOTAFFECTUSD,PORCENTDISCOUNT1,PORCENTDISCOUNT2,
                             TOTDISCOUNTPEN,TOTDISCOUNTUSD,TOTRETURNEDPEN,
                             TOTRETURNEDUSD,TOTCASHPEN,TOTCASHUSD,CUSTIDSS,TAXREGNBR,CUSTNAME,PLACA,                         
                             CURYTYPEID,CURYRATE,STKCLOSEDZ,STKCLOSEDX,PROMOTIONCARDID,POINTNUMBER,
                             SALESPOINT,TERMINALNAME,KILOMETRAJE,ADDRESS,TYPECUSTOMER,DSCRTYPECUST,IDESTADO, 
                             ESTADO,MONEDACREDITO,TIPODECAMBIO,MONTOTIPOCAMBIO,DIASDEGRACIA,LIMITECRED,
                             DEUDACLIENTE,MTOSURPLUS,AFECTO,CARDID,NBRCARD,CURYIDCARD,PAGO,DESCRCARD) 
    VALUES
           (@NBRSIDE,@CORRNBR,@DOCTYPEIDTICKET,@NBRDOCUMENT,@TYPEPAYMENTID,@STKINVENTORY,@SITEID,@CURYID,
            @DOCSTATUSID,@TERMID,@SALESPERID,@USERID,@DATEDOC,@DATEPROCESALES,@PERPOST,
            @TAXIGVID,@TAXISCID,@TOTALPEN,@TOTALUSD,@SUBTOTALPEN,@SUBTOTALUSD,@TAXIGVPEN,
            @TAXIGVUSD,@TAXISCPEN,@TAXISCUSD, @TOTALNOTAFFECTPEN,@TOTALNOTAFFECTUSD,
            @PORCENTDISCOUNT1,@PORCENTDISCOUNT2,@TOTDISCOUNTPEN,
            @TOTDISCOUNTUSD,@TOTRETURNEDPEN,@TOTRETURNEDUSD,@TOTCASHPEN,@TOTCASHUSD,@CUSTIDSS,
            @TAXREGNBR,@CUSTNAME,@PLACA,@CURYTYPEID,@CURYRATE,@STKCLOSEDZ,@STKCLOSEDX,@PROMOTIONCARDID,
            @POINTNUMBER,@SALESPOINT,@TERMINALNAME,@KILOMETRAJE,@ADDRESS,@TYPECUSTOMER,@DSCRTYPECUST,@IDESTADO, 
            @ESTADO,@MONEDACREDITO,@TIPODECAMBIO,@MONTOTIPOCAMBIO,@DIASDEGRACIA,@LIMITECRED,@DEUDACLIENTE,
            @MTOSURPLUS,@AFECTO,@CARDID,@NBRCARD,@CURYIDCARD,@CONTADOCREDITO,@DESCRIPTARJETA)
    IF (@@error!=0)
    BEGIN
        RAISERROR  20000 'No se Puede Registrar Venta'
        ROLLBACK TRAN
        RETURN(1)    
    END
    
    COMMIT TRAN
END


ALTER PROCEDURE Op_GrabarRegistroenDetalleTempProc
(
    @NBRSIDE            UD_CARA                     = NULL,
    @CORRNBR            int,
--  @DOCTYPEID          UD_DOCTYPEID,       No se Necesita
    @NBRDOCUMENT        UD_CORRELATIVOS, -- No se requiere en el Temporal
--  @SEQUENCE           UD_REGISTRO,      La tengo que calcular aqui mismo por el Correlativo   
--  @SITEID             UD_IDSITE,        Lo Obtenemos del Setup
    @INVTIDSKU          UD_IDCORPORATIVO,
    @CURYID             UD_CURYID,      -- Moneda de la Caja
--  @DOCSTATUSID        char(2),           char(2)='NA' Por Defecto es Ninguna Acción 
--  @DATEDOC            UD_FECHA,
--  @DATEPROCESALES     UD_FECHA,
--  @PERSPOT            UD_PERPOST,
    @STKCLOSEDZ         bit,
    @STKCLOSEDX         bit,
    @NBRTURN            tinyint,           
    @NBRTRANSACFUEL     char(4)                     = NULL,  -- SOLO LAS QUE VIENEN DEL GASBOY
    @DISCDSCTO1         UD_PORCENTAJE,  --NO SE UTILIZA PARA COMBUSTIBLE
    @DISCDSCTO2         UD_PORCENTAJE,  --NO SE UTILIZA PARA COMBUSTIBLE
    @DISCMTOPEN         UD_MONTO,       --NO SE UTILIZA PARA COMBUSTIBLE
    @DISCMTOUSD         UD_MONTO,       --NO SE UTILIZA PARA COMBUSTIBLE
    @PORCENTTAXIGV      UD_PORCENTAJE,    
    @PORCENTTAXISC      UD_PORCENTAJE,
    @TOTALPEN           UD_MONTO,          
    @TOTALUSD           UD_MONTO,
    @TAXPEN             UD_MONTO,
    @TAXUSD             UD_MONTO,
    @STKITEM            bit,
    @STKFISI            bit,
    @SLS_PRICE          UD_PRECIO,
    @SLSPRICESALE       UD_PRECIO,
    @STDCOSTPEN         UD_COSTO,  
    @STDCOSTUSD         UD_COSTO,
    @INVTIDALTER        UD_CODIGOBARRA,
    @DESCRINVENTORY     UD_DESCRIPCION,
    @QTY                UD_STOCK,
    @USERID             UD_USERID,
    @KIT                BIT,
    @COMBUSTIBLE        BIT,
    @PTOVTA             UD_PTOVTA,
    @STKUNITID          UD_STKUNITID,
    @DESCI 		int,    
    @DESCD 		int,                     
    @DESCIDP		int,          
    @DISCMTOPEND         UD_MONTO,      
    @DISCMTOUSDD         UD_MONTO
)
AS
BEGIN
    DECLARE @DOCTYPEIDTICKET  UD_DOCTYPEID    
    DECLARE @SEQUENCE UD_REGISTRO 
    DECLARE @SITEID UD_IDSITE
    DECLARE @DOCSTATUSID  char(2)
    DECLARE @DATEDOC  UD_FECHAHORA
    DECLARE @DATEPROCESALES UD_FECHA
    DECLARE @PERPOST UD_PERPOST   
    DECLARE @RESULTADO char(2)
--   DECLARE @STDCOSTPEN UD_COSTO    
--   DECLARE @STDCOSTUSD UD_COSTO      
--   Verificar que mi Numero de Transaccion del Fuels no exista

    BEGIN TRAN
            
    --   Si existe la Transaccion fuel en el temporal la elimino por el numero transafuel 
    --   Pero se tiene en cuenta que no sea nulo ese campo por que si se hace un ingreso manual 
    --   no tiene numero de transacfuel 
    if exists (select NBRTRANSACFUEL from tmp_op_salesdet where NBRTRANSACFUEL=@NBRTRANSACFUEL 
                                                                AND (NOT NBRTRANSACFUEL is null)) 
       begin            
         DELETE FROM TMP_OP_SALESDET WHERE NBRTRANSACFUEL=@NBRTRANSACFUEL
         -- Hay que validar el error
       end  

    If Rtrim(Ltrim(@NBRTRANSACFUEL))='' set @NBRTRANSACFUEL =NULL

    -- Obtener los Valores del Setup 

    SELECT @DOCTYPEIDTICKET=DOCTYPEIDTICKET  from OP_SETUP 
    --SELECT @DOCTYPEIDTICKET='12 '  
    --Obtener la Secuencia del Registro
    SELECT @SEQUENCE=COUNT(SEQUENCE)+ 1 FROM TMP_OP_SALESDET WHERE CORRNBR=@CORRNBR      
    --Obtener el Almacen Origen 
    SELECT @SITEID=SOURCESITE from setup      
    -- Por Defecto es NA   
    SELECT @DOCSTATUSID='NA'
    -- Fecha de Documento
    SELECT @DATEDOC=GETDATE()
    SELECT @DATEPROCESALES=DATEPROCESALES FROM OP_SETUP 
    -- SELECT @DATEPROCESALES=GETDATE()    
    -- CREAR EL PERPOST 
    
    SET @PERPOST=RTRIM(LTRIM(DATEPART(yyyy,@DATEPROCESALES))) 

    SELECT @RESULTADO= CASE DATEPART(mm,@DATEPROCESALES) WHEN 1 THEN '01'  WHEN 2 THEN '02' WHEN 3 THEN '03'
                                                         WHEN 4 THEN '04'  WHEN 5 THEN '05' WHEN 6 THEN '06'
                                                    WHEN 7 THEN '07'  WHEN 8 THEN '08' WHEN 9 THEN '09'
                                                         WHEN 10 THEN '10' WHEN 11 THEN '11' WHEN 12 THEN '12' END          
         
    SET @PERPOST=RTRIM(LTRIM(@PERPOST)) + RTRIM(LTRIM(@RESULTADO))
    
    INSERT INTO TMP_OP_SALESDET(CORRNBR,DOCTYPEID,NBRDOCUMENT,SEQUENCE,SITEID,INVTIDSKU,CURYID,
                                DOCSTATUSID,DATEDOC,DATEPROCESALES,PERPOST,STKCLOSEDZ,STKCLOSEDX,NBRTURN,
                                NBRSIDE,NBRTRANSACFUEL,DISCDSCTO1,DISCDSCTO2,DISCMTOPEN,DISCMTOUSD,PORCENTTAXIGV,
                                PORCENTTAXISC,TOTALPEN,TOTALUSD,TAXPEN,TAXUSD,STKITEM,STKFISI,SLS_PRICE,
                                SLSPRICESALE,STDCOSTPEN,STDCOSTUSD,INVTIDALTER,DESCRINVENTORY,QTY,USERID,KIT,COMBUSTIBLE,PTOVTA,STKUNITID,DESCI,DESCD,DESCIDP,DISCMTOPEND,DISCMTOUSDD)
    VALUES(@CORRNBR,@DOCTYPEIDTICKET,@NBRDOCUMENT,@SEQUENCE,@SITEID,@INVTIDSKU,
           @CURYID,@DOCSTATUSID,@DATEDOC,@DATEPROCESALES,@PERPOST,@STKCLOSEDZ,@STKCLOSEDX,
           @NBRTURN,@NBRSIDE,@NBRTRANSACFUEL,@DISCDSCTO1,@DISCDSCTO2,@DISCMTOPEN,@DISCMTOUSD,
           @PORCENTTAXIGV,@PORCENTTAXISC,@TOTALPEN,@TOTALUSD,@TAXPEN,@TAXUSD,@STKITEM, 
           @STKFISI,@SLS_PRICE,@SLSPRICESALE, 
           @STDCOSTPEN,@STDCOSTUSD,@INVTIDALTER,@DESCRINVENTORY,
           @QTY,@USERID,@KIT,@COMBUSTIBLE,@PTOVTA,@STKUNITID,@DESCI,@DESCD,@DESCIDP,@DISCMTOPEND,@DISCMTOUSDD)

    IF (@@error!=0)
    BEGIN
        RAISERROR  20000 'No se puede Registrar registro en Detalle '
        ROLLBACK TRAN
        RETURN(1)    
    END

    COMMIT TRAN

END


ALTER PROCEDURE Op_EliminarRegistroenDetalleTempProc
(@CORRNBR  INTEGER,
 @SECUENCIA TINYINT) 
as
BEGIN
  
  BEGIN TRAN      
 
  DELETE FROM TMP_OP_SALESDET WHERE CORRNBR=@CORRNBR AND SEQUENCE=@SECUENCIA   
  IF (@@error!=0)
    BEGIN
        RAISERROR  20000 'No se puede Eliminar Registro del Detalle '
        ROLLBACK TRAN
        RETURN(1)    
    END
  
  -- Recalcular las Secuencias   
  DECLARE @NUEVASECUENCIA TINYINT
  DECLARE @SECUENCIA2 TINYINT

      DECLARE CURTEMDETALLE CURSOR FOR
              SELECT SEQUENCE FROM tmp_op_salesdet where CORRNBR = @CORRNBR order by sequence 
      OPEN CURTEMDETALLE

      SET @NUEVASECUENCIA=1
      FETCH NEXT FROM CURTEMDETALLE INTO @SECUENCIA2
  
         WHILE @@FETCH_STATUS = 0
            BEGIN                                     
                UPDATE tmp_op_salesdet SET SEQUENCE=@NUEVASECUENCIA
                       WHERE CORRNBR=@CORRNBR AND SEQUENCE=@SECUENCIA2                               

                IF (@@error!=0)
                   BEGIN
                     RAISERROR  20000 'No se puede Actualizar Correlativo'
                     CLOSE CURTEMDETALLE
                     DEALLOCATE CURTEMDETALLE                       
                     ROLLBACK TRAN
                     RETURN(1)    
                   END

                FETCH NEXT FROM CURTEMDETALLE INTO @SECUENCIA2   
                SET @NUEVASECUENCIA=@NUEVASECUENCIA+1              
            END  
       
      CLOSE CURTEMDETALLE
      DEALLOCATE CURTEMDETALLE
  COMMIT TRAN   
END
/***************************************************************************************************/ 
/*Procedimiento Almacenado para Actualizar Registros en el Temporal de Detalle */
/***************************************************************************************************/ 


ALTER PROCEDURE OP_GrabarValesProc  
(@CORRNBR          int,  
 @DOCTYPEID        UD_DOCTYPEID,  
 @NBRDOCUMENT      UD_CORRELATIVOS,  
 @DATEPROCESALES   UD_FECHA)  
as  
BEGIN  
   -- Declaración de Variables       
  
   DECLARE @custidss  UD_CODCLIENT   
   DECLARE @SITEID    UD_IDSITE   
   DECLARE @NBRBONUS  NUMERIC(10)     
   DECLARE @ERROR     Integer       
   DECLARE @MONTOBONUS NUMERIC(9,4)  
   -- Declaración del Cursor   
   DECLARE OPBONUS CURSOR FOR  
           SELECT custidss,SITEID,NBRBONUS,MONTOBONUS FROM TMP_OP_BONUS WHERE CORRNBR=@CORRNBR   
      OPEN OPBONUS  
      FETCH NEXT FROM OPBONUS INTO @custidss,@SITEID,@NBRBONUS,@MONTOBONUS                 
  
      WHILE @@FETCH_STATUS = 0  
           BEGIN            
              INSERT INTO OP_BONUS (DOCTYPEID,NBRDOCUMENT,custidss,SITEID,NBRBONUS,DATEPROCESALES,MONTOBONUS)   
                          VALUES(@DOCTYPEID,@NBRDOCUMENT,@custidss,@SITEID,@NBRBONUS,@DATEPROCESALES,@MONTOBONUS)  
  
              SET @ERROR=@@error  
       
                IF (@ERROR!=0)  
                  BEGIN         
                    CLOSE OPBONUS  
                    DEALLOCATE OPBONUS  
                    RETURN(1)    
                  END   
               
              FETCH NEXT FROM OPBONUS INTO @custidss,@SITEID,@NBRBONUS,@MONTOBONUS                                  
           END  
    
      CLOSE OPBONUS  
      DEALLOCATE OPBONUS  
      RETURN (0)           
END  

ALTER PROCEDURE OP_GrabarValesAProc  
	(@CORRNBR       INT,  
 	@DOCTYPEID      UD_DOCTYPEID,  
 	@NBRDOCUMENT    UD_CORRELATIVOS,  
 	@DATEPROCESALES UD_FECHA,
	@TOTALVENTA	UD_MONTO,
	@nuevoVALES     INT)  --1 nuevo ; 2 Modificacion
as  
BEGIN  
   -- Declaración de Variables       
-- 498866,12,1000000004,26/07/2006  
  
   DECLARE @CUSTIDSS   UD_CODCLIENT   
   DECLARE @SITEID     UD_IDSITE   
   DECLARE @NBRBONUS   NUMERIC(10)     
   DECLARE @ERROR      INTEGER      
   DECLARE @MONTOBONUS NUMERIC (10,2)  
   DECLARE @USER01     UD_USER1
   DECLARE @ESTADO BIT  
   
   -- Declaración del Cursor   
  IF @nuevoVALES = 1		--INSERTO VALES DE PAGO ADELANTADO NUEVOS
    BEGIN
	   DECLARE OPORDENC 
		   CURSOR FOR  
	           SELECT CUSTIDSS,
			  SITEID,
			  NBRBONUS,
			  MONTOBONUS,
	                  USER01,
			  ESTADO
		   FROM TMP_OP_BONUS
		   WHERE CORRNBR=@CORRNBR   
	   OPEN OPORDENC  
	   FETCH NEXT FROM OPORDENC INTO @CUSTIDSS,@SITEID,@NBRBONUS,@MONTOBONUS,@USER01,@ESTADO
  
	   WHILE @@FETCH_STATUS = 0  
           BEGIN            
              INSERT INTO OP_BONUS (DOCTYPEID,NBRDOCUMENT,CUSTIDSS,SITEID,NBRBONUS,DATEPROCESALES,MONTOBONUS,USER01,ESTADO)   
              VALUES(@DOCTYPEID,@NBRDOCUMENT,@CUSTIDSS,@SITEID,@NBRBONUS,@DATEPROCESALES,@MONTOBONUS,@USER01,@ESTADO)  
  
              SET @ERROR=@@error  
       
                IF (@ERROR!=0)  
                  BEGIN         
                    CLOSE OPORDENC  
                    DEALLOCATE OPORDENC  
                    RETURN(1)    
                  END   
               
   		FETCH NEXT FROM OPORDENC INTO @CUSTIDSS,@SITEID,@NBRBONUS,@MONTOBONUS,@USER01,@ESTADO
           END  
    
      	   CLOSE OPORDENC  
	   DEALLOCATE OPORDENC  
   END

   IF @nuevoVALES = 2 		--ACTUALIZO VALES DE PAGO ADELANTADO NUEVOS   
      BEGIN	
	   DECLARE OPORDENC 
		   CURSOR FOR  
	           SELECT CUSTIDSS,
			  SITEID,
			  NBRBONUS,
			  MONTOBONUS,
	                  USER01,
			  ESTADO
		   FROM OP_BONUS
		   WHERE NBRDOCUMENT= @NBRDOCUMENT
		   
	   OPEN OPORDENC  
	   FETCH NEXT FROM OPORDENC INTO @CUSTIDSS,@SITEID,@NBRBONUS,@MONTOBONUS,@USER01,@ESTADO
  
	   WHILE @@FETCH_STATUS = 0  
           BEGIN            
		-----ACTUALIZA EL ESTADO DEL NUMERO DE VALE 	
		UPDATE OP_BONUS SET USER01 = 0, ESTADO = 1
	  	WHERE CUSTIDSS = @CUSTIDSS AND NBRDOCUMENT= @NBRDOCUMENT AND SITEID = @SITEID AND NBRBONUS = @NBRBONUS

       	        SET @ERROR=@@ERROR  
       
                IF (@ERROR!=0)  
                   BEGIN         
                      CLOSE OPORDENC  
                      DEALLOCATE OPORDENC  
                      RETURN(1)    
                   END   
		
		-----ACTUALIZA EL ESTADO DEL NUMERO DE VALE 	
		UPDATE OP_BONUS SET USER01 = 0, ESTADO = 1
	  	WHERE CUSTIDSS = @CUSTIDSS AND SITEID = @SITEID AND NBRBONUS = @NBRBONUS

       	        SET @ERROR=@@ERROR  
       
                IF (@ERROR!=0)  
                   BEGIN         
                      CLOSE OPORDENC  
                      DEALLOCATE OPORDENC  
                      RETURN(1)    
                   END   

   		FETCH NEXT FROM OPORDENC INTO @CUSTIDSS,@SITEID,@NBRBONUS,@MONTOBONUS,@USER01,@ESTADO
           END  
    
      	   CLOSE OPORDENC  
	   DEALLOCATE OPORDENC  
    END	
    ---RETURN (0)           
END  


ALTER PROCEDURE OP_GrabarTmp_Op_BonusProc    
(@CORRNBR   INT,    
 @CUSTIDSS  UD_CODCLIENT,    
 @NBRBONUS  NUMERIC(10),    
 @MONTOVALE DECIMAL(10,2))    
as    
BEGIN    
    
   DECLARE @SITEID UD_IDSITE       
    
   SELECT @SITEID=SOURCESITE FROM SETUP       
    
   BEGIN TRAN    
        
   INSERT INTO TMP_OP_BONUS(CORRNBR,CUSTIDSS,SITEID,NBRBONUS,MONTOBONUS,stkmodify,stknew,stksend,stkdelete,stkreceive)              
               VALUES (@CORRNBR,@CUSTIDSS,@SITEID,@NBRBONUS,@MONTOVALE,0,0,0,0,0)     
        
   IF (@@error!=0 or @@rowcount=0)                    
      BEGIN    
         RAISERROR  20000 'No se pudo registrar Vale'     
         ROLLBACK TRAN    
         RETURN(1)        
      END      
    
   COMMIT TRAN        
       
END    


ALTER PROCEDURE OP_GrabarTmp_Op_BonusProc    
(@CORRNBR   INT,    
 @CUSTIDSS  UD_CODCLIENT,    
 @NBRBONUS  NUMERIC(10),    
 @MONTOVALE DECIMAL(10,2))    
as    
BEGIN    
    
   DECLARE @SITEID UD_IDSITE       
    
   SELECT @SITEID=SOURCESITE FROM SETUP       
    
   BEGIN TRAN    
        
   INSERT INTO TMP_OP_BONUS(CORRNBR,CUSTIDSS,SITEID,NBRBONUS,MONTOBONUS,stkmodify,stknew,stksend,stkdelete,stkreceive)              
               VALUES (@CORRNBR,@CUSTIDSS,@SITEID,@NBRBONUS,@MONTOVALE,0,0,0,0,0)     
        
   IF (@@error!=0 or @@rowcount=0)                    
      BEGIN    
         RAISERROR  20000 'No se pudo registrar Vale'     
         ROLLBACK TRAN    
         RETURN(1)        
      END      
    
   COMMIT TRAN        
       
END    


ALTER PROCEDURE OP_EliminarTmp_Op_AdelantoProc
 (@TODOS     int,
  @CORRNBR   int,
  @NBRBONUS  numeric(10))
as
BEGIN

   BEGIN TRAN
   
   if @TODOS=1   
     DELETE FROM TMP_OP_BONUS WHERE CORRNBR=@CORRNBR 
   else   
     DELETE FROM TMP_OP_BONUS WHERE CORRNBR=@CORRNBR AND NBRBONUS=@NBRBONUS
                                       
   IF (@@error!=0)                
      BEGIN
         RAISERROR  20000 'No se puede Eliminar Orden de Compra' 
         ROLLBACK TRAN
         RETURN(1)    
      END  

   COMMIT TRAN 
END

ALTER PROCEDURE OP_GrabarValesProc  
(@CORRNBR          int,  
 @DOCTYPEID        UD_DOCTYPEID,  
 @NBRDOCUMENT      UD_CORRELATIVOS,  
 @DATEPROCESALES   UD_FECHA)  
as  
BEGIN  
   -- Declaración de Variables       
  
   DECLARE @custidss  UD_CODCLIENT   
   DECLARE @SITEID    UD_IDSITE   
   DECLARE @NBRBONUS  NUMERIC(10)     
   DECLARE @ERROR     Integer       
   DECLARE @MONTOBONUS NUMERIC(9,4)  
   -- Declaración del Cursor   
   DECLARE OPBONUS CURSOR FOR  
           SELECT custidss,SITEID,NBRBONUS,MONTOBONUS FROM TMP_OP_BONUS WHERE CORRNBR=@CORRNBR   
      OPEN OPBONUS  
      FETCH NEXT FROM OPBONUS INTO @custidss,@SITEID,@NBRBONUS,@MONTOBONUS                 
  
      WHILE @@FETCH_STATUS = 0  
           BEGIN            
              INSERT INTO OP_BONUS (DOCTYPEID,NBRDOCUMENT,custidss,SITEID,NBRBONUS,DATEPROCESALES,MONTOBONUS)   
                          VALUES(@DOCTYPEID,@NBRDOCUMENT,@custidss,@SITEID,@NBRBONUS,@DATEPROCESALES,@MONTOBONUS)  
  
              SET @ERROR=@@error  
       
                IF (@ERROR!=0)  
                  BEGIN         
                    CLOSE OPBONUS  
                    DEALLOCATE OPBONUS  
                    RETURN(1)    
                  END   
               
              FETCH NEXT FROM OPBONUS INTO @custidss,@SITEID,@NBRBONUS,@MONTOBONUS                                  
           END  
    
      CLOSE OPBONUS  
      DEALLOCATE OPBONUS  
      RETURN (0)           
END  


ALTER PROCEDURE OP_EliminarTmp_Op_AdelantoProc
 (@TODOS     int,
  @CORRNBR   int,
  @NBRBONUS  numeric(10))
as
BEGIN

   BEGIN TRAN
   
   if @TODOS=1   
     DELETE FROM TMP_OP_BONUS WHERE CORRNBR=@CORRNBR 
   else   
     DELETE FROM TMP_OP_BONUS WHERE CORRNBR=@CORRNBR AND NBRBONUS=@NBRBONUS
                                       
   IF (@@error!=0)                
      BEGIN
         RAISERROR  20000 'No se puede Eliminar Orden de Compra' 
         ROLLBACK TRAN
         RETURN(1)    
      END  

   COMMIT TRAN 
END

ALTER Procedure OP_GrabarTmp_Op_OrdenCProc    
(@CORRNBR   int,    
 @custidss  UD_CODCLIENT,    
 @NBRBONUS  numeric(10),    
 @DOCTYPEID  char(10),     
 @DOCUMENTO  numeric(10),    
 @MONTOVALE  decimal(10,2) 

)    
as    
BEGIN    
    
   DECLARE @SITEID UD_IDSITE       
    
   SELECT @SITEID=SOURCESITE FROM SETUP       
    
   BEGIN TRAN    
        
   INSERT INTO TMP_OP_BONUS(CORRNBR,custidss,SITEID,NBRBONUS,MONTOBONUS)              
               VALUES (@CORRNBR,@custidss,@SITEID,@NBRBONUS,@MONTOVALE)     
        
   IF (@@error!=0 or @@rowcount=0)                    
      BEGIN    
         RAISERROR  20000 'No se pudo registrar Vale'     
         ROLLBACK TRAN    
         RETURN(1)        
      END      
    
   COMMIT TRAN        
       
END    
    
    
ALTER PROCEDURE IN_GrabarMovimientoProc
(
    @SITEID            UD_IDSITE,
    @TYPEDOCID         UD_TYPEMOVEID,
    @VENDIDSS          UD_IDVENDOR,
    @DOCTYPEID         UD_DOCTYPEID,
    @DOCSTATUSID       char(2),
    @REFNBR            char(15),
    @CURYRATE          numeric(6, 4),
    @TOCURYID          char(3),
    @FROMCURYID        char(3),
    @SITEPROCES        UD_IDSITE,
    @NBRORDER          char(15)                 = NULL,
    @DATENBRORDER      smalldatetime            = NULL,
    @USERIDORDER       UD_USERID                = NULL,
    @INTRDATE          smalldatetime,
    @INTRDATEPROCE     smalldatetime,
    @SITEDEST          UD_IDSITE,
    @INTRTOTPEN        UD_MONTO,
    @INTRTAXPEN        UD_IMPUESTO,
    @INTRTOTUSD        UD_MONTO,
    @INTRTAXUSD        UD_IMPUESTO,
    @PERPOST           char(6),
    @RLSED             bit,
    @DISASSEMBLE       bit,
    @INTRSUBTOTPEN     UD_MONTO,
    @INTRSUBTOTUSD     UD_MONTO,
    @USERID	       UD_USERID,
    @USER1             UD_USER1                 = NULL,
    @USER2             UD_USER2                 = NULL,
    @USER3             UD_USER3                 = NULL,
    @USER4             UD_USER5                 = NULL,
    @USER5             UD_USER5                 = NULL,
    @USER6             UD_USER6                 = NULL,
    @USER7             UD_USER7                 = NULL,
    @USER8             UD_USER8                 = NULL,
    @USER9             UD_USER9                 = NULL,
    @DATERECEPDOC               smalldatetime            = NULL,
    @CORRNBR           int,
    @COMMENT1	       CHAR(100),
    @COMMENT2	       CHAR(100),
    @COMMENT3	       CHAR(100),
    @BUSINESSTYPE      CHAR(1)=' ',
    @BAT 	CHAR(10) =' '	 OUTPUT	 )
AS
BEGIN
   
   DECLARE @INTRDATEPROCESETUP  smalldatetime  
   DECLARE @BATNBR char(10)
   DECLARE @BATNBR_NEXT char(10)
   DECLARE @NUM_BATNBR NUMERIC(10,0)
   DECLARE @ERROR Integer
   DECLARE @TSTAMP timestamp
   DECLARE @ROWCOUNT Integer
   SELECT @ERROR=0   
      
   BEGIN TRAN
   
   --set TRANSACTION  isolation LEVEL read committed 

   SELECT @BATNBR=BATNBRTYPEDOC from in_setup
-- SELECT @TSTAMP=TIMESTAMP from in_setup
   SELECT @NUM_BATNBR=cast(@BATNBR AS NUMERIC(10,0))+1
   SELECT @BATNBR_NEXT =replicate('0',10-len(@NUM_BATNBR))+cast(@NUM_BATNBR as char(10))
   SELECT @INTRDATEPROCESETUP=DATEPROCE FROM SETUP   
   
   IF @INTRDATEPROCESETUP <> @INTRDATEPROCE  
      BEGIN 
        ROLLBACK TRAN 
        RAISERROR  20000 ' La Fecha de Proceso ha Cambiado , Operación no se puede realizar'
        RETURN(1)
      END 

  /*** ACTUALIZACION DEL CORRELATIVO DE TIPO DE MOVIMIENTO ***/
    UPDATE IN_SETUP
       SET    BATNBRTYPEDOC=@BATNBR_NEXT    
       WHERE  BATNBRTYPEDOC=@BATNBR

        IF (@@error!=0 OR @@ROWCOUNT=0 )
           BEGIN
             ROLLBACK TRAN
             RETURN(1)    
           END
    

    INSERT INTO IN_INTRAHEAD(SITEID,BATNBR,TYPEDOCID,VENDIDSS,DOCTYPEID,DOCSTATUSID,
                             REFNBR,CURYRATE,TOCURYID,FROMCURYID,SITEPROCES,NBRORDER,
                             DATENBRORDER,USERIDORDER,INTRDATE,INTRDATEPROCE,SITEDEST,
                             INTRTOTPEN,INTRTAXPEN,INTRTOTUSD,INTRTAXUSD,PERPOST,
                             RLSED,DISASSEMBLE,INTRSUBTOTPEN,INTRSUBTOTUSD,BUSINESSTYPE,USERID,USER1,USER2,USER3,USER4,USER5,USER6,USER7,USER8,USER9,DATERECEPDOC
                             )
    VALUES(@SITEID,@BATNBR,@TYPEDOCID,@VENDIDSS,@DOCTYPEID,@DOCSTATUSID,@REFNBR,@CURYRATE,
           @TOCURYID,@FROMCURYID,@SITEPROCES,@NBRORDER,@DATENBRORDER,@USERIDORDER,@INTRDATE,
           @INTRDATEPROCE,@SITEDEST,@INTRTOTPEN,@INTRTAXPEN,@INTRTOTUSD,@INTRTAXUSD,@PERPOST,
	   @RLSED,@DISASSEMBLE,@INTRSUBTOTPEN,@INTRSUBTOTUSD,@BUSINESSTYPE,@USERID,@USER1,@USER2,@USER3,@USER4,@USER5,@USER6,@USER7,@USER8,@USER9,@DATERECEPDOC
           )
 
    IF (@@error!=0)
    BEGIN
        RAISERROR  20000 'IN_INTRAHEADInsProc: Cannot insert because primary key value not found in IN_INTRAHEAD '
        ROLLBACK TRAN
        RETURN(1)
    
    END

    /*** Llamada al store de grabado de detalle ******/
    SET EXEC @ERROR=IN_GrabaDetalleMovimientoProc @CORRNBR,@BATNBR,@VENDIDSS,@FROMCURYID,@DOCSTATUSID,@INTRDATE, @INTRDATEPROCE

    IF (@ERROR!=0)
    BEGIN
       ROLLBACK TRAN
       RETURN(1)               
    END 

    -- Insertando los comentarios en Tabla COMMENT
    	
    INSERT INTO COMMENT(SITEID,TYPEDOCID,DOCTYPEID,BATNBR,DATEPROCE,COMMENT1,COMMENT2,COMMENT3)
    VALUES (@SITEID,@TYPEDOCID,@DOCTYPEID,@BATNBR,@INTRDATEPROCE,@COMMENT1,@COMMENT2,@COMMENT3)		

    IF (@@error!=0)
    BEGIN
        RAISERROR  20000 'No se puede insertar en tabla COMMENT '
        ROLLBACK TRAN
        RETURN(1)
    
    END

    SET @BAT=@BATNBR
    SELECT @BATNBR as NUMEROMOVIMIENTO
    COMMIT TRAN
    RETURN(0)
END

ALTER PROCEDURE TMP_IN_INTRAITEMInsProc
(   @CORRNBR                                               int,
    @SITEID                                                     UD_IDSITE,
    @TYPEDOCID                                            UD_TYPEMOVEID,
    @SEQUENCE          smallint,
    @INVTIDSKU         UD_IDCORPORATIVO,
    @INVTIDBARR        UD_CODIGOBARRA,
    @QTY               UD_STOCK,
    @TAXIGV            numeric(5, 2)               = NULL,
    @STDCOSTPEN        UD_COSTO                    = NULL,
    @STDCOSTUSD        UD_COSTO                    = NULL,
    @STKFISI           bit,
    @INTRDATE          smalldatetime,
    @INTRDATEPROCE    smalldatetime,
    @RLSED             bit,
    @TAXISC	      NUMERIC(5,2),
    @STDCOSTPENOLD     UD_COSTO,	
    @STDCOSTUSDOLD     UD_COSTO,
    @USER1             UD_USER1                    = NULL,
    @USER2             UD_USER2                    = NULL,
    @USER3             UD_USER3                    = NULL,
    @USER4             UD_USER5                    = NULL,
    @USER5             UD_USER5                    = NULL,
    @USER6             UD_USER6                    = NULL,
    @USER7             UD_USER7                    = NULL,
    @USER8             UD_USER8                    = NULL,
    @USER9             UD_USER9                    = NULL)
AS
BEGIN
    BEGIN TRAN

          INSERT INTO TMP_IN_INTRAITEM(CORRNBR,SITEID,TYPEDOCID,SEQUENCE,INVTIDSKU,INVTIDBARR,QTY,
                                   TAXIGV,STDCOSTPEN,STDCOSTUSD,STKFISI,INTRDATE,INTRDATEPROCE,
                                   RLSED,TAXISC,STDCOSTPENOLD,STDCOSTUSDOLD,USER1,USER2,USER3,USER4,USER5,USER6,USER7,USER8,USER9 
                                   )
          VALUES(@CORRNBR,@SITEID,@TYPEDOCID,@SEQUENCE,@INVTIDSKU,@INVTIDBARR,@QTY,@TAXIGV,@STDCOSTPEN,
                         @STDCOSTUSD,@STKFISI,@INTRDATE,@INTRDATEPROCE,@RLSED,@TAXISC,@STDCOSTPENOLD,@STDCOSTUSDOLD,@USER1,@USER2,@USER3,@USER4,
                         @USER5,@USER6,@USER7,@USER8,@USER9)


          IF (@@error!=0)
              BEGIN
                   RAISERROR  20000 'Error insertando en Temporal '
                   ROLLBACK TRAN
                   RETURN(1)    
              END
                    
          IF (@STDCOSTPEN=@STDCOSTPENOLD)  AND (@STDCOSTUSD <> @STDCOSTUSDOLD)  
             BEGIN
                   RAISERROR  20000 'Error insertando en Temporal/ Error de Costos  '
                   ROLLBACK TRAN
                   RETURN(1)                                
             END
          
    COMMIT TRAN

END


ALTER PROCEDURE Tmp_In_IntraItemDelProc
(   @INVTIDSKU UD_IDCORPORATIVO,
    @CORRNBR INT)

AS
BEGIN
    BEGIN TRAN

    DELETE
      FROM  TMP_IN_INTRAITEM
      WHERE INVTIDSKU=@INVTIDSKU AND
	    CORRNBR=@CORRNBR


    IF (@@error!=0)
    BEGIN
        RAISERROR  20002 'Error al Eliminar'
        ROLLBACK TRAN
        RETURN(1)
    
    END

    COMMIT TRAN

    RETURN(0)
END

ALTER PROCEDURE Op_EliminarTransTemporalProc
(@CORRNBR            int)
AS
BEGIN
    BEGIN TRAN

    DELETE FROM TMP_OP_SALESDET WHERE CORRNBR=@CORRNBR 

    IF (@@error!=0)
    BEGIN
        RAISERROR  20000 'No se pudo Elimnar Detalle de Transacción'
        ROLLBACK TRAN
        RETURN(1)    
    END
    
    DELETE FROM TMP_OP_SALES WHERE CORRNBR=@CORRNBR 
   
    IF (@@error!=0 or @@rowcount=0)
    BEGIN
        RAISERROR  20000 'No se pudo Elimnar Transacción'
        ROLLBACK TRAN
        RETURN(1)    
    END   

    DELETE FROM TMP_OP_BONUS WHERE CORRNBR=@CORRNBR
    
    IF (@@error!=0)
    BEGIN
        RAISERROR  20000 'No se pudo Elimnar Detalle de Vales'
        ROLLBACK TRAN
        RETURN(1)    
    END
   
    COMMIT TRAN

END

ALTER OP_EmitirDocumentodeVentaProc      
(@RECIBETOTALES        TINYINT,  -- 1 es que recibe los totales, 0 los calcula en el Store      
 @ENLAZADO             TINYINT,  -- 1 es Enlazado y hay que Buscar en la Cabecera  , 0 Busco Directamente      
                                 --  en el Detalle      
 @CONTADOCREDITO       TINYINT,  -- 1 es Contado , 0 es Credito       
-- @NBRSIDE              UD_CARA     =     NULL,      
 @CORRNBR              INT,      
 --@DOCTYPEID            UD_DOCTYPEID,     NO se necesita todo es Ticket      
 --@NBRDOCUMENT          UD_CORRELATIVOS,  -- Hay que Obtenerlo Internamente      
 @TYPEPAYMENTID        char(2), -- Esto es el Tipo de Pago 01,02,06      
 -- @STKINVENTORY         bit = 1, --Por defecto para los Tickets es 1         
 -- @SITEID               UD_IDSITE,      
 @CURYID               UD_CURYID,      
 -- @DOCSTATUSID          char(2)='NA', --Por Defecto es Ninguna Acción       
 -- @TERMID               char(2),    LA CONDICIO SE PUEDE HALLAR POR LA FORMA DE PAGO          
 @SALESPERID           UD_SALESPERSONID,        
 @USERID               UD_USERID,       
 -- @DATEDOC              UD_FECHA,   LA OBTENGO DEL SERVIDOR         
 -- @DATEPROCESALES       UD_FECHA,   LA FECHA DE PROCESO        
 -- @PERPOST              UD_PERPOST, SE GENERA POR LA FECHA DE PROCESO       
 @TAXIGVID             char(2)                     = NULL,      
 @TAXISCID             char(2)                     = NULL,      
 @TOTALPEN             UD_MONTO,       
 @TOTALUSD             UD_MONTO,      
 @SUBTOTALPEN          UD_MONTO,      
 @SUBTOTALUSD          UD_MONTO,      
 @TAXIGVPEN            UD_MONTO,      
 @TAXIGVUSD            UD_MONTO,      
 @TAXISCPEN            UD_MONTO,      
 @TAXISCUSD            UD_MONTO,      
 @TOTALNOTAFFECTPEN    UD_MONTO,      
 @TOTALNOTAFFECTUSD    UD_MONTO,      
 @PORCENTDISCOUNT1     UD_PORCENTAJE,      
 @PORCENTDISCOUNT2     UD_PORCENTAJE,      
 @TOTDISCOUNTPEN       UD_MONTO,      
 @TOTDISCOUNTUSD       UD_MONTO,      
 @TOTRETURNEDPEN       UD_MONTO,      
 @TOTRETURNEDUSD       UD_MONTO,      
 @TOTCASHPEN           UD_MONTO,      
 @TOTCASHUSD           UD_MONTO,      
 @CUSTIDSS             UD_CODCLIENT                = NULL,      
 @TAXREGNBR            UD_CODCLIENT                = NULL,      
 @CUSTNAME             UD_NOMBRE                   = NULL,      
 @PLACA                UD_PLACA,      
-- @NBRBONUS             int,      
 @CURYTYPEID           UD_CURYTYPEID,                    
 @CURYRATE             UD_CAMBIO,      
 @STKCLOSEDZ           bit=0,      
 @STKCLOSEDX           bit=0,      
 @PROMOTIONCARDID      char(20)                    = NULL,      
 @POINTNUMBER          smallint,      
 @SALESPOINT           UD_PTOVTA,      
 @TERMINALNAME         varchar(25),      
 @KILOMETRAJE          INT,      
 @ADDRESS              UD_DIRECCION='',       
 @CARDID               CHAR(2),      
 @NBRCARD              CHAR(20),      
 @CURYIDCARD           UD_CURYID='',      
 @DESCRCARD            UD_NOMBRE='',      
 @NUMEROTRAN           char(4)='',      
 @SOLESTRAN            char(6)='',      
 @PRODUCTOTRAN         char(2)='',      
 @PRECIOTRAN           char(5)='',      
 @GALONESTRAN          char(8)='',      
 @CARATRAN             char(2)='',      
 @FECHATRAN            char(6)='',      
 @HORATRAN             char(4)='',       
 @TURNOTRAN            char(1)='',      
 @ESTADOTRAN           char(10)='')      
     
-- @TYPECUSTOMER         int,      
-- @DSCRTYPECUST         varchar(40),      
-- @IDESTADO             char(1),       
-- @ESTADO               varchar(50),       
-- @MONEDACREDITO        UD_CURYID,       
-- @TIPODECAMBIO         UD_CURYTYPEID,      
-- @MONTOTIPOCAMBIO      UD_CURYRATE,      
-- @DIASDEGRACIA         int,      
-- @LIMITECRED           UD_MONTO,          
-- @DEUDACLIENTE         UD_DEUDA,      
-- @MTOSURPLUS           UD_MONTO,      
-- @AFECTO               bit,      
-- @CURYIDCARD           UD_CURYID)      
AS      
BEGIN  --Declaraciónde Variables      
 DECLARE @MONEDABASE  UD_CURYID      
 DECLARE @NBRDOCUMENT UD_CORRELATIVOS       
 DECLARE @DOCTYPEIDTICKET  UD_DOCTYPEID      
 DECLARE @SITEID UD_IDSITE      
 DECLARE @TERMID  char(2)        
 DECLARE @DATEDOC UD_FECHAHORA       
 DECLARE @DATEPROCESALES  UD_FECHA      
 DECLARE @PERPOST      UD_PERPOST       
 DECLARE @STKINVENTORY BIT      
 DECLARE @DOCSTATUSID  char(2)      
 DECLARE @TYPECUSTOMER int       
 DECLARE @ERROR        int      
 DECLARE @TSTAMP       timestamp       
 DECLARE @RESULTADO    char(2)      
    
/****************************************************************************/      
  -- Declaracion de Variables para el Manejo de la FP6      
      
  DECLARE @SITEID_FP6           UD_IDSITE                 
  DECLARE @FREETOTAL_FP6        UD_MONTO       
  DECLARE @FREETOTALDET_FP6     UD_MONTO       
  DECLARE @MONTO_FP6DISPO       UD_MONTO       
  DECLARE @DOCUMENTFREEID_FP6   CHAR(10)      
  DECLARE @MONTOQUESOBRA       UD_MONTO      
       
/****************************************************************************/      
      
/****************************************************************************************************************/       
-- Por defecto la Cargamos al Contado      
 set @TYPECUSTOMER= 0      
 if rtrim(Ltrim(@CUSTIDSS))= '' set @CUSTIDSS=NULL      
       
/****************************************************************************************************************/      
      
  -- Obtener los Valores del Setup       
  SELECT @MONEDABASE=CURYORIG from SETUP       
  SELECT @DOCTYPEIDTICKET=DOCTYPEIDTICKET  from OP_SETUP       
  SELECT @SITEID=SOURCESITE from setup       
  SELECT @DATEDOC=GETDATE()      
  SELECT @DATEPROCESALES=DATEPROCESALES FROM OP_SETUP       
      
/*********para los decuentos********************/      
DECLARE @MONDES UD_MONTO      
DECLARE @TOTALO UD_MONTO      
      
select @PORCENTDISCOUNT1=sum(DISCMTOPEN) from tmp_op_salesdet  WHERE CORRNBR=@CORRNBR       
select @MONDES=sum((DISCMTOPEN)+(TOTALPEN)) from tmp_op_salesdet  WHERE CORRNBR=@CORRNBR       
IF @PORCENTDISCOUNT1>0      
 	BEGIN      
 		set @TOTDISCOUNTPEN=@PORCENTDISCOUNT1      
 		SET @PORCENTDISCOUNT1=(@PORCENTDISCOUNT1*100)/@MONDES      
	END  
else
SET @PORCENTDISCOUNT1=0

/*******************fin*************************/      
 -- Verificar si la Fecha de Proceso Existe       
      
 if @DATEPROCESALES is null       
    BEGIN      
     RAISERROR  20000 'No existe Fecha de Proceso'      
     RETURN(1)           
    END      
      
  DECLARE @GENRESUPART INT      
  SELECT @GENRESUPART=GENRESUPART FROM SETUP      
       
  IF @GENRESUPART=1   -- Han Generado el Resumen de Ventas       
    BEGIN      
      IF @DATEPROCESALES=(SELECT DATEPROCE FROM SETUP) -- si la fecha de venta es igual a la que se está cerrando       
         BEGIN      
           UPDATE SETUP SET GENRESUPART=0          
           IF @@ERROR!=0 OR @@ROWCOUNT=0      
              BEGIN                                 
                 RAISERROR 20000 'No se pudo Activar Flag de Resumen de Ventas '      
                 RETURN (1)                                               
              END       
         END        
     END      
        
  -- HALLAR EL PERPOST       
        
   SET @PERPOST=RTRIM(LTRIM(DATEPART(yyyy,@DATEPROCESALES)))       
      
   SELECT @RESULTADO= CASE DATEPART(mm,@DATEPROCESALES) WHEN 1 THEN '01'  WHEN 2 THEN '02' WHEN 3 THEN '03'      
                                                        WHEN 4 THEN '04'  WHEN 5 THEN '05' WHEN 6 THEN '06'      
                                                        WHEN 7 THEN '07'  WHEN 8 THEN '08' WHEN 9 THEN '09'      
         WHEN 10 THEN '10' WHEN 11 THEN '11' WHEN 12 THEN '12' END                
      
               
   SET @PERPOST=RTRIM(LTRIM(@PERPOST)) + RTRIM(LTRIM(@RESULTADO))      
      
      
  -- FIN DEL PERPOST      
      
  SELECT @STKINVENTORY= 1      
  SELECT @DOCSTATUSID='OK'      
      
 -- Obtener la Condicion de Pago      
      
 if @CONTADOCREDITO=1       
    BEGIN     
     SET @TERMID='00' -- El pago es contado y no tiene condicio de pago              
    END      
 else        
    BEGIN        
      SELECT @TERMID=TERMIDDOC from customer where CUSTIDSS=@CUSTIDSS       
      IF RTRIM(LTRIM(@TERMID))='' OR @TERMID IS NULL  -- No existe condicion de Pago         
         BEGIN      
           SET @TERMID='00'          
         END            
END        
      
 -- Inicia la Transaccion           
      
    BEGIN TRAN      
           
     -- *************************************************************************************                             
     -- Comienza la Parte de Inserción        
     -- *************************************************************************************      
      if @ENLAZADO=1             
         begin      
         --  Hay que Obtenerlo del Detalle Temporal                       
            SELECT  @DOCTYPEIDTICKET=DOCTYPEID,@TYPEPAYMENTID=TYPEPAYMENTID,@CURYID=CURYID,       
                    @TERMID=TERMID,      
                    @DATEDOC=DATEDOC,@DATEPROCESALES=DATEPROCESALES,@PERPOST=PERPOST,      
                    @TAXIGVID=TAXIGVID,@TAXISCID=TAXISCID,       
                    @TAXISCPEN=TAXISCPEN,@TAXISCUSD=TAXISCUSD,       
                    @PORCENTDISCOUNT1=PORCENTDISCOUNT1,@PORCENTDISCOUNT2=PORCENTDISCOUNT2,      
                    @TOTDISCOUNTPEN=TOTDISCOUNTPEN,@TOTDISCOUNTUSD=TOTDISCOUNTUSD,@TOTRETURNEDPEN=TOTRETURNEDPEN,      
                    @TOTRETURNEDUSD=TOTRETURNEDUSD,@TOTCASHPEN=TOTCASHPEN,@TOTCASHUSD=TOTCASHUSD,      
                    @CUSTIDSS=CUSTIDSS,@TAXREGNBR=TAXREGNBR,@CUSTNAME=CUSTNAME,@PLACA=PLACA,       
                    @CURYTYPEID=CURYTYPEID,@CURYRATE=CURYRATE,@STKCLOSEDZ=STKCLOSEDZ,      
                    @STKCLOSEDX=STKCLOSEDX,@PROMOTIONCARDID=PROMOTIONCARDID,@POINTNUMBER=POINTNUMBER,      
                    @SALESPOINT=SALESPOINT,@TERMINALNAME=TERMINALNAME,@KILOMETRAJE=KILOMETRAJE,@ADDRESS=ADDRESS,                          
                    @CONTADOCREDITO=PAGO,@TYPEPAYMENTID=TYPEPAYMENTID,@CARDID=CARDID,@NBRCARD=NBRCARD,      
                    @CURYIDCARD=CURYIDCARD,@DESCRCARD=DESCRCARD      
             FROM TMP_OP_SALES WHERE CORRNBR=@CORRNBR         
        
  /*********para los decuentos********************/      
  /*DECLARE @MONDES UD_MONTO      
  DECLARE @TOTALO UD_MONTO*/      
      
      
  select @PORCENTDISCOUNT1=sum(DISCMTOPEN) from tmp_op_salesdet  WHERE CORRNBR=@CORRNBR       
  select @MONDES=sum((DISCMTOPEN)+(TOTALPEN)) from tmp_op_salesdet  WHERE CORRNBR=@CORRNBR       
  IF @PORCENTDISCOUNT1>0      
 	BEGIN      
 		set @TOTDISCOUNTPEN=@PORCENTDISCOUNT1      
 		SET @PORCENTDISCOUNT1=(@PORCENTDISCOUNT1*100)/@MONDES      
	END  
 else
 SET @PORCENTDISCOUNT1=0 
  /*******************fin*************************/      
        
         end      
     -- *************************************************************************************      
     -- Hay que obtener el Numero Correlativo y Actualizarlo Inmediatamente con el TimeStamp       
     -- *************************************************************************************      
    IF @TYPEPAYMENTID='06' OR  @TYPEPAYMENTID='14'    --- DOCUMENTO  VALE OTRO CORRELATIVO      
 BEGIN        
 SELECT @DOCTYPEIDTICKET=DOCTYPEIDVALE from OP_SETUP       
 SELECT @NBRDOCUMENT=NBRTICKVALE,@TSTAMP=TSTAMP FROM OP_SALESPOINTSETTING WHERE SALESPOINT=@SALESPOINT       
          UPDATE OP_SALESPOINTSETTING SET NBRTICKVALE=@NBRDOCUMENT + 1  
          WHERE SALESPOINT=@SALESPOINT AND TSTAMP=@TSTAMP       
          IF (@@error!=0 OR @@rowcount=0)      
             BEGIN      
                ROLLBACK TRAN      
                RETURN(1)          
             END         
   SET @NBRDOCUMENT=@NBRDOCUMENT       
 END      
 ELSE      
     if Rtrim(Ltrim(@TAXREGNBR))='' --Es una Boleta        
             Begin       
           SELECT @NBRDOCUMENT=NBRTICKBOL,@TSTAMP=TSTAMP FROM OP_SALESPOINTSETTING WHERE SALESPOINT=@SALESPOINT       
           UPDATE OP_SALESPOINTSETTING SET NBRTICKBOL=@NBRDOCUMENT + 1       
                  WHERE SALESPOINT=@SALESPOINT AND TSTAMP=@TSTAMP       
           IF (@@error!=0 OR @@rowcount=0)      
              BEGIN               
                 ROLLBACK TRAN      
                 RETURN(1)          
              END                
           SET @NBRDOCUMENT=@NBRDOCUMENT                                 
         End      
     else      
        Begin                         
          SELECT @NBRDOCUMENT=NBRTICKFAC,@TSTAMP=TSTAMP FROM OP_SALESPOINTSETTING WHERE SALESPOINT=@SALESPOINT       
          UPDATE OP_SALESPOINTSETTING SET NBRTICKFAC=@NBRDOCUMENT + 1       
                 WHERE SALESPOINT=@SALESPOINT AND TSTAMP=@TSTAMP       
                
          IF (@@error!=0 OR @@rowcount=0)      
             BEGIN      
                ROLLBACK TRAN      
                RETURN(1)          
             END         
          SET @NBRDOCUMENT=@NBRDOCUMENT        
        End        
           
     -- ***************************************************************************************************       
     -- Variable para Verificar si se reciben los Totales       
     -- ***************************************************************************************************        
      
      IF @RECIBETOTALES=0  -- Es un despacho simple UN COMBUSTIBLE (BOLETA) Y ADEMAS SON AFECTOS        
         BEGIN             
          SELECT @SUBTOTALPEN=SUM(TOTALPEN-TAXPEN),@SUBTOTALUSD=SUM(TOTALUSD-TAXUSD),      
                 @TAXIGVPEN=SUM(TAXPEN),@TAXIGVUSD=SUM(TAXUSD),      
                 @TOTALPEN=SUM(TOTALPEN),@TOTALUSD=SUM(TOTALUSD)      
                 FROM TMP_OP_SALESDET WHERE CORRNBR=@CORRNBR        
                 GROUP BY CORRNBR      
           SET @TOTALNOTAFFECTPEN=0      
           SET @TOTALNOTAFFECTUSD=0      
         END      
      
     -- *************************************************************************************       
     -- Hay que grabar el Cliente si es que no Existe       
     -- *************************************************************************************            
      
       if LTRIM(RTRIM(@CUSTIDSS)) <> ''       
        BEGIN      
         DECLARE @CUSTID UD_CODCLIENT      
         SELECT @CUSTID=CUSTID FROM SETUP       
          if exists(Select CUSTIDSS from customer where CUSTIDSS=@CUSTIDSS)                            
            begin                             
            --  Se tiene que Actualizar solo si es Contado y no es un Cliente del Tipo Crédito       
               IF @CONTADOCREDITO=1 and @TYPECUSTOMER=0                                                  
                  Begin      
                    UPDATE CUSTOMER SET taxregnbr=@TAXREGNBR,CUSTNAME=@CUSTNAME,      
                                        addr1=@ADDRESS,CURYTYPEID=@CURYTYPEID,      
                                        CURYID=@CURYID WHERE custidss=@CUSTIDSS       
                     IF (@@error!=0)      
                      BEGIN      
                         RAISERROR  20000 'No se Puede Actualizar Cliente'      
                         ROLLBACK TRAN      
                         RETURN(1)          
                      END      
                  end                                                                     
            end       
          else      
      begin      
            --  Se tiene que Insertar      
  --if LTRIM(RTRIM(@CUSTIDSS)=''    
  --BEGIN    
                INSERT INTO CUSTOMER(custidss,TERMIDSUM,custid,taxregnbr,CUSTNAME,addr1,      
                            CUSTCLASSID,CURYTYPEID,TERMIDDOC,dateproc,CURYID,USERID,CUSTSTATUSID,AFFECT)      
                VALUES (@CUSTIDSS,'00',@CUSTID,@TAXREGNBR,@CUSTNAME,@ADDRESS,      
                        '00',@CURYTYPEID,'00',@DATEPROCESALES,@CURYID,@USERID,'A',1)      
                   IF (@@error!=0)      
                      BEGIN      
                         RAISERROR  20000 'No se Puede Insertar Cliente '      
                         ROLLBACK TRAN      
            RETURN(1)          
                      END      
               -- END         
            end      
        END       
      
       -- Aquí se tiene que Repreguntar si es que el Cliente Tiene Límite de Credito para poder emitir la Venta              
       -- al Crédito , caso contrario se cambia el Valor de las Variables @CONTADOCREDITO,@TYPEPAYMENTID        
         
       DECLARE @LIMITECRED       UD_MONTO          
       DECLARE @DEUDACLIENTE     UD_DEUDA      
       DECLARE @MTOSURPLUS       UD_MONTO      
       DECLARE @FREETOTALCAB     UD_MONTO      
       DECLARE @FREETOTALDET     UD_MONTO      
       DECLARE @FREETOTAL        UD_MONTO                           
       DECLARE @CLAVE            CHAR(10)             
        
       if LTRIM(RTRIM(@CUSTIDSS)) <> ''             
          BEGIN      
             IF @CONTADOCREDITO=0       
               BEGIN      
                 SELECT @LIMITECRED=CREDLIMITED,@DEUDACLIENTE=CURRBAL,@MTOSURPLUS=MTOSURPLUS,@TSTAMP=TSTAMP       
                        FROM OP_CUST_LIMIT WHERE custidss=@CUSTIDSS AND SITEID=@SITEID      
                         
                 IF @CURYID=@MONEDABASE                                                      
                     BEGIN                                       
                         IF @TOTALPEN > (@LIMITECRED-@DEUDACLIENTE) + @MTOSURPLUS       
                             BEGIN       
                               -- Tiene una Opción más de que se le facture al Crédito       
                               IF EXISTS(select DOCUMENTFREEID from op_documentfree       
                                                      where CUSTIDSS=@CUSTIDSS AND       
                                                            (@DATEPROCESALES >=DATEPROCEINI AND @DATEPROCESALES <=DATEPROCEFIN) AND      
                                                             SITEID=@SITEID)                                       
                                 BEGIN       
                 
                                   SELECT SITEID,FREETOTAL,DOCUMENTFREEID INTO #TMP_DOCFREE from op_documentfree      
                                          WHERE CUSTIDSS=@CUSTIDSS and       
                                                (@DATEPROCESALES >= DATEPROCEINI AND @DATEPROCESALES <= DATEPROCEFIN) AND       
                                                 SITEID=@SITEID      
      
                                   SELECT @FREETOTALCAB=ISNULL(SUM(FREETOTAL),0) FROM #TMP_DOCFREE             
      
                                   SELECT @FREETOTALDET=ISNULL(SUM(TOTALPEN),0) from op_documentfreedet       
                                          WHERE SITEID=@SITEID and          
                                                DOCUMENTFREEID IN (SELECT DOCUMENTFREEID FROM #TMP_DOCFREE)       
                                                                                                                            
                                   --DROP TABLE #TMP_DOCFREE      
      
                                   SET @FREETOTAL=@FREETOTALCAB-@FREETOTALDET  -- Cuanto queda de libreracion del día                                  
   
                                   -- El Freetotal Indica cuanto puede comsumir          
      
                                   IF @FREETOTAL >= @TOTALPEN         
                                      BEGIN      
                                              
                                        -- ***********************************************************************      
     --   Inicio del Proceso de Grabado de Uso de FP6      
     -- ***********************************************************************                                                                                                          
      
       SET @MONTOQUESOBRA=@TOTALPEN        
         
        DECLARE CURFP6 cursor       
            FOR SELECT SITEID,FREETOTAL,DOCUMENTFREEID FROM #TMP_DOCFREE       
  OPEN CURFP6       
          FETCH NEXT FROM CURFP6 INTO @SITEID_FP6,@FREETOTAL_FP6,@DOCUMENTFREEID_FP6       
                
          WHILE @@FETCH_STATUS = 0      
                BEGIN       
      
                      SELECT @FREETOTALDET_FP6=SUM(TOTALPEN) FROM OP_DOCUMENTFREEDET WHERE SITEID=@SITEID_FP6 AND       
                                                                       DOCUMENTFREEID=@DOCUMENTFREEID_FP6                                          
                                                                                                                                    
       
                                    SET @MONTO_FP6DISPO=ISNULL(@FREETOTAL_FP6,0) - ISNULL(@FREETOTALDET_FP6,0)               
      
             IF @MONTO_FP6DISPO > 0      
                 BEGIN           
                         IF @MONTOQUESOBRA > 0       
                           BEGIN        
                     IF @MONTOQUESOBRA > @MONTO_FP6DISPO       
                        BEGIN                
            SET @MONTOQUESOBRA =@MONTOQUESOBRA-@MONTO_FP6DISPO       
                          -- Hay que grabar con @MONTO_FP6DISPO                    
           
                                 INSERT INTO OP_DOCUMENTFREEDET (SITEID,DOCUMENTFREEID,DATEPROCE,DOCTYPEID,      
                                                                NBRDOCUMENT,DATEDOC,TOTALPEN,USERID)       
                                              VALUES (@SITEID_FP6,@DOCUMENTFREEID_FP6,@DATEPROCESALES,@DOCTYPEIDTICKET,      
                                                      @NBRDOCUMENT,@DATEDOC,@MONTO_FP6DISPO,@USERID)          
      
                                              IF (@@ERROR!=0 OR @@ROWCOUNT=0)        
                                                 BEGIN      
                 CLOSE CURFP6      
                  DEALLOCATE CURFP6                                                                                                                                
                                                   RAISERROR  20000 'No se Pudo Grabar en la Tabla OP_DOCUMENTFREEDET'      
                                                   ROLLBACK TRAN      
                                                   RETURN(1)                                                                                            
                                          END                              
                        END      
                     ELSE      
                        BEGIN       
      
                                  INSERT INTO OP_DOCUMENTFREEDET (SITEID,DOCUMENTFREEID,DATEPROCE,DOCTYPEID,      
                                                                 NBRDOCUMENT,DATEDOC,TOTALPEN,USERID)       
                                               VALUES (@SITEID_FP6,@DOCUMENTFREEID_FP6,@DATEPROCESALES,@DOCTYPEIDTICKET,      
                                                       @NBRDOCUMENT,@DATEDOC,@MONTOQUESOBRA,@USERID)          
      
                                               IF (@@ERROR!=0 OR @@ROWCOUNT=0)        
                      BEGIN      
                CLOSE CURFP6      
                  DEALLOCATE CURFP6      
                                          RAISERROR  20000 'No se Pudo Grabar en la Tabla OP_DOCUMENTFREEDET'      
                                                   ROLLBACK TRAN      
                                                   RETURN(1)                                                                                            
                                                 END                           
                                   
                          -- Hay que grabar con @MONTOQUESOBRA                   
                          SET @MONTOQUESOBRA=0      
                        END                                                                                 
                          END      
                       END                
                    FETCH NEXT FROM CURFP6 INTO @SITEID_FP6,@FREETOTAL_FP6,@DOCUMENTFREEID_FP6                 
                END      
       CLOSE CURFP6      
       DEALLOCATE CURFP6                                                                                                                                
       DROP TABLE #TMP_DOCFREE      
                                        -- ***********************************************************************      
                                 --  Fin del Proceso de Grabado de Uso de FP6       
                                        -- ***********************************************************************      
      
                                          UPDATE OP_CUST_LIMIT SET CURRBAL=CURRBAL+@TOTALPEN       
                                                 WHERE custidss=@CUSTIDSS AND SITEID=@SITEID AND TSTAMP=@TSTAMP            
    IF (@@error!=0 OR @@ROWCOUNT=0)      
                                                BEGIN      
                                                  RAISERROR  20000 'No se Pudo Actualizar deuda del Cliente'      
                                                  ROLLBACK TRAN      
                                                  RETURN(1)          
                                         END        
      
       
                                        -- ***********************************************************************        
                                                 
                                       END        
                                   ELSE      
                                      BEGIN      
                                        SET @CONTADOCREDITO=1      
                                        SET @TYPEPAYMENTID='01'      
                                      END        
                                 END        
                               ELSE          
                                 BEGIN      
                                    SET @CONTADOCREDITO=1      
                                    SET @TYPEPAYMENTID='01'      
                                 END                
                             END      
                         ELSE  -- Si Tiene Limite de Credito entonces se Actualiza        
                             BEGIN      
                               UPDATE OP_CUST_LIMIT SET CURRBAL=CURRBAL+@TOTALPEN       
                                                    WHERE custidss=@CUSTIDSS AND SITEID=@SITEID AND TSTAMP=@TSTAMP            
                                -- Manejo de Actualizacion       
                                   IF (@@error!=0 OR @@ROWCOUNT=0)      
                                       BEGIN      
                                         RAISERROR  20000 'No se Pudo Actualizar deuda del Cliente'      
                                         ROLLBACK TRAN      
                                         RETURN(1)          
                                       END                             
                              -- Fin de Manejo de Actualizacion       
                             END       
      
      
                     END                   
                 ELSE       
                     BEGIN       
                        IF @TOTALUSD > (@LIMITECRED-@DEUDACLIENTE) + @MTOSURPLUS      
                             BEGIN      
                               IF EXISTS(select DOCUMENTFREEID from op_documentfree       
                                                where CUSTIDSS=@CUSTIDSS AND       
                                                     (@DATEPROCESALES >=DATEPROCEINI AND @DATEPROCESALES <=DATEPROCEFIN) AND      
                                                      SITEID=@SITEID)                                       
                                 BEGIN                                       
      
       -- Inicio de Verificacion si es que Tiene FP6       
                                            
                                   SELECT SITEID,FREETOTAL,DOCUMENTFREEID INTO #TMP_DOCFREE2 from op_documentfree      
                                          WHERE CUSTIDSS=@CUSTIDSS and       
                                                (@DATEPROCESALES >= DATEPROCEINI AND @DATEPROCESALES <= DATEPROCEFIN) AND       
                                                 SITEID=@SITEID      
      
                                   SELECT @FREETOTALCAB=ISNULL(SUM(FREETOTAL),0) FROM #TMP_DOCFREE2             
      
                                   SELECT @FREETOTALDET=ISNULL(SUM(TOTALPEN),0) from op_documentfreedet       
                                          WHERE SITEID=@SITEID and          
                                                DOCUMENTFREEID IN (SELECT DOCUMENTFREEID FROM #TMP_DOCFREE2)       
                                                    
                                   SET @FREETOTAL=@FREETOTALCAB-@FREETOTALDET                                         
                                         
                                   -- El Freetotal Indica cuanto puede comsumir          
                                   IF @FREETOTAL >= @TOTALPEN         
                                      BEGIN      
      
                                         -- ********************************************************************************************      
                              -- Parte en que se Inicia el Grabado de Consumo de FP6                        
                                         -- ********************************************************************************************      
      
       SET @MONTOQUESOBRA=@TOTALPEN        
         
        DECLARE CURFP62 cursor       
            FOR SELECT SITEID,FREETOTAL,DOCUMENTFREEID FROM #TMP_DOCFREE2       
      
        OPEN CURFP62       
          FETCH NEXT FROM CURFP62 INTO @SITEID_FP6,@FREETOTAL_FP6,@DOCUMENTFREEID_FP6       
                
          WHILE @@FETCH_STATUS = 0      
                BEGIN       
              
                    SELECT @FREETOTALDET_FP6=SUM(TOTALPEN) FROM OP_DOCUMENTFREEDET WHERE SITEID=@SITEID_FP6 AND       
                                                            DOCUMENTFREEID=@DOCUMENTFREEID_FP6                                          
      
                    SET @MONTO_FP6DISPO=ISNULL(@FREETOTAL_FP6,0) - ISNULL(@FREETOTALDET_FP6,0)      
              
             IF @MONTO_FP6DISPO > 0      
                 BEGIN                   
                         IF @MONTOQUESOBRA > 0       
                           BEGIN        
                     IF @MONTOQUESOBRA > @MONTO_FP6DISPO       
                        BEGIN                
            SET @MONTOQUESOBRA =@MONTOQUESOBRA-@MONTO_FP6DISPO       
                          -- Hay que grabar con @MONTO_FP6DISPO                    
           
                                 INSERT INTO OP_DOCUMENTFREEDET (SITEID,DOCUMENTFREEID,DATEPROCE,DOCTYPEID,      
                                                                NBRDOCUMENT,DATEDOC,TOTALPEN,USERID)       
                                              VALUES (@SITEID_FP6,@DOCUMENTFREEID_FP6,@DATEPROCESALES,@DOCTYPEIDTICKET,      
                                                      @NBRDOCUMENT,@DATEDOC,@MONTO_FP6DISPO,@USERID)          
      
                                              IF (@@ERROR!=0 OR @@ROWCOUNT=0)        
                                                 BEGIN      
                 CLOSE CURFP62      
                  DEALLOCATE CURFP62                                                                                                                                
                                                   RAISERROR  20000 'No se Pudo Grabar en la Tabla OP_DOCUMENTFREEDET'      
                                                   ROLLBACK TRAN      
                                                   RETURN(1)                                                                                       
                                          END                              
                   END      
                     ELSE      
                        BEGIN       
      
                                  INSERT INTO OP_DOCUMENTFREEDET (SITEID,DOCUMENTFREEID,DATEPROCE,DOCTYPEID,      
                                                                 NBRDOCUMENT,DATEDOC,TOTALPEN,USERID)       
                                               VALUES (@SITEID_FP6,@DOCUMENTFREEID_FP6,@DATEPROCESALES,@DOCTYPEIDTICKET,      
                                                       @NBRDOCUMENT,@DATEDOC,@MONTOQUESOBRA,@USERID)          
      
                                               IF (@@ERROR!=0 OR @@ROWCOUNT=0)        
                                                 BEGIN      
                CLOSE CURFP62      
                  DEALLOCATE CURFP62      
                                                   RAISERROR  20000 'No se Pudo Grabar en la Tabla OP_DOCUMENTFREEDET'      
                                                   ROLLBACK TRAN      
                                                   RETURN(1)              
                                                 END                           
                                   
                          -- Hay que grabar con @MONTOQUESOBRA                   
                          SET @MONTOQUESOBRA=0      
                        END                                                                                 
                          END      
                       END                
                    FETCH NEXT FROM CURFP62 INTO @SITEID_FP6,@FREETOTAL_FP6,@DOCUMENTFREEID_FP6                 
                END      
       CLOSE CURFP62      
       DEALLOCATE CURFP62                                                                                                                                
       DROP TABLE #TMP_DOCFREE2      
      
                                          -- ********************************************************************************************      
                             -- Fin de la Parte en que se Inicia el Grabado de Consumo de FP6                        
                                          -- ********************************************************************************************      
      
                            UPDATE OP_CUST_LIMIT SET CURRBAL=CURRBAL+@TOTALUSD       
                                                 WHERE custidss=@CUSTIDSS AND SITEID=@SITEID AND TSTAMP=@TSTAMP                                          
                                         IF (@@error!=0 OR @@ROWCOUNT=0)      
                                                BEGIN      
                                                   RAISERROR  20000 'No se Pudo Actualizar deuda del Cliente'      
                                                   ROLLBACK TRAN      
                                                   RETURN(1)          
                                                END             
      
       /* actualizar el cliente el limite de credito por tipo de pago credito */      
                                       
           --                     
                                       END        
                                   ELSE      
                                      BEGIN      
                                        SET @CONTADOCREDITO=1      
                                        SET @TYPEPAYMENTID='01'      
                                      END        
      
                                   -- Fin de Verificacion de FP6      
                                 END        
                               ELSE       
                                 BEGIN      
                                   SET @CONTADOCREDITO=1      
                                   SET @TYPEPAYMENTID='01'           
                                 END      
                             END                                   
                         ELSE -- Si Tiene Limite de Credito entonces se Actualiza        
       BEGIN       
                                    UPDATE OP_CUST_LIMIT SET CURRBAL=CURRBAL+@TOTALUSD       
                                                   WHERE custidss=@CUSTIDSS AND SITEID=@SITEID AND TSTAMP=@TSTAMP      
                                -- Manejo de Actualizacion       
                                    IF (@@error!=0 OR @@ROWCOUNT=0)      
                                       BEGIN      
                                         RAISERROR  20000 'No se Pudo Actualizar deuda del Cliente'      
                                         ROLLBACK TRAN      
                                         RETURN(1)          
                                       END            
            
           
                                -- Fin de Manejo de Actualizacion                                   
                            END      
                     END                 
               END       
           END      
      
      --***************************************************************************************************      
      
      DECLARE @SALD     NUMERIC(11,4)      
      DECLARE @CONTROL  INT       
                   
            
IF @TYPEPAYMENTID='01' or @TYPEPAYMENTID='14'  --Es en Efectivo se llenan los campos (EFECTIVO Y CONTADO/ADELANTO)             
         BEGIN      
          SET @TOTCASHPEN=@TOTALPEN      
          SET @TOTCASHUSD=@TOTALUSD              
      
/* actualizar el cliente el limite de credito por tipo de pago credito */      
--luis      
     
      
/*    FIN*/      
           SELECT @CONTROL=ISNULL(USER9,0) FROM CUSTOMER WHERE CUSTIDSS=@CUSTIDSS       
      
          IF @TYPEPAYMENTID='14' AND @CONTROL=1      
            BEGIN                
             --  EXEC OP_Verifica_SaldoAdelantadoR @CUSTIDSS,@SITEID,@SALD OUTPUT      
                
               SET @SALD=@SALD*-1      
        
               IF @TOTALPEN > @SALD -- Entonces Excede el Saldo           
                  BEGIN        
                   SET @TYPEPAYMENTID='01'                      
                  END        
            END      
         END        
      
              
       IF rtrim(ltrim(@PROMOTIONCARDID))='' set @PROMOTIONCARDID=NULL      
       IF rtrim(LTRIM(@CURYIDCARD)) <> '' set @CURYID=@CURYIDCARD         
      
      
       INSERT INTO OP_SALES(DOCTYPEID,NBRDOCUMENT,SITEID,TYPEPAYMENTID,STKINVENTORY,CURYID,      
                           DOCSTATUSID,TERMID,SALESPERID,USERID,DATEDOC,DATEPROCESALES,PERPOST,TAXIGVID,      
                           TAXISCID,TOTALPEN,TOTALUSD,SUBTOTALPEN,SUBTOTALUSD,TAXIGVPEN,TAXIGVUSD,TAXISCPEN,   
                           TAXISCUSD,TOTALNOTAFFECTPEN,TOTALNOTAFFECTUSD,PORCENTDISCOUNT1,PORCENTDISCOUNT2,      
                  TOTDISCOUNTPEN,TOTDISCOUNTUSD,TOTRETURNEDPEN,      
                           TOTRETURNEDUSD,TOTCASHPEN,TOTCASHUSD,CUSTIDSS,TAXREGNBR,CUSTNAME,PLACA,                               
                           CURYTYPEID,CURYRATE,STKCLOSEDZ,STKCLOSEDX,PROMOTIONCARDID,POINTNUMBER,      
                           SALESPOINT,KILOMETRAJE)       
       VALUES      
                (@DOCTYPEIDTICKET,@NBRDOCUMENT,@SITEID,@TYPEPAYMENTID,@STKINVENTORY,@CURYID,      
                 @DOCSTATUSID,@TERMID,@SALESPERID,@USERID,@DATEDOC,@DATEPROCESALES,@PERPOST,      
                 @TAXIGVID,@TAXISCID,@TOTALPEN,@TOTALUSD,@SUBTOTALPEN,@SUBTOTALUSD,@TAXIGVPEN,      
                 @TAXIGVUSD,@TAXISCPEN,@TAXISCUSD,@TOTALNOTAFFECTPEN,@TOTALNOTAFFECTUSD,      
                 @PORCENTDISCOUNT1,@PORCENTDISCOUNT2,@TOTDISCOUNTPEN,      
                 @TOTDISCOUNTUSD,@TOTRETURNEDPEN,@TOTRETURNEDUSD,@TOTCASHPEN,@TOTCASHUSD,@CUSTIDSS,      
                 @TAXREGNBR,@CUSTNAME,@PLACA,@CURYTYPEID,@CURYRATE,@STKCLOSEDZ,@STKCLOSEDX,@PROMOTIONCARDID,      
                 @POINTNUMBER,@SALESPOINT,@KILOMETRAJE)      
      
        IF (@@error!=0)      
           BEGIN      
              RAISERROR  20000 'No se Puede Registrar Venta'      
              ROLLBACK TRAN      
              RETURN(1)          
           END      
        -- ***************************************************************************************************       
        -- Verificar si Pago con Tarjeta y Grabar en OP_SALESCARD                            
        -- ***************************************************************************************************       
        if RTRIM(LTRIM(@CARDID)) <> ''      
           Begin         
                 INSERT INTO op_salescard(DOCTYPEID,NBRDOCUMENT,SITEID,SEQUENCE,CARDID,NBRCARD,TOTCARDPEN,TOTCARDUSD,CURYID,DATEPROCESALES)      
                         VALUES (@DOCTYPEIDTICKET,@NBRDOCUMENT,@SITEID,1,@CARDID,@NBRCARD,@TOTALPEN,@TOTALUSD,@CURYIDCARD,@DATEPROCESALES)      
                 IF (@@error!=0)         
                     BEGIN                            
                       RAISERROR  20000 'No se Puede Registrar Tarjeta de Crédito'      
                       ROLLBACK TRAN      
                       RETURN(1)       
                     END                       
           End      
      
     -- *************************************************************************************       
     -- Invocar al Procedimiento Almacenado que graba el Detalle      
     -- *************************************************************************************              
     set exec @ERROR=Op_GrabarRegistroenDetalleProc @CORRNBR,@NBRDOCUMENT,@CURYRATE,@SALESPOINT,      
                                                       @DATEDOC,@CURYIDCARD      
                         
        IF (@ERROR!=0)      
           BEGIN      
             ROLLBACK TRAN      
             IF @ERROR=1        
               BEGIN                        
                RETURN(1)                     
               END       
             IF @ERROR=2  -- SE RECIBE EL NUMERO DOS CUANDO EL STOCK ES NEGATIVO       
               BEGIN      -- Devuelvo un select       
                SELECT @NBRDOCUMENT as NumeroDocumento,'SNEGATIVO' AS STATUSSTOCK,'' AS TOMAINVENTARIO      
                RETURN(2)       
               END      
             IF @ERROR=3      
               BEGIN      
                SELECT @NBRDOCUMENT as NumeroDocumento,'' AS STATUSSTOCK,'IFISICO' AS TOMAINVENTARIO      
                RETURN(3)      
               END       
           END      
      
       -- *************************************************************************************       
       -- Se tiene que eliminar los registros del detalle                               
       -- *************************************************************************************      
      
       DELETE FROM TMP_OP_SALESDET WHERE @CORRNBR=CORRNBR        
       DELETE FROM TMP_OP_SALES    WHERE @CORRNBR=CORRNBR        
         IF (@@error!=0)      
           BEGIN      
              RAISERROR  20000 'No se Pudo Limpiar Temporal'      
              ROLLBACK TRAN      
              RETURN(1)          
           END      
            
        -- Si la Ventas es al Adelanto             
      
       if @TYPEPAYMENTID='14'    
          BEGIN      
            -- Hay que Grabar los Vales                  
           PRINT 'ENTRO A ACTUALIZAR ADELANTO'
	   PRINT @CORRNBR
	   PRINT @DOCTYPEIDTICKET
	   PRINT @NBRDOCUMENT
	   PRINT @DATEPROCESALES
	   PRINT 0
	   PRINT 2

	   SET EXEC @ERROR = OP_GrabarValesProc @CORRNBR,@DOCTYPEIDTICKET,@NBRDOCUMENT,@DATEPROCESALES

           IF (@ERROR!=0)      
             BEGIN      
                 RAISERROR  20000 'No se pudieron Registrar los Vales'      
                 ROLLBACK TRAN      
                 RETURN(1)          
             END                                 
            --             
	   SET EXEC @ERROR = OP_GrabarValesAProc @CORRNBR,@DOCTYPEIDTICKET,@NBRDOCUMENT,@DATEPROCESALES,0,2
        
	   IF (@ERROR!=0)      
               BEGIN      
                  RAISERROR  20000 'No se pudieron Registrar los Vales'      
                  ROLLBACK TRAN      
                  RETURN(1)          
               END                                 

            DELETE FROM TMP_OP_BONUS WHERE @CORRNBR=CORRNBR        
	      
            IF (@@error!=0)      
             BEGIN      
              RAISERROR  20000 'No se Pudo Limpiar Temporal'      
              ROLLBACK TRAN      
              RETURN(1)          
             END       

	
            -- *************************                  
          END     
      
       -- Si la Ventas es al ContadoAdelanto             
      
       /*****if ((@TYPEPAYMENTID='01' AND (RTRIM(LTRIM(ISNULL(@CUSTIDSS,''))) <> ''))) and @CONTADOCREDITO=1       
          BEGIN      
            -- Hay que Grabar los Vales                  
          
            set exec @ERROR = OP_GrabarValesProc @CORRNBR,@DOCTYPEIDTICKET,@NBRDOCUMENT,@DATEPROCESALES
      
            IF (@ERROR!=0)      
             BEGIN      
                 RAISERROR  20000 'No se pudieron Registrar los Vales'      
                 ROLLBACK TRAN      
                 RETURN(1)          
             END                                 
            --             
            DELETE FROM TMP_OP_BONUS WHERE @CORRNBR=CORRNBR        
      
            IF (@@error!=0)      
             BEGIN      
              RAISERROR  20000 'No se Pudo Limpiar Temporal'      
              ROLLBACK TRAN      
              RETURN(1)          
             END      
            -- *************************                  
          END      ******/
                 
       -- *************************************************************************************       
       -- Se tiene que Verificar la cuenta Corriente      
       -- *************************************************************************************             
       -- Se tiene que verificar si la Venta es al Crédito       
                            
       if @CONTADOCREDITO=0         
          BEGIN       
            DECLARE @FechaVencimiento DATETIME        
	    DECLARE @DIAPAGID         char(10)         
            DECLARE @DAYGRACE             int      
                  
            --  Hay que Grabar los Vales       
            set exec @ERROR = OP_GrabarValesProc @CORRNBR,@DOCTYPEIDTICKET,@NBRDOCUMENT,@DATEPROCESALES               
                              
      
            IF (@ERROR!=0)      
             BEGIN      
                 RAISERROR  20000 'No se pudieron Registrar los Vales'      
                 ROLLBACK TRAN      
                 RETURN(1)          
             END                                 
            --             
            DELETE FROM TMP_OP_BONUS WHERE @CORRNBR=CORRNBR        
      
            IF (@@error!=0)      
             BEGIN      
              RAISERROR  20000 'No se Pudo Limpiar Temporal'      
              ROLLBACK TRAN      
              RETURN(1)          
             END      
            --                                 
      
            SELECT @DIAPAGID=DIAPAGID,@DAYGRACE=DAYGRACE FROM CUSTOMER WHERE custidss=@CUSTIDSS      
      
            SET DATEFIRST 7                                         
      
            EXEC OP_Calc_Dias_de_PagoProc @CUSTIDSS,@TERMID,@DATEPROCESALES,@FechaVencimiento OUTPUT,0        
      
            IF (@@error!=0)      
             BEGIN      
                 RAISERROR  20000 'No se Pudo Obtener Fecha de Vencimiento'      
                 ROLLBACK TRAN      
                 RETURN(1)          
             END      
                               
           DECLARE @FECHATEMP varchar(20)       
           SET @FECHATEMP= rtrim(ltrim(CAST(@FechaVencimiento as varchar(20))))       
           SELECT @FECHATEMP=left(@FECHATEMP,len(@FECHATEMP)-7)      
           SET @FechaVencimiento=CAST (@FECHATEMP AS SMALLDATETIME)      
                
      
           set exec @ERROR= OP_GenerarCuentasCobrarProc @DOCTYPEIDTICKET,@NBRDOCUMENT,@SITEID,@CURYTYPEID,       
                                                         @DATEDOC,@DATEPROCESALES,@FechaVencimiento,      
                                                         @TOTALPEN,@TOTALUSD,0,0,@TOTALPEN,@TOTALUSD,      
                   @CUSTIDSS,@TAXREGNBR,'PE',@CURYRATE,@CURYID,@DIAPAGID,@DAYGRACE,      
                                                         @USERID        
            IF (@ERROR!=0)      
       BEGIN                     
                SELECT '' as NumeroDocumento,'' AS STATUSSTOCK,'' AS TOMAINVENTARIO         
                ROLLBACK TRAN                      
        RETURN(1)                     
             END                                 
                                         
          END       
            
       -- *************************************************************************************      
       -- Hay que Grabar en OP_Tran los Datos leídos         
       -- *************************************************************************************      
      
          IF  @NUMEROTRAN <> ''       
              BEGIN                
                   INSERT INTO OP_TRAN VALUES(@NUMEROTRAN,@SOLESTRAN,@PRODUCTOTRAN,@PRECIOTRAN,@GALONESTRAN,      
                                                                            @CARATRAN,@FECHATRAN,@HORATRAN,@TURNOTRAN,@ESTADOTRAN,      
                                                                            @NBRDOCUMENT,@DATEPROCESALES)       
                
                  IF (@@ERROR!=0 or @@ROWCOUNT=0)      
                        BEGIN      
                           RAISERROR  20000 'No se Pudo registrar Venta en el Archivo Gasboy (OP_TRAN)'      
                           ROLLBACK TRAN      
                           RETURN(1)          
                       END      
             END       
           
       -- *************************************************************************************       
       -- Se tiene que devolver el numero del documento      
       -- *************************************************************************************      
          DECLARE @SALESPERSONTURN TINYINT      
              
          SELECT @SALESPERSONTURN=SALESPERSONTURN FROM SETUP      
      
          SELECT @NBRDOCUMENT as NumeroDocumento,'' AS STATUSSTOCK,@TOTALPEN as TOTALBASE,      
                 @TOTALUSD as TOTALEXT,@SUBTOTALPEN as SUBTOTALBASE,@SUBTOTALUSD as SUBTOTALEXT,      
          @TAXIGVPEN as TOTALIGVBASE,@TAXIGVUSD as TOTALIGVEXT ,@TOTALNOTAFFECTPEN as TOTALNOAFECTOBASE,      
                 @TOTALNOTAFFECTUSD as TOTALNOAFECTOEXT,@TYPEPAYMENTID as TipoPago,@CURYIDCARD as MonedaTarjeta,      
                 @SALESPERSONTURN as Turno,@DESCRCARD AS DESCTARJETA,@PLACA AS PLACA,@PORCENTDISCOUNT1 AS PORDESCUENTO,      
                 @TOTDISCOUNTPEN AS DESCUENTO, @NBRCARD as NumeroTarjeta,'' AS TOMAINVENTARIO,getdate() as FechaServidor       
                                  
        COMMIT TRAN              
END      
    
    
  


    
    
    
    



	