ALTER  PROCEDURE OP_GRABARVENTACSTORE    
 @CORRNBR  INTEGER,    
 @DOCTYPEID  UD_DOCTYPEID,    
 @NBRDOCUMENT  UD_CORRELATIVOS,    
 @TYPEPAYMENTID  CHAR(2),    
 @STKINVENTORY  BIT,    
 @SITEID   UD_IDSITE,    
 @CURYID   UD_CURYID,    
 @TERMID   CHAR(2),    
 @SALESPERID  UD_SALESPERSONID,    
 @USERID   UD_USERID,    
 @DATEDOC  UD_FECHAHORA,    
 @DATEPROCESALES  UD_FECHA,    
 @TAXIGVID  CHAR(2),    
 @TAXISCID  CHAR(2),    
 @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,    
 @TOTALAFFECTPEN  UD_MONTO,    
 @VALORVENTA  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,    
 @taxregnbr  UD_CODCLIENT,    
 @CUSTNAME  UD_NOMBRE,    
 @PLACA   UD_PLACA,    
 @NBRBONUS  NUMERIC(10, 0),    
 @CURYTYPEID  UD_CURYTYPEID,    
 @CURYRATE  UD_CAMBIO,    
 @PROMOTIONCARDID CHAR(20),    
 @POINTNUMBER  SMALLINT,    
 @SALESPOINT  UD_PTOVTA,    
 @KILOMETRAJE  INTEGER,    
 @businesstype   char(1),    
 @tipoventa   char(1),    
 @Adelanto               tinyint= 0,   -- Es 1 si es Adelanto     
 @nuevoVALES     INT  --1 nuevo ; 2 Modificacion
AS    
    
BEGIN    
    
    
DECLARE @TOTALPENCTACTE UD_MONTO    
DECLARE @TOTALUSDCTACTE UD_MONTO    
    
    
SET @TOTALPENCTACTE=@TOTALPEN    
SET @TOTALUSDCTACTE=@TOTALUSD    
    
DECLARE @SEQUENCE   UD_REGISTRO     
DECLARE @INVTIDSKU  UD_IDCORPORATIVO    
DECLARE @NBRTURN tinyint       
DECLARE @NBRSIDE    UD_CARA  DECLARE @PORCENTTAXIGV  UD_PORCENTAJE    
DECLARE @PORCENTTAXISC  UD_PORCENTAJE    
DECLARE @TAXPEN  UD_MONTO    
DECLARE @TAXUSD  UD_MONTO    
DECLARE @STKITEM bit    
DECLARE @STKFISI bit    
DECLARE @SLS_PRICE   UD_PRECIO    
DECLARE @SLSPRICESALE   UD_PRECIO    
DECLARE @STDCOSTPEN  UD_COSTO      
DECLARE @STDCOSTUSD  UD_COSTO    
DECLARE @INVTIDALTER UD_CODIGOBARRA    
DECLARE @DESCRINVENTORY UD_DESCRIPCION    
DECLARE @QTY  UD_STOCK    
DECLARE @KIT  bit     
DECLARE @STKSTOCK bit     
DECLARE @ERROR   Integer    
declare @BATNBRSALESCHAR char(10)    
DECLARE @PERPOST  UD_PERPOST    
declare @INTYPESALES UD_TYPEDOC    
declare @SWTINOUT bit    
declare @CARDID char(2)    
declare @NBRCARD char(20)    
declare @TOTCARDPEN ud_monto    
declare @TOTCARDUSD ud_monto    
declare @MONEDABASE UD_CURYID    
declare @TSTAMP TimeStamp    
    
    
/****************************************************************************/    
  -- 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    
     
/****************************************************************************/    
    
    
BEGIN TRAN    
    
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               
                ROLLBACK TRAN    
                RAISERROR 20000 'No se pudo Activar Flag de Resumen de Ventas '    
                RETURN 1                                             
             END  

        END      
   END    
    
    
