private void GetFixedValuesForTravelReportEditFormAndExpenseIndexTable(TravelReportVM view) { var expenses = view.Expenses.Where(e => e.TravelReportId == view.Id).ToList(); // get expenseCategory for ExpenseIndexTable and allways show Allowance currency and PrivateCarTransportation currency as "HRK" foreach (var expense in expenses) { expense.ExpenseCategory = _expenseCategoryRepository.FindById(expense.ExpenseCategoryId).MapToView(); if (expense.ExpenseCategoryId == 1 || expense.ExpenseCategoryId == 10) // allowance or private car transportation { expense.OfficialCurrency = "HRK"; } else { expense.OfficialCurrency = _countryAllowanceRepository.FindById(int.Parse(expense.OfficialCurrency)).OfficialCurrency; // not a foreign key } } // auto-fill Employee var userId = User.Identity.GetUserId(); var userInDb = _applicationUserRepository.FindById(userId).MapToView(); ViewBag.User = userInDb.FirstName + " " + userInDb.LastName; // auto-fill DailyAllowance var allowance = _countryAllowanceRepository.FindById(view.CountryAllowanceId).MapToView(); ViewBag.Allowance = allowance.Amount + " " + allowance.AllowanceCurrency; }
public ActionResult Create(TravelReportVM view) { ModelState.Remove("Id"); view.EmployeeId = User.Identity.GetUserId(); if (ModelState.IsValid) { _travelReportRepository.AddToDatabase(view.MapToModel()); _travelReportRepository.Save(); TempData["travelReportCreatedMessage"] = "Travel report successfully created!"; // add Id to view after new report is generated var latestId = _travelReportRepository.GetAllFromDatabaseEnumerable().Max(t => t.Id); view.Id = latestId; CalculateAllowanceExpenses(view); CalculatePrivateCarMileageExpenses(view); CalculateExpenseSum(view); } else { TempData["travelReportErrorMessage"] = "Something went wrong, please try again!"; } return(RedirectToAction("Index")); }
private void CalculateExpenseSum(TravelReportVM view) { var expenses = _expenseRepository.GetAllFromDatabaseEnumerable().Where(t => t.TravelReportId == view.Id).ToList(); foreach (var expense in expenses) { if (expense.Currency != "HRK" && expense.Currency != "1") // if not HRK --> calculate exchange rate { expense.Currency = _countryAllowanceRepository.FindById(int.Parse(expense.Currency)).OfficialCurrency; // from int to string expense.BillAmount = CalculateExchangeRate(expense.Currency, expense.Date, expense.BillAmount); } view.ExpenseSum = view.ExpenseSum + expense.BillAmount; } _travelReportRepository.UpdateInDatabase(view.MapToModel(), view.Id); _travelReportRepository.Save(); }
public static TravelReport MapToModel(this TravelReportVM view) { if (view == null) { return(null); } ICollection <Expense> expenses = new List <Expense>(); if (view.Expenses != null) { foreach (var item in view.Expenses) { expenses.Add(item.MapToModel()); } } return(new TravelReport { Id = view.Id, EmployeeId = view.EmployeeId, Employee = view.Employee.MapToModel(), CountryAllowanceId = view.CountryAllowanceId, //Country = view.Country.MapToModel(), City = view.City, Departure = view.Departure, Return = view.Return, NumberOfMeals = view.NumberOfMeals, NumberOfHours = view.NumberOfHours, NumberOfAllowances = view.NumberOfAllowances, VehicleType = view.VehicleType, VehicleId = view.VehicleId, StartMileage = view.StartMileage, EndMileage = view.EndMileage, //Vehicle = view.Vehicle, CompanyVehicle = view.CompanyVehicle.MapToModel(), ReasonForTravel = view.ReasonForTravel, Deposit = view.Deposit, DepositAmount = view.DepositAmount, ExpenseSum = view.ExpenseSum, Status = view.Status, Expenses = expenses }); }
public ActionResult Edit(TravelReportVM view) { view.EmployeeId = User.Identity.GetUserId(); CalculateAllowanceExpenses(view); if (TempData["wrongNumberOfMeals"] != null) { return(RedirectToAction("Edit/" + view.Id)); } CalculatePrivateCarMileageExpenses(view); CalculateExpenseSum(view); CheckTempDataMessages(); if (ModelState.IsValid) { _travelReportRepository.UpdateInDatabase(view.MapToModel(), view.Id); _travelReportRepository.Save(); TempData["travelReportUpdatedMessage"] = "Travel report successfully updated!"; } return(RedirectToAction("Edit/" + view.Id)); }
private void CalculatePrivateCarMileageExpenses(TravelReportVM view) { decimal mileageSum = 0; if (view.StartMileage != null && view.EndMileage != null) { mileageSum = view.EndMileage.Value - view.StartMileage.Value; } // add/update private car expense in Expenses if (view.VehicleType.Value == 0) { var mileageExpense = new ExpenseVM { TravelReportId = view.Id, Date = view.Return, ExpenseCategoryId = 10, BillNumber = "-", BillAmount = mileageSum * 2, OfficialCurrency = "HRK" }; var expenses = _expenseRepository.GetAllFromDatabaseEnumerable().Where(e => e.TravelReportId == view.Id).ToList(); bool exists = false; foreach (var expense in expenses) { if (expense.ExpenseCategoryId == 10) { exists = true; mileageExpense.Id = expense.Id; } } if (exists) { _expenseRepository.UpdateInDatabase(mileageExpense.MapToModel(), mileageExpense.Id); } else { _expenseRepository.AddToDatabase(mileageExpense.MapToModel()); } _expenseRepository.Save(); } else // in case that VehicleType gets changed from "PrivateCar" to any other VehicleType, delete previously existing PrivateCarExpense { var privateCarExpense = _expenseRepository .GetAllFromDatabaseEnumerable() .Where(e => e.ExpenseCategoryId == 10 && e.TravelReportId == view.Id) .SingleOrDefault() .MapToView(); if (privateCarExpense != null) { var expenseInDb = _expenseRepository.FindById(privateCarExpense.Id); _expenseRepository.DeleteFromDatabase(expenseInDb); _expenseRepository.Save(); } } }
private void CalculateAllowanceExpenses(TravelReportVM view) { var countryAllowance = _countryAllowanceRepository.FindById(view.CountryAllowanceId).MapToView(); var hours = (view.Return - view.Departure).TotalHours; decimal allowanceSum = 0; view.NumberOfHours = hours; if (hours < 8) { allowanceSum = 0; } else if (hours >= 8 && hours < 12) { allowanceSum = (countryAllowance.Amount / 2); view.NumberOfAllowances = 0.5; } else { for (double i = hours; i >= 12; i -= 12) { allowanceSum += countryAllowance.Amount / 2; view.NumberOfAllowances += 0.5; } } // exclude Meal percentage from allowanceSum decimal reduction = 0; int counter = 0; if (view.CountryAllowanceId == 1) { switch (view.NumberOfMeals.ToString()) // CROATIA (30%) { case "None": break; case "One": reduction = countryAllowance.Amount * decimal.Parse(0.3.ToString()); counter = 1; break; case "Two": reduction = countryAllowance.Amount * decimal.Parse(0.6.ToString()); counter = 2; break; case "Three": reduction = countryAllowance.Amount * decimal.Parse(0.9.ToString()); counter = 3; break; case "Four": reduction = countryAllowance.Amount * decimal.Parse(1.2.ToString()); counter = 4; break; case "Five": reduction = countryAllowance.Amount * decimal.Parse(1.5.ToString()); counter = 5; break; case "Six": reduction = countryAllowance.Amount * decimal.Parse(1.8.ToString()); counter = 6; break; case "Seven": reduction = countryAllowance.Amount * decimal.Parse(2.1.ToString()); counter = 7; break; case "Eight": reduction = countryAllowance.Amount * decimal.Parse(2.4.ToString()); counter = 8; break; case "Nine": reduction = countryAllowance.Amount * decimal.Parse(2.7.ToString()); counter = 9; break; case "Ten": reduction = countryAllowance.Amount * decimal.Parse(3.0.ToString()); counter = 10; break; default: break; } } else { switch (view.NumberOfMeals.ToString()) // OTHERS (40%) { case "None": break; case "One": reduction = countryAllowance.Amount * decimal.Parse(0.4.ToString()); counter = 1; break; case "Two": reduction = countryAllowance.Amount * decimal.Parse(0.8.ToString()); counter = 2; break; case "Three": reduction = countryAllowance.Amount * decimal.Parse(1.2.ToString()); counter = 3; break; case "Four": reduction = countryAllowance.Amount * decimal.Parse(1.6.ToString()); counter = 4; break; case "Five": reduction = countryAllowance.Amount * decimal.Parse(2.0.ToString()); counter = 5; break; case "Six": reduction = countryAllowance.Amount * decimal.Parse(2.4.ToString()); counter = 6; break; case "Seven": reduction = countryAllowance.Amount * decimal.Parse(2.8.ToString()); counter = 7; break; case "Eight": reduction = countryAllowance.Amount * decimal.Parse(3.2.ToString()); counter = 8; break; case "Nine": reduction = countryAllowance.Amount * decimal.Parse(3.6.ToString()); counter = 9; break; case "Ten": reduction = countryAllowance.Amount * decimal.Parse(4.0.ToString()); counter = 10; break; default: break; } } allowanceSum -= reduction; if (counter > (view.NumberOfAllowances * 2)) { TempData["wrongNumberOfMeals"] = "Please select correct number of meals!"; allowanceSum = 0; return; } // calculate ExchangeRate if not HRK if (countryAllowance.AllowanceCurrency != "HRK") { allowanceSum = CalculateExchangeRate(countryAllowance.AllowanceCurrency, view.Return, allowanceSum); } // add/update allowance in Expenses var allowanceExpense = new ExpenseVM // create expense { TravelReportId = view.Id, Date = view.Return, ExpenseCategoryId = 1, BillNumber = "-", BillAmount = allowanceSum, OfficialCurrency = "HRK" }; var expenses = _expenseRepository.GetAllFromDatabaseEnumerable().Where(e => e.TravelReportId == view.Id).ToList(); bool exists = false; foreach (var expense in expenses) // check if it already exists, if NO -> add, if YES -> update { if (expense.ExpenseCategoryId == 1) { exists = true; allowanceExpense.Id = expense.Id; } } if (exists) { _expenseRepository.UpdateInDatabase(allowanceExpense.MapToModel(), allowanceExpense.Id); } else { _expenseRepository.AddToDatabase(allowanceExpense.MapToModel()); } _expenseRepository.Save(); }
public ActionResult GenerateJOPPD(TravelReportVM view) { var travelReportsInGivenInterval = _travelReportRepository.GetAllFromDatabaseEnumerable() .Where(d => d.Departure >= view.Departure && d.Return <= view.Return).ToList().MapToViews(); decimal allowanceExpenses = 0; decimal accomodationExpenses = 0; decimal privateCarTransportationExpenses = 0; //var employees = _applicationUserRepository.GetAllFromDatabaseEnumerable().ToList().MapToViews(); //foreach (var employee in employees) //{ // var travelReports = new List<TravelReportVM>(); // foreach (var travelReport in travelReportsInGivenInterval) // { // if (travelReport.EmployeeId == employee.Id) // travelReports.Add(travelReport); // } // foreach (var travelReport in travelReports) // { // var allowanceExpense = travelReport.Expenses.Where(e => e.ExpenseCategoryId == 1).SingleOrDefault(); // allowanceExpenses += allowanceExpense.BillAmount; // var accomodationExpense = travelReport.Expenses.Where(e => e.ExpenseCategoryId == 3).ToList(); // foreach (var exp in accomodationExpense) // accomodationExpenses += exp.BillAmount; // var privateCarTransportationExpense = travelReport.Expenses.Where(e => e.ExpenseCategoryId == 10).SingleOrDefault(); // if (privateCarTransportationExpense != null) // privateCarTransportationExpenses += privateCarTransportationExpense.BillAmount; // } //} foreach (var travelReport in travelReportsInGivenInterval) { var allowanceExpense = travelReport.Expenses.Where(e => e.ExpenseCategoryId == 1).SingleOrDefault(); allowanceExpenses += allowanceExpense.BillAmount; var accomodationExpense = travelReport.Expenses.Where(e => e.ExpenseCategoryId == 3).ToList(); foreach (var exp in accomodationExpense) { accomodationExpenses += exp.BillAmount; } var privateCarTransportationExpense = travelReport.Expenses.Where(e => e.ExpenseCategoryId == 10).SingleOrDefault(); if (privateCarTransportationExpense != null) { privateCarTransportationExpenses += privateCarTransportationExpense.BillAmount; } } ViewBag.DateFrom = view.Departure.ToShortDateString(); ViewBag.DateTo = view.Return.ToShortDateString(); ViewBag.Allowance = allowanceExpenses; ViewBag.Accomodation = accomodationExpenses; ViewBag.PrivateCarTransportation = privateCarTransportationExpenses; ViewBag.Sum = allowanceExpenses + accomodationExpenses + privateCarTransportationExpenses; return(new ViewAsPdf("JOPPDPrint")); }