Beispiel #1
0
        private AmazonOrderItemDetailsList GetOrderItems(
            AmazonSecurityInfo securityInfo,
            ActionAccessType access,
            AmazonOrderItem orderItem2,
            ElapsedTimeInfo elapsedTimeInfo,
            AmazonOrdersList orders,
            int mpId
            )
        {
            var itemsRequestInfo = new AmazonOrdersItemsRequestInfo {
                MarketplaceId     = securityInfo.MarketplaceId,
                MerchantId        = securityInfo.MerchantId,
                OrderId           = orderItem2.OrderId,
                ErrorRetryingInfo = this.amazonSettings,
                MWSAuthToken      = securityInfo.MWSAuthToken
            };

            AmazonOrderItemDetailsList orderItems = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                mpId,
                ElapsedDataMemberType
                .RetrieveDataFromExternalService,
                () => AmazonServiceHelper.GetListItemsOrdered(this.connectionInfo, itemsRequestInfo, access, orders.RequestsCounter)
                );

            return(orderItems);
        }
        }         // RetrieveAndAggregate

        private void CheckTokenStatus(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            DataProviderCreationInfo info,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            Helper.CustomerMarketplaceUpdateAction(
                CustomerMarketplaceUpdateActionType.UpdateAccountInfo,
                databaseCustomerMarketPlace,
                historyRecord,
                () => {
                var elapsedTimeInfo = new ElapsedTimeInfo();

                var checker = new DataProviderCheckAuthenticationToken(info);

                var result = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo,
                    databaseCustomerMarketPlace.Id,
                    ElapsedDataMemberType.RetrieveDataFromExternalService,
                    () => checker.Check()
                    );

                return(new UpdateActionResultInfo {
                    Name = UpdateActionResultType.GetTokenStatus,
                    RequestsCounter = result == null ? null : result.RequestsCounter,
                    ElapsedTime = elapsedTimeInfo
                });
            }
                );
        }         // CheckTokenStatus
Beispiel #3
0
        private MP_EbayAmazonCategory[] GetAndSaveAmazonProcuctCategoryByProductSellerSku(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            AmazonSecurityInfo securityInfo,
            string sellerSku,
            ActionAccessType access,
            RequestsCounterData requestCounter,
            ElapsedTimeInfo elapsedTimeInfo
            )
        {
            var categories = Helper.FindAmazonCategoryByProductSellerSKU(sellerSku, elapsedTimeInfo, databaseCustomerMarketPlace.Id);

            if (categories == null)
            {
                var requestInfo = new AmazonProductsRequestInfoBySellerSku {
                    MarketplaceId     = securityInfo.MarketplaceId,
                    MerchantId        = securityInfo.MerchantId,
                    SellerSku         = sellerSku,
                    ErrorRetryingInfo = this.amazonSettings,
                    MWSAuthToken      = securityInfo.MWSAuthToken
                };
                categories = GetAndSaveAmazonProcuctCategory(databaseCustomerMarketPlace, requestInfo, access, requestCounter, elapsedTimeInfo);
            }

            return(categories);
        }
Beispiel #4
0
        private void UpdateClientFeedbackInfo(IDatabaseCustomerMarketPlace databaseCustomerMarketPlace, AmazonSecurityInfo securityInfo, MP_CustomerMarketplaceUpdatingHistory historyRecord)
        {
            Helper.CustomerMarketplaceUpdateAction(CustomerMarketplaceUpdateActionType.UpdateFeedbackInfo, databaseCustomerMarketPlace, historyRecord, () => {
                var elapsedTimeInfo = new ElapsedTimeInfo();

                var request = new AmazonUserInfo {
                    MerchantId = securityInfo.MerchantId,
                };

                var amazonUserRatingInfo = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo,
                                                                                                          databaseCustomerMarketPlace.Id,
                                                                                                          ElapsedDataMemberType.RetrieveDataFromExternalService,
                                                                                                          () => AmazonServiceHelper.GetUserStatisticsInfo(request)
                                                                                                          );

                ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo,
                                                                               databaseCustomerMarketPlace.Id,
                                                                               ElapsedDataMemberType.StoreDataToDatabase,
                                                                               () => ParceAndSaveUserFeedbackInfo(databaseCustomerMarketPlace, amazonUserRatingInfo, historyRecord)
                                                                               );

                return(new UpdateActionResultInfo {
                    Name = UpdateActionResultType.FeedbackRaiting,
                    Value = amazonUserRatingInfo == null ? null : (object)amazonUserRatingInfo.Rating,
                    RequestsCounter = amazonUserRatingInfo == null ? null : amazonUserRatingInfo.RequestsCounter,
                    ElapsedTime = elapsedTimeInfo
                });
            });
        }
Beispiel #5
0
        private MP_EbayAmazonCategory[] GetAndSaveAmazonProcuctCategory(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            AmazonProductsRequestInfoBySellerSku requestInfo,
            ActionAccessType access,
            RequestsCounterData requestCounter,
            ElapsedTimeInfo elapsedTimeInfo
            )
        {
            MP_EbayAmazonCategory[] categories = null;

            AmazonProductItemBase productItem = null;

            try {
                productItem = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo,
                    databaseCustomerMarketPlace.Id,
                    ElapsedDataMemberType.RetrieveDataFromExternalService,
                    () => AmazonServiceHelper.GetProductCategories(this.connectionInfo, requestInfo, access, requestCounter)
                    );
            } catch (MarketplaceWebServiceProductsException) {
                // Product not found or cannot be retrieved.
            }             // try

            if (productItem != null)
            {
                var marketplace = databaseCustomerMarketPlace.Marketplace;
                categories = Helper.AddAmazonCategories(marketplace, productItem, elapsedTimeInfo, databaseCustomerMarketPlace.Id);
            }             // if

            return(categories);
        }