IF(@tipoventa = 'A') --SI ES FACTURACION AUTOMATICA (TIENDA)    
   BEGIN    
     SELECT @DATEDOC=GETDATE()    
     SELECT @DATEPROCESALES=DATEPROCESALES FROM OP_SETUP     
   END    
    
SET @PERPOST=RTRIM((LTRIM(RTRIM(LTRIM(DATEPART(yyyy,@DATEPROCESALES))) + replicate('0',2-len(RTRIM(LTRIM(DATEPART(mm,@DATEPROCESALES))))) + RTRIM(LTRIM(DATEPART(mm,@DATEPROCESALES))))))       
    
set @PROMOTIONCARDID=ltrim(rtrim(@PROMOTIONCARDID))    
if len(@PROMOTIONCARDID)=0 set @PROMOTIONCARDID=null    
    
SELECT @MONEDABASE=CURYORIG FROM SETUP    
SET @custidss=LTRIM(RTRIM(@custidss))    
IF LEN(@custidss)=0 SET @custidss=NULL    
    
   -- Hay que Preguntar si la Ventas es al Crédito    
   -- 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)          
    
       DECLARE @DOCTYPEIDNC      UD_DOCTYPEID    
    
       SELECT @DOCTYPEIDNC=DOCTYPEIDNC FROM OP_SETUP    
    
    
       IF (NOT @CUSTIDSS IS NULL) AND (rtrim(ltrim(@DOCTYPEIDNC)) <> rtrim(ltrim(@DOCTYPEID)))  -- Si es que la Venta es diferente a la Nota de credito     
          BEGIN    
             IF @TYPEPAYMENTID='06' -- Si la Venta es al Crédito     
               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                                     
                                    -- Comienza la Validacion de Fp6 ESTO ES TIENDA    
    
                                        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)    
                                                 
                                        SET @FREETOTAL=@FREETOTALCAB-@FREETOTALDET                                
                                       
                                        -- El Freetotal Indica cuanto puede comsumir        
                                        IF @FREETOTAL >= @TOTALPEN       
                                           BEGIN    
    
                                            -- ******************************************************************************     
                                            -- Inicia el Proceso de Grabdo 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,@DOCTYPEID,    
                                                      @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,@DOCTYPEID,    
                                                       @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 Grabdo 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 @TYPEPAYMENTID='01'    
                                  SET @TOTCASHPEN=@TOTALPEN    
                                  SET @TOTCASHUSD=@TOTALUSD    
                                           END      
                                                                 
               -- Fin de la Validacion de Fp6      
                                 END      
                              ELSE        
                                 BEGIN    
                                    SET @TYPEPAYMENTID='01'    
                                    SET @TOTCASHPEN=@TOTALPEN    
                                    SET @TOTCASHUSD=@TOTALUSD    
                                 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  -- Esto es Tienda    
                             BEGIN    
                               IF EXISTS(select DOCUMENTFREEID from op_documentfree     
                                                where CUSTIDSS=@custidss AND      
                                                      (@DATEPROCESALES >=DATEPROCEINI AND @DATEPROCESALES <=DATEPROCEFIN) AND    
                                                       SITEID=@SITEID)                                     
                                 BEGIN                                     
    
                                    -- Comienza la Validacion de 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,@DOCTYPEID,    
                                                      @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,@DOCTYPEID,    
                                                       @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    
    
                                               -- ********************************************************************************************    
                                        -- Parte en que se Finaliza 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             
                  --                  
                                            END      
                                        ELSE    
                                           BEGIN    
                                  SET @TYPEPAYMENTID='01'    
                                  SET @TOTCASHPEN=@TOTALPEN    
                                  SET @TOTCASHUSD=@TOTALUSD    
                                           END      
    
               -- Fin de la Validacion de Fp6      
    
                                 END      
                               ELSE     
                                 BEGIN    
                 SET @TYPEPAYMENTID='01'         
                                   SET @TOTCASHPEN=@TOTALPEN    
                                   SET @TOTCASHUSD=@TOTALUSD    
                                 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    
        
   --Fin de Venta al Crédito    
      
   --grabar en la cabezera'    
        
   if @TYPEPAYMENTID='06'            
      BEGIN      
       if NOT @custidss IS NULL     
          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                  
      END    
   ELSE    
      BEGIN    
          SET @TERMID='00'        
      END    
    
      
  -- Aquí tiene que ir la validación de consumo por adelanto     
    
  DECLARE @SALDTMP  NUMERIC(11,4)                 
  DECLARE @CONTROL1 INT    
              
                   
      IF @TYPEPAYMENTID='14'    
         BEGIN              
                
            SELECT @CONTROL1=ISNULL(USER9,0) FROM CUSTOMER WHERE CUSTIDSS=@custidss      
    
            IF @CONTROL1=1     
              BEGIN            
               -- EXEC OP_Verifica_SaldoAdelantadoR @custidss,@SITEID,@SALDTMP OUTPUT    
              
                SET @SALDTMP=@SALDTMP*-1    
      
                IF @TOTALPEN > @SALDTMP -- Entonces Excede el Saldo         
                   BEGIN      
                     SET @TYPEPAYMENTID='01'                    
                   END      
              END     
         END      
    
  -- fin de la validacion de consumo por adelanto     
    
             
     INSERT INTO OP_SALES    
  (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,    
   TOTALAFFECTPEN, VALORVENTA,    
   PORCENTDISCOUNT1,PORCENTDISCOUNT2,    
                 TOTDISCOUNTPEN,TOTDISCOUNTUSD,TOTRETURNEDPEN,TOTRETURNEDUSD,TOTCASHPEN,    
   TOTCASHUSD,custidss,taxregnbr,CUSTNAME,PLACA,NBRBONUS,CURYTYPEID,CURYRATE,    
   PROMOTIONCARDID,POINTNUMBER,SALESPOINT,KILOMETRAJE,STKCLOSEDZ,STKCLOSEDX,businesstype)    
               VALUES  (@DOCTYPEID,@NBRDOCUMENT,@TYPEPAYMENTID,@STKINVENTORY,    
            @SITEID,@CURYID,'NA',@TERMID,@SALESPERID,@USERID,@DATEDOC,@DATEPROCESALES,    
               @PERPOST,@TAXIGVID,@TAXISCID,@TOTALPEN,@TOTALUSD,@SUBTOTALPEN,@SUBTOTALUSD,    
           @TAXIGVPEN,@TAXIGVUSD,@TAXISCPEN,@TAXISCUSD,@TOTALNOTAFFECTPEN,@TOTALNOTAFFECTUSD,    
   @TOTALAFFECTPEN, @VALORVENTA,    
           @PORCENTDISCOUNT1,@PORCENTDISCOUNT2,@TOTDISCOUNTPEN,@TOTDISCOUNTUSD,    
           @TOTRETURNEDPEN,@TOTRETURNEDUSD,@TOTCASHPEN,@TOTCASHUSD,@custidss,    
           @taxregnbr,@CUSTNAME,@PLACA,@NBRBONUS,@CURYTYPEID,@CURYRATE,    
            @PROMOTIONCARDID,@POINTNUMBER,@SALESPOINT,@KILOMETRAJE,0,0,@businesstype)    
    
     IF (@@error!=0 or @@rowcount=0)    
       BEGIN    
          RAISERROR  20000 'OP_GRABARVENTASCTORE: Error al Grabar Transaccion'    
          ROLLBACK TRAN    
          RETURN(9)        
       END    
    
