Moved to fluent. Added support for Modifiers. Fixtures to load intial test data

This commit is contained in:
unknown
2011-01-30 12:44:05 +05:30
parent c841dc25f4
commit eb48c3754a
272 changed files with 10470 additions and 47160 deletions

View File

@ -0,0 +1,255 @@
namespace Tanshu.Accounts.PointOfSale
{
partial class ProductTypes
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.chkMaintainStock = new System.Windows.Forms.CheckBox();
this.chkInUse = new System.Windows.Forms.CheckBox();
this.btnAdd = new System.Windows.Forms.Button();
this.btnDelete = new System.Windows.Forms.Button();
this.btnNavFirst = new System.Windows.Forms.Button();
this.btnNavPrev = new System.Windows.Forms.Button();
this.lblNavLocation = new System.Windows.Forms.Label();
this.btnNavNext = new System.Windows.Forms.Button();
this.btnLast = new System.Windows.Forms.Button();
this.txtName = new System.Windows.Forms.TextBox();
this.btnUpdate = new System.Windows.Forms.Button();
this.btnExit = new System.Windows.Forms.Button();
this.txtUniqueID = new System.Windows.Forms.TextBox();
this.Label2 = new System.Windows.Forms.Label();
this.Label1 = new System.Windows.Forms.Label();
this.txtTaxRate = new System.Windows.Forms.TextBox();
this.Label5 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// chkMaintainStock
//
this.chkMaintainStock.AutoSize = true;
this.chkMaintainStock.Location = new System.Drawing.Point(259, 85);
this.chkMaintainStock.Name = "chkMaintainStock";
this.chkMaintainStock.Size = new System.Drawing.Size(89, 17);
this.chkMaintainStock.TabIndex = 71;
this.chkMaintainStock.Text = "For Purchase";
this.chkMaintainStock.UseVisualStyleBackColor = true;
//
// chkInUse
//
this.chkInUse.AutoSize = true;
this.chkInUse.Location = new System.Drawing.Point(178, 86);
this.chkInUse.Name = "chkInUse";
this.chkInUse.Size = new System.Drawing.Size(65, 17);
this.chkInUse.TabIndex = 70;
this.chkInUse.Text = "For Sale";
this.chkInUse.UseVisualStyleBackColor = true;
//
// btnAdd
//
this.btnAdd.Location = new System.Drawing.Point(35, 117);
this.btnAdd.Name = "btnAdd";
this.btnAdd.Size = new System.Drawing.Size(75, 23);
this.btnAdd.TabIndex = 68;
this.btnAdd.Text = "&Add";
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
//
// btnDelete
//
this.btnDelete.Location = new System.Drawing.Point(115, 117);
this.btnDelete.Name = "btnDelete";
this.btnDelete.Size = new System.Drawing.Size(75, 23);
this.btnDelete.TabIndex = 69;
this.btnDelete.Text = "&Delete";
//
// btnNavFirst
//
this.btnNavFirst.Location = new System.Drawing.Point(67, 147);
this.btnNavFirst.Name = "btnNavFirst";
this.btnNavFirst.Size = new System.Drawing.Size(40, 23);
this.btnNavFirst.TabIndex = 63;
this.btnNavFirst.Text = "<<";
//
// btnNavPrev
//
this.btnNavPrev.Location = new System.Drawing.Point(107, 147);
this.btnNavPrev.Name = "btnNavPrev";
this.btnNavPrev.Size = new System.Drawing.Size(35, 23);
this.btnNavPrev.TabIndex = 64;
this.btnNavPrev.Text = "<";
//
// lblNavLocation
//
this.lblNavLocation.BackColor = System.Drawing.Color.White;
this.lblNavLocation.Location = new System.Drawing.Point(139, 147);
this.lblNavLocation.Name = "lblNavLocation";
this.lblNavLocation.Size = new System.Drawing.Size(95, 23);
this.lblNavLocation.TabIndex = 65;
this.lblNavLocation.Text = "No Records";
this.lblNavLocation.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// btnNavNext
//
this.btnNavNext.Location = new System.Drawing.Point(235, 147);
this.btnNavNext.Name = "btnNavNext";
this.btnNavNext.Size = new System.Drawing.Size(35, 23);
this.btnNavNext.TabIndex = 66;
this.btnNavNext.Text = ">";
//
// btnLast
//
this.btnLast.Location = new System.Drawing.Point(275, 147);
this.btnLast.Name = "btnLast";
this.btnLast.Size = new System.Drawing.Size(40, 23);
this.btnLast.TabIndex = 67;
this.btnLast.Text = ">>";
//
// txtName
//
this.txtName.AccessibleName = "";
this.txtName.Location = new System.Drawing.Point(94, 48);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(254, 20);
this.txtName.TabIndex = 57;
//
// btnUpdate
//
this.btnUpdate.AccessibleName = "Done";
this.btnUpdate.Location = new System.Drawing.Point(195, 117);
this.btnUpdate.Name = "btnUpdate";
this.btnUpdate.Size = new System.Drawing.Size(72, 24);
this.btnUpdate.TabIndex = 62;
this.btnUpdate.Text = "&Update";
//
// btnExit
//
this.btnExit.AccessibleName = "Done";
this.btnExit.Location = new System.Drawing.Point(273, 117);
this.btnExit.Name = "btnExit";
this.btnExit.Size = new System.Drawing.Size(72, 24);
this.btnExit.TabIndex = 61;
this.btnExit.Text = "E&xit";
//
// txtUniqueID
//
this.txtUniqueID.AccessibleName = "Unique ID";
this.txtUniqueID.Enabled = false;
this.txtUniqueID.Location = new System.Drawing.Point(94, 13);
this.txtUniqueID.Name = "txtUniqueID";
this.txtUniqueID.Size = new System.Drawing.Size(254, 20);
this.txtUniqueID.TabIndex = 60;
this.txtUniqueID.Text = "UniqueID";
this.txtUniqueID.WordWrap = false;
//
// Label2
//
this.Label2.AutoSize = true;
this.Label2.Location = new System.Drawing.Point(53, 48);
this.Label2.Name = "Label2";
this.Label2.Size = new System.Drawing.Size(35, 13);
this.Label2.TabIndex = 58;
this.Label2.Text = "Name";
//
// Label1
//
this.Label1.AutoSize = true;
this.Label1.Location = new System.Drawing.Point(33, 13);
this.Label1.Name = "Label1";
this.Label1.Size = new System.Drawing.Size(55, 13);
this.Label1.TabIndex = 59;
this.Label1.Text = "Unique ID";
//
// txtTaxRate
//
this.txtTaxRate.AccessibleName = "Phone 1";
this.txtTaxRate.Location = new System.Drawing.Point(94, 83);
this.txtTaxRate.Name = "txtTaxRate";
this.txtTaxRate.Size = new System.Drawing.Size(65, 20);
this.txtTaxRate.TabIndex = 72;
this.txtTaxRate.Text = "0";
this.txtTaxRate.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// Label5
//
this.Label5.AutoSize = true;
this.Label5.Location = new System.Drawing.Point(15, 83);
this.Label5.Name = "Label5";
this.Label5.Size = new System.Drawing.Size(73, 13);
this.Label5.TabIndex = 73;
this.Label5.Text = "Discount Limit";
//
// ProductTypes
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(373, 180);
this.Controls.Add(this.txtTaxRate);
this.Controls.Add(this.Label5);
this.Controls.Add(this.chkMaintainStock);
this.Controls.Add(this.chkInUse);
this.Controls.Add(this.btnAdd);
this.Controls.Add(this.btnDelete);
this.Controls.Add(this.btnNavFirst);
this.Controls.Add(this.btnNavPrev);
this.Controls.Add(this.lblNavLocation);
this.Controls.Add(this.btnNavNext);
this.Controls.Add(this.btnLast);
this.Controls.Add(this.txtName);
this.Controls.Add(this.btnUpdate);
this.Controls.Add(this.btnExit);
this.Controls.Add(this.txtUniqueID);
this.Controls.Add(this.Label2);
this.Controls.Add(this.Label1);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ProductTypes";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Product Types";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
internal System.Windows.Forms.CheckBox chkMaintainStock;
internal System.Windows.Forms.CheckBox chkInUse;
internal System.Windows.Forms.Button btnAdd;
internal System.Windows.Forms.Button btnDelete;
internal System.Windows.Forms.Button btnNavFirst;
internal System.Windows.Forms.Button btnNavPrev;
internal System.Windows.Forms.Label lblNavLocation;
internal System.Windows.Forms.Button btnNavNext;
internal System.Windows.Forms.Button btnLast;
internal System.Windows.Forms.TextBox txtName;
internal System.Windows.Forms.Button btnUpdate;
internal System.Windows.Forms.Button btnExit;
internal System.Windows.Forms.TextBox txtUniqueID;
internal System.Windows.Forms.Label Label2;
internal System.Windows.Forms.Label Label1;
internal System.Windows.Forms.TextBox txtTaxRate;
internal System.Windows.Forms.Label Label5;
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Tanshu.Accounts.PointOfSale
{
public partial class ProductTypes : Form
{
public ProductTypes()
{
InitializeComponent();
}
private void btnAdd_Click(object sender, EventArgs e)
{
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,473 @@
namespace Tanshu.Accounts.PointOfSale
{
partial class ProductsForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.Label4 = new System.Windows.Forms.Label();
this.txtSalePrice = new System.Windows.Forms.TextBox();
this.bsProducts = new System.Windows.Forms.BindingSource(this.components);
this.GroupBox1 = new System.Windows.Forms.GroupBox();
this.btnAddCategory = new System.Windows.Forms.Button();
this.cmbProductTypes = new System.Windows.Forms.ComboBox();
this.bsTypes = new System.Windows.Forms.BindingSource(this.components);
this.cmbUnits = new System.Windows.Forms.ComboBox();
this.bsUnits = new System.Windows.Forms.BindingSource(this.components);
this.Label7 = new System.Windows.Forms.Label();
this.Label3 = new System.Windows.Forms.Label();
this.txtName = new System.Windows.Forms.TextBox();
this.Label2 = new System.Windows.Forms.Label();
this.btnNavFirst = new System.Windows.Forms.Button();
this.btnNavPrev = new System.Windows.Forms.Button();
this.lblNavLocation = new System.Windows.Forms.Label();
this.btnNavNext = new System.Windows.Forms.Button();
this.btnLast = new System.Windows.Forms.Button();
this.txtUniqueID = new System.Windows.Forms.TextBox();
this.Label1 = new System.Windows.Forms.Label();
this.btnAdd = new System.Windows.Forms.Button();
this.btnDelete = new System.Windows.Forms.Button();
this.btnUpdate = new System.Windows.Forms.Button();
this.btnExit = new System.Windows.Forms.Button();
this.txtMinimumLevel = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.txtMaximumLevel = new System.Windows.Forms.TextBox();
this.label9 = new System.Windows.Forms.Label();
this.chkDiscontinued = new System.Windows.Forms.CheckBox();
this.cmbSalesLedger = new System.Windows.Forms.ComboBox();
this.label5 = new System.Windows.Forms.Label();
this.cmbSalesTax = new System.Windows.Forms.ComboBox();
this.bsSalesTax = new System.Windows.Forms.BindingSource(this.components);
this.label10 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.bsProducts)).BeginInit();
this.GroupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.bsTypes)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bsUnits)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bsSalesTax)).BeginInit();
this.SuspendLayout();
//
// Label4
//
this.Label4.AutoSize = true;
this.Label4.Location = new System.Drawing.Point(13, 148);
this.Label4.Name = "Label4";
this.Label4.Size = new System.Drawing.Size(60, 13);
this.Label4.TabIndex = 59;
this.Label4.Text = "Sales Price";
//
// txtSalePrice
//
this.txtSalePrice.AccessibleName = "Phone 1";
this.txtSalePrice.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsProducts, "SalePrice", true));
this.txtSalePrice.Location = new System.Drawing.Point(13, 164);
this.txtSalePrice.Name = "txtSalePrice";
this.txtSalePrice.Size = new System.Drawing.Size(74, 20);
this.txtSalePrice.TabIndex = 53;
this.txtSalePrice.Text = "0";
//
// bsProducts
//
this.bsProducts.DataSource = typeof(Tanshu.Accounts.Entities.Product);
this.bsProducts.AddingNew += new System.ComponentModel.AddingNewEventHandler(this.bsProducts_AddingNew);
this.bsProducts.PositionChanged += new System.EventHandler(this.bsProducts_PositionChanged);
//
// GroupBox1
//
this.GroupBox1.Controls.Add(this.btnAddCategory);
this.GroupBox1.Controls.Add(this.cmbProductTypes);
this.GroupBox1.Controls.Add(this.cmbUnits);
this.GroupBox1.Controls.Add(this.Label7);
this.GroupBox1.Controls.Add(this.Label3);
this.GroupBox1.Controls.Add(this.txtName);
this.GroupBox1.Controls.Add(this.Label2);
this.GroupBox1.Location = new System.Drawing.Point(12, 37);
this.GroupBox1.Name = "GroupBox1";
this.GroupBox1.Size = new System.Drawing.Size(312, 102);
this.GroupBox1.TabIndex = 52;
this.GroupBox1.TabStop = false;
//
// btnAddCategory
//
this.btnAddCategory.Location = new System.Drawing.Point(281, 72);
this.btnAddCategory.Name = "btnAddCategory";
this.btnAddCategory.Size = new System.Drawing.Size(25, 21);
this.btnAddCategory.TabIndex = 37;
this.btnAddCategory.Text = "+";
this.btnAddCategory.Click += new System.EventHandler(this.btnAddCategory_Click);
//
// cmbProductTypes
//
this.cmbProductTypes.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.bsProducts, "ProductTypeID", true));
this.cmbProductTypes.DataSource = this.bsTypes;
this.cmbProductTypes.DisplayMember = "Name";
this.cmbProductTypes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbProductTypes.Location = new System.Drawing.Point(94, 72);
this.cmbProductTypes.Name = "cmbProductTypes";
this.cmbProductTypes.Size = new System.Drawing.Size(181, 21);
this.cmbProductTypes.TabIndex = 35;
this.cmbProductTypes.ValueMember = "ProductTypeID";
//
// bsTypes
//
this.bsTypes.DataSource = typeof(Tanshu.Accounts.Entities.ProductGroup);
//
// cmbUnits
//
this.cmbUnits.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.bsProducts, "Units", true));
this.cmbUnits.DataSource = this.bsUnits;
this.cmbUnits.DisplayMember = "Description";
this.cmbUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbUnits.Location = new System.Drawing.Point(94, 45);
this.cmbUnits.Name = "cmbUnits";
this.cmbUnits.Size = new System.Drawing.Size(212, 21);
this.cmbUnits.TabIndex = 34;
this.cmbUnits.ValueMember = "Description";
//
// bsUnits
//
this.bsUnits.DataSource = typeof(Tanshu.Accounts.Helpers.StringType);
//
// Label7
//
this.Label7.AutoSize = true;
this.Label7.Location = new System.Drawing.Point(12, 75);
this.Label7.Name = "Label7";
this.Label7.Size = new System.Drawing.Size(76, 13);
this.Label7.TabIndex = 33;
this.Label7.Text = "Product Types";
//
// Label3
//
this.Label3.AutoSize = true;
this.Label3.Location = new System.Drawing.Point(57, 48);
this.Label3.Name = "Label3";
this.Label3.Size = new System.Drawing.Size(31, 13);
this.Label3.TabIndex = 30;
this.Label3.Text = "Units";
//
// txtName
//
this.txtName.AccessibleName = "";
this.txtName.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsProducts, "Name", true));
this.txtName.Location = new System.Drawing.Point(94, 19);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(212, 20);
this.txtName.TabIndex = 0;
//
// Label2
//
this.Label2.AutoSize = true;
this.Label2.Location = new System.Drawing.Point(53, 22);
this.Label2.Name = "Label2";
this.Label2.Size = new System.Drawing.Size(35, 13);
this.Label2.TabIndex = 28;
this.Label2.Text = "Name";
//
// btnNavFirst
//
this.btnNavFirst.Location = new System.Drawing.Point(40, 334);
this.btnNavFirst.Name = "btnNavFirst";
this.btnNavFirst.Size = new System.Drawing.Size(40, 23);
this.btnNavFirst.TabIndex = 44;
this.btnNavFirst.Text = "<<";
this.btnNavFirst.Click += new System.EventHandler(this.btnNavFirst_Click);
//
// btnNavPrev
//
this.btnNavPrev.Location = new System.Drawing.Point(86, 334);
this.btnNavPrev.Name = "btnNavPrev";
this.btnNavPrev.Size = new System.Drawing.Size(35, 23);
this.btnNavPrev.TabIndex = 45;
this.btnNavPrev.Text = "<";
this.btnNavPrev.Click += new System.EventHandler(this.btnNavPrev_Click);
//
// lblNavLocation
//
this.lblNavLocation.BackColor = System.Drawing.Color.White;
this.lblNavLocation.Location = new System.Drawing.Point(118, 334);
this.lblNavLocation.Name = "lblNavLocation";
this.lblNavLocation.Size = new System.Drawing.Size(95, 23);
this.lblNavLocation.TabIndex = 46;
this.lblNavLocation.Text = "No Records";
this.lblNavLocation.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lblNavLocation.Click += new System.EventHandler(this.lblNavLocation_Click);
//
// btnNavNext
//
this.btnNavNext.Location = new System.Drawing.Point(214, 334);
this.btnNavNext.Name = "btnNavNext";
this.btnNavNext.Size = new System.Drawing.Size(35, 23);
this.btnNavNext.TabIndex = 47;
this.btnNavNext.Text = ">";
this.btnNavNext.Click += new System.EventHandler(this.btnNavNext_Click);
//
// btnLast
//
this.btnLast.Location = new System.Drawing.Point(254, 334);
this.btnLast.Name = "btnLast";
this.btnLast.Size = new System.Drawing.Size(40, 23);
this.btnLast.TabIndex = 48;
this.btnLast.Text = ">>";
this.btnLast.Click += new System.EventHandler(this.btnLast_Click);
//
// txtUniqueID
//
this.txtUniqueID.AccessibleName = "Unique ID";
this.txtUniqueID.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsProducts, "Code", true));
this.txtUniqueID.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.bsProducts, "ProductID", true));
this.txtUniqueID.Enabled = false;
this.txtUniqueID.Location = new System.Drawing.Point(75, 12);
this.txtUniqueID.Name = "txtUniqueID";
this.txtUniqueID.Size = new System.Drawing.Size(249, 20);
this.txtUniqueID.TabIndex = 37;
this.txtUniqueID.Text = "UniqueID";
this.txtUniqueID.WordWrap = false;
//
// Label1
//
this.Label1.AutoSize = true;
this.Label1.Location = new System.Drawing.Point(37, 15);
this.Label1.Name = "Label1";
this.Label1.Size = new System.Drawing.Size(32, 13);
this.Label1.TabIndex = 36;
this.Label1.Text = "Code";
this.Label1.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// btnAdd
//
this.btnAdd.Location = new System.Drawing.Point(9, 300);
this.btnAdd.Name = "btnAdd";
this.btnAdd.Size = new System.Drawing.Size(75, 23);
this.btnAdd.TabIndex = 72;
this.btnAdd.Text = "&Add";
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
//
// btnDelete
//
this.btnDelete.Location = new System.Drawing.Point(91, 300);
this.btnDelete.Name = "btnDelete";
this.btnDelete.Size = new System.Drawing.Size(75, 23);
this.btnDelete.TabIndex = 73;
this.btnDelete.Text = "&Delete";
this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
//
// btnUpdate
//
this.btnUpdate.AccessibleName = "Done";
this.btnUpdate.Location = new System.Drawing.Point(173, 300);
this.btnUpdate.Name = "btnUpdate";
this.btnUpdate.Size = new System.Drawing.Size(72, 24);
this.btnUpdate.TabIndex = 71;
this.btnUpdate.Text = "&Update";
this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click);
//
// btnExit
//
this.btnExit.AccessibleName = "Done";
this.btnExit.Location = new System.Drawing.Point(252, 300);
this.btnExit.Name = "btnExit";
this.btnExit.Size = new System.Drawing.Size(72, 24);
this.btnExit.TabIndex = 70;
this.btnExit.Text = "E&xit";
this.btnExit.Click += new System.EventHandler(this.btnExit_Click);
//
// txtMinimumLevel
//
this.txtMinimumLevel.AccessibleName = "Phone 1";
this.txtMinimumLevel.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsProducts, "MinimumLevel", true));
this.txtMinimumLevel.Location = new System.Drawing.Point(10, 264);
this.txtMinimumLevel.Name = "txtMinimumLevel";
this.txtMinimumLevel.Size = new System.Drawing.Size(77, 20);
this.txtMinimumLevel.TabIndex = 75;
this.txtMinimumLevel.Text = "0";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(10, 248);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(77, 13);
this.label6.TabIndex = 74;
this.label6.Text = "Minimum Level";
//
// txtMaximumLevel
//
this.txtMaximumLevel.AccessibleName = "Phone 1";
this.txtMaximumLevel.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsProducts, "MaximumLevel", true));
this.txtMaximumLevel.Location = new System.Drawing.Point(96, 264);
this.txtMaximumLevel.Name = "txtMaximumLevel";
this.txtMaximumLevel.Size = new System.Drawing.Size(85, 20);
this.txtMaximumLevel.TabIndex = 77;
this.txtMaximumLevel.Text = "0";
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(93, 249);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(80, 13);
this.label9.TabIndex = 76;
this.label9.Text = "Maximum Level";
//
// chkDiscontinued
//
this.chkDiscontinued.AutoSize = true;
this.chkDiscontinued.DataBindings.Add(new System.Windows.Forms.Binding("Checked", this.bsProducts, "Discontinued", true));
this.chkDiscontinued.Location = new System.Drawing.Point(233, 272);
this.chkDiscontinued.Name = "chkDiscontinued";
this.chkDiscontinued.Size = new System.Drawing.Size(88, 17);
this.chkDiscontinued.TabIndex = 78;
this.chkDiscontinued.Text = "Discontinued";
this.chkDiscontinued.UseVisualStyleBackColor = true;
//
// cmbSalesLedger
//
this.cmbSalesLedger.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.bsProducts, "SaleLedgerID", true));
this.cmbSalesLedger.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbSalesLedger.Location = new System.Drawing.Point(93, 163);
this.cmbSalesLedger.Name = "cmbSalesLedger";
this.cmbSalesLedger.Size = new System.Drawing.Size(137, 21);
this.cmbSalesLedger.TabIndex = 80;
this.cmbSalesLedger.ValueMember = "LedgerID";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(98, 148);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(69, 13);
this.label5.TabIndex = 79;
this.label5.Text = "Sales Ledger";
//
// cmbSalesTax
//
this.cmbSalesTax.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.bsProducts, "SaleTaxID", true));
this.cmbSalesTax.DataSource = this.bsSalesTax;
this.cmbSalesTax.DisplayMember = "Name";
this.cmbSalesTax.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbSalesTax.Location = new System.Drawing.Point(236, 163);
this.cmbSalesTax.Name = "cmbSalesTax";
this.cmbSalesTax.Size = new System.Drawing.Size(91, 21);
this.cmbSalesTax.TabIndex = 82;
this.cmbSalesTax.ValueMember = "LedgerID";
//
// bsSalesTax
//
this.bsSalesTax.DataSource = typeof(Tanshu.Accounts.Entities.Tax);
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(241, 148);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(54, 13);
this.label10.TabIndex = 81;
this.label10.Text = "Sales Tax";
//
// ProductsForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(336, 365);
this.Controls.Add(this.cmbSalesTax);
this.Controls.Add(this.Label1);
this.Controls.Add(this.label10);
this.Controls.Add(this.cmbSalesLedger);
this.Controls.Add(this.label5);
this.Controls.Add(this.chkDiscontinued);
this.Controls.Add(this.txtMaximumLevel);
this.Controls.Add(this.label9);
this.Controls.Add(this.txtMinimumLevel);
this.Controls.Add(this.label6);
this.Controls.Add(this.btnAdd);
this.Controls.Add(this.btnDelete);
this.Controls.Add(this.btnUpdate);
this.Controls.Add(this.btnExit);
this.Controls.Add(this.Label4);
this.Controls.Add(this.txtSalePrice);
this.Controls.Add(this.GroupBox1);
this.Controls.Add(this.btnNavFirst);
this.Controls.Add(this.btnNavPrev);
this.Controls.Add(this.lblNavLocation);
this.Controls.Add(this.btnNavNext);
this.Controls.Add(this.btnLast);
this.Controls.Add(this.txtUniqueID);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ProductsForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Products";
this.Load += new System.EventHandler(this.Products_Load);
((System.ComponentModel.ISupportInitialize)(this.bsProducts)).EndInit();
this.GroupBox1.ResumeLayout(false);
this.GroupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.bsTypes)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bsUnits)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bsSalesTax)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
internal System.Windows.Forms.Label Label4;
internal System.Windows.Forms.TextBox txtSalePrice;
internal System.Windows.Forms.GroupBox GroupBox1;
internal System.Windows.Forms.Button btnAddCategory;
internal System.Windows.Forms.ComboBox cmbProductTypes;
internal System.Windows.Forms.ComboBox cmbUnits;
internal System.Windows.Forms.Label Label7;
internal System.Windows.Forms.Label Label3;
internal System.Windows.Forms.TextBox txtName;
internal System.Windows.Forms.Label Label2;
internal System.Windows.Forms.Button btnNavFirst;
internal System.Windows.Forms.Button btnNavPrev;
internal System.Windows.Forms.Label lblNavLocation;
internal System.Windows.Forms.Button btnNavNext;
internal System.Windows.Forms.Button btnLast;
internal System.Windows.Forms.TextBox txtUniqueID;
internal System.Windows.Forms.Label Label1;
internal System.Windows.Forms.Button btnAdd;
internal System.Windows.Forms.Button btnDelete;
internal System.Windows.Forms.Button btnUpdate;
internal System.Windows.Forms.Button btnExit;
internal System.Windows.Forms.TextBox txtMinimumLevel;
internal System.Windows.Forms.Label label6;
internal System.Windows.Forms.TextBox txtMaximumLevel;
internal System.Windows.Forms.Label label9;
private System.Windows.Forms.CheckBox chkDiscontinued;
internal System.Windows.Forms.ComboBox cmbSalesLedger;
internal System.Windows.Forms.Label label5;
internal System.Windows.Forms.ComboBox cmbSalesTax;
internal System.Windows.Forms.Label label10;
private System.Windows.Forms.BindingSource bsProducts;
private System.Windows.Forms.BindingSource bsUnits;
private System.Windows.Forms.BindingSource bsTypes;
private System.Windows.Forms.BindingSource bsSalesTax;
}
}

