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); }
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()); }