Пример #1
0
        /// <summary>
        /// Saves the changes.
        /// </summary>
        /// <param name="context">The context.</param>
        public void SaveChanges(IDictionary context)
        {
            ExpressionDto dto = (ExpressionDto)context[_ExpressionDtoString];

            ExpressionDto.ExpressionRow row = null;

            if (dto.Expression.Count > 0)
            {
                row          = dto.Expression[0];
                row.Modified = DateTime.UtcNow;
            }
            else
            {
                row = dto.Expression.NewExpressionRow();
                row.ApplicationId = MarketingConfiguration.Instance.ApplicationId;
                row.Category      = ddlExpressionCategory.SelectedValue;
                row.Created       = DateTime.UtcNow;
            }

            row.Name          = tbExpressionName.Text;
            row.Description   = tbDescription.Text;
            row.ExpressionXml = tbXml.Text;
            row.ModifiedBy    = Page.User.Identity.Name;

            if (row.RowState == DataRowState.Detached)
            {
                dto.Expression.Rows.Add(row);
            }
        }
Пример #2
0
        /*
         * private void LoadDataAndDataBind(string sortExpression)
         * {
         *  DataView view = DataSource.Expression.DefaultView;
         *  view.Sort = sortExpression;
         *  MyListView.DataSource = view;
         *  MyListView.CurrentListView.PrimaryKeyId = EcfListView.MakePrimaryKeyIdString("ExpressionId");
         *  MyListView.DataBind();
         * }
         * */

        /// <summary>
        /// Handles the ItemCommand event of the RulesList control.
        /// </summary>
        /// <param name="source">The source of the event.</param>
        /// <param name="e">The <see cref="System.Web.UI.WebControls.RepeaterCommandEventArgs"/> instance containing the event data.</param>
        protected void RulesList_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (String.Compare(e.CommandName, "DeleteExpression", StringComparison.OrdinalIgnoreCase) == 0)
            {
                //Notify RuleEditDialog for deletetion expression

                // delete expression
                int exprId = 0;
                if (Int32.TryParse(e.CommandArgument.ToString(), out exprId))
                {
                    if (_expression != null)
                    {
                        ExpressionDto.ExpressionRow expressionRow = _expression.Expression.FindByExpressionId(exprId);
                        if (expressionRow != null)
                        {
                            expressionRow.Delete();
                        }
                    }
                }

                //Delete corresponding FilterExpressionNodeCollection from list serialized collection
                ExpressionFilters.RemoveAt(e.Item.ItemIndex);
            }
            RulesList.DataSource = _expression;
            RulesList.DataBind();
            ExpressionsPanel.Update();
        }
Пример #3
0
        /// <summary>
        /// Creates the expression row.
        /// </summary>
        /// <param name="expressionDto">The expression dto.</param>
        /// <returns></returns>
        public ExpressionDto.ExpressionRow CreateExpressionRow(ref ExpressionDto expressionDto)
        {
            PromotionDto.PromotionConditionRow row           = null;
            ExpressionDto.ExpressionRow        expressionRow = null;

            if (_PromotionDto.PromotionCondition.Count == 0)
            {
                row                         = _PromotionDto.PromotionCondition.NewPromotionConditionRow();
                row.PromotionId             = _PromotionDto.Promotion[0].PromotionId;
                expressionRow               = expressionDto.Expression.NewExpressionRow();
                expressionRow.ApplicationId = MarketingConfiguration.Instance.ApplicationId;
                expressionRow.Category      = ExpressionCategory.CategoryKey.Promotion.ToString();
                expressionRow.Created       = DateTime.UtcNow;
            }
            else
            {
                row           = _PromotionDto.PromotionCondition[0];
                expressionDto = ExpressionManager.GetExpressionDto(row.ExpressionId);
                expressionRow = expressionDto.Expression[0];
            }

            expressionRow.ModifiedBy  = Page.User.Identity.Name;
            expressionRow.Description = _Config.Description;
            expressionRow.Name        = _Config.Type;

            row.ExpressionId = expressionRow.ExpressionId;

            if (row.RowState == DataRowState.Detached)
            {
                PromotionDto.PromotionCondition.Rows.Add(row);
            }

            return(expressionRow);
        }
