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));
        }
Example #4
0
        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
            });
        }
Example #5
0
        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));
        }