/// <summary>
            /// Issues a new loyalty card.
            /// </summary>
            /// <param name="loyaltyCardNumber">The loyalty card number.</param>
            /// <param name="cardTenderType">The loyalty card tender type.</param>
            /// <param name="partyRecordId">The record identifier of the party of the card owner.</param>
            /// <param name="channelRecordId">The record identifier of the channel.</param>
            /// <returns>The created loyalty card.</returns>
            public LoyaltyCard IssueLoyaltyCard(string loyaltyCardNumber, LoyaltyCardTenderType cardTenderType, long partyRecordId, long channelRecordId)
            {
                var parameters = new object[]
                {
                    loyaltyCardNumber,
                    (int)cardTenderType,
                    partyRecordId,
                    channelRecordId
                };

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

                // Translate the result data into a loyalty card object with card tiers.
                var cardData         = (object[])data[0];
                var cardTierListData = (object[])data[1];

                var loyaltyCard = new LoyaltyCard();

                loyaltyCard.RecordId       = (long)cardData[0];
                loyaltyCard.CardNumber     = (string)cardData[1];
                loyaltyCard.CardTenderType = (LoyaltyCardTenderType)cardData[2];
                loyaltyCard.PartyRecordId  = (long)cardData[3];

                foreach (var cardTierListDataRow in cardTierListData)
                {
                    var cardTierData = (object[])cardTierListDataRow;

                    long         loyaltyGroupRecordId = (long)cardTierData[1];
                    LoyaltyGroup loyaltyGroup         = loyaltyCard.LoyaltyGroups.SingleOrDefault(lg => lg.RecordId == loyaltyGroupRecordId);
                    if (loyaltyGroup == null)
                    {
                        loyaltyGroup          = new LoyaltyGroup();
                        loyaltyGroup.RecordId = loyaltyGroupRecordId;
                        loyaltyCard.LoyaltyGroups.Add(loyaltyGroup);
                    }

                    var cardTier = new LoyaltyCardTier();
                    cardTier.RecordId            = (long)cardTierData[0];
                    cardTier.LoyaltyTierRecordId = (long)cardTierData[3];
                    cardTier.ValidFrom           = string.IsNullOrWhiteSpace(cardTierData[4].ToString()) ? DateTimeOffset.MinValue : Convert.ToDateTime(cardTierData[4]);
                    cardTier.ValidTo             = string.IsNullOrWhiteSpace(cardTierData[5].ToString()) ? DateTimeOffset.MaxValue : Convert.ToDateTime(cardTierData[5]);

                    loyaltyGroup.LoyaltyCardTiers.Add(cardTier);
                }

                return(loyaltyCard);
            }
示例#2
0
        /// <summary>
        /// Initializes the specified tier.
        /// </summary>
        /// <param name="tier">The tier.</param>
        /// <param name="cardTier">The card tier.</param>
        public virtual void Initialize(LoyaltyTier tier, LoyaltyCardTier cardTier)
        {
            Assert.ArgumentNotNull(tier, "tier");

            this.TierId      = tier.TierId;
            this.Description = tier.Description;
            this.TierLevel   = tier.TierLevel.ToString(Sitecore.Context.Language.CultureInfo);
            this.IsElegible  = false;

            if (cardTier == null)
            {
                return;
            }

            this.ValidFrom  = cardTier.ValidFrom.ToDisplayedDate();
            this.ValidTo    = cardTier.ValidTo.ToDisplayedDate();
            this.IsElegible = true;
        }
        /// <summary>
        /// Initializes the specified tier.
        /// </summary>
        /// <param name="tier">The tier.</param>
        /// <param name="cardTier">The card tier.</param>
        public virtual void Initialize(LoyaltyTier tier, LoyaltyCardTier cardTier)
        {
            Assert.ArgumentNotNull(tier, "tier");

            this.TierId = tier.TierId;
            this.Description = tier.Description;
            this.TierLevel = tier.TierLevel.ToString(Sitecore.Context.Language.CultureInfo);
            this.IsElegible = false;

            if (cardTier == null)
            {
                return;
            }

            this.ValidFrom = cardTier.ValidFrom.ToDisplayedDate();
            this.ValidTo = cardTier.ValidTo.ToDisplayedDate();
            this.IsElegible = true;
        }
            /// <summary>
            /// Converts the loyalty card tier into a data row.
            /// </summary>
            /// <param name="table">The data table.</param>
            /// <param name="loyaltyCard">The loyalty card.</param>
            /// <param name="loyaltyGroup">The card loyalty group.</param>
            /// <param name="loyaltyCardTier">The loyalty card tier.</param>
            /// <returns>The data row.</returns>
            private static DataRow ConvertLoyaltyCardTierToDataRow(DataTable table, LoyaltyCard loyaltyCard, LoyaltyGroup loyaltyGroup, LoyaltyCardTier loyaltyCardTier)
            {
                DataRow row = table.NewRow();

                row[LoyaltySqlServerDataService.RecIdColumn]       = loyaltyCardTier.RecordId;
                row[LoyaltySqlServerDataService.AffiliationColumn] = loyaltyGroup.RecordId;
                row[LoyaltySqlServerDataService.LoyaltyCardColumn] = loyaltyCard.RecordId;
                row[LoyaltySqlServerDataService.LoyaltyTierColumn] = loyaltyCardTier.LoyaltyTierRecordId;
                row[LoyaltySqlServerDataService.ValidFromColumn]   = loyaltyCardTier.ValidFrom.DateTime;
                row[LoyaltySqlServerDataService.ValidToColumn]     = loyaltyCardTier.ValidTo.DateTime;

                return(row);
            }