Ejemplo n.º 1
0
        /// <summary>
        /// Post a budget
        /// </summary>
        private static void PostBudget(int ALedgerNumber, ABudgetRow ABudgetRow, List <ABudgetPeriodRow> ABudgetPeriodRows)
        {
            //gb5300.p
            string AccountCode = ABudgetRow.AccountCode;

            string CostCentreList = ABudgetRow.CostCentreCode;              /* posting CC and parents */

            //Populate list of affected Cost Centres
            CostCentreParentsList(ALedgerNumber, ref CostCentreList);

            //Locate the row for the current account
            AAccountRow AccountRow = (AAccountRow)GLPostingDS.AAccount.Rows.Find(new object[] { ALedgerNumber, AccountCode });

            GLPostingDS.AGeneralLedgerMaster.DefaultView.Sort = String.Format("{0},{1},{2},{3}",
                                                                              AGeneralLedgerMasterTable.GetLedgerNumberDBName(),
                                                                              AGeneralLedgerMasterTable.GetYearDBName(),
                                                                              AGeneralLedgerMasterTable.GetAccountCodeDBName(),
                                                                              AGeneralLedgerMasterTable.GetCostCentreCodeDBName());

            /* calculate values for budgets and store them in a temp table; uses lb_budget */
            ProcessAccountParent(
                ALedgerNumber,
                AccountCode,
                AccountRow.DebitCreditIndicator,
                CostCentreList,
                ABudgetRow,
                ABudgetPeriodRows);
        }
