ALTER PROCEDURE [dbo].[_ajustarCantidadesArrumeNoRecibidos]	
	/*Versión LK para ubicar equipos
		Sin importar el tipo o fecha de movimiento, ubicar de acuerdo a la traza
	*/
	@p_eid varchar (1000),
	@p_id_usuario as INT = 0,
	@p_id_documento as INT = 0,
	@p_id_documentoPadre as INT = 0
as
begin

-----AJUSTE A NO SERIALIZADOS

declare @tablita as table (
id_detalle int
,cantidadalquilada int
,estadocodigo varchar(100)
,estadoalquiler int
,id_bodega int 
,id_catalogo int 
);
insert into @tablita 
(id_detalle 
,cantidadalquilada
,estadocodigo
,estadoalquiler
,id_bodega
,id_catalogo  )
select det.id ,
sum(case when sub.id_tipoDocumento =6 then ISNULL ( item.cantidadejecutado,0)  else  ISNULL ( item.cantidadejecutado,0)  * -1 end)
,''
,0,item.id_bodega 
,item.id_catalogo 
from equ_detalleAlquiler det
inner join doc_itemdocumento  item  on item .id_catalogo =det.id_catalogo  
and item .id_catalogo =det.id_catalogo and det.id>0 and det .active =1 
and det.[id_documento.alquiler]>0 and det.[id_documento.alquiler] in(select id from doc_documento where id=@p_id_documentoPadre)
inner join doc_documento doc on  doc.id =item.id_documento  
 and item.active=1 and doc.id>0 and doc.id_documento =det.[id_documento.alquiler]
 --and doc.fechaCierre_ff >0 
 and  doc.id not in (@p_id_documento)
inner join doc_estadoTipoDocumento est on est.id=doc.id_estadotipodocumento and est.active =1 and est .estadoTipoDocumento_codigo not  in ('CAN') and est.id_tipoDocumento in(5,6)
inner join doc_subtipoDocumento sub on sub.id =doc.id_subtipoDocumento 
group by det.id,item.id_bodega
,item.id_catalogo;

update @tablita set estadocodigo='ALQ' ,estadoalquiler=2
where cantidadalquilada >0;
update @tablita set estadocodigo='DEV' ,estadoalquiler=3
where cantidadalquilada =0;

update equ_detalleAlquiler  set cantidadAlquilada =tabl.cantidadalquilada,estadoalquiler=tabl .estadoalquiler ,detalleAlquiler_codigo =tabl .estadocodigo
from equ_detalleAlquiler 
inner join @tablita tabl on tabl .id_detalle =equ_detalleAlquiler .id ;


update equ_detalleAlquiler set cantidadAlquilada =0,estadoalquiler =1 , detallealquiler_codigo='RES',fechadespacho_ff=0
where id_catalogo >0 and active=1 and [id_documento.alquiler] in (select id_documento from doc_documento where id=@p_id_documento)  and id not in (
select id_detalle  from @tablita 
);

