


update doc_estadoTipoDocumento_subtipoDocumento set  estadoTipoDocumento_subtipoDocumento='val_ajustecantidad_arrume'
from doc_estadoTipoDocumento_subtipoDocumento
where id in (
select estadosub.id from doc_flujodocumento flujo
inner join doc_subtipoDocumento alq on alq.id =flujo .id_subtipoDocumento_origen  and alq.id_tipoDocumento in(9)
inner join doc_subtipodocumento mov on mov.id =flujo .id_subtipoDocumento_destino  and mov.id_tipoDocumento in(5,6)
inner join doc_estadoTipoDocumento_subtipoDocumento estadosub  on estadosub.id_subtipoDocumento =mov.id  
inner join doc_estadotipodocumento estsub on estsub.id =estadosub .id_estadoTipoDocumento_destino 
 and estsub.estadoTipoDocumento_codigo  in('CAN') and  (estadosub .estadoTipoDocumento_subtipoDocumento in('')or estadosub .estadoTipoDocumento_subtipoDocumento is null  ))





/****** Object:  StoredProcedure [dbo].[val_ajustecantidad_arrume]    Script Date: 09/09/2016 05:42:43 a.m. ******/
DROP PROCEDURE [dbo].[val_ajustecantidad_arrume]
GO
CREATE procedure [dbo].[val_ajustecantidad_arrume]	
/*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
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_documento from doc_documento 
 where (id=@p_id_documento or id in (select doc.id_documento from doc_documento doc 
          inner join doc_subtipoDocumento sub on doc.id_subtipoDocumento =sub.id and sub .id_tipodocumento=5
          inner join doc_documento padre on padre.id=doc.id_documento 
          inner join doc_subtipoDocumento subpadre on subpadre .id =padre.id_subtipoDocumento and subpadre .id_tipoDocumento =6
           and doc.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') 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



-----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 or id in (select doc.id_documento from doc_documento doc 
          inner join doc_subtipoDocumento sub on doc.id_subtipoDocumento =sub.id and sub .id_tipodocumento=5
          inner join doc_documento padre on padre.id=doc.id_documento 
          inner join doc_subtipoDocumento subpadre on subpadre .id =padre.id_subtipoDocumento and subpadre .id_tipoDocumento =6
           and doc.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)
,horometro float
,ultimalectura smalldatetime
)

insert into @infoEquipo
(id_equipo,id_sucursal,id_tercero,id_zona,direccion,telefono,contacto,horometro,ultimalectura)
select
equ_equipo.id,0,0,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
	, horometro =trz.horometro
	,ultimalectura=trz.fecha_ff 
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 ,horometroactual=T2.horometro,ultimalectura_fh=T2.ultimalectura
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;




if exists ( select * from doc_documento where id in (select id_documento  from doc_documento where id=@p_id_documento) and id_subtipoDocumento in (select id from doc_subtipoDocumento where id_tipoDocumento in (9) ))
begin
--Copyright DIEGO CALDERON
--Cancelar el despacho y el alquiler no tiene elementos 
--actualizar el estado del documento padre (alquiler)
declare @licencia as varchar(100)
set @licencia =(SELECT uid FROM [seg_usuario] where id=1)
declare @id_estadoAlquiler as int 
set @id_estadoAlquiler = (select top 1 id from doc_estadoTipoDocumento where active = 1 and id_tipoDocumento = 9 and orden  = 1 ) 


--padre de la salida
declare @id_idPadreALQ as int
set @id_idPadreALQ =(select top 1 id_documento  from doc_documento where active = 1 and id = @p_id_documento)

if not exists ( 
select * from equ_detalleAlquiler   
where active = 1 and [id_documento.alquiler] = @id_idPadreALQ and  
estadoalquiler = 2 and id_equipo > 0 )
and not exists(
select * from equ_detalleAlquiler
where active = 1 and [id_documento.alquiler] = @id_idPadreALQ and  
cantidadAlquilada > 0 and id_catalogo > 0)
 begin
update doc_documento   set id_estadoTipoDocumento = @id_estadoAlquiler
 where id = @id_idPadreALQ

 INSERT INTO [doc_documento_estadoTipoDocumento]   

([uid]
,[eid]
,[id_usuario_modifico] 
,[id_usuario_creo]
,[fechaModificacion]
,[fechaCreacion]
,[active]
,[documento_estadoTipoDocumento]
,[notas]
,[id_documento] 
,[id_estadoTipoDocumento]
,[id_motivoestado]) 

select 
 @licencia,
 '01',
    1, 
    1,
  GETDATE(),
  GETDATE(),
    1,
   '',
   'Despacho cancelado' ,
   @id_idPadreALQ,
   @id_estadoAlquiler,
    0 
   end 

--Cancelar la devolución y el alquiler no tiene elementos 

declare @id_estadoAlquilerCodigo as int 
set @id_estadoAlquilerCodigo = (select top 1 id from doc_estadoTipoDocumento where active = 1 and id_tipoDocumento = 9 and estadoTipoDocumento_codigo ='CUR' ) 

declare @id_idPadre as int
set @id_idPadre =(select top 1 id_documento  from doc_documento where active = 1 and id = @p_id_documento)

if 
( select doc_subtipoDocumento.id_tipoDocumento  from doc_subtipoDocumento  INNER JOIN doc_documento 
on  doc_documento.id_subtipoDocumento  = doc_subtipoDocumento.id 
where doc_documento.id = @p_id_documento  )=5
begin
update doc_documento   set id_estadoTipoDocumento = @id_estadoAlquilerCodigo
 where id = @id_idPadre

 INSERT INTO [doc_documento_estadoTipoDocumento]   

([uid]
,[eid]
,[id_usuario_modifico] 
,[id_usuario_creo]
,[fechaModificacion]
,[fechaCreacion]
,[active]
,[documento_estadoTipoDocumento]
,[notas]
,[id_documento] 
,[id_estadoTipoDocumento]
,[id_motivoestado]) 

select 
 @licencia,
 '01',
    1, 
    1,
  GETDATE(),
  GETDATE(),
    1,
   '',
   'Devolución cancelada' ,
   @id_idPadre,
   @id_estadoAlquilerCodigo,
    0 
   end 

end



select ''

END
