Esempio n. 1
0
        public object Flow([FromBody] int id)
        {
            var model  = new IncommingDispatchesResponseModel();
            var userId = ESEIM.AppContext.UserId;
            var data   = _context.DispatchesHeaders.FirstOrDefault(x => x.Id == id);

            //tracking User
            var tracking = _context.DispatchTrackingProcesss.FirstOrDefault(x => x.DispatchCode == data.DispatchCode);

            //File
            var listFile = _context.DispatchesFileACTs.Where(x => x.ProcessCode == tracking.ProcessCode).Select(y => new IncommingDispatchesFile
            {
                Id           = y.Id,
                User         = y.User.GivenName,
                FileName     = y.FileName,
                Fomart       = y.Fomart,
                Source       = y.Soure,
                CreatedTime  = y.CreatedTime,
                IsShowDelete = false
            }).AsNoTracking();

            model.Detail.ListFile.AddRange(listFile);

            //groupUser
            var listDispatchesMember = _context.DispatchesMemberActivitys.Where(x => x.ProcessCode == tracking.ProcessCode);
            var listMember           = listDispatchesMember.Where(x => x.ProcessCode == tracking.ProcessCode).Select(x => new IncommingDispatchesMember
            {
                Id                    = x.Id,
                Assigner              = x.Assigner,
                AssignerName          = _context.Users.FirstOrDefault(y => y.Id == x.Assigner).GivenName ?? null,
                AssignerGroupUserName = _context.AdGroupUsers.Join(_context.AdUserInGroups.Where(y => y.UserId == x.Assigner), post => post.GroupUserCode, meta => meta.GroupUserCode, (post, meta) => post.Title).AsNoTracking().FirstOrDefault(),
                GroupUserName         = _context.AdGroupUsers.Join(_context.AdUserInGroups.Where(y => y.UserId == x.UserId), post => post.GroupUserCode, meta => meta.GroupUserCode, (post, meta) => post.Title).AsNoTracking().FirstOrDefault(),
                Name                  = x.User.GivenName,
                UserId                = x.UserId,
                CreatedTime           = x.CreatedTime,
                Role                  = x.Role,
                Status                = (x.UserId.Equals(userId) && x.Role == 2 && x.AssigneeConfirm == EnumHelper <DocumentStatusEnum> .GetDisplayValue(DocumentStatusEnum.Review)) ? null : x.AssigneeConfirm,
                Comment               = x.Comment
            }).OrderBy(x => x.Id).AsNoTracking();

            model.Detail.ListMember.AddRange(listMember);
            return(model);
        }