Beispiel #6
0
        private static void DisplayOrders(ElapsedTimeInfo elapsedTimeInfo, List <OrderItemTwo> orders)
        {
            foreach (var order in orders)
            {
                Console.WriteLine(order.ToString());
            }

            Console.WriteLine("RetrieveDataFromExternalService took {0} s", elapsedTimeInfo.GetValue(ElapsedDataMemberType.RetrieveDataFromExternalService));
            Console.WriteLine("Number of orders: {0}", orders.Count);
        }
        public void TestAmazonOrders()
        {
            var amazonTester    = new AmazonTester();
            var elapsedTimeInfo = new ElapsedTimeInfo();
            var connectionInfo  = ObjectFactory.GetInstance <AmazonMarketPlaceTypeConnection>();
            var connection      = AmazonServiceConnectionFactory.CreateConnection(connectionInfo);
            var orders          = amazonTester.GetOrders(18363, elapsedTimeInfo, connection, 7, false);

            amazonTester.DisplayOrders(elapsedTimeInfo, orders);
        }
        private UpdateActionResultInfo UpdateTransactionInfo(IDatabaseCustomerMarketPlace databaseCustomerMarketPlace, PayPalSecurityData securityInfo, MP_CustomerMarketplaceUpdatingHistory historyRecord)
        {
            var endDate         = DateTime.UtcNow;
            var elapsedTimeInfo = new ElapsedTimeInfo();

            DateTime?startDate = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.RetrieveDataFromDatabase,
                () => Helper.GetLastPayPalTransactionDate(databaseCustomerMarketPlace)
                );

            if (!startDate.HasValue)
            {
                startDate = endDate.AddMonths(-CurrentValues.Instance.PayPalTransactionSearchMonthsBack);
            }

            var errorRetryingInfo = new ErrorRetryingInfo((bool)CurrentValues.Instance.PayPalEnableRetrying, CurrentValues.Instance.PayPalMinorTimeoutInSeconds, CurrentValues.Instance.PayPalUseLastTimeOut);

            errorRetryingInfo.Info    = new ErrorRetryingItemInfo[3];
            errorRetryingInfo.Info[0] = new ErrorRetryingItemInfo(CurrentValues.Instance.PayPalIterationSettings1Index, CurrentValues.Instance.PayPalIterationSettings1CountRequestsExpectError, CurrentValues.Instance.PayPalIterationSettings1TimeOutAfterRetryingExpiredInMinutes);
            errorRetryingInfo.Info[1] = new ErrorRetryingItemInfo(CurrentValues.Instance.PayPalIterationSettings2Index, CurrentValues.Instance.PayPalIterationSettings2CountRequestsExpectError, CurrentValues.Instance.PayPalIterationSettings2TimeOutAfterRetryingExpiredInMinutes);
            errorRetryingInfo.Info[2] = new ErrorRetryingItemInfo(CurrentValues.Instance.PayPalIterationSettings3Index, CurrentValues.Instance.PayPalIterationSettings3CountRequestsExpectError, CurrentValues.Instance.PayPalIterationSettings3TimeOutAfterRetryingExpiredInMinutes);

            var reqInfo = new PayPalRequestInfo {
                SecurityInfo         = securityInfo,
                StartDate            = startDate.Value,
                EndDate              = endDate,
                ErrorRetryingInfo    = errorRetryingInfo,
                OpenTimeOutInMinutes = CurrentValues.Instance.PayPalOpenTimeoutInMinutes,
                SendTimeoutInMinutes = CurrentValues.Instance.PayPalSendTimeoutInMinutes,
                DaysPerRequest       = CurrentValues.Instance.PayPalDaysPerRequest
            };

            MP_PayPalTransaction mpTransaction = null;
            int numOfTransactions = 0;
            RequestsCounterData requestsCounter = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.RetrieveDataFromExternalService,
                () => PayPalServiceHelper.GetTransactionData(reqInfo, data => {
                mpTransaction      = Helper.SavePayPalTransactionInfo(databaseCustomerMarketPlace, data, historyRecord, mpTransaction);
                numOfTransactions += (data == null ? 0 : data.Count);
                return(true);
            })
                );

            return(new UpdateActionResultInfo {
                Name = UpdateActionResultType.TransactionItemsCount,
                Value = numOfTransactions,
                RequestsCounter = requestsCounter,
                ElapsedTime = elapsedTimeInfo
            });
        }
Beispiel #9
0
        public DatabaseElapsedTimeInfo(ElapsedTimeInfo info)
        {
            if (info == null)
            {
                return;
            }

            AggregateData                   = info.GetValue(ElapsedDataMemberType.AggregateData);
            RetrieveDataFromDatabase        = info.GetValue(ElapsedDataMemberType.RetrieveDataFromDatabase);
            RetrieveDataFromExternalService = info.GetValue(ElapsedDataMemberType.RetrieveDataFromExternalService);
            StoreAggregatedData             = info.GetValue(ElapsedDataMemberType.StoreAggregatedData);
            StoreDataToDatabase             = info.GetValue(ElapsedDataMemberType.StoreDataToDatabase);
        }