---actualiza inventario del doc cancelado
--update cat_catalogo_bodega 
--set existencia =existencia + ( case when est.id_tipoDocumento =6  then item.cantidadejecutado else  item.cantidadejecutado * -1 end  )
--from cat_catalogo_bodega 
--inner join doc_itemdocumento item on item.id_catalogo=cat_catalogo_bodega.id_catalogo and item.id_bodega=cat_catalogo_bodega.id_bodega
--inner join doc_documento doc on doc.id=item.id_documento
--inner join doc_estadotipodocumento est on est.id=doc.id_estadotipodocumento
--and item.id_documento=@p_id_documento  and item .id_catalogo >0 and item.id_bodega >0
declare @tablitaInven as table (
id_catalogo int,
cantidadejecutado int,
existencia int,
cantidadrestante int,
existenciaEjecutada int,
id_bodega int
);
insert into @tablitaInven
(id_catalogo,cantidadejecutado,existencia,cantidadrestante,existenciaEjecutada,id_bodega )
select 
--existencia = sum(existencia + ( case when est.id_tipoDocumento =6  then item.cantidadejecutado else  item.cantidadejecutado * -1 end  )
--*
 --existencia =existencia + ( case when est.id_tipoDocumento =6  then item.cantidadejecutado else  item.cantidadejecutado * -1 end  )
 id_catalogo = cat_catalogo_bodega.id_catalogo ,
 cantidadejecutado,
 existencia,
 cantidadrestante = case when est.id_tipoDocumento =6  then item.cantidadejecutado else  item.cantidadejecutado * -1 end 
 ,existenciaEjecutada = existencia + (case when est.id_tipoDocumento =6  then item.cantidadejecutado else  item.cantidadejecutado * -1 end )
 ,id_bodega = cat_catalogo_bodega.id_bodega
from cat_catalogo_bodega 
inner join doc_itemdocumento item on item.id_catalogo=cat_catalogo_bodega.id_catalogo and item.id_bodega=cat_catalogo_bodega.id_bodega
inner join doc_documento doc on doc.id=item.id_documento
inner join doc_estadotipodocumento est on est.id=doc.id_estadotipodocumento
and item.id_documento=@p_id_documento  and item .id_catalogo >0 and item.id_bodega >0

select id_catalogo, count(id_catalogo) as repetidos, sum(cantidadrestante) as cantidad ,id_bodega from @tablitaInven 
group by id_catalogo, id_bodega

declare @tablitaInven2 as table (
id_catalogo int,
repetidos int,
cantidad int,
id_bodega int
);
insert into @tablitaInven2
(id_catalogo,repetidos,cantidad,id_bodega)
select id_catalogo, count(id_catalogo) as repetidos, sum(cantidadrestante) as cantidad, id_bodega from @tablitaInven 
group by id_catalogo, id_bodega

select * from @tablitaInven2

update cat_catalogo_bodega
set existencia= existencia + (T3.cantidad)
from @tablitaInven2 t3 
where cat_catalogo_bodega.id_bodega  = t3.id_bodega and   cat_catalogo_bodega.id_catalogo  = t3.id_catalogo 


-----AJUSTE A SERIALIZADOS

declare @detequi as table(
id int
,tipo int
,detallecodigo  varchar(100)
,estadoalquiler int
,id_equipo int
)
insert into @detequi 
(id,tipo ,detallecodigo  ,estadoalquiler ,id_equipo)
select 
equ_detallealquiler.id
,MIN(sub .id_tipoDocumento)tipo
,'',0
,equ_detallealquiler.id_equipo
 from equ_detallealquiler
inner join alq_detallealquiler_itemdocumento detal on detal.id_detallealquiler =equ_detalleAlquiler .id  and detal .active =1 and equ_detalleAlquiler .active =1 and  detal.id>0 and equ_detalleAlquiler .id>0 and equ_detalleAlquiler .id_equipo >0
and equ_detallealquiler.[id_documento.alquiler] in(select id_documento from doc_documento where id=@p_id_documento)
inner join doc_itemDocumento item on item.id =detal.id_itemdocumento and item.id>0 and item.active =1 
inner join doc_documento doc on doc.id=item.id_documento and doc.id_documento =equ_detalleAlquiler.[id_documento.alquiler]  and doc.id not in (@p_id_documento)
inner join doc_subtipoDocumento sub on sub .id =doc.id_subtipoDocumento and sub.id_tipodocumento in (5,6)
inner join doc_estadotipodocumento est on est.id=doc.id_estadoTipoDocumento  and est.estadoTipoDocumento_codigo not in('CAN')
group by equ_detallealquiler.id,equ_detallealquiler.id_equipo;

update @detequi set detallecodigo='ALQ',estadoalquiler =2
where tipo =6;
update @detequi set detallecodigo='DEV',estadoalquiler =3
where tipo =5;

update equ_detalleAlquiler  set  detalleAlquiler_codigo = detallecodigo, equ_detalleAlquiler.estadoalquiler = tabl.estadoalquiler
,fechaDevolucion_ff=( case when tabl.estadoalquiler =2 then 0 else fechaDevolucion_ff end) 

from equ_detalleAlquiler 
inner join @detequi tabl on tabl.id=equ_detalleAlquiler .id ;

update equ_detalleAlquiler set detalleAlquiler_codigo='RES',estadoalquiler =1,fechadespacho_ff=0,fechaDevolucion_ff=0
where id_equipo >0 and active=1 and [id_documento.alquiler] in (select id_documento from doc_documento where id=@p_id_documento)and  id not in (
select id from @detequi
);
--cancelo las trazas del doc que estoy cancelando
update equ_trazabilidad set active=0 where id_documento=@p_id_documento;

--actualizar info básica del serializado
declare @infoEquipo as table(
id_tercero  int
,id_sucursal  int
,id_zona int
,direccion  varchar(max)
,telefono  varchar(max)
,id_equipo  int
,contacto  varchar(max)
)

insert into @infoEquipo
(id_equipo,id_sucursal,id_tercero,id_zona,direccion,telefono,contacto)
select
equ_equipo.id,0,0,0,'','',''
from equ_equipo
	inner join equ_detalleAlquiler on equ_detalleAlquiler.id_equipo=equ_equipo.id
where equ_detalleAlquiler.active=1
and equ_detalleAlquiler.id in (select id_detalleAlquiler from view_alq_detallealquiler_itemdocumento where doc_itemdocumento_id_documento=@p_id_documento)
and equ_detalleAlquiler.id_equipo>0

update @infoEquipo
set id_sucursal=trz.id_sucursal
	,id_tercero=trz.id_tercero
	,id_zona=suc.id_zona
	,direccion=suc.Direccion
	,telefono=suc.telefono 
	,contacto=suc.contacto 
from equ_trazabilidad trz
    inner join @infoEquipo T1 on T1.id_equipo=trz.id_equipo
	inner join ter_sucursal suc on trz.id_sucursal=suc.id
where trz.fecha_ff=(select max(fecha_ff) from equ_trazabilidad TRZ2 where TRZ2.id_equipo=trz.id_equipo and active=1 and TRZ2.id_sucursal>0 and TRZ2.id_tipotrazabilidad in (4,5,6,7))

update equ_equipo
set id_sucursal=T2.id_sucursal,id_tercero=T2.id_tercero,id_zona=T2.id_zona,ubicacion=T2.Direccion,telefonocontacto=T2.telefono,nombreContacto=T2.contacto 
from equ_equipo
    inner join @infoEquipo T2 on T2.id_equipo=equ_equipo.id
where equ_equipo.id_sucursal<>T2.id_sucursal;	--sólo actualizar si hubo cambio

--actualizo en 0 los movimientos del documento

update alq_detallealquiler_itemdocumento set active=0
from alq_detallealquiler_itemdocumento 
inner join doc_itemDocumento on doc_itemDocumento .id= alq_detallealquiler_itemdocumento.id_itemdocumento 
where doc_itemDocumento .id_documento=@p_id_documento;

select ''

END

