/* 
 * PROCEDURE: IN_AJUSTEAUTOMATICO 
 */
DROP PROC IN_AJUSTEAUTOMATICO
GO
CREATE  PROC IN_AJUSTEAUTOMATICO
@USUARIO UD_USERID	--ID DE USUARIO
AS

BEGIN

declare @tmoving ud_typedoc	--tipo movimiento de ingreso
declare @tmovsal ud_typedoc	--tipo movimiento de salidas
declare @NDOCT_ing int	--NUMERO CORRELATIVO TEMPORAL ingreso
declare @NDOCT_sal int		--NUMERO CORRELATIVO TEMPORAL SALIDA
declare @NDOC_ing char(10)		--NUMERO DOCUMENTO INGRESO
declare @NDOC_sal char(10)		--NUMERO DOCUMENTO SALIDA
DECLARE @ALMACEN UD_IDSITE
DECLARE @PROVEEDOR UD_IDVENDOR		--CODIGO PROVEEDOR
DECLARE @MONEDA_ORI UD_CURYID		--CODIGO MONEDA
DECLARE @IMPUESTO NUMERIC(4,2)		--CODIGO MONEDA
DECLARE @FECHAPROCESO SMALLDATETIME 	
DECLARE @inicioinventario SMALLDATETIME 
DECLARE @SEC_INGRESO INTEGER		--SECUENCE INGRESO
DECLARE @SEC_SALIDAS INTEGER		--SECUENCE SALIDA
DECLARE @PERIODO_PROCESO UD_PERPOST	--PERIODO DE PROCESO
DECLARE @DOCTYPE 	UD_DOCTYPEID	--PERIODO DE PROCESO
declare @ref char(10)
declare @tipo_cambio ud_cambio
declare @ttcambio CHAR(6)

declare @error integer
declare @sec integer			--NUMERO DE SEQUENCIA


------------------------------------------------------------------------------------------
--variables para uso del cursor
DECLARE  @CORRNBR           int
DECLARE  @SITEID            UD_IDSITE
DECLARE  @TYPEDOCID         UD_TYPEMOVEID
DECLARE  @SEQUENCE          smallint
DECLARE  @INVTIDSKU         UD_IDCORPORATIVO
DECLARE  @INVTIDBARR        UD_CODIGOBARRA
DECLARE  @QTY               UD_STOCK
DECLARE  @TAXIGV            numeric(4, 2)          
DECLARE  @STDCOSTPEN        UD_COSTO
DECLARE  @STDCOSTUSD        UD_COSTO
DECLARE  @STKFISI           bit
DECLARE  @INTRDATE          smalldatetime
DECLARE  @INTRDATEPROCE     smalldatetimE
DECLARE  @rlsed		    bit

/****** VARIABLES QUE VIENEN DEL SETUP PARA EL REDONDEO ********************/ 
	DECLARE @ND_COSTOSETUP Tinyint
	DECLARE @ND_STOCKSETUP Tinyint
	DECLARE @ND_RESULTADOSETUP Tinyint

	SET @ND_COSTOSETUP=(Select Floatcost from setup)
 	SET @ND_STOCKSETUP=(Select Floatqty from setup)
	SET @ND_RESULTADOSETUP=(Select Floatoutput from setup)

------------------------------------------------------------------------------------------

--OBTENER CORRELATIVO INTERNO
SET EXEC @ERROR=ObtenerCorrelativoProcUtil @USUARIO, @NDOCT_ing output
IF (@ERROR!=0)
BEGIN
	RETURN(1)
END


SET EXEC @ERROR=ObtenerCorrelativoProcUtil @USUARIO, @NDOCT_SAL output
IF (@ERROR!=0)
BEGIN
	RETURN(1)
END

---------------------------------------------
--OBTENER LOS TIPOS DE MOVIMIENTOS PARA AJUSTE
SELECT @DOCTYPE= DOCTYPEIDFIS ,@PERIODO_PROCESO=PERPOST,@tmoving=INTYPEFISIN,@tmovsal=INTYPEFISOUT FROM IN_SETUP
set @ref=(select cast(year(DATEPROCE) as char(4))+'-'+cast(month(DATEPROCE) as char(2))+'-'+cast(day(DATEPROCE) as char(2)) from Setup)

--PROVEEDOR 0000
SET @PROVEEDOR='00000000000'