-----------------------------------------------------------------------------------------------------------------------------    
  --MARCAR EL DOCUMENTO TEMPORAL COMO PROCESADO    
     UPDATE TMP_OP_SALESCSTORE SET PROCESSED =1     
        where CORRNBR=@CORRNBR     
-----------------------------------------------------------------------------------------------------------------------------    
     if @TYPEPAYMENTID='02' OR  @TYPEPAYMENTID='00'  --SI EL PAGO ES CON TARJETA O VARIOS RECORRER TMP_OP_SALESCARD PAGOS CON TARJETA    
           Begin       
  --declarar cursor para recorrer la tabla temporal de tarjetas'      
    
  DECLARE tarjetas  cursor FOR SELECT  SEQUENCE,CARDID,NBRCARD,curyid,TOTCARDPEN,TOTCARDUSD     
      from tmp_op_salescard    
      where CORRNBR=@CORRNBR    
         
  OPEN tarjetas      
    
  FETCH NEXT FROM TARJETAS    
    INTO @SEQUENCE,@CARDID,@NBRCARD,@curyid,@TOTCARDPEN,@TOTCARDUSD     
    
  --recorrer el detalle de tarjetas'    
  WHILE @@FETCH_STATUS = 0    
  BEGIN    
    
                 INSERT INTO op_salescard (DOCTYPEID,NBRDOCUMENT,SITEID,SEQUENCE,CARDID,NBRCARD,TOTCARDPEN,TOTCARDUSD,CURYID,DATEPROCESALES)    
                 VALUES (@DOCTYPEID,@NBRDOCUMENT,@SITEID,@sequence,@CARDID,@NBRCARD,@TOTCARDPEN,@TOTCARDUSD,@curyid,@DATEPROCESALES )    
    
    IF (@@error!=0)       
               BEGIN                          
    CLOSE tarjetas    
    DEALLOCATE tarjetas    
    RAISERROR  20000 'No se Puede Registrar Tarjeta de Crédito'    
                ROLLBACK TRAN    
              RETURN(9)     
          END                     
   FETCH NEXT FROM TARJETAS    
    INTO @SEQUENCE,@CARDID,@NBRCARD,@curyid,@TOTCARDPEN,@TOTCARDUSD       
    
  end --fin del bucle del cursor     
  CLOSE tarjetas    
  DEALLOCATE tarjetas               
       End --fin de pago tarjetas u otros    
    
