HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSModules/Ecommerce/Controls/Filters/DiscountFilter.ascx.cs
using System;
using System.Linq;
using System.Web.UI.WebControls;

using CMS.Base;
using CMS.Controls;
using CMS.DataEngine;
using CMS.DataEngine.Query;
using CMS.Ecommerce;
using CMS.Helpers;
using CMS.UIControls;
using CMS.ExtendedControls;

public partial class CMSModules_Ecommerce_Controls_Filters_DiscountFilter : CMSAbstractDataFilterControl
{
    #region "Public properties"

    /// <summary>
    /// Gets or sets the SQL condition for filtering the discount list.
    /// </summary>
    public override string WhereCondition
    {
        get
        {
            base.WhereCondition = GetFilterWhereCondition();
            return base.WhereCondition;
        }
        set
        {
            base.WhereCondition = value;
        }
    }

    #endregion


    #region "Private properties" 

    /// <summary>
    /// Indicates whether multibuy discounts are filtered.
    /// </summary>
    private bool IsMultibuy
    {
        get;
        set;
    }


    /// <summary>
    /// Discount prefix according discount object type.
    /// </summary>
    private string DiscountPrefix
    {
        get
        {
            return IsMultibuy ? "MultiBuy" : String.Empty;
        }
    }


    /// <summary>
    /// Coupon code object type.
    /// </summary>
    private string CouponCodeObjectType
    {
        get
        {
            return IsMultibuy ? MultiBuyCouponCodeInfo.OBJECT_TYPE : CouponCodeInfo.OBJECT_TYPE;
        }
    }


    /// <summary>
    /// Discount application type.
    /// </summary>
    private DiscountApplicationEnum? DiscountApplication
    {
        get
        {
            var enumValueIndex = QueryHelper.GetInteger("type", -1);
            if (enumValueIndex < 0)
            {
                return null;
            }
            return (DiscountApplicationEnum)enumValueIndex;
        }
    }

    #endregion


    #region "Page events"

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        InitializeDropDownList(drpStatus);