--OBTENER SITE POR DEFECTO
--OBTENER VALOR DEL IMPUESTO
---OBTENER MONEDA ORIGINAL
SELECT @TTCAMBIO=SOURCECURYTYPEID,@MONEDA_ORI=CURYORIG, @IMPUESTO=TAXVALUEIGV,@ALMACEN =SOURCESITE,@FECHAPROCESO=DATEPROCE FROM SETUP

---------------------------------------------
--OBTENER La fehca de inventario
select @inicioinventario=(select startdateinven-1 from site where siteid=@almacen) --OBTENER fecha de inicio de inventario


------------------------------------------------------------------------------------
SET @TIPO_CAMBIO=(SELECT RATE FROM CURYRATE WHERE CURYTYPEID=@TTCAMBIO AND FROMCURYID=@MONEDA_ORI AND CURYDATE=@inicioinventario) --(SELECT MAX(CURYDATE) FROM CURYRATE WHERE CURYTYPEID=@TTCAMBIO AND FROMCURYID=@MONEDA_ORI))

SET @SEC_INGRESO =1
SET @SEC_SALIDAS =1

------------------------------------------------------------------------------------
--llenar tmp_in_intraitem
BEGIN TRAN

 DECLARE tempo cursor FOR SELECT 
	CASE WHEN STOCKPHISICAL<QTYAVAIL THEN  @NDOCT_SAL				--CORRENBR
	     WHEN STOCKPHISICAL>QTYAVAIL THEN  @NDOCT_ING END AS CORRNBR,
	@ALMACEN AS SITEID,								--ALMACEN
	CASE WHEN STOCKPHISICAL<QTYAVAIL THEN  @tmovSAL			--TYPEDOCID
	     WHEN STOCKPHISICAL>QTYAVAIL THEN  @tmoving END as typedocid,
	0 AS SECUENCE,									--secuence
	INVTIDSKU ,									--INVTIDSKU
	NULL AS INVTIDBARR,								--CODIG DE BARRA	
	CASE WHEN STOCKPHISICAL<QTYAVAIL THEN  QTYAVAIL-STOCKPHISICAL   		--QTY
	     WHEN STOCKPHISICAL>QTYAVAIL THEN  STOCKPHISICAL-QTYAVAIL END  AS QTY, 
	NULL AS TAXIGV,									--TAXIGV
	AVGCOSTPEN AS STDCOSTPEN,								--STDCOSTPEN
	AVGCOSTUSD AS STDCOSTUSD ,								--STDCOSTUSD
	1 AS STKFISI,									--STKFISI
	@FECHAPROCESO AS INTRDATE,							--fechadocumento
	@FECHAPROCESO AS INTRDATEPROC,							--fechaproceso
	0 AS RLSED								--emitido
 FROM VW_AJUSTEAUTOMATICO

	DECLARE @IMPUESTO1	NUMERIC(5,2) -- ALMACENARA EL PORCENTAJE DE IGV
	DECLARE	@IMPUESTO2	NUMERIC(5,2) -- ALMACENARA EL PORCENTAJE DEL ISC

    OPEN tempo
    FETCH NEXT FROM tempo into	@CORRNBR,@SITEID,@TYPEDOCID,@SEQUENCE,@INVTIDSKU,@INVTIDBARR,@QTY,@TAXIGV,
				@STDCOSTPEN,@STDCOSTUSD,@STKFISI,@INTRDATE,@INTRDATEPROCE,@RLSED

      WHILE @@FETCH_STATUS=0
        BEGIN    

	if @CORRNBR=@NDOCT_ING  set @sec=@SEC_INGRESO 
	if @CORRNBR=@NDOCT_sal set @sec=@SEC_salidas 

------------------------------------------------------------------------------------
--grabar movimiento EN TABLA TEMPORAL
	
	--OBTENGO LOS TIPOS DE IMPUESTOS QUE AFECTAN AL PRODUCTO
	SET @IMPUESTO1=	(SELECT VALUE
			FROM IN_INVENTORY JOIN TAXS 
			ON IN_INVENTORY.TAXIGV=TAXS.TAXID
			WHERE INVTIDSKU=@INVTIDSKU)

	SET @IMPUESTO2=	(SELECT VALUE
			FROM IN_INVENTORY JOIN TAXS 
			ON IN_INVENTORY.TAXISC=TAXS.TAXID
			WHERE INVTIDSKU=@INVTIDSKU)


	 SET EXEC @ERROR=TMP_IN_INTRAITEMInsProc	 	@CORRNBR,@SITEID,@TYPEDOCID,@sec,@INVTIDSKU,@INVTIDBARR,
								@QTY,@IMPUESTO1,@STDCOSTPEN,@STDCOSTUSD,@STKFISI,@INTRDATE,
								@INTRDATEPROCE,@RLSED,@IMPUESTO2,@STDCOSTPEN,@STDCOSTUSD
