DROP PROC OP_GRABARVENTACSTORE
GO

CREATE PROC 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,
@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)
AS

BEGIN

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


BEGIN TRAN

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

SET @custidss=LTRIM(RTRIM(@custidss))
IF LEN(@custidss)=0 SET @custidss=NULL


--grabar en la cabezera'
--------------------------------------------------------------------------------------------------------
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,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,
		@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)
    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='06'  --SI EL PAGO ES CON vales RECORRER TMP_OP_bonus
           Begin   
		--declarar cursor para recorrer la tabla temporal de tarjetas'		

		DECLARE vales  cursor FOR SELECT NBRBONUS
					from tmp_op_bonus where CORRNBR=@CORRNBR
					
		OPEN vales

		FETCH NEXT FROM vales INTO @NBRBONUS

		WHILE @@FETCH_STATUS = 0
		BEGIN

	                INSERT INTO op_bonus (DOCTYPEID,NBRDOCUMENT,custidss,SITEID,NBRBONUS)
	                VALUES (@DOCTYPEID,@NBRDOCUMENT,@custidss,@SITEID,@NBRBONUS )

 			IF (@@error!=0)   
		            	BEGIN                      
				CLOSE vales
				DEALLOCATE vales
				RAISERROR  20000 'No se Puede Registrar Vales'
	             		ROLLBACK TRAN
	           		RETURN(9) 
       			END                 

			FETCH NEXT FROM vales INTO @NBRBONUS
		end
		CLOSE vales
		DEALLOCATE vales
	end
----------------------------------------------------------------------------
        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

-------------------------------------------------------------------------------------------------------
--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
	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 )

   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


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
