public int CreateNewBusinessTrip(BusinessTripDTO businessTrip, string userName) { User user = repo.Users.UsersQueryable.FirstOrDefault(u => u.UserName == userName); BusinessTrip trip = repo.BusinessTrips.Create(new BusinessTrip() { Title = businessTrip.Title, Date = businessTrip.Date.ParseAppString(), BusinessReason = businessTrip.BusinessReason, BusinessPurpose = businessTrip.BusinessPurpose, Notes = businessTrip.Notes, User = user }); if (businessTrip.Subsistence != null) { CreateBusinessTripSubsistence(trip, businessTrip); } List<Expense> expenses = new List<Expense>(); if (businessTrip.Expenses != null) { foreach (ExpenseDTO expDto in businessTrip.Expenses) { Expense expense = new Expense(); expense.Trip = trip; expense.Type = repo.Dictionaries.GetExpenseType(expDto.ExpenseTypeId); expense.Date = expDto.Date.ParseAppString(); expense.City = expDto.City; expense.Amount = expDto.Amount; expense.AmountPLN = expDto.AmountPLN; expense.Country = repo.Dictionaries.GetCountry(expDto.CountryId); expense.CurrencyCode = expDto.CurrencyCode; expense.ExchangeRate = expDto.ExchangeRate; CurrencyRate systemRate = currenciesTasks.GetCurrencyRateForDay(expense.CurrencyCode, expense.Date.Date); if (Math.Abs(systemRate.ExchangeRate - expense.ExchangeRate) > 0.0001) expense.ExchangeRateModifiedByUser = true; else expense.ExchangeRateModifiedByUser = false; expense.VATRate = expDto.VATRate; expense.Notes = expDto.Notes; expense.DoNotReturn = expDto.DoNotReturn; expense.DocumentType = repo.Dictionaries.GetExpenseDocumentType(expDto.ExpenseDocumentTypeId); expenses.Add(expense); } repo.Expenses.CreateSet(expenses); } if (businessTrip.MileageAllowances != null) { List<MileageAllowance> mileageAllowances = new List<MileageAllowance>(); foreach (MileageAllowanceDTO maDto in businessTrip.MileageAllowances) { MileageAllowance ma = new MileageAllowance(); ma.Trip = trip; ma.Date = maDto.Date.ParseAppString(); ma.Distance = maDto.Distance; ma.Amount = maDto.Amount; ma.Notes = maDto.Notes; ma.Type = repo.Dictionaries.GetVehicleType(maDto.VehicleTypeId); mileageAllowances.Add(ma); } repo.MileageAllowances.CreateSet(mileageAllowances); } this.repo.SaveChanges(); return trip.Id; }
public void UpdateBusinessTripMileageAllowances(BusinessTrip trip, BusinessTripDTO businessTripDto) { if (businessTripDto != null) { foreach (MileageAllowance allowance in trip.MileageAllowances .Where(m => businessTripDto.MileageAllowances .Any(mdto => mdto.id == m.Id))) {//Update mileage allowances that exist both in database and in dto MileageAllowanceDTO mdto = businessTripDto.MileageAllowances.First(m => m.id == allowance.Id); allowance.Type = repo.Dictionaries.GetVehicleType(mdto.VehicleTypeId); allowance.Date = mdto.Date.ParseAppString(); allowance.Amount = mdto.Amount; allowance.Distance = mdto.Distance; allowance.Notes = mdto.Notes; } //Remove those that exist in db but don't exist in dto repo.MileageAllowances.RemoveSet(trip.MileageAllowances .Where(m => !businessTripDto.MileageAllowances .Any(mdto => mdto.id == m.Id))); foreach (MileageAllowanceDTO milDto in businessTripDto.MileageAllowances.Where(mdto => !trip.MileageAllowances.Any(ma => ma.Id == mdto.id))) {//Add those that exist in dto but don't exist in db MileageAllowance allowance = new MileageAllowance(); allowance.Trip = trip; allowance.Date = milDto.Date.ParseAppString(); allowance.Amount = milDto.Amount; allowance.Distance = milDto.Distance; allowance.Type = repo.Dictionaries.GetVehicleType(milDto.VehicleTypeId); allowance.Notes = milDto.Notes; trip.MileageAllowances.Add(allowance); } } }