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

CREATE PROCEDURE CP_Asientos_Control @fdesde datetime,@fhasta datetime
 
 as
declare @accion varchar(250)  

CREATE TABLE  #Respuesta (Id_Error INT, Error_Msg VARCHAR(1000),Accion VARCHAR(5000))



--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'
INSERT INTO #Respuesta
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 



--control de alias  diferentes con plan de cuentas --------------------  
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA
INSERT INTO #Respuesta
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





--control de cuentas de otro ejercicio--------------------  
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA
INSERT INTO #Respuesta
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.CF_Cta_Cont(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 + 1)) aux1


/*
 union
 --control de alias con funcion-----------
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA
 select i.*,dbo.CF_Cta_Cont(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.CF_Cta_Cont(i.Id_Alias_Cta_Cont,a.Fecha))
 select * from Asientos 

*/
--------------------------
 --control de id_cta  unido con alias -------------------------------
------------------------------------------------------------- ------------------AGREGAR FILTRO FECHA
INSERT INTO #Respuesta
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
INSERT INTO #Respuesta
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


-----------------------control de centro de costos en nulo
DECLARE @CCNull INT
SET @CCNull = ISNULL((SELECT COUNT(*) FROM  Asientos_Items i,Asientos a 
						WHERE i.id_Asiento = a.id_Asiento 
						AND a.Fecha >= @fdesde 
						AND a.Fecha < @fhasta + 1
						AND i.Id_Centro_Costo IS NULL),0)
IF @CCNull > 0
BEGIN
	UPDATE Asientos_Items SET Id_Centro_Costo = ''
	FROM  Asientos_Items i,Asientos a WHERE i.id_Asiento = a.id_Asiento AND a.Fecha >= @fdesde AND a.Fecha < @fhasta + 1 AND i.Id_Centro_Costo IS NULL
	INSERT INTO #Respuesta VALUES (1007,'Cantidad de Asientos_Items con Id_Centro_Costos en NULO: '+ CAST(@CCNull AS VARCHAR(10)),'Corregido')
END
------------------------------------------------------------------------------------------------------------------------------------

SELECT * FROM #Respuesta
DROP TABLE #Respuesta


