Beispiel #1
0
        public async Task <List <TicketStatus> > List(TicketStatusFilter TicketStatusFilter)
        {
            try
            {
                TicketStatusFilter.OrderBy   = TicketStatusOrder.OrderNumber;
                TicketStatusFilter.OrderType = OrderType.ASC;
                List <TicketStatus> TicketStatuss = await UOW.TicketStatusRepository.List(TicketStatusFilter);

                return(TicketStatuss);
            }
            catch (Exception ex)
            {
                if (ex.InnerException == null)
                {
                    await Logging.CreateSystemLog(ex, nameof(TicketStatusService));

                    throw new MessageException(ex);
                }
                else
                {
                    await Logging.CreateSystemLog(ex.InnerException, nameof(TicketStatusService));

                    throw new MessageException(ex.InnerException);
                }
            }
        }
        public async Task <int> Count(TicketStatusFilter filter)
        {
            IQueryable <TicketStatusDAO> TicketStatuses = DataContext.TicketStatus.AsNoTracking();

            TicketStatuses = DynamicFilter(TicketStatuses, filter);
            return(await TicketStatuses.CountAsync());
        }
Beispiel #3
0
        public async Task <ActionResult <bool> > BulkDelete([FromBody] List <long> Ids)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            TicketStatusFilter TicketStatusFilter = new TicketStatusFilter();

            TicketStatusFilter    = TicketStatusService.ToFilter(TicketStatusFilter);
            TicketStatusFilter.Id = new IdFilter {
                In = Ids
            };
            TicketStatusFilter.Selects = TicketStatusSelect.Id;
            TicketStatusFilter.Skip    = 0;
            TicketStatusFilter.Take    = int.MaxValue;

            List <TicketStatus> TicketStatuses = await TicketStatusService.List(TicketStatusFilter);

            TicketStatuses = await TicketStatusService.BulkDelete(TicketStatuses);

            if (TicketStatuses.Any(x => !x.IsValidated))
            {
                return(BadRequest(TicketStatuses.Where(x => !x.IsValidated)));
            }
            return(true);
        }
        public async Task <List <Dashboard_TicketStatusDTO> > SingleListTicketStatus([FromBody] Dashboard_TicketStatusFilterDTO Dashboard_TicketStatusFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            TicketStatusFilter TicketStatusFilter = new TicketStatusFilter();

            TicketStatusFilter.Skip        = 0;
            TicketStatusFilter.Take        = 20;
            TicketStatusFilter.OrderBy     = TicketStatusOrder.Id;
            TicketStatusFilter.OrderType   = OrderType.ASC;
            TicketStatusFilter.Selects     = TicketStatusSelect.ALL;
            TicketStatusFilter.Id          = Dashboard_TicketStatusFilterDTO.Id;
            TicketStatusFilter.Name        = Dashboard_TicketStatusFilterDTO.Name;
            TicketStatusFilter.OrderNumber = Dashboard_TicketStatusFilterDTO.OrderNumber;
            TicketStatusFilter.ColorCode   = Dashboard_TicketStatusFilterDTO.ColorCode;
            TicketStatusFilter.StatusId    = Dashboard_TicketStatusFilterDTO.StatusId;

            List <TicketStatus> TicketStatuses = await TicketStatusService.List(TicketStatusFilter);

            List <Dashboard_TicketStatusDTO> Dashboard_TicketStatusDTOs = TicketStatuses
                                                                          .Select(x => new Dashboard_TicketStatusDTO(x)).ToList();

            return(Dashboard_TicketStatusDTOs);
        }
