public ReportRequestInfo PollReportStatus(string reportRequestId, out ReportRequestInfoStatus reportRequestInfoStatus)
        {
            if (string.IsNullOrEmpty(reportRequestId))
            {
                throw new ArgumentNullException("reportRequestId is empty");
            }
            ReportRequestInfo reportRequestInfo = null;

            reportRequestInfoStatus = ReportRequestInfoStatus.Unknown;
            int sleepTime = 5000;

            for (int i = 0; i < 6; i++)
            {
                nLogger.Info("GetReportRequestInfo polling for reportRequestId: " + reportRequestId);

                reportRequestInfo = GetReportRequestInfo(reportRequestId);

                reportRequestInfoStatus = GetReportRequestInfoStatus(reportRequestInfo);
                if (reportRequestInfoStatus == ReportRequestInfoStatus.ReportPending || reportRequestInfoStatus == ReportRequestInfoStatus.Unknown)
                {
                    Thread.Sleep(sleepTime);
                    sleepTime = sleepTime + sleepTime;
                }
                else
                {
                    break;
                }
            }

            return(reportRequestInfo);
        }
 public ReportRequestInfoStatus GetReportRequestInfoStatus(ReportRequestInfo reportRequestInfo)
 {
     /*
      *	_SUBMITTED_
      *      _IN_PROGRESS_
      *      _CANCELLED_
      *      _DONE_
      *      _DONE_NO_DATA_
      */
     if (reportRequestInfo == null)
     {
         return(ReportRequestInfoStatus.ReportPending);
     }
     if (reportRequestInfo.ReportProcessingStatus == "_SUBMITTED_")
     {
         return(ReportRequestInfoStatus.ReportPending);
     }
     if (reportRequestInfo.ReportProcessingStatus == "_IN_PROGRESS_")
     {
         return(ReportRequestInfoStatus.ReportPending);
     }
     if (reportRequestInfo.ReportProcessingStatus == "_CANCELLED_")
     {
         return(ReportRequestInfoStatus.ReportFailed);
     }
     if (reportRequestInfo.ReportProcessingStatus == "_DONE_")
     {
         return(ReportRequestInfoStatus.ReportReady);
     }
     if (reportRequestInfo.ReportProcessingStatus == "_DONE_NO_DATA_")
     {
         return(ReportRequestInfoStatus.ReportFailed);
     }
     return(ReportRequestInfoStatus.ReportFailed);
 }
        public void GetReportRequestInfoStatus_ReportFailed()
        {
            ReportRequestInfo reportRequestInfo = new ReportRequestInfo();

            reportRequestInfo.ReportRequestId        = "";
            reportRequestInfo.ReportProcessingStatus = "_CANCELLED_";

            ReportRequestInfoStatus status = reportHandler.GetReportRequestInfoStatus(reportRequestInfo);

            Console.Write(status.ToString());
            Assert.AreEqual(ReportRequestInfoStatus.ReportFailed, status);
        }
Esempio n. 4
0
        public virtual InvokeReporstServicesCallResponse InvokeReportsServiceCalls(PXGraph graph, SOAmazonSetup objSOAmazonSetup, DateTime?fromDate, DateTime?toDate)
        {
            InvokeReporstServicesCallResponse objShipInfo = new InvokeReporstServicesCallResponse();

            MarketplaceWebService.MarketplaceWebService serviceConfig = this.Configurations(objSOAmazonSetup.IntegrationType.Trim(), objSOAmazonSetup.AccessKey, objSOAmazonSetup.SecretKey);
            if (serviceConfig == null)
            {
                return(objShipInfo);
            }
            ReportRequestInfo          reportInfo     = new ReportRequestInfo();
            List <ShipmentInformarion> liShipmentInfo = new List <ShipmentInformarion>();

            reportParams = new ReportParameters();
            reportParams.objSOAmazonSetup = objSOAmazonSetup;
            reportParams.reportRequestId  = string.Empty;
            reportParams.reportInfo       = reportInfo;
            reportParams.liShipmentInfo   = liShipmentInfo;
            reportParams.serviceConfig    = serviceConfig;
            reportInfo            = new AMShipmentTrackingNumberServiceCall(reportParams.serviceConfig).InvokeGetReportRequestList(graph, reportParams);
            reportParams.fromDate = fromDate;
            reportParams.toDate   = toDate;

            try
            {
                if (reportInfo != null && reportInfo.GeneratedReportId != null)
                {
                    if (Convert.ToInt32((TimeZoneInfo.ConvertTimeToUtc(DateTime.Now) - TimeZoneInfo.ConvertTimeToUtc(reportInfo.CompletedDate)).TotalMinutes) <= SOConstants.limitForReports)
                    {
                        throw new PXException(SOMessages.errorReportInfo);
                    }
                    else
                    {
                        liShipmentInfo = RequestAndGetReportData(graph, reportParams);
                    }
                    objShipInfo.objShipmentResponse = liShipmentInfo;
                }
                else
                {
                    liShipmentInfo = RequestAndGetReportData(graph, reportParams);
                }
            }
            catch (Exception ex)
            {
                throw new PXException(!string.IsNullOrEmpty(ex.Message) ? ex.Message :
                                      ex.InnerException != null && ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : SOConstants.exceptionIsEmpty);
            }
            return(objShipInfo);
        }
