public IEnumerable <TicketReportDTO> GetTicketsReport(Period period) { using (var scope = _scopeFactory.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); List <TicketReportDTO> ticketReportDTOs = new List <TicketReportDTO>(); var tickets = (from ticket in db.Ticket where ticket.CreateTime.CompareTo(period.startTime.ToLocalTime()) > 0 && ticket.CreateTime.CompareTo(period.endTime.ToLocalTime()) < 0 select ticket) .Include(ticket => ticket.TicketState) .Include(ticket => ticket.Queue) .Include(ticket => ticket.TicketPriority) .ToList(); foreach (var ticket in tickets) { TicketReportDTO ticketReportDTO = new TicketReportDTO(); ticketReportDTO.TN = ticket.Tn; ticketReportDTO.State = ticket.TicketState.Name; ticketReportDTO.CreateTime = ticket.CreateTime; ticketReportDTO.Client = ticket.CustomerId; ticketReportDTO.TicketPriority = ticket.TicketPriority.Name; var dFields = GetTTDynamicFields(ticket.Id); foreach (var field in dFields) { typeof(TicketReportDTO).GetProperty(field.Key)?.SetValue(ticketReportDTO, field.Value); } ticketReportDTOs.Add(ticketReportDTO); } return(ticketReportDTOs); } }
//Category private bool IsTicketDTOValid(TicketReportDTO ticket, Filters filters) { var zones = filters.Zones; var types = filters.Types; var states = filters.States; var initiators = filters.Initiators; var natInts = filters.NatInts; var priorities = filters.Priorities; var directions = filters.Directions; var catogories = filters.Categories; var problemSides = filters.ProblemSides; if (zones != null && zones.Length > 0 && zones.Contains(ticket.Zone) == false) { return(false); } if (types != null && types.Length > 0 && types.Contains(ticket.Type) == false) { return(false); } if (states != null && states.Length > 0 && states.Contains(ticket.State) == false) { return(false); } if (initiators != null && initiators.Length > 0 && initiators.Contains(ticket.Initiator) == false) { return(false); } if (natInts != null && natInts.Length > 0 && natInts.Contains(ticket.NatInt) == false) { return(false); } if (priorities != null && priorities.Length > 0 && priorities.Contains(ticket.TicketPriority) == false) { return(false); } if (directions != null && directions.Length > 0 && directions.Contains(ticket.Direction) == false) { return(false); } if (catogories != null && catogories.Length > 0 && catogories.Contains(ticket.Category) == false) { return(false); } if (problemSides != null && problemSides.Length > 0 && problemSides.Contains(ticket.ProblemSide) == false) { return(false); } return(true); }
public Report GetFilteredTicketsReportBulk(Filters filters) { using (var scope = _scopeFactory.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); List <TicketReportDTO> ticketReportDTOs = new List <TicketReportDTO>(); var tickets = (from ticket in db.Ticket where ticket.CreateTime.CompareTo(filters.Period.startTime) > 0 && ticket.CreateTime.CompareTo(filters.Period.endTime) < 0 select ticket) .Include(ticket => ticket.TicketState) .Include(ticket => ticket.Queue) .Include(ticket => ticket.TicketPriority) .ToList().Where(t => !t.Queue.Name.Equals("Trash")); var ttsDynamicFields = GetTTDynamicFieldsBulk((from ticket in tickets select ticket.Id).ToList()); FilteringItems filteringItems = new FilteringItems(); var zones = ttsDynamicFields.Select(p => p.Value).ToList().SelectValues("Zone").Distinct().ToList(); var types = ttsDynamicFields.Select(p => p.Value).ToList().SelectValues("Type").Distinct().ToList(); var direction = ttsDynamicFields.Select(p => p.Value).ToList().SelectValues("Direction").Distinct().ToList(); var natInt = ttsDynamicFields.Select(p => p.Value).ToList().SelectValues("NatInt").Distinct().ToList(); var initiator = ttsDynamicFields.Select(p => p.Value).ToList().SelectValues("Initiator").Distinct().ToList(); var category = ttsDynamicFields.Select(p => p.Value).ToList().SelectValues("Category").Distinct().ToList(); var problemSide = ttsDynamicFields.Select(p => p.Value).ToList().SelectValues("ProblemSide").Distinct().ToList(); filteringItems.States = tickets.Select(ticket => ticket.TicketState.Name).Distinct().OrderByDescending(state => state).toSelectItems(); filteringItems.TicketPriorities = tickets.Select(ticket => ticket.TicketPriority.Name).Distinct().OrderByDescending(ticketPriority => ticketPriority).toSelectItems(); filteringItems.Zones = zones.Count > 0 ? zones.toSelectItems() : null; filteringItems.Types = types.Count > 0 ? types.toSelectItems() : null; filteringItems.Directions = direction.Count > 0 ? direction.toSelectItems() : null; filteringItems.NatInts = natInt.Count > 0 ? natInt.toSelectItems() : null; filteringItems.Initiators = initiator.Count > 0 ? initiator.toSelectItems() : null; filteringItems.Categories = category.Count > 0 ? category.toSelectItems() : null; filteringItems.ProblemSides = problemSide.Count > 0 ? problemSide.toSelectItems() : null; foreach (var ticket in tickets) { TicketReportDTO ticketReportDTO = new TicketReportDTO(); ticketReportDTO.TN = ticket.Tn; ticketReportDTO.State = ticket.TicketState.Name; ticketReportDTO.CreateTime = ticket.CreateTime; ticketReportDTO.Client = ticket.CustomerId; ticketReportDTO.TicketPriority = ticket.TicketPriority.Name; var dFields = ttsDynamicFields[ticket.Id]; if (dFields.Count > 0) { foreach (var field in dFields) { typeof(TicketReportDTO).GetProperty(field.Key)?.SetValue(ticketReportDTO, !field.Key.Equals("CloseTime") ? field.Value : DateTime.Parse(field.Value)); } } if (IsTicketDTOValid(ticketReportDTO, filters)) { ticketReportDTOs.Add(ticketReportDTO); } } return(new Report() { ticketReportDTOs = ticketReportDTOs.OrderByDescending(ticket => ticket.CreateTime), filteringItems = filteringItems }); } }