Beispiel #5
0
        public async Task <TicketStatus> Create(TicketStatus TicketStatus)
        {
            if (!await TicketStatusValidator.Create(TicketStatus))
            {
                return(TicketStatus);
            }

            try
            {
                TicketStatusFilter TicketStatusFilter = new TicketStatusFilter
                {
                    Take      = 1,
                    Selects   = TicketStatusSelect.ALL,
                    OrderBy   = TicketStatusOrder.OrderNumber,
                    OrderType = OrderType.DESC
                };
                await UOW.Begin();

                if (TicketStatus.OrderNumber == 0)
                {
                    List <TicketStatus> TicketStatuss = await UOW.TicketStatusRepository.List(TicketStatusFilter);

                    TicketStatus.OrderNumber = TicketStatuss.Any() ? TicketStatuss.Max(c => c.OrderNumber) + 1 : 1;
                }
                await UOW.TicketStatusRepository.Create(TicketStatus);

                await UOW.Commit();

                TicketStatus = await UOW.TicketStatusRepository.Get(TicketStatus.Id);

                await Logging.CreateAuditLog(TicketStatus, new { }, nameof(TicketStatusService));

                return(TicketStatus);
            }
            catch (Exception ex)
            {
                if (ex.InnerException == null)
                {
                    await Logging.CreateSystemLog(ex, nameof(TicketStatusService));

                    throw new MessageException(ex);
                }
                else
                {
                    await Logging.CreateSystemLog(ex.InnerException, nameof(TicketStatusService));

                    throw new MessageException(ex.InnerException);
                }
            }
        }
Beispiel #6
0
        public async Task <ActionResult <int> > Count([FromBody] TicketStatus_TicketStatusFilterDTO TicketStatus_TicketStatusFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            TicketStatusFilter TicketStatusFilter = ConvertFilterDTOToFilterEntity(TicketStatus_TicketStatusFilterDTO);

            TicketStatusFilter = TicketStatusService.ToFilter(TicketStatusFilter);
            int count = await TicketStatusService.Count(TicketStatusFilter);

            return(count);
        }
        public async Task <List <TicketStatus> > List(TicketStatusFilter filter)
        {
            if (filter == null)
            {
                return(new List <TicketStatus>());
            }
            IQueryable <TicketStatusDAO> TicketStatusDAOs = DataContext.TicketStatus.AsNoTracking();

            TicketStatusDAOs = DynamicFilter(TicketStatusDAOs, filter);
            TicketStatusDAOs = DynamicOrder(TicketStatusDAOs, filter);
            List <TicketStatus> TicketStatuses = await DynamicSelect(TicketStatusDAOs, filter);

            return(TicketStatuses);
        }
Beispiel #8
0
        public async Task <ActionResult <List <TicketStatus_TicketStatusDTO> > > List([FromBody] TicketStatus_TicketStatusFilterDTO TicketStatus_TicketStatusFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            TicketStatusFilter TicketStatusFilter = ConvertFilterDTOToFilterEntity(TicketStatus_TicketStatusFilterDTO);

            TicketStatusFilter = TicketStatusService.ToFilter(TicketStatusFilter);
            List <TicketStatus> TicketStatuses = await TicketStatusService.List(TicketStatusFilter);

            List <TicketStatus_TicketStatusDTO> TicketStatus_TicketStatusDTOs = TicketStatuses
                                                                                .Select(c => new TicketStatus_TicketStatusDTO(c)).ToList();

            return(TicketStatus_TicketStatusDTOs);
        }