Пример #4
0
        /// <summary>
        /// Binds the form.
        /// </summary>
        private void BindForm()
        {
            if (_ExpressionDto != null)
            {
                //first check permissions
                //if permissions not present, deny
                SecurityManager.CheckRolePermission("marketing:expr:mng:edit");

                ExpressionDto.ExpressionRow row = _ExpressionDto.Expression[0];
                tbExpressionName.Text = row.Name;
                tbDescription.Text    = row.Description;
                tbXml.Text            = row.ExpressionXml;

                ExpressionCategoryRow.Visible = false;
            }
            else
            {
                //first check permissions
                //if permissions not present, deny
                SecurityManager.CheckRolePermission("marketing:expr:mng:create");

                ExpressionCategoryRow.Visible = true;
                LoadExpressionCategories();
            }
        }
Пример #5
0
        private RuleSet GetPromotionRuleSet(string expressionPlace, string expressionKey)
        {
            RuleSet retVal = null;

            int expressionId = Int32.Parse(expressionKey);

            if (expressionId > 0)
            {
                if (DataSource == null)
                {
                    throw new NullReferenceException("DataSource is null");
                }

                ExpressionDto dto = GetDataSourceDto(DataSource);
                ExpressionDto.ExpressionRow row = dto.Expression.FindByExpressionId(expressionId);

                if (row != null)                 // new one
                {
                    StringReader             stringReader = new StringReader(row.ExpressionXml);
                    XmlTextReader            reader       = new XmlTextReader(stringReader);
                    WorkflowMarkupSerializer serializer   = new WorkflowMarkupSerializer();
                    retVal = serializer.Deserialize(reader) as RuleSet;
                }
            }

            return(retVal);
        }
        /// <summary>
        /// Saves the expression.
        /// </summary>
        /// <param name="set">The set.</param>
        /// <param name="expressionId">The expression id.</param>
        protected virtual void SaveExpression(RuleSet set, int expressionId)
        {
            if (set == null)
            {
                throw new ArgumentNullException("RuleSet");
            }

            if (DataSource == null)
            {
                throw new ArgumentNullException("DataSource");
            }

            ExpressionDto dto = GetDataSourceDto(DataSource);

            ExpressionDto.ExpressionRow row = dto.Expression.FindByExpressionId(expressionId);

            if (row == null /*&& (expressionId == 0 || dto.Expression.Count == 0)*/)             // new one
            {
                row               = dto.Expression.NewExpressionRow();
                row.Name          = set.Name;
                row.Description   = String.Empty;
                row.ApplicationId = MarketingConfiguration.Instance.ApplicationId;
                row.Category      = ExpressionCategory.CategoryKey.Segment.ToString();
                row.Created       = DateTime.UtcNow;
            }
            else
            {
                row.Modified = DateTime.UtcNow;
            }

            // Serialize ruleset
            StringBuilder ruleDefinition = new StringBuilder();

            #region Serialize

            StringWriter             stringWriter = new StringWriter(ruleDefinition, CultureInfo.InvariantCulture);
            XmlTextWriter            writer       = new XmlTextWriter(stringWriter);
            WorkflowMarkupSerializer serializer   = new WorkflowMarkupSerializer();
            serializer.Serialize(writer, set);
            #endregion

            #region Cleanup

            writer.Flush();
            writer.Close();
            stringWriter.Flush();
            stringWriter.Close();
            #endregion

            row.ExpressionXml = ruleDefinition.ToString();

            if (row.RowState == System.Data.DataRowState.Detached)
            {
                dto.Expression.Rows.Add(row);
            }
        }
Пример #7
0
    /// <summary>
    /// Saves the changes.
    /// </summary>
    /// <param name="context">The context.</param>
    public override void SaveChanges(IDictionary context)
    {
        base.SaveChanges(context);

        // Populate setting
        Settings settings = new Settings();

        settings.EntryXFilter   = EntryXFilter.SelectedEntryCode;
        settings.EntryYFilter   = EntryYFilter.SelectedEntryCode;
        settings.SourceQuantity = Decimal.Parse(SourceQuantity.Text);
        settings.TargetQuantity = Decimal.Parse(TargetQuantity.Text);
        settings.AmountOff      = Decimal.Parse(OfferAmount.Text);
        int offerType = Int32.Parse(OfferType.SelectedValue);

        settings.AmountType = offerType == 1 ? PromotionRewardAmountType.Percentage : PromotionRewardAmountType.Value;
        settings.RewardType = PromotionRewardType.EachAffectedEntry;

        // Create custom expression from template
        string expr = Replace(Config.Expression, settings);

        // save properties for promotion
        PromotionDto.PromotionRow promotion = PromotionDto.Promotion[0];
        promotion.OfferAmount = Decimal.Parse(OfferAmount.Text);
        promotion.OfferType   = Int32.Parse(OfferType.SelectedValue);
        promotion.Params      = SerializeSettings(settings);

        // Create or modify expression
        ExpressionDto expressionDto = new ExpressionDto();

        //PromotionDto.PromotionConditionRow row = null;

        ExpressionDto.ExpressionRow expressionRow = CreateExpressionRow(ref expressionDto);
        expressionRow.Category      = ExpressionCategory.CategoryKey.Promotion.ToString();
        expressionRow.ExpressionXml = expr;
        if (expressionRow.RowState == DataRowState.Detached)
        {
            expressionDto.Expression.Rows.Add(expressionRow);
        }

        // Save expression
        ExpressionManager.SaveExpression(expressionDto);

        // Assign expression id to our new condition
        PromotionDto.PromotionCondition[0].ExpressionId = expressionRow.ExpressionId;

        //if (row.RowState == DataRowState.Detached)
        //PromotionDto.PromotionCondition.Rows.Add(row);
    }
