/// <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); } }
/// <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); } }
public IActionResult Post([FromBody] LoyaltyCard card) { _loyaltyCardDatabase.Add(card); return(Ok(card)); }
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); }
public void Update(LoyaltyCard loyaltyCard) { _cards.ReplaceOne(tempCard => loyaltyCard.Id == tempCard.Id, loyaltyCard); }
public void Add(LoyaltyCard loyaltyCard) { loyaltyCard.Id = Convert.ToInt32(_cards.Count(new BsonDocument()) + 1); _cards.InsertOne(loyaltyCard); }
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 }
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); } }
/// <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); }
protected override void GiveLoyaltyCard(LoyaltyCard loyaltyCard) { this._loyaltyCards.Add(loyaltyCard); }
public Task <LoyaltyCard> IssueLoyaltyCard(LoyaltyCard loyaltyCard) { return(Task.Run(() => LoyaltyManager.Create(CommerceRuntimeManager.Runtime).IssueLoyaltyCard(loyaltyCard.CardNumber, loyaltyCard.CustomerAccount, loyaltyCard.CardTenderType))); }
protected override void GiveLoyaltyCard(LoyaltyCard loyaltyCard) { throw new NotImplementedException(); }
public async Task Create(LoyaltyCard _loyaltyCard) { await _context.LoyaltyCards.AddAsync(_loyaltyCard); await _context.SaveChangesAsync(); }