Beispiel #10
0
        private static List <OrderItemTwo> GetOrders(int umi, ElapsedTimeInfo elapsedTimeInfo, AmazonServiceConnectionInfo _ConnectionInfo, int days, bool useReporting)
        {
            var session = ObjectFactory.GetInstance <ISession>();

            var marketplace = session.Get <MP_CustomerMarketPlace>(umi);

            var securityInfo = Serialized.Deserialize <AmazonSecurityInfo>(marketplace.SecurityData);

            var endDate   = DateTime.UtcNow;
            var startDate = endDate.AddDays(-days);

            var errorRetryingInfo = new ErrorRetryingInfo((bool)CurrentValues.Instance.AmazonEnableRetrying, CurrentValues.Instance.AmazonMinorTimeoutInSeconds, CurrentValues.Instance.AmazonUseLastTimeOut);

            errorRetryingInfo.Info    = new ErrorRetryingItemInfo[2];
            errorRetryingInfo.Info[0] = new ErrorRetryingItemInfo(CurrentValues.Instance.AmazonIterationSettings1Index, CurrentValues.Instance.AmazonIterationSettings1CountRequestsExpectError, CurrentValues.Instance.AmazonIterationSettings1TimeOutAfterRetryingExpiredInMinutes);
            errorRetryingInfo.Info[1] = new ErrorRetryingItemInfo(CurrentValues.Instance.AmazonIterationSettings2Index, CurrentValues.Instance.AmazonIterationSettings2CountRequestsExpectError, CurrentValues.Instance.AmazonIterationSettings2TimeOutAfterRetryingExpiredInMinutes);

            var amazonOrdersRequestInfo = new AmazonOrdersRequestInfo
            {
                StartDate         = startDate,
                EndDate           = endDate,
                MarketplaceId     = securityInfo.MarketplaceId,
                MerchantId        = securityInfo.MerchantId,
                ErrorRetryingInfo = errorRetryingInfo,
            };

            List <OrderItemTwo> orders;

            if (useReporting)
            {
                var configurator = AmazonServiceConfigurationFactory.CreateServiceReportsConfigurator(_ConnectionInfo);

                orders = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo, umi,
                    ElapsedDataMemberType.RetrieveDataFromExternalService,
                    () => AmazonServiceReports.GetUserOrders(configurator, amazonOrdersRequestInfo, ActionAccessType.Full))
                         .Select(OrderItemTwo.FromOrderItem)
                         .ToList();
            }
            else
            {
                var ordersList = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo, umi,
                                                                                                ElapsedDataMemberType.RetrieveDataFromExternalService,
                                                                                                () => AmazonServiceHelper.GetListOrders(_ConnectionInfo, amazonOrdersRequestInfo, ActionAccessType.Full, null));

                //todo make it work again
                orders = new List <OrderItemTwo>();
            }

            return(orders);
        }
        }         // ConvertToBaseCurrency

        private MP_EBayOrderItemDetail FindEBayOrderItemInfo(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            DataProviderCreationInfo info,
            string itemID,
            RequestsCounterData requestCounter,
            ElapsedTimeInfo elapsedTimeInfo
            )
        {
            if (!this.settings.DownloadCategories)
            {
                return(null);
            }

            int mpID = databaseCustomerMarketPlace.Id;

            IMarketplaceType marketplace = databaseCustomerMarketPlace.Marketplace;

            var eBayItemInfoData = new eBayFindOrderItemInfoData(itemID);

            var eBayOrderItemInfo = Helper.FindEBayOrderItemInfo(eBayItemInfoData, elapsedTimeInfo, mpID);

            if (eBayOrderItemInfo == null)
            {
                var providerGetItemInfo = new DataProviderGetItemInfo(info);

                var req = new eBayRequestItemInfoData(eBayItemInfoData);

                ResultInfoEbayItemInfo ebayItemInfo = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo,
                    mpID,
                    ElapsedDataMemberType.RetrieveDataFromExternalService,
                    () => providerGetItemInfo.GetItem(req)
                    );

                requestCounter.Add(ebayItemInfo.RequestsCounter);

                var newEBayOrderItemInfo = new EbayDatabaseOrderItemInfo {
                    ItemID          = ebayItemInfo.ItemID,
                    PrimaryCategory = FindCategory(marketplace, ebayItemInfo.PrimaryCategory, elapsedTimeInfo, mpID),
                    // SecondaryCategory = FindCategory(marketplace, ebayItemInfo.SecondaryCategory, elapsedTimeInfo, mpID),
                    // FreeAddedCategory = FindCategory(marketplace, ebayItemInfo.FreeAddedCategory, elapsedTimeInfo, mpID),
                    Title = ebayItemInfo.Title,
                };

                eBayOrderItemInfo = Helper.SaveEBayOrderItemInfo(newEBayOrderItemInfo, elapsedTimeInfo, mpID);
            }             // if

            return(eBayOrderItemInfo);
        }         // FindEBayOrderItemInfo
        }         // FindEBayOrderItemInfo

        private MP_EbayAmazonCategory FindCategory(
            IMarketplaceType marketplace,
            eBayCategoryInfo data,
            ElapsedTimeInfo elapsedTimeInfo,
            int mpID
            )
        {
            if (data == null)
            {
                return(null);
            }

            return(Helper.FindEBayAmazonCategory(marketplace, data.CategoryId, elapsedTimeInfo, mpID) ??
                   Helper.AddEbayCategory(marketplace, data, elapsedTimeInfo, mpID));
        }         // FindCategory