-- Verificar si es un Pago por Adelanto ( FACTURA )    
        
       IF @Adelanto=1    
         BEGIN    
            INSERT INTO OP_DOCANTI (DOCTYPEID,NBRDOCUMENT,SITEID,DATEPROCE)    
                   VALUES (@DOCTYPEID,@NBRDOCUMENT,@SITEID,@DATEPROCESALES)        
    
            IF (@@error!=0 OR @@ROWCOUNT=0)               
              BEGIN    
                RAISERROR  20000 'No se Puede registrar documento como Adelanto'    
         ROLLBACK TRAN    
                RETURN(1)                     
             END    
 /*actualizar credito cliente por pagoadelantado*/    
/*  BEGIN        
  UPDATE CUSTOMER SET MTOTOTLIMIT=MTOTOTLIMIT+@TOTALPEN     
         WHERE custidss=@CUSTIDSS     
                IF (@@error!=0 OR @@ROWCOUNT=0)    
                   BEGIN    
                    RAISERROR  20000 'No se Pudo Actualizar deuda del Cliente'    
                    ROLLBACK TRAN    
                    RETURN(1)        
                END      
  END  */  
END    
    
-------------------------------------------------------------------------------------------------------    
--declarar cursor para recorrer el detalle'    
    
       DECLARE OPDETALLEVENTA cursor     
     FOR SELECT  SEQUENCE, INVTIDSKU, CURYID,NBRTURN, PORCENTTAXIGV, PORCENTTAXISC,     
   TOTALPEN, TOTALUSD, TAXPEN,TAXUSD,STKITEM, STKFISI, SLS_PRICE, SLSPRICESALE,     
   STDCOSTPEN, STDCOSTUSD, INVTIDALTER,DESCRINVENTORY, QTY,KIT    
            FROM TMP_OP_SALESDETCSTORE where CORRNBR=@CORRNBR    
    
       OPEN OPDETALLEVENTA    
    
    
       FETCH NEXT FROM OPDETALLEVENTA     
      INTO  @SEQUENCE,@INVTIDSKU,@CURYID,@NBRTURN,@PORCENTTAXIGV,@PORCENTTAXISC,    
   @TOTALPEN,@TOTALUSD,@TAXPEN,@TAXUSD,@STKITEM,@STKFISI,@SLS_PRICE,@SLSPRICESALE,    
   @STDCOSTPEN,@STDCOSTUSD,@INVTIDALTER,@DESCRINVENTORY,@QTY,@KIT      
    
