예제 #1
0
        public static List <InvoiceSKU> GetInvoiceSKU(string distributorID, Int64 invoiceID)
        {
            var proxy = ServiceClientProvider.GetOrderServiceProxy();

            try
            {
                var request = new GetInvoiceSkuRequest_V01
                {
                    DistributorID = distributorID,
                    InvoiceID     = invoiceID
                };
                var response = proxy.GetInvoiceSku(new GetInvoiceSkuRequest1(request)).GetInvoiceSkuResult as GetInvoiceSkuResponse_V01;
                if (response != null && response.Status == ServiceResponseStatusType.Success &&
                    null != response.InvoiceSkus && response.InvoiceSkus.Count > 0)
                {
                    return(response.InvoiceSkus);
                }
                return(null);
            }
            catch (Exception ex)
            {
                WebUtilities.LogExceptionWithContext(ex);

                LoggerHelper.Exception("System.Exception", new Exception("OrderService: GetInvoiceSKU\n", ex));
            }
            finally
            {
                if (proxy.State != CommunicationState.Closed)
                {
                    proxy.Close();
                }
                proxy = null;
            }
            return(null);
        }
예제 #2
0
        /// <summary>
        ///     method to get the check payment details response from service
        /// </summary>
        /// <param name="distributorID"></param>
        /// <returns></returns>
        private static GetInvoicesResponse_V01 getInvoicesResponse(string distributorID)
        {
            var proxy = ServiceClientProvider.GetOrderServiceProxy();

            try
            {
                var request = new GetInvoicesRequest_V01
                {
                    DistributorID = distributorID,
                };
                var response = proxy.GetInvoices(new GetInvoicesRequest1(request)).GetInvoicesResult as GetInvoicesResponse_V01;
                return(response);
            }
            catch (Exception ex)
            {
                WebUtilities.LogExceptionWithContext(ex);

                LoggerHelper.Exception("System.Exception", new Exception("OrderService: getInvoicesResponse\n", ex));
            }
            finally
            {
                if (proxy.State != CommunicationState.Closed)
                {
                    proxy.Close();
                }
                proxy = null;
            }
            return(null);
        }
예제 #3
0
        /// <summary>
        ///     Gets the next valid invoice number for the given distributor
        /// </summary>
        /// <param name="distributorID">The ID of the distributor</param>
        /// <returns>The next valid invoice number</returns>
        public static Int64 GetNextDistributorInvoiceNumber(string distributorID)
        {
            var proxy = ServiceClientProvider.GetOrderServiceProxy();

            try
            {
                var request = new GetNextDistributorInvoiceNumberRequest_V01
                {
                    DistributorID = distributorID
                };
                var response =
                    proxy.GetNextDistributorInvoiceNumber(new GetNextDistributorInvoiceNumberRequest1(request)).GetNextDistributorInvoiceNumberResult as GetNextDistributorInvoiceNumberResponse_V01;
                if (response != null && response.Status == ServiceResponseStatusType.Success &&
                    response.InvoiceNumber > 0)
                {
                    return(response.InvoiceNumber);
                }
            }
            catch (Exception ex)
            {
                WebUtilities.LogExceptionWithContext(ex);

                LoggerHelper.Exception("System.Exception", new Exception("OrderService: GetNextDistributorInvoiceNumber\n", ex));
            }
            finally
            {
                if (proxy.State != CommunicationState.Closed)
                {
                    proxy.Close();
                }
                proxy = null;
            }
            return(0);
        }
