示例#1
0
        public async Task <IActionResult> EditEmployee(int id, [Bind("IdEmployee,FullName,Address,Telephone,Employment,Salary,Pid")] Employee employee)
        {
            if (id != employee.IdEmployee)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(employee);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!EmployeeExists(employee.IdEmployee))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(EmployeesList)));
            }
            return(View(employee));
        }
示例#2
0
        public async Task <IActionResult> MainPage()
        {
            // only logged users can see the main page
            if (Authentication.Instance.isLoggedIn())
            {
                var apartments = _context.Apartment.Include(a => a.IdOwnerNavigation).OrderBy(a => a.IdOwnerNavigation.FullName);

                var contracts = _context.Contract;

                var employees = _context.Employee;

                // total salary of all employees
                double salarySum = 0;

                foreach (var employee in employees)
                {
                    salarySum += employee.Salary;
                }

                //number of all association tenants
                byte totalAssociationTenants = 0;

                foreach (var apartment in apartments)
                {
                    if (apartment.NoTenants != null)
                    {
                        totalAssociationTenants += apartment.NoTenants.Value;
                    }
                }

                // compute personnel salary tax per tenant
                double taxPerTenant = salarySum / totalAssociationTenants;

                foreach (Apartment apartment in apartments)
                {
                    var waterConsumptions = _context.WaterConsumption.Where(w => w.IdApartment == apartment.IdApartment);

                    var receipts = _context.Receipt.Where(r => r.IdApartment == apartment.IdApartment);

                    DateTime date = DateTime.Now;

                    WaterConsumption oldWaterConsumption = waterConsumptions.FirstOrDefault(w => w.Date.Month != date.Month);

                    // if an old report of water consumption was found
                    if (oldWaterConsumption != null)
                    {
                        // current debt becomes previous debt
                        apartment.PreviousDebt += apartment.CurrentDebt;
                        // delete the report
                        _context.WaterConsumption.Remove(oldWaterConsumption);
                    }

                    apartment.CurrentDebt = 0;

                    var currentWaterConsumption = waterConsumptions.FirstOrDefault(w => w.Date.Month == date.Month);

                    // compute payment for warm and cold water in the current month
                    if (currentWaterConsumption != null)
                    {
                        var warmWaterContract = contracts.FirstOrDefault(c => c.Type == "Warm Water");
                        var coldWaterContract = contracts.FirstOrDefault(c => c.Type == "Cold Water");
                        apartment.CurrentDebt += currentWaterConsumption.ColdWater * coldWaterContract.Price + currentWaterConsumption.WarmWater * warmWaterContract.Price;
                    }

                    // for other contracts add tax per tenant
                    foreach (var contract in contracts)
                    {
                        if (contract.Type != "Water")
                        {
                            apartment.CurrentDebt += contract.Price * apartment.NoTenants;
                        }
                    }

                    // add personnel salary tax per tenant
                    apartment.CurrentDebt += apartment.NoTenants * taxPerTenant;

                    //subtract amount from current debt based on receipts
                    var currentReceipts = receipts.Where(r => r.Date.Month == date.Month);

                    foreach (var receipt in currentReceipts)
                    {
                        if (apartment.CurrentDebt != 0)
                        {
                            apartment.CurrentDebt -= receipt.Amount;
                        }
                        else
                        {
                            if (apartment.PreviousDebt != 0)
                            {
                                apartment.PreviousDebt -= receipt.Amount;
                            }
                        }
                    }

                    apartment.CurrentDebt  = Math.Round((double)apartment.CurrentDebt, 2);
                    apartment.PreviousDebt = Math.Round((double)apartment.PreviousDebt, 2);


                    apartment.TotalDebt = apartment.PreviousDebt + apartment.CurrentDebt;


                    _context.Update(apartment);
                }

                await _context.SaveChangesAsync();

                return(View(await apartments.ToListAsync()));
            }
            else
            {
                return(Redirect("~/Home/Index"));
            }
        }