

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[val_ajustecantidad_arrume]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[val_ajustecantidad_arrume]
GO

CREATE procedure [dbo].[val_ajustecantidad_arrume]	

@p_eid varchar (1000),
@p_id_usuario as INT = 0,
@p_id_documento as INT = 0

as
begin

declare @tablita as table (
id_detalle int
,cantidadalquilada int
,estadocodigo varchar(100)
,estadoalquiler int
);
insert into @tablita 
(id_detalle 
,cantidadalquilada
,estadocodigo
,estadoalquiler )
select det.id ,
sum(case when sub.id_tipoDocumento =6 then ISNULL ( item.cantidadejecutado,0)  else  ISNULL ( item.cantidadejecutado,0)  * -1 end)
,''
,0
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_documento from doc_documento where id=@p_id_documento)
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')
inner join doc_subtipoDocumento sub on sub.id =doc.id_subtipoDocumento 
group by det.id;

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'
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 
);
--ajuste estados equipos

declare @detequi as table(
id int
,tipo int
,detallecodigo  varchar(100)
,estadoalquiler int
)
insert into @detequi 
(id,tipo ,detallecodigo  ,estadoalquiler )
select 
equ_detallealquiler.id
,MIN(sub .id_tipoDocumento)tipo
,'',0
 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;

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
from equ_detalleAlquiler 
inner join @detequi tabl on tabl.id=equ_detalleAlquiler .id ;

update equ_detalleAlquiler set detalleAlquiler_codigo='RES',estadoalquiler =1
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;

select ''
END