Beispiel #13
0
        public MP_EbayAmazonCategory[] FindAmazonCategoryByProductAsin(string asin, ElapsedTimeInfo elapsedTimeInfo, int mpId)
        {
            MP_EbayAmazonCategory[] cat;

            if (!_CacheAmazonCategoryByProductKey.TryGetValue(asin, out cat))
            {
                cat = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo,
                                                                                     mpId,
                                                                                     ElapsedDataMemberType.RetrieveDataFromDatabase,
                                                                                     () => _AmazonOrderItemDetailRepository.FindCategoriesByAsin(asin));
                if (cat != null)
                {
                    _CacheAmazonCategoryByProductKey.TryAdd(asin, cat);
                }
            }

            return(cat);
        }
        }         // UpdateAccountInfo

        private void UpdateFeedbackInfo(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            DataProviderCreationInfo info,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            Helper.CustomerMarketplaceUpdateAction(
                CustomerMarketplaceUpdateActionType.UpdateFeedbackInfo,
                databaseCustomerMarketPlace,
                historyRecord,
                () => {
                var elapsedTimeInfo = new ElapsedTimeInfo();

                var resultInfo = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo,
                    databaseCustomerMarketPlace.Id,
                    ElapsedDataMemberType.RetrieveDataFromExternalService,
                    () => DataProviderGetFeedback.GetFeedBack(info)
                    );

                ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo,
                    databaseCustomerMarketPlace.Id,
                    ElapsedDataMemberType.StoreDataToDatabase,
                    () => SaveFeedbackInfo(databaseCustomerMarketPlace, resultInfo, historyRecord)
                    );

                var ebayRaitingInfo = resultInfo == null ? null : resultInfo.GetRaitingData(
                    FeedbackSummaryPeriodCodeType.FiftyTwoWeeks,
                    FeedbackRatingDetailCodeType.ShippingAndHandlingCharges
                    );

                return(new UpdateActionResultInfo {
                    Name = UpdateActionResultType.FeedbackRaiting,
                    Value = ebayRaitingInfo == null ? null : (object)ebayRaitingInfo.Value,
                    RequestsCounter = resultInfo == null ? null : resultInfo.RequestsCounter,
                    ElapsedTime = elapsedTimeInfo
                });
            }
                );
        }         // UpdateFeedbackInfo
Beispiel #15
0
        }         // HmrcVatReturnConversion

        private ElapsedTimeInfo ProcessRetrieved(
            IHarvester oHarvester,
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            // Convert orders into internal format.
            List <Order> oRawOrders = ((Integration.ChannelGrabberAPI.Harvester)oHarvester).RetrievedOrders;

            var oChaGraOrders = new List <AInternalOrderItem>();

            if (oRawOrders != null)
            {
                oChaGraOrders.AddRange(oRawOrders.Select(oRaw => new ChannelGrabberOrderItem {
                    CurrencyCode  = oRaw.CurrencyCode,
                    OrderStatus   = oRaw.OrderStatus,
                    NativeOrderId = oRaw.NativeOrderId,
                    PaymentDate   = oRaw.PaymentDate,
                    PurchaseDate  = oRaw.PurchaseDate,
                    TotalCost     = oRaw.TotalCost,
                    IsExpense     = oRaw.IsExpense,
                }));
            }             // if

            var elapsedTimeInfo = new ElapsedTimeInfo();

            // store retrieved orders to DB.
            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.StoreDataToDatabase,
                () => Helper.StoreChannelGrabberOrdersData(
                    databaseCustomerMarketPlace,
                    new InternalDataList(DateTime.UtcNow, oChaGraOrders),
                    historyRecord,
                    oHarvester.SourceID
                    ));

            return(elapsedTimeInfo);
        }         // ProcessRetrieved
        }         // SaveFeedbackInfo

        private void UpdateAccountInfo(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            DataProviderCreationInfo info,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            Helper.CustomerMarketplaceUpdateAction(
                CustomerMarketplaceUpdateActionType.UpdateAccountInfo,
                databaseCustomerMarketPlace,
                historyRecord,
                () => {
                var account = new DataProviderGetAccount(info);

                var elapsedTimeInfo = new ElapsedTimeInfo();

                var resultInfo = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo,
                    databaseCustomerMarketPlace.Id,
                    ElapsedDataMemberType.RetrieveDataFromExternalService,
                    () => account.GetAccount()
                    );

                ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo,
                    databaseCustomerMarketPlace.Id,
                    ElapsedDataMemberType.StoreDataToDatabase,
                    () => Helper.StoreEbayUserAccountData(databaseCustomerMarketPlace, resultInfo, historyRecord)
                    );

                return(new UpdateActionResultInfo {
                    Name = UpdateActionResultType.CurrentBalance,
                    Value = resultInfo == null ? null : (object)resultInfo.CurrentBalance,
                    RequestsCounter = resultInfo == null ? null : resultInfo.RequestsCounter,
                    ElapsedTime = elapsedTimeInfo
                });
            }
                );
        }         // UpdateAccountInfo
