Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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"));
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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
            });
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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();
                }
            }
        }
Exemplo n.º 7
0
        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();
        }
Exemplo n.º 8
0
        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"));
        }