--------------------------------------------------------------------------------------------------------    
--recorrer el detalle'    
       WHILE @@FETCH_STATUS = 0    
         BEGIN    
    
------------------------------------    
--agregar un item al detalle'    
    
                   INSERT INTO OP_SALESDET(DOCTYPEID,NBRDOCUMENT,SEQUENCE,SITEID,INVTIDSKU,CURYID,    
                   DOCSTATUSID,DATEDOC,DATEPROCESALES,PERPOST,NBRTURN,    
                 NBRSIDE,NBRTRANSACFUEL,PORCENTTAXIGV,PORCENTTAXISC,TOTALPEN,TOTALUSD,    
               TAXPEN,TAXUSD,STKITEM,STKFISI,SLS_PRICE,SLSPRICESALE,STDCOSTPEN,    
               STDCOSTUSD,INVTIDALTER,DESCRINVENTORY,QTY,USERID,KIT)    
                 VALUES(@DOCTYPEID,@NBRDOCUMENT,@SEQUENCE,@SITEID,@INVTIDSKU,@CURYID,'NA',    
      @DATEDOC,@DATEPROCESALES,@PERPOST,    
        @NBRTURN,NULL,NULL,@PORCENTTAXIGV,@PORCENTTAXISC,    
      @TOTALPEN,@TOTALUSD,@TAXPEN,@TAXUSD,@STKITEM,@STKFISI,@SLS_PRICE,    
      @SLSPRICESALE,@STDCOSTPEN,@STDCOSTUSD,@INVTIDALTER,@DESCRINVENTORY,@QTY,@USERID,@KIT)    
    
                    SET @ERROR=@@error    
     
                    IF (@ERROR!=0)    
                  BEGIN       
                  CLOSE OPDETALLEVENTA    
             DEALLOCATE OPDETALLEVENTA    
                   RAISERROR  20000 'OP_GRABARVENTASCTORE: Error al Grabar Transaccion'    
                          ROLLBACK TRAN    
            RETURN(9)      
                 END     