Пример #8
0
    /// <summary>
    /// Saves the changes.
    /// </summary>
    /// <param name="context">The context.</param>
    public override void SaveChanges(IDictionary context)
    {
        base.SaveChanges(context);

        // Populate setting
        Settings settings = new Settings();

        settings.TargetExpression    = ApplyConditionFilter.NodeCollection[0].ChildNodes;
        settings.ConditionExpression = ConditionFilter.NodeCollection[0].ChildNodes;


        // save properties for promotion
        PromotionDto.PromotionRow promotion = PromotionDto.Promotion[0];
        promotion.Params = SerializeSettingsBinary(settings);

        //// Create custom expression from template
        //string expr = Replace(Config.Expression, settings);

        //// Create or modify expression
        ExpressionDto expressionDto = new ExpressionDto();

        ExpressionDto.ExpressionRow expressionRow = CreateExpressionRow(ref expressionDto);
        expressionRow.Category      = ExpressionCategory.CategoryKey.Promotion.ToString();
        expressionRow.ExpressionXml = string.Empty;
        if (expressionRow.RowState == DataRowState.Detached)
        {
            expressionDto.Expression.Rows.Add(expressionRow);
        }
        //Change DataSource from FilterNodeCollection  to ExpressionDto
        ConditionFilter.Provider.DataSource = expressionDto;
        ConditionFilter.Provider.SaveFilters("PromotionCondition", expressionRow.ExpressionId.ToString(),
                                             settings.ConditionExpression);

        //// Save expression
        ExpressionManager.SaveExpression(expressionDto);

        ApplyConditionFilter.DataSource = expressionDto;
        ApplyConditionFilter.Provider.SaveFilters("PromotionAction", expressionRow.ExpressionId.ToString(),
                                                  settings.TargetExpression);


        //// Save expression
        ExpressionManager.SaveExpression(expressionDto);

        //// Assign expression id to our new condition
        PromotionDto.PromotionCondition[0].ExpressionId = expressionRow.ExpressionId;
    }
Пример #9
0
 /// <summary>
 /// Binds the form.
 /// </summary>
 private void BindForm()
 {
     ExpressionDto.ExpressionRow row = null;
     if (_ExpressionDto != null && _ExpressionDto.Expression.Count() != 0)
     {
         if (ExpressionId == 0 || ExpressionId == -1)                // get the last row added
         {
             row = _ExpressionDto.Expression[_ExpressionDto.Expression.Count - 1];
         }
         else
         {
             row = _ExpressionDto.Expression.FindByExpressionId(ExpressionId);
         }
     }
     if (row != null)
     {
         ExpressionName.Text = row.Name;
     }
 }
Пример #10
0
    /// <summary>
    /// Saves the changes.
    /// </summary>
    /// <param name="context">The context.</param>
    public override void SaveChanges(IDictionary context)
    {
        base.SaveChanges(context);

        // Populate setting
        Settings settings = new Settings();

        settings.EntryXFilter = EntryXFilter.SelectedEntryCode;
        settings.EntryYFilter = EntryYFilter.SelectedEntryCode;
        // Create custom expression from template
        string expr = Replace(Config.Expression, settings);

        // save properties for promotion
        PromotionDto.PromotionRow promotion = PromotionDto.Promotion[0];
        promotion.OfferAmount = 100;
        promotion.OfferType   = 0; //undef not use
        promotion.Params      = SerializeSettings(settings);

        // Create or modify expression
        ExpressionDto expressionDto = new ExpressionDto();

        //PromotionDto.PromotionConditionRow row = null;

        ExpressionDto.ExpressionRow expressionRow = CreateExpressionRow(ref expressionDto);
        expressionRow.Category      = ExpressionCategory.CategoryKey.Promotion.ToString();
        expressionRow.ExpressionXml = expr;
        if (expressionRow.RowState == DataRowState.Detached)
        {
            expressionDto.Expression.Rows.Add(expressionRow);
        }

        // Save expression
        ExpressionManager.SaveExpression(expressionDto);

        // Assign expression id to our new condition
        PromotionDto.PromotionCondition[0].ExpressionId = expressionRow.ExpressionId;

        //if (row.RowState == DataRowState.Detached)
        //PromotionDto.PromotionCondition.Rows.Add(row);
    }
