private async Task <IEnumerable <AccrualViewModel> > GetAccrualViewModels(string userId) { var tenants = await _tenantRepository.GetAllAsync(); var contracts = await _contractRepository.GetAllAsync(); var accruals = (await _accrualRepository.GetAllAsync()) .Where(a => userId != null ? tenants.First(t => t.Id == contracts.First(c => c.Id == a.ContractId).TenantId).UserId == userId : true) .Select(AccrualViewModel.FromAccrual) .ToList(); var getTasks = new List <Task>(); foreach (var accrual in accruals) { var contract = contracts.First(c => c.Id == accrual.ContractId); getTasks.Add(_tenantRepository .GetByIdAsync(contract.TenantId) .ContinueWith(t => { accrual.Tenant = t.Result.Name; })); getTasks.Add(_roomRepository .GetByIdAsync(contract.RoomId) .ContinueWith(r => { accrual.Room = r.Result.Address; })); getTasks.Add(_accrualTypeRepository .GetByIdAsync(contract.AccrualTypeId) .ContinueWith(t => { accrual.AccrualType = t.Result.Name; })); } await Task.WhenAll(getTasks); return(accruals); }
public async Task <ActionResult> Create(string contractId) { var contract = await _contractRepository.GetByIdAsync(contractId); var accrualType = await _accrualTypeRepository.GetByIdAsync(contract.AccrualTypeId); var room = await _roomRepository.GetByIdAsync(contract.RoomId); var sum = 0m; var rate = 0.0; switch (accrualType.Name) { case "Аренда": rate = (await _calcCoefficientRepository .GetByIdAsync("73163d80-28fa-45bf-8636-54dd4c33e5f1")) .Coefficient; sum = (decimal)room.Square * (decimal)rate * room.ComfortCoef * room.IncreasingCoefToBaseRate * room.PlacementCoef * room.SocialOrientationCoef * room.Price; break; case "Техобслуживание": rate = (await _calcCoefficientRepository .GetByIdAsync("e557209d-ce5e-4924-952f-3b1751e346dc")) .Coefficient; sum = (decimal)(room.Square * rate); break; case "Капремонт": rate = (await _calcCoefficientRepository .GetByIdAsync("7cbbe0f0-b840-409f-aa38-4259f4e1ee82")) .Coefficient; sum = (decimal)(room.Square * rate); break; } var accrual = new AccrualViewModel { ContractId = contractId, Tenant = (await _tenantRepository.GetByIdAsync(contract.TenantId)).Name, Room = room.Address, InvoiceNumber = 0, AccrualType = (await _accrualTypeRepository.GetByIdAsync(contract.AccrualTypeId)).Name, AccrualDate = DateTime.Now.Date, Summ = sum }; return(View(accrual)); }
public async Task <ActionResult> Create(string contractId) { var contract = await _contractRepository.GetByIdAsync(contractId); var payment = new PaymentViewModel { ContractId = contractId, Tenant = (await _tenantRepository.GetByIdAsync(contract.TenantId)).Name, Room = (await _roomRepository.GetByIdAsync(contract.RoomId)).Address, AccrualType = (await _accrualTypeRepository.GetByIdAsync(contract.AccrualTypeId)).Name, PaymentOrderNumber = 0, PaymentDate = DateTime.Now.Date }; return(View(payment)); }
public async Task <ActionResult> Edit(string id) { var contract = await _contractRepository.GetByIdAsync(id); var tenant = await _tenantRepository.GetByIdAsync(contract.TenantId); var room = await _roomRepository.GetByIdAsync(contract.RoomId); var accrualType = await _accrualTypeRepository.GetByIdAsync(contract.AccrualTypeId); var vm = ContractViewModel.FromContract(contract); vm.Tenant = tenant.Name; vm.Room = room.Address; vm.AccrualType = accrualType.Name; return(View(vm)); }
public async Task <IActionResult> Index(string id, string accrualTypeId, DateTime start, DateTime end) { string userId = User.IsInRole("User") ? _userManager.GetUserId(User) : null; List <Contract> contracts = new List <Contract>(); var accrualType = accrualTypeId != null ? await _accrualTypeRepository.GetByIdAsync(accrualTypeId) : null; if (userId != null || id != null) { var tenant = userId != null ? await _tenantRepository.GetByUserIdAsync(userId) : await _tenantRepository.GetByIdAsync(id); if (accrualType != null) { contracts = (await _contractRepository.GetAllByTenantIdAndAccrualTypeIdAsync(tenant.Id, accrualType.Id)) .ToList(); } else { var entries = new List <CalculationMonitorEntryViewModel>(); var accrualTypes = await _accrualTypeRepository.GetAllAsync(); foreach (var type in accrualTypes) { var contractsByAccrualType = (await _contractRepository.GetAllByTenantIdAndAccrualTypeIdAsync(tenant.Id, type.Id)) .ToList(); var accrualsByAccrualType = (await _accrualRepository.GetAllAsync()) .Where(a => contractsByAccrualType.Exists(c => c.Id == a.ContractId)); var paymentsByAccrualType = (await _paymentRepository.GetAllAsync()) .Where(p => contractsByAccrualType.Exists(c => c.Id == p.ContractId)); var openingBalanceByAccrualType = accrualsByAccrualType.Where(a => a.AccrualDate < start).Sum(a => a.Summ) - paymentsByAccrualType.Where(a => a.PaymentDate < start).Sum(p => p.Summ); var accrualsSum = accrualsByAccrualType .Where(a => a.AccrualDate >= start && a.AccrualDate <= end) .Sum(a => a.Summ); var paymentsSum = paymentsByAccrualType .Where(p => p.PaymentDate >= start && p.PaymentDate <= end) .Sum(p => p.Summ); entries.Add(new CalculationMonitorEntryViewModel { TenantId = tenant.Id, AccrualTypeId = type.Id, AccrualTypeName = type.Name, OpeningBalance = openingBalanceByAccrualType, AccrualsSum = accrualsSum, PaymentsSum = paymentsSum, ClosingBalance = openingBalanceByAccrualType + accrualsSum - paymentsSum }); } ViewBag.StartDate = start; ViewBag.EndDate = end; return(View("EntireMonitor", entries.OrderBy(e => e.AccrualTypeName))); } } var accruals = (await _accrualRepository.GetAllAsync()).Where(a => contracts.Exists(c => c.Id == a.ContractId)); var payments = (await _paymentRepository.GetAllAsync()).Where(p => contracts.Exists(c => c.Id == p.ContractId)); var openingBalance = accruals.Where(a => a.AccrualDate < start).Sum(a => a.Summ) - payments.Where(a => a.PaymentDate < start).Sum(p => p.Summ); var accrualsInPeriod = accruals .Where(a => a.AccrualDate >= start && a.AccrualDate <= end) .OrderBy(a => a.AccrualDate); var paymentsInPeriod = payments .Where(p => p.PaymentDate >= start && p.PaymentDate <= end) .OrderBy(p => p.PaymentDate); var closingBalance = openingBalance + accrualsInPeriod.Sum(a => a.Summ) - paymentsInPeriod.Sum(p => p.Summ); var viewModel = new CalculationMonitorViewModel { TenantId = id, AccrualTypeName = accrualType?.Name ?? "Сводный", OpeningBalance = openingBalance, Accruals = accrualsInPeriod.Select(AccrualViewModel.FromAccrual), Payments = paymentsInPeriod.Select(PaymentViewModel.FromPayment), ClosingBalance = closingBalance, Start = start, End = end }; return(View(viewModel)); }