        var ug = FilteredControl as UniGrid;
        if (ug != null)
        {
            IsMultibuy = ug.ObjectType.EqualsCSafe(MultiBuyDiscountInfo.OBJECT_TYPE);
        }
    }

    #endregion


    #region "Event handlers"

    protected void btnFilter_Click(object sender, EventArgs e)
    {
        ApplyFilter(sender, e);
    }


    protected void btnReset_Click(object sender, EventArgs e)
    {
        UniGrid grid = FilteredControl as UniGrid;
        if (grid != null)
        {
            grid.Reset();
        }
    }

    #endregion


    #region "Private methods"

    /// <summary>
    /// Applies filter to unigrid.
    /// </summary>
    /// <param name="sender">Sender.</param>
    /// <param name="e">Event args.</param>
    private void ApplyFilter(object sender, EventArgs e)
    {
        UniGrid grid = FilteredControl as UniGrid;
        if (grid != null)
        {
            grid.ApplyFilter(sender, e);
        }
    }


    /// <summary>
    /// Initializes the specified controls with values.
    /// </summary>
    /// <param name="control">A control to initialize.</param>
    private void InitializeDropDownList(CMSDropDownList control)
    {
        control.Items.Add(new ListItem(GetString("general.selectall"), "-1"));
        control.Items.Add(new ListItem(GetString("com.discountstatus.active"), "0"));
        control.Items.Add(new ListItem(GetString("com.discountstatus.disabled"), "1"));
        control.Items.Add(new ListItem(GetString("com.discountstatus.finished"), "2"));
        control.Items.Add(new ListItem(GetString("com.discountstatus.notstarted"), "3"));

        // Catalog discount can not have incomplete status
        if (!DiscountApplication.HasValue || (DiscountApplication.Value != DiscountApplicationEnum.Products))
        {
            control.Items.Add(new ListItem(GetString("com.discountstatus.incomplete"), "4"));
        }
    }


    /// <summary>
    /// Builds a SQL condition for filtering the discount list, and returns it.
    /// </summary>
    /// <returns>A SQL condition for filtering the discount list.</returns>
    private string GetFilterWhereCondition()
    {
        string discountStatus = drpStatus.SelectedValue;
        var condition = new WhereCondition();


        /* Active discounts */
        if (discountStatus == "0")
        {
            condition.Where(GetActiveQuery());
        }
        /* Disabled discounts */
        else if (discountStatus == "1")
        {
            condition.WhereNot(GetEnabledDiscounts());
        }
        /* Finished discounts */
        else if (discountStatus == "2")
        {
            condition.Where(GetEnabledDiscounts())
                     .WhereLessThan(GetColumn("DiscountValidTo"), DateTime.Now)
                     .WhereNot(GetIncompleteDiscounts())
                     .Or(GetDiscountsWithCouponsExceeded());
        }
        /* Scheduled discounts */
        else if (discountStatus == "3")
        {
            condition.Where(GetEnabledDiscounts())
                     .WhereGreaterThan(GetColumn("DiscountValidFrom"), DateTime.Now)
                     .WhereNot(GetIncompleteDiscounts());
        }
        /* Incomplete discounts */
        else if (discountStatus == "4")
        {
            condition.Where(GetEnabledDiscounts())
                     .Where(GetIncompleteDiscounts());
        }

        return condition.ToString(true);
    }

    #endregion


    #region "State management"

    /// <summary>
    /// Resets filter to the default state.
    /// </summary>
    public override void ResetFilter()
    {
        drpStatus.SelectedValue = "-1";
    }


    /// <summary>
    /// Stores filter state to the specified object.
    /// </summary>
    /// <param name="state">The object that holds the filter state.</param>
    public override void StoreFilterState(FilterState state)
    {
        base.StoreFilterState(state);

        // Store additional state properties
        state.AddValue("drpStatus", drpStatus.SelectedValue);
    }


    /// <summary>
    /// Restores filter state from the specified object.
    /// </summary>
    /// <param name="state">The object that holds the filter state.</param>
    public override void RestoreFilterState(FilterState state)
    {
        base.RestoreFilterState(state);

        // Restore additional state properties
        drpStatus.SelectedValue = state.GetString("drpStatus", "-1");
    }

    #endregion
       
 
    #region "Status queries"

    /// <summary>
    /// Returns query to filter active discounts.
    /// </summary>
    private WhereCondition GetActiveQuery()
    {
        IWhereCondition activeQuery;
        if (IsMultibuy)
        {
            activeQuery = MultiBuyDiscountInfoProvider.GetRunningDiscounts(CurrentSite.SiteID, DateTime.Now);
        }
        else
        {
            activeQuery = DiscountInfoProvider.GetRunningDiscounts(CurrentSite.SiteID, DateTime.Now);
        }
        return new WhereCondition(activeQuery.Expand(activeQuery.WhereCondition));
    }


    /// <summary>
    /// Returns where condition to filter incomplete discounts.
    /// </summary>
    private WhereCondition GetIncompleteDiscounts()
    {
        return new WhereCondition()
                    .WhereTrue(GetColumn("DiscountUsesCoupons"))
                    .WhereNotIn(GetColumn("DiscountID"), new IDQuery(CouponCodeObjectType, GetColumn("CouponCode") + GetColumn("DiscountID")));
        
    }


    /// <summary>
    /// Returns where condition to filter discounts with exceeded coupon use.
    /// </summary>
    private WhereCondition GetDiscountsWithCouponsExceeded()
    {
        return new WhereCondition()
                    .WhereNot (GetIncompleteDiscounts())
                    .WhereTrue(GetColumn("DiscountUsesCoupons"))
                    .WhereNotIn(GetColumn("DiscountID"), new IDQuery(CouponCodeObjectType, GetColumn("CouponCode") + GetColumn("DiscountID"))
                                                                .WhereNull(GetColumn("CouponCodeUseLimit"))
                                                                .Or()
                                                                .WhereLessThan(GetColumn("CouponCodeUseCount"), GetColumn("CouponCodeUseLimit").AsColumn()));
    }


    /// <summary>
    /// Returns where condition to filter enabled discounts.
    /// </summary>
    private WhereCondition GetEnabledDiscounts()
    {
        return new WhereCondition()
                    .WhereTrue(GetColumn("DiscountEnabled"));
    }


    /// <summary>
    /// Returns right column name according discount object type.
    /// </summary>
    /// <param name="columnName">Column name.</param>
    private string GetColumn(string columnName)
    {
        return DiscountPrefix + columnName;
    }

    #endregion
}