Esempio n. 1
0
        public void Build_Test01()
        {
            const string       creditNumber  = "creditNumber";
            const string       customerCode  = "code";
            const string       invoiceNumber = "c";
            var                creditDate    = DateTime.UtcNow;
            const string       customerName  = "d";
            const CreditStatus status        = CreditStatus.Parked;
            Monetary           total         = 12.23432m;

            var mockedCreditView = new Mock <ICreditView>();

            mockedCreditView.Setup(x => x.CreditNumber).Returns(creditNumber);
            mockedCreditView.Setup(x => x.CustomerCode).Returns(customerCode);
            mockedCreditView.Setup(x => x.InvoiceNumber).Returns(invoiceNumber);
            mockedCreditView.Setup(x => x.CreditDate).Returns(creditDate);
            mockedCreditView.Setup(x => x.CustomerName).Returns(customerName);
            mockedCreditView.Setup(x => x.CreditStatus).Returns(status);
            mockedCreditView.Setup(x => x.Total).Returns(total);

            var builder = new CreditViewQueryModelBuilder();

            var response = builder.Build(mockedCreditView.Object);

            Assert.That(response.CreditNumber == creditNumber);
            Assert.That(response.CustomerCode == customerCode);
            Assert.That(response.InvoiceNumber == invoiceNumber);
            Assert.That(response.CreditDate == creditDate);
            Assert.That(response.CustomerName == customerName);
            Assert.That(response.Status == status);
            Assert.That(response.Total == total);
        }
        public CreditStatus Apply(Customer customer)
        {
            var company      = _companyRepository.GetById(customer.Company.Id);
            var creditStatus = new CreditStatus();

            if (company.Name == "VeryImportantClient")
            {
                // Skip credit check
                creditStatus.HasCreditLimit = false;
            }
            else if (company.Name == "ImportantClient")
            {
                // Do credit check and double credit limit
                creditStatus.HasCreditLimit = true;
                var creditLimit = _customerCreditService.GetCreditLimit(customer.Firstname, customer.Surname, customer.DateOfBirth);
                creditLimit = creditLimit * 2;
                creditStatus.CreditLimit = creditLimit;
            }
            else
            {
                // Do credit check
                creditStatus.HasCreditLimit = true;
                var creditLimit = _customerCreditService.GetCreditLimit(customer.Firstname, customer.Surname, customer.DateOfBirth);
                creditStatus.CreditLimit = creditLimit;
            }

            if (creditStatus.HasCreditLimit && creditStatus.CreditLimit < _creditLimit)
            {
                creditStatus.Failed = true;
            }

            return(creditStatus);
        }
Esempio n. 3
0
        /// <summary>
        /// Updates the deals in the reference numbers to the credit status specified.
        /// </summary>
        /// <param name="referenceNumbers">
        /// The list of reference numbers of the deals to update.
        /// </param>
        /// <param name="creditStatus">
        /// The credit status to which to set the redeemed deals.
        /// </param>
        /// <param name="redeemedDealOperations">
        /// The object to use to perform redeemed deal operations.
        /// </param>
        /// <param name="context">
        /// The context of the worker action being executed.
        /// </param>
        /// <param name="threadId">
        /// The ID of the thread attempting to perform this action.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// * Parameter redeemedDealOperations cannot be null.
        /// -OR-
        /// * Parameter context cannot be null.
        /// </exception>
        public void UpdateDealStatus(Collection <int> referenceNumbers,
                                     CreditStatus creditStatus,
                                     IRedeemedDealOperations redeemedDealOperations,
                                     CommerceContext context,
                                     int threadId)
        {
            if (redeemedDealOperations == null)
            {
                throw new ArgumentNullException("redeemedDealOperations",
                                                "Parameter redeemedDealOperations cannot be null.");
            }

            if (context == null)
            {
                throw new ArgumentNullException("context", "Parameter context cannot be null.");
            }

            if (threadId == AuthorizedThreadId)
            {
                context.Log.Verbose("Updating specified redeemed deals to credit status {0}.", creditStatus);
                context[Key.ReferenceNumbers] = referenceNumbers;
                context[Key.CreditStatus]     = creditStatus;
                redeemedDealOperations.UpdateRedeemedDeals();

                //// Add analytics info.
                //Collection<SettledDealInfo> settledDealInfoList = redeemedDealOperations.RetrieveSettlementAnalyticsInfo();
                //foreach (SettledDealInfo settledDealInfo in settledDealInfoList)
                //{
                //    Analytics.AddSettlementEvent(settledDealInfo.UserId, settledDealInfo.EventId, settledDealInfo.CorrelationId,
                //                                 settledDealInfo.ParentDealId, settledDealInfo.Currency,
                //                                 settledDealInfo.SettlementAmount, settledDealInfo.DiscountAmount,
                //                                 settledDealInfo.DealId, settledDealInfo.PartnerMerchantId);
                //}
            }
        }