--------------------------------------------------------------------------------------------------------------------    
 --grabar en intramov'    
    
 --debe carbiarse para convertir el numero de documentos recibido    
    
        -- *******************************************************              
        -- Obtener del op_sales_setting el BATNBR    
        -- *******************************************************             
    
    
 set @BATNBRSALESCHAR=(select BATNBRSALES from op_salespointsetting where SALESPOINT=@SALESPOINT )    
 set @INTYPESALES =(SELECT INTYPESALES FROM IN_SETUP)    
 set @SWTINOUT =(SELECT INOUT FROM IN_TYPEDOC where TYPEDOCID=@INTYPESALES)    
       
        IF @DOCTYPEID=(SELECT DOCTYPEIDNC FROM OP_SETUP)  -- Si es una nota de Crédito entonces es un Ingreso             
           BEGIN     
             SET @SWTINOUT=1                  
           END    
    
        set exec @ERROR=OP_GRABARINTRAMOVProc @STKSTOCK,@SITEID,@INVTIDSKU,@BATNBRSALESCHAR,@DATEDOC,    
           @DATEPROCESALES,@INTYPESALES,@CURYRATE,@DATEPROCESALES,    
                  @PERPOST,@SWTINOUT,@QTY,@STDCOSTPEN,@STDCOSTUSD,@KIT,@SLSPRICESALE,    
        @NBRDOCUMENT,@DOCTYPEID,@STKFISI,@STKITEM    
        IF (@ERROR!=0)     
            BEGIN    
        CLOSE OPDETALLEVENTA    
         DEALLOCATE OPDETALLEVENTA    
               ROLLBACK TRAN    
        IF @ERROR=1  RETURN(9)       
               IF @ERROR=2  RETURN(2)     
            END      
    
        FETCH NEXT FROM OPDETALLEVENTA     
  INTO  @SEQUENCE,@INVTIDSKU,@CURYID,@NBRTURN,@PORCENTTAXIGV,@PORCENTTAXISC,    
   @TOTALPEN,@TOTALUSD,@TAXPEN,@TAXUSD,@STKITEM,@STKFISI,@SLS_PRICE,@SLSPRICESALE,    
   @STDCOSTPEN,@STDCOSTUSD,@INVTIDALTER,@DESCRINVENTORY,@QTY,@KIT      
       
        END  --fin del while    
----------------------------------------------------------------------------------------------    
    
   CLOSE OPDETALLEVENTA    
   DEALLOCATE OPDETALLEVENTA    
    
   IF (@@error!=0)    
      BEGIN    
        RAISERROR  20000 'OP_GRABARVENTASCTORE: Error al Grabar Transaccion'    
        ROLLBACK TRAN    
        RETURN(9)        
      END    
    
 -- Hay que Grabar los Vales     
    
      if (@TYPEPAYMENTID='14' OR (@TYPEPAYMENTID='01' AND (RTRIM(LTRIM(ISNULL(@CUSTIDSS,''))) <> '')))    
           BEGIN    
                                              
             DECLARE @SALD NUMERIC(11,4)                 
    
             IF @TYPEPAYMENTID='14'    
                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      
    
		  SET EXEC @ERROR = OP_GrabarValesAProc @CORRNBR,@DOCTYPEID,@NBRDOCUMENT,@DATEPROCESALES,@nuevoVALES
    
    	          IF (@ERROR!=0)    
        	      BEGIN    
                	  RAISERROR  20000 'No se pudieron Registrar los Vales'    
	                  ROLLBACK TRAN    
        	          RETURN(1)        
	              END              
		END    
                
            -- Hay que Grabar los Vales                
           --OP_GrabarValesProc  
            --           
           DELETE FROM TMP_OP_ORDENC WHERE @CORRNBR=CORRNBR      
    
            IF (@@error!=0)    
             BEGIN    
              RAISERROR  20000 'No se Pudo Limpiar Temporal'    
              ROLLBACK TRAN    
              RETURN(1)        
             END    
    
            -- *************************                
          END    
    
  -- Fin de Grabar Vales    
  -- Hay que verificar si la Venta es al Crédito     
        if NOT @custidss IS NULL     
         BEGIN     
          if @TYPEPAYMENTID='06'            
             BEGIN      
    
    
               DECLARE @FechaVencimiento DATETIME      
               DECLARE @DIAPAGID         char(10)       
               DECLARE @DAYGRACE             int    
  --           DECLARE @TERMIDDOCCLI     char(2)                
    
               --  Hay que Grabar los Vales     
           set exec @ERROR = OP_GrabarValesProc @CORRNBR,@DOCTYPEID,@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,@TERMID=TERMIDDOC 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 'OP_GRABARVENTASCTORE: No se pudo Calcular los Días de Pago'    
                  ROLLBACK TRAN    
                  RETURN(9)        
                 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 @DOCTYPEID,@NBRDOCUMENT,@SITEID,@CURYTYPEID,     
            @DATEDOC,@DATEPROCESALES,@FechaVencimiento,    
                                                           @TOTALPENCTACTE,@TOTALUSDCTACTE,0,0,@TOTALPENCTACTE,@TOTALUSDCTACTE,    
                                          @custidss,@TAXREGNBR,'PE',@CURYRATE,@CURYID,@DIAPAGID,@DAYGRACE,    
                                                           @USERID      
               IF (@ERROR!=0)    
                 BEGIN                   
                  RAISERROR  20000 'OP_GRABARVENTASCTORE: No se pudo Generar las Cuentas por Cobrar'    
