/// <summary>
        /// Initializes the specified loyalty card.
        /// </summary>
        /// <param name="loyaltyCard">The loyalty card.</param>
        public override void Initialize(LoyaltyCard loyaltyCard)
        {
            Assert.ArgumentNotNull(loyaltyCard, "loyaltyCard");

            this.CardNumber = loyaltyCard.CardNumber;

            foreach (var point in loyaltyCard.RewardPoints)
            {
                var result = new LoyaltyRewardPointItemJsonResult();
                result.Initialize(point);
                this.RewardPoints.Add(result);
            }

            foreach (var program in ((Sitecore.Commerce.Connect.DynamicsRetail.Entities.LoyaltyPrograms.LoyaltyCard)loyaltyCard).LoyaltyPrograms)
            {
                var result = new LoyaltyProgramItemBaseJsonResult();
                result.Initialize(program);
                this.Programs.Add(result);
            }
        }
Exemplo n.º 2
0
            /// <summary>
            /// Gets the transactions for a loyalty card.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response containing the loyalty card transactions.</returns>
            private static IssueLoyaltyCardServiceResponse IssueLoyaltyCard(IssueLoyaltyCardServiceRequest request)
            {
                var serviceRequest = new IssueLoyaltyCardRealtimeRequest(
                    request.LoyaltyCardNumber,
                    request.LoyaltyCardTenderType,
                    request.PartyRecordId,
                    request.ChannelId);

                IssueLoyaltyCardRealtimeResponse serviceResponse = request.RequestContext.Execute <IssueLoyaltyCardRealtimeResponse>(serviceRequest);
                LoyaltyCard loyaltyCard = serviceResponse.LoyaltyCard;

                if (loyaltyCard != null && loyaltyCard.PartyRecordId != 0)
                {
                    loyaltyCard.CustomerAccount = request.CustomerAccountNumber;
                }

                // Insert the issue loyalty card into the channel database
                var insertLoyaltyCardDataRequest = new InsertLoyaltyCardDataRequest(loyaltyCard);

                request.RequestContext.Execute <NullResponse>(insertLoyaltyCardDataRequest);

                return(new IssueLoyaltyCardServiceResponse(loyaltyCard));
            }
        /// <summary>
        /// Initializes the specified loyalty card.
        /// </summary>
        /// <param name="loyaltyCard">The loyalty card.</param>
        public virtual void Initialize(LoyaltyCard loyaltyCard)
        {
            Assert.ArgumentNotNull(loyaltyCard, "loyaltyCard");

            this.CardNumber = loyaltyCard.CardNumber;

            foreach (var point in loyaltyCard.RewardPoints)
            {
                var result = new LoyaltyRewardPointItemBaseApiModel();
                result.Initialize(point);
                this.RewardPoints.Add(result);
            }

            foreach (var program in ((Sitecore.Commerce.Connect.DynamicsRetail.Entities.LoyaltyPrograms.LoyaltyCard)loyaltyCard).LoyaltyPrograms)
            {
                var result = new LoyaltyProgramItemBaseApiModel();
                result.Initialize(program);
                if (this.Programs == null)
                {
                    this.Programs = new List <LoyaltyProgramItemBaseApiModel>();
                }
                this.Programs.Add(result);
            }
        }
Exemplo n.º 4
0
 public IActionResult Post([FromBody] LoyaltyCard card)
 {
     _loyaltyCardDatabase.Add(card);
     return(Ok(card));
 }
Exemplo n.º 5
0
 void IHandleClientStateTransitions.When(IssuedLoyaltyCard @event)
 {
     var card = new LoyaltyCard(Identity, @event.CardNumber);
     ((IEntity)card).RegisterChangesHandler(SaveChange);
     loyaltyCards.Add(card);
 }
 public void Delete(LoyaltyCard entity)
 {
     _repository.Delete(entity);
 }
Exemplo n.º 7
0
 public void Update(LoyaltyCard loyaltyCard)
 {
     _cards.ReplaceOne(tempCard => loyaltyCard.Id == tempCard.Id, loyaltyCard);
 }
Exemplo n.º 8
0
 public void Add(LoyaltyCard loyaltyCard)
 {
     loyaltyCard.Id = Convert.ToInt32(_cards.Count(new BsonDocument()) + 1);
     _cards.InsertOne(loyaltyCard);
 }