Esempio n. 4
0
 /// <summary>
 /// Updates the pending redeemed deals in the merchant record list to the credit status specified, if the credit status
 /// is valid.
 /// </summary>
 /// <param name="record">
 /// Merchant record whose redeemed deal to update.
 /// </param>
 /// <param name="creditStatus">
 /// The credit status to which to set the redeemed deals.
 /// </param>
 /// <exception cref="InvalidOperationException">
 /// Parameter creditStatus contains an invalid CreditStatus for this operation.
 /// </exception>
 internal void UpdatePendingRedeemedDeals(OutstandingRedeemedDealInfo record, CreditStatus creditStatus)
 {
     // Update the credit status for the specified list of merchant records.
     WorkerActions.UpdatePendingRedeemedDeals(new Collection <OutstandingRedeemedDealInfo> {
         record
     }, creditStatus, RedeemedDealOperations, Context);
 }
Esempio n. 5
0
        public async Task DeleteCreditAsyncShouldDeletePendingCredit(CreditStatus creditStatus, CreditStatus expected)
        {
            var options = new DbContextOptionsBuilder <PhotoparallelDbContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                          .Options;
            var dbContext = new PhotoparallelDbContext(options);

            var credit = new CreditContract {
                CreditStatus = creditStatus
            };

            dbContext.CreditContracts.Add(credit);

            var order = new Order {
                OrderStatus = OrderStatus.Pending
            };

            dbContext.Orders.Add(order);

            credit.Order = order;

            await dbContext.SaveChangesAsync();

            var ordersService = new Mock <IOrdersService>();

            var creditsService = new CreditsService(dbContext, ordersService.Object);

            await creditsService.DeleteCreditAsync(credit.Id);

            Assert.Equal(expected, credit.CreditStatus);
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        private ResultCode GetEarnBurnHistory()
        {
            List <EarnBurnTransactionItemDataContract> historyItems = new List <EarnBurnTransactionItemDataContract>();

            // Retrieve list of redemption history items.
            Context.Log.Verbose("Retrieving earn/burn redemption history belonging to user {0}", ((User)Context[Key.User]).GlobalId);
            IEnumerable <RedemptionHistoryItem> items = RedemptionHistoryOperations.RetrieveMicrosoftEarnRedemptionHistory();

            Context.Log.Verbose("{0} earn/burn redemption history entries were retrieved from the data store.", items.Count());

            double totalEarnedCredits = 0;
            double totalBurnedCredits = 0;

            // If any redemption history items were returned, add them to the context.
            if (items.Any())
            {
                // Build the list of HistoryItemDataContracts from the list of redemption history items.
                foreach (RedemptionHistoryItem redemptionHistoryItem in items)
                {
                    double discountAmount = ((double)redemptionHistoryItem.DiscountAmount / 100);

                    CreditStatus creditStatus = redemptionHistoryItem.CreditStatus;
                    historyItems.Add(new EarnBurnTransactionItemDataContract()
                    {
                        RedemptionType  = this.GetRedemptionTypeForEarnBurn(redemptionHistoryItem.ReimbursementTender),
                        MerchantName    = redemptionHistoryItem.MerchantName,
                        DiscountSummary = redemptionHistoryItem.DiscountSummary,
                        DealPercent     = redemptionHistoryItem.DealPercent,
                        EventDateTime   = redemptionHistoryItem.EventDateTime,
                        EventAmount     = string.Format("{0:C}", ((double)redemptionHistoryItem.EventAmount / 100)),
                        Reversed        = redemptionHistoryItem.Reversed,
                        CreditStatus    = creditStatus.ToString(),
                        DiscountAmount  = string.Format("{0:C}", discountAmount),
                        LastFourDigits  = redemptionHistoryItem.LastFourDigits,
                        CardBrand       = redemptionHistoryItem.CardBrand.ToString()
                    });

                    //Consider only the settled earn transactions to calculate total earned credits
                    //For calculating burned credits, include both cleared and pending transaction
                    if (redemptionHistoryItem.ReimbursementTender == ReimbursementTender.MicrosoftEarn && creditStatus == CreditStatus.CreditGranted)
                    {
                        totalEarnedCredits += discountAmount;
                    }
                    else if (redemptionHistoryItem.ReimbursementTender == ReimbursementTender.MicrosoftBurn)
                    {
                        totalBurnedCredits += discountAmount;
                    }
                }
            }

            double availableCredits = (totalEarnedCredits > totalBurnedCredits) ? (totalEarnedCredits - totalBurnedCredits) : 0;

            GetEarnBurnTransactionHistoryResponse response = (GetEarnBurnTransactionHistoryResponse)Context[Key.Response];

            response.RedemptionHistory = historyItems;
            response.CreditBalance     = string.Format("{0:C}", availableCredits);

            return(ResultCode.Success);
        }
Esempio n. 7
0
 public static CreditStatusModel ToModel(this CreditStatus aCreditStatusEntity)
 {
     return(new CreditStatusModel()
     {
         CredStatusId = aCreditStatusEntity.CredStatusId,
         Code = aCreditStatusEntity.Code,
         Description = aCreditStatusEntity.Description
     });
 }
        private static CreditStatus Map(EditViewModel editViewModel)
        {
            var creditStatus = new CreditStatus
            {
                CreditStatusId          = editViewModel.CreditStatusId,
                CreditStatusDescription = editViewModel.CreditStatusDescription
            };

            return(creditStatus);
        }
        /// <summary>
        /// Updates the pending redeemed deals in the merchant record list to the credit status specified, if the credit status
        /// is valid.
        /// </summary>
        /// <param name="records">
        /// The list of merchant records whose redeemed deals to update.
        /// </param>
        /// <param name="creditStatus">
        /// The credit status to which to set the redeemed deals.
        /// </param>
        /// <exception cref="InvalidOperationException">
        /// Parameter creditStatus contains an invalid CreditStatus for this operation.
        /// </exception>
//TODO: Make internal once Worker role is up and running.
        public void UpdatePendingRedeemedDeals(Collection <OutstandingRedeemedDealInfo> records,
                                               CreditStatus creditStatus)
        {
            // Ensure specified credit status is valid for this operation.
            if (creditStatus != CreditStatus.StatementCreditRequested && creditStatus != CreditStatus.CreditGranted)
            {
                throw new InvalidOperationException("Parameter creditStatus contains an invalid CreditStatus for this operation.");
            }

            // Update the credit status for the specified list of merchant records.
            WorkerActions.UpdatePendingRedeemedDeals(records, creditStatus, RedeemedDealOperations, Context);
        }
        /// <summary>
        /// Updates the redeemed deals to the credit status specified, if the credit status
        /// is valid.
        /// </summary>
        /// <param name="referenceNumbers">
        /// The list of reference numbers whose redeemed deals to update.
        /// </param>
        /// <param name="creditStatus">
        /// The credit status to which to set the redeemed deals.
        /// </param>
        /// <exception cref="InvalidOperationException">
        /// Parameter creditStatus contains an invalid CreditStatus for this operation.
        /// </exception>
//TODO: We need to move this to someplace else so that PtsBuilder can also use it.
        internal void UpdateRedeemedDeals(Collection <int> referenceNumbers,
                                          CreditStatus creditStatus)
        {
            // Ensure specified credit status is valid for this operation.
            if (creditStatus != CreditStatus.CreditGranted && creditStatus != CreditStatus.RejectedByPartner)
            {
                throw new InvalidOperationException("Parameter creditStatus contains an invalid CreditStatus for this operation.");
            }

            // Update the credit status for the specified list of merchant records.
            WorkerActions.Instance.UpdateDealStatus(referenceNumbers, creditStatus, RedeemedDealOperations, Context, ThreadId);
        }
Esempio n. 11
0
        /// <summary>
        /// Updates the pending redeemed deals in the merchant record list to the credit status specified.
        /// </summary>
        /// <param name="records">
        /// The list of merchant records whose redeemed deals to update.
        /// </param>
        /// <param name="creditStatus">
        /// The credit status to which to set the redeemed deals.
        /// </param>
        /// <param name="redeemedDealOperations">
        /// The object to use to perform redeemed deal operations.
        /// </param>
        /// <param name="context">
        /// The context of the worker action being executed.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// * Parameter redeemedDealOperations cannot be null.
        /// -OR-
        /// * Parameter context cannot be null.
        /// </exception>
        public static void UpdatePendingRedeemedDeals(Collection <OutstandingRedeemedDealInfo> records,
                                                      CreditStatus creditStatus,
                                                      IRedeemedDealOperations redeemedDealOperations,
                                                      CommerceContext context)
        {
            if (redeemedDealOperations == null)
            {
                throw new ArgumentNullException("redeemedDealOperations", "Parameter redeemedDealOperations cannot be null.");
            }

            if (context == null)
            {
                throw new ArgumentNullException("context", "Parameter context cannot be null.");
            }

            context.Log.Verbose("Updating specified redeemed deals to credit status {0}.", creditStatus);
            context[Key.MerchantRecords] = records;
            context[Key.CreditStatus]    = creditStatus;
            redeemedDealOperations.UpdatePendingPartnerRedeemedDeals();
        }
 private void EditCreditStatus(CreditStatus creditStatus)
 {
     _creditStatusesRepository.EditCreditStatus(creditStatus);
 }
 private void AddCreditStatus(CreditStatus creditStatus)
 {
     _creditStatusesRepository.AddCreditStatus(creditStatus);
 }
 public void EditCreditStatus(CreditStatus creditStatus)
 {
     _databaseModel.Entry(creditStatus).State = EntityState.Modified;
     _databaseModel.SaveChanges();
 }
 public void AddCreditStatus(CreditStatus creditStatus)
 {
     _databaseModel.CreditStatus.Add(creditStatus);
     _databaseModel.SaveChanges();
 }
Esempio n. 16
0
 /// <summary>
 /// Sets the value of the current credit amount attribute.
 /// </summary>
 /// <param name="client">DLMS client.</param>
 /// <param name="value">Current credit amount</param>
 /// <returns>Action bytes.</returns>
 /// <summary>
 public byte[][] InvokeCredit(GXDLMSClient client, CreditStatus value)
 {
     return(client.Method(this, 3, (byte)value, DataType.UInt8));
 }