Пример #1
0
        // 逾期及群組處理流程
        /*private bool DeadLineAndMemberGroupProcess(string group, ref IQueryable<ERecords> records)
        {
            string ignorelist = "";
            foreach (var record in records)
            {
                if (!record.RID.Contains("_B"))
                {
                    // "已結案"
                    if (record.StatusID == 3)
                    {
                        // 清空逾期期限
                        foreach (var er in record.EmailRecord)
                        {
                            er.ExpireOn = null;
                            db.Entry(er).State = EntityState.Modified;
                        }
                    }
                    // "未處理"
                    else if (record.StatusID == 1)
                    {
                        var ec = record.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault();
                        if (ec != null)
                        {
                            var expireon = ec.ExpireOn;

                            if (expireon != null && expireon.Value < DateTime.Now)
                            {
                                record.AgentID = null;
                                db.Entry(record).State = EntityState.Modified;
                            }
                        }
                    }
                    // "處理中"
                    else if (record.StatusID == 2)
                    {
                        // "未值機"
                        if (record.AgentID != null && record.AgentID.Length > 0)
                        {
                            var a = db.Agent.Find(record.AgentID);
                            if (a != null && a.EmailIsLogin == 0)
                            {
                                var ec = record.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault();
                                if (ec != null)
                                {

                                    var expireon = record.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().ExpireOn;

                                    if (expireon != null && expireon.Value < DateTime.Now)
                                    {
                                        record.AgentID = null;
                                        db.Entry(record).State = EntityState.Modified;
                                    }
                                }
                            }
                        }
                    }
                }

                var emailrecord = record.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault();
                if (emailrecord == null)
                    emailrecord = new EEmailRecord();
                if (record.EmailRecord.Count > 1)
                    emailrecord.IsReply = 1;
                else
                    emailrecord.IsReply = 0;

                if (!group.ToUpper().Contains("ENTERPRISE,PERSONAL") && !group.ToUpper().Contains("SUPER"))
                {
                    var agent = db.Agent.FirstOrDefault(a => a.AgentID == record.AgentID);
                    if (agent == null)
                    {
                        agent = db.Agent.FirstOrDefault(a => a.AgentID == emailrecord.CurrAgentId);
                    }

                    if (agent != null)
                    {
                        var mm = db.MailMember.Where(m => m.CTILoginID == agent.CTILoginID);
                        if (mm != null)
                        {
                            bool bFound = false;
                            foreach (var m in mm)
                            {
                                if (group.ToUpper().Contains(m.GroupID.ToUpper()))
                                {
                                    bFound = true;
                                    break;
                                }
                            }

                            if (!bFound)
                            {
                                ignorelist += "|" + record.RID;
                            }
                        }
                    }
                    else
                    {
                        var mm = db.EmailRawHeader.Find(emailrecord.RawHeaderId);
                        if (mm != null)
                        {
                            string GroupMailServer = "*****@*****.**";
                            if (group.ToUpper().Contains("PERSONAL"))
                                GroupMailServer = "*****@*****.**";

                            if (!mm.MsgTo.ToUpper().Contains(GroupMailServer.ToUpper()))
                                ignorelist += "|" + record.RID;

                        }
                    }
                }
            }

            db.SaveChanges();

            if (ignorelist.Length > 0)
            {
                ignorelist = ignorelist.Substring(1);
                string[] arrIgnore = ignorelist.Split('|');
                records = records.Where(r => !arrIgnore.Contains(r.RID));
            }
            return true;
        }*/
        // 查詢及排序
        private bool SearchAndSort(EmailAdmin_SearchCondition searchcondition, string orderby, ref IQueryable<ERecords> records, int Desc = 0)
        {
            #region 查詢
            if (searchcondition != null)
            {
                if (!String.IsNullOrEmpty(searchcondition.type) && !String.IsNullOrEmpty(searchcondition.condition))
                {
                    string condition = searchcondition.condition;
                    switch (searchcondition.type)
                    {
                        // 案件編號
                        case "3":
                            records = records.Where(e => condition.ToUpper().Contains(e.RID.ToUpper()));
                            break;
                        // 寄件者
                        case "2":
                            records = records.Where(e => e.EmailRecord.OrderByDescending(r => r.OrderNo).FirstOrDefault().EmailRawHeader.MsgFrom.ToUpper().Contains(condition.ToUpper()));
                            break;

                        // 客服人員
                        case "1":
                        default:
                            records = records.Where(e => e.AgentID != null && e.AgentID.Length > 0 && e.EAgent.AgentName.ToUpper().Contains(condition.ToUpper()));
                            break;
                    }
                }
                if (!String.IsNullOrEmpty(searchcondition.Filter_Record_StatusID))
                {
                    string[] arrStatusIDs = searchcondition.Filter_Record_StatusID.Split(',');
                    int[] intStatusIDs = arrStatusIDs.Select(x => int.Parse(x)).ToArray();
                    records = records.Where(r => intStatusIDs.Contains(r.StatusID.Value));
                }

                if (!String.IsNullOrEmpty(searchcondition.Filter_Record_TypeID))
                {
                    string[] arrTypeIDs = searchcondition.Filter_Record_TypeID.Split(',');
                    int[] intTypeIDs = arrTypeIDs.Select(x => int.Parse(x)).ToArray();
                    records = records.Where(r => intTypeIDs.Contains(r.TypeID.Value));
                }
            }
            #endregion

            #region 標題欄的排序
            if (!String.IsNullOrEmpty(orderby))
            {
                switch (orderby)
                {
                    // 寄件者
                    case "MsgFrom":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().EmailRawHeader.MsgFrom) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().EmailRawHeader.MsgFrom);
                        break;

                    // 郵件主旨
                    case "MsgSubject":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().EmailRawHeader.MsgSubject) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().EmailRawHeader.MsgSubject);
                        break;

                    // 進件時間
                    case "IncomeOn":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().IncomeOn) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().IncomeOn);
                        break;

                    // 逾期時間
                    case "ExpireOn":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().ExpireOn) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().ExpireOn);
                        break;

                    // 轉派次數
                    case "AssignCount":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().AssignCount) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().AssignCount);
                        break;

                    // 客服人員
                    case "AgentID":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.AgentID) : records.OrderBy(r => r.AgentID);
                        break;

                    // 案件狀態
                    case "EmailStatus":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.RecordStatus.Name) : records.OrderBy(r => r.RecordStatus.Name);
                        break;

                    // 是否為垃圾郵件
                    case "Garbage":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().Garbage) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().Garbage);
                        break;

                    // 處理狀況
                    case "ProcessStatus":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().ProcessStatus) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().ProcessStatus);
                        break;

                    // 退回原因
                    case "RejectReason":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().RejectReason) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().RejectReason);
                        break;

                    // 退回人員
                    case "CurrAgentId":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().RejectReason).ThenByDescending((r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().CurrAgentId)) : records.OrderBy(r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().RejectReason).ThenBy((r => r.EmailRecord.OrderByDescending(e => e.OrderNo).FirstOrDefault().CurrAgentId));
                        break;

                    // 案件類型
                    case "TypeID":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.TypeID) : records.OrderBy(r => r.TypeID);
                        break;

                    // 處理方式
                    case "CloseApproachID":
                        records = (Desc == 1) ? records.OrderByDescending(r => r.CloseApproachID) : records.OrderBy(r => r.CloseApproachID);
                        break;

                    // 案件編號
                    case "RID":
                    default:
                        records = (Desc == 1) ? records.OrderByDescending(r => r.RID) : records.OrderBy(r => r.RID);
                        break;
                }
            }
            else
            {
                records = (Desc == 1) ? records.OrderBy(r => r.RID) : records.OrderByDescending(r => r.RID);
            }
            #endregion

            return true;
        }
