

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


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

 select top 1 @p_inicio= CONVERT (smalldatetime ,  cast(DAY(@p_inicio) as varchar(10))+ '/'+cast(month(@p_inicio) as varchar(10)) +'/'+cast(year(@p_inicio) as varchar(10)) +' 00:00' ,103 );
 select top 1 @p_fin= CONVERT (smalldatetime ,  cast(DAY(@p_fin) as varchar(10))+ '/'+cast(month(@p_fin) as varchar(10)) +'/'+cast(year(@p_fin) as varchar(10)) +' 23:59' ,103 );
--obtengo primero los adicionales
declare @adi as int
declare @ini as smalldatetime
declare @adicion as table
(id_catalogo int,inicio  smalldatetime )
insert into @adicion(id_catalogo,inicio)
select item.id_catalogo, [dbo].[f_dat_fechainicioFacturado](@p_alquiler,item.id_catalogo  ) from 
doc_itemDocumento item
where item.id_documento =@p_alquiler
  and (item.id_catalogo=@p_catalogo or @p_catalogo =0 or @p_catalogo is null ) 
 and   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)
order by item.id_catalogo asc

set @adi = (select top 1 id_catalogo from @adicion order by id_catalogo asc)
while not @adi is null
begin
set @ini =(select top 1 CONVERT (smalldatetime ,  cast(DAY(inicio) as varchar(10))+ '/'+cast(month(inicio) as varchar(10)) +'/'+cast(year(inicio) as varchar(10)) +' 00:00' ,103 )
inicio

 from @adicion where id_catalogo =@adi  order by id_catalogo asc)
insert into @adicional
(
checked 
,id_item 
,item
,codigoinventario
,valorunitario 
,cantidad 
,id_catalogo 
,cantidadfacturado 
,porcdto 
,porciva 
,totaleje 
,cantidadfac 
,total 
 ,fechainicio,fechafin )
select
'true'--(case when sum (itemhijos.cantidadPlaneado )>item.cantidadejecutado then 'true' else 'false' end )
,item.id
,item.itemdocumento 
--+' '+  convert (varchar(100) ,max(dochijo.fechaCierre_ff) ,103) +' '+ convert (varchar(100) ,max(dochijo.fechaCierre_ff) ,108)
,cat.codigoinventario
,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 .valorUnitarioPlaneado*(item .porcdto /100) ) )     
-- +   ((item.valorUnitarioPlaneado - (item .valorUnitarioPlaneado*(item .porcdto /100) ) )   *  (item .porciva /100)  )     )  ) 
---item.cantidadejecutado
,case when @p_inicio=0 or @p_inicio is null then
 MIN(dochijo.fechaCierre_ff )
  else    CONVERT (smalldatetime ,  cast(DAY(@p_inicio+1) as varchar(10))+ '/'+cast(month(@p_inicio+1) as varchar(10)) +'/'+cast(year(@p_inicio+1) as varchar(10)) +' 00:00' ,103 )
   end ,@p_fin
from 
doc_itemdocumento item
inner join doc_itemdocumento itemhijos on itemhijos .id_catalogo =item .id_catalogo 
-- ajuste para que no lo busque solamente del catalogo sino del item del padre 
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,7)
inner join doc_estadotipodocumento estado on estado.id =dochijo .id_estadoTipoDocumento and estado .estadoTipoDocumento_codigo not in ('CAN')
inner join cat_catalogo cat on cat.id=item.id_catalogo  
where
-- item.id_catalogo not in(@adi)and
item.id_documento in (@p_alquiler) and  (item.id_catalogo in (@adi))
and (dochijo.fechacierre_ff >=@ini or @ini is null   )
and (dochijo.fechacierre_ff >=@p_inicio or (@p_inicio is null   )) --or @p_inicio=0
and ((dochijo.fechacierre_ff <=@p_fin and @p_fin>0  ) or (@p_fin =0 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
,cat.codigoinventario;

set @adi= (select top 1 id_catalogo from @adicion where id_catalogo > @adi  order by id_catalogo asc);
end 

select * from @adicional;
-- select * from  @adicion;
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
 select top 1 @p_inicio= CONVERT (smalldatetime ,  cast(DAY(@p_inicio) as varchar(10))+ '/'+cast(month(@p_inicio) as varchar(10)) +'/'+cast(year(@p_inicio) as varchar(10)) +' 00:00' ,103 );
 select top 1 @p_fin= CONVERT (smalldatetime ,  cast(DAY(@p_fin) as varchar(10))+ '/'+cast(month(@p_fin) as varchar(10)) +'/'+cast(year(@p_fin) as varchar(10)) +' 23:59' ,103 );

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

insert into @adicional
(cantidad,id_catalogo,id_itemfactura, id_documento ,documento ,cierre,estado,tipo )
select sum (itemhijos.cantidadPlaneado ),item.id_catalogo,item.id
,dochijo.id,dochijo .prefijo +'-'+ cast (dochijo .documento_numero as varchar(100)) +' '+  convert (varchar(100) ,dochijo.fechaCierre_ff ,103) +' '+ convert (varchar(100) ,dochijo.fechaCierre_ff ,108)
,dochijo .fechaCierre_ff 
,estado .estadoTipoDocumento 
,tipo.tipoDocumento 
from 
doc_itemdocumento item
inner join doc_itemdocumento itemhijos on itemhijos .id_catalogo =item .id_catalogo 
-- ajuste para que no lo busque solamente del catalogo sino del item del padre 
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,7)
inner join doc_estadotipodocumento estado on estado.id =dochijo .id_estadoTipoDocumento and estado .estadoTipoDocumento_codigo not in ('CAN')
inner join doc_tipodocumento tipo on tipo.id=estado.id_tipoDocumento 
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 or @p_inicio =0) and (dochijo.fechacierre_ff <=@p_fin or @p_fin is null or @p_fin=0) 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,estado .estadoTipoDocumento,tipo.tipoDocumento   ;


--detalle de las orden de compra



select * from @adicional order by id_catalogo ;
end