public IActionResult GetJobsFromCRMGrouped([FromBody] GetJobsQueryStringModel queryString) { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); var todaysDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 0, 0, 0); var queryStringModel = new GetJobsQueryStringModel() { ApiKey = "0a947558-f14f-4823-b948-e52533c45684", CompletedBefore = new FilterCompletedBefore() { FilterValue = todaysDate.AddDays(0) }, CompletedAfter = new FilterCompletedAfter() { FilterValue = todaysDate.AddDays(-5) } }; var requestObject = new GetJobsFromServiceTitanQuery(queryStringModel); var result = _mediator.Send(requestObject).Result; stopWatch.Stop(); var groupedByCreator = result.ApiResults.GroupBy(j => j.CreatedBy.Name).OrderBy(c => c.Key).ToList(); var groupedByHour = result.ApiResults.GroupBy(j => (DateTime.Parse(j.CreatedOn)).Hour).OrderBy(g => g.Key).ToList(); return(Ok(result.ApiResults)); }
public IActionResult GetJobsFromCRM([FromBody] GetJobsQueryStringModel queryString) { var requestObject = new GetJobsFromServiceTitanQuery(queryString); var result = _mediator.Send(requestObject).Result; return(Ok(result.ApiResults)); }
public IActionResult RunInvoiceValidators() { var todaysDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 0, 0, 0); var queryStringModel = new GetJobsQueryStringModel() { ApiKey = "0a947558-f14f-4823-b948-e52533c45684", CompletedBefore = new FilterCompletedBefore() { FilterValue = todaysDate.AddDays(1) }, CompletedAfter = new FilterCompletedAfter() { FilterValue = todaysDate.AddDays(0) } }; var getJobsFromST = _mediator.Send(new GetJobsFromServiceTitanQuery(queryStringModel)).Result; var invoiceValidators = new List <InvoiceValidator>(); var invoicesWithErrors = new List <InvoiceValidator>(); var errorReports = new List <InvoiceError>(); foreach (var job in getJobsFromST.ApiResults) { invoiceValidators.Add(new InvoiceValidator(job, _ctx)); } foreach (var i in invoiceValidators) { i.RunMaterialValidators(); if (i.InvoiceErrors.Count > 0) { invoicesWithErrors.Add(i); } } foreach (var i in invoicesWithErrors) { errorReports.AddRange(i.InvoiceErrors); foreach (var e in i.InvoiceErrors) { _mediator.Send(new AddInvoiceExceptionRecordToAirtableCommand() { InvoiceError = e }); } } return(Ok(errorReports)); }
public GetJobsFromServiceTitanQuery(GetJobsQueryStringModel model) { ApiKey = model.ApiKey; ApiFilters = new List <IApiFilter>(); ApiFilters.Add(new FilterCompletedAfter() { FilterValue = model.CompletedAfter.FilterValue }); ApiFilters.Add(new FilterCompletedBefore() { FilterValue = model.CompletedBefore.FilterValue }); }
public IActionResult GetJobsWithMissingJobMaterials() { var todaysDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 0, 0, 0); var queryStringModel = new GetJobsQueryStringModel() { ApiKey = "0a947558-f14f-4823-b948-e52533c45684", CompletedBefore = new FilterCompletedBefore() { FilterValue = todaysDate.AddDays(1) }, CompletedAfter = new FilterCompletedAfter() { FilterValue = todaysDate.AddDays(0) } }; var getJobsFromST = _mediator.Send(new GetJobsFromServiceTitanQuery(queryStringModel)).Result; var result = _mediator.Send(new FindJobsWithMismatchedJobMaterialsQuery() { Jobs = getJobsFromST.ApiResults }).Result; var groupedByItem = result.GroupBy(r => r.FlaggedMaterialCode.Count()).ToList(); var groups = result.GroupBy(r => r.TechnicianId).ToList(); var groupedByTechnicianList = new List <TechnicianMissingItemGroupModel>(); foreach (var g in groups) { var valueList = g.Select(x => x).ToList(); groupedByTechnicianList.Add(new TechnicianMissingItemGroupModel { TechnicianName = g.Select(x => x.TechnicianName).FirstOrDefault(), TechnicianId = g.Key, TechFlaggedJobCount = valueList.Count, MaterialId = new List <int>(g.Select(x => x.FlaggedMaterialId).ToList()), MaterialCode = new List <string>(g.Select(x => x.FlaggedMaterialCode).ToList()), MaterialLinks = new List <FlaggedJobServiceMaterialsDto>(g) }); } var groupedByMissingItem = new List <MissingItemGroupModel>(); foreach (var g in groupedByItem) { var valueList = g.Select(x => x).ToList(); groupedByMissingItem.Add(new MissingItemGroupModel { MaterialId = g.Key, MaterialCode = g.Select(x => x.FlaggedMaterialCode).FirstOrDefault(), TechnicianId = new List <int>(g.Select(x => x.TechnicianId)), TechnicianName = new List <string>(g.Select(x => x.TechnicianName)), MaterialLinks = new List <FlaggedJobServiceMaterialsDto>(g), MissingMaterialCount = valueList.Count }); } foreach (var item in result) { _mediator.Send(new AddInvoiceExceptionRecordToAirtableCommand() { FlaggedJob = item }); } return(Ok(result)); }