View File

@ -0,0 +1,250 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;
using Tanshu.Accounts.Helpers;
using Tanshu.Accounts.Contracts;
using Tanshu.Accounts.Repository;
using Tanshu.Accounts.Entities;
using Tanshu.Accounts.Entities.Auth;
namespace Tanshu.Accounts.PointOfSale
{
public partial class ProductsForm : Form
{
bool createOnly = false;
IList<Product> productList = new List<Product>();
#region Form Load
public ProductsForm()
{
InitializeComponent();
}
private void Products_Load(object sender, EventArgs e)
{
productList = ProductBI.GetProducts();
bsProducts.DataSource = productList;
FillCombos();
bsProducts.MoveFirst();
}
private void FillCombos()
{
bsUnits.DataSource = new StringType[17] {new StringType ( "Cms"),
new StringType ("Meter"),
new StringType ("Quintal"),
new StringType ("Can"),
new StringType ("Gms"),
new StringType ("Rs."),
new StringType ("Piece"),
new StringType ("Petti"),
new StringType ("No.'s"),
new StringType ("Liter"),
new StringType ("Box"),
new StringType ("Tin"),
new StringType ("Dibbi"),
new StringType ("Plate"),
new StringType ("Kg."),
new StringType ("Bottle"),
new StringType ("Pack" )};
bsTypes.DataSource = new ProductGroupBI().GetProductGroups();
//bsPurchaseLedgers.DataSource = new LedgerBI().GetLedgersOfType('P');
//bsSalesLedgers.DataSource = new LedgerBI().GetLedgersOfType('X');
//bsSalesTax.DataSource = new LedgerBI().GetLedgersOfType('T');
//bsPurchaseTax.DataSource = new LedgerBI().GetLedgersOfType('T');
}
#endregion
#region Buttons
private void btnAdd_Click(object sender, EventArgs e)
{
if (btnAdd.Text == "&Add")
{
bsProducts.AddNew();
LockControls(true);
this.lblNavLocation.Text = "Add New";
txtName.Select();
}
else
{
if (!ValidateValues())
{
MessageBox.Show("Missing Information: Please check the form.");
bsProducts.CancelEdit();
}
else
{
bsProducts.EndEdit();
Save(true);
if (createOnly)
btnExit_Click(sender, e);
else
{
productList = ProductBI.GetProducts();
bsProducts.DataSource = productList;
LockControls(false);
}
}
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (btnDelete.Text == "&Delete")
{
if (productList.Count() > 0)
{
if (MessageBox.Show("Are you sure?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
{
if (ProductBI.Delete(productList.Single(p => p.Code == Convert.ToInt32(txtUniqueID.Text)).ProductID))
{
productList = ProductBI.GetProducts();
btnNavFirst_Click(sender, e);
}
}
}
}
else
{
LockControls(false);
bsProducts.CancelEdit();
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Are you sure?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
{
Save(false);
bsProducts.ResetItem(bsProducts.Position);
}
}
#endregion
#region Add / Edit / Delete
private bool ValidateValues()
{
bool returnType;
returnType = (bool)(txtName.Text.Trim().Length > 0 ? true : false);
returnType = (cmbSalesLedger.SelectedValue == null ? false : true);
returnType = (cmbSalesTax.SelectedValue == null ? false : true);
return returnType;
}
private bool Save(bool addNew)
{
#region Setup Products
User user = Session.User;
Product product = new Product();
if (!addNew)
product = ProductBI.GetProduct(productList.ElementAt(bsProducts.Position).ProductID);
product.Name = txtName.Text;
product.MinimumLevel = Convert.ToDecimal(txtMinimumLevel.Text);
product.MaximumLevel = Convert.ToDecimal(txtMaximumLevel.Text);
product.Units = cmbUnits.Text;
product.ProductGroup = new ProductGroupBI().GetProductGroup((int)cmbProductTypes.SelectedValue);
product.SalePrice = Convert.ToDecimal(txtSalePrice.Text);
product.Discontinued = chkDiscontinued.Checked;
product.Tax = new Tax();
if (addNew)
ProductBI.Insert(product);
else
ProductBI.Update(product);
return true;
#endregion
}
#endregion
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void LockControls(bool enable)
{
if (enable)
{
btnAdd.Text = "&Save";
btnDelete.Text = "&Cancel";
}
else
{
btnAdd.Text = "&Add";
btnDelete.Text = "&Delete";
}
btnExit.Enabled = !enable;
btnLast.Enabled = !enable;
btnNavPrev.Enabled = !enable;
btnNavNext.Enabled = !enable;
btnUpdate.Enabled = !enable;
btnNavFirst.Enabled = !enable;
}
private void btnAddCategory_Click(object sender, EventArgs e)
{
ProductTypes frm = new ProductTypes();
frm.ShowDialog();
frm.Dispose();
FillCombos();
cmbProductTypes.SelectedIndex = 0;
}
#region Move Buttons
private void btnNavFirst_Click(object sender, EventArgs e)
{
this.bsProducts.MoveFirst();
}
private void btnNavPrev_Click(object sender, EventArgs e)
{
this.bsProducts.MovePrevious();
}
private void btnNavNext_Click(object sender, EventArgs e)
{
this.bsProducts.MoveNext();
}
private void btnLast_Click(object sender, EventArgs e)
{
this.bsProducts.MoveLast();
}
private void lblNavLocation_Click(object sender, EventArgs e)
{
using (SelectProduct selectProduct = new SelectProduct(ProductBI.GetFilteredProducts, true))
{
selectProduct.ShowDialog();
if (selectProduct.SelectedItem != null)
{
bsProducts.Position = GetPosition(productList, selectProduct.SelectedItem.ProductID);
}
}
}
#endregion
#region Binding Source Events
private void bsProducts_AddingNew(object sender, AddingNewEventArgs e)
{
e.NewObject = new Product();
}
private void bsProducts_PositionChanged(object sender, EventArgs e)
{
this.lblNavLocation.Text = string.Format("{0} of {1}", bsProducts.Position + 1, bsProducts.Count);
}
#endregion
private int GetPosition(IList<Product> list, int id)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i].ProductID == id)
return i;
}
return 0;
}
}
}

View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="bsProducts.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="bsTypes.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>251, 17</value>
</metadata>
<metadata name="bsUnits.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>123, 17</value>
</metadata>
<metadata name="bsSalesTax.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>145, 54</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>102</value>
</metadata>
</root>