예제 #1
0
        public static DriverCompDataset ReadDriverRoutes(string agentNumber, DateTime startDate, DateTime endDate)
        {
            //
            DriverCompDataset       routes = new DriverCompDataset();
            DriverCompServiceClient client = null;

            try {
                client = new DriverCompServiceClient();
                DataSet ds = client.ReadDriverRoutes(agentNumber, startDate, endDate);
                if (ds.Tables["DriverRouteTable"] != null && ds.Tables["DriverRouteTable"].Rows.Count > 0)
                {
                    routes.Merge(ds);
                    for (int i = 0; i < routes.DriverRouteTable.Rows.Count; i++)
                    {
                        //Set local fields (i.e. not persisted)
                        DriverCompDataset.DriverRouteTableRow route = (DriverCompDataset.DriverRouteTableRow)routes.DriverRouteTable.Rows[i];
                        route.IsNew    = false;
                        route.IsCombo  = (routes.DriverRouteTable.Select("Operator='" + route.Operator + "' AND RouteDate='" + route.RouteDate + "'").Length > 1);
                        route.IsAdjust = route.RouteName.Contains("ADJUST");
                    }
                    routes.AcceptChanges();
                }
                client.Close();
            }
            catch (TimeoutException te) { client.Abort(); throw new ApplicationException(te.Message); }
            catch (FaultException <DriverCompensationFault> cfe) { client.Abort(); throw new ApplicationException(cfe.Detail.Message); }
            catch (FaultException fe) { client.Abort(); throw new ApplicationException(fe.Message); }
            catch (CommunicationException ce) { client.Abort(); throw new ApplicationException(ce.Message); }
            return(routes);
        }
예제 #2
0
        private void applyFSC(DriverCompDataset.DriverRouteTableRow driverRoute, RouteRates rates)
        {
            //Calculate FSC if required
            try {
                //1. FSC applies only if miles rates are present in the rating
                if (rates.MileBaseRate > 0 || rates.MileRate > 0)
                {
                    driverRoute.FSCMiles = driverRoute.Miles;
                }

                //2. Copy rates (for reference)
                driverRoute.FuelCost = this.mFuelCost;
                driverRoute.FSCGal   = FinanceGateway.GetDriverEquipmentMPG(driverRoute.EquipmentTypeID);
                if (driverRoute.FSCGal <= 0.0M)
                {
                    throw new ApplicationException("FSCGal (" + driverRoute.FSCGal.ToString() + "MPG) is invalid.");
                }
                driverRoute.FSCBaseRate = this.mTerminalConfig.FSBase;

                //3. Calculate FSC
                driverRoute.FSC = driverRoute.FSCMiles / driverRoute.FSCGal * (driverRoute.FuelCost - driverRoute.FSCBaseRate);
                if (driverRoute.FSC < 0)
                {
                    driverRoute.FSC = 0.0M;
                }
            }
            catch (ApplicationException ex) { throw ex; }
            catch (Exception ex) { throw new ApplicationException(ex.Message, ex); }
        }
예제 #3
0
        private void applyRates(DriverCompDataset.DriverRouteTableRow driverRoute, RouteRates rates)
        {
            //Apply rates to this route
            try {
                //1. Copy rates (for reference)
                driverRoute.RateTypeID        = rates.RateTypeID;
                driverRoute.MilesBaseRate     = rates.MileBaseRate;
                driverRoute.MilesRate         = rates.MileRate;
                driverRoute.DayRate           = rates.DayRate;
                driverRoute.TripRate          = rates.TripRate;
                driverRoute.StopsRate         = rates.StopRate;
                driverRoute.CartonsRate       = rates.CartonRate;
                driverRoute.PalletsRate       = rates.PalletRate;
                driverRoute.PickupCartonsRate = rates.PickupCartonRate;
                driverRoute.MinimunAmount     = rates.MinimumAmount;

                //2. Calculate rates -------------------------------------------------------------
                //2.1 Standard computations
                driverRoute.MilesAmount         = driverRoute.MilesBaseRate + driverRoute.Miles * driverRoute.MilesRate;
                driverRoute.DayAmount           = driverRoute.DayRate;
                driverRoute.TripAmount          = driverRoute.Trip * driverRoute.TripRate;
                driverRoute.StopsAmount         = driverRoute.Stops * driverRoute.StopsRate;
                driverRoute.CartonsAmount       = driverRoute.Cartons * driverRoute.CartonsRate;
                driverRoute.PalletsAmount       = driverRoute.Pallets * driverRoute.PalletsRate;
                driverRoute.PickupCartonsAmount = driverRoute.PickupCartons * driverRoute.PickupCartonsRate;

                //2.2 Override: apply maximums to miles amount based upon trigger field (i.e. Trip, Stops, Cartons, Pallets)
                if (rates.MaximumAmount > 0)
                {
                    //Maximum applies: find the MaximumTriggerField and compare it's value to MaximumTriggerValue
                    if (driverRoute[rates.MaximumTriggerField] != null)
                    {
                        int trigVal = Convert.ToInt32(driverRoute[rates.MaximumTriggerField]);
                        if (trigVal < rates.MaximumTriggerValue)
                        {
                            driverRoute.MilesAmount = rates.MaximumAmount;
                        }
                    }
                }

                //3. Calculate totals and apply minimum amount
                decimal total = driverRoute.DayAmount + driverRoute.MilesAmount + driverRoute.TripAmount + driverRoute.StopsAmount + driverRoute.CartonsAmount + driverRoute.PalletsAmount + driverRoute.PickupCartonsAmount;
                driverRoute.TotalAmount = (total < driverRoute.MinimunAmount) ? driverRoute.MinimunAmount : total;
            }
            catch (Exception ex) { throw new ApplicationException(ex.Message, ex); }
        }