Beispiel #17
0
            public override void Run(string[] args)
            {
                if (args.Length != 3)
                {
                    Console.WriteLine("Usage: StandaloneAmazonApp.exe <umi> <days> <isReporting>");
                    return;
                }

                Init();

                var connectionInfo = ObjectFactory.GetInstance <IAmazonMarketPlaceTypeConnection>();
                var connection     = AmazonServiceConnectionFactory.CreateConnection(connectionInfo);

                int  umi         = int.Parse(args[0]);
                int  days        = int.Parse(args[1]);
                bool isReporting = int.Parse(args[2]) == 1;

                var elapsedTimeInfo = new ElapsedTimeInfo();

                var orders = GetOrders(umi, elapsedTimeInfo, connection, days, isReporting);

                DisplayOrders(elapsedTimeInfo, orders);
            }
		} // RetrieveAndAggregate

		private void StoreCompanyData(
			MP_FreeAgentRequest mpRequest,
			FreeAgentCompany freeAgentCompany,
			ElapsedTimeInfo elapsedTimeInfo,
			int mpId
		) {
			if (mpRequest == null)
				return;

			log.Info("Saving company to DB...");

			var mpFreeAgentCompany = new MP_FreeAgentCompany {
				Request = mpRequest,
				url = freeAgentCompany.url,
				name = freeAgentCompany.name,
				subdomain = freeAgentCompany.subdomain,
				type = freeAgentCompany.type,
				currency = freeAgentCompany.currency,
				mileage_units = freeAgentCompany.mileage_units,
				company_start_date = freeAgentCompany.company_start_date,
				freeagent_start_date = freeAgentCompany.freeagent_start_date,
				first_accounting_year_end = freeAgentCompany.first_accounting_year_end,
				company_registration_number = freeAgentCompany.company_registration_number,
				sales_tax_registration_status = freeAgentCompany.sales_tax_registration_status,
				sales_tax_registration_number = freeAgentCompany.sales_tax_registration_number,
			};

			ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
				elapsedTimeInfo,
				mpId,
				ElapsedDataMemberType.StoreDataToDatabase,
				() => {
					Helper.StoreFreeAgentCompanyData(mpFreeAgentCompany);
					Helper.UpdateMarketplaceDisplayName(mpRequest.CustomerMarketPlace, freeAgentCompany.name);
				}
			);
		} // StoreCompanyData
		} // StoreCompanyData

		private void StoreUsersData(
			MP_FreeAgentRequest mpRequest,
			List<FreeAgentUsers> freeAgentUsers,
			ElapsedTimeInfo elapsedTimeInfo,
			int mpId
		) {
			if (mpRequest == null)
				return;

			log.Info("Saving {0} user(s) in DB...", freeAgentUsers.Count);

			var mpFreeAgentUsersList = new List<MP_FreeAgentUsers>();

			foreach (FreeAgentUsers user in freeAgentUsers) {
				var mpFreeAgentUsers = new MP_FreeAgentUsers {
					Request = mpRequest,
					url = user.url,
					first_name = user.first_name,
					last_name = user.last_name,
					email = user.email,
					role = user.role,
					permission_level = user.permission_level,
					opening_mileage = user.opening_mileage,
					updated_at = user.updated_at,
					created_at = user.created_at
				};

				mpFreeAgentUsersList.Add(mpFreeAgentUsers);
			} // for

			ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
				elapsedTimeInfo,
				mpId,
				ElapsedDataMemberType.StoreDataToDatabase,
				() => Helper.StoreFreeAgentUsersData(mpFreeAgentUsersList)
			);
		} // StoreUsersData
Beispiel #20
0
        }         // RetrieveCustomerSecurityInfo

        protected override ElapsedTimeInfo RetrieveAndAggregate(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            // Retrieve data from EKM API
            var ordersList = EkmConnector.GetOrders(
                databaseCustomerMarketPlace.DisplayName,
                Encrypted.Decrypt(databaseCustomerMarketPlace.SecurityData),
                Helper.GetEkmDeltaPeriod(databaseCustomerMarketPlace)
                );

            var ekmOrderList = new List <EkmOrderItem>();

            foreach (var order in ordersList)
            {
                try {
                    ekmOrderList.Add(order.ToEkmOrderItem());
                } catch (Exception e) {
                    log.Error(e, "Failed to create EKMOrderItem from the original order {0}", order);
                    throw;
                }
            }             // for

            var elapsedTimeInfo = new ElapsedTimeInfo();

            var newOrders = new EkmOrdersList(DateTime.UtcNow, ekmOrderList);

            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.StoreDataToDatabase,
                () => Helper.StoreEkmOrdersData(databaseCustomerMarketPlace, newOrders, historyRecord)
                );

            return(elapsedTimeInfo);
        }         // RetrieveAndAggregate
Beispiel #21
0
        }         // ConvertData

        private ElapsedTimeInfo UpdateClientOrdersInfo(IDatabaseCustomerMarketPlace databaseCustomerMarketPlace, YodleeSecurityInfo securityInfo, MP_CustomerMarketplaceUpdatingHistory historyRecord)
        {
            Dictionary <BankData, List <BankTransactionData> > ordersList;

            if (databaseCustomerMarketPlace.DisplayName == "ParsedBank")
            {
                //retrieve data from file
                var fileInfo          = Helper.GetFileInfo((int)securityInfo.ItemId);
                var lastTransactionId = Helper.GetLastTransactionId();
                if (fileInfo == null)
                {
                    throw new Exception("file not found");
                }

                var parser     = new TransactionsParser();
                var parsedData = parser.ParseFile(fileInfo.FilePath);

                if (parsedData == null)
                {
                    throw new Exception(string.Format("failed to parse the file {0}", fileInfo.FileName));
                }
                if (!string.IsNullOrEmpty(parsedData.Error))
                {
                    throw new Exception(string.Format("failed to parse the file {0} \n {1}", fileInfo.FileName, parsedData.Error));
                }

                ordersList = ConvertData(parsedData, fileInfo.FileName, securityInfo.ItemId, lastTransactionId);
            }
            else
            {
                //retrieve data from Yodlee API
                ordersList = YodleeConnector.GetOrders(securityInfo.Name, Encrypted.Decrypt(securityInfo.Password),
                                                       securityInfo.ItemId);
            }

            var elapsedTimeInfo = new ElapsedTimeInfo();

            if (ordersList != null)
            {
                var newOrders = new YodleeOrderDictionary {
                    Data = ordersList
                };

                //save orders data
                ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo,
                                                                               databaseCustomerMarketPlace.Id,
                                                                               ElapsedDataMemberType.StoreDataToDatabase,
                                                                               () => Helper.StoreYodleeOrdersData(
                                                                                   databaseCustomerMarketPlace,
                                                                                   newOrders,
                                                                                   historyRecord)
                                                                               );
            }

            List <string> directors;

            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo,
                                                                           databaseCustomerMarketPlace.Id,
                                                                           ElapsedDataMemberType.AggregateData,
                                                                           () => Helper.GetAllYodleeOrdersData(DateTime.Now, databaseCustomerMarketPlace, false, out directors));

            //Thread.Sleep(15000);
            return(elapsedTimeInfo);
        } // UpdateClientsOrderInfo
