-- This file is part of the it-crafts software and is subject to copyright protection.
-- (C) 2022..2025, All rights reserved by Steffen Anders, Elsteraue - Germany
-- Visit also https://www.it-crafts.de.
--

-------------------------------------------------------------------------------------------------- 
-- Liste der bebuchten Sachkonten mit den Abschlusszielkonten verbunden
IF 0 < (SELECT count(*) from [sysobjects] where [xtype] = 'V'   and [name] = 'itcview_AbschlussKonten_Raw')
  DROP VIEW [dbo].[itcview_AbschlussKonten_Raw]
GO
CREATE VIEW dbo.itcview_AbschlussKonten_Raw
AS
	select 
		  KP.RecId,
		  KP.Typ, 
		  KP.Konto,
		  KP.[Name],
		  KP.BilZeile,
		  CASE KP.BilZeile
			WHEN 'BILA' THEN ISNULL(Bila.KtoBis,'')
			ELSE Opt6244.OptDataC 
		  END AS Abschluss,
		  Opt6244.OptDataC AS AbschlussGuV,
		  Bila.KtoBis AS AbschlussBil
		from dbo.ut_Kontenplan KP
		left join dbo.ut_Optionen     Opt6244 on Opt6244.OptId = ' 6244'
		left join dbo.ut_Bilanzzeilen Bila    on Bila.LstNr = '7000' and Bila.KtoTyp = 'A' and Bila.KtoVon = KP.Konto
		where Typ ='S' AND 0 < (SELECT COUNT(*) FROM dbo.ut_Buchungszeilen BZ where BZ.Typ = KP.Typ AND BZ.Konto = KP.Konto)
GO

-------------------------------------------------------------------------------------------------- 
-- Liste der tatsaechlich zu benutzenden Abschlusskonten
IF 0 < (SELECT count(*) from [sysobjects] where [xtype] = 'V'   and [name] = 'itcview_AbschlussKonten')
  DROP VIEW [dbo].[itcview_AbschlussKonten]
GO
CREATE VIEW dbo.itcview_AbschlussKonten
AS
  select RecId, Typ, Konto, [Name], BilZeile, Abschluss from dbo.itcview_AbschlussKonten_Raw where Abschluss <> ''
GO
-- SELECT * FROM dbo.itcview_AbschlussKonten

----------------------------------------------------------------------------------------------
-- Vorschau auf die Abschlussbuchungen
IF 0 < (SELECT count(*) from [sysobjects] where [xtype] = 'P'   and [name] = 'itcproc_AbschlussPosten_Vorschau')
  DROP PROCEDURE [dbo].[itcproc_AbschlussPosten_Vorschau]
GO
CREATE PROCEDURE [dbo].[itcproc_AbschlussPosten_Vorschau] @param_Jahr varchar(4), @param_Monat varchar(2)
AS
  SELECT *, Saldo - Umsatz AS Soll, -Umsatz AS Haben FROM
	(SELECT K.*
		,dbo.itcfunc_SaldoVor(Typ, Konto, @param_Jahr, @param_Monat, '32') AS Saldo
		,dbo.itcfunc_UmsatzVor(Typ, Konto, @param_Jahr, @param_Monat, '32') AS Umsatz
	 FROM dbo.itcview_AbschlussKonten K
	) P
	ORDER BY Konto
GO

----------------------------------------------------------------------------------------------
-- Abschlussbuchungen
IF 0 < (SELECT count(*) from [sysobjects] where [xtype] = 'P'   and [name] = 'itcproc_AbschlussPosten_Buchen')
  DROP PROCEDURE [dbo].[itcproc_AbschlussPosten_Buchen]
GO
CREATE PROCEDURE [dbo].[itcproc_AbschlussPosten_Buchen] @param_Jahr varchar(4), @param_Monat varchar(2)
AS
  SET NOCOUNT ON

  DECLARE @m_Konto   varchar(8)
  DECLARE @m_GKonto  varchar(8)
  DECLARE @m_Soll    decimal(14,2)
  DECLARE @m_Haben   decimal(14,2)
  DECLARE @m_RecId   integer
  DECLARE @m_BuText  varchar(50) = 'Abschluss ' + @param_Monat + '/' + @param_Jahr
  DECLARE @m_TransNo varchar(8) = (SELECT TOP 1 TransNo FROM dbo.ut_Buchungszeilen WHERE Jahr = @param_Jahr AND Monat = @param_Monat AND Tag = '32')

  BEGIN TRANSACTION

  IF @m_TransNo IS NULL
	SET @m_TransNo    = dbo.itcfunc_Buchungszeilen_NextTransNo()
  ELSE
    DELETE FROM dbo.ut_Buchungszeilen WHERE Jahr = @param_Jahr AND Monat = @param_Monat AND Tag = '32'

  DECLARE CAbschluss CURSOR LOCAL FOR SELECT Konto, Abschluss, Saldo - Umsatz AS Soll, -Umsatz AS Haben FROM
	(SELECT K.*
		,dbo.itcfunc_SaldoVor(Typ, Konto, @param_Jahr, @param_Monat, '32') AS Saldo
		,dbo.itcfunc_UmsatzVor(Typ, Konto, @param_Jahr, @param_Monat, '32') AS Umsatz
	 FROM dbo.itcview_AbschlussKonten K
	) P
	ORDER BY Konto
  OPEN CAbschluss

  FETCH NEXT FROM CAbschluss INTO @m_Konto, @m_GKonto, @m_Soll, @m_Haben
  WHILE @@FETCH_STATUS = 0 BEGIN
	IF @m_Haben <> 0 OR @m_Soll <> 0 BEGIN
	    SET @m_RecId = dbo.itcfunc_NextRecId_Buchungszeilen()
		INSERT ut_Buchungszeilen (RecId,TransNo,Typ,Konto,Jahr,Monat,Tag,Soll,Haben,[Text])
		VALUES(@m_RecId,@m_TransNo,'S',@m_Konto,@param_Jahr,@param_Monat,'32',@m_Soll,@m_Haben,@m_BuText + ' gegen ' + @m_GKonto)

	    SET @m_RecId = dbo.itcfunc_NextRecId_Buchungszeilen()
		INSERT ut_Buchungszeilen (RecId,TransNo,Typ,Konto,Jahr,Monat,Tag,Soll,Haben,[Text])
		VALUES(@m_RecId,@m_TransNo,'S',@m_GKonto,@param_Jahr,@param_Monat,'32',@m_Haben,@m_Soll,@m_BuText)
	END
	FETCH NEXT FROM CAbschluss INTO @m_Konto, @m_GKonto, @m_Soll, @m_Haben
  END

  CLOSE CAbschluss 
  DEALLOCATE CAbschluss

  UPDATE ut_Buchungszeilen SET BtrOrg = Haben - Soll  WHERE TransNo = @m_TransNo 
  EXECUTE [dbo].[itcproc_Trn_Verdichten] @m_TransNo, 0, 1
  EXECUTE [dbo].[itcproc_Trn_Saldieren] @m_TransNo
  COMMIT TRANSACTION

  SELECT @m_TransNo AS TransNo
GO