예제 #4
0
        public void ViewCompensation()
        {
            //View all rated routes and the associated driver compensation
            try {
                //Read all rated routes for specified terminal and date range
                this.mCompensation.Clear();
                this.mCompensation.Merge(FinanceGateway.ReadDriverRoutes(this.mAgentNumber, this.mBeginDate, this.mEndDate));
                for (int i = 0; i < this.mCompensation.DriverRouteTable.Rows.Count; i++)
                {
                    //Build driver compensation for each driver
                    DriverCompDataset.DriverRouteTableRow driverRoute = (DriverCompDataset.DriverRouteTableRow) this.mCompensation.DriverRouteTable.Rows[i];
                    if (this.mCompensation.DriverCompTable.Select("Operator='" + driverRoute.Operator + "'").Length == 0)
                    {
                        //Create driver compensation for driverRoute.Operator and initialize
                        DriverCompDataset.DriverCompTableRow driverComp = this.mCompensation.DriverCompTable.NewDriverCompTableRow();
                        #region Set members
                        driverComp.Select          = driverRoute.IsExportedNull();
                        driverComp.IsNew           = driverComp.IsCombo = driverComp.IsAdjust = false;
                        driverComp.AgentNumber     = driverRoute.AgentNumber;
                        driverComp.FinanceVendorID = driverRoute.FinanceVendorID;
                        driverComp.FinanceVendor   = driverRoute.Payee;
                        driverComp.Operator        = driverRoute.Operator;
                        //driverComp.EquipmentTypeID = driverRoute.EquipmentTypeID;
                        driverComp.Miles         = driverComp.Trip = driverComp.Stops = driverComp.Cartons = driverComp.Pallets = driverComp.PickupCartons = 0;
                        driverComp.MilesAmount   = driverComp.DayAmount = driverComp.TripAmount = driverComp.StopsAmount = driverComp.CartonsAmount = driverComp.PalletsAmount = driverComp.PickupCartonsAmount = driverComp.Amount = 0.0M;
                        driverComp.FSCMiles      = 0;
                        driverComp.FuelCost      = driverComp.FSCGal = driverComp.FSCBaseRate = driverComp.FSC = 0.0M;
                        driverComp.MinimunAmount = driverComp.AdminCharge = driverComp.AdjustmentAmount1 = driverComp.AdjustmentAmount2 = driverComp.TotalAmount = 0.0M;
                        #endregion
                        this.mCompensation.DriverCompTable.AddDriverCompTableRow(driverComp);

                        //Calculate driver compensation for driverRoute.Operator for all rated routes
                        CalculateCompensation(driverRoute.Operator, false);
                    }
                }
                this.mCompensation.AcceptChanges();
            }
            catch (ApplicationException ex) { throw ex; }
            catch (Exception ex) { throw new ApplicationException(ex.Message, ex); }
            finally { if (this.Changed != null)
                      {
                          this.Changed(this, EventArgs.Empty);
                      }
            }
        }
