public override bool UpdateData(int userId, int id, ref object dtoItem, out Library.DTO.Notification notification) { var dtoClientComplaint = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.ClientComplaint>(); notification = new Library.DTO.Notification() { Type = Library.DTO.NotificationType.Success }; try { using (var context = CreateContext()) { ClientComplaint dbItem; if (id <= 0) { dbItem = new ClientComplaint { ReceivedDate = DateTime.Now, CreatedBy = userId }; context.ClientComplaints.Add(dbItem); } else { dbItem = context.ClientComplaints.SingleOrDefault(o => o.ClientComplaintID == id); } if (dbItem == null) { notification.Message = string.Format("ClientComplaint [id={0}] not found!", id); return(false); } _converter.DTO2DB_ClientComplaint(dtoClientComplaint, ref dbItem, userId, _tempFolder); // remove orphan items context.ClientComplaintItems.Local.Where(o => o.ClientComplaint == null).ToList().ForEach(o => context.ClientComplaintItems.Remove(o)); context.ClientComplaintUsers.Local.Where(o => o.ClientComplaint == null).ToList().ForEach(o => context.ClientComplaintUsers.Remove(o)); context.ClientComplaintCommunications.Local.Where(o => o.ClientComplaint == null).ToList().ForEach(o => context.ClientComplaintCommunications.Remove(o)); context.ClientComplaintItemImages.Local.Where(o => o.ClientComplaintItem == null).ToList().ForEach(o => context.ClientComplaintItemImages.Remove(o)); dbItem.UpdatedBy = userId; dbItem.UpdatedDate = DateTime.Now; SendEmailNotification(context); context.SaveChanges(); if (id <= 0) { dbItem.ComplaintNumber = dbItem.ClientComplaintID.ToString("D6"); context.SaveChanges(); } dtoItem = GetData(userId, dbItem.ClientComplaintID, dbItem.ClientID, dbItem.YearSeason, out notification); return(true); } } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = ex.Message; return(false); } }
private static void SendEmailNotification(ClientComplaintEntities context) { try { var messageBody = new StringBuilder(); var messageTitle = ""; var messageSendTo = ""; ClientComplaint complaint = null; string description = string.Empty; int? LoadingPlanDetailID = null; foreach (var entry in context.ChangeTracker.Entries().Where(o => o.State != EntityState.Unchanged && o.State != EntityState.Detached)) { ClientComplaintItem item; switch (entry.State) { case EntityState.Added: if (entry.Entity is ClientComplaint) { // new complaint added complaint = entry.Entity as ClientComplaint; messageTitle = string.Format("Client complaint added, number: [{0}]. Received Date: [{1}]", complaint.ComplaintNumber, complaint.ReceivedDate); } else if (entry.Entity is ClientComplaintItem) { item = entry.Entity as ClientComplaintItem; complaint = context.ClientComplaints.FirstOrDefault(o => o.ClientComplaintID == item.ClientComplaintID); description = context.ClientComplaint_ItemInfo_View.FirstOrDefault(o => o.LoadingPlanDetailID == item.LoadingPlanDetailID.Value).ModelNM; messageTitle = string.Format("Some changes on client complaint number: [{0}]. Received Date: [{1}]", complaint.ComplaintNumber, complaint.ReceivedDate); messageBody.AppendFormat("Add new complaint item [{0}] description: [{1}]<br/>", description, item.ComplaintDescription); } break; case EntityState.Deleted: case EntityState.Modified: if (entry.Entity is ClientComplaint) { // new complaint added complaint = entry.Entity as ClientComplaint; messageTitle = string.Format("Some changes on client complaint number: [{0}]. Received Date: [{1}]", complaint.ComplaintNumber, complaint.ReceivedDate); } else if (entry.Entity is ClientComplaintItem) { item = entry.Entity as ClientComplaintItem; if (item != null) { complaint = context.ClientComplaints.FirstOrDefault(o => o.ClientComplaintID == item.ClientComplaintID); if (complaint != null && complaint.ClientComplaintID > 0) { messageTitle = string.Format("Some changes on client complaint number: [{0}]. Received Date: [{1}]", complaint.ComplaintNumber, complaint.ReceivedDate); if (entry.State == EntityState.Added) { description = context.ClientComplaint_ItemInfo_View.FirstOrDefault(o => o.LoadingPlanDetailID == item.LoadingPlanDetailID.Value).ModelNM; messageBody.AppendFormat("Add new complaint item [{0}] description: [{1}]<br/>", description, item.ComplaintDescription); } else if (entry.State == EntityState.Deleted) { LoadingPlanDetailID = (int?)entry.OriginalValues["LoadingPlanDetailID"]; description = context.ClientComplaint_ItemInfo_View.FirstOrDefault(o => o.LoadingPlanDetailID == LoadingPlanDetailID.Value).ModelNM; messageBody.AppendFormat("Delete a complaint item: [{0}]<br/>", description); } else if (entry.State == EntityState.Modified) { description = context.ClientComplaint_ItemInfo_View.FirstOrDefault(o => o.LoadingPlanDetailID == item.LoadingPlanDetailID.Value).ModelNM; messageBody.AppendFormat("Update a complaint item [{0}] description: [{1}]<br/>", description, item.ComplaintDescription); } } } } break; } } if (string.IsNullOrEmpty(messageTitle) || complaint == null) { return; } foreach (var employee in complaint.ClientComplaintUsers) { var emp = context.Employees.FirstOrDefault(o => o.EmployeeID == employee.EmployeeID); var profile = context.AccountMng_UserProfile_View.FirstOrDefault(o => o.UserId == emp.UserID); if (profile != null && !string.IsNullOrEmpty(profile.Email)) { messageSendTo += !string.IsNullOrEmpty(messageSendTo) ? ";" + profile.Email : profile.Email; } } // add email message to database if (!string.IsNullOrEmpty(messageSendTo)) { var dbEmail = new EmailNotificationMessage { EmailBody = messageBody.ToString(), EmailSubject = messageTitle, SendTo = messageSendTo }; context.EmailNotificationMessages.Add(dbEmail); } } catch (Exception ex) { } }
public void DTO2DB_ClientComplaint(DTO.ClientComplaint dtoItem, ref ClientComplaint dbItem, int createdBy, string tempFolder) { // client complain items foreach (ClientComplaintItem dbComplaintItem in dbItem.ClientComplaintItems.ToArray()) { if (!dtoItem.ClientComplaintItems.Select(o => o.ClientComplaintItemID).Contains(dbComplaintItem.ClientComplaintItemID)) { // remove image foreach (ClientComplaintItemImage dbComplaintImage in dbComplaintItem.ClientComplaintItemImages.ToArray()) { if (!string.IsNullOrEmpty(dbComplaintImage.ImageFile)) { // remove image file fwFactory.RemoveImageFile(dbComplaintImage.ImageFile); } dbComplaintItem.ClientComplaintItemImages.Remove(dbComplaintImage); } dbItem.ClientComplaintItems.Remove(dbComplaintItem); } } ////ClientComplaintItems //var willDeletedItems = new List<ClientComplaintItem>(); //List<ClientComplaintItemImage> willDeletedItemImages; if (dtoItem.ClientComplaintItems != null && dtoItem.ClientComplaintItems.Count > 0) { ////CHECK //foreach (var dbComplaintItem in dbItem.ClientComplaintItems) //{ // //DB NOT EXIST IN DTO // if (!dtoItem.ClientComplaintItems.Select(s => s.ClientComplaintItemID).Contains(dbComplaintItem.ClientComplaintItemID)) // { // willDeletedItems.Add(dbComplaintItem); // } // else //DB IS EXIST IN DB // { // willDeletedItemImages = new List<ClientComplaintItemImage>(); // foreach (var dbComplaintItemImage in dbComplaintItem.ClientComplaintItemImages) // { // var clientComplaintItem = dtoItem.ClientComplaintItems // .FirstOrDefault(o => o.ClientComplaintItemID == dbComplaintItem.ClientComplaintItemID); // if (clientComplaintItem != null && !clientComplaintItem // .ClientComplaintItemImages.Select(x => x.ClientComplaintItemImageID) // .Contains(dbComplaintItemImage.ClientComplaintItemImageID)) // { // willDeletedItemImages.Add(dbComplaintItemImage); // } // } // foreach (var dbItemImage in willDeletedItemImages) // { // dbComplaintItem.ClientComplaintItemImages.Remove(dbItemImage); // } // } //} //// Delete Parent and child items //foreach (var dbParentItem in willDeletedItems) //{ // var deletedChildItems = dbParentItem.ClientComplaintItemImages.ToList(); // foreach (var item in deletedChildItems) // { // var clientComplaintItem = dbItem.ClientComplaintItems // .FirstOrDefault(o => o.ClientComplaintItemID == dbParentItem.ClientComplaintItemID); // if (clientComplaintItem != null) // clientComplaintItem.ClientComplaintItemImages.Remove(item); // } // dbItem.ClientComplaintItems.Remove(dbParentItem); //} //MAP foreach (var dtoItemM in dtoItem.ClientComplaintItems) { ClientComplaintItem _dbItem; ClientComplaintItemImage _dbItemImage; if (dtoItemM.ClientComplaintItemID < 0) { _dbItem = new ClientComplaintItem(); if ((dtoItemM.ClientComplaintItemImages != null) && (dtoItemM.ClientComplaintItemImages.Count > 0)) { foreach (var dtoItemImageM in dtoItemM.ClientComplaintItemImages) { // create new if (dtoItemImageM.ImageFile_HasChange.HasValue && dtoItemImageM.ImageFile_HasChange.Value) { dtoItemImageM.ImageFile = fwFactory.CreateFilePointer(tempFolder, dtoItemImageM.ImageFile_NewFile, dtoItemImageM.ImageFile); } _dbItemImage = new ClientComplaintItemImage(); _dbItem.ClientComplaintItemImages.Add(_dbItemImage); AutoMapper.Mapper.Map <DTO.ClientComplaintItemImage, ClientComplaintItemImage>(dtoItemImageM, _dbItemImage); } } dbItem.ClientComplaintItems.Add(_dbItem); } else { _dbItem = dbItem.ClientComplaintItems.FirstOrDefault(o => o.ClientComplaintItemID == dtoItemM.ClientComplaintItemID); if (_dbItem != null && dtoItemM.ClientComplaintItemImages != null && dtoItemM.ClientComplaintItemImages.Count > 0) { foreach (var itemImage in dtoItemM.ClientComplaintItemImages) { //modify dto image field if (itemImage.ImageFile_HasChange.HasValue && itemImage.ImageFile_HasChange.Value) { itemImage.ImageFile = fwFactory.CreateFilePointer(tempFolder, itemImage.ImageFile_NewFile, itemImage.ImageFile); } if (itemImage.ClientComplaintItemImageID < 0) { _dbItemImage = new ClientComplaintItemImage(); _dbItem.ClientComplaintItemImages.Add(_dbItemImage); } else { _dbItemImage = _dbItem.ClientComplaintItemImages .FirstOrDefault(o => o.ClientComplaintItemImageID == itemImage.ClientComplaintItemImageID); } if (_dbItemImage != null) { AutoMapper.Mapper.Map <DTO.ClientComplaintItemImage, ClientComplaintItemImage>(itemImage, _dbItemImage); } } } } if (_dbItem != null) { AutoMapper.Mapper.Map <DTO.ClientComplaintItem, ClientComplaintItem>(dtoItemM, _dbItem); } } } // ClientComplaintUsers if (dtoItem.ClientComplaintUsers != null && dtoItem.ClientComplaintUsers.Count > 0) { foreach (var item in dbItem.ClientComplaintUsers.ToArray()) { if (!dtoItem.ClientComplaintUsers.Select(o => o.ClientComplaintUserID).Contains(item.ClientComplaintUserID)) { dbItem.ClientComplaintUsers.Remove(item); } } //map child row foreach (var item in dtoItem.ClientComplaintUsers) { ClientComplaintUser dbClientComplaintUser; if (item.ClientComplaintUserID <= 0) { dbClientComplaintUser = new ClientComplaintUser(); dbItem.ClientComplaintUsers.Add(dbClientComplaintUser); } else { dbClientComplaintUser = dbItem.ClientComplaintUsers.FirstOrDefault(o => o.ClientComplaintUserID == item.ClientComplaintUserID); } if (dbClientComplaintUser != null) { Mapper.Map(item, dbClientComplaintUser); } } } // ClientComplaintCommunications if (dtoItem.ClientComplaintCommunications != null && dtoItem.ClientComplaintCommunications.Count > 0) { foreach (var item in dbItem.ClientComplaintCommunications.ToArray()) { if (!dtoItem.ClientComplaintCommunications.Select(o => o.ClientComplaintCommunicationID).Contains(item.ClientComplaintCommunicationID)) { dbItem.ClientComplaintCommunications.Remove(item); } } //map child row foreach (var item in dtoItem.ClientComplaintCommunications) { ClientComplaintCommunication dbClientComplaintCommunication; if (item.ClientComplaintCommunicationID <= 0) { dbClientComplaintCommunication = new ClientComplaintCommunication(); dbItem.ClientComplaintCommunications.Add(dbClientComplaintCommunication); dbClientComplaintCommunication.CreatedBy = createdBy; if (DateTime.TryParse(item.CreatedDate, nl, System.Globalization.DateTimeStyles.None, out tmpDate)) { dbClientComplaintCommunication.CreatedDate = tmpDate; } } else { dbClientComplaintCommunication = dbItem.ClientComplaintCommunications.FirstOrDefault(o => o.ClientComplaintCommunicationID == item.ClientComplaintCommunicationID); } if (dbClientComplaintCommunication != null) { Mapper.Map(item, dbClientComplaintCommunication); } } } Mapper.Map(dtoItem, dbItem); dbItem.UpdatedDate = DateTime.Now; dbItem.DeliveryDateClient = dtoItem.DeliveryDateClient.ConvertStringToDateTime(); }