public static ClientsGroupingModel UpdateClientsToDelete(ClientsGroupingModel clients) { var clientsGroupingModel = new ClientsGroupingModel { UpdatedClients = new List<Client>(),//new list ClientsWithIncrementedDreams = clients.ClientsWithIncrementedDreams, FirstDreamClients = clients.FirstDreamClients, }; using (var context = new BaseDbContext()) { foreach (var client in clients.NewClients) { var originalClient = new Client(); context.Configuration.ProxyCreationEnabled = false; originalClient = clients.DeletedClients.SingleOrDefault(cl => cl.Phone == client.Phone); if (originalClient != null) { client.Id = originalClient.Id; clientsGroupingModel.UpdatedClients.Add(client); var clientsWithIncrementedDreams = UpdatedClientDreamsModel.ClientViewModelConverter(client, originalClient.Dreams); //check dream if (client.Dreams > originalClient.Dreams && !clientsGroupingModel.ClientsWithIncrementedDreams.Contains(clientsWithIncrementedDreams)) { clientsGroupingModel.ClientsWithIncrementedDreams.Add(clientsWithIncrementedDreams); } //check if dream changed from 0 to 1 if (client.Dreams == 1 && originalClient.Dreams == 0 && !clientsGroupingModel.FirstDreamClients.Contains(client)) { clientsGroupingModel.FirstDreamClients.Add(client); } } else { // add new client var newClient = new Client() { Id = client.Id, UserName = client.UserName, FirstName = client.FirstName, LastName = client.LastName, Country = client.Country, RegistrationDate = client.RegistrationDate, Phone = client.Phone, Dreams = client.Dreams, Email = client.Email, UpdatedDate = DateTime.UtcNow, LoadedDate = DateTime.UtcNow, IsSentReminderSms = false }; clientsGroupingModel.NewClients.Add(newClient); } } // add deleted clients foreach (var originalClient in clients.DeletedClients.ToList() .Where(originalClient => clients.NewClients.All(c => c.Phone != originalClient.Phone))) { if (originalClient.IsDeleted == false) { clientsGroupingModel.DeletedClients.Add(originalClient); } } context.SaveChanges(); } return clientsGroupingModel; }
public static ClientsGroupingModel UpdateClients(List<Client> clients, Guid importLogId) { var clientsGroupingModel = new ClientsGroupingModel(); using (var context = new BaseDbContext()) { foreach (var client in clients) { var originalClient = new Client(); context.Configuration.ProxyCreationEnabled = false; originalClient = context.Clients.SingleOrDefault(cl => cl.UserName == client.UserName && cl.Phone == client.Phone && cl.IsDeleted==false); if (originalClient != null) { if (originalClient.IsDeleted == true) { continue; } else { client.Id = originalClient.Id; var clientsWithIncrementedDreams = UpdatedClientDreamsModel.ClientViewModelConverter(client, originalClient.Dreams); //check dream if (client.Dreams > originalClient.Dreams && !clientsGroupingModel.ClientsWithIncrementedDreams.Contains(clientsWithIncrementedDreams)) { clientsGroupingModel.ClientsWithIncrementedDreams.Add(clientsWithIncrementedDreams); } //check if dream changed from 0 to 1 if (client.Dreams == 1 && originalClient.Dreams == 0 && !clientsGroupingModel.FirstDreamClients.Contains(client)) { clientsGroupingModel.FirstDreamClients.Add(client); } //change updateDate if Dreams changed if (client.Dreams != originalClient.Dreams) { client.UpdatedDate = DateTime.UtcNow; } else { client.UpdatedDate = originalClient.UpdatedDate; } client.IsSentReminderSms = originalClient.IsSentReminderSms; // update scalar properties(save in DB) var parentEntry = context.Entry(originalClient); parentEntry.CurrentValues.SetValues(client); clientsGroupingModel.UpdatedClients.Add(client);// not need } } else { //add new client var newClient = new Client() { Id = client.Id, UserName = client.UserName, FirstName = client.FirstName, LastName = client.LastName, Country = client.Country, RegistrationDate = client.RegistrationDate, Phone = client.Phone, Dreams = client.Dreams, Email = client.Email, UpdatedDate = DateTime.UtcNow, LoadedDate = DateTime.UtcNow, IsSentReminderSms = false, IsDeleted = false }; clientsGroupingModel.NewClients.Add(newClient); } } // add deleted clients foreach (var originalClient in context.Clients.ToList() .Where(originalClient => clients.All(c => c.UserName != originalClient.UserName))) { if (originalClient.IsDeleted == false) { clientsGroupingModel.DeletedClients.Add(originalClient); } } AddImportLogClientUpdate(clientsGroupingModel.UpdatedClients); context.SaveChanges(); _unitOfWork.ImportLogClientRepository.Save();//можливо винести з метода для швидкодії } return UpdateClientsToDelete(clientsGroupingModel); }