

if not exists(select* from alq_tipotarifa where tipoTarifa='elementoProducido')
begin 
insert into alq_tipotarifa (uid,eid,tipoTarifa,tipoTarifa_codigo,valor)
select seg_usuario.id,'01','elementoProducido','elementoProducido','9' from seg_usuario where id=1
end




update doc_estadotipodocumento_subtipodocumento set estadotipodocumento_subtipodocumento='val_configobra'
from    doc_estadotipodocumento_subtipodocumento
inner join doc_subtipodocumento  on doc_subtipodocumento.id=doc_estadotipodocumento_subtipodocumento.id_subtipodocumento 
and doc_subtipodocumento.id_tipodocumento=9
inner join doc_estadotipodocumento on doc_estadotipodocumento .id=doc_estadotipodocumento_subtipodocumento.id_estadotipodocumento_destino
and doc_estadotipodocumento.estadotipodocumento_codigo='CON'


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[val_configobra]') AND type in (N'P', N'PC'))DROP PROCEDURE [dbo].[val_configobra]
GO
CREATE PROCEDURE [val_configobra]
 @p_id_documento as int=-1,
 @p_id_usuario as int=-1,
 @p_eid as varchar(50) 
AS
BEGIN
declare @inicioproceso as smalldatetime
declare @permiso as bit =0 
declare @mensaje as varchar(max)	
set @mensaje=''
set @inicioproceso =GETDATE()


-- tiene equipos no configurados en tarifa
if  exists (
select * from equ_detallealquiler where active=1 and id_equipo>0 and id in (
select  tar.id_detallealquiler from alq_tarifa tar
inner join equ_detallealquiler det on det.id =tar.id_detalleAlquiler  where tar.active=1 and det.[id_documento.alquiler] = @p_id_documento 
and tar.id_tipoTarifa  in (2,7,9,8) ) and estadoalquiler in(1, 2) and equ_detalleAlquiler .[id_documento.alquiler] = @p_id_documento 
) 
begin 
  set @permiso  =1
     -- valido no tener tarifas configuradas
    if exists (
                select count(*),item.id_catalogo,det.id_equipo from  alq_tarifa tar
				inner join equ_detalleAlquiler det on det.id =tar.id_detalleAlquiler  and tar.active=1 and det.estadoalquiler in(1, 2)
				inner join doc_itemdocumento item on item.id=tar.id_itemdocumento  and item.active=1 and det.[id_documento.alquiler] = @p_id_documento 
				and tar.id_tipoTarifa  in (2,7,9,8) group by tar.id_tipoTarifa,item.id_catalogo ,det.id_equipo  
				having count(*) >1 
    
		      ) 
				begin
				 set @permiso  =0
			     set @mensaje=' Tiene equipos configurados con tarifas repetidas '+
			     
			     STUFF(
				 (  select ',' + equ.equipo_serial from  alq_tarifa tar
					inner join equ_detalleAlquiler det on det.id =tar.id_detalleAlquiler  
					and tar.active=1  and det.estadoalquiler in(1, 2)
					inner join doc_itemdocumento item on item.id=tar.id_itemdocumento  and item.active=1
					inner join equ_equipo equ on det.id_equipo= equ.id  and det.[id_documento.alquiler] = @p_id_documento 
					and tar.id_tipoTarifa  in (2,7,9,8) 
					group by tar.id_tipoTarifa,item.id_catalogo ,equ.equipo_serial 
					having count(*) >1   FOR XML PATH (''))
				 , 1, 1, '') 
			     
				 end 
				else begin
					set @permiso  =1
									
					--set @mensaje='Los siguientes equipos no tiene configurados obras '
				 end
  
  
  
end
else
begin

set @mensaje='Los equipos de este alquiler no tienen configurados tarifas de servicios '
set @permiso  =0

end


if @permiso =1 
begin
--validar equipos devueltos
INSERT INTO [dis_obra]
           ([uid]
           ,[eid]
           ,[id_usuario_modifico]
           ,[id_usuario_creo]
           ,[fechaModificacion]
           ,[fechaCreacion]
           ,[active]
           ,[obra]
           ,[obra_codigo]
           ,[fechaInicial_ff]
           ,[fechaFinal_ff]
           ,[id_sucursal])        
select min(seg_usuario.uid)
,min(seg_usuario.eid),1,1
,getdate(),getdate(),1
,alq.prefijo+'-'+cast( alq.documento_numero as varchar(200))+' '+equ.equipo_serial
,detalle.id
,alq.fecha_fh
,getdate()
,detalle.id_sucursal
 from doc_documento ALQ
inner join equ_detallealquiler detalle on detalle.[id_documento.alquiler]=ALQ.id and id_equipo>0 and detalle.active=1 and detalle.estadoalquiler in(1, 2)
inner join alq_tarifa tarifa on tarifa.id_detallealquiler=detalle.id and tarifa.id_tipotarifa in (2,7,9,8 ) and tarifa.active =1
inner join equ_equipo equ on equ.id=detalle.id_Equipo and equ.active =1
,seg_usuario 
where ALQ.id= @p_id_documento and seg_usuario.id=1 
and  detalle.id not in (select cast (obr.[obra_codigo] as int ) from dis_obra obr
inner join  dis_obra_catalogo dicat on dicat .id_obra=obr.id
inner join  dis_obra_equipo  dicequ on dicequ  .id_obra=obr.id
where obr.active=1 and  isnumeric(obr.[obra_codigo] )=1 )
group by equ.id,detalle.id,alq.prefijo,alq.documento_numero ,equ.equipo_serial,alq.fecha_fh,detalle.id_sucursal


