protected void inserting_cityperdiem(object sender, EventArgs e)
        {
            var city = tbxCity.Text;
            var rate = tbxCityPerDiemRate.Text;
            double rateDouble;

            if (!double.TryParse(rate, out rateDouble))
                return;

            var billingController = new BillingDefaultCityRateController();
            var billingCityRateController = new BillingCityRateController();
            var billingPeriodAccountJoinController = new BillingPeriodAccountsJoinController();

            var newDefaultCityRate = billingController.InsertObjReturn(Convert.ToInt32(BillingAccountDropDown.SelectedValue), rateDouble, city);
            var openPeriodAccountJoinCol =
                billingPeriodAccountJoinController.FetchOpenPeriodByAccountId(
                    Convert.ToInt32(BillingAccountDropDown.SelectedValue));

            //add new city to active billing periods
            foreach (var openPeriod in openPeriodAccountJoinCol)
            {
                billingCityRateController.Insert(newDefaultCityRate.Id, openPeriod.Id, rateDouble);
            }

            tbxCity.Text = string.Empty;
            tbxCityPerDiemRate.Text = string.Empty;

            CityPerDiemGridView.DataBind();
        }
        public void Insert(Int32 PeriodID, Int32 AccountID)
        {

            /* step 1 is to create our row in BillingPeriodAccounts table */

            BillingAccount billingAccount = new BillingAccountController().FetchByID(AccountID)[0];

            Insert(PeriodID, AccountID, billingAccount.Defaultperdiemrate, false, null, null, null, null, billingAccount.Defaultmileagerate);

            BillingPeriodAccount current = new BillingPeriodAccountCollection().Where(BillingPeriodAccount.Columns.Periodid, PeriodID).Where(BillingPeriodAccount.Columns.Accountid, AccountID).Load()[0];

            int periodaccountid = current.Id;

            /* step 2 is for each rate group, pull out the default value from DefaultBillingRates and Insert into BillingRates for this BillingPeriodAccount*/

            BillingRateController billingRateController = new BillingRateController();
            foreach (RateGroup rategroup in new RateGroupController().FetchAll())
            {
                double defaultrate = new DefaultBillingRateController().FetchRate(AccountID, rategroup.Id);

                billingRateController.Insert(periodaccountid, rategroup.Id, defaultrate, false, null, null, null, null);
            }

            /* step 3 is for each City Per Diem rate record, pull out the default value from  BillingDefaultCityRates and Insert into BillingCityRates for this BillingPeriodAccount*/
            var billingCityRateController = new BillingCityRateController();

            foreach (var cityRateGroup in new BillingDefaultCityRateController().FetchAllActiveByAccountId(AccountID))
            {
                billingCityRateController.Insert(cityRateGroup.Id, periodaccountid, cityRateGroup.DefaultPerDiemRate);
            }
        }
        public void Insert(Int32 PeriodID, Int32 AccountID)
        {
            /* step 1 is to create our row in BillingPeriodAccounts table */

            BillingAccount billingAccount = new BillingAccountController().FetchByID(AccountID)[0];

            Insert(PeriodID, AccountID, billingAccount.Defaultperdiemrate, false, null, null, null, null, billingAccount.Defaultmileagerate);

            BillingPeriodAccount current = new BillingPeriodAccountCollection().Where(BillingPeriodAccount.Columns.Periodid, PeriodID).Where(BillingPeriodAccount.Columns.Accountid, AccountID).Load()[0];

            int periodaccountid = current.Id;

            /* step 2 is for each rate group, pull out the default value from DefaultBillingRates and Insert into BillingRates for this BillingPeriodAccount*/

            BillingRateController billingRateController = new BillingRateController();

            foreach (RateGroup rategroup in new RateGroupController().FetchAll())
            {
                double defaultrate = new DefaultBillingRateController().FetchRate(AccountID, rategroup.Id);

                billingRateController.Insert(periodaccountid, rategroup.Id, defaultrate, false, null, null, null, null);
            }

            /* step 3 is for each City Per Diem rate record, pull out the default value from  BillingDefaultCityRates and Insert into BillingCityRates for this BillingPeriodAccount*/
            var billingCityRateController = new BillingCityRateController();

            foreach (var cityRateGroup in new BillingDefaultCityRateController().FetchAllActiveByAccountId(AccountID))
            {
                billingCityRateController.Insert(cityRateGroup.Id, periodaccountid, cityRateGroup.DefaultPerDiemRate);
            }
        }
        public BillingPeriodAccountsJoinCollection FetchByPeriodIDWithoutCityPerdiem(Int32 periodid)
        {
            var billingCityRateController = new BillingCityRateController();
                var billingCityCol = billingCityRateController.FetchAllActive();
            var billingPeriodsCol =  new BillingPeriodAccountsJoinCollection().Where(BillingPeriodAccountsJoin.Columns.Periodid, periodid).OrderByAsc(BillingPeriodAccountsJoin.Columns.Accountname).Load();
            var billingCityPeriodAccountIds = new List<int>();
        
            var retBillingPeriodAccountCol = new BillingPeriodAccountsJoinCollection();

            billingCityPeriodAccountIds.AddRange(billingCityCol.Select(billingCity => billingCity.Periodaccountid));

            foreach (var billingPeriod in billingPeriodsCol)
            {
                if(!billingCityPeriodAccountIds.Contains(billingPeriod.Id))
                    retBillingPeriodAccountCol.Add(billingPeriod);
            }

            return retBillingPeriodAccountCol;
        }
        public BillingPeriodAccountsJoinCollection FetchByPeriodIDWithoutCityPerdiem(Int32 periodid)
        {
            var billingCityRateController   = new BillingCityRateController();
            var billingCityCol              = billingCityRateController.FetchAllActive();
            var billingPeriodsCol           = new BillingPeriodAccountsJoinCollection().Where(BillingPeriodAccountsJoin.Columns.Periodid, periodid).OrderByAsc(BillingPeriodAccountsJoin.Columns.Accountname).Load();
            var billingCityPeriodAccountIds = new List <int>();

            var retBillingPeriodAccountCol = new BillingPeriodAccountsJoinCollection();

            billingCityPeriodAccountIds.AddRange(billingCityCol.Select(billingCity => billingCity.Periodaccountid));

            foreach (var billingPeriod in billingPeriodsCol)
            {
                if (!billingCityPeriodAccountIds.Contains(billingPeriod.Id))
                {
                    retBillingPeriodAccountCol.Add(billingPeriod);
                }
            }

            return(retBillingPeriodAccountCol);
        }