------------------------------------------------------------------------------------

	if @CORRNBR=@NDOCT_ING	 SET @SEC_INGRESO =@SEC_INGRESO+1
	if @CORRNBR=@NDOCT_sal	 sET @SEC_SALIDAS =@SEC_SALIDAS+1
	
          --SET @ERROR=@@error
     
          IF (@ERROR!=0)
          BEGIN       
            CLOSE TEMPO
            DEALLOCATE TEMPO
	    ROLLBACK
            RETURN(1)  
          END         
	
	    FETCH NEXT FROM tempo  into	@CORRNBR,@SITEID,@TYPEDOCID,@SEQUENCE,@INVTIDSKU,@INVTIDBARR,@QTY,@TAXIGV,
					@STDCOSTPEN,@STDCOSTUSD,@STKFISI,@INTRDATE,@INTRDATEPROCE,@RLSED
end

CLOSE TEMPO
DEALLOCATE TEMPO

------------------------------------------------------------------------------------

	--VARIABLES PARA LA CABECERA

	DECLARE @INTRSUBTOTPEN UD_MONTO
	DECLARE @INTRSUBTOTUSD UD_MONTO

	SET @INTRSUBTOTPEN=0
	SET @INTRSUBTOTUSD=0


	--VARIABLES PARA EL DETALLE QUE SERA MANEJADO POR EL CURSOR PARA EL RECALCULO DE LOS TOTALES DE LA CABECERA
	DECLARE @QTY1	UD_STOCK
	DECLARE @TAXIGV1	UD_IMPUESTO
	DECLARE @STDCOSTPEN1	UD_COSTO
	DECLARE @STDCOSTUSD1	UD_COSTO


--INICIO DE CREACION DEL DOCUMENTO DE INGRESO
IF @sec_ingreso>1	--si hay alguna linea grabar ingreso
BEGIN 

	--------------RECALCULANDO MONTOS DE CABECERA ------------------------------------------

	DECLARE CUR_TEMPORAL1 CURSOR 
	FOR 	SELECT QTY,TAXIGV,STDCOSTPEN,STDCOSTUSD
        	FROM TMP_IN_INTRAITEM 
		WHERE CORRNBR=@NDOCT_ING

    	OPEN CUR_TEMPORAL1
	FETCH NEXT FROM CUR_TEMPORAL1 INTO @QTY1,@TAXIGV1,@STDCOSTPEN1,@STDCOSTUSD1

	IF (@@FETCH_STATUS!=0)
          BEGIN       
            CLOSE CUR_TEMPORAL1
            DEALLOCATE CUR_TEMPORAL1
            RAISERROR 20000  'No tiene registros en Detalle'
            RETURN(1)  
          END         
     

       WHILE @@FETCH_STATUS=0
        BEGIN    
		
 		SET @INTRSUBTOTPEN=@INTRSUBTOTPEN + ROUND((@QTY1*@STDCOSTPEN1),@ND_RESULTADOSETUP)
		SET @INTRSUBTOTUSD=@INTRSUBTOTUSD + ROUND((@QTY1*@STDCOSTUSD1),@ND_RESULTADOSETUP)


    	  FETCH NEXT FROM CUR_TEMPORAL1 INTO @QTY1,@TAXIGV1,@STDCOSTPEN1,@STDCOSTUSD1 
        
        END /* Termina while */


  	CLOSE CUR_TEMPORAL1
  	DEALLOCATE CUR_TEMPORAL1

	--------------------------------------------------------

	SET EXEC @ERROR=IN_GrabarMovimientoParaTomaProc 
		@almacen,@tmoving,@proveedor,@DOCTYPE,'NA',@ref,@TIPO_CAMBIO,@MONEDA_ORI,@MONEDA_ORI,@ALMACEN,null, null,
		null,@FECHAPROCESO,@inicioinventario,@ALMACEN,@INTRSUBTOTPEN,0,@INTRSUBTOTUSD,0,@PERIODO_PROCESO,
		0,0,@INTRSUBTOTPEN,@INTRSUBTOTUSD,@USUARIO,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
		@NDOCT_ING,NULL,NULL,NULL,  
		@NDOC_ing output    

		--exec IN_EmitirProc @almacen,@ndoc_ing --EMITIRr movimiento INGRESO

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

		SET EXEC @ERROR=IN_EmisionDeDocumentoParaTomaProc @almacen,@ndoc_ing
		IF (@ERROR!=0)
    		BEGIN
			ROLLBACK
       			RETURN(1)               
    		END 