--asociar equipos a la obra
INSERT INTO [dis_obra_equipo]
           ([uid]
           ,[eid]
           ,[id_usuario_modifico]
           ,[id_usuario_creo]
           ,[fechaModificacion]
           ,[fechaCreacion]
           ,[active]
           ,[obra_equipo]
           ,[id_obra]
           ,[id_equipo]
           ,[promedioEsperado])
select min(seg_usuario.uid)
,min(seg_usuario.eid),1,1,getdate(),getdate(),1
, equ.equipo_serial
,obra.id
,equ.id
,min(equ.promediohoras)
 from doc_documento doc
inner join equ_detallealquiler detalle on doc.id=detalle.[id_documento.alquiler] and detalle.active=1 and detalle.estadoalquiler in(1, 2)
inner join alq_tarifa tarifa on tarifa.id_detallealquiler=detalle.id and tarifa.id_tipotarifa in (2,7,9,8 ) and tarifa.active=1
inner join equ_equipo equ on equ.id=detalle.id_equipo and detalle.id_equipo>0 and equ.active=1
inner join dis_obra obra on cast(obra.obra_codigo as int)=detalle.id and isnumeric(obra.obra_codigo)=1 and obra.active =1
,seg_usuario where detalle.active=1 and seg_usuario.id=1 and  doc.id= @p_id_documento
and  detalle.id not in (select cast (obr.[obra_codigo] as int ) from dis_obra obr
inner join  dis_obra_catalogo dicat on dicat .id_obra=obr.id
inner join  dis_obra_equipo  dicequ on dicequ  .id_obra=obr.id
where obr.active=1 and  isnumeric(obr.[obra_codigo] )=1 )
group by equ.id,detalle.id,obra.id , equ.equipo_serial

--

--actualizo en active 0 los catalogos en obra que ya no estan en los detalles del equipo

update dis_obra_catalogo set active=0 
from dis_obra_catalogo
inner join dis_obra obra on obra.id=dis_obra_catalogo .id_obra 
--and dis_obra_catalogo.active=1
--inner join doc_itemDocumento item on item.id_catalogo =dis_obra_catalogo.id_catalogo and item .id_documento = @p_id_documento  
--inner join alq_tarifa tar on tar.id_itemDocumento =item.id  
--and tar.active =1
inner join equ_detalleAlquiler det on  det.id =cast (obra.[obra_codigo] as int ) and isnumeric(obra.[obra_codigo])=1
and det.active =1 and   det.[id_documento.alquiler]=@p_id_documento  
-- and item .active =1 



INSERT INTO [dis_obra_catalogo]
           ([uid]
           ,[eid]
           ,[id_usuario_modifico]
           ,[id_usuario_creo]
           ,[fechaModificacion]
           ,[fechaCreacion]
           ,[active]
           ,[obra_catalogo]
           ,[cantidad]
           ,[valorUnitario]
           ,[total]
           ,[promedioDia]
           ,[id_obra]
           ,[id_catalogo]
           ,[valorMaximo]
           ,[valorMinimo])
      select seg_usuario.uid
,seg_usuario.eid,1,1,getdate(),getdate(),1
, equ.equipo_serial +'-'+ cat.codigoinventario
,1
,item.valorunitarioplaneado
,item.valorunitarioplaneado* item.cantidadplaneado
,equ.promediohoras
,obra.id
,item.id_catalogo
,100,0
 from doc_documento doc
inner join equ_detallealquiler detalle on doc.id=detalle.[id_documento.alquiler] and detalle.active=1 and detalle.estadoalquiler in(1,2)
inner join alq_tarifa tarifa on tarifa.id_detallealquiler=detalle.id and tarifa.id_tipotarifa in (2,7,9,8 )and detalle .active =1 and tarifa.active=1
inner join equ_equipo equ on equ.id=detalle.id_equipo and detalle.id_equipo>0 and equ.active=1
inner join dis_obra obra on cast(obra.obra_codigo as int)=detalle.id and isnumeric(obra.obra_codigo)=1 and obra.active=1
inner join doc_itemdocumento item on item.id  =tarifa.id_itemdocumento and item.active =1
inner join cat_catalogo cat on cat.id=item.id_catalogo and cat.active =1
,seg_usuario where seg_usuario.id=1 and  doc.id= @p_id_documento  
--and  detalle.id not in (select cast (obr.[obra_codigo] as int ) from dis_obra obr
--inner join  dis_obra_catalogo dicat on dicat .id_obra=obr.id
--inner join  dis_obra_equipo  dicequ on dicequ  .id_obra=obr.id
--where obr.active=1 and  isnumeric(obr.[obra_codigo] )=1 )
--and not exists(
--select cast (obr.[obra_codigo] as int ) from dis_obra obr
--inner join  dis_obra_catalogo dicat on dicat .id_obra=obr.id
--inner join  dis_obra_equipo  dicequ on dicequ  .id_obra=obr.id
--where obr.active=1 and  isnumeric(obr.[obra_codigo] )=1  and  cast (obr.[obra_codigo] as int )=detalle.id and item.id_catalogo =dicat.id_catalogo and dicat.active=1
--)

