Exemple #1
0
        /// <summary>
        ///     Calls the UPS Track API for each tracking number provided to get the updated status and location of the package.
        ///     Inserts a new line to the StatusUpdates table with the latest tracking information and timestamp.
        /// </summary>
        /// <param name="trackingNumbersInTransit">Tracking numbers which require a status and location update.</param>
        public void UpdateCurrentStatusOfTrackingNumbers(IEnumerable <UPSTracking> trackingNumbersInTransit)
        {
            foreach (var trackingRecord in trackingNumbersInTransit)
            {
                try
                {
                    var currTrackingNumber = trackingRecord.TrackingNumber;
                    _logger.LogInformation($"Tracking Number: {currTrackingNumber}");

                    // Call UPS Track API
                    var upsRequest  = new UPSRequest(currTrackingNumber);
                    var upsResponse = TrackAPI.GetUPSTrackingData(upsRequest);

                    if (upsResponse.Fault != null)
                    {
                        var errMessage = upsResponse.Fault.detail?.Errors.ErrorDetail.PrimaryErrorCode.Description;
                        _logger.LogWarning($"{errMessage} {trackingRecord}");

                        if (errMessage.Contains("host you are trying to connect to"))
                        {
                            continue;
                        }

                        trackingRecord.Status          = "Exception";
                        trackingRecord.ExceptionReason = errMessage;
                        trackingRecord.TimeStamp       = DateTime.Now.ToString();
                    }
                    else
                    {
                        // Get latest status, location and timestamp
                        var latestActivity = TrackAPI.GetLatestActivity(upsResponse);
                        trackingRecord.Status          = latestActivity.Status;
                        trackingRecord.Location        = latestActivity.Location;
                        trackingRecord.TimeStamp       = latestActivity.TimeStamp;
                        trackingRecord.ExceptionReason = latestActivity.ExceptionReason;

                        _logger.LogInformation("Tracking Record: {@TrackingRecord}", trackingRecord);
                    }

                    // Insert to UPS.tracking.StatusUpdates
                    InsertLineToUPSTable(trackingRecord, "StatusUpdates");
                }
                catch (SqlException sqlEx)
                {
                    _logger.LogInformation(sqlEx, "Duplicate line was not added to StatusUpdates table.");
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "Error in UpdateCurrentStatusOfTrackingNumbers. Tracking Record: {@trackingRecord}", trackingRecord);
                    var title        = "Error in UpdateCurrentStatusOfTrackingNumbers";
                    var text         = $"Error message: {ex.Message}";
                    var color        = "yellow";
                    var teamsMessage = new TeamsMessage(title, text, color, trackingErrorLogsUrl);
                    teamsMessage.LogToTeams(teamsMessage);
                }
            }
        }
Exemple #2
0
        /// <summary>
        ///     Sets the package's current status, location, timestamp and exception (if applicable) on the tracking record based on the
        ///     UPS Track API response.
        /// </summary>
        /// <param name="trackingRecord">Object containing tracking data that will be written to UPS Integration DB.</param>
        /// <param name="upsResponse">Response object from the UPS Track API.</param>
        public void SetLatestActivity(UPSTracking trackingRecord, UPSResponse upsResponse)
        {
            var latestActivity = TrackAPI.GetLatestActivity(upsResponse);

            trackingRecord.Status          = latestActivity.Status;
            trackingRecord.Location        = latestActivity.Location;
            trackingRecord.TimeStamp       = latestActivity.TimeStamp;
            trackingRecord.ExceptionReason = latestActivity.ExceptionReason;
        }