Beispiel #22
0
        protected override ElapsedTimeInfo RetrieveAndAggregate(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            log.Info("Starting to update Sage marketplace. Id:{0} Name:{1}", databaseCustomerMarketPlace.Id, databaseCustomerMarketPlace.DisplayName);

            SageSecurityInfo sageSecurityInfo = (Serialized.Deserialize <SageSecurityInfo>(databaseCustomerMarketPlace.SecurityData));

            string accessToken = sageSecurityInfo.AccessToken;

            log.Info("Getting sales invoices...");

            SageSalesInvoicesList salesInvoices = SageConnector.GetSalesInvoices(
                accessToken,
                Helper.GetSageDeltaPeriod(databaseCustomerMarketPlace)
                );

            log.Info("Getting incomes...");

            SageIncomesList incomes = SageConnector.GetIncomes(
                accessToken,
                Helper.GetSageDeltaPeriod(databaseCustomerMarketPlace)
                );

            log.Info("Getting purchase invoices...");

            SagePurchaseInvoicesList purchaseInvoices = SageConnector.GetPurchaseInvoices(
                accessToken,
                Helper.GetSageDeltaPeriod(databaseCustomerMarketPlace)
                );

            log.Info("Getting expenditures...");

            SageExpendituresList expenditures = SageConnector.GetExpenditures(
                accessToken,
                Helper.GetSageDeltaPeriod(databaseCustomerMarketPlace)
                );

            var elapsedTimeInfo = new ElapsedTimeInfo();

            log.Info("Saving request, {0} sales invoices, {1} purchase invoices, {2} incomes, {3} expenditures in DB...", salesInvoices.Count, purchaseInvoices.Count, incomes.Count, expenditures.Count);

            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.StoreDataToDatabase,
                () => Helper.StoreSageData(
                    databaseCustomerMarketPlace,
                    salesInvoices,
                    purchaseInvoices,
                    incomes,
                    expenditures,
                    historyRecord
                    )
                );

            log.Info("Getting payment statuses...");
            var paymentStatuses = SageConnector.GetPaymentStatuses(accessToken);

            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.StoreDataToDatabase,
                () => Helper.StoreSagePaymentStatuses(paymentStatuses)
                );

            return(elapsedTimeInfo);
        }
Beispiel #23
0
        }         // Name

        public override void Execute()
        {
            if (this.saveVatReturnData.IsEmptyInput())
            {
                return;
            }

            this.stopper.Execute(ElapsedDataMemberType.RetrieveDataFromDatabase, () => {
                this.loadVatReturnRawData.Execute();

                foreach (var oOld in this.loadVatReturnRawData.VatReturnRawData)
                {
                    foreach (var oNew in this.saveVatReturnData.VatReturnRecords)
                    {
                        if (oOld.Overlaps(oNew))
                        {
                            this.saveVatReturnData.AddHistoryItem(oOld, oNew);
                        }
                    }
                }
            });

            Log.Debug(this.saveVatReturnData);

            var os = new StringBuilder();

            os.AppendLine("SaveVatReturnData output - begin:");

            int nRowNum = 0;

            this.stopper.Execute(ElapsedDataMemberType.StoreDataToDatabase, () => {
                this.saveVatReturnData.ForEachRow((oReader, bRowsetStart) => {
                    var vals = new object[oReader.FieldCount];

                    int nRead = oReader.GetValues(vals);

                    os.AppendFormat(
                        "\nRow {0}{3}: {1} fields, {2} read.\n",
                        nRowNum,
                        oReader.FieldCount,
                        nRead,
                        bRowsetStart ? " NEW ROWSET" : string.Empty
                        );

                    for (int i = 0; i < nRead; i++)
                    {
                        os.AppendFormat("\t{2} - {0}: {1}\n", oReader.GetName(i), vals[i], i);
                    }

                    nRowNum++;
                    return(ActionResult.Continue);
                });
            });

            os.AppendLine("SaveVatReturnData output - end.");

            Log.Debug("\n{0}\n", os);

            var oSummary = new CalculateVatReturnSummary(this.saveVatReturnData.CustomerMarketplaceID)
                           .SetHistoryRecordID(this.saveVatReturnData.HistoryRecordID);

            oSummary.Execute();

            DB.ExecuteNonQuery(
                "UpdateMpTotalsHmrc",
                CommandSpecies.StoredProcedure,
                new QueryParameter("@HistoryID", this.saveVatReturnData.HistoryRecordID)
                );

            ElapsedTimeInfo.MergeData(oSummary.Stopper.ElapsedTimeInfo);
        }         // Execute