Beispiel #9
0
        public TicketStatusFilter ToFilter(TicketStatusFilter filter)
        {
            if (filter.OrFilter == null)
            {
                filter.OrFilter = new List <TicketStatusFilter>();
            }
            if (CurrentContext.Filters == null || CurrentContext.Filters.Count == 0)
            {
                return(filter);
            }
            foreach (var currentFilter in CurrentContext.Filters)
            {
                TicketStatusFilter subFilter = new TicketStatusFilter();
                filter.OrFilter.Add(subFilter);
                List <FilterPermissionDefinition> FilterPermissionDefinitions = currentFilter.Value;
                foreach (FilterPermissionDefinition FilterPermissionDefinition in FilterPermissionDefinitions)
                {
                    if (FilterPermissionDefinition.Name == nameof(subFilter.Id))
                    {
                        subFilter.Id = FilterPermissionDefinition.IdFilter;
                    }
                    if (FilterPermissionDefinition.Name == nameof(subFilter.Name))
                    {
                        subFilter.Name = FilterPermissionDefinition.StringFilter;
                    }

                    if (FilterPermissionDefinition.Name == nameof(subFilter.OrderNumber))
                    {
                        subFilter.OrderNumber = FilterPermissionDefinition.LongFilter;
                    }



                    if (FilterPermissionDefinition.Name == nameof(subFilter.ColorCode))
                    {
                        subFilter.ColorCode = FilterPermissionDefinition.StringFilter;
                    }

                    if (FilterPermissionDefinition.Name == nameof(subFilter.StatusId))
                    {
                        subFilter.StatusId = FilterPermissionDefinition.IdFilter;
                    }
                }
            }
            return(filter);
        }
Beispiel #10
0
        private TicketStatusFilter ConvertFilterDTOToFilterEntity(TicketStatus_TicketStatusFilterDTO TicketStatus_TicketStatusFilterDTO)
        {
            TicketStatusFilter TicketStatusFilter = new TicketStatusFilter();

            TicketStatusFilter.Selects   = TicketStatusSelect.ALL;
            TicketStatusFilter.Skip      = TicketStatus_TicketStatusFilterDTO.Skip;
            TicketStatusFilter.Take      = TicketStatus_TicketStatusFilterDTO.Take;
            TicketStatusFilter.OrderBy   = TicketStatus_TicketStatusFilterDTO.OrderBy;
            TicketStatusFilter.OrderType = TicketStatus_TicketStatusFilterDTO.OrderType;

            TicketStatusFilter.Id          = TicketStatus_TicketStatusFilterDTO.Id;
            TicketStatusFilter.Name        = TicketStatus_TicketStatusFilterDTO.Name;
            TicketStatusFilter.OrderNumber = TicketStatus_TicketStatusFilterDTO.OrderNumber;
            TicketStatusFilter.ColorCode   = TicketStatus_TicketStatusFilterDTO.ColorCode;
            TicketStatusFilter.StatusId    = TicketStatus_TicketStatusFilterDTO.StatusId;
            TicketStatusFilter.CreatedAt   = TicketStatus_TicketStatusFilterDTO.CreatedAt;
            TicketStatusFilter.UpdatedAt   = TicketStatus_TicketStatusFilterDTO.UpdatedAt;
            return(TicketStatusFilter);
        }
Beispiel #11
0
        public async Task <bool> ValidateId(TicketStatus TicketStatus)
        {
            TicketStatusFilter TicketStatusFilter = new TicketStatusFilter
            {
                Skip = 0,
                Take = 10,
                Id   = new IdFilter {
                    Equal = TicketStatus.Id
                },
                Selects = TicketStatusSelect.Id
            };

            int count = await UOW.TicketStatusRepository.Count(TicketStatusFilter);

            if (count == 0)
            {
                TicketStatus.AddError(nameof(TicketStatusValidator), nameof(TicketStatus.Id), ErrorCode.IdNotExisted);
            }
            return(count == 1);
        }
        public async Task<List<TicketOfUser_TicketStatusDTO>> FilterListTicketStatus([FromBody] TicketOfUser_TicketStatusFilterDTO TicketOfUser_TicketStatusFilterDTO)
        {
            if (!ModelState.IsValid)
                throw new BindException(ModelState);

            TicketStatusFilter TicketStatusFilter = new TicketStatusFilter();
            TicketStatusFilter.Skip = 0;
            TicketStatusFilter.Take = 20;
            TicketStatusFilter.OrderBy = TicketStatusOrder.Id;
            TicketStatusFilter.OrderType = OrderType.ASC;
            TicketStatusFilter.Selects = TicketStatusSelect.ALL;
            TicketStatusFilter.Id = TicketOfUser_TicketStatusFilterDTO.Id;
            TicketStatusFilter.Name = TicketOfUser_TicketStatusFilterDTO.Name;
            TicketStatusFilter.OrderNumber = TicketOfUser_TicketStatusFilterDTO.OrderNumber;
            TicketStatusFilter.ColorCode = TicketOfUser_TicketStatusFilterDTO.ColorCode;
            TicketStatusFilter.StatusId = TicketOfUser_TicketStatusFilterDTO.StatusId;

            List<TicketStatus> TicketStatuses = await TicketStatusService.List(TicketStatusFilter);
            List<TicketOfUser_TicketStatusDTO> TicketOfUser_TicketStatusDTOs = TicketStatuses
                .Select(x => new TicketOfUser_TicketStatusDTO(x)).ToList();
            return TicketOfUser_TicketStatusDTOs;
        }