Пример #2
0
        public ActionResult IndexWait(EmailAdmin_SearchCondition searchcondition, string searchconditionStr, string sortOrder, int Desc = 0, int page = 1)
        {
            if (searchconditionStr != null && searchconditionStr.Length > 0)
                searchcondition = EmailAdmin_SearchCondition.Deserialize(searchconditionStr);

            int currentPage = page < 1 ? 1 : page;
            var records = db.Records.Include(e => e.Customers)
                                    .Include(e => e.EmailRecord)
                                    .Include(e => e.RecordStatus)
                                    .Include(e => e.RecordType)
                                    .Include(e => e.ServiceItem).Where(r => r.TypeID == 3);

            records = records.Where(r => r.AgentID == null || r.AgentID.Length < 1);

            DeadLineProcess(records);
            MailMemberProcessNormal(userGroupId, ref records);
            SearchAndSort(searchcondition, sortOrder, ref records, Desc);

            #region 網頁物件準備
            if (searchcondition.Filter_Record_StatusID == null)
                searchcondition.Filter_Record_StatusID = "";

            if (searchcondition.Filter_Record_TypeID == null)
                searchcondition.Filter_Record_TypeID = "";

            if (searchcondition.type == null)
                searchcondition.type = "1";

            if (searchcondition.condition == null)
                searchcondition.condition = "";

            ViewBag.SearchCondition = searchcondition;
            ViewBag.Order = sortOrder;
            ViewBag.NumberBegin = pageSize * (page - 1);
            ViewBag.Desc = Desc;
            if (sortOrder != null && sortOrder.Length > 0)
                ViewBag.Desc = (Desc == 1) ? 0 : 1;

            ViewBag.Page = page;
            ViewBag.Source = "1";
            #endregion

            var records2 = records.ToPagedList(currentPage, pageSize);
            foreach (var rd in records2)
            {
                string strItemNames = "";
                foreach (var item in db.RecordServiceMap.Where(s => s.RID == rd.RID))
                {
                    int nGroupID = item.GroupID;
                    int nItemID = item.ItemID;
                    strItemNames += "," + db.ServiceItem.FirstOrDefault(si => si.GroupID == nGroupID && si.ItemID == nItemID).ItemDesc;
                }
                if (strItemNames.Length > 0)
                    strItemNames = strItemNames.Substring(1);

                rd.ServiceItemNames = strItemNames;

            }
            return View(records2);
        }
 public static string Serialize(EmailAdmin_SearchCondition xyz)
 {
     var serializer = new JavaScriptSerializer();
     return serializer.Serialize(xyz);
 }