public async Task <List <ServiceOutage> > GenerateServiceOutagesForMonth(DateTime searchMonthYear) { var refTickets = await _refundSupportTicketRepository.GetRefundSupportTicketsForMonth(searchMonthYear); if (refTickets.IsNullOrEmptyCollection()) { return(null); } var gen = await GenerateServiceOutages(refTickets, true); return(gen); }
public async Task <ActionResult <List <RefundSupportTicketDto> > > GetRefundSupportTicketsForMonth([FromBody] DateTime searchMonthYear) { _logger.LogInformation(ApiLogEvents.InsertItemsList, $"{nameof(GetRefundSupportTicketsForMonth)} Started {searchMonthYear}"); var repoObj = await _repository.GetRefundSupportTicketsForMonth(searchMonthYear); if (repoObj.IsNullOrEmptyCollection()) { return(null); } var result = _mapper.Map <List <RefundSupportTicketDto> >(repoObj); return(Ok(result)); }
public async Task <List <ServiceOutageSummary> > GenerateServiceOutagesSummaryForMonth(DateTime searchMonthYear) { try { var refTickets = await _refundSupportTicketRepository.GetRefundSupportTicketsForMonth(searchMonthYear); if (refTickets.IsNullOrEmptyCollection()) { return(null); } var serviceOutages = await _serviceOutageRepository.GenerateServiceOutagesForMonth(searchMonthYear); if (serviceOutages.IsNullOrEmptyCollection()) { return(null); } var existingDic = (await _serviceOutageSummaryRepository.GetExisting(searchMonthYear)).ToDictionary(k => k.Service.TrimStart()); var grouped = serviceOutages.GroupBy(a => a.Service.TrimStart().TrimEnd()).ToList(); List <ServiceOutageSummary> listCurrent = new(); List <ServiceOutageSummary> result = new(); List <ServiceOutageSummary> toSave = new(); List <ServiceOutageSummary> toUpdate = new(); foreach (var serviceGrouped in grouped) { var serviceName = serviceGrouped.Key; ServiceOutageSummary serviceOutageSummary = new() { Service = serviceName, Year = searchMonthYear.Year, Month = searchMonthYear.Month, Impact = "No Impact", CreditReview = true, Occurrence = serviceGrouped.Count(), }; //ServiceOutageSummary serviceOutageSummary = new ServiceOutageSummary(serviceGrouped); HashSet <string> hash = new(); StringBuilder sb = new(); foreach (var ou in serviceGrouped) { var serIss = refTickets.Where(a => a.TrackingId == ou.TrackingId).FirstOrDefault(); if (serIss != null) { serIss.ServiceIssue.ImpactedRegions.GetCollectionOfStringsFromTextExt(",").ToList().ForEach(a => hash.Add(a)); } } if (hash.HasAnyInCollection()) { hash.ToList().ForEach(a => sb.Append($"{a}, ")); serviceOutageSummary.Regions = sb.ToString().TrimEnd().TrimEnd(','); sb.Clear(); hash.ToList().ForEach(a => sb.Append($"{_supportedRegionsService.GetRegionShortVersion(a)}, ")); serviceOutageSummary.RegionsShort = sb.ToString().TrimEnd().TrimEnd(','); sb.Clear(); } var mssla = await _serviceSlaService.GetServiceUptime(serviceName); if (mssla.HasValue)//can be empty { serviceOutageSummary.MsSlaUpTimePerc = mssla.Value; double agr = 0; //serviceGrouped.ToList().ForEach(a => agr += (mssla.Value - a.UpTimePercentage)); //bug serviceGrouped.ToList().ForEach(a => agr += (100 - a.UpTimePercentage)); //always take from 100 serviceOutageSummary.Deviation = Math.Round(agr, 2, MidpointRounding.AwayFromZero); //serviceOutageSummary.ActualUpTimePerc = serviceOutageSummary.MsSlaUpTimePerc - serviceOutageSummary.Deviation; //always take from 100 serviceOutageSummary.ActualUpTimePerc = 100 - serviceOutageSummary.Deviation; if (serviceOutageSummary.ActualUpTimePerc.HasValue) { serviceOutageSummary.ActualUpTimePerc = Math.Round(serviceOutageSummary.ActualUpTimePerc.Value, 2, MidpointRounding.AwayFromZero); } //no need for credit //serviceOutageSummary.ServiceCreditPerc = await _serviceSlaService.EstimatedServiceCreditForService(serviceName, serviceOutageSummary.ActualUpTimePerc.Value); } listCurrent.Add(serviceOutageSummary); } if (existingDic.HasAnyInCollection()) { foreach (var sos in listCurrent) { if (!existingDic.TryGetValue(sos.Service, out ServiceOutageSummary old)) { toSave.Add(sos); result.Add(sos); } else { var match = (old.Year == sos.Year && old.Month == sos.Month); if (!match) { toSave.Add(sos); result.Add(sos); } else { //update if someting change if (sos.Occurrence != old.Occurrence || sos.MsSlaUpTimePerc != old.MsSlaUpTimePerc || sos.Deviation != old.Deviation) { old.Occurrence = sos.Occurrence; old.ActualUpTimePerc = sos.ActualUpTimePerc; old.Deviation = sos.Deviation; old.MsSlaUpTimePerc = sos.MsSlaUpTimePerc; toUpdate.Add(old); } result.Add(old); } } } } else { toSave = listCurrent; result.AddRange(toSave); } if (toUpdate.HasAnyInCollection()) { toUpdate.ForEach(a => _serviceOutageSummaryRepository.Update(a)); await _serviceOutageSummaryRepository.SaveChangesAsync(); } if (toSave.HasAnyInCollection()) { toSave.ForEach(a => _serviceOutageSummaryRepository.Add(a)); await _serviceOutageSummaryRepository.SaveChangesAsync(); //toSave.AddRange(toUpdate); //return toSave.OrderBy(a => a.Service).ToList(); } return(result.OrderBy(a => a.Service).ToList()); } catch (Exception) { throw; } }