Esempio n. 5
0
        private string getPriorReportId(string ReportType, IEnumerable <XElement> ReportRequestInfos)
        {
            foreach (var ReportRequestInfo in ReportRequestInfos)
            {
                string rType = (string)ReportRequestInfo.Element("ReportType");

                if (!String.IsNullOrEmpty(rType) && rType == ReportType)
                {
                    var ReportProcessingStatus = (string)ReportRequestInfo.Element("ReportProcessingStatus");

                    //Log.Error(_acct.AmazonAccountId,$"Report  request {ReportRequestId} status = {ReportProcessingStatus}");
                    if (ReportProcessingStatus.StartsWith("_DONE_"))
                    {
                        return((string)ReportRequestInfo.Element("GeneratedReportId"));
                    }
                }
            }
            return("");
        }
        public GetReportResult GetReport(string reportType, DateTime startDate, DateTime endDate, string fileLocation)
        {
            GetReportResult report = new GetReportResult();

            ReportRequestInfoStatus reportRequestInfoStatus;
            RequestReportResult     requestReportResult = reportHandler.RequestReport(reportType, startDate, endDate);
            ReportRequestInfo       reportRequestInfo   = reportHandler.PollReportStatus(requestReportResult.ReportRequestInfo.ReportRequestId, out reportRequestInfoStatus);

            string writePath = reportHandler.CreateFileLocation(fileLocation, serviceContext.SellerId, reportType, startDate, endDate);

            if (reportRequestInfoStatus.Equals(ReportRequestInfoStatus.ReportReady))
            {
                nLogger.Info("ReportReady, getting report");
                report = reportHandler.GetReport(reportRequestInfo.GeneratedReportId);
                if (!report.IsEmptyContent())
                {
                    reportHandler.WriteToFile(report.Content, writePath);
                }
            }
            if (report.IsEmptyContent())
            {
                nLogger.Info("getting report from disc");
                if (File.Exists(writePath))
                {
                    report.Content = File.ReadAllText(writePath);
                }
            }
            if (report.IsEmptyContent())
            {
                nLogger.Info("GetPriorReport");
                report = GetPriorReport(reportType, startDate, endDate);
                if (!report.IsEmptyContent())
                {
                    reportHandler.WriteToFile(report.Content, writePath);
                }
            }

            return(report);
        }
        /// <summary>
        /// returns the number of feeds matching all of the specified criteria
        ///
        /// </summary>
        /// <param name="service">Instance of MarketplaceWebService service</param>
        /// <param name="request">GetFeedSubmissionCountRequest request</param>
        public static void InvokeRequestReport(MarketplaceWebService service, RequestReportRequest request)
        {
            try
            {
                RequestReportResponse response = service.RequestReport(request);


                Console.WriteLine("Service Response");
                Console.WriteLine("=============================================================================");
                Console.WriteLine();

                Console.WriteLine("        RequestReportResponse");

                if (response.IsSetRequestReportResult())
                {
                    Console.WriteLine("            RequestReportResult");
                    RequestReportResult requestReportResult = response.RequestReportResult;
                    ReportRequestInfo   reportRequestInfo   = requestReportResult.ReportRequestInfo;
                    Console.WriteLine("                  ReportRequestInfo");

                    if (reportRequestInfo.IsSetReportProcessingStatus())
                    {
                        Console.WriteLine("               ReportProcessingStatus");
                        Console.WriteLine("                                  {0}", reportRequestInfo.ReportProcessingStatus);
                    }
                    if (reportRequestInfo.IsSetReportRequestId())
                    {
                        Console.WriteLine("                      ReportRequestId");
                        Console.WriteLine("                                  {0}", reportRequestInfo.ReportRequestId);
                    }
                    if (reportRequestInfo.IsSetReportType())
                    {
                        Console.WriteLine("                           ReportType");
                        Console.WriteLine("                                  {0}", reportRequestInfo.ReportType);
                    }
                    if (reportRequestInfo.IsSetStartDate())
                    {
                        Console.WriteLine("                            StartDate");
                        Console.WriteLine("                                  {0}", reportRequestInfo.StartDate);
                    }
                    if (reportRequestInfo.IsSetEndDate())
                    {
                        Console.WriteLine("                              EndDate");
                        Console.WriteLine("                                  {0}", reportRequestInfo.EndDate);
                    }
                    if (reportRequestInfo.IsSetSubmittedDate())
                    {
                        Console.WriteLine("                        SubmittedDate");
                        Console.WriteLine("                                  {0}", reportRequestInfo.SubmittedDate);
                    }
                }
                if (response.IsSetResponseMetadata())
                {
                    Console.WriteLine("            ResponseMetadata");
                    ResponseMetadata responseMetadata = response.ResponseMetadata;
                    if (responseMetadata.IsSetRequestId())
                    {
                        Console.WriteLine("                RequestId");
                        Console.WriteLine("                    {0}", responseMetadata.RequestId);
                    }
                }

                Console.WriteLine("            ResponseHeaderMetadata");
                Console.WriteLine("                RequestId");
                Console.WriteLine("                    " + response.ResponseHeaderMetadata.RequestId);
                Console.WriteLine("                ResponseContext");
                Console.WriteLine("                    " + response.ResponseHeaderMetadata.ResponseContext);
                Console.WriteLine("                Timestamp");
                Console.WriteLine("                    " + response.ResponseHeaderMetadata.Timestamp);
            }
            catch (MarketplaceWebServiceException ex)
            {
                Console.WriteLine("Caught Exception: " + ex.Message);
                Console.WriteLine("Response Status Code: " + ex.StatusCode);
                Console.WriteLine("Error Code: " + ex.ErrorCode);
                Console.WriteLine("Error Type: " + ex.ErrorType);
                Console.WriteLine("Request ID: " + ex.RequestId);
                Console.WriteLine("XML: " + ex.XML);
                Console.WriteLine("ResponseHeaderMetadata: " + ex.ResponseHeaderMetadata);
            }
        }
