Exemplo n.º 1
0
        public async Task <BaseServiceResponse> AddInTransitStatus(LoadStatusInTransitData inTransitData)
        {
            await _securityService.GuardActionAsync(SecurityActions.Loadshop_Ui_My_Loads_Status_Update);

            var(load, scac) = await GetLoadAndScac(inTransitData.LoadId, includeStops : false);

            //Adjust the time if it's close to current
            bool inFuture;

            (inTransitData.LocationTime, inFuture) = AdjustLocationTime(inTransitData.LocationTime, inTransitData.Latitude, inTransitData.Longitude);

            var response = new BaseServiceResponse();

            if (inTransitData.LocationTime == null)
            {
                response.AddError($"urn:root:{nameof(LoadStatusInTransitData.LocationTime)}", "Status Date/Time is required");
            }
            else if (inFuture)
            {
                response.AddError($"urn:root:{nameof(LoadStatusInTransitData.LocationTime)}", "Status Date/Time must be in the past");
            }

            if (inTransitData.Latitude == null)
            {
                response.AddError($"urn:root:{nameof(LoadStatusInTransitData.Latitude)}", "Location is required");
            }
            else if (inTransitData.Longitude == null)
            {
                response.AddError($"urn:root:{nameof(LoadStatusInTransitData.Longitude)}", "Location is required");
            }

            if (!response.IsSuccess)
            {
                return(response);
            }

            var currentTime = DateTimeOffset.UtcNow;
            var lst         = new LoadStatusTransactionEntity
            {
                LoadId          = load.LoadId,
                TransactionDtTm = currentTime.DateTime//this may not be needed anymore if we can send the MessageTime
            };

            var eventResponse = await _carrierWebAPIService.Send(new LoadStatusEvent <InTransitLoadData>
            {
                MessageType = "LoadLocation",
                MessageId   = Guid.NewGuid(),
                MessageTime = DateTimeOffset.Now,
                ApiVersion  = "1.1",
                Payload     = new InTransitLoadData
                {
                    Loads = new InTransitEventData[]
                    {
                        new InTransitEventData
                        {
                            LoadNumber   = load.LatestLoadTransaction.Claim.BillingLoadId ?? load.PlatformPlusLoadId ?? load.ReferenceLoadId,
                            Latitude     = inTransitData.Latitude.Value,
                            Longitude    = inTransitData.Longitude.Value,
                            LocationTime = inTransitData.LocationTime?.ToString("yyyy-MM-ddTHH:mm:ss"),
                            IsLocalTime  = true, //Always true if in local status time
                            Scac         = scac
                        }
                    }
                }
            });

            lst.MessageId   = eventResponse.MessageId;
            lst.MessageTime = eventResponse.MessageTime;
            _context.LoadStatusTransactions.Add(lst);
            await _context.SaveChangesAsync(_userContext.UserName);

            return(response);
        }
Exemplo n.º 2
0
        public async Task <BaseServiceResponse> AddStopStatuses(LoadStatusStopData stopData)
        {
            await _securityService.GuardActionAsync(SecurityActions.Loadshop_Ui_My_Loads_Status_Update);

            var(load, scac) = await GetLoadAndScac(stopData.LoadId, includeStops : true);

            var response = new BaseServiceResponse();

            if (stopData.Events?.Any() != true)
            {
                response.AddError($"urn:root:{nameof(LoadStatusStopData.Events)}:0:{nameof(LoadStatusStopEventData.EventTime)}", "Status Date/Time is required");
            }

            for (int i = 0; i < stopData.Events.Count; i++)
            {
                var stopEvent = stopData.Events[i];

                var stop     = load.LoadStops?.FirstOrDefault(_ => _.StopNbr == stopEvent.StopNumber);
                var inFuture = false;

                if (stop == null)
                {
                    response.AddError($"urn:root:{nameof(LoadStatusStopData.Events)}:{i}", "Stop number does not exist");
                }
                else
                {
                    //Adjust the time if it's close to current
                    (stopEvent.EventTime, inFuture) = AdjustLocationTime(stopData.Events[i].EventTime, stop?.Latitude, stop?.Longitude);

                    if (stopEvent.EventTime == null)
                    {
                        response.AddError($"urn:root:{nameof(LoadStatusStopData.Events)}:{i}:{nameof(LoadStatusStopEventData.EventTime)}", "Status Date/Time is required");
                    }
                    else if (inFuture)
                    {
                        response.AddError($"urn:root:{nameof(LoadStatusStopData.Events)}:{i}:{nameof(LoadStatusStopEventData.EventTime)}", "Status Date/Time must be in the past");
                    }
                }
            }

            if (!response.IsSuccess)
            {
                return(response);
            }


            foreach (var stopEvent in stopData.Events)
            {
                var currentTime = DateTimeOffset.UtcNow;
                var lst         = new LoadStatusTransactionEntity
                {
                    LoadId          = load.LoadId,
                    TransactionDtTm = currentTime.DateTime//this may not be needed anymore if we can send the MessageTime
                };

                var eventResponse = await _carrierWebAPIService.Send(new LoadStatusEvent <StopEventData>
                {
                    MessageType = "LoadStopEvent",
                    MessageId   = Guid.NewGuid(),
                    MessageTime = DateTimeOffset.Now,
                    ApiVersion  = "1.1",
                    Payload     = new StopEventData
                    {
                        LoadNumber     = load.LatestLoadTransaction.Claim.BillingLoadId ?? load.PlatformPlusLoadId ?? load.ReferenceLoadId,
                        StopNbr        = stopEvent.StopNumber,
                        StatusDateTime = stopEvent.EventTime?.ToString("yyyy-MM-ddTHH:mm:ss"),
                        StatusType     = stopEvent.EventType.ToString(),
                        IsLocalTime    = true, //Always true if in local status time
                        Scac           = scac
                    }
                });

                lst.MessageId   = eventResponse.MessageId;
                lst.MessageTime = eventResponse.MessageTime;
                _context.LoadStatusTransactions.Add(lst);
                await _context.SaveChangesAsync(_userContext.UserName);
            }

            await AddInTransitStopStatus(stopData, load);

            return(new BaseServiceResponse());
        }