Exemplo n.º 9
0
        protected void CopyTo <T>(T dataItem) where T : BasePNRDataItem
        {
            dataItem.ID      = ID;
            dataItem.IDInPNR = IDInPNR;
            dataItem.Type    = Type;

            if (TravellerRef != null)
            {
                dataItem.TravellerRef = new RefList <int>(TravellerRef);
            }
            if (ServiceRef != null)
            {
                dataItem.ServiceRef = new RefList <int>(ServiceRef);
            }
            if (SegmentRef != null)
            {
                dataItem.SegmentRef = new RefList <int>(SegmentRef);
            }

            #region Клонирование внутренних элементов
            switch (Type)
            {
            case PNRDataItemType.Remark:
                dataItem.Remark = Remark?.Copy();
                break;

            case PNRDataItemType.TL:
                dataItem.TimeLimits = TimeLimits?.Copy();
                break;

            case PNRDataItemType.SSR:
                dataItem.SSR = SSR?.DeepCopy();
                break;

            case PNRDataItemType.Commission:
                dataItem.Commission = Commission?.Copy();
                break;

            case PNRDataItemType.FOP:
                dataItem.FOPInfo = FOPInfo?.Copy();
                break;

            case PNRDataItemType.SourceInfo:
                dataItem.SourceInfo = SourceInfo?.Copy();
                break;

            case PNRDataItemType.IDDocument:
                dataItem.Document = Document?.Copy();
                break;

            case PNRDataItemType.ContactInfo:
                dataItem.ContactInfo = ContactInfo?.Copy();
                break;

            case PNRDataItemType.LoyaltyCard:
                dataItem.LoyaltyCard = LoyaltyCard?.Copy();
                break;

            case PNRDataItemType.Meal:
                dataItem.Meal = Meal?.DeepCopy();
                break;

            case PNRDataItemType.ED:
                dataItem.ElectronicDocument = ElectronicDocument?.DeepCopy();
                break;

            case PNRDataItemType.PD:
                dataItem.PaperDocument = PaperDocument?.Copy();
                break;

            case PNRDataItemType.FE:
                dataItem.Endorsements = Endorsements?.Copy();
                break;

            case PNRDataItemType.Visa:
                dataItem.Visa = Visa?.Copy();
                break;

            case PNRDataItemType.ArrivalAddress:
                dataItem.ArrivalAddress = ArrivalAddress?.Copy();
                break;

            case PNRDataItemType.BookedSeat:
                dataItem.BookedSeat = BookedSeat?.Copy();
                break;

            case PNRDataItemType.ValidatingCompany:
                dataItem.ValidatingCompany = ValidatingCompany?.Copy();
                break;

            case PNRDataItemType.TourCode:
                dataItem.TourCode = TourCode?.Copy();
                break;

            case PNRDataItemType.Discount:
                dataItem.Discount = Discount?.Copy();
                break;

            case PNRDataItemType.FareSourceCode:
                dataItem.FareSourceCode = FareSourceCode?.Copy();
                break;

            case PNRDataItemType.AdditionalLocators:
                dataItem.AdditionalLocators = AdditionalLocators?.Copy();
                break;

            case PNRDataItemType.OSI:
                dataItem.OSI = OSI?.Copy();
                break;

            case PNRDataItemType.ReferencedBooks:
                dataItem.ReferencedBooks = ReferencedBooks?.Copy();
                break;

            case PNRDataItemType.FareInfo:
                dataItem.FareInfo = FareInfo?.Copy();
                break;

            case PNRDataItemType.DiscountDocument:
                dataItem.DiscountDocument = DiscountDocument?.Copy();
                break;

            case PNRDataItemType.VoucherFile:
                dataItem.Voucher = Voucher?.Copy();
                break;

            case PNRDataItemType.LinkedBooks:
                dataItem.LinkedBooks = LinkedBooks?.Copy();
                break;
            }
            #endregion
        }