END
--FIN DE CREACION DEL DOCUMENTO DE INGRESO

	SET @INTRSUBTOTPEN=0
	SET @INTRSUBTOTUSD=0


--INICIO DE CREACION DEL DOCUMENTO DE SALIDA

IF @sec_Salidas>1		--si hay alguna linea de salida grabar salida 
BEGIN

	--------------RECALCULANDO MONTOS DE CABECERA ------------------------------------------

	DECLARE CUR_TEMPORAL2 CURSOR 
	FOR 	SELECT QTY,TAXIGV,STDCOSTPEN,STDCOSTUSD
        	FROM TMP_IN_INTRAITEM 
		WHERE CORRNBR=@NDOCT_sal

    	OPEN CUR_TEMPORAL2
	FETCH NEXT FROM CUR_TEMPORAL2 INTO @QTY1,@TAXIGV1,@STDCOSTPEN1,@STDCOSTUSD1

	IF (@@FETCH_STATUS!=0)
          BEGIN       
            CLOSE CUR_TEMPORAL2
            DEALLOCATE CUR_TEMPORAL2
            RAISERROR 20000  'No tiene registros en Detalle'
            RETURN(1)  
          END         
     

       WHILE @@FETCH_STATUS=0
        BEGIN    
 		SET @INTRSUBTOTPEN=@INTRSUBTOTPEN + ROUND((@QTY1*@STDCOSTPEN1),@ND_RESULTADOSETUP)
		SET @INTRSUBTOTUSD=@INTRSUBTOTUSD + ROUND((@QTY1*@STDCOSTUSD1),@ND_RESULTADOSETUP)

    	  FETCH NEXT FROM CUR_TEMPORAL2 INTO @QTY1,@TAXIGV1,@STDCOSTPEN1,@STDCOSTUSD1 
        
        END /* Termina while */

 
  	CLOSE CUR_TEMPORAL2
  	DEALLOCATE CUR_TEMPORAL2

	--------------------------------------------------------

	SET EXEC @ERROR=IN_GrabarMovimientoParaTomaProc 
		@almacen,@tmovsal,@proveedor,@DOCTYPE,'NA',@ref,@TIPO_CAMBIO,@MONEDA_ORI,@MONEDA_ORI,@ALMACEN,null,null,
		null,@FECHAPROCESO,@inicioinventario,@ALMACEN,@INTRSUBTOTPEN,0,@INTRSUBTOTUSD,0,@PERIODO_PROCESO,
		0,0,@INTRSUBTOTPEN,@INTRSUBTOTUSD,@USUARIO,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
		@NDOCT_sal,NULL,NULL,NULL, 
		@NDOC_sal output  

		--exec IN_EmitirProc @almacen,@ndoc_sal 		--EMITIRr movimiento SALIDA

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

		SET EXEC @ERROR=IN_EmisionDeDocumentoParaTomaProc @almacen,@ndoc_sal
		IF (@ERROR!=0)
    		BEGIN
			ROLLBACK
       			RETURN(1)               
    		END 

END

--FIN DE CREACION DEL DOCUMENTO DE SALIDA

	--actualizando flag de ajuste
	UPDATE  SITE SET ADJUST=1 WHERE SITEID=@ALMACEN
	
	IF(@@ERROR!=0)
	BEGIN
		RAISERROR 20000 'Error Actualizando en SITE'
		ROLLBACK
		RETURN(1)
	END

	COMMIT TRAN
	RETURN(0)
	
END

/***************************************************************************************/
/***************************************************************************************/
/***************************************************************************************/
/***************************************************************************************/


