

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[_LiquidacionAdicionales]') AND type in (N'P', N'PC'))DROP PROCEDURE [dbo].[_LiquidacionAdicionales]
GO
CREATE procedure [dbo].[_LiquidacionAdicionales]	
@p_alquiler as INT = 0
,@p_catalogo as INT = 0
,@p_inicio as smalldatetime=null
,@p_fin as smalldatetime=null
as begin

set @p_inicio = (select [dbo].[f_dat_fechainicioFacturado](@p_alquiler,@p_catalogo  ))

declare @adicional as table(
checked varchar(100)
,id_item int
,item varchar(100) 
,valorunitario float
,cantidad float
,id_catalogo int
,cantidadfacturado float
,porcdto float,porciva float
,totaleje float
,cantidadfac float
,total float
,fechainicio smalldatetime,fechafin smalldatetime);

insert into @adicional
(
checked 
,id_item 
,item
,valorunitario 
,cantidad 
,id_catalogo 
,cantidadfacturado 
,porcdto 
,porciva 
,totaleje 
,cantidadfac 
,total 
 ,fechainicio,fechafin )
select
(case when sum (itemhijos.cantidadPlaneado )>item.cantidadejecutado then 'true' else 'false' end )
,item.id
,item.itemdocumento
,item.valorUnitarioPlaneado 
,sum (itemhijos.cantidadPlaneado )
--item.cantidadPlaneado
,item.id_catalogo
,item.cantidadEjecutado
,item.porcdto 
,item.porciva 
,item.totalejecutado
,(sum (itemhijos.cantidadPlaneado )-item.cantidadejecutado)
,(sum (itemhijos.cantidadPlaneado ))* item.valorUnitarioPlaneado 
---item.cantidadejecutado
,@p_inicio,@p_fin
from 
doc_itemdocumento item
inner join doc_itemdocumento itemhijos on itemhijos .id_catalogo =item .id_catalogo and itemhijos .id_itemDocumento  =item .id  and item .active =1   and itemhijos .active =1  and itemhijos .id_catalogo>0
inner join doc_documento dochijo on dochijo .id_documento =item.id_documento and dochijo.id=itemhijos .id_documento and dochijo.id_documento =item.id_documento 
inner join doc_subtipodocumento subhijo on subhijo .id=dochijo .id_subtipoDocumento and  subhijo .id_tipoDocumento  in(5,6)
inner join doc_estadotipodocumento estado on estado.id =dochijo .id_estadoTipoDocumento and estado .estadoTipoDocumento_codigo not in ('CAN')
where item.id_catalogo not in(
select itemalq.id_catalogo
from 
 doc_itemdocumento itemalq  
inner join alq_tarifa tar on tar.id_itemdocumento =itemalq.id and tar.active=1 and itemalq.active=1
where  itemalq .id_documento  in (@p_alquiler)
union all
select det.id_catalogo from 
 equ_detallealquiler det where
  det.[id_documento.alquiler] in (@p_alquiler)
)

and item .id_catalogo in (select id from [cat_catalogo.otro] where active=1 and ( periodoalquiler is null or periodoalquiler <1 )
union all
select id from [cat_catalogo.repuesto] where active=1 and id>0)

and item.id_documento in (@p_alquiler) and  (item.id_catalogo in (@p_catalogo)or @p_catalogo =0)
and (dochijo.fechacierre_ff >=@p_inicio or @p_inicio is null) and (dochijo.fechacierre_ff <=@p_fin or @p_fin is null)  and dochijo.fechacierre_ff >0
--and (item.cantidadPlaneado-item.cantidadEjecutado)>0
group by item.id
,item.itemdocumento
,item.valorUnitarioPlaneado 
,item.cantidadPlaneado
,item.cantidadEjecutado
,item.id_catalogo
,item.porcdto 
,item.porciva 
,item.totalejecutado;

--update doc_itemDocumento 
--set cantidadPlaneado = adi.cantidad 
--from doc_itemDocumento 
--inner join   @adicional adi on adi.id_item=doc_itemdocumento.id;

select * from @adicional;
--select '';
end




GO



IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[_DetalleLiquidacionAdicionales]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[_DetalleLiquidacionAdicionales]
GO
CREATE procedure [dbo].[_DetalleLiquidacionAdicionales]	
@p_alquiler as INT = 0
,@p_catalogo as INT = 0
,@p_inicio as smalldatetime=null
,@p_fin as smalldatetime=null
as begin

declare @adicional as table(id_catalogo int,id_itemfactura int,cantidad float,id_documento int,documento varchar(100),cierre smalldatetime);

insert into @adicional
(cantidad,id_catalogo,id_itemfactura, id_documento ,documento ,cierre )
select sum (itemhijos.cantidadPlaneado ),item.id_catalogo,item.id
,dochijo.id,dochijo .prefijo +'-'+ cast (dochijo .documento_numero as varchar(100)) ,dochijo .fechaCierre_ff 
from 
doc_itemdocumento item
inner join doc_itemdocumento itemhijos on itemhijos .id_catalogo =item .id_catalogo and itemhijos .id_itemDocumento  =item .id  and item .active =1   and itemhijos .active =1  and itemhijos .id_catalogo>0
inner join doc_documento dochijo on dochijo .id_documento =item.id_documento and dochijo.id=itemhijos .id_documento and dochijo.id_documento =item.id_documento 
inner join doc_subtipodocumento subhijo on subhijo .id=dochijo .id_subtipoDocumento and  subhijo .id_tipoDocumento  in(5,6)
inner join doc_estadotipodocumento estado on estado.id =dochijo .id_estadoTipoDocumento and estado .estadoTipoDocumento_codigo not in ('CAN')
where item.id_catalogo not in(
select itemalq.id_catalogo
from 
 doc_itemdocumento itemalq  
inner join alq_tarifa tar on tar.id_itemdocumento =itemalq.id and tar.active=1 and itemalq.active=1
where  itemalq .id_documento  in (@p_alquiler)
union all
select det.id_catalogo from 
 equ_detallealquiler det where
  det.[id_documento.alquiler] in (@p_alquiler)
)

and item .id_catalogo  in (select id from [cat_catalogo.otro] where active=1 and ( periodoalquiler is null or periodoalquiler <1 )
union all
select id from [cat_catalogo.repuesto] where active=1 and id>0)

and item.id_documento in (@p_alquiler) and (item.id_catalogo in (@p_catalogo)or @p_catalogo =0)
and (dochijo.fechacierre_ff >=@p_inicio or @p_inicio is null) and (dochijo.fechacierre_ff <=@p_fin or @p_fin is null) and dochijo.fechacierre_ff >0
--and (item.cantidadPlaneado-item.cantidadEjecutado)>0
group by item.id_catalogo,item.id,dochijo.id,dochijo .prefijo ,dochijo .documento_numero ,dochijo .fechaCierre_ff ;


--update doc_itemDocumento 
--set cantidadPlaneado = adi.cantidad 
--from doc_itemDocumento 
--inner join   @adicional adi on adi.id_item=doc_itemdocumento.id;
select * from @adicional order by id_catalogo ;

end