public async Task <ActionResult> Create() { var tenants = (await _tenantRepository.GetAllAsync()).OrderBy(t => t.Name); var rooms = (await _roomRepository.GetAllAsync()).OrderBy(r => r.Address); var accrualTypes = (await _accrualTypeRepository.GetAllAsync()).OrderBy(t => t.Name); var tenantsSelectList = new SelectList(tenants, "Id", "Name", tenants.First()); var roomsSelectList = new SelectList(rooms, "Id", "Address", rooms.First()); var accrualTypesSelectList = new SelectList(accrualTypes, "Id", "Name", accrualTypes.First()); var vm = new ContractViewModel { Tenants = tenantsSelectList, Rooms = roomsSelectList, AccrualTypes = accrualTypesSelectList }; return(View(vm)); }
public async Task <IActionResult> Index() { var tenants = (await _tenantRepository.GetAllAsync()).OrderBy(t => t.Name); var accrualTypes = (await _accrualTypeRepository.GetAllAsync()).OrderBy(a => a.Name).ToList(); accrualTypes.Add(new Domain.Entities.AccrualType() { Id = null, Name = "Сводный отчёт" }); var tenantSelectList = new SelectList(tenants, "Id", "Name", tenants.First()); var accrualTypesSelectList = new SelectList(accrualTypes, "Id", "Name", accrualTypes.First(a => String.IsNullOrEmpty(a.Id))); var vm = new HomeViewModel { Tenants = tenantSelectList, AccrualTypes = accrualTypesSelectList }; 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)); }
public async Task <ActionResult> Index() => View((await _repository.GetAllAsync()).OrderBy(t => t.Name).Select(AccrualTypeViewModel.FromAccrualType));