public DiaryDate(string baseDate, int months, int days, bool businessDays, bool bonding)
 {
     BaseDate       = new DiaryDateOption(baseDate);
     DaysToAdd      = days;
     MonthsToAdd    = months;
     IsBusinessDays = businessDays;
     IsBonding      = bonding;
 }
        public DiaryDate(string date)
        {
            if (date.ToLower().Contains("str2date('14/'+copy(mplusstr((appdate)"))
            {
                IsBonding      = true;
                BaseDate       = new DiaryDateOption("appdate");
                IsBusinessDays = false;
                DaysToAdd      = 0;
                MonthsToAdd    = 1;
            }
            else
            {
                //remove any blank space
                string str = date.Trim(' ');
                //check for a working days calculation
                if (str.ToLower().Contains("addworkingdays"))
                {
                    IsBusinessDays = true;
                    int    startIndex = str.IndexOf('(') + 1;
                    int    endIndex   = str.IndexOf(',');
                    string temp       = str.Substring(startIndex, endIndex - startIndex);
                    DaysToAdd = int.Parse(temp);
                    str       = str.Substring(endIndex + 1, str.Length - endIndex - 1);
                }

                //non-working days will be at the end so handle that first
                //days cannot exceed 2 digits (otherwise it is a month
                //so look for a plus or a minus symbol
                int minusIndex = str.LastIndexOf("-");
                int plusIndex  = str.LastIndexOf("+");
                int length     = str.Length;
                //check minus first
                if (minusIndex != -1)
                {
                    //Then we have a day reduction
                    //capture everything from that point on
                    DaysToAdd = int.Parse(str.Substring(minusIndex));
                    //reduce the string length
                    str = str.Substring(0, minusIndex);
                }
                else if (plusIndex != -1)
                {
                    //Then we have a day addition
                    //capture everything from that point on
                    DaysToAdd = int.Parse(str.Substring(plusIndex));
                    //reduce the string length
                    str = str.Substring(0, plusIndex);
                }

                //now handle the months
                if (str.ToUpper().Contains("MPLUS("))
                {
                    //we have an adjustment the value will be 1 or 2 digits
                    //after a bracket
                    //reset length
                    length = str.Length;
                    //remove the trailing bracket
                    str = str.Substring(0, length - 1);
                    int months = 0;
                    if (int.TryParse(str.Substring(length - 3), out months))
                    {
                        //remove the digits and comma
                        str = str.Substring(0, length - 3);
                        str = str.Replace(',', ' ');
                        str = str.Trim();
                    }
                    else if (int.TryParse(str.Substring(length - 2), out months))
                    {
                        //remove the digit and comma
                        str = str.Substring(0, length - 2);
                        str = str.Replace(',', ' ');
                        str = str.Trim();
                    }
                    MonthsToAdd = months;
                    //reset length
                    length = str.Length;
                    //remove the mplus
                    str = str.Substring(5, length - 5);
                }
                //date becomes whatever is left, this will need to be check on return
                //just remove any remaining commas and brackets
                date     = str.Trim(',', '(', ')');
                BaseDate = new DiaryDateOption(date);
            }
        }