ROLLBACK TRAN    
                  RETURN(9)      
                END                               
             END     
           END        
    
    
 -- Fin de Verificar la Ventas al Crédito      
    
    DECLARE @NBRSERIES numeric(3,0)    
    DECLARE @NBRDOC NUMERIC(7,0)    
    DECLARE @CHAR_NBRDOCUMENT CHAR(10)    
    
    SET @CHAR_NBRDOCUMENT=CAST(@NBRDOCUMENT AS CHAR(10) )    
    
    SET @NBRSERIES= CAST( SUBSTRING(@CHAR_NBRDOCUMENT ,1,3) AS NUMERIC(3,0) )    
    SET @NBRDOC = CAST( SUBSTRING(@CHAR_NBRDOCUMENT ,4,7) AS NUMERIC(7,0) )    
    
 --INCREMENTAR LOS NUMEROS DE DOCUMENTO    
    
    IF(@tipoventa='A') --SI ES FACTURACION AUTOMATICA (TIENDA)    
      BEGIN     
        IF ( len(ltrim(rtrim(@taxregnbr) ) )>0 )  --SI ES TICKET FACTURA    
  BEGIN    
   update OP_SALESPOINTSETTING     
   set NBRTICKFAC=NBRTICKFAC+1,BATNBRSALES = BATNBRSALES+1      
   where SALESPOINT=@SALESPOINT    
      
    IF (@@error!=0)    
       BEGIN    
           RAISERROR  20000 'OP_GRABARVENTASCTORE: Error al Grabar Transaccion incrementando correlativo'    
           ROLLBACK TRAN    
           RETURN(1)        
       END    
  END    
        ELSE    
  BEGIN    
    
   --SI ES TICKET BOLETA    
   update OP_SALESPOINTSETTING     
   set  NBRTICKBOL  =NBRTICKBOL  +1,BATNBRSALES = BATNBRSALES+1    
    where SALESPOINT=@SALESPOINT    
    
    IF (@@error!=0)    
       BEGIN    
           RAISERROR  20000 'OP_GRABARVENTASCTORE: Error al Grabar Transaccion incrementando correlativo'    
           ROLLBACK TRAN    
           RETURN(1)        
       END    
  END    
      END    
    ELSE --ES FACTURACION MANUAL    
      BEGIN     
  update OP_DOCSERIES set NBRDOC =@NBRDOC +1    
   where DOCTYPEID=@DOCTYPEID AND  NBRSERIES=@NBRSERIES AND  SITEID=@SITEID    
    
   IF (@@error!=0)    
      BEGIN    
          RAISERROR  20000 'OP_GRABARVENTASCTORE: Error al Grabar Transaccion incrementando correlativo'    
          ROLLBACK TRAN    
          RETURN(1)        
      END    
    
  update OP_SALESPOINTSETTING set BATNBRSALES = BATNBRSALES+1      
  where SALESPOINT=@SALESPOINT    
    
   IF (@@error!=0)    
      BEGIN    
          RAISERROR  20000 'OP_GRABARVENTASCTORE: Error al Grabar Transaccion incrementando correlativo'    
          ROLLBACK TRAN    
          RETURN(1)        
      END    
    
      END    
    
COMMIT TRAN   
SELECT 'OK' AS OK --DEVOLVER     
RETURN (0)      
--fin del store    
END    
  