Beispiel #24
0
        public MP_EBayOrderItemDetail SaveEBayOrderItemInfo(EbayDatabaseOrderItemInfo data, ElapsedTimeInfo elapsedTimeInfo, int mpId)
        {
            MP_EbayAmazonCategory mpEbayAmazonCategory = null;

            if (data.PrimaryCategory != null)
            {
                mpEbayAmazonCategory = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo, mpId,
                                                                                                      ElapsedDataMemberType.RetrieveDataFromDatabase,
                                                                                                      () => _EbayAmazonCategoryRepository.Get(data.PrimaryCategory.Id));
            }

            var item = new MP_EBayOrderItemDetail
            {
                ItemID          = data.ItemID,
                PrimaryCategory = mpEbayAmazonCategory,
                //SecondaryCategory = data.SecondaryCategory == null ? null : _EbayAmazonCategoryRepository.Get( data.SecondaryCategory.Id ),
                //FreeAddedCategory = data.FreeAddedCategory == null ? null : _EbayAmazonCategoryRepository.Get( data.FreeAddedCategory.Id ),
                Title = data.Title,
            };

            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo, mpId,
                                                                           ElapsedDataMemberType.StoreDataToDatabase,
                                                                           () => _EBayOrderItemInfoRepository.Save(item));

            _CacheEBayOrderItemInfo.TryAdd(item.ItemID, item);

            return(item);
        }
        }         // class FetchResultCounters

        private FetchResultCounters FetchOnePeriodTransactions(
            int mpID,
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            ElapsedTimeInfo elapsedTimeInfo,
            DataProviderCreationInfo info,
            MP_CustomerMarketplaceUpdatingHistory historyRecord,
            FetchPeriod period
            )
        {
            this.log.Debug("Fetching eBay orders '{0}'@{1}...", mpID, period);

            ResultInfoOrders orders = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                mpID,
                ElapsedDataMemberType.RetrieveDataFromExternalService,
                () => DataProviderGetOrders.GetOrders(
                    info,
                    new ParamsDataInfoGetOrdersFromDateToDateCreated(period.From, period.To)
                    )
                );

            EbayDatabaseOrdersList databaseOrdersList = ParseOrdersInfo(orders);

            DateTime?max = null;
            DateTime?min = null;

            foreach (EbayDatabaseOrderItem o in databaseOrdersList.Where(x => x.CreatedTime != null))
            {
                DateTime c = o.CreatedTime.Value;

                if ((min == null) || (c < min.Value))
                {
                    min = c;
                }

                if ((max == null) || (c > max.Value))
                {
                    max = c;
                }
            }             // for each

            this.log.Debug(
                "Fetching eBay orders '{0}'@{1}: {2} are ready to be stored; " +
                "min order date is '{3}', max order date is '{4}'.",
                mpID,
                period,
                Grammar.Number(databaseOrdersList.Count, "order"),
                (min == null) ? "N/A" : min.Value.ToString("d/MMM/yyyy H:mm:ss", CultureInfo.InvariantCulture),
                (max == null) ? "N/A" : max.Value.ToString("d/MMM/yyyy H:mm:ss", CultureInfo.InvariantCulture)
                );

            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                mpID,
                ElapsedDataMemberType.StoreDataToDatabase,
                () => Helper.AddEbayOrdersData(databaseCustomerMarketPlace, databaseOrdersList, historyRecord)
                );

            this.log.Debug(
                "Fetching eBay orders '{0}'@{1}: {2} were stored.",
                mpID,
                period,
                Grammar.Number(databaseOrdersList.Count, "order")
                );

            EbayDatabaseOrdersList allEBayOrders = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                mpID,
                ElapsedDataMemberType.RetrieveDataFromDatabase,
                () => Helper.GetAllEBayOrders(orders.SubmittedDate, databaseCustomerMarketPlace)
                );

            this.log.Debug(
                "Fetching eBay orders '{0}'@{1}: {2} were loaded from DB.",
                mpID,
                period,
                Grammar.Number(allEBayOrders.Count, "order")
                );

            if (this.settings.DownloadCategories)
            {
                IEnumerable <string> topSealedProductItems = GetTopSealedProductItems(allEBayOrders);

                if (topSealedProductItems != null)
                {
                    List <MP_EBayOrderItemDetail> orderItemDetails = topSealedProductItems.Select(
                        item => FindEBayOrderItemInfo(
                            databaseCustomerMarketPlace,
                            info,
                            item,
                            databaseOrdersList.RequestsCounter,
                            elapsedTimeInfo
                            )
                        ).Where(d => d != null)
                                                                     .ToList();

                    Helper.UpdateOrderItemsInfo(orderItemDetails, elapsedTimeInfo, mpID);
                }         // if
            }             // if

            var frc = new FetchResultCounters(
                databaseOrdersList.RequestsCounter,
                (orders.Orders == null) ? 0 : orders.Orders.Count
                );

            this.log.Debug(
                "Done fetching eBay orders '{0}'@{1}: {2} fetched.",
                mpID,
                period,
                Grammar.Number(frc.OrderCount, "order")
                );

            return(frc);
        }         // FetchOnePeriodTransactions
        }         // UpdateUserInfo

        private IUpdateActionResultInfo FetchTransactions(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            DataProviderCreationInfo info,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            int mpID = databaseCustomerMarketPlace.Id;

            DateTime toDate = DateTime.UtcNow.Date;

            var elapsedTimeInfo = new ElapsedTimeInfo();

            DateTime fromDate = Helper.FindLastKnownEbayTransactionTime(mpID);

            var periods = new Stack <FetchPeriod>();

            DateTime t = toDate;

            while (t >= fromDate)
            {
                DateTime f = t.AddDays(-90).Date;

                periods.Push(new FetchPeriod {
                    To   = t.Date.AddDays(1).AddSeconds(-1),                   // convert to 23:59:59
                    From = (f < fromDate ? fromDate : f).Date,
                });

                t = f.AddDays(-1).Date;
            }             // while

            this.log.Debug(
                "Fetching eBay orders for marketplace '{0}' using these date range list: {1}.",
                mpID,
                string.Join("; ", periods)
                );

            var frc = new FetchResultCounters();

            foreach (var period in periods)
            {
                frc.Add(FetchOnePeriodTransactions(
                            mpID,
                            databaseCustomerMarketPlace,
                            elapsedTimeInfo,
                            info,
                            historyRecord,
                            period
                            ));
            }             // for each

            this.log.Debug(
                "Done fetching eBay orders for marketplace '{0}' using these date range list: {1}.",
                mpID,
                string.Join("; ", periods)
                );

            return(new UpdateActionResultInfo {
                Name = UpdateActionResultType.eBayOrdersCount,
                Value = frc.OrderCount,
                RequestsCounter = frc.RequestCount.IsEmpty ? null : frc.RequestCount,
                ElapsedTime = elapsedTimeInfo
            });
        }         // FetchTransactions