예제 #4
0
        public static Int64 SetInvoice(Invoice invoice)
        {
            var proxy = ServiceClientProvider.GetOrderServiceProxy();

            try
            {
                var request = new SetInvoiceRequest_V01
                {
                    Invoice = invoice
                };
                var response = proxy.SetInvoice(new SetInvoiceRequest1(request)).SetInvoiceResult as SetInvoiceResponse_V01;
                if (response != null && response.Status == ServiceResponseStatusType.Success)
                {
                    ExpireInvoicesCache(invoice.DistributorID);
                    return(response.InvoiceID);
                }
                return(0);
            }
            catch (Exception ex)
            {
                WebUtilities.LogExceptionWithContext(ex);

                LoggerHelper.Exception("System.Exception", new Exception("OrderService: SetInvoice\n", ex));
            }
            finally
            {
                if (proxy.State != CommunicationState.Closed)
                {
                    proxy.Close();
                }
                proxy = null;
            }
            return(0);
        }
        private DistributorPurchasingLimitsCollection GetDistributorPurchasingLimitsCollection()
        {
            DistributorPurchasingLimitsCollection distributorPurchasingLimitsCollection = null;
            var mpeThresholdCountries =
                new List <string>(Settings.GetRequiredAppSetting("MPEThresholdCountries").Split(new[] { ',' }));

            if (mpeThresholdCountries.Contains(_processingCountry))
            {
                if (_distributorLevel == "DS")
                {
                    _currentLoggedInCountry = _processingCountry;
                }
            }
            using (var proxy = ServiceClientProvider.GetOrderServiceProxy())
            {
                try
                {
                    var request = new GetDistributorPurchasingLimitsRequest_V01
                    {
                        DistributorID = _distributorId,
                        CountryCode   = _currentLoggedInCountry
                    };

                    // RS exception in country for request
                    if (_currentLoggedInCountry.Equals("RS"))
                    {
                        request.CountryCode = CountryType.RS.HmsCountryCodes.FirstOrDefault();
                    }

                    var response =
                        proxy.GetDistributorPurchasingLimits(new GetDistributorPurchasingLimitsRequest(request)).GetDistributorPurchasingLimitsResult as GetDistributorPurchasingLimitsResponse_V01;
                    if (response != null && response.Status == ServiceResponseStatusType.Success)
                    {
                        distributorPurchasingLimitsCollection = response.PurchasingLimits;
                    }
                }
                catch (Exception ex)
                {
                    LoggerHelper.Exception("System.Exception", new Exception(
                                               string.Format(
                                                   "Error retrieving GetPurchasingLimits Status from Order service for: DS:{0} - Country:{1}, {2}",
                                                   _distributorId, _currentLoggedInCountry, ex)));
                    distributorPurchasingLimitsCollection = null;
                }
            }

            return(distributorPurchasingLimitsCollection);
        }