Beispiel #13
0
        private async Task <bool> HasPermission(long Id)
        {
            TicketStatusFilter TicketStatusFilter = new TicketStatusFilter();

            TicketStatusFilter = TicketStatusService.ToFilter(TicketStatusFilter);
            if (Id == 0)
            {
            }
            else
            {
                TicketStatusFilter.Id = new IdFilter {
                    Equal = Id
                };
                int count = await TicketStatusService.Count(TicketStatusFilter);

                if (count == 0)
                {
                    return(false);
                }
            }
            return(true);
        }
        public async Task <List <TicketReport_TicketStatusDTO> > FilterListTicketStatus([FromBody] TicketReport_TicketStatusFilterDTO TicketReport_TicketStatusFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            TicketStatusFilter TicketStatusFilter = new TicketStatusFilter();

            TicketStatusFilter.Skip      = 0;
            TicketStatusFilter.Take      = 20;
            TicketStatusFilter.OrderBy   = TicketStatusOrder.Id;
            TicketStatusFilter.OrderType = OrderType.ASC;
            TicketStatusFilter.Selects   = TicketStatusSelect.ALL;
            TicketStatusFilter.Id        = TicketReport_TicketStatusFilterDTO.Id;
            TicketStatusFilter.Name      = TicketReport_TicketStatusFilterDTO.Name;

            List <TicketStatus> TicketStatuss = await TicketStatusService.List(TicketStatusFilter);

            List <TicketReport_TicketStatusDTO> TicketReport_TicketStatusDTOs = TicketStatuss
                                                                                .Select(x => new TicketReport_TicketStatusDTO(x)).ToList();

            return(TicketReport_TicketStatusDTOs);
        }