Esempio n. 8
0
        public static string RequestAmazonInventoryReport(string accountName, string merchantId, string marketplaceId, string accessKeyId, string secretAccessKey)
        {
            string senderEmail         = ConfigurationManager.AppSettings["senderEmail"];
            string messageFromPassword = ConfigurationManager.AppSettings["messageFromPassword"];
            string messageToEmail      = ConfigurationManager.AppSettings["messageToEmail"];
            string smtpClient          = ConfigurationManager.AppSettings["smtpClient"];
            int    smtpPortNum         = ConvertUtility.ToInt(ConfigurationManager.AppSettings["smtpPortNum"]);

            string ReportRequestId       = "";
            RequestReportRequest request = new RequestReportRequest();

            request.Merchant             = merchantId;
            request.MarketplaceIdList    = new IdList();
            request.MarketplaceIdList.Id = new List <string>(new string[] { marketplaceId });

            request.ReportType = "_GET_FLAT_FILE_OPEN_LISTINGS_DATA_";
            const string applicationName       = "<Your Application Name>";
            const string applicationVersion    = "<Your Application Version>";
            MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();

            config.ServiceURL = "https://mws.amazonservices.com";
            config.SetUserAgentHeader(
                applicationName,
                applicationVersion,
                "C#",
                "<Parameter 1>", "<Parameter 2>");
            MarketplaceWebService.MarketplaceWebService service = new MarketplaceWebServiceClient(accessKeyId, secretAccessKey, config);

            try
            {
                RequestReportResponse response = service.RequestReport(request);


                Console.WriteLine("Service Response");
                Console.WriteLine("=============================================================================");
                Console.WriteLine();

                Console.WriteLine("        RequestReportResponse");

                if (response.IsSetRequestReportResult())
                {
                    Console.WriteLine("            RequestReportResult");
                    RequestReportResult requestReportResult = response.RequestReportResult;
                    ReportRequestInfo   reportRequestInfo   = requestReportResult.ReportRequestInfo;
                    Console.WriteLine("                  ReportRequestInfo");

                    if (reportRequestInfo.IsSetReportProcessingStatus())
                    {
                        Console.WriteLine("               ReportProcessingStatus");
                        Console.WriteLine("                                  {0}", reportRequestInfo.ReportProcessingStatus);
                    }
                    if (reportRequestInfo.IsSetReportRequestId())
                    {
                        Console.WriteLine("                      ReportRequestId");
                        Console.WriteLine("                                  {0}", reportRequestInfo.ReportRequestId);
                        ReportRequestId = reportRequestInfo.ReportRequestId;
                    }
                    if (reportRequestInfo.IsSetReportType())
                    {
                        Console.WriteLine("                           ReportType");
                        Console.WriteLine("                                  {0}", reportRequestInfo.ReportType);
                    }
                    if (reportRequestInfo.IsSetStartDate())
                    {
                        Console.WriteLine("                            StartDate");
                        Console.WriteLine("                                  {0}", reportRequestInfo.StartDate);
                    }
                    if (reportRequestInfo.IsSetEndDate())
                    {
                        Console.WriteLine("                              EndDate");
                        Console.WriteLine("                                  {0}", reportRequestInfo.EndDate);
                    }
                    if (reportRequestInfo.IsSetSubmittedDate())
                    {
                        Console.WriteLine("                        SubmittedDate");
                        Console.WriteLine("                                  {0}", reportRequestInfo.SubmittedDate);
                    }
                }
                if (response.IsSetResponseMetadata())
                {
                    Console.WriteLine("            ResponseMetadata");
                    ResponseMetadata responseMetadata = response.ResponseMetadata;
                    if (responseMetadata.IsSetRequestId())
                    {
                        Console.WriteLine("                RequestId");
                        Console.WriteLine("                    {0}", responseMetadata.RequestId);
                    }
                }

                Console.WriteLine("            ResponseHeaderMetadata");
                Console.WriteLine("                RequestId");
                Console.WriteLine("                    " + response.ResponseHeaderMetadata.RequestId);
                Console.WriteLine("                ResponseContext");
                Console.WriteLine("                    " + response.ResponseHeaderMetadata.ResponseContext);
                Console.WriteLine("                Timestamp");
                Console.WriteLine("                    " + response.ResponseHeaderMetadata.Timestamp);
            }
            catch (MarketplaceWebServiceException ex)
            {
                ExceptionUtility exceptionUtility = new ExceptionUtility();
                exceptionUtility.CatchMethod(ex, "RequestAmazonInventoryReport ", accountName + " " + ex.Message.ToString(), senderEmail, messageFromPassword, messageToEmail, smtpClient, smtpPortNum);
            }

            return(ReportRequestId);
        }