--genero informe de los editados y creados
declare @estados as table(
serial  varchar(max)
,nuevos  bit
,fechacreacion  smalldatetime
,fechamodificacion  smalldatetime
)

insert into @estados
(
serial  
,nuevos  
,fechacreacion  
,fechamodificacion)
select equ.equipo_serial,0 ,min(obr.fechaCreacion) as creacion ,
case when max(discat.fechamodificacion) >max(obr.fechaModificacion) and max(discat.fechamodificacion) > max(disequ.fechamodificacion) then 
max(discat.fechamodificacion) 
else  
case when max(disequ.fechamodificacion) > max(obr.fechaModificacion) then max(disequ.fechamodificacion) else max(obr.fechaModificacion) end 
end
from dis_obra  obr
inner join equ_detalleAlquiler det on det.id=  cast(obr.obra_codigo  as int)  and   det.estadoalquiler in(1, 2)
and ISNUMERIC (obr.obra_codigo )=1 and det.[id_documento.alquiler] =@p_id_documento 
and det.id_equipo>0
inner join dis_obra_equipo disequ on disequ .id_equipo =det.id_equipo and obr.id=disequ.id_obra  and disequ .active=1
inner join dis_obra_catalogo discat on discat .id_obra =obr.id 
inner join equ_equipo equ on equ.id=det.id_equipo 
and (obr.fechaCreacion >=@inicioproceso 
or discat.fechaCreacion >=@inicioproceso 
or disequ.fechaCreacion >=@inicioproceso 
or obr.fechaModificacion >=@inicioproceso 
or discat.fechaModificacion >=@inicioproceso 
or disequ.fechaModificacion >=@inicioproceso 
 )
group by equ.equipo_serial,obr.fechaCreacion 

update @estados  set nuevos=1 
where fechacreacion >=@inicioproceso 

		set @mensaje= ' Equipos asignados a nuevas  obras: '+ 
	isnull(   STUFF(  (select ',' +serial	  from @estados where nuevos =1  FOR XML PATH (''))
						 , 1, 1, '') ,'ninguno') 
		set @mensaje = isnull (@mensaje,'') +' </br> Equipos con modificaciones en sus obras: '+ 
			isnull (   STUFF(  (select ',' + isnull(serial,'')  from @estados  where nuevos =0 FOR XML PATH (''))
						 , 1, 1, '') ,'')
		--set @mensaje =isnull (@mensaje,'')
		
			INSERT INTO [doc_documentoComentario]
           ([uid]
           ,[eid]
           ,[id_usuario_modifico]
           ,[id_usuario_creo]
           ,[fechaModificacion]
           ,[fechaCreacion]
           ,[active]
           ,[documentoComentario]
           ,[documentoComentario_codigo]
           ,[comentario]
           ,[recordar]
           ,[id_documento]
           ,[id_usuario]
           ,[id_tarea]
           ,[fechaRecordar_fh]
           ,[cerrada]
           ,[id_documentoComentario]
           ,[id_contacto])
    select  seg_usuario.uid 
           ,seg_usuario.eid
           ,@p_id_usuario
           ,@p_id_usuario
           ,GETDATE ()
           ,GETDATE()
           ,1
           ,'Configuracion obra'
           ,''
           ,@mensaje 
           ,0
           ,@p_id_documento 
           ,0
           ,0
           ,0
           ,1
           ,0
           ,0 from seg_usuario where seg_usuario.id=1 
           set @mensaje= ''
				 
end 

if  @permiso =0 
begin 
INSERT INTO [doc_documentoComentario]
           ([uid]
           ,[eid]
           ,[id_usuario_modifico]
           ,[id_usuario_creo]
           ,[fechaModificacion]
           ,[fechaCreacion]
           ,[active]
           ,[documentoComentario]
           ,[documentoComentario_codigo]
           ,[comentario]
           ,[recordar]
           ,[id_documento]
           ,[id_usuario]
           ,[id_tarea]
           ,[fechaRecordar_fh]
           ,[cerrada]
           ,[id_documentoComentario]
           ,[id_contacto])
    select  seg_usuario.uid 
           ,seg_usuario.eid
           ,@p_id_usuario
           ,@p_id_usuario
           ,GETDATE ()
           ,GETDATE()
           ,1
           ,'Configuracion obra'
           ,''
           ,@mensaje 
           ,0
           ,@p_id_documento 
           ,0
           ,0
           ,0
           ,1
           ,0
           ,0 from seg_usuario where seg_usuario.id=1 
           set @mensaje= ' No se logro configurar obras, revisar los comentarios del alquiler'
end

select @mensaje

END













