public static DB_ChartOfAccountCodeMargin GetChartOfAccountCodeMargin(ChartOfAccountCodeMargin_p chartOfAccountCodeMargin)
 {
     if (chartOfAccountCodeMargin == null)
     {
         return(DB_ChartOfAccountCodeMargin.None);
     }
     return((DB_ChartOfAccountCodeMargin)Convert.ToInt32(chartOfAccountCodeMargin.ID));
 }
        public static List <ChartOfAccount_cu> GetChartOfAccountOfPreviousCodeMargin(object chartOfAccountCodeMarginID, bool isDebit)
        {
            if (chartOfAccountCodeMarginID == null)
            {
                return(null);
            }

            ChartOfAccountCodeMargin_p codeMargin =
                ChartOfAccountCodeMargin_p.ItemsList.Find(
                    item => Convert.ToInt32(item.ID).Equals(Convert.ToInt32(chartOfAccountCodeMarginID)));

            if (codeMargin == null)
            {
                return(null);
            }
            DB_ChartOfAccountCodeMargin chartOfAccountCodeMargin = (DB_ChartOfAccountCodeMargin)Convert.ToInt32(codeMargin.ID);

            return(GetChartOfAccountOfPreviousCodeMargin(chartOfAccountCodeMargin, isDebit));
        }
        public static int GetChartOfAccountCodeMarginNumberOfDigits(object chartOfAccountCodeMarginID)
        {
            ChartOfAccountCodeMargin_p chartOfAccountCode = GetChartOfAccountCodeMargin(chartOfAccountCodeMarginID);

            if (chartOfAccountCode == null)
            {
                return(0);
            }

            int numberOfDigits = 0;
            DB_ChartOfAccountCodeMargin chosenAccountCodeMargin = (DB_ChartOfAccountCodeMargin)Convert.ToInt32(chartOfAccountCode.ID);

            switch (chosenAccountCodeMargin)
            {
            case DB_ChartOfAccountCodeMargin.FirstMargin:
                numberOfDigits = numberOfDigits + chartOfAccountCode.NumberOfDigits;
                break;

            case DB_ChartOfAccountCodeMargin.SecondMargin:
                numberOfDigits = numberOfDigits + Convert.ToInt32(chartOfAccountCode.NumberOfDigits) +
                                 GetChartOfAccountCodeMarginNumberOfDigits((int)DB_ChartOfAccountCodeMargin.FirstMargin);
                break;

            case DB_ChartOfAccountCodeMargin.ThirdMargin:
                numberOfDigits = numberOfDigits + Convert.ToInt32(chartOfAccountCode.NumberOfDigits) +
                                 GetChartOfAccountCodeMarginNumberOfDigits((int)DB_ChartOfAccountCodeMargin.SecondMargin);
                break;

            case DB_ChartOfAccountCodeMargin.FourthMargin:
                numberOfDigits = numberOfDigits + Convert.ToInt32(chartOfAccountCode.NumberOfDigits) +
                                 GetChartOfAccountCodeMarginNumberOfDigits((int)DB_ChartOfAccountCodeMargin.ThirdMargin);
                break;

            case DB_ChartOfAccountCodeMargin.FifthMargin:
                numberOfDigits = numberOfDigits + Convert.ToInt32(chartOfAccountCode.NumberOfDigits) +
                                 GetChartOfAccountCodeMarginNumberOfDigits((int)DB_ChartOfAccountCodeMargin.FourthMargin);
                break;
            }

            return(numberOfDigits);
        }
        public static string GetNextChartOfAccountSerial(DB_ChartOfAccountCodeMargin chartOfAccountCodeMargin,
                                                         object parentChartofAccountID)
        {
            string nextSerial = "1";

            if (ChartOfAccount_cu.ItemsList.Count == 0)
            {
                return(nextSerial);
            }

            ChartOfAccount_cu parentChartOfAccount = null;

            if (parentChartofAccountID != null)
            {
                parentChartOfAccount =
                    ChartOfAccount_cu.ItemsList.Find(item => Convert.ToInt32(item.ID).Equals(Convert.ToInt32(parentChartofAccountID)));
            }

            long parentSerial = -1;

            if (parentChartOfAccount != null)
            {
                parentSerial = parentChartOfAccount.Serial;
            }

            List <ChartOfAccount_cu> chartOfAccountsList =
                ChartOfAccount_cu.ItemsList.FindAll(
                    item => Convert.ToInt32(item.ChartOfAccountCodeMargin_P_ID).Equals((int)chartOfAccountCodeMargin));

            if (parentChartOfAccount != null)
            {
                chartOfAccountsList =
                    chartOfAccountsList.FindAll(
                        item =>
                        item.ParentChartOfAccount_CU_ID != null &&
                        Convert.ToInt32(item.ParentChartOfAccount_CU_ID).Equals(Convert.ToInt32(parentChartofAccountID)));
            }
            ChartOfAccountCodeMargin_p chartOfAccountCodeMarginP =
                ChartOfAccountCodeMargin_p.ItemsList.Find(
                    item => Convert.ToInt32(item.ID).Equals(Convert.ToInt32(chartOfAccountCodeMargin)));
            long              allowedNumerOfDigits                   = GetChartOfAccountCodeMarginNumberOfDigits(Convert.ToInt32(chartOfAccountCodeMargin));
            long              previousAllowedNumberOfDigits          = 0;
            long              chartOfAccountCodeMarginNumberOfDigits = 0;
            string            numberOfZeros      = "";
            ChartOfAccount_cu lastChartOfAccount = null;

            if (chartOfAccountsList.Count > 0)
            {
                lastChartOfAccount = chartOfAccountsList.OrderByDescending(item => item.Serial).ToList().First();
            }
            char[] arry  = null;
            int    index = 0;

            switch (chartOfAccountCodeMargin)
            {
                #region FirstMargin
            case DB_ChartOfAccountCodeMargin.FirstMargin:
                if (chartOfAccountsList.Count == 0)
                {
                    return(nextSerial);
                }
                if (lastChartOfAccount == null)
                {
                    return(nextSerial);
                }
                nextSerial = Convert.ToString(lastChartOfAccount.Serial + 1);
                if (nextSerial.Length > allowedNumerOfDigits)
                {
                    return(String.Empty);
                }
                break;
                #endregion

                #region SecondMargin
            case DB_ChartOfAccountCodeMargin.SecondMargin:
                if (chartOfAccountsList.Count == 0)
                {
                    return("0" + nextSerial);
                }
                if (lastChartOfAccount == null)
                {
                    return("0" + nextSerial);
                }
                nextSerial = Convert.ToString(lastChartOfAccount.Serial + 1);
                previousAllowedNumberOfDigits =
                    GetChartOfAccountCodeMarginNumberOfDigits(Convert.ToInt32(DB_ChartOfAccountCodeMargin.FirstMargin));
                arry = nextSerial.ToCharArray();
                if (arry.Length == 0)
                {
                    return(string.Empty);
                }
                index      = 0;
                nextSerial = "";
                foreach (char character in arry)
                {
                    index++;
                    if (index > previousAllowedNumberOfDigits)
                    {
                        nextSerial = nextSerial + character;
                    }
                }
                if (nextSerial.Length > allowedNumerOfDigits)
                {
                    return(String.Empty);
                }
                break;
                #endregion

                #region ThirdMargin
            case DB_ChartOfAccountCodeMargin.ThirdMargin:
                if (chartOfAccountsList.Count == 0)
                {
                    return("0" + nextSerial);
                }
                if (lastChartOfAccount == null)
                {
                    return("0" + nextSerial);
                }
                nextSerial = Convert.ToString(lastChartOfAccount.Serial + 1);
                previousAllowedNumberOfDigits =
                    GetChartOfAccountCodeMarginNumberOfDigits(Convert.ToInt32(DB_ChartOfAccountCodeMargin.SecondMargin));
                arry = nextSerial.ToCharArray();
                if (arry.Length == 0)
                {
                    return(string.Empty);
                }
                index      = 0;
                nextSerial = "";
                foreach (char character in arry)
                {
                    index++;
                    if (index > previousAllowedNumberOfDigits)
                    {
                        nextSerial = nextSerial + character;
                    }
                }
                if (nextSerial.Length > allowedNumerOfDigits)
                {
                    return(String.Empty);
                }
                break;
                #endregion

                #region FourthMargin
            case DB_ChartOfAccountCodeMargin.FourthMargin:
                if (chartOfAccountsList.Count == 0)
                {
                    return("0" + nextSerial);
                }
                if (lastChartOfAccount == null)
                {
                    return("0" + nextSerial);
                }
                nextSerial = Convert.ToString(lastChartOfAccount.Serial + 1);
                previousAllowedNumberOfDigits =
                    GetChartOfAccountCodeMarginNumberOfDigits(Convert.ToInt32(DB_ChartOfAccountCodeMargin.ThirdMargin));
                arry = nextSerial.ToCharArray();
                if (arry.Length == 0)
                {
                    return(string.Empty);
                }
                index      = 0;
                nextSerial = "";
                foreach (char character in arry)
                {
                    index++;
                    if (index > previousAllowedNumberOfDigits)
                    {
                        nextSerial = nextSerial + character;
                    }
                }
                if (nextSerial.Length > allowedNumerOfDigits)
                {
                    return(String.Empty);
                }
                break;
                #endregion

                #region FifthMargin
            case DB_ChartOfAccountCodeMargin.FifthMargin:
                if (chartOfAccountsList.Count == 0)
                {
                    return("00" + nextSerial);
                }
                if (lastChartOfAccount == null)
                {
                    return("00" + nextSerial);
                }

                previousAllowedNumberOfDigits =
                    GetChartOfAccountCodeMarginNumberOfDigits(Convert.ToInt32(DB_ChartOfAccountCodeMargin.FourthMargin));
                allowedNumerOfDigits = allowedNumerOfDigits - previousAllowedNumberOfDigits;

                for (int i = 0; i < allowedNumerOfDigits; i++)
                {
                    numberOfZeros = numberOfZeros + "0";
                }

                nextSerial = Convert.ToString(chartOfAccountsList.Count + 1);
                nextSerial = Convert.ToInt64(nextSerial).ToString(numberOfZeros);
                break;
                #endregion
            }

            return(nextSerial);
        }