Пример #11
0
        /// <summary>
        /// Handles the Click event of the SaveButton control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        protected void SaveButton_Click(object sender, EventArgs e)
        {
            ExpressionDto dto = (ExpressionDto)HttpContext.Current.Session[_ExpressionDtoEditSessionKey];

            if (dto != null)
            {
                ExpressionFilter = ExprFilter.NodeCollection[0].ChildNodes;

                ExprFilter.Visible    = true;
                ExprFilter.DataSource = dto;
                ExprFilter.Provider.SaveFilters(_RulesPrefix, ExpressionId.ToString(), ExpressionFilter);
                ExpressionDto.ExpressionRow row = null;
                if (ExpressionId == 0) // get the last row added
                {
                    row = dto.Expression[dto.Expression.Count - 1];
                }
                else
                {
                    row = dto.Expression.FindByExpressionId(ExpressionId);
                }

                row.Name = ExpressionName.Text;
            }
            else
            {
                ExprFilter.Visible = false;
            }
            ////Serialize FilterExpression in segment table
            //if (_SegmentDto != null && _SegmentDto.Segment.Count > 0)
            //{
            //    SegmentDto.SegmentRow row = _SegmentDto.Segment[0];
            //    row.ExpressionFilter = SerializeFilterExpressions(ExpressionFilters);
            //}

            CommandParameters cp = new CommandParameters(_RuleEditCommandString);

            CommandHandler.RegisterCloseOpenedFrameScript(this.Page, cp.ToString());
        }
Пример #12
0
        /// <summary>
        /// Returns customer segments for specified customer or organization.
        /// </summary>
        /// <param name="context">The context. Should include ContextConstants.CustomerProfile of type ProfileBase</param>
        /// <param name="customerPrincipalId">The customer principal id.</param>
        /// <param name="organizationPrincipalId">The organization principal id.</param>
        /// <returns>int list of customer segment ids</returns>
        public List <int> GetCustomerSegments(Dictionary <string, object> context, Guid customerPrincipalId, Guid organizationPrincipalId)
        {
            List <int>      segments    = new List <int>();
            MarketingHelper helper      = GetMarketingHelper(true);
            SegmentDto      segmentsDto = helper.Segments;

            PromotionContext promotionContext = new PromotionContext(context, null, null);

            // Cycle through customer segments
            foreach (SegmentDto.SegmentRow segmentRow in segmentsDto.Segment)
            {
                bool includeSegment = false;
                bool excludeSegment = false;

                // Check if profile is directly specified in the members tables
                foreach (SegmentDto.SegmentMemberRow memberRow in segmentRow.GetSegmentMemberRows())
                {
                    if (memberRow.PrincipalId == customerPrincipalId || memberRow.PrincipalId == organizationPrincipalId)
                    {
                        if (memberRow.Exclude)
                        {
                            excludeSegment = true;
                            break;
                        }
                        else
                        {
                            includeSegment = true;
                            break;
                        }
                    }
                }

                // if explicitely excluded, skip the segment
                if (excludeSegment)
                {
                    continue;
                }

                // Validate expressions, if any of the expression is met, user is part of the group
                foreach (SegmentDto.SegmentConditionRow condition in segmentRow.GetSegmentConditionRows())
                {
                    ExpressionDto.ExpressionRow expressionRow = helper.Expressions.Expression.FindByExpressionId(condition.ExpressionId);

                    if (expressionRow != null && !String.IsNullOrEmpty(expressionRow.ExpressionXml))
                    {
                        ValidationResult result = ValidateExpression(expressionRow.ApplicationId.ToString() + "-" + expressionRow.Category + "-" + expressionRow.ExpressionId.ToString(), expressionRow.ExpressionXml, promotionContext);
                        if (!result.IsValid)
                        {
                            includeSegment = false;
                            continue;
                        }
                        else
                        {
                            includeSegment = true;
                            break;
                        }
                    }
                }

                if (!includeSegment)
                {
                    continue;
                }

                segments.Add(segmentRow.SegmentId);
            }

            return(segments);
        }