ALTER PROCEDURE 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,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      
    