Ejemplo n.º 2
0
        public static BudgetTDS LoadBudgetForAutoGenerate(Int32 ALedgerNumber)
        {
            BudgetTDS FMainDS = new BudgetTDS();

            TDBTransaction Transaction = new TDBTransaction();
            TDataBase      db          = DBAccess.Connect("LoadBudgetForAutoGenerate");

            db.ReadTransaction(
                ref Transaction,
                delegate
            {
                ALedgerAccess.LoadByPrimaryKey(FMainDS, ALedgerNumber, Transaction);

                #region Validate Data

                if ((FMainDS.ALedger == null) || (FMainDS.ALedger.Count == 0))
                {
                    throw new EFinanceSystemDataTableReturnedNoDataException(String.Format(Catalog.GetString(
                                                                                               "Function:{0} - Ledger data for Ledger number {1} does not exist or could not be accessed!"),
                                                                                           Utilities.GetMethodName(true),
                                                                                           ALedgerNumber));
                }

                #endregion Validate Data

                int CurrentFinancialYear = FMainDS.ALedger[0].CurrentFinancialYear;

                //Load all by Ledger/Year but none may exist
                ABudgetTable BudgetTable = new ABudgetTable();
                ABudgetRow TemplateRow   = (ABudgetRow)BudgetTable.NewRow();

                TemplateRow.LedgerNumber = ALedgerNumber;
                TemplateRow.Year         = CurrentFinancialYear;

                StringCollection Operators = StringHelper.InitStrArr(new string[] { "=", "=" });
                StringCollection OrderList = new StringCollection();

                OrderList.Add("ORDER BY");
                OrderList.Add(ABudgetTable.GetCostCentreCodeDBName() + " ASC");
                OrderList.Add(ABudgetTable.GetAccountCodeDBName() + " ASC");

                ABudgetAccess.LoadUsingTemplate(FMainDS, TemplateRow, Operators, null, Transaction, OrderList, 0, 0);
                ABudgetPeriodAccess.LoadViaABudgetTemplate(FMainDS, TemplateRow, Operators, null, Transaction, OrderList, 0, 0);

                ABudgetRevisionAccess.LoadByPrimaryKey(FMainDS, ALedgerNumber, CurrentFinancialYear, 0, Transaction);

                ABudgetTypeAccess.LoadAll(FMainDS, Transaction);
            });

            // Accept row changes here so that the Client gets 'unmodified' rows
            FMainDS.AcceptChanges();

            // Remove all Tables that were not filled with data before remoting them.
            FMainDS.RemoveEmptyTables();

            return(FMainDS);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Unpost a budget
        /// </summary>
        /// <param name="ABudgetRow"></param>
        /// <param name="ALedgerNumber"></param>
        /// <returns>true if it seemed to go OK</returns>
        private static bool UnPostBudget(ABudgetRow ABudgetRow, int ALedgerNumber)
        {
            /* post the negative budget, which will result in an empty a_glm_period.budget */

            // get the current budget value for each GLM Period, and unpost that budget

            GLPostingDS.AGeneralLedgerMaster.DefaultView.Sort = String.Format("{0},{1},{2},{3}",
                                                                              AGeneralLedgerMasterTable.GetLedgerNumberDBName(),
                                                                              AGeneralLedgerMasterTable.GetYearDBName(),
                                                                              AGeneralLedgerMasterTable.GetAccountCodeDBName(),
                                                                              AGeneralLedgerMasterTable.GetCostCentreCodeDBName());

            int glmIndex = GLPostingDS.AGeneralLedgerMaster.DefaultView.Find(
                new object[] { ALedgerNumber, ABudgetRow.Year, ABudgetRow.AccountCode, ABudgetRow.CostCentreCode });

            if (glmIndex != -1)
            {
                AGeneralLedgerMasterRow glmRow = (AGeneralLedgerMasterRow)GLPostingDS.AGeneralLedgerMaster.DefaultView[glmIndex].Row;

                List <ABudgetPeriodRow> budgetPeriods = new List <ABudgetPeriodRow>();

                for (int Period = 1; Period <= GLPostingDS.ALedger[0].NumberOfAccountingPeriods; Period++)
                {
                    AGeneralLedgerMasterPeriodRow GeneralLedgerMasterPeriodRow =
                        (AGeneralLedgerMasterPeriodRow)GLPostingDS.AGeneralLedgerMasterPeriod.Rows.Find(
                            new object[] { glmRow.GlmSequence, Period });

                    ABudgetPeriodRow budgetPeriodRow = FBudgetTDS.ABudgetPeriod.NewRowTyped(true);
                    budgetPeriodRow.PeriodNumber   = Period;
                    budgetPeriodRow.BudgetSequence = ABudgetRow.BudgetSequence;

                    // use negative amount for unposting
                    budgetPeriodRow.BudgetBase = -1 * GeneralLedgerMasterPeriodRow.BudgetBase;

                    // do not add to the budgetperiod table, but to our local list
                    budgetPeriods.Add(budgetPeriodRow);
                }

                PostBudget(ALedgerNumber, ABudgetRow, budgetPeriods);
            }

            ABudgetRow.BudgetStatus = false;                 //i.e. unposted

            return(true);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Post a budget
        /// </summary>
        private static void PostBudget(int ALedgerNumber, ABudgetRow ABudgetRow, List <ABudgetPeriodRow> ABudgetPeriodRows)
        {
            GLPostingDS.AGeneralLedgerMaster.DefaultView.Sort = String.Format("{0},{1},{2},{3}",
                                                                              AGeneralLedgerMasterTable.GetLedgerNumberDBName(),
                                                                              AGeneralLedgerMasterTable.GetYearDBName(),
                                                                              AGeneralLedgerMasterTable.GetAccountCodeDBName(),
                                                                              AGeneralLedgerMasterTable.GetCostCentreCodeDBName());

            int glmRowIndex = GLPostingDS.AGeneralLedgerMaster.DefaultView.Find(new object[] {
                ALedgerNumber,
                ABudgetRow.Year,
                ABudgetRow.AccountCode,
                ABudgetRow.CostCentreCode
            });

            if (glmRowIndex == -1)
            {
                TGLPosting.CreateGLMYear(ref GLPostingDS,
                                         ALedgerNumber,
                                         ABudgetRow.Year,
                                         ABudgetRow.AccountCode,
                                         ABudgetRow.CostCentreCode);
                glmRowIndex = GLPostingDS.AGeneralLedgerMaster.DefaultView.Find(new object[] {
                    ALedgerNumber,
                    ABudgetRow.Year,
                    ABudgetRow.AccountCode,
                    ABudgetRow.CostCentreCode
                });
            }

            int GLMSequence = ((AGeneralLedgerMasterRow)GLPostingDS.AGeneralLedgerMaster.DefaultView[glmRowIndex].Row).GlmSequence;

            /* Update totals for the General Ledger Master period record. */
            foreach (ABudgetPeriodRow BPR in ABudgetPeriodRows)
            {
                AddBudgetValue(GLMSequence, BPR.PeriodNumber, BPR.BudgetBase);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Import the budget from a CSV file
        /// </summary>
        /// <param name="ALedgerNumber"></param>
        /// <param name="ACurrentBudgetYear"></param>
        /// <param name="ACSVFileName"></param>
        /// <param name="AFdlgSeparator"></param>
        /// <param name="AImportDS"></param>
        /// <param name="AVerificationResult"></param>
        /// <returns>Total number of records imported and number of which updated as the fractional part</returns>
        private static decimal ImportBudgetFromCSV(Int32 ALedgerNumber,
                                                   Int32 ACurrentBudgetYear,
                                                   string ACSVFileName,
                                                   string[] AFdlgSeparator,
                                                   ref BudgetTDS AImportDS,
                                                   ref TVerificationResultCollection AVerificationResult)
        {
            StreamReader DataFile = new StreamReader(ACSVFileName, System.Text.Encoding.Default);

            string Separator    = AFdlgSeparator[0];
            string DateFormat   = AFdlgSeparator[1];
            string NumberFormat = AFdlgSeparator[2];

            FCultureInfoNumberFormat = new CultureInfo(NumberFormat.Equals("American") ? "en-US" : "de-DE");
            CultureInfo MyCultureInfoDate = new CultureInfo("en-GB");

            MyCultureInfoDate.DateTimeFormat.ShortDatePattern = DateFormat;

            // To store the From and To currencies
            // Use an array to store these to make for easy
            //   inverting of the two currencies when calculating
            //   the inverse value.

            //string currentBudgetVal = string.Empty;
            //string mess = string.Empty;
            string CostCentre       = string.Empty;
            string Account          = string.Empty;
            string budgetType       = string.Empty;
            string budgetYearString = string.Empty;
            int    budgetYear       = 0;

            Int32 numPeriods = TAccountingPeriodsWebConnector.GetNumberOfPeriods(ALedgerNumber);

            decimal[] BudgetPeriods         = new decimal[numPeriods];
            int       YearForBudgetRevision = 0;
            int       BdgRevision           = 0; //not currently implementing versioning so always zero

            decimal rowNumber          = 0;
            decimal duplicateRowNumber = 0;

            while (!DataFile.EndOfStream)
            {
                decimal totalBudgetRowAmount = 0;

                try
                {
                    string Line = DataFile.ReadLine();

                    CostCentre = StringHelper.GetNextCSV(ref Line, Separator, false).ToString();

                    if (CostCentre == "Cost Centre")
                    {
                        //Read the next line
                        Line       = DataFile.ReadLine();
                        CostCentre = StringHelper.GetNextCSV(ref Line, Separator, false).ToString();
                    }

                    //Increment row number
                    rowNumber++;

                    //Convert separator to a char
                    // char Sep = Separator[0];
                    //Turn current line into string array of column values
                    // string[] CsvColumns = Line.Split(Sep);

                    //int NumCols = CsvColumns.Length;

                    //If number of columns is not 4 then import csv file is wrongly formed.
//                if (NumCols != 24)
//                {
//                    AVerificationResult. MessageBox.Show(Catalog.GetString("Failed to import the CSV budget file:\r\n\r\n" +
//                            "   " + ADataFilename + "\r\n\r\n" +
//                            "It contains " + NumCols.ToString() + " columns. " +
//                            ), AImportMode + " Exchange Rates Import Error");
//                    return;
//                }

                    //Read the values for the current line
                    Account    = StringHelper.GetNextCSV(ref Line, Separator, false).ToString();
                    budgetType = StringHelper.GetNextCSV(ref Line, Separator, false).ToString().ToUpper();
                    budgetType = budgetType.Replace(" ", ""); //Ad hoc will become ADHOC

                    //Allow for variations on Inf.Base and Inf.N
                    if (budgetType.Contains("INF"))
                    {
                        if (budgetType.Contains("BASE"))
                        {
                            if (budgetType != MFinanceConstants.BUDGET_INFLATE_BASE)
                            {
                                budgetType = MFinanceConstants.BUDGET_INFLATE_BASE;
                            }
                        }
                        else if (budgetType != MFinanceConstants.BUDGET_INFLATE_N)
                        {
                            budgetType = MFinanceConstants.BUDGET_INFLATE_N;
                        }
                    }

                    if ((budgetType != MFinanceConstants.BUDGET_ADHOC) &&
                        (budgetType != MFinanceConstants.BUDGET_SAME) &&
                        (budgetType != MFinanceConstants.BUDGET_INFLATE_N) &&
                        (budgetType != MFinanceConstants.BUDGET_SPLIT) &&
                        (budgetType != MFinanceConstants.BUDGET_INFLATE_BASE)
                        )
                    {
                        throw new InvalidOperationException("Budget Type: " + budgetType + " in row: " + rowNumber.ToString() + " does not exist.");
                    }

                    //Calculate the budget Year
                    budgetYearString = StringHelper.GetNextCSV(ref Line, Separator, false);

                    YearForBudgetRevision = BudgetRevisionYearNumber(ALedgerNumber, budgetYearString);

                    //Add budget revision record if there's not one already.
                    if (AImportDS.ABudgetRevision.Rows.Find(new object[] { ALedgerNumber, YearForBudgetRevision, BdgRevision }) == null)
                    {
                        ABudgetRevisionRow BudgetRevisionRow = (ABudgetRevisionRow)AImportDS.ABudgetRevision.NewRowTyped();
                        BudgetRevisionRow.LedgerNumber = ALedgerNumber;
                        BudgetRevisionRow.Year         = YearForBudgetRevision;
                        BudgetRevisionRow.Revision     = BdgRevision;
                        BudgetRevisionRow.Description  = "Budget Import from: " + ACSVFileName;
                        AImportDS.ABudgetRevision.Rows.Add(BudgetRevisionRow);
                    }

                    //Read the budgetperiod values to check if valid according to type
                    Array.Clear(BudgetPeriods, 0, numPeriods);

                    bool successfulBudgetRowProcessing = ProcessBudgetTypeImportDetails(ref Line, Separator, budgetType, ref BudgetPeriods);

                    for (int i = 0; i < numPeriods; i++)
                    {
                        totalBudgetRowAmount += BudgetPeriods[i];
                    }

                    if (!successfulBudgetRowProcessing)
                    {
                        throw new InvalidOperationException(String.Format(
                                                                "The budget in row {0} for Ledger: {1}, Year: {2}, Cost Centre: {3} and Account: {4}, does not have values consistent with Budget Type: {5}.",
                                                                rowNumber,
                                                                ALedgerNumber,
                                                                budgetYear,
                                                                CostCentre,
                                                                Account,
                                                                budgetType));
                    }

                    BudgetTDS MainDS = new BudgetTDS();

                    TDBTransaction transaction = null;
                    DBAccess.GDBAccessObj.GetNewOrExistingAutoReadTransaction(IsolationLevel.ReadCommitted,
                                                                              TEnforceIsolationLevel.eilMinimum,
                                                                              ref transaction,
                                                                              delegate
                    {
                        ABudgetAccess.LoadByUniqueKey(MainDS, ALedgerNumber, YearForBudgetRevision, BdgRevision, CostCentre, Account, transaction);
                        //TODO: need to filter on ABudgetPeriod using LoadViaBudget or LoadViaUniqueKey
                    });

                    //Check to see if the budget combination already exists:
                    if (MainDS.ABudget.Count > 0)
                    {
                        ABudgetRow BR2 = (ABudgetRow)MainDS.ABudget.Rows[0];

                        int BTSeq = BR2.BudgetSequence;

                        ABudgetRow BdgTRow = (ABudgetRow)AImportDS.ABudget.Rows.Find(new object[] { BTSeq });

                        if (BdgTRow != null)
                        {
                            duplicateRowNumber++;

                            BdgTRow.BeginEdit();
                            //Edit the new budget row
                            BdgTRow.BudgetTypeCode = budgetType;
                            BdgTRow.EndEdit();

                            ABudgetPeriodRow BPRow = null;

                            for (int i = 0; i < numPeriods; i++)
                            {
                                BPRow = (ABudgetPeriodRow)AImportDS.ABudgetPeriod.Rows.Find(new object[] { BTSeq, i + 1 });

                                if (BPRow != null)
                                {
                                    BPRow.BeginEdit();
                                    BPRow.BudgetBase = BudgetPeriods[i];
                                    BPRow.EndEdit();
                                }

                                BPRow = null;
                            }
                        }
                    }
                    else
                    {
                        //Add the new budget row
                        ABudgetRow BudgetRow   = (ABudgetRow)AImportDS.ABudget.NewRowTyped();
                        int        newSequence = -1 * (AImportDS.ABudget.Rows.Count + 1);

                        BudgetRow.BudgetSequence = newSequence;
                        BudgetRow.LedgerNumber   = ALedgerNumber;
                        BudgetRow.Year           = YearForBudgetRevision;
                        BudgetRow.Revision       = BdgRevision;
                        BudgetRow.CostCentreCode = CostCentre;
                        BudgetRow.AccountCode    = Account;
                        BudgetRow.BudgetTypeCode = budgetType;
                        AImportDS.ABudget.Rows.Add(BudgetRow);

                        //Add the budget periods
                        for (int i = 0; i < numPeriods; i++)
                        {
                            ABudgetPeriodRow BudgetPeriodRow = (ABudgetPeriodRow)AImportDS.ABudgetPeriod.NewRowTyped();
                            BudgetPeriodRow.BudgetSequence = newSequence;
                            BudgetPeriodRow.PeriodNumber   = i + 1;
                            BudgetPeriodRow.BudgetBase     = BudgetPeriods[i];
                            AImportDS.ABudgetPeriod.Rows.Add(BudgetPeriodRow);
                        }
                    }
                }
                catch (Exception)
                {
                    throw;
                }
            }

            DataFile.Close();

            if (duplicateRowNumber > 0)
            {
                //fractional part is the number of updates divided by 10000
                if (duplicateRowNumber < 10000)
                {
                    rowNumber += (duplicateRowNumber / 10000);
                }
            }

            return(rowNumber);
        }
 private void PostDeleteManual(ABudgetRow ARowToDelete,
     bool AAllowDeletion,
     bool ADeletionPerformed,
     string ACompletionMessage)
 {
     //Disable the controls if no records found
     if (FPreviouslySelectedDetailRow == null)
     {
         EnableBudgetEntry(false);
     }
 }
        /// <summary>
        /// Deletes the current row and optionally populates a completion message
        /// </summary>
        /// <param name="ARowToDelete">the currently selected row to delete</param>
        /// <param name="ACompletionMessage">if specified, is the deletion completion message</param>
        /// <returns>true if row deletion is successful</returns>
        private bool DeleteRowManual(ABudgetRow ARowToDelete, ref string ACompletionMessage)
        {
            ACompletionMessage = String.Empty;

            int budgetSequence = ARowToDelete.BudgetSequence;
            DeleteBudgetPeriodData(budgetSequence);
            ARowToDelete.Delete();

            return true;
        }
 /// <summary>
 /// Performs checks to determine whether a deletion of the current
 ///  row is permissable
 /// </summary>
 /// <param name="ARowToDelete">the currently selected row to be deleted</param>
 /// <param name="ADeletionQuestion">can be changed to a context-sensitive deletion confirmation question</param>
 /// <returns>true if user is permitted and able to delete the current row</returns>
 private bool PreDeleteManual(ABudgetRow ARowToDelete, ref string ADeletionQuestion)
 {
     ADeletionQuestion = String.Format(Catalog.GetString(
             "You have chosen to delete this budget (Cost Centre: {0}, Account: {1}, Type: {2}, Revision: {3}).{4}{4}Do you really want to delete it?"),
         ARowToDelete.CostCentreCode,
         ARowToDelete.AccountCode,
         ARowToDelete.BudgetTypeCode,
         ARowToDelete.Revision,
         Environment.NewLine);
     return true;
 }
        private void NewRowManual(ref ABudgetRow ARow)
        {
            if (!cmbDetailAccountCode.Enabled)
            {
                EnableBudgetEntry(true);
            }

            ARow.BudgetSequence = Convert.ToInt32(TRemote.MCommon.WebConnectors.GetNextSequence(TSequenceNames.seq_budget));
            ARow.LedgerNumber = FLedgerNumber;
            ARow.Revision = CreateBudgetRevisionRow(FLedgerNumber, FCurrentBudgetYear);
            ARow.Year = FCurrentBudgetYear;

            //Add the budget period values
            for (int i = 1; i <= FNumberOfPeriods; i++)
            {
                ABudgetPeriodRow budgetPeriodRow = FMainDS.ABudgetPeriod.NewRowTyped();
                budgetPeriodRow.BudgetSequence = ARow.BudgetSequence;
                budgetPeriodRow.PeriodNumber = i;
                budgetPeriodRow.BudgetBase = 0;
                FMainDS.ABudgetPeriod.Rows.Add(budgetPeriodRow);
                budgetPeriodRow = null;
            }
        }
        private bool GetDetailDataFromControlsManual(ABudgetRow ARow)
        {
            if (ARow != null)
            {
                ARow.BeginEdit();

                if (rbtAdHoc.Checked)
                {
                    if (FPetraUtilsObject.HasChanges)
                    {
                        ProcessBudgetTypeAdhoc(null, null);
                        ClearBudgetTypeTextboxesExcept(MFinanceConstants.BUDGET_ADHOC);
                    }

                    ARow.BudgetTypeCode = MFinanceConstants.BUDGET_ADHOC;
                }
                else if (rbtSame.Checked)
                {
                    if (FPetraUtilsObject.HasChanges)
                    {
                        ProcessBudgetTypeSame(null, null);
                        ClearBudgetTypeTextboxesExcept(MFinanceConstants.BUDGET_SAME);
                    }

                    ARow.BudgetTypeCode = MFinanceConstants.BUDGET_SAME;
                }
                else if (rbtSplit.Checked)
                {
                    if (FPetraUtilsObject.HasChanges)
                    {
                        ProcessBudgetTypeSplit(null, null);
                        ClearBudgetTypeTextboxesExcept(MFinanceConstants.BUDGET_SPLIT);
                    }

                    ARow.BudgetTypeCode = MFinanceConstants.BUDGET_SPLIT;
                }
                else if (rbtInflateN.Checked)
                {
                    if (FPetraUtilsObject.HasChanges)
                    {
                        ProcessBudgetTypeInflateN(null, null);
                        ClearBudgetTypeTextboxesExcept(MFinanceConstants.BUDGET_INFLATE_N);
                    }

                    ARow.BudgetTypeCode = MFinanceConstants.BUDGET_INFLATE_N;
                }
                else      //rbtInflateBase.Checked
                {
                    if (FPetraUtilsObject.HasChanges)
                    {
                        ProcessBudgetTypeInflateBase(null, null);
                        ClearBudgetTypeTextboxesExcept(MFinanceConstants.BUDGET_INFLATE_BASE);
                    }

                    ARow.BudgetTypeCode = MFinanceConstants.BUDGET_INFLATE_BASE;
                }

                //TODO switch to using Ledger financial year
                ARow.Year = Convert.ToInt16(cmbSelectBudgetYear.GetSelectedString());
                ARow.Revision = CreateBudgetRevisionRow(FLedgerNumber, ARow.Year);
                ARow.EndEdit();
            }

            return true;
        }
        private void ShowDetailsManual(ABudgetRow ARow)
        {
            ClearBudgetTypeTextboxesExcept("None");
            UpdateCurrencyCode();

            if ((ARow == null) || ((grdDetails.Rows.Count < 2) && rgrBudgetTypeCode.Enabled))
            {
                FBudgetSequence = -1;
                EnableBudgetEntry(false);
                return;
            }
            else if (rgrBudgetTypeCode.Enabled == false)
            {
                EnableBudgetEntry(true);
            }

            if (ARow.BudgetTypeCode == MFinanceConstants.BUDGET_SPLIT)
            {
                rbtSplit.Checked = true;
                DisplayBudgetTypeSplit();
            }
            else if (ARow.BudgetTypeCode == MFinanceConstants.BUDGET_ADHOC)
            {
                rbtAdHoc.Checked = true;
                DisplayBudgetTypeAdhoc();
            }
            else if (ARow.BudgetTypeCode == MFinanceConstants.BUDGET_SAME)
            {
                rbtSame.Checked = true;
                DisplayBudgetTypeSame();
            }
            else if (ARow.BudgetTypeCode == MFinanceConstants.BUDGET_INFLATE_BASE)
            {
                rbtInflateBase.Checked = true;
                DisplayBudgetTypeInflateBase();
            }
            else          //ARow.BudgetTypeCode = MFinanceConstants.BUDGET_INFLATE_N
            {
                rbtInflateN.Checked = true;
                DisplayBudgetTypeInflateN();
            }

            FBudgetSequence = ARow.BudgetSequence;

            pnlBudgetTypeAdhoc.Visible = rbtAdHoc.Checked;
            pnlBudgetTypeSame.Visible = rbtSame.Checked;
            pnlBudgetTypeSplit.Visible = rbtSplit.Checked;
            pnlBudgetTypeInflateN.Visible = rbtInflateN.Checked;
            pnlBudgetTypeInflateBase.Visible = rbtInflateBase.Checked;
        }
Ejemplo n.º 12
0
        public static bool GenBudgetForNextYear(int ALedgerNumber, int ABudgetSeq, string AForecastType)
        {
            bool retVal = false;

            decimal budgetSum;
            decimal priorAmount         = 0;
            decimal afterAmount         = 0;
            int     periodOfChange      = 0;
            int     gLMSequenceThisYear = 0;
            int     gLMSequenceLastYear = 0;

            ALedgerTable ledgerTable          = FMainDS.ALedger;
            ALedgerRow   ledgerRow            = (ALedgerRow)ledgerTable.Rows[0];
            int          currentFinancialYear = ledgerRow.CurrentFinancialYear;
            int          currentPeriod        = ledgerRow.CurrentPeriod;
            int          numAccPeriods        = ledgerRow.NumberOfAccountingPeriods;

            ABudgetTable budgetTable = FMainDS.ABudget;
            ABudgetRow   budgetRow   = (ABudgetRow)budgetTable.Rows.Find(new object[] { ABudgetSeq });

            #region  Validate Method Parameters

            if ((budgetRow == null) || (budgetRow.LedgerNumber != ledgerRow.LedgerNumber) || (budgetRow.Year != currentFinancialYear))
            {
                TLogging.Log("GenBudgetForNextYear: either could not find budget sequence " + ABudgetSeq.ToString() +
                             "or the sequence does not apply to ledger " + ledgerRow.LedgerNumber.ToString() +
                             "or to ledger current year " + currentFinancialYear.ToString());
                return(retVal);
            }

            if (ALedgerNumber != ledgerRow.LedgerNumber)
            {
                TLogging.Log("GenBudgetForNextYear: method parameter ALedgerNumber is " + ALedgerNumber.ToString() +
                             " but the data set expected the ledger to be " + ledgerRow.LedgerNumber.ToString());
            }

            #endregion

            string accountCode    = budgetRow.AccountCode;
            string costCentreCode = budgetRow.CostCentreCode;

            gLMSequenceThisYear = TCommonBudgetMaintain.GetGLMSequenceForBudget(ALedgerNumber,
                                                                                accountCode,
                                                                                costCentreCode,
                                                                                currentFinancialYear);

            gLMSequenceLastYear = TCommonBudgetMaintain.GetGLMSequenceForBudget(ALedgerNumber,
                                                                                accountCode,
                                                                                costCentreCode,
                                                                                (currentFinancialYear - 1));
            try
            {
                //Update the budget status
                budgetRow.BeginEdit();
                budgetRow.BudgetStatus = false;
                budgetRow.EndEdit();

                string budgetType = budgetRow.BudgetTypeCode;

                decimal budgetAmount    = 0;
                decimal actualAmount    = 0;
                bool    validBudgetType = true;

                switch (budgetType)
                {
                case MFinanceConstants.BUDGET_ADHOC:
                case MFinanceConstants.BUDGET_INFLATE_BASE:

                    for (int i = 1; i < currentPeriod; i++)
                    {
                        //Set budget period
                        actualAmount = TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                       gLMSequenceLastYear,
                                                                       gLMSequenceThisYear,
                                                                       i,
                                                                       numAccPeriods,
                                                                       currentFinancialYear,
                                                                       (currentFinancialYear - 1),
                                                                       false,
                                                                       MFinanceConstants.CURRENCY_BASE);
                        SetBudgetPeriodBaseAmount(ABudgetSeq, i, actualAmount);
                    }

                    for (int j = currentPeriod; j <= MFinanceConstants.MAX_PERIODS; j++)
                    {
                        if (AForecastType == MFinanceConstants.FORECAST_TYPE_BUDGET)
                        {
                            budgetAmount =
                                Math.Round(TCommonBudgetMaintain.GetBudget(gLMSequenceThisYear, -1, j, numAccPeriods,
                                                                           false,
                                                                           MFinanceConstants.CURRENCY_BASE));
                            SetBudgetPeriodBaseAmount(ABudgetSeq, j, budgetAmount);
                        }
                        else
                        {
                            actualAmount = TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                           gLMSequenceLastYear,
                                                                           gLMSequenceThisYear,
                                                                           j,
                                                                           numAccPeriods,
                                                                           currentFinancialYear,
                                                                           (currentFinancialYear - 1),
                                                                           false,
                                                                           MFinanceConstants.CURRENCY_BASE);
                            SetBudgetPeriodBaseAmount(ABudgetSeq, j, actualAmount);
                        }
                    }

                    break;

                case MFinanceConstants.BUDGET_SAME:                          //because this case has no code it will fall through to the next case until it finds code.
                case MFinanceConstants.BUDGET_SPLIT:

                    if ((currentPeriod - 1) != 0)
                    {
                        budgetSum =
                            TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                            gLMSequenceThisYear,
                                                            -1,
                                                            (currentPeriod - 1),
                                                            numAccPeriods,
                                                            currentFinancialYear,
                                                            currentFinancialYear,
                                                            true,
                                                            MFinanceConstants.CURRENCY_BASE);
                    }
                    else
                    {
                        budgetSum = 0;
                    }

                    if (AForecastType == MFinanceConstants.FORECAST_TYPE_BUDGET)
                    {
                        for (int i = currentPeriod; i <= numAccPeriods; i++)
                        {
                            budgetSum += TCommonBudgetMaintain.GetBudget(gLMSequenceThisYear,
                                                                         -1,
                                                                         i,
                                                                         numAccPeriods,
                                                                         false,
                                                                         MFinanceConstants.CURRENCY_BASE);
                        }
                    }
                    else
                    {
                        if (currentPeriod > 1)
                        {
                            budgetSum += TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                         gLMSequenceLastYear,
                                                                         gLMSequenceThisYear,
                                                                         numAccPeriods,
                                                                         numAccPeriods,
                                                                         currentFinancialYear,
                                                                         (currentFinancialYear - 1),
                                                                         true,
                                                                         MFinanceConstants.CURRENCY_BASE) -
                                         TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                         gLMSequenceLastYear,
                                                                         gLMSequenceThisYear,
                                                                         (currentPeriod - 1),
                                                                         numAccPeriods,
                                                                         currentFinancialYear,
                                                                         (currentFinancialYear - 1),
                                                                         true,
                                                                         MFinanceConstants.CURRENCY_BASE);
                        }
                        else
                        {
                            budgetSum += TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                         gLMSequenceLastYear,
                                                                         gLMSequenceThisYear,
                                                                         numAccPeriods,
                                                                         numAccPeriods,
                                                                         currentFinancialYear,
                                                                         (currentFinancialYear - 1),
                                                                         true,
                                                                         MFinanceConstants.CURRENCY_BASE);
                        }
                    }

                    budgetSum = budgetSum / numAccPeriods;

                    for (int i = 1; i <= numAccPeriods; i++)
                    {
                        SetBudgetPeriodBaseAmount(ABudgetSeq, i, Math.Round(budgetSum));
                    }

                    break;

                case MFinanceConstants.BUDGET_INFLATE_N:

                    for (int i = 1; i <= numAccPeriods; i++)
                    {
                        if (GetBudgetPeriodAmount(ABudgetSeq, i) != GetBudgetPeriodAmount(ABudgetSeq, 1))
                        {
                            periodOfChange = i - 1;
                            break;
                        }
                    }

                    /* Calculate average prior to change and after change. */
                    if (periodOfChange < (currentPeriod - 1))
                    {
                        priorAmount = TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                      gLMSequenceThisYear,
                                                                      -1,
                                                                      periodOfChange,
                                                                      numAccPeriods,
                                                                      currentFinancialYear,
                                                                      currentFinancialYear,
                                                                      true,
                                                                      MFinanceConstants.CURRENCY_BASE);

                        afterAmount =
                            TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                            gLMSequenceThisYear,
                                                            -1,
                                                            (currentPeriod - 1),
                                                            numAccPeriods,
                                                            currentFinancialYear,
                                                            currentFinancialYear,
                                                            true,
                                                            MFinanceConstants.CURRENCY_BASE) -
                            TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                            gLMSequenceThisYear,
                                                            -1,
                                                            periodOfChange + 1,
                                                            numAccPeriods,
                                                            currentFinancialYear,
                                                            currentFinancialYear,
                                                            true,
                                                            MFinanceConstants.CURRENCY_BASE);

                        if (AForecastType == MFinanceConstants.FORECAST_TYPE_BUDGET)
                        {
                            for (int i = currentPeriod; i <= numAccPeriods; i++)
                            {
                                afterAmount += TCommonBudgetMaintain.GetBudget(gLMSequenceThisYear,
                                                                               -1,
                                                                               i,
                                                                               numAccPeriods,
                                                                               false,
                                                                               MFinanceConstants.CURRENCY_BASE);
                            }
                        }
                        else
                        {
                            afterAmount += TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                           gLMSequenceLastYear,
                                                                           gLMSequenceThisYear,
                                                                           numAccPeriods,
                                                                           numAccPeriods,
                                                                           currentFinancialYear,
                                                                           (currentFinancialYear - 1),
                                                                           true,
                                                                           MFinanceConstants.CURRENCY_BASE) -
                                           TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                           gLMSequenceLastYear,
                                                                           gLMSequenceThisYear,
                                                                           currentPeriod,
                                                                           numAccPeriods,
                                                                           currentFinancialYear,
                                                                           (currentFinancialYear - 1),
                                                                           true,
                                                                           MFinanceConstants.CURRENCY_BASE);
                        }
                    }
                    else                              /* Period of change HAS NOT taken place. */
                    {
                        if ((currentPeriod - 1) != 0)
                        {
                            priorAmount =
                                TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                gLMSequenceThisYear,
                                                                -1,
                                                                (currentPeriod - 1),
                                                                numAccPeriods,
                                                                currentFinancialYear,
                                                                currentFinancialYear,
                                                                true,
                                                                MFinanceConstants.CURRENCY_BASE);
                        }
                        else
                        {
                            priorAmount = 0;
                        }

                        if (AForecastType == MFinanceConstants.FORECAST_TYPE_BUDGET)
                        {
                            for (int i = currentPeriod; i <= periodOfChange; i++)
                            {
                                priorAmount += TCommonBudgetMaintain.GetBudget(gLMSequenceThisYear,
                                                                               -1,
                                                                               i,
                                                                               numAccPeriods,
                                                                               false,
                                                                               MFinanceConstants.CURRENCY_BASE);
                            }
                        }
                        else
                        {
                            priorAmount = TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                          gLMSequenceLastYear,
                                                                          gLMSequenceThisYear,
                                                                          periodOfChange,
                                                                          numAccPeriods,
                                                                          currentFinancialYear,
                                                                          (currentFinancialYear - 1),
                                                                          true,
                                                                          MFinanceConstants.CURRENCY_BASE) -
                                          TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                          gLMSequenceLastYear,
                                                                          gLMSequenceThisYear,
                                                                          currentPeriod,
                                                                          numAccPeriods,
                                                                          currentFinancialYear,
                                                                          (currentFinancialYear - 1),
                                                                          true,
                                                                          MFinanceConstants.CURRENCY_BASE);
                        }

                        if (AForecastType == MFinanceConstants.FORECAST_TYPE_BUDGET)
                        {
                            for (int i = (periodOfChange + 1); i <= numAccPeriods; i++)
                            {
                                afterAmount += TCommonBudgetMaintain.GetBudget(gLMSequenceThisYear,
                                                                               -1,
                                                                               i,
                                                                               numAccPeriods,
                                                                               false,
                                                                               MFinanceConstants.CURRENCY_BASE);
                            }
                        }
                        else
                        {
                            afterAmount = TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                          gLMSequenceLastYear,
                                                                          gLMSequenceThisYear,
                                                                          numAccPeriods,
                                                                          numAccPeriods,
                                                                          currentFinancialYear,
                                                                          (currentFinancialYear - 1),
                                                                          true,
                                                                          MFinanceConstants.CURRENCY_BASE) -
                                          TCommonBudgetMaintain.GetActual(ALedgerNumber,
                                                                          gLMSequenceLastYear,
                                                                          gLMSequenceThisYear,
                                                                          (periodOfChange + 1),
                                                                          numAccPeriods,
                                                                          currentFinancialYear,
                                                                          (currentFinancialYear - 1),
                                                                          true,
                                                                          MFinanceConstants.CURRENCY_BASE);
                        }

                        /* Dividing after sum by prior sum gives rate of inflation. */
                        priorAmount = priorAmount / periodOfChange;
                        afterAmount = afterAmount / (numAccPeriods - periodOfChange);

                        for (int i = 1; i <= periodOfChange; i++)
                        {
                            SetBudgetPeriodBaseAmount(ABudgetSeq, i, Math.Round(priorAmount, 0));
                        }

                        for (int i = (periodOfChange + 1); i <= numAccPeriods; i++)
                        {
                            SetBudgetPeriodBaseAmount(ABudgetSeq, i, Math.Round(afterAmount, 0));
                        }
                    }

                    break;

                default:
                    validBudgetType = false;
                    break;
                }

                if (!validBudgetType)
                {
                    throw new InvalidOperationException(String.Format("Invalid budget type of: {0} for Budget Seq.: {1}",
                                                                      budgetType,
                                                                      budgetRow.BudgetSequence));
                }

                retVal = true;
            }
            catch (Exception)
            {
                throw;
            }

            return(retVal);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Post a budget
        /// </summary>
        private static void PostBudget(int ALedgerNumber, ABudgetRow ABudgetRow, List <ABudgetPeriodRow>ABudgetPeriodRows)
        {
            GLPostingDS.AGeneralLedgerMaster.DefaultView.Sort = String.Format("{0},{1},{2},{3}",
                AGeneralLedgerMasterTable.GetLedgerNumberDBName(),
                AGeneralLedgerMasterTable.GetYearDBName(),
                AGeneralLedgerMasterTable.GetAccountCodeDBName(),
                AGeneralLedgerMasterTable.GetCostCentreCodeDBName());

            int glmRowIndex = GLPostingDS.AGeneralLedgerMaster.DefaultView.Find(new object[] {
                    ALedgerNumber,
                    ABudgetRow.Year,
                    ABudgetRow.AccountCode,
                    ABudgetRow.CostCentreCode
                });

            if (glmRowIndex == -1)
            {
                TGLPosting.CreateGLMYear(ref GLPostingDS,
                    ALedgerNumber,
                    ABudgetRow.Year,
                    ABudgetRow.AccountCode,
                    ABudgetRow.CostCentreCode);
                glmRowIndex = GLPostingDS.AGeneralLedgerMaster.DefaultView.Find(new object[] {
                        ALedgerNumber,
                        ABudgetRow.Year,
                        ABudgetRow.AccountCode,
                        ABudgetRow.CostCentreCode
                    });
            }

            int GLMSequence = ((AGeneralLedgerMasterRow)GLPostingDS.AGeneralLedgerMaster.DefaultView[glmRowIndex].Row).GlmSequence;

            /* Update totals for the General Ledger Master period record. */
            foreach (ABudgetPeriodRow BPR in ABudgetPeriodRows)
            {
                AddBudgetValue(GLMSequence, BPR.PeriodNumber, BPR.BudgetBase);
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Unpost a budget
        /// </summary>
        /// <param name="ABudgetRow"></param>
        /// <param name="ALedgerNumber"></param>
        /// <returns>true if it seemed to go OK</returns>
        private static bool UnPostBudget(ABudgetRow ABudgetRow, int ALedgerNumber)
        {
            /* post the negative budget, which will result in an empty a_glm_period.budget */

            // get the current budget value for each GLM Period, and unpost that budget

            GLPostingDS.AGeneralLedgerMaster.DefaultView.Sort = String.Format("{0},{1},{2},{3}",
                AGeneralLedgerMasterTable.GetLedgerNumberDBName(),
                AGeneralLedgerMasterTable.GetYearDBName(),
                AGeneralLedgerMasterTable.GetAccountCodeDBName(),
                AGeneralLedgerMasterTable.GetCostCentreCodeDBName());

            int glmIndex = GLPostingDS.AGeneralLedgerMaster.DefaultView.Find(
                new object[] { ALedgerNumber, ABudgetRow.Year, ABudgetRow.AccountCode, ABudgetRow.CostCentreCode });

            if (glmIndex != -1)
            {
                AGeneralLedgerMasterRow glmRow = (AGeneralLedgerMasterRow)GLPostingDS.AGeneralLedgerMaster.DefaultView[glmIndex].Row;

                List <ABudgetPeriodRow>budgetPeriods = new List <ABudgetPeriodRow>();

                for (int Period = 1; Period <= GLPostingDS.ALedger[0].NumberOfAccountingPeriods; Period++)
                {
                    AGeneralLedgerMasterPeriodRow GeneralLedgerMasterPeriodRow =
                        (AGeneralLedgerMasterPeriodRow)GLPostingDS.AGeneralLedgerMasterPeriod.Rows.Find(
                            new object[] { glmRow.GlmSequence, Period });

                    ABudgetPeriodRow budgetPeriodRow = FBudgetTDS.ABudgetPeriod.NewRowTyped(true);
                    budgetPeriodRow.PeriodNumber = Period;
                    budgetPeriodRow.BudgetSequence = ABudgetRow.BudgetSequence;

                    // use negative amount for unposting
                    budgetPeriodRow.BudgetBase = -1 * GeneralLedgerMasterPeriodRow.BudgetBase;

                    // do not add to the budgetperiod table, but to our local list
                    budgetPeriods.Add(budgetPeriodRow);
                }

                PostBudget(ALedgerNumber, ABudgetRow, budgetPeriods);
            }

            ABudgetRow.BudgetStatus = false;                 //i.e. unposted

            return true;
        }
        /// <summary>
        /// Performs checks to determine whether a deletion of the current
        ///  row is permissable
        /// </summary>
        /// <param name="ARowToDelete">the currently selected row to be deleted</param>
        /// <param name="ADeletionQuestion">can be changed to a context-sensitive deletion confirmation question</param>
        /// <returns>true if user is permitted and able to delete the current row</returns>
        private bool PreDeleteManual(ABudgetRow ARowToDelete, ref string ADeletionQuestion)
        {
            ADeletionQuestion = String.Format(Catalog.GetString(
                    "You have chosen to delete the current budget for:{0}{0}" +
                    "    Year Ending: {1}, Cost Centre: {2}, Account: {3}, Type: {4}.{0}{0}" +
                    "Do you really want to delete it?"),
                Environment.NewLine,
                cmbSelectBudgetYear.GetSelectedDescription(),
                ARowToDelete.CostCentreCode,
                ARowToDelete.AccountCode,
                ARowToDelete.BudgetTypeCode);

            return true;

            //TODO: When budget revisioning is added:
            //"You have chosen to delete Budget: {0}    Year Ending: {1}, Cost Centre: {2}, Account: {3}, Type: {4}, Revision: {5}.{0}{0}Do you really want to delete it?"),
            //                ARowToDelete.Revision,
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Process the account code parent codes
        /// </summary>
        private static void ProcessAccountParent(
            int ALedgerNumber,
            string CurrAccountCode,
            bool ADebitCreditIndicator,
            string ACostCentreList,
            ABudgetRow ABudgetRow,
            List <ABudgetPeriodRow> ABudgetPeriods)
        {
            AAccountRow AccountRow = (AAccountRow)GLPostingDS.AAccount.Rows.Find(new object[] { ALedgerNumber, CurrAccountCode });

            AAccountHierarchyDetailRow AccountHierarchyDetailRow = (AAccountHierarchyDetailRow)GLPostingDS.AAccountHierarchyDetail.Rows.Find(
                new object[] { ALedgerNumber, MFinanceConstants.ACCOUNT_HIERARCHY_STANDARD, CurrAccountCode });

            if (AccountHierarchyDetailRow != null)
            {
                string AccountCodeToReportTo = AccountHierarchyDetailRow.AccountCodeToReportTo;

                if ((AccountCodeToReportTo != null) && (AccountCodeToReportTo != string.Empty))
                {
                    /* Recursively call this procedure. */
                    ProcessAccountParent(
                        ALedgerNumber,
                        AccountCodeToReportTo,
                        ADebitCreditIndicator,
                        ACostCentreList,
                        ABudgetRow,
                        ABudgetPeriods);
                }
            }

            int DebitCreditMultiply = 1;             /* needed if the debit credit indicator is not the same */

            /* If the account has the same db/cr indicator as the original
             *         account for which the budget was created, add the budget amount.
             *         Otherwise, subtract. */
            if (AccountRow.DebitCreditIndicator != ADebitCreditIndicator)
            {
                DebitCreditMultiply = -1;
            }

            string[] CostCentres = ACostCentreList.Split(':');
            string   AccCode     = AccountRow.AccountCode;

            /* For each associated Cost Centre, update the General Ledger Master. */
            foreach (string CostCentreCode in CostCentres)
            {
                int glmRowIndex = GLPostingDS.AGeneralLedgerMaster.DefaultView.Find(new object[] { ALedgerNumber, ABudgetRow.Year, AccCode,
                                                                                                   CostCentreCode });

                if (glmRowIndex == -1)
                {
                    TGLPosting.CreateGLMYear(ref GLPostingDS, ALedgerNumber, ABudgetRow.Year, AccCode, CostCentreCode);
                    glmRowIndex = GLPostingDS.AGeneralLedgerMaster.DefaultView.Find(new object[] { ALedgerNumber, ABudgetRow.Year, AccCode,
                                                                                                   CostCentreCode });
                }

                int GLMSequence = ((AGeneralLedgerMasterRow)GLPostingDS.AGeneralLedgerMaster.DefaultView[glmRowIndex].Row).GlmSequence;

                /* Update totals for the General Ledger Master period record. */
                foreach (ABudgetPeriodRow BPR in ABudgetPeriods)
                {
                    AddBudgetValue(GLMSequence, BPR.PeriodNumber, DebitCreditMultiply * BPR.BudgetBase);
                }
            }
        }