Page 1 of 1

FireFold Mod: Pricing rules as % over cost of goods

Posted: Tue Sep 22, 2009 8:44 am
by William_firefold
I spent the morning working on this and thought I would share. This is something I think should be included in the next version of Able.
Have pricing rules be displayed as a percentage amount ABOVE the cost of goods for a product.
To start, I modified these 2 methods in the admin/products/specials/editspecial.aspx.cs file

Code: Select all

    protected void BindSpecial()
    {
		LSDecimal hold=_Special.Price;	
		hold=( (hold/_Product.CostOfGoods)-1)*100;
        Price.Text = string.Format("{0:0}", hold);
        StartDate.SelectedDate = _Special.StartDate;
        EndDate.SelectedDate = _Special.EndDate;
        if (_Special.SpecialGroups != null && _Special.SpecialGroups.Count > 0)
        {
            SelectedGroups.Checked = true;
            Groups.DataBind();
            foreach (SpecialGroup group in _Special.SpecialGroups)
            {
                ListItem listItem = Groups.Items.FindByValue(group.GroupId.ToString());
                if (listItem != null) listItem.Selected = true;
            }
        }
    }
    protected void SaveSpecial()
    {
		LSDecimal hold=AlwaysConvert.ToDecimal(Price.Text);
		hold= _Product.CostOfGoods + ((hold/100)*_Product.CostOfGoods);
        _Special.Price = hold;
        _Special.StartDate = StartDate.SelectedDate;
        _Special.EndDate = EndDate.SelectedEndDate;
        _Special.SpecialGroups.DeleteAll();
        if (SelectedGroups.Checked)
        {            
            foreach (ListItem item in Groups.Items)
            {
                if (item.Selected) _Special.SpecialGroups.Add(new SpecialGroup(0, AlwaysConvert.ToInt(item.Value)));
            }
            if (_Special.SpecialGroups.Count == 0)
            {
                SelectedGroups.Checked = false;
                AllGroups.Checked = true;
            }
        }        
        _Special.Save();        
    }
I then had to make a similar modification to the AddSpecial.aspx.cs file

Code: Select all

    protected void SaveButton_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            Special special = new Special();
            special.ProductId = _ProductId;
			LSDecimal hold=AlwaysConvert.ToDecimal(Price.Text);
			hold= _Product.CostOfGoods + ((hold/100)*_Product.CostOfGoods);
			special.Price = hold;       
            special.StartDate = StartDate.SelectedDate;
            special.EndDate = EndDate.SelectedEndDate;
            if (SelectedGroups.Checked)
            {
                foreach (ListItem item in Groups.Items)
                {
                    if (item.Selected) special.SpecialGroups.Add(new SpecialGroup(0, AlwaysConvert.ToInt(item.Value)));
                }
            }
            special.Save();
            Response.Redirect("Default.aspx?ProductId=" + _ProductId.ToString());
        }
    }

After that, I realized that Able doesnt update pricing rules when you change the cost of goods on the edit product page. I then made the following modifications to the SaveButton_Click method on the admin/products/editproduct.aspx.cs file.
Starts around line 213 for us:

Code: Select all

            //TAXES AND SHIPPING
            _Product.ShippableId = (byte)AlwaysConvert.ToInt(IsShippable.SelectedIndex);
            _Product.Weight = AlwaysConvert.ToDecimal(Weight.Text);
            _Product.Length = AlwaysConvert.ToDecimal(Length.Text);
            _Product.Width = AlwaysConvert.ToDecimal(Width.Text);
            _Product.Height = AlwaysConvert.ToDecimal(Height.Text);
            _Product.WarehouseId = AlwaysConvert.ToInt(Warehouse.SelectedValue);
            _Product.WrapGroupId = AlwaysConvert.ToInt(WrapGroup.SelectedValue);
            _Product.TaxCodeId = AlwaysConvert.ToInt(TaxCode.SelectedValue);
			//FireFold Pre Mod
			LSDecimal preCost=_Product.CostOfGoods;

            _Product.CostOfGoods = AlwaysConvert.ToDecimal(CostOfGoods.Text);	//Not a mod

			//FireFold Mod
			SpecialCollection specials=SpecialDataSource.LoadForProduct(_Product.ProductId);
			foreach(Special _Special in specials){
			LSDecimal percentage=( (_Special.Price/preCost)-1)*100;	//calculate percentage over original cost
			_Special.Price=_Product.CostOfGoods + ((percentage/100)*_Product.CostOfGoods);		//apply percentage to new cost
			_Special.Save();
			}
            _Product.VendorId = AlwaysConvert.ToInt(Vendor.SelectedValue);   //not a mod
What is neat about this is that the default pricing rules page will still show the actual price of the rule, it only calculates it based on the cost of the product and saves the cost + the percentage * cost

Re: FireFold Mod: Pricing rules as % over cost of goods

Posted: Tue Sep 22, 2009 8:54 am
by igavemybest
Yeah, this is very important!