Esempio n. 9
0
        private string getCompletedReportId(string ReportRequestId, string ReportType, bool getPriorRun)
        {
            var    responseKey = $"GetReportRequestList:{_acct.AmazonAccountId}";
            string s           = "";

            //check cache first
            using (var r = RedisHelper.GetRedisConnection())
            {
                s = r.Get <string>(responseKey);
            }

            if (String.IsNullOrEmpty(s))
            {
                IDictionary <string, string> r1 = new Dictionary <string, String>();

                r1["Action"]  = "GetReportRequestList";
                r1["Version"] = "2009-01-01";

                String serviceURL = "https://mws.amazonservices.com";

                r1["MarketplaceId"]         = _acct.MarketplaceId;
                r1["SellerId"]              = _acct.SellerId;
                r1["ReportTypeList.Type.1"] = ReportType;
                r1["RequestedFromDate"]     = AMZNHelper.GetFormattedTimestamp(DateTime.Now.AddDays(-1));

                AMZNWebResponse wr = new AMZNWebResponse(_acct);
                s = wr.getResponse(serviceURL, r1);

                // set cache, expires in 15 seconds
                using (var r = RedisHelper.GetRedisConnection())
                {
                    r.Set <string>(responseKey, s, DateTime.Now.AddSeconds(15));
                    s = r.Get <string>(responseKey);
                }
            }

            try
            {
                var xDoc = XDocument.Parse(s);


                //dynamic root = new ExpandoObject();

                XElement xe = Util.stripNS(xDoc.Elements().First());

                IEnumerable <XElement> ReportRequestInfos = xe.Descendants("ReportRequestInfo");

                if (getPriorRun)
                {
                    return(getPriorReportId(ReportType, ReportRequestInfos));
                }

                foreach (var ReportRequestInfo in ReportRequestInfos)
                {
                    string rId = (string)ReportRequestInfo.Element("ReportRequestId");
                    if (!String.IsNullOrEmpty(rId) && rId == ReportRequestId)
                    {
                        // this will return the last one.
                        string ReportProcessingStatus = (string)ReportRequestInfo.Element("ReportProcessingStatus");
                        Log.Info(_acct.AmazonAccountId, $"Report  request {ReportRequestId} status = {ReportProcessingStatus}");
                        if (ReportProcessingStatus.StartsWith("_DONE_"))
                        {
                            return((string)ReportRequestInfo.Element("GeneratedReportId"));
                        }
                        return(ReportProcessingStatus);


                        // break;
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(_acct.AmazonAccountId, "Error getting report id", e);
                return("");
            }
            return("");
        }
Esempio n. 10
0
        public MemoryStream GetReportData(ReportType reportType, DateTime?startDate = null, DateTime?endDate = null)
        {
            RequestReportRequest requestReportRequest = new RequestReportRequest()
                                                        .WithMarketplaceIdList(new IdList {
                Id = new List <string> {
                    m_marketPlaceId
                }
            })
                                                        .WithReportType(reportType.ToString())
                                                        .WithMerchant(m_sellerId)
                                                        .WithReportOptions("true");

            if (startDate.HasValue)
            {
                requestReportRequest.WithStartDate(startDate.Value);
            }

            if (endDate.HasValue)
            {
                requestReportRequest.WithEndDate(endDate.Value);
            }

            Func <MemoryStream> getMemoryStream = () =>
            {
                RequestReportResponse requestReportResponse = m_service.RequestReport(requestReportRequest);
                Func <string>         getReportRequestId    = () =>
                {
                    ReportRequestInfo reportRequestInfo = requestReportResponse.RequestReportResult.ReportRequestInfo;

                    if (reportRequestInfo.ReportRequestId == null)
                    {
                        throw new RetryException("Need to wait for ReportRequestId to become not null in the getReportRequestId");
                    }

                    return(reportRequestInfo.ReportRequestId);
                };

                string reportRequestId = getReportRequestId.Retry(12, 5000);

                if (reportRequestId == null)
                {
                    throw new QuitException("reportRequestId is null after getReportRequestId");
                }

                GetReportRequestListRequest reportRequestList = new GetReportRequestListRequest()
                                                                .WithMerchant(m_sellerId)
                                                                .WithReportRequestIdList(new IdList {
                    Id = new List <string> {
                        reportRequestId
                    }
                });

                Func <string> getGeneratedReportId = () =>
                {
                    string generatedReportId;

                    try
                    {
                        GetReportRequestListResponse reportRequestListResponse = m_service.GetReportRequestList(reportRequestList);
                        ReportRequestInfo            reportRequestInfo         = reportRequestListResponse.GetReportRequestListResult.ReportRequestInfo
                                                                                 .FirstOrDefault(w => w.ReportRequestId == reportRequestId);

                        if (reportRequestInfo == null)
                        {
                            throw new RetryException("reportRequestInfo is null in getReport");
                        }

                        if (reportRequestInfo.ReportProcessingStatus != "_SUBMITTED_" && reportRequestInfo.ReportProcessingStatus != "_IN_PROGRESS_")
                        {
                            if (reportRequestInfo.GeneratedReportId != null)
                            {
                                generatedReportId = reportRequestInfo.GeneratedReportId;
                            }
                            else
                            {
                                throw new QuitException("generatedReportId was null in waitForReportToProcess");
                            }
                        }
                        else
                        {
                            throw new RetryException("Had to wait for report to finish processing in waitForReportToProcess");
                        }
                    }
                    catch (MarketplaceWebServiceException)
                    {
                        // Caused by throttling, lets wait longer.
                        Thread.Sleep(60000);
                        throw new RetryException("Throttled due to MarketplaceWebServiceException.");
                    }

                    return(generatedReportId);
                };

                string returnedGeneratedReportId = getGeneratedReportId.Retry(30, 30000);

                if (returnedGeneratedReportId == null)
                {
                    throw new QuitException("reportId was null, from getReport");
                }

                MemoryStream returnedMemoryStream = null;

                try
                {
                    MemoryStream     memoryStream  = new MemoryStream();
                    GetReportRequest reportRequest = new GetReportRequest {
                        Merchant = m_sellerId, ReportId = returnedGeneratedReportId, Report = memoryStream
                    };
                    GetReportResponse response = m_service.GetReport(reportRequest);

                    string md5String = response.GetReportResult.ContentMD5;

                    if (!md5String.Equals(memoryStream.ComputeMd5(), StringComparison.InvariantCulture))
                    {
                        throw new QuitException("contentMd5 did not match!");
                    }

                    returnedMemoryStream = memoryStream;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

                if (returnedMemoryStream == null)
                {
                    throw new QuitException("returnedMemoryStream was null.");
                }

                return(returnedMemoryStream);
            };

            return(getMemoryStream.Retry(30, 180000, true));
        }
Esempio n. 11
0
        public void UpdateData(ReportRequestInfo reportRequestData)
        {
            ReportData = reportRequestData;

            UpdateStatus(ReportData.ReportProcessingStatus);
        }