DROP PROC IN_AJUSTEAUTOMATICO
GO

CREATE PROC IN_AJUSTEAUTOMATICO
@USUARIO UD_USERID	--ID DE USUARIO
AS
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

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

--OBTENER CORRELATIVO INTERNO
EXEC ObtenerCorrelativoProcUtil @USUARIO, @NDOCT_ing output

EXEC ObtenerCorrelativoProcUtil @USUARIO, @NDOCT_SAL output

---------------------------------------------
--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=select '00000000000'

--OBTENER SITE POR DEFECTO
--OBTENER VALOR DEL IMPUESTP
---OBTENER MONEDA ORIGINAL
SELECT @TTCAMBIO=SOURCECURYTYPEID,@MONEDA_ORI=CURYORIG, @IMPUESTO=TAXVALUE,@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=(SELECT MAX(CURYDATE) FROM CURYRATE))

SET @SEC_INGRESO =1
SET @SEC_SALIDAS =1

------------------------------------------------------------------------------------
--llenar tmp_in_intraitem

 DECLARE tempo cursor FOR SELECT 
	CASE WHEN STOCKPHISICAL<QTYAVAIL THEN  @NDOCT_ING				--CORRENBR
	     WHEN STOCKPHISICAL>QTYAVAIL THEN  @NDOCT_SAL END AS CORRNBR,
	@ALMACEN AS SITEID,								--ALMACEN
	CASE WHEN STOCKPHISICAL<QTYAVAIL THEN  @tmoving					--TYPEDOCID
	     WHEN STOCKPHISICAL>QTYAVAIL THEN  @tmovSAL 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
	0 AS STDCOSTPEN,								--STDCOSTPEN
	0 AS STDCOSTUSD ,								--STDCOSTUSD
	1 AS STKFISI,									--STKFISI
	@FECHAPROCESO AS INTRDATE,							--fechadocumento
	@FECHAPROCESO AS INTRDATEPROC,							--fechaproceso
	0 AS RLSED								--emitido
 FROM VW_AJUSTEAUTOMATICO

    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

	 EXEC SP_InsProcTMP_IN_INTRAITEM 	@CORRNBR,@SITEID,@TYPEDOCID,@sec,@INVTIDSKU,@INVTIDBARR,
						@QTY,@TAXIGV,@STDCOSTPEN,@STDCOSTUSD,@STKFISI,@INTRDATE,
						@INTRDATEPROCE,@RLSED
------------------------------------------------------------------------------------

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

------------------------------------------------------------------------------------
--grabar movimiento ingreso
if @sec_ingreso>1	--si hay alguna linea grabar ingreso
begin 

	exec IN_GrabarMovimientoProc 
		@almacen,
		@tmoving,         
		@proveedor,
		@DOCTYPE ,
		'OK',
		@ref,
		@TIPO_CAMBIO,
		@MONEDA_ORI,
		@MONEDA_ORI,
		@ALMACEN,
		null, 
		null,
		null,
		@FECHAPROCESO,
		@inicioinventario,
		@ALMACEN,
		0,
		0,
		0,
		0,
		@PERIODO_PROCESO,
		0,
		0,
		NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
		@NDOCT_ING,  
		@NDOC_ing output    

		exec IN_EmitirProc @almacen,@ndoc_ing --EMITIRr movimiento INGRESO
end
------------------------------------------------------------------------------------
--grabar movimiento salida

if @sec_Salidas>1		--si hay alguna linea de salida grabar salida 
begin
	exec IN_GrabarMovimientoProc 
		@almacen,
	    	@tmovsal,         
		@proveedor,
	    	@DOCTYPE ,
		'OK',
		@ref,
	    	@TIPO_CAMBIO,
		@MONEDA_ORI,
		@MONEDA_ORI,
		@ALMACEN,
		null  , 
		null,
		null,
		@FECHAPROCESO,
		@inicioinventario,
		@ALMACEN,
		0,
		0,
		0,
		0,
		@PERIODO_PROCESO,
		0,
		0,
		NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
		@NDOCT_sal,  
		@NDOC_sal output  

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

end

------------------------------------------------------------------------------------
--actualizando flag de ajuste
UPDATE  SITE SET ADJUST=1 WHERE SITEID=@ALMACEN

RETURN(0)  


GO

EXEC IN_AJUSTEAUTOMATICO 'GUS'