Exemplo n.º 10
0
        public void Create(TransactionCreate transactionCreate)
        {
            try
            {
                if (transactionCreate.SumOfLoyaltyCardPoints > 0 && transactionCreate.Transaction.LoyaltyCardId != null &&
                    transactionCreate.Transaction.LoyaltyCardId != 0)
                {
                    LoyaltyCard loyaltyCard = _loyaltyCardService.GetById((int)transactionCreate.Transaction.LoyaltyCardId);

                    loyaltyCard.Points -= transactionCreate.SumOfLoyaltyCardPoints;
                    _loyaltyCardService.Edit(loyaltyCard);
                }

                Invoice invoice = transactionCreate.Transaction.Invoice;
                if (invoice.NIP == 0 || invoice.InvoiceNumber == 0 || String.IsNullOrEmpty(invoice.RegistrationNumber) == true)
                {
                    transactionCreate.Transaction.Invoice = null;
                }

                Transaction transaction = transactionCreate.Transaction;
                transaction.ApplicationUserId = _accountService.GetCurrentUserId();
                transaction.ProductsLists     = new List <ProductsList>();
                transaction.Date = DateTime.Now;

                _context.Add(transaction);
                _context.SaveChanges();


                foreach (var transactionProduct in transactionCreate.TransactionProduct)
                {
                    if (transactionProduct.InTransaction)
                    {
                        var productList = _productsListService.CreateProductsLists(transaction.TransactionId, transactionProduct.ProductId, transactionProduct.Amount, transactionProduct.Price);
                        transaction.ProductsLists.Add(productList);


                        _productService.Edit(transactionProduct.ProductId, transactionProduct.Amount);

                        if (transaction.LoyaltyCardId != null && transaction.LoyaltyCardId != 0)
                        {
                            Product     product     = _productService.GetById(transactionProduct.ProductId);
                            LoyaltyCard loyaltyCard = _loyaltyCardService.GetById((int)transaction.LoyaltyCardId);
                            var         sumpoints   = transactionProduct.Amount * product.LoyaltyPointsPrice;
                            loyaltyCard.Points = (int)Math.Round((decimal)sumpoints);
                            _loyaltyCardService.Edit(loyaltyCard);
                        }
                    }
                }
                foreach (var distributor in transactionCreate.DistributorInTransaction)
                {
                    if (distributor.InTransaction)
                    {
                        Fueling fueling = new Fueling
                        {
                            TankId        = distributor.TankId,
                            DistributorId = distributor.DistributorId,
                            Date          = DateTime.Now,
                            Amount        = distributor.Counter,
                            Price         = distributor.Sum
                        };
                        _fuelingService.Create(fueling);

                        Tank tank = _tankService.GetById(distributor.TankId);
                        tank.Stock = tank.Stock - distributor.Counter;
                        _tankService.Edit(tank);
                        Product product = _productService.GetById(tank.ProductId);

                        var productList = _productsListService.CreateProductsLists(transaction.TransactionId, product.ProductId, distributor.Counter, distributor.PriceForLiter);
                        transaction.ProductsLists.Add(productList);
                        _productService.Edit(product.ProductId, distributor.Counter);

                        if (transaction.LoyaltyCardId != null && transaction.LoyaltyCardId != 0)
                        {
                            LoyaltyCard loyaltyCard = _loyaltyCardService.GetById((int)transaction.LoyaltyCardId);
                            var         sumpoints   = distributor.Counter * product.LoyaltyPointsPrice;
                            loyaltyCard.Points = (int)Math.Round((decimal)sumpoints);
                            _loyaltyCardService.Edit(loyaltyCard);
                        }
                    }
                }


                _context.SaveChanges();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Exemplo n.º 11
0
            /// <summary>
            /// Authorizes the payment.
            /// This step checks whether the loyalty card has enough reward points to redeem. If yes, it decides the points
            /// to redeem based on redeem ranking.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the authorized tender line.</returns>
            private static AuthorizePaymentServiceResponse AuthorizePayment(AuthorizePaymentServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.TenderLine == null)
                {
                    throw new ArgumentException("request.TenderLine cannot be null.");
                }

                if (request.RequestContext == null)
                {
                    throw new ArgumentException("request.RequestContext cannot be null.");
                }

                if (request.Transaction == null)
                {
                    throw new ArgumentException("request.Transaction cannot be null.");
                }

                // Check tender amount.
                if (request.TenderLine.Amount == 0m)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "The tender amount must be greater than zero.");
                }

                // Check tender currency.
                if (string.IsNullOrWhiteSpace(request.TenderLine.Currency))
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "The tender currency is missing.");
                }

                // Check if the transaction already has loyalty payments
                var activeTenderLines = request.Transaction.ActiveTenderLines;

                if (activeTenderLines != null && activeTenderLines.Any(line => !string.IsNullOrWhiteSpace(line.LoyaltyCardId)))
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender, "The transaction cannot contain more than one loyalty payment line.");
                }

                SalesOrder salesOrder = request.Transaction as SalesOrder;

                if (salesOrder != null && salesOrder.HasLoyaltyPayment &&
                    (salesOrder.CustomerOrderMode != CustomerOrderMode.Cancellation || salesOrder.AmountDue > decimal.Zero))
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender, "The transaction cannot contain more than one loyalty payment line.");
                }

                // Check whether the loyalty card is valid.
                var         getLoyaltyCardDataRequest = new GetLoyaltyCardDataRequest(request.TenderLine.LoyaltyCardId);
                LoyaltyCard loyaltyCard = request.RequestContext.Execute <SingleEntityDataServiceResponse <LoyaltyCard> >(getLoyaltyCardDataRequest).Entity;

                if (loyaltyCard == null || string.IsNullOrWhiteSpace(loyaltyCard.CardNumber))
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber, "The loyalty card number does not exists.");
                }

                // Check whether the loyalty card is blocked.
                if (loyaltyCard.CardTenderType == LoyaltyCardTenderType.Blocked)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard, "The loyalty card is blocked.");
                }

                if (loyaltyCard.CardTenderType == LoyaltyCardTenderType.NoTender)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard, "The loyalty card is not allowed for payment.");
                }

                // Calculate redeem trans and fill in the sales transaction.
                if (request.TenderLine.Amount >= 0)
                {
                    LoyaltyServiceHelper.FillInLoyaltyRewardPointLinesForPayment(
                        request.RequestContext,
                        request.Transaction,
                        loyaltyCard,
                        request.TenderLine.Amount,
                        request.TenderLine.Currency);
                }
                else
                {
                    LoyaltyServiceHelper.FillInLoyaltyRewardPointLinesForRefund(
                        request.RequestContext,
                        request.Transaction,
                        loyaltyCard,
                        request.TenderLine.Amount,
                        request.TenderLine.Currency);
                }

                // Set Card Type Id for Loyalty Card if not set by the client.
                if (request.TenderLine.CardTypeId == null)
                {
                    string tenderTypeId                  = request.TenderLine.TenderTypeId;
                    var    cardTypeDataRequest           = new GetCardTypeDataRequest(QueryResultSettings.AllRecords);
                    var    cardTypeInfoResponse          = request.RequestContext.Execute <EntityDataServiceResponse <CardTypeInfo> >(cardTypeDataRequest);
                    IEnumerable <CardTypeInfo> cardTypes = cardTypeInfoResponse.PagedEntityCollection.Results;
                    CardTypeInfo loyaltyCardTypeInfo     = cardTypes.FirstOrDefault(cardType => cardType.PaymentMethodId == tenderTypeId);
                    if (loyaltyCardTypeInfo == null)
                    {
                        throw new ConfigurationException(ConfigurationErrors.Microsoft_Dynamics_Commerce_Runtime_ConfigurationSettingNotFound, "The loyalty card payment as a tender type card is not configured for the channel.");
                    }

                    request.TenderLine.CardTypeId = loyaltyCardTypeInfo.TypeId;
                }

                // Authorize.
                request.TenderLine.Status     = TenderLineStatus.PendingCommit;
                request.TenderLine.IsVoidable = true;

                return(new AuthorizePaymentServiceResponse(request.TenderLine));
            }
            /// <summary>
            /// Gets the status of the loyalty reward points by card number or directory party record identifier.
            /// </summary>
            /// <param name="channelLocalDate">The local date of the channel.</param>
            /// <param name="loyaltyCardNumber">The loyalty card number.</param>
            /// <param name="excludeBlocked">
            /// The flag indicating whether to exclude the card status if the card is blocked.
            /// </param>
            /// <param name="excludeNoTender">
            /// The flag indicating whether to exclude the card status if the card is no tender or blocked.
            /// </param>
            /// <param name="includeRelatedCardsForContactTender">
            /// The flag indicating whether to include the status of the related cards if the given card is contact tender.
            /// </param>
            /// <param name="includeNonRedeemablePoints">
            /// The flag indicating whether to include non-redeemable points status in the result.
            /// </param>
            /// <param name="includeActivePointsOnly">
            /// The flag indicating whether to return only the active points; otherwise, returns the status of issued, used and expired points as well.
            /// </param>
            /// <param name="locale">The locale of the translations.</param>
            /// <returns>The loyalty point status per loyalty card.</returns>
            public Collection <LoyaltyCard> GetLoyaltyCardRewardPointsStatus(
                DateTimeOffset channelLocalDate,
                string loyaltyCardNumber,
                bool excludeBlocked,
                bool excludeNoTender,
                bool includeRelatedCardsForContactTender,
                bool includeNonRedeemablePoints,
                bool includeActivePointsOnly,
                string locale)
            {
                string channelLocalDateStr = SerializationHelper.ConvertDateTimeToAXDateString(channelLocalDate.LocalDateTime, 213);
                var    parameters          = new object[]
                {
                    channelLocalDateStr,
                    loyaltyCardNumber,
                    excludeBlocked,
                    excludeNoTender,
                    includeRelatedCardsForContactTender,
                    includeNonRedeemablePoints,
                    includeActivePointsOnly,
                    locale
                };

                var data = this.InvokeMethod(GetLoyaltyCardRewardPointsStatusMethodName, parameters);

                // Translate the result data into a list of loyalty card with reward points status
                string statusXML = (string)data[0];

                XDocument doc  = XDocument.Parse(statusXML);
                XElement  root = doc.Elements("LoyaltyCardRewardPointsStatusList").SingleOrDefault();
                Collection <LoyaltyCard> cards = null;

                if (root != null)
                {
                    var cardStatusList = root.Elements("LoyaltyCardRewardPointsStatus");
                    cards = new Collection <LoyaltyCard>();
                    foreach (var cardStatus in cardStatusList)
                    {
                        var card = new LoyaltyCard();
                        card.CardNumber = TransactionServiceClient.GetAttributeValue(cardStatus, "LoyaltyCardNumber");
                        cards.Add(card);

                        var rewardPointStatusList = cardStatus.Elements("RewardPointStatus");
                        foreach (var rewardPointStatus in rewardPointStatusList)
                        {
                            var rewardPoint = new LoyaltyRewardPoint();
                            rewardPoint.RewardPointId       = TransactionServiceClient.GetAttributeValue(rewardPointStatus, "RewardPointId");
                            rewardPoint.Description         = TransactionServiceClient.GetAttributeValue(rewardPointStatus, "RewardPointDescription");
                            rewardPoint.RewardPointType     = (LoyaltyRewardPointType)Convert.ToInt32(TransactionServiceClient.GetAttributeValue(rewardPointStatus, "RewardPointType"));
                            rewardPoint.RewardPointCurrency = TransactionServiceClient.GetAttributeValue(rewardPointStatus, "Currency");
                            rewardPoint.IsRedeemable        = Convert.ToBoolean(TransactionServiceClient.GetAttributeValue(rewardPointStatus, "Redeemable"));
                            if (rewardPoint.IsRedeemable)
                            {
                                rewardPoint.RedeemRanking = Convert.ToInt32(TransactionServiceClient.GetAttributeValue(rewardPointStatus, "RedeemRanking"));
                            }

                            rewardPoint.IssuedPoints  = Convert.ToDecimal(TransactionServiceClient.GetAttributeValue(rewardPointStatus, "Issued"));
                            rewardPoint.UsedPoints    = Convert.ToDecimal(TransactionServiceClient.GetAttributeValue(rewardPointStatus, "Used"));
                            rewardPoint.ExpiredPoints = Convert.ToDecimal(TransactionServiceClient.GetAttributeValue(rewardPointStatus, "Expired"));
                            rewardPoint.ActivePoints  = Convert.ToDecimal(TransactionServiceClient.GetAttributeValue(rewardPointStatus, "Active"));

                            card.RewardPoints.Add(rewardPoint);
                        }
                    }
                }

                return(cards);
            }
Exemplo n.º 13
0
 protected override void GiveLoyaltyCard(LoyaltyCard loyaltyCard)
 {
     this._loyaltyCards.Add(loyaltyCard);
 }
Exemplo n.º 14
0
 public Task <LoyaltyCard> IssueLoyaltyCard(LoyaltyCard loyaltyCard)
 {
     return(Task.Run(() => LoyaltyManager.Create(CommerceRuntimeManager.Runtime).IssueLoyaltyCard(loyaltyCard.CardNumber, loyaltyCard.CustomerAccount, loyaltyCard.CardTenderType)));
 }
Exemplo n.º 15
0
 protected override void GiveLoyaltyCard(LoyaltyCard loyaltyCard)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 16
0
        public async Task Create(LoyaltyCard _loyaltyCard)
        {
            await _context.LoyaltyCards.AddAsync(_loyaltyCard);

            await _context.SaveChangesAsync();
        }