IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'[dbo].[CP_Asientos_Control]') 
                   and OBJECTPROPERTY(id, N'IsProcedure') = 1 )
BEGIN
    DROP PROCEDURE [dbo].[CP_Asientos_Control] 
END
GO


CREATE procedure [dbo].[CP_Asientos_Control] @fdesde datetime,@fhasta datetime
 
 as
declare @accion varchar(250)  

--conrol de alias duplicados
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA
set @accion = 'Debe modificar en el plan de cuentas el alias '
set @accion = @accion+ 'indicando el proximo numero disponible de alias'
select '1001' as Validacion,'Alias Nro.: '+rtrim(CONVERT(varchar(15),alias)) +
		' de Cuenta Contable Duplicado, Plan de Cuentas: '+rtrim(CONVERT(varchar(15),Id_Plan_Cta))  as Mensaje,
		@accion as Accion
from (select Id_Plan_Cta ,alias,COUNT(*) as cantidad from  
Pla_Ctas_Cuentas_Contables 
group by  Id_Plan_Cta ,alias
having COUNT(*) > 1 ) aux1 

union

--control de alias  diferentes con plan de cuentas --------------------  
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA

select '1002' as Validacion,'El Alias Nro.: '+rtrim(CONVERT(varchar(15),Id_Alias_Cta_Cont)) +
		' de la cuenta contable: '+rtrim(CONVERT(varchar(15),Id_Cta_Contable)) +
		' No equivale a su Alias: '+rtrim(CONVERT(varchar(15),p_alias))  as Mensaje,
		'Se debe corregir el asiento contable Nro. '+rtrim(CONVERT(varchar(15),id_asiento))+
		' Item: '+rtrim(CONVERT(varchar(15),item))
		 as Accion
		from (
 select i.*,p.Alias as p_alias
 from Asientos_Items i,Pla_Ctas_Cuentas_Contables p
 where i.Id_Cta_Contable = p.Id_Cta_Contable
 and i.Id_Alias_Cta_Cont <> p.Alias) aux1



union

--control de cuentas de otro ejercicio--------------------  
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA
select '1003' as Validacion,'La cuenta contable: '+rtrim(CONVERT(varchar(15),Id_Cta_Contable)) +
		' no pertenece al plan de cuentas, La Cuenta del Periodo es: '+rtrim(CONVERT(varchar(15),cuenta_cont_valida ))  as Mensaje,
		'Se debe corregir el asiento contable Nro. '+rtrim(CONVERT(varchar(15),id_asiento))+
		' Item: '+rtrim(CONVERT(varchar(15),item))
		 as Accion
 from 
 (select i.* ,dbo.SF_Cta_Contable(i.Id_Alias_Cta_Cont,a.Fecha) as cuenta_cont_valida
 from Asientos_Items i,Asientos a,Pla_Ctas_Cuentas_Contables p,Plan_Ctas pc, Plan_Ctas_Ejercicios PE
 where i.Id_Cta_Contable = p.Id_Cta_Contable
 and a.Id_Asiento = i.Id_Asiento
 and p.Id_Plan_Cta = pc.Id_Plan_Cta
 and pc.Id_Ejercicio = pe.Id_Ejercicio
 and (a.Fecha < pe.Fecha_Inicio or a.Fecha > pe.Fecha_Cierre)) aux1


/*
 union
 --control de alias con funcion-----------
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA
 select i.*,dbo.SF_Cta_Contable(i.Id_Alias_Cta_Cont,a.Fecha) as dd
 from Asientos_Items i,Asientos a,Pla_Ctas_Cuentas_Contables p,Plan_Ctas pc, Plan_Ctas_Ejercicios PE
 where i.Id_Cta_Contable = p.Id_Cta_Contable
 and a.Id_Asiento = i.Id_Asiento
 and p.Id_Plan_Cta = pc.Id_Plan_Cta
 and pc.Id_Ejercicio = pe.Id_Ejercicio
 and i.Id_Cta_Contable = (dbo.SF_Cta_Contable(i.Id_Alias_Cta_Cont,a.Fecha))
 select * from Asientos 

*/
--------------------------
 --control de id_cta  unido con alias -------------------------------
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA
union 
select '1005' as Validacion,'La cuenta contable: '+rtrim(CONVERT(varchar(15),Id_Cta_Contable)) +
		' no se corresponde con su alias en el plan de cuentas, Asiento: '+rtrim(CONVERT(varchar(15),id_asiento ))+
		' Item: '+rtrim(CONVERT(varchar(15),item))   as Mensaje,
		'Se debe corregir el asiento contable Nro. '+rtrim(CONVERT(varchar(15),id_asiento))+
		' Item: '+rtrim(CONVERT(varchar(15),item))
		 as Accion
from  
 (select i.*
  from Asientos_Items i,Asientos a,Pla_Ctas_Cuentas_Contables p,Plan_Ctas pc, Plan_Ctas_Ejercicios PE
 where  a.Id_Asiento = i.Id_Asiento
 and p.Id_Plan_Cta = pc.Id_Plan_Cta
 and pc.Id_Ejercicio = pe.Id_Ejercicio
 and p.Id_Plan_Cta = a.Id_Plan_Cta
 and p.Alias = i.Id_Alias_Cta_Cont
 and i.Id_Cta_Contable <> p.Id_Cta_Contable) aux1



-----------------------control de asientos resumenes
union
select  '1006' as Validacion,'El Asiento Nro.'+rtrim(CONVERT(varchar(15),Id_asiento)) +' - '+rtrim(CONVERT(varchar(15),Descripcion))+
		' de Fecha '+rtrim(CONVERT(varchar(15),convert(date, fecha) ))+
		' Presenta Diferencia de '+rtrim(CONVERT(varchar(15),Dif_Debe_Control ))+' en su asiento resumen ' as Mensaje,
		'Se debe Generar el Asiento Resumen '
		 as Accion
from  
(
select A.Id_Asiento,A.Fecha,A.Descripcion,A.Importe,O.debe AS Total_Debe_Control, A.Importe - O.debe AS Dif_Debe_Control,
o.haber AS Total_Haber_Control,A.Importe - O.Haber AS Dif_Haber_Control  
from Asientos a, (select C.id_asiento, SUM(debe) as debe, SUM(haber) as haber 
    from Cbtes_Ctas_Contables o, cbtes c 
  where c.Id_Trans = o.Id_Trans
    and c.Id_Estado_Cbte not in (0,3) 
    AND C.Periodo_Iva >= @fdesde
    AND C.Periodo_Iva < @fhasta + 1
  GROUP BY C.Id_Asiento) O
where O.id_asiento=  a.Id_Asiento) aux1 where Dif_Debe_Control <>0 or Dif_Haber_Control <>0