Beispiel #27
0
        public MP_EbayAmazonCategory FindEBayAmazonCategory(IMarketplaceType marketplace, string categoryId, ElapsedTimeInfo elapsedTimeInfo, int mpId)
        {
            MP_EbayAmazonCategory value;
            var cache = GetCache(marketplace);

            if (!cache.TryGetValue(categoryId, out value))
            {
                value = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo, mpId,
                                                                                       ElapsedDataMemberType.RetrieveDataFromDatabase,
                                                                                       () => _EbayAmazonCategoryRepository.FindItem(categoryId));

                if (value != null)
                {
                    AddCategoryToCache(marketplace, value);
                }
            }

            return(value);
        }
Beispiel #28
0
        public MP_EbayAmazonCategory AddEbayCategory(IMarketplaceType marketplace, eBayCategoryInfo data, ElapsedTimeInfo elapsedTimeInfo, int mpId)
        {
            var item = new MP_EbayAmazonCategory
            {
                CategoryId  = data.CategoryId,
                IsVirtual   = data.IsVirtual,
                Name        = data.Name,
                Marketplace = _MarketPlaceRepository.Get(marketplace.InternalId)
            };

            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo, mpId,
                                                                           ElapsedDataMemberType.StoreDataToDatabase,
                                                                           () => _EbayAmazonCategoryRepository.Save(item));

            AddCategoryToCache(marketplace, item);

            return(item);
        }
        private ElapsedTimeInfo UpdateClientOrdersInfo(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            PayPointSecurityInfo securityInfo,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            string condition = Helper.GetPayPointDeltaPeriod(databaseCustomerMarketPlace);

            var payPointTransactions = PayPointConnector.GetOrders(
                condition,
                securityInfo.Mid,
                securityInfo.VpnPassword,
                securityInfo.RemotePassword
                );

            var payPointOrders = new List <PayPointOrderItem>();

            foreach (PayPointDataSet.TransactionRow x in payPointTransactions)
            {
                var order = new PayPointOrderItem {
                    acquirer    = x.acquirer,
                    amount      = x.amount,
                    auth_code   = x.auth_code,
                    authorised  = x.authorised,
                    card_type   = x.card_type,
                    cid         = x.cid,
                    classType   = x._class,
                    company_no  = x.company_no,
                    country     = x.country,
                    currency    = x.currency,
                    cv2avs      = x.cv2avs,
                    deferred    = x.deferred,
                    emvValue    = x.emvValue,
                    fraud_code  = x.fraud_code,
                    FraudScore  = x.FraudScore,
                    ip          = x.ip,
                    lastfive    = x.lastfive,
                    merchant_no = x.merchant_no,
                    message     = x.message,
                    MessageType = x.MessageType,
                    mid         = x.mid,
                    name        = x.name,
                    options     = x.options,
                    status      = x.status,
                    tid         = x.tid,
                    trans_id    = x.trans_id
                };

                DateTime result;
                order.date       = !DateTime.TryParse(x.date, out result) ? (DateTime?)null : result;
                order.ExpiryDate = !DateTime.TryParse(x.ExpiryDate, out result) ? (DateTime?)null : result;
                order.start_date = !DateTime.TryParse(x.start_date, out result) ? (DateTime?)null : result;
                payPointOrders.Add(order);
            }

            var elapsedTimeInfo = new ElapsedTimeInfo();

            ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.StoreDataToDatabase,
                () => Helper.StorePayPointOrdersData(
                    databaseCustomerMarketPlace,
                    new PayPointOrdersList(DateTime.UtcNow, payPointOrders),
                    historyRecord
                    )
                );

            // Stored procedure UpdateMpTotalsPayPoint does not exist as of today (December 25 2014, Merry Xmas!).
            // It should be created similarly to other UpdateMpTotals*** procedures based on PayPointOrdersAggregator.cs.

            return(elapsedTimeInfo);
        }
Beispiel #30
0
        public MP_EBayOrderItemDetail FindEBayOrderItemInfo(eBayFindOrderItemInfoData eBayFindOrderItemInfoData, ElapsedTimeInfo elapsedTimeInfo, int mpId)
        {
            if (eBayFindOrderItemInfoData == null || eBayFindOrderItemInfoData.ItemId == null)
            {
                return(null);
            }

            MP_EBayOrderItemDetail value;

            if (!_CacheEBayOrderItemInfo.TryGetValue(eBayFindOrderItemInfoData.ItemId, out value))
            {
                value = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(elapsedTimeInfo, mpId,
                                                                                       ElapsedDataMemberType.RetrieveDataFromDatabase,
                                                                                       () => _EBayOrderItemInfoRepository.FindItem(eBayFindOrderItemInfoData));

                if (value != null)
                {
                    _CacheEBayOrderItemInfo.TryAdd(value.ItemID, value);
                }
            }

            return(value);
        }