예제 #5
0
        public bool SaveCompensation()
        {
            //Save
            bool result = false;

            try {
                //Save all new routes
                for (int i = 0; i < this.mCompensation.DriverRouteTable.Rows.Count; i++)
                {
                    //Validate route as new (NULL Import date)
                    if (this.mCompensation.DriverRouteTable[i].IsImportedNull())
                    {
                        DriverCompDataset.DriverRouteTableRow driverRoute = this.mCompensation.DriverRouteTable[i];
                        driverRoute.Imported = DateTime.Now;
                        result = FinanceGateway.CreateDriverRoute(driverRoute);
                    }
                }
                ViewCompensation();
            }
            catch (ApplicationException ex) { throw ex; }
            catch (Exception ex) { throw new ApplicationException(ex.Message, ex); }
            return(result);
        }
예제 #6
0
        public static bool UpdateDriverRoute(DriverCompDataset.DriverRouteTableRow route)
        {
            //
            bool updated = false;
            DriverCompServiceClient client = null;

            try {
                DriverRoute dr = new DriverRoute();
                dr.ID                      = route.ID;
                dr.IsNew                   = !route.IsIsNewNull() ? route.IsNew : false;
                dr.IsCombo                 = !route.IsIsComboNull() ? route.IsCombo : false;
                dr.IsAdjust                = !route.IsIsAdjustNull() ? route.IsAdjust : false;
                dr.AgentNumber             = !route.IsAgentNumberNull() ? route.AgentNumber : "";
                dr.FinanceVendorID         = !route.IsFinanceVendorIDNull() ? route.FinanceVendorID : "";
                dr.RouteDate               = !route.IsRouteDateNull() ? route.RouteDate : DateTime.MinValue;
                dr.RouteName               = !route.IsRouteNameNull() ? route.RouteName : "";
                dr.Operator                = !route.IsOperatorNull() ? route.Operator : "";
                dr.Payee                   = !route.IsPayeeNull() ? route.Payee : "";
                dr.EquipmentTypeID         = !route.IsEquipmentTypeIDNull() ? route.EquipmentTypeID : 0;
                dr.RateTypeID              = !route.IsRateTypeIDNull() ? route.RateTypeID : 0;
                dr.DayRate                 = !route.IsDayRateNull() ? route.DayRate : 0.0M;
                dr.DayAmount               = !route.IsDayAmountNull() ? route.DayAmount : 0.0M;
                dr.Miles                   = !route.IsMilesNull() ? route.Miles : 0.0M;
                dr.MilesBaseRate           = !route.IsMilesBaseRateNull() ? route.MilesBaseRate : 0.0M;
                dr.MilesRate               = !route.IsMilesRateNull() ? route.MilesRate : 0.0M;
                dr.MilesAmount             = !route.IsMilesAmountNull() ? route.MilesAmount : 0.0M;
                dr.Trip                    = !route.IsTripNull() ? route.Trip : 0;
                dr.TripRate                = !route.IsTripRateNull() ? route.TripRate : 0.0M;
                dr.TripAmount              = !route.IsTripAmountNull() ? route.TripAmount : 0.0M;
                dr.Stops                   = !route.IsStopsNull() ? route.Stops : 0;
                dr.StopsRate               = !route.IsStopsRateNull() ? route.StopsRate : 0.0M;
                dr.StopsAmount             = !route.IsStopsAmountNull() ? route.StopsAmount : 0.0M;
                dr.Cartons                 = !route.IsCartonsNull() ? route.Cartons : 0;
                dr.CartonsRate             = !route.IsCartonsRateNull() ? route.CartonsRate : 0.0M;
                dr.CartonsAmount           = !route.IsCartonsAmountNull() ? route.CartonsAmount : 0.0M;
                dr.Pallets                 = !route.IsPalletsNull() ? route.Pallets : 0;
                dr.PalletsRate             = !route.IsPalletsRateNull() ? route.PalletsRate : 0.0M;
                dr.PalletsAmount           = !route.IsPalletsAmountNull() ? route.PalletsAmount : 0.0M;
                dr.PickupCartons           = !route.IsPickupCartonsNull() ? route.PickupCartons : 0;
                dr.PickupCartonsRate       = !route.IsPickupCartonsRateNull() ? route.PickupCartonsRate : 0.0M;
                dr.PickupCartonsAmount     = !route.IsPickupCartonsAmountNull() ? route.PickupCartonsAmount : 0.0M;
                dr.MinimunAmount           = !route.IsMinimunAmountNull() ? route.MinimunAmount : 0.0M;
                dr.FSCMiles                = !route.IsFSCMilesNull() ? route.FSCMiles : 0.0M;
                dr.FuelCost                = !route.IsFuelCostNull() ? route.FuelCost : 0.0M;
                dr.FSCGal                  = !route.IsFSCGalNull() ? route.FSCGal : 0.0M;
                dr.FSCBaseRate             = !route.IsFSCBaseRateNull() ? route.FSCBaseRate : 0.0M;
                dr.FSC                     = !route.IsFSCNull() ? route.FSC : 0.0M;
                dr.AdjustmentAmount1       = !route.IsAdjustmentAmount1Null() ? route.AdjustmentAmount1 : 0.0M;
                dr.AdjustmentAmount1TypeID = !route.IsAdjustmentAmount1TypeIDNull() ? route.AdjustmentAmount1TypeID : "";
                dr.AdjustmentAmount2       = !route.IsAdjustmentAmount2Null() ? route.AdjustmentAmount2 : 0.0M;
                dr.AdjustmentAmount2TypeID = !route.IsAdjustmentAmount2TypeIDNull() ? route.AdjustmentAmount2TypeID : "";
                dr.AdminCharge             = !route.IsAdminChargeNull() ? route.AdminCharge : 0.0M;
                dr.TotalAmount             = !route.IsTotalAmountNull() ? route.TotalAmount : 0.0M;
                dr.Imported                = !route.IsImportedNull() ? route.Imported : DateTime.MinValue;
                dr.Exported                = !route.IsExportedNull() ? route.Exported : DateTime.MinValue;
                dr.ArgixRtType             = !route.IsArgixRtTypeNull() ? route.ArgixRtType : "";
                dr.LastUpdated             = DateTime.Now;
                dr.UserID                  = Environment.UserName;

                client  = new DriverCompServiceClient();
                updated = client.UpdateDriverRoute(dr);
                client.Close();
            }
            catch (TimeoutException te) { client.Abort(); throw new ApplicationException(te.Message); }
            catch (FaultException <DriverCompensationFault> cfe) { client.Abort(); throw new ApplicationException(cfe.Detail.Message); }
            catch (FaultException fe) { client.Abort(); throw new ApplicationException(fe.Message); }
            catch (CommunicationException ce) { client.Abort(); throw new ApplicationException(ce.Message); }
            return(updated);
        }