예제 #6
0
        /// <summary>
        ///     explicit method to clean up the check payment details response
        /// </summary>
        /// <param name="distributorID"></param>
        /// <returns></returns>
        public static bool ExpireInvoicesCache(string distributorID)
        {
            try
            {
                string cacheKey = INVOICE_CACHE_KEY_PREFIX + distributorID;
                SimpleCache.Expire(typeof(GetInvoicesResponse_V01), cacheKey);
                return(true);
            }
            catch (Exception ex)
            {
                WebUtilities.LogExceptionWithContext(ex);

                LoggerHelper.Exception("System.Exception", new Exception(
                                           "OrderService: Fail to clear GetInvoices cache for DistributorID: " + distributorID + " \n", ex));
            }
            return(false);
        }
        public static void CheckForMPCFraud(DistributorOrderingProfile distributor)
        {
            string errorResxKey = string.Empty;

            try
            {
                if (distributor != null && distributor.IsMPCFraud == null)
                {
                    using (var proxyDs = ServiceClientProvider.GetDistributorServiceProxy())
                    {
                        var requestV01 = new GetBasicDistributorRequest_V01
                        {
                            DistributorID = distributor.Id
                        };

                        var circuitBreaker =
                            CircuitBreakerFactory.GetFactory().GetCircuitBreaker <GetBasicDistributorResponse_V01>();
                        var responseV01 =
                            circuitBreaker.Execute(() => proxyDs.GetBasicDistributor(new GetBasicDistributorRequest(requestV01))).GetBasicDistributorResult as
                            GetBasicDistributorResponse_V01;

                        if (responseV01 != null && responseV01.Status == ServiceResponseStatusType.Success)
                        {
                            if (responseV01.Distributor != null)
                            {
                                distributor.IsMPCFraud = responseV01.Distributor.IsMPCFraud;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LoggerHelper.Exception("System.Exception", new Exception(
                                           string.Format(
                                               "Error retrieving MPC Fraud from Distributor service for: DS:{0} - Country:{1}, {2}",
                                               distributor.Id, distributor.CurrentLoggedInCountry, ex)));
            }
        }
        public DualOrderMonthViewModel GetDualOrderMonth(string country)
        {
            if (string.IsNullOrEmpty(country))
            {
                LoggerHelper.Error("country is null - MobileDualOrderMonthController");
                return(null);
            }

            try
            {
                var _businessSettings   = new DualOrderMonthProvider(new DualOrderMonthLoader());
                var result              = new DualOrderMonthResponseViewModel();
                var localNow            = DateUtils.GetCurrentLocalTime(country);
                var isDualOrderMonth    = _businessSettings.IsDualOrderMonth(country, localNow);
                var dualOrderMonthModel = new DualOrderMonthViewModel
                {
                    PreviousOrderMonth = localNow.Month - 1,
                };

                if (isDualOrderMonth)
                {
                    var monthEndDate = _businessSettings.GetDualMonthEndValue(country, localNow);
                    dualOrderMonthModel.PreviousOrderMonthEndDate = null != monthEndDate
                        ? monthEndDate.Value.ToString("yyyy-MM-ddTHH:mm:sszzz")
                        : "calendar";
                }
                else
                {
                    dualOrderMonthModel.PreviousOrderMonthEndDate = "calendar";
                }
                return(dualOrderMonthModel);
            }
            catch (Exception ex)
            {
                LoggerHelper.Exception("General", ex, "error in DualOrderMonthViewModel GetDualOrderMonth");
                return(null);
            }
        }
예제 #9
0
        public static bool DeleteInvoice(string distributorID, long invoiceID, long contactInfoID)
        {
            var proxy = ServiceClientProvider.GetOrderServiceProxy();

            try
            {
                var request = new DeleteInvoiceRequest_V01
                {
                    DistributorID = distributorID,
                    InvoiceID     = invoiceID,
                    ContactInfoID = contactInfoID
                };
                var response = proxy.DeleteInvoice(new DeleteInvoiceRequest1(request)).DeleteInvoiceResult as DeleteInvoiceResponse_V01;
                if (response != null && response.Status == ServiceResponseStatusType.Success)
                {
                    ExpireInvoicesCache(distributorID);
                    return(true);
                }
                return(false);
            }
            catch (Exception ex)
            {
                WebUtilities.LogExceptionWithContext(ex);

                LoggerHelper.Exception("System.Exception", new Exception("OrderService: DeleteInvoice\n", ex));
            }
            finally
            {
                if (proxy.State != CommunicationState.Closed)
                {
                    proxy.Close();
                }
                proxy = null;
            }
            return(false);
        }
        public static string CheckForDRFraud(DistributorOrderingProfile distributor, string zipCode)
        {
            string errorResxKey = string.Empty;
            var    fraudStatus = DRFraudStatusType.None;
            bool   isBlocked, isSponsorBlocked, isDsFound;

            isBlocked = isSponsorBlocked = isDsFound = false;

            using (var proxy = ServiceClientProvider.GetOrderServiceProxy())
            {
                try
                {
                    if (distributor != null && distributor.FraudStatus == null)
                    {
                        using (var proxyDs = ServiceClientProvider.GetDistributorServiceProxy())
                        {
                            var requestV01 = new GetBasicDistributorRequest_V01
                            {
                                DistributorID = distributor.Id
                            };

                            var circuitBreaker =
                                CircuitBreakerFactory.GetFactory().GetCircuitBreaker <GetBasicDistributorResponse_V01>();
                            var responseV01 =
                                circuitBreaker.Execute(() => proxyDs.GetBasicDistributor(new GetBasicDistributorRequest(requestV01))).GetBasicDistributorResult as
                                GetBasicDistributorResponse_V01;

                            if (responseV01 != null && responseV01.Status == ServiceResponseStatusType.Success)
                            {
                                if (responseV01.Distributor != null)
                                {
                                    isBlocked        = responseV01.Distributor.DRFraudStatusFlags.IsDistributorblocked;
                                    isSponsorBlocked = responseV01.Distributor.DRFraudStatusFlags.IsSponsorBlocked;
                                    isDsFound        = true;
                                }
                            }
                        }
                    }
                    else if (distributor != null && distributor.FraudStatus != null)
                    {
                        isBlocked        = distributor.FraudStatus.IsDistributorblocked;
                        isSponsorBlocked = distributor.FraudStatus.IsSponsorBlocked;
                        isDsFound        = true;
                    }

                    if (isDsFound)
                    {
                        var request = new GetDRFraudStatusRequest_V01();
                        request.DistributorID        = distributor.Id;
                        request.CountryCode          = distributor.CurrentLoggedInCountry;
                        request.PostalCode           = zipCode;
                        request.DistributorIsBlocked = isBlocked;
                        request.SponsorIsBlocked     = isSponsorBlocked;

                        var response =
                            proxy.GetDRFraudStatus(new GetDRFraudStatusRequest(request)).GetDRFraudStatusResult as GetDRFraudStatusResponse_V01;
                        if (response.Status == ServiceProvider.OrderSvc.ServiceResponseStatusType.Success)
                        {
                            fraudStatus = response.FraudStatus;
                        }
                    }
                    else
                    {
                        LoggerHelper.Exception("System.Exception", new Exception(
                                                   string.Format(
                                                       "Error retrieving DS DRFraudStatusFlags from Cache and Distributor service for: DS:{0} - Country:{1}",
                                                       distributor.Id, distributor.CurrentLoggedInCountry)));
                        fraudStatus = DRFraudStatusType.None;
                    }
                }
                catch (Exception ex)
                {
                    LoggerHelper.Exception("System.Exception", new Exception(
                                               string.Format(
                                                   "Error retrieving DRFraud Status from Order service for: DS:{0} - Country:{1}, {2}",
                                                   distributor.Id, distributor.CurrentLoggedInCountry, ex)));
                    fraudStatus = DRFraudStatusType.None;
                }
            }

            if (fraudStatus == DRFraudStatusType.DistributorIsBlocked)
            {
                errorResxKey = "BlockedDS";
            }
            else if (fraudStatus == DRFraudStatusType.PostalCodeIsBlocked)
            {
                errorResxKey = "BlockedZip";
            }

            return(errorResxKey);
        }
        public static DRFraudStatusType CheckForDRFraud(string distributorID, string countryCode, string zipCode)
        {
            var fraudStatus = DRFraudStatusType.None;

            string CacheKey = string.Format("{0}_{1}", "DSFraud", countryCode);
            Dictionary <string, List <string> > blockedPostalCodes = HttpRuntime.Cache[CacheKey] as Dictionary <string, List <string> >;

            DistributorOrderingProfile distributorOrderingProfile = GetProfile(distributorID, countryCode);

            if (blockedPostalCodes == null)
            {
                using (var proxy = ServiceClientProvider.GetOrderServiceProxy())
                {
                    try
                    {
                        var request = new GetDRFraudStatusRequest_V01();
                        request.DistributorID = distributorID;
                        request.CountryCode   = countryCode;
                        request.PostalCode    = zipCode;

                        request.DistributorIsBlocked = distributorOrderingProfile.IsDistributorBlocked;
                        request.SponsorIsBlocked     = distributorOrderingProfile.IsSponsorBlocked;

                        var response =
                            proxy.GetDRFraudStatus(new GetDRFraudStatusRequest(request)).GetDRFraudStatusResult as GetDRFraudStatusResponse_V01;
                        if (response.Status == ServiceProvider.OrderSvc.ServiceResponseStatusType.Success)
                        {
                            fraudStatus        = response.FraudStatus;
                            blockedPostalCodes = response.BlockedPostCodes;
                        }
                        HttpRuntime.Cache[CacheKey] = response.BlockedPostCodes != null ? response.BlockedPostCodes : new Dictionary <string, List <string> > {
                        };
                    }
                    catch (Exception ex)
                    {
                        LoggerHelper.Exception("System.Exception", new Exception(
                                                   string.Format(
                                                       "Error retrieving DRFraud Status from Order service for: DS:{0} - Country:{1}, {2}",
                                                       distributorID, countryCode, ex)));
                        fraudStatus = DRFraudStatusType.None;
                    }
                }
            }
            if (distributorOrderingProfile.IsDistributorBlocked && blockedPostalCodes != null)
            {
                if (blockedPostalCodes.ContainsKey(countryCode) && blockedPostalCodes[countryCode].Contains(zipCode))
                {
                    return(DRFraudStatusType.PostalCodeIsBlocked);
                }
            }

            //if (fraudStatus == DRFraudStatusType.DistributorIsBlocked)
            //{
            //    errorResxKey = "BlockedDS";
            //}
            //else if (fraudStatus == DRFraudStatusType.PostalCodeIsBlocked)
            //{
            //    errorResxKey = "BlockedZip";
            //}

            return(fraudStatus);
        }
예제 #12
0
        public static List <Invoice> SearchInvoice(InvoiceSearchFilter invoiceSearchFilter, string distributorID)
        {
            var proxy = ServiceClientProvider.GetOrderServiceProxy();

            try
            {
                var allInvoices = GetInvoices(distributorID);

                if (null == allInvoices)
                {
                    return(null);
                }

                if (invoiceSearchFilter != null)
                {
                    if (invoiceSearchFilter.SearchByDateOrAmount)
                    {
                        return(DoSearchByDateOrAmount(invoiceSearchFilter, allInvoices));
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(invoiceSearchFilter.SKU) ||
                            !string.IsNullOrEmpty(invoiceSearchFilter.Description))
                        {
                            var request = new SearchInvoiceRequest_V01
                            {
                                DistributorID = distributorID,
                                SKU           = invoiceSearchFilter.SKU,
                                Description   = invoiceSearchFilter.Description
                            };
                            var response = proxy.SearchInvoice(new SearchInvoiceRequest1(request)).SearchInvoiceResult as SearchInvoiceResponse_V01;

                            if (response != null && response.Status == ServiceResponseStatusType.Success &&
                                null != response.InvoiceIDs && response.InvoiceIDs.Count > 0)
                            {
                                var invoicesBySkuOrDesc = allInvoices.Where(i => response.InvoiceIDs.Any(a => a == i.ID));
                                if (null != invoicesBySkuOrDesc && invoicesBySkuOrDesc.Count() > 0)
                                {
                                    return(invoicesBySkuOrDesc.ToList());
                                }
                                return(null);
                            }
                        }
                        else
                        {
                            return(DoSearchByOtherFields(invoiceSearchFilter, allInvoices));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                WebUtilities.LogExceptionWithContext(ex);

                LoggerHelper.Exception("System.Exception", new Exception("OrderService: SearchInvoice\n", ex));
            }
            finally
            {
                if (proxy.State != CommunicationState.Closed)
                {
                    proxy.Close();
                }
                proxy = null;
            }
            return(null);
        }