// изменить список аспирантов, принадлежащих к приказу private async Task AddOrUpdateAssignedAspirants(Order order) { foreach (var aspirant in order.Aspirants) { AspirantOrder aspirantOrder = await _context.AspirantOrders.FirstOrDefaultAsync(a => (a.AspirantId == aspirant.Id && a.OrderId == order.Id)); if (aspirant.Assigned) { if (aspirantOrder != null) { aspirantOrder.AspirantId = aspirant.Id; aspirantOrder.OrderId = order.Id; _context.AspirantOrders.Update(aspirantOrder); } else { aspirantOrder = new AspirantOrder { AspirantId = aspirant.Id, OrderId = order.Id }; _context.AspirantOrders.Add(aspirantOrder); } } else { if (aspirantOrder != null) { _context.AspirantOrders.Remove(aspirantOrder); } } } await _context.SaveChangesAsync(); }
// изменить список аспирантов в приказе - в _context.AspirantOrders private async Task EditAssignedAspirantsInOrder(int orderId, ICollection <Aspirant> deletedAspirants, ICollection <Aspirant> addedAspirants) { // пересечение двух множеств по Id // Many to Many - выбрать аспирантов по приказу из _context.Aspirants, которые входили в приказ до изменений List <Aspirant> oldAspirants = GetAspirantsInOrder(orderId).ToList(); List <AspirantOrder> aspirantsAO = _context.AspirantOrders.Where(i => i.OrderId == orderId).ToList(); // выбрать в AspirantOrders записи, которые отсутствуют в aspirantsInOrder (deletedAspirants) - для удаления ICollection <AspirantOrder> forDelete = aspirantsAO.Where(ao => deletedAspirants.Any(a => a.Id == ao.AspirantId)).ToList(); // Добавить новых аспирантов в AspirantOrders foreach (var aspirant in addedAspirants) { AspirantOrder aspirantOrder = new AspirantOrder { AspirantId = aspirant.Id, OrderId = orderId }; _context.AspirantOrders.Add(aspirantOrder); } // Удалить аспирантов из AspirantOrders _context.AspirantOrders.RemoveRange(forDelete); await _context.SaveChangesAsync(); }
// добавить в AspirantOrder список аспирантов, принадлежащих к приказу private async Task AddAssignedAspirants(Order order) { foreach (var aspirant in order.Aspirants) { AspirantOrder aspirantOrder = new AspirantOrder { AspirantId = aspirant.Id, OrderId = order.Id }; _context.AspirantOrders.Add(aspirantOrder); } await _context.SaveChangesAsync(); }
// изменить курс и статус аспиранта private async Task UpdateAspirantStatus(Order order) { foreach (var assignedAspirant in order.Aspirants.Where(aa => aa.Assigned)) { Aspirant aspirant = _context.Aspirants.First(a => a.Id == assignedAspirant.Id); if (aspirant != null) { aspirant.Course++; switch (order.OrderType.Id) { case (int)OrderTypeEnum.Зарахування: aspirant.Course = 1; // aspirant.StatustypeId = assignedAspirant. break; } } AspirantOrder aspirantOrder = await _context.AspirantOrders.FirstOrDefaultAsync(a => (a.AspirantId == assignedAspirant.Id && a.OrderId == order.Id)); if (assignedAspirant.Assigned) { if (aspirantOrder != null) { aspirantOrder.AspirantId = assignedAspirant.Id; aspirantOrder.OrderId = order.Id; _context.AspirantOrders.Update(aspirantOrder); } else { aspirantOrder = new AspirantOrder { AspirantId = assignedAspirant.Id, OrderId = order.Id }; _context.AspirantOrders.Add(aspirantOrder); } } else { if (aspirantOrder != null) { _context.AspirantOrders.Remove(aspirantOrder); } } } await _context.SaveChangesAsync(); }