IN_AJUSTEAUTOMATICO 'SYSADMIN'/*


SELECT * FROM IN_INVENTORYDAT WHERE SITEID='57' AND INVTIDSKU='215000'
SELECT * FROM IN_INVENTORYDAT WHERE SITEID='57' AND INVTIDSKU='45011'

UPDATE IN_INVENTORYDAT SET QTYAVAIL=500
UPDATE IN_INVENTORYDAT SET AVGCOSTPEN=5,AVGCOSTUSD=1.2 WHERE SITEID='57' AND INVTIDSKU='215000'
UPDATE IN_INVENTORYDAT SET AVGCOSTPEN=3.5,AVGCOSTUSD=3.45 WHERE SITEID='57' AND INVTIDSKU='215064'
UPDATE IN_INVENTORYDAT SET AVGCOSTPEN=5,AVGCOSTUSD=2.2 WHERE SITEID='57' AND INVTIDSKU='215002'
UPDATE IN_INVENTORYDAT SET AVGCOSTPEN=10.22,AVGCOSTUSD=3.45 WHERE SITEID='57' AND INVTIDSKU='215003'
UPDATE IN_INVENTORYDAT SET AVGCOSTPEN=5,AVGCOSTUSD=1.2 WHERE SITEID='57' AND INVTIDSKU='215004'
UPDATE IN_INVENTORYDAT SET AVGCOSTPEN=12,AVGCOSTUSD=3.45 WHERE SITEID='57' AND INVTIDSKU='215005'
UPDATE IN_INVENTORYDAT SET AVGCOSTPEN=6,AVGCOSTUSD=1.2 WHERE SITEID='57' AND INVTIDSKU='215006'
UPDATE IN_INVENTORYDAT SET AVGCOSTPEN=7.4,AVGCOSTUSD=2.45 WHERE SITEID='57' AND INVTIDSKU='215007'

UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=500

UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=600 WHERE INVTIDSKU='215000'
UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=400 WHERE INVTIDSKU='215064'
UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=800 WHERE INVTIDSKU='215002'
UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=100 WHERE INVTIDSKU='215003'
UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=200 WHERE INVTIDSKU='215004'
UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=510 WHERE INVTIDSKU='215005'
UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=125 WHERE INVTIDSKU='215006'
UPDATE IN_INVENTPHISICAL SET STOCKPHISICAL=600 WHERE INVTIDSKU='215007'



SELECT * FROM IN_INVENTPHISICAL


SELECT * FROM IN_SETUP

SELECT * FROM IN_INTRAHEAD WHERE BATNBR='5700000264'
SELECT * FROM IN_INTRAITEM WHERE BATNBR='5700000264'

SELECT * FROM IN_INTRAHEAD WHERE BATNBR='5700000265'
SELECT * FROM IN_INTRAITEM WHERE BATNBR='5700000265'

DELETE  FROM TMP_IN_INTRAITEM

SELECT * FROM IN_KDXHIST

SELECT * FROM SE_USERREC

SELECT * FROM IN_INTRAHEAD

SELECT * FROM IN_INTRAHEAD WHERE BATNBR='5700000269'
SELECT SUM(QTY*STDCOSTPEN) FROM IN_INTRAITEM WHERE BATNBR='5700000269'
SELECT * FROM IN_INTRAITEM WHERE BATNBR='5700000260'

SELECT QTY,STDCOSTPEN, QTY*STDCOSTPEN FROM IN_INTRAITEM WHERE BATNBR='5700000260' AND STDCOSTPEN<>0


SELECT * FROM IN_INVENTHISTOPHISI
SELECT * FROM IN_INVENTPHISICAL

INSERT INTO IN_INVENTPHISICAL(SITEID,INVTIDSKU,CLASSID,CLASSUBID,STOCKPHISICAL)
SELECT SITEID,INVTIDSKU,CLASSID,CLASSUBID,STOCKPHISICAL FROM IN_INVENTHISTOPHISI

SELECT * FROM IN_INVENTORYDAT

SELECT * FROM IN_INTRAHEAD WHERE BATNBR>'5700000265'

SELECT * FROM IN_INTRAHEAD WHERE BATNBR='5700000264'
SELECT * FROM IN_INTRAITEM WHERE BATNBR='5700000264'

SELECT * FROM IN_INTRAHEAD WHERE BATNBR='5700000265'
SELECT * FROM IN_INTRAITEM WHERE BATNBR='5700000265' */


SELECT * FROM IN_KDXHIST WHERE YEARHIST='2003' AND SITEID='57'