Beispiel #15
0
        public async Task <int> Count(TicketStatusFilter TicketStatusFilter)
        {
            try
            {
                int result = await UOW.TicketStatusRepository.Count(TicketStatusFilter);

                return(result);
            }
            catch (Exception ex)
            {
                if (ex.InnerException == null)
                {
                    await Logging.CreateSystemLog(ex, nameof(TicketStatusService));

                    throw new MessageException(ex);
                }
                else
                {
                    await Logging.CreateSystemLog(ex.InnerException, nameof(TicketStatusService));

                    throw new MessageException(ex.InnerException);
                }
            }
        }
        public async Task <FileResult> ExportTemplate([FromBody] TicketOfUser_TicketOfUserFilterDTO TicketOfUser_TicketOfUserFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            MemoryStream memoryStream = new MemoryStream();

            using (ExcelPackage excel = new ExcelPackage(memoryStream))
            {
                #region TicketOfUser
                var TicketOfUserHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "Notes",
                        "UserId",
                        "TicketId",
                        "TicketStatusId",
                    }
                };
                List <object[]> TicketOfUserData = new List <object[]>();
                excel.GenerateWorksheet("TicketOfUser", TicketOfUserHeaders, TicketOfUserData);
                #endregion

                #region Ticket
                var TicketFilter = new TicketFilter();
                TicketFilter.Selects   = TicketSelect.ALL;
                TicketFilter.OrderBy   = TicketOrder.Id;
                TicketFilter.OrderType = OrderType.ASC;
                TicketFilter.Skip      = 0;
                TicketFilter.Take      = int.MaxValue;
                List <Ticket> Tickets = await TicketService.List(TicketFilter);

                var TicketHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "Name",
                        "Phone",
                        "CustomerId",
                        "UserId",
                        "ProductId",
                        "ReceiveDate",
                        "ProcessDate",
                        "FinishDate",
                        "Subject",
                        "Content",
                        "TicketIssueLevelId",
                        "TicketPriorityId",
                        "TicketStatusId",
                        "TicketSourceId",
                        "TicketNumber",
                        "DepartmentId",
                        "RelatedTicketId",
                        "SLA",
                        "RelatedCallLogId",
                        "ResponseMethodId",
                        "StatusId",
                        "Used",
                    }
                };
                List <object[]> TicketData = new List <object[]>();
                for (int i = 0; i < Tickets.Count; i++)
                {
                    var Ticket = Tickets[i];
                    TicketData.Add(new Object[]
                    {
                        Ticket.Id,
                        Ticket.Name,
                        Ticket.Phone,
                        Ticket.CustomerId,
                        Ticket.UserId,
                        Ticket.ProductId,
                        Ticket.ReceiveDate,
                        Ticket.ProcessDate,
                        Ticket.FinishDate,
                        Ticket.Subject,
                        Ticket.Content,
                        Ticket.TicketIssueLevelId,
                        Ticket.TicketPriorityId,
                        Ticket.TicketStatusId,
                        Ticket.TicketSourceId,
                        Ticket.TicketNumber,
                        Ticket.DepartmentId,
                        Ticket.RelatedTicketId,
                        Ticket.SLA,
                        Ticket.RelatedCallLogId,
                        Ticket.ResponseMethodId,
                        Ticket.StatusId,
                        Ticket.Used,
                    });
                }
                excel.GenerateWorksheet("Ticket", TicketHeaders, TicketData);
                #endregion
                #region TicketStatus
                var TicketStatusFilter = new TicketStatusFilter();
                TicketStatusFilter.Selects   = TicketStatusSelect.ALL;
                TicketStatusFilter.OrderBy   = TicketStatusOrder.Id;
                TicketStatusFilter.OrderType = OrderType.ASC;
                TicketStatusFilter.Skip      = 0;
                TicketStatusFilter.Take      = int.MaxValue;
                List <TicketStatus> TicketStatuses = await TicketStatusService.List(TicketStatusFilter);

                var TicketStatusHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "Name",
                        "OrderNumber",
                        "ColorCode",
                        "StatusId",
                        "Used",
                    }
                };
                List <object[]> TicketStatusData = new List <object[]>();
                for (int i = 0; i < TicketStatuses.Count; i++)
                {
                    var TicketStatus = TicketStatuses[i];
                    TicketStatusData.Add(new Object[]
                    {
                        TicketStatus.Id,
                        TicketStatus.Name,
                        TicketStatus.OrderNumber,
                        TicketStatus.ColorCode,
                        TicketStatus.StatusId,
                        TicketStatus.Used,
                    });
                }
                excel.GenerateWorksheet("TicketStatus", TicketStatusHeaders, TicketStatusData);
                #endregion
                #region AppUser
                var AppUserFilter = new AppUserFilter();
                AppUserFilter.Selects   = AppUserSelect.ALL;
                AppUserFilter.OrderBy   = AppUserOrder.Id;
                AppUserFilter.OrderType = OrderType.ASC;
                AppUserFilter.Skip      = 0;
                AppUserFilter.Take      = int.MaxValue;
                List <AppUser> AppUsers = await AppUserService.List(AppUserFilter);

                var AppUserHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "Username",
                        "DisplayName",
                        "Address",
                        "Email",
                        "Phone",
                        "SexId",
                        "Birthday",
                        "Avatar",
                        "PositionId",
                        "Department",
                        "OrganizationId",
                        "ProvinceId",
                        "Longitude",
                        "Latitude",
                        "StatusId",
                    }
                };
                List <object[]> AppUserData = new List <object[]>();
                for (int i = 0; i < AppUsers.Count; i++)
                {
                    var AppUser = AppUsers[i];
                    AppUserData.Add(new Object[]
                    {
                        AppUser.Id,
                        AppUser.Username,
                        AppUser.DisplayName,
                        AppUser.Address,
                        AppUser.Email,
                        AppUser.Phone,
                        AppUser.SexId,
                        AppUser.Birthday,
                        AppUser.Avatar,
                        AppUser.PositionId,
                        AppUser.Department,
                        AppUser.OrganizationId,
                        AppUser.ProvinceId,
                        AppUser.Longitude,
                        AppUser.Latitude,
                        AppUser.StatusId,
                    });
                }
                excel.GenerateWorksheet("AppUser", AppUserHeaders, AppUserData);
                #endregion
                excel.Save();
            }
            return(File(memoryStream.ToArray(), "application/octet-stream", "TicketOfUser.xlsx"));
        }
        private IQueryable <TicketStatusDAO> DynamicOrder(IQueryable <TicketStatusDAO> query, TicketStatusFilter filter)
        {
            switch (filter.OrderType)
            {
            case OrderType.ASC:
                switch (filter.OrderBy)
                {
                case TicketStatusOrder.Id:
                    query = query.OrderBy(q => q.Id);
                    break;

                case TicketStatusOrder.Name:
                    query = query.OrderBy(q => q.Name);
                    break;

                case TicketStatusOrder.OrderNumber:
                    query = query.OrderBy(q => q.OrderNumber);
                    break;

                case TicketStatusOrder.ColorCode:
                    query = query.OrderBy(q => q.ColorCode);
                    break;

                case TicketStatusOrder.Status:
                    query = query.OrderBy(q => q.StatusId);
                    break;

                case TicketStatusOrder.Used:
                    query = query.OrderBy(q => q.Used);
                    break;
                }
                break;

            case OrderType.DESC:
                switch (filter.OrderBy)
                {
                case TicketStatusOrder.Id:
                    query = query.OrderByDescending(q => q.Id);
                    break;

                case TicketStatusOrder.Name:
                    query = query.OrderByDescending(q => q.Name);
                    break;

                case TicketStatusOrder.OrderNumber:
                    query = query.OrderByDescending(q => q.OrderNumber);
                    break;

                case TicketStatusOrder.ColorCode:
                    query = query.OrderByDescending(q => q.ColorCode);
                    break;

                case TicketStatusOrder.Status:
                    query = query.OrderByDescending(q => q.StatusId);
                    break;

                case TicketStatusOrder.Used:
                    query = query.OrderByDescending(q => q.Used);
                    break;
                }
                break;
            }
            query = query.Skip(filter.Skip).Take(filter.Take);
            return(query);
        }
        private async Task <List <TicketStatus> > DynamicSelect(IQueryable <TicketStatusDAO> query, TicketStatusFilter filter)
        {
            List <TicketStatus> TicketStatuses = await query.Select(q => new TicketStatus()
            {
                Id          = filter.Selects.Contains(TicketStatusSelect.Id) ? q.Id : default(long),
                Name        = filter.Selects.Contains(TicketStatusSelect.Name) ? q.Name : default(string),
                OrderNumber = filter.Selects.Contains(TicketStatusSelect.OrderNumber) ? q.OrderNumber : default(long),
                ColorCode   = filter.Selects.Contains(TicketStatusSelect.ColorCode) ? q.ColorCode : default(string),
                StatusId    = filter.Selects.Contains(TicketStatusSelect.Status) ? q.StatusId : default(long),
                Used        = filter.Selects.Contains(TicketStatusSelect.Used) ? q.Used : default(bool),
                Status      = filter.Selects.Contains(TicketStatusSelect.Status) && q.Status != null ? new Status
                {
                    Id   = q.Status.Id,
                    Code = q.Status.Code,
                    Name = q.Status.Name,
                } : null,
                CreatedAt = q.CreatedAt,
                UpdatedAt = q.UpdatedAt,
            }).ToListAsync();

            return(TicketStatuses);
        }
        public async Task <ActionResult> Import(IFormFile file)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }
            TicketFilter TicketFilter = new TicketFilter
            {
                Skip    = 0,
                Take    = int.MaxValue,
                Selects = TicketSelect.ALL
            };
            List <Ticket> Tickets = await TicketService.List(TicketFilter);

            TicketStatusFilter TicketStatusFilter = new TicketStatusFilter
            {
                Skip    = 0,
                Take    = int.MaxValue,
                Selects = TicketStatusSelect.ALL
            };
            List <TicketStatus> TicketStatuses = await TicketStatusService.List(TicketStatusFilter);

            AppUserFilter UserFilter = new AppUserFilter
            {
                Skip    = 0,
                Take    = int.MaxValue,
                Selects = AppUserSelect.ALL
            };
            List <AppUser> Users = await AppUserService.List(UserFilter);

            List <TicketOfUser> TicketOfUsers = new List <TicketOfUser>();

            using (ExcelPackage excelPackage = new ExcelPackage(file.OpenReadStream()))
            {
                ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.FirstOrDefault();
                if (worksheet == null)
                {
                    return(Ok(TicketOfUsers));
                }
                int StartColumn          = 1;
                int StartRow             = 1;
                int IdColumn             = 0 + StartColumn;
                int NotesColumn          = 1 + StartColumn;
                int UserIdColumn         = 2 + StartColumn;
                int TicketIdColumn       = 3 + StartColumn;
                int TicketStatusIdColumn = 4 + StartColumn;

                for (int i = StartRow; i <= worksheet.Dimension.End.Row; i++)
                {
                    if (string.IsNullOrEmpty(worksheet.Cells[i + StartRow, StartColumn].Value?.ToString()))
                    {
                        break;
                    }
                    string IdValue             = worksheet.Cells[i + StartRow, IdColumn].Value?.ToString();
                    string NotesValue          = worksheet.Cells[i + StartRow, NotesColumn].Value?.ToString();
                    string UserIdValue         = worksheet.Cells[i + StartRow, UserIdColumn].Value?.ToString();
                    string TicketIdValue       = worksheet.Cells[i + StartRow, TicketIdColumn].Value?.ToString();
                    string TicketStatusIdValue = worksheet.Cells[i + StartRow, TicketStatusIdColumn].Value?.ToString();

                    TicketOfUser TicketOfUser = new TicketOfUser();
                    TicketOfUser.Notes = NotesValue;
                    Ticket Ticket = Tickets.Where(x => x.Id.ToString() == TicketIdValue).FirstOrDefault();
                    TicketOfUser.TicketId = Ticket == null ? 0 : Ticket.Id;
                    TicketOfUser.Ticket   = Ticket;
                    TicketStatus TicketStatus = TicketStatuses.Where(x => x.Id.ToString() == TicketStatusIdValue).FirstOrDefault();
                    TicketOfUser.TicketStatusId = TicketStatus == null ? 0 : TicketStatus.Id;
                    TicketOfUser.TicketStatus   = TicketStatus;
                    AppUser User = Users.Where(x => x.Id.ToString() == UserIdValue).FirstOrDefault();
                    TicketOfUser.UserId = User == null ? 0 : User.Id;
                    TicketOfUser.User   = User;

                    TicketOfUsers.Add(TicketOfUser);
                }
            }
            TicketOfUsers = await TicketOfUserService.Import(TicketOfUsers);

            if (TicketOfUsers.All(x => x.IsValidated))
            {
                return(Ok(true));
            }
            else
            {
                List <string> Errors = new List <string>();
                for (int i = 0; i < TicketOfUsers.Count; i++)
                {
                    TicketOfUser TicketOfUser = TicketOfUsers[i];
                    if (!TicketOfUser.IsValidated)
                    {
                        string Error = $"Dòng {i + 2} có lỗi:";
                        if (TicketOfUser.Errors.ContainsKey(nameof(TicketOfUser.Id)))
                        {
                            Error += TicketOfUser.Errors[nameof(TicketOfUser.Id)];
                        }
                        if (TicketOfUser.Errors.ContainsKey(nameof(TicketOfUser.Notes)))
                        {
                            Error += TicketOfUser.Errors[nameof(TicketOfUser.Notes)];
                        }
                        if (TicketOfUser.Errors.ContainsKey(nameof(TicketOfUser.UserId)))
                        {
                            Error += TicketOfUser.Errors[nameof(TicketOfUser.UserId)];
                        }
                        if (TicketOfUser.Errors.ContainsKey(nameof(TicketOfUser.TicketId)))
                        {
                            Error += TicketOfUser.Errors[nameof(TicketOfUser.TicketId)];
                        }
                        if (TicketOfUser.Errors.ContainsKey(nameof(TicketOfUser.TicketStatusId)))
                        {
                            Error += TicketOfUser.Errors[nameof(TicketOfUser.TicketStatusId)];
                        }
                        Errors.Add(Error);
                    }
                }
                return(BadRequest(Errors));
            }
        }
        private IQueryable <TicketStatusDAO> OrFilter(IQueryable <TicketStatusDAO> query, TicketStatusFilter filter)
        {
            if (filter.OrFilter == null || filter.OrFilter.Count == 0)
            {
                return(query);
            }
            IQueryable <TicketStatusDAO> initQuery = query.Where(q => false);

            foreach (TicketStatusFilter TicketStatusFilter in filter.OrFilter)
            {
                IQueryable <TicketStatusDAO> queryable = query;
                if (TicketStatusFilter.Id != null)
                {
                    queryable = queryable.Where(q => q.Id, TicketStatusFilter.Id);
                }
                if (TicketStatusFilter.Name != null)
                {
                    queryable = queryable.Where(q => q.Name, TicketStatusFilter.Name);
                }
                if (TicketStatusFilter.OrderNumber != null)
                {
                    queryable = queryable.Where(q => q.OrderNumber, TicketStatusFilter.OrderNumber);
                }
                if (TicketStatusFilter.ColorCode != null)
                {
                    queryable = queryable.Where(q => q.ColorCode, TicketStatusFilter.ColorCode);
                }
                if (TicketStatusFilter.StatusId != null)
                {
                    queryable = queryable.Where(q => q.StatusId, TicketStatusFilter.StatusId);
                }
                initQuery = initQuery.Union(queryable);
            }
            return(initQuery);
        }
 private IQueryable <TicketStatusDAO> DynamicFilter(IQueryable <TicketStatusDAO> query, TicketStatusFilter filter)
 {
     if (filter == null)
     {
         return(query.Where(q => false));
     }
     query = query.Where(q => !q.DeletedAt.HasValue);
     if (filter.CreatedAt != null)
     {
         query = query.Where(q => q.CreatedAt, filter.CreatedAt);
     }
     if (filter.UpdatedAt != null)
     {
         query = query.Where(q => q.UpdatedAt, filter.UpdatedAt);
     }
     if (filter.Id != null)
     {
         query = query.Where(q => q.Id, filter.Id);
     }
     if (filter.Name != null)
     {
         query = query.Where(q => q.Name, filter.Name);
     }
     if (filter.OrderNumber != null)
     {
         query = query.Where(q => q.OrderNumber, filter.OrderNumber);
     }
     if (filter.ColorCode != null)
     {
         query = query.Where(q => q.ColorCode, filter.ColorCode);
     }
     if (filter.StatusId != null)
     {
         query = query.Where(q => q.StatusId, filter.StatusId);
     }
     query = OrFilter(query, filter);
     return(query);
 }