示例#1
0
        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);
            }
        }
示例#2
0
        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) { }
        }
示例#3
0
        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();
        }