Esempio n. 2
0
        public JsonResult GetItem([FromBody] int id)
        {
            var msg = new JMessage()
            {
                Error = false
            };

            try
            {
                var userId = ESEIM.AppContext.UserId;
                var data   = _context.DispatchesHeaders.FirstOrDefault(x => x.Id == id);

                var model = new IncommingDispatchesResponseModel();
                //Header
                model.Header = new IncommingDispatchesResponseHeaderModel
                {
                    Id              = data.Id,
                    DocumentName    = _context.DispatchesCategorys.FirstOrDefault(x => x.Code == data.DocumentCode)?.Name,
                    DocumentNumber  = data.DocumentNumber,
                    DocumentSymbol  = data.DocumentSymbol,
                    DocumentSymbols = data.DocumentSymbols,
                    //Origanization = _context.AdOrganizations.FirstOrDefault(x => x.OrgCode == data.Origanization)?.OrgName,
                    //FromDate = data.FromDate.HasValue ? data.FromDate.Value.ToString("dd/MM/yyyy") : null,
                    PromulgateDate = data.PromulgateDate.HasValue ? data.PromulgateDate.Value.ToString("dd/MM/yyyy") : null,
                    //Epitome = data.Epitome,
                    SignDate = data.SignDate.HasValue ? data.SignDate.Value.ToString("dd/MM/yyyy") : null,
                    //DocumentZone = _context.DispatchesCategorys.FirstOrDefault(x => x.Code == data.DocumentZone)?.Name,
                    //DocumentType = _context.DispatchesCategorys.FirstOrDefault(x => x.Code == data.DocumentType)?.Name,
                    SignUser = data.SignUser,
                    Position = _context.Roles.FirstOrDefault(x => x.Code == data.Position)?.Title,
                    //Confidentiality = _context.DispatchesCategorys.FirstOrDefault(x => x.Code == data.Confidentiality)?.Name,
                    //ImportantLevel = _context.DispatchesCategorys.FirstOrDefault(x => x.Code == data.ImportantLevel && x.Type == EnumHelper<DocumentTypeEnum>.GetDisplayValue(DocumentTypeEnum.DM))?.Name,
                    SecurityLevel = _context.DispatchesCategorys.FirstOrDefault(x => x.Code == data.SecurityLevel && x.Type == EnumHelper <DocumentTypeEnum> .GetDisplayValue(DocumentTypeEnum.DM))?.Name,
                    //GetMothod = _context.CommonSettings.FirstOrDefault(x => x.CodeSet == data.GetMothod)?.ValueSet,
                    CreatedEditor = data.CreatedEditor,
                    CreatedUser   = !string.IsNullOrEmpty(data.CreatedUserId) ? _context.Users.FirstOrDefault(x => x.Id == data.CreatedUserId)?.GivenName : null,
                    UnitEditor    = data.UnitEditor,
                    IsQPPL        = data.IsQppl,
                    //ExperiedReply = data.ExperiedReply.HasValue ? data.ExperiedReply.Value.ToString("dd/MM/yyyy") : null,
                    ReplyStatus = data.ReplyStatus,
                    Note        = data.Note,
                    Status      = data.Status,
                };

                var tracking = _context.DispatchTrackingProcesss.FirstOrDefault(x => x.DispatchCode == data.DispatchCode);
                //file
                var listFile = _context.DispatchesFileACTs.Where(x => x.ProcessCode == tracking.ProcessCode).Select(y => new IncommingDispatchesFile
                {
                    Id            = y.Id,
                    CreatedEditor = model.Header.CreatedUser,
                    User          = y.User.GivenName,
                    FileName      = y.FileName,
                    Fomart        = y.Fomart,
                    Source        = y.Soure,
                    CreatedTime   = y.CreatedTime,
                }).AsNoTracking();
                model.Detail.ListFile.AddRange(listFile);

                //GroupUser
                var listMember = _context.DispatchesMemberActivitys.Where(x => x.ProcessCode == tracking.ProcessCode).Select(x => new IncommingDispatchesMember
                {
                    Id            = x.Id,
                    Assigner      = x.Assigner,
                    Name          = x.User.GivenName,
                    UserId        = x.UserId,
                    CreatedTime   = x.CreatedTime,
                    GroupUserCode = x.GroupUserCode,
                    IsShowDelete  = false,
                    Role          = x.Role,
                }).AsNoTracking();
                var listMain = listMember.Where(x => x.Role == DocumentRoleEnum.Main.GetHashCode()).GroupBy(x => x.GroupUserCode).Select(x => x.Key);

                foreach (var item in listMain)
                {
                    if (item == null)
                    {
                        model.Detail.ListMember.AddRange(listMember.Where(x => x.Role == DocumentRoleEnum.Main.GetHashCode() && x.GroupUserCode == item));
                    }
                    else
                    {
                        if (item == EnumHelper <GroupUserEnum> .GetDisplayValue(GroupUserEnum.LD))
                        {
                            var getListMemberActiveVP = from a in _context.AdUserInGroups
                                                        join b in _context.Users on a.UserId equals b.Id
                                                        where a.GroupUserCode == item
                                                        select new
                            {
                                a.UserId,
                            };
                            var getListMemberVP = listMember.Where(x => x.GroupUserCode == item).Select(x => new IncommingDispatchesMember {
                                UserId = x.UserId, IsShowDelete = false
                            });
                            var listDeferent = getListMemberVP.Where(x => !getListMemberActiveVP.Any(y => y.UserId == x.UserId));
                            if (!listDeferent.Any())
                            {
                                var group = new IncommingDispatchesGroup
                                {
                                    GroupUserCode = item,
                                    Name          = _context.AdGroupUsers.FirstOrDefault(x => x.GroupUserCode == item).Title ?? null,
                                    IsShow        = false,
                                };
                                model.Detail.ListGroup.Add(group);
                            }
                            else
                            {
                                model.Detail.ListMember.AddRange(getListMemberVP);
                            }
                        }
                        else
                        {
                            var getListUserPermisionActive = _context.DispatchesUsers.Where(x => x.GroupUserCode == item)
                                                             .Select(x => new
                            {
                                x.UserId,
                            });
                            var getListUser = listMember.Where(x => x.GroupUserCode == item).Select(x => new IncommingDispatchesMember {
                                UserId = x.UserId, IsShowDelete = false
                            });
                            var listDeferent = getListUser.Where(x => !getListUserPermisionActive.Any(y => y.UserId == x.UserId));
                            if (!listDeferent.Any())
                            {
                                var group = new IncommingDispatchesGroup
                                {
                                    GroupUserCode = item,
                                    Name          = _context.AdGroupUsers.FirstOrDefault(x => x.GroupUserCode == item).Title ?? null,
                                    IsShow        = false,
                                };
                                model.Detail.ListGroup.Add(group);
                            }
                            else
                            {
                                model.Detail.ListMember.AddRange(getListUser);
                            }
                        }
                    }
                }
                //Người xử lý chính
                var checkUserMain = listMember.FirstOrDefault(x => x.UserId == userId);
                if (checkUserMain.Role == DocumentRoleEnum.Main.GetHashCode())
                {
                    var listAssignerActiveSend = listMember.Where(x => x.Assigner == userId).Distinct().Traverse(y => listMember.Where(child => y.UserId == child.Assigner && y.Role != DocumentRoleEnum.Main.GetHashCode()).DistinctBy(z => z.Assigner)).Select(x => new IncommingDispatchesMember
                    {
                        UserId       = x.UserId,
                        Name         = x.Name,
                        IsShowDelete = false,
                        IsShowSend   = true
                    });
                    model.Detail.ListMember.AddRange(listAssignerActiveSend);
                }
                else
                {
                    var userSend = listMember.Where(x => x.UserId == userId && x.Role != DocumentRoleEnum.Main.GetHashCode()).Flatten(y => listMember.Where(parent => y.Assigner == parent.UserId && parent.Role != DocumentRoleEnum.Main.GetHashCode())).Select(x => x.Assigner).FirstOrDefault();
                    if (userSend != null)
                    {
                        var listAssignerActiveSend = listMember.Where(x => x.Assigner == userSend).Distinct().Traverse(y => listMember.Where(child => y.UserId == child.Assigner && y.Role != DocumentRoleEnum.Main.GetHashCode()).DistinctBy(z => z.Assigner)).Select(x => new IncommingDispatchesMember
                        {
                            UserId       = x.UserId,
                            Name         = x.Name,
                            IsShowDelete = false,
                            IsShowSend   = true
                        });
                        model.Detail.ListMember.AddRange(listAssignerActiveSend);
                    }
                }
                msg.Object = model;
            }
            catch (Exception ex)
            {
                msg.Error = true;
                msg.Title = String.Format(CommonUtil.ResourceValue("DODP_MSG_FAIL_DOCUMENT"));
            }
            return(Json(msg));
        }