public void ValdationMileageRateByDataBase(long expDocumentID)
        {
            Spring.Validation.ValidationErrors errors = new Spring.Validation.ValidationErrors();
            FnExpenseMileage mileage = SCG.eAccounting.Query.ScgeAccountingQueryProvider.FnExpenseMileageQuery.GetMileageByExpenseID(expDocumentID).FirstOrDefault();

            if (mileage != null && mileage.Owner != "COM")
            {
                IList <FnExpenseMileageItem> mileageItem = SCG.eAccounting.Query.ScgeAccountingQueryProvider.FnExpenseMileageItemQuery.GetMileageItemByMileageID(mileage.ExpenseMileageID);

                foreach (FnExpenseMileageItem result in mileageItem)
                {
                    ValidateMileageRateData(mileage, Convert.ToDateTime(result.TravelDate));
                }
            }
        }
        public void ValdationMileageRateByDataset(Guid txId, long expDocumentID, bool isCopy)
        {
            Spring.Validation.ValidationErrors errors = new Spring.Validation.ValidationErrors();
            ExpenseDataSet ds = (ExpenseDataSet)TransactionService.GetDS(txId);

            ExpenseDataSet.FnExpenseMileageRow  mileageRow = (ExpenseDataSet.FnExpenseMileageRow)ds.FnExpenseMileage.Select("ExpenseID = " + expDocumentID).FirstOrDefault();
            ExpenseDataSet.FnExpenseDocumentRow expRow     = ds.FnExpenseDocument.FindByExpenseID(expDocumentID);

            /*check owner employee*/

            if (mileageRow != null && mileageRow.Owner != "COM")
            {
                FnExpenseMileage mileage = new FnExpenseMileage();
                mileage.IsOverrideLevel = mileageRow.IsOverrideLevel;
                mileage.First100KmRate  = Convert.ToDouble(mileageRow.First100KmRate);
                mileage.Exceed100KmRate = Convert.ToDouble(mileageRow.Exceed100KmRate);
                mileage.TypeOfCar       = mileageRow.TypeOfCar;
                if (mileageRow.IsOverrideLevel == true)
                {
                    if (!mileageRow.IsOverrideCompanyIdNull())
                    {
                        mileage.OverrideCompanyId = mileageRow.OverrideCompanyId;
                    }
                    if (!String.IsNullOrEmpty(mileageRow.OverrideUserPersonalLevelCode))
                    {
                        mileage.OverrideUserPersonalLevelCode = mileageRow.OverrideUserPersonalLevelCode;
                    }
                }
                else
                {
                    if (!mileageRow.IsCurrentCompanyIdNull())
                    {
                        mileage.CurrentCompanyId = mileageRow.CurrentCompanyId;
                    }
                    if (!mileageRow.IsCurrentUserPersonalLevelCodeNull())
                    {
                        mileage.CurrentUserPersonalLevelCode = mileageRow.CurrentUserPersonalLevelCode;
                    }
                }

                DataRow[] row = ds.FnExpenseMileageItem.Select("ExpenseMileageID = " + mileageRow.ExpenseMileageID);

                foreach (DataRow result in row)
                {
                    ValidateMileageRateData(mileage, Convert.ToDateTime(result["TravelDate"]));
                }
            }
        }
        public void UpdateMileageItemByMileageID(Guid txID, long mileageId, FnExpenseMileage mileage)
        {
            //Spring.Validation.ValidationErrors errors = new Spring.Validation.ValidationErrors();
            ExpenseDataSet expDS = (ExpenseDataSet)TransactionService.GetDS(txID);

            string filter = String.Format("ExpenseMileageID = {0}", mileageId);

            DataRow[] rows = expDS.FnExpenseMileageItem.Select(filter);

            //if (rows.Length == 0)
            //{
            //    errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("CannotSaveMileage"));
            //    throw new ServiceValidationException(errors);
            //}
            foreach (DataRow row in rows)
            {
                FnExpenseMileageItem item = new FnExpenseMileageItem();
                item.LoadFromDataRow(row);
                item.ExpenseMileage = mileage;
                this.UpdateExpenseMileageItemOnTransaction(item, txID);
            }
        }
        public void ValidateMileageRateData(FnExpenseMileage mileage, DateTime travelDate)
        {
            Spring.Validation.ValidationErrors errors = new Spring.Validation.ValidationErrors();
            long   companyId;
            string personal;

            if (mileage == null)
            {
                return;
            }
            if (mileage.IsOverrideLevel == true)
            {
                if (mileage != null)
                {
                    companyId = Convert.ToInt64(mileage.OverrideCompanyId);
                    personal  = mileage.OverrideUserPersonalLevelCode;
                }
                else
                {
                    errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("OverrideCompanyIdIsRequare"));
                    throw new ServiceValidationException(errors);
                }
            }
            else
            {
                companyId = Convert.ToInt64(mileage.CurrentCompanyId);
                personal  = mileage.CurrentUserPersonalLevelCode;
            }

            Guid MileageProfileId = SCG.DB.Query.ScgDbQueryProvider.DbCompanyQuery.getMileageProfileByCompanyID(companyId);

            if (MileageProfileId == null)
            {
                errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("CanNotFindMileageRate"));
                throw new ServiceValidationException(errors);
            }

            DbMileageRateRevisionDetail result = ScgDbQueryProvider.DbMileageRateRevisionDetailQuery.FindMileageRateRevision(MileageProfileId, personal, travelDate);

            if (result == null)
            {
                errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("CanNotFindMileageRate"));
                throw new ServiceValidationException(errors);
            }
            switch (mileage.TypeOfCar)
            {
            case TypeOfCar.PrivateCar:
                if (result.CarRate != Convert.ToDouble(mileage.First100KmRate) || result.CarRate2 != Convert.ToDouble(mileage.Exceed100KmRate))
                {
                    //errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("MileageRateInvalid"));
                    errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("MileageRateInvalid", new object[] { travelDate.ToString() }));
                }

                break;

            case TypeOfCar.MotorCycle:
                if (result.MotocycleRate != Convert.ToDouble(mileage.First100KmRate) || result.MotocycleRate2 != Convert.ToDouble(mileage.Exceed100KmRate))
                {
                    errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("MileageRateInvalid", new object[] { travelDate.ToString() }));
                }
                break;

            case TypeOfCar.Pickup:
                if (result.PickUpRate != Convert.ToDouble(mileage.First100KmRate) || result.PickUpRate2 != Convert.ToDouble(mileage.Exceed100KmRate))
                {
                    errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("MileageRateInvalid", new object[] { travelDate.ToString() }));
                }

                break;

            default:
                break;
            }
            if (!errors.IsEmpty)
            {
                throw new ServiceValidationException(errors);
            }
        }