narsil/Tanshu.Accounts.Helpers/ControlFactory.cs
unknown d8ecec8bb6 Added inverse Attribute to ProductGroup.
BillInventory Renamed.
Refactored Bill to be more usable.
Added Bill Detail Report.
Added Open Bill and Bill Details Roles.
Zero Rate Products have Yellow background Color.
Refactored UserBI, FoodTableBI, ModifierBI, PrintLocationBI, ProductBI, ProductGroupBI, TaxBI, UserBI,
Cached the Products List.
Product and Product Group Form Working.
2011-06-23 18:17:48 +05:30

185 lines
7.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using Tanshu.Accounts.Contracts;
using Tanshu.Accounts.Entities;
using System.Collections;
using Tanshu.Accounts.Repository;
using Tanshu.Common.KeyboardControl;
namespace Tanshu.Accounts.Helpers
{
public delegate void ButtonClickDelegate(object sender, EventArgs e);
public static class ControlFactory
{
public static void GenerateTables(ref FlowLayoutPanel panel, Point size, int start, IList<FoodTable> inList, ButtonClickDelegate bcDelegate)
{
IList<FoodTable> list = new List<FoodTable>();
int pageLength, stop;
PageSetup(ref panel, start, inList as IList, out pageLength, out stop);
if (start != 0)
list.Add(new FoodTable() { FoodTableID = start - pageLength, Name = "Previous" });
for (int i = start; i < stop; i++)
{
list.Add(inList[i]);
}
if (stop < inList.Count)
list.Add(new FoodTable() { FoodTableID = stop, Name = "Next" });
for (int i = 0; i < list.Count; i++)
{
var item = list[i];
var status = item.Status;
var control = GetButton(string.Format("g{0}", i), item.Name, size.X, size.Y, item, bcDelegate);
if (status == "printed")
control.BackColor = Color.Green;
else if (status == "running")
control.BackColor = Color.Red;
panel.Controls.Add(control);
}
}
public static void GenerateProducts(ref FlowLayoutPanel panel, Point size, int start, IList<Product> inList, ButtonClickDelegate bcDelegate)
{
IList<Product> list = new List<Product>();
int pageLength, stop;
PageSetup(ref panel, start, inList as IList, out pageLength, out stop);
if (start != 0)
list.Add(new Product() { ProductID = start - pageLength, Name = "Previous" });
for (int i = start; i < stop; i++)
{
list.Add(inList[i]);
}
if (stop < inList.Count)
list.Add(new Product() { ProductID = stop, Name = "Next" });
for (var i = 0; i < list.Count; i++)
{
var item = list[i];
var control = GetButton(string.Format("p{0}", i), item.Units == string.Empty ? item.Name : string.Format("{0} ({1})", item.Name, item.Units), size.X, size.Y, item, bcDelegate);
if (item.SalePrice == 0)
control.BackColor = Color.Yellow;
panel.Controls.Add(control);
}
}
// For Discount Form
public static void GenerateGroups(ref FlowLayoutPanel panel, Point size, IList<string> list, ButtonClickDelegate bcDelegate)
{
panel.Controls.Clear();
for (int i = 0; i < list.Count; i++)
{
var item = list[i];
var control = GetUnselectableCheckbox(i.ToString(), item, size.X, size.Y, item, bcDelegate);
panel.Controls.Add(control);
}
}
// For Main Form
public static void GenerateGroups(ref FlowLayoutPanel panel, Point size, int start, IList<ProductGroup> inList, ButtonClickDelegate bcDelegate)
{
IList<ProductGroup> list = new List<ProductGroup>();
int pageLength, stop;
PageSetup(ref panel, start, inList as IList, out pageLength, out stop);
if (start != 0)
list.Add(new ProductGroup() { ProductGroupID = start - pageLength, Name = "Previous" });
for (int i = start; i < stop; i++)
{
list.Add(inList[i]);
}
if (stop < inList.Count)
list.Add(new ProductGroup() { ProductGroupID = stop, Name = "Next" });
for (int i = 0; i < list.Count; i++)
{
var item = list[i];
var control = GetButton(string.Format("g{0}", i), item.Name, size.X, size.Y, item, bcDelegate);
panel.Controls.Add(control);
}
}
public static void GenerateModifiers(ref FlowLayoutPanel panel, ref IList<CheckBox> controlList, IList<Modifier> selection, Point size, int count, IList<Modifier> list, ButtonClickDelegate bcDelegate)
{
if (controlList.Count != 0)
{
for (int i = controlList.Count - 1; i >= 0; i--)
{
controlList[i].Dispose();
}
controlList = new List<CheckBox>();
}
if (count > list.Count)
count = list.Count;
for (int i = 0; i < count; i++)
{
var item = list[i];
var control = GetCheckbox(i.ToString(), item.Name, size.X, size.Y, item, bcDelegate);
control.Checked = selection.Contains(item);
panel.Controls.Add(control);
controlList.Add(control);
}
}
private static void PageSetup(ref FlowLayoutPanel panel, int start, IList inList, out int pageLength, out int stop)
{
panel.Controls.Clear();
pageLength = (panel.Height / (3 + 75 + 3));
pageLength *= (panel.Width / (3 + 75 + 3));
pageLength -= 2;
if (inList.Count <= pageLength)
start = 0;
if (start == 0)
pageLength += 1;
stop = start + pageLength;
if (stop > inList.Count)
stop = inList.Count;
}
private static Button GetButton(string name, string text, int width, int height, object tag, ButtonClickDelegate bcDelegate)
{
Button control = new Button()
{
Name = name,
Text = text,
Width = width,
Height = height,
Tag = tag,
};
if (bcDelegate != null)
control.Click += new EventHandler(bcDelegate);
return control;
}
private static UnselectableCheckbox GetUnselectableCheckbox(string name, string text, int width, int height, object tag, ButtonClickDelegate bcDelegate)
{
UnselectableCheckbox control = new UnselectableCheckbox()
{
Name = name,
Text = text,
Width = width,
Height = height,
Tag = tag,
Appearance = Appearance.Button,
};
if (bcDelegate != null)
control.Click += new EventHandler(bcDelegate);
return control;
}
private static CheckBox GetCheckbox(string name, string text, int width, int height, object tag, ButtonClickDelegate bcDelegate)
{
CheckBox control = new CheckBox()
{
Name = name,
Text = text,
Width = width,
Height = height,
Tag = tag,
Appearance = Appearance.Button,
};
if (bcDelegate != null)
control.Click += new EventHandler(bcDelegate);
return control;
}
}
}