SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ----------------------------------------------------------- ----------DELETE PROCS IF EXIST: ----------------------------------------------------------- IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'_as_AddUpdateBudget') AND type IN ( N'P', N'PC' ) ) DROP PROCEDURE _as_AddUpdateBudget GO ----------------------------------------------------------- ----------START CREATING PROCS: ----------------------------------------------------------- -- ============================================= -- Author: Alexander Toufexis -- Create date: 23/09/2015, updated sep 2019 (period date possibility) -- Description: Add/Update Budget Value for Account -- ============================================= CREATE PROCEDURE _as_AddUpdateBudget -- Add the parameters for the stored procedure here @GLCode as varchar(200), @BudgetAmount as float, @ForecastAmount as float, @PeriodID as int = 0, @ProjectCode as varchar(200), @PeriodDate as datetime = null AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; --Lookups: --Getting GL Account: DECLARE @GLLink as int DECLARE @AccountTypeID as int SELECT @GLLink = COALESCE((SELECT AccountLink FROM Accounts WHERE Master_Sub_Account = @GLCode),0) SELECT @AccountTypeID = COALESCE((SELECT iAccountType FROM Accounts WHERE AccountLink = @GLLink),0) IF(@GLLink = 0) BEGIN RAISERROR('Account %s not found!', 11, 1, @GLCode); RETURN -1 END --if and period is 0 and perioddate is null, then error IF(@PeriodID = 0 and @PeriodDate is null) BEGIN RAISERROR('Both period and period date are not provided! - GL code: %s', 11, 1, @GLCode); RETURN -1 END --if period is 0, and period date is set, go find the period: if (@PeriodID = 0 and COALESCE(@PeriodDate,'2099-01-01') <> '2099-01-01') BEGIN SELECT @PeriodID = COALESCE((SELECT min(idPeriod) from _etblPeriod P WHERE @PeriodDate <=P.dPeriodDate),0) END --if and period is 0 and perioddate is null, then error IF(@PeriodID = 0) BEGIN RAISERROR('periodID is 0! for GLCode %s', 11, 1, @GLCode); RETURN -1 END --getting Project: DECLARE @ProjectLink as int SELECT @ProjectLink = COALESCE((SELECT ProjectLink FROM Project WHERE MasterSubProject = @ProjectCode),0) IF(@ProjectLink = 0 AND @ProjectCode != '') BEGIN RAISERROR('Project %s not found!', 11, 1, @ProjectCode); RETURN -1 END --Check if budget line already exists: DECLARE @LineID as int SELECT @LineID = COALESCE((SELECT idBudgets FROM _etblBudgets WHERE iBudgetAccountID = @GLLink AND iBudgetPeriodID = @PeriodID AND iBudgetProjectID = @ProjectLink),0) IF (@LineID = 0) BEGIN --INSERT NEW RECORD INSERT INTO [dbo].[_etblBudgets] ([iBudgetAccountID] ,[iBudgetProjectID] ,[iBudgetPeriodID] ,[iBudgetTxBranchID] ,[iBudgetAccountType] ,[fBudget] ,[fUnprocessedPOValue] ,[dBudgetDTStamp] ,[_etblBudgets_iBranchID] ,[fForecast]) VALUES (@GLLink ,@ProjectLink ,@PeriodID ,0 --<iBudgetTxBranchID, int,> ,@AccountTypeID ,@BudgetAmount ,0 --<fUnprocessedPOValue, float,> ,GETDATE() ,0 --<_etblBudgets_iBranchID, int,> ,@ForecastAmount) END ELSE BEGIN --Update budget record UPDATE [_etblBudgets] SET [fBudget] = @BudgetAmount ,[dBudgetDTStamp] = GETDATE() ,[fForecast] = @ForecastAmount WHERE idBudgets = @LineID END END GO