예제 #7
0
        public bool UpdateCompensation()
        {
            //Update
            bool result = false;

            try {
                //Updated routes
                DriverCompDataset driverRoutes = (DriverCompDataset)this.mCompensation.GetChanges(DataRowState.Modified);
                if (driverRoutes != null && driverRoutes.DriverRouteTable.Rows.Count > 0)
                {
                    //Update all modified driver compensations
                    foreach (DriverCompDataset.DriverRouteTableRow driverRoute in driverRoutes.DriverRouteTable.Rows)
                    {
                        try {
                            driverRoute.LastUpdated = DateTime.Now;
                            driverRoute.UserID      = Environment.UserName;
                            result = FinanceGateway.UpdateDriverRoute(driverRoute);
                            if (result)
                            {
                                driverRoute.AcceptChanges();
                            }
                            else
                            {
                                driverRoute.RejectChanges();
                            }
                        }
                        catch (Exception) {
                            driverRoute.RejectChanges();
                            System.Windows.Forms.MessageBox.Show("Failed to update route (" + driverRoute.RouteDate.ToShortDateString() + ", " + driverRoute.Operator, "Route Update", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                        }
                    }
                }

                //Deleted routes- need to re-assess fees and bonus
                driverRoutes = (DriverCompDataset)this.mCompensation.GetChanges(DataRowState.Deleted);
                if (driverRoutes != null && driverRoutes.DriverRouteTable.Rows.Count > 0)
                {
                    //Delete all deleted driverRoutes
                    DriverCompDataset.DriverRouteTableRow driverRoute = null;
                    for (int i = driverRoutes.DriverRouteTable.Rows.Count - 1; i >= 0; i--)
                    {
                        try {
                            driverRoute = (DriverCompDataset.DriverRouteTableRow)driverRoutes.DriverRouteTable.Rows[i];
                            driverRoute.RejectChanges();
                            if (!driverRoute.IsImportedNull())
                            {
                                result = FinanceGateway.DeleteDriverRoute(driverRoute.ID);
                            }
                            else
                            {
                                result = true;
                            }
                            if (result)
                            {
                                driverRoute.Delete(); driverRoute.AcceptChanges();
                            }
                        }
                        catch (Exception) {
                            System.Windows.Forms.MessageBox.Show("Failed to update route (" + driverRoute.RouteDate.ToShortDateString() + ", " + driverRoute.Operator, "Route Update", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                        }
                    }
                }
                this.mCompensation.AcceptChanges();
                ImportRoutes();
            }
            catch (Exception ex) {
                this.mCompensation.RejectChanges();
                throw new ApplicationException(ex.Message, ex);
            }
            return(result);
        }
예제 #8
0
        public void CalculateCompensation(string _operator, bool validateRouteRatings)
        {
            //Calculate driver compensation for the specified operator
            try {
                //Find the driver compensation and driver routes for the specified operator from the data cache
                DriverCompDataset.DriverCompTableRow[]  driverComps  = (DriverCompDataset.DriverCompTableRow[]) this.mCompensation.DriverCompTable.Select("Operator='" + _operator + "'");
                DriverCompDataset.DriverRouteTableRow[] driverRoutes = (DriverCompDataset.DriverRouteTableRow[]) this.mCompensation.DriverRouteTable.Select("Operator='" + _operator + "'");

                //Reset driver compensation for this operator
                if (driverComps.Length > 1)
                {
                    throw new ApplicationException("When calculating compensation for " + _operator + ", " + driverComps.Length.ToString() + " records were found.");
                }
                DriverCompDataset.DriverCompTableRow driverComp = driverComps[0];
                driverComp.IsNew         = driverComp.IsCombo = driverComp.IsAdjust = false;
                driverComp.Miles         = driverComp.Trip = driverComp.Stops = driverComp.Cartons = driverComp.Pallets = driverComp.PickupCartons = 0;
                driverComp.MilesAmount   = driverComp.DayAmount = driverComp.TripAmount = driverComp.StopsAmount = driverComp.CartonsAmount = driverComp.PalletsAmount = driverComp.PickupCartonsAmount = driverComp.Amount = 0.0M;
                driverComp.FSC           = 0.0M;
                driverComp.MinimunAmount = driverComp.AdminCharge = driverComp.AdjustmentAmount1 = driverComp.AdjustmentAmount2 = driverComp.TotalAmount = 0.0M;

                if (validateRouteRatings)
                {
                    //Re-assess fees and bonus for this driver
                    applyFees(_operator);
                    applyBonus(_operator);
                }

                //Compute driver compensation for this operator from all rated routes
                for (int i = 0; i < driverRoutes.Length; i++)
                {
                    DriverCompDataset.DriverRouteTableRow driverRoute = driverRoutes[i];
                    #region Sum all driver routes
                    driverComp.IsNew                = driverRoute.IsNew ? true : driverComp.IsNew;
                    driverComp.IsCombo              = driverRoute.IsCombo ? true : driverComp.IsCombo;
                    driverComp.IsAdjust             = driverRoute.IsAdjust ? true : driverComp.IsAdjust;
                    driverComp.Miles               += driverRoute.Miles;
                    driverComp.MilesAmount         += driverRoute.MilesAmount;
                    driverComp.DayAmount           += driverRoute.DayAmount;
                    driverComp.Trip                += driverRoute.Trip;
                    driverComp.TripAmount          += driverRoute.TripAmount;
                    driverComp.Stops               += driverRoute.Stops;
                    driverComp.StopsAmount         += driverRoute.StopsAmount;
                    driverComp.Cartons             += driverRoute.Cartons;
                    driverComp.CartonsAmount       += driverRoute.CartonsAmount;
                    driverComp.Pallets             += driverRoute.Pallets;
                    driverComp.PalletsAmount       += driverRoute.PalletsAmount;
                    driverComp.PickupCartons       += driverRoute.PickupCartons;
                    driverComp.PickupCartonsAmount += driverRoute.PickupCartonsAmount;
                    driverComp.FSCMiles            += driverRoute.FSCMiles;
                    driverComp.FSCGal               = driverRoute.FSCGal;
                    driverComp.FuelCost             = driverRoute.FuelCost;
                    driverComp.FSCBaseRate          = this.mTerminalConfig.FSBase;
                    driverComp.FSC               += driverRoute.FSC;
                    driverComp.MinimunAmount      = driverRoute.MinimunAmount;
                    driverComp.AdminCharge       += driverRoute.AdminCharge;
                    driverComp.AdjustmentAmount1 += driverRoute.AdjustmentAmount1;
                    driverComp.AdjustmentAmount2 += driverRoute.AdjustmentAmount2;
                    //driverComp.AdjustmentAmount3 += driverRoute.AdjustmentAmount3;
                    driverComp.Amount += driverRoute.TotalAmount;
                    #endregion
                }

                //Compute totals
                driverComp.TotalAmount = driverComp.Amount + driverComp.FSC + driverComp.AdjustmentAmount1 + driverComp.AdjustmentAmount2;
            }
            catch (ApplicationException ex) { throw ex; }
            catch (Exception ex) { throw new ApplicationException(ex.Message, ex); }
        }
예제 #9
0
        public void CreateCompensation()
        {
            //Add all new (selected) imported routes to the driver compensation
            try {
                for (int i = 0; i < this.mRoutes.RoadshowRouteTable.Rows.Count; i++)
                {
                    //Check if a new route (i.e. selected by user)
                    DriverCompDataset.RoadshowRouteTableRow route = this.mRoutes.RoadshowRouteTable[i];
                    if (route.New)
                    {
                        //Validate route depot matches this agent
                        if (route.DepotNumber.ToString("0000") == this.mAgentNumber)
                        {
                            //Add driver compensation (parent) record if required
                            if (this.mCompensation.DriverCompTable.Select("Operator='" + route.Operator + "'").Length == 0)
                            {
                                //Add a driver compensation for this operator
                                DriverCompDataset.DriverCompTableRow driverComp = this.mCompensation.DriverCompTable.NewDriverCompTableRow();
                                #region Initialize members
                                driverComp.Select          = true;
                                driverComp.IsNew           = driverComp.IsCombo = driverComp.IsAdjust = false;
                                driverComp.AgentNumber     = route.DepotNumber.ToString("0000");
                                driverComp.FinanceVendorID = (!route.IsFinanceVendIDNull() ? route.FinanceVendID : "00000");
                                driverComp.FinanceVendor   = (!route.IsPayeeNull() ? route.Payee : "");
                                driverComp.Operator        = route.Operator;
                                //driverComp.EquipmentTypeID = route.EquipmentID;
                                driverComp.Miles         = driverComp.Trip = driverComp.Stops = driverComp.Cartons = driverComp.Pallets = driverComp.PickupCartons = 0;
                                driverComp.MilesAmount   = driverComp.DayAmount = driverComp.TripAmount = driverComp.StopsAmount = driverComp.CartonsAmount = driverComp.PalletsAmount = driverComp.PickupCartonsAmount = driverComp.Amount = 0.0M;
                                driverComp.FSCMiles      = 0;
                                driverComp.FuelCost      = driverComp.FSCGal = driverComp.FSCBaseRate = driverComp.FSC = 0.0M;
                                driverComp.MinimunAmount = driverComp.AdminCharge = driverComp.AdjustmentAmount1 = driverComp.AdjustmentAmount2 = driverComp.TotalAmount = 0.0M;
                                #endregion
                                this.mCompensation.DriverCompTable.AddDriverCompTableRow(driverComp);
                            }

                            //Validate driver route doesn't exist; add if doesn't exist
                            if (this.mCompensation.DriverRouteTable.Select("Operator='" + route.Operator + "' AND RouteDate='" + route.Rt_Date + "' AND RouteName='" + route.Rt_Name + "'").Length == 0)
                            {
                                //Create a driver route from the Roadshow route
                                DriverCompDataset.DriverRouteTableRow driverRoute = this.mCompensation.DriverRouteTable.NewDriverRouteTableRow();
                                #region Set members
                                driverRoute.ID                      = 0;
                                driverRoute.IsNew                   = false;
                                driverRoute.IsCombo                 = (this.mRoutes.RoadshowRouteTable.Select("Operator='" + route.Operator + "' AND Rt_Date='" + route.Rt_Date + "'").Length > 1);
                                driverRoute.IsAdjust                = route.Rt_Name.Contains("ADJUST");
                                driverRoute.AgentNumber             = route.DepotNumber.ToString("0000");
                                driverRoute.FinanceVendorID         = (!route.IsFinanceVendIDNull() ? route.FinanceVendID : "00000");
                                driverRoute.EquipmentTypeID         = route.EquipmentID;
                                driverRoute.RouteIndex              = route.RouteIndex;
                                driverRoute.RouteDate               = route.Rt_Date;
                                driverRoute.RouteName               = route.Rt_Name;
                                driverRoute.Operator                = route.Operator;
                                driverRoute.OperatorHireDate        = route.OperatorHireDate;
                                driverRoute.Payee                   = (!route.IsPayeeNull() ? route.Payee : "");
                                driverRoute.RateTypeID              = RouteRates.RATETYPE_NONE;
                                driverRoute.Miles                   = (!route.IsTtlMilesNull()) ? route.TtlMiles : 0;
                                driverRoute.MilesBaseRate           = 0.0M;
                                driverRoute.MilesRate               = 0.0M;
                                driverRoute.MilesAmount             = 0.0M;
                                driverRoute.DayRate                 = 0.0M;
                                driverRoute.DayAmount               = 0.0M;
                                driverRoute.Trip                    = (!route.IsMultiTrpNull()) ? route.MultiTrp : 0;
                                driverRoute.TripRate                = 0.0M;
                                driverRoute.TripAmount              = 0.0M;
                                driverRoute.Stops                   = (!route.IsUniqueStopsNull()) ? route.UniqueStops : 0;
                                driverRoute.StopsRate               = 0.0M;
                                driverRoute.StopsAmount             = 0.0M;
                                driverRoute.Cartons                 = (!route.IsDelCtnsNull()) ? (int)route.DelCtns : 0;
                                driverRoute.CartonsRate             = 0.0M;
                                driverRoute.CartonsAmount           = 0.0M;
                                driverRoute.Pallets                 = (!route.IsDelPltsorRcksNull()) ? (int)route.DelPltsorRcks : 0;
                                driverRoute.PalletsRate             = 0.0M;
                                driverRoute.PalletsAmount           = 0.0M;
                                driverRoute.PickupCartons           = (!route.IsRtnCtnNull()) ? (int)route.RtnCtn : 0;
                                driverRoute.PickupCartonsRate       = 0.0M;
                                driverRoute.PickupCartonsAmount     = 0.0M;
                                driverRoute.FSCMiles                = 0;
                                driverRoute.FSCGal                  = 0.0M;
                                driverRoute.FSCBaseRate             = 0.0M;
                                driverRoute.FSC                     = 0.0M;
                                driverRoute.MinimunAmount           = 0.0M;
                                driverRoute.AdminCharge             = 0.0M;
                                driverRoute.AdjustmentAmount1       = 0.0M;
                                driverRoute.AdjustmentAmount1TypeID = "";
                                driverRoute.AdjustmentAmount2       = 0.0M;
                                driverRoute.AdjustmentAmount2TypeID = "";
                                driverRoute.TotalAmount             = 0.0M;
                                //driverRoute.Imported = ;
                                //driverRoute.Exported = ;
                                driverRoute.ArgixRtType = route.ArgixRtType;
                                driverRoute.LastUpdated = DateTime.Today;
                                driverRoute.UserID      = Environment.UserName;

                                #endregion

                                //Apply rates and FSC to the current route
                                RouteRates rates = this.mRates.GetRates(driverRoute.EquipmentTypeID, driverRoute.RouteName, driverRoute.Miles);
                                if (!driverRoute.IsAdjust)
                                {
                                    applyRates(driverRoute, rates);
                                }
                                applyFSC(driverRoute, rates);

                                //Add route to rated routes
                                this.mCompensation.DriverRouteTable.AddDriverRouteTableRow(driverRoute);

                                //Apply fees to the current route based upon all routes for this driver
                                applyFees(route.Operator);

                                //Apply bonus to the current route based upon all routes for this driver
                                applyBonus(route.Operator);

                                //Update driver compensation for all routes for the current driver
                                CalculateCompensation(route.Operator, false);
                            }
                            else
                            {
                                //Route exists
                                MessageBox.Show("Route exists for " + route.Operator + " on " + route.Rt_Date.ToShortDateString());
                            }
                            route.New = false;
                        }
                        else
                        {
                            //Wrong terminal
                            System.Windows.Forms.MessageBox.Show("Route " + route.Rt_Name + " belongs to " + route.Depot + " terminal.");
                        }
                    }
                }
                SaveCompensation();
                ImportRoutes();
            }
            catch (ApplicationException ex) { throw ex; }
            catch (Exception ex) { throw new ApplicationException(ex.Message, ex); }
        }