Skip to content

Instantly share code, notes, and snippets.

@phatty
Created March 13, 2013 10:12
Show Gist options
  • Save phatty/5150785 to your computer and use it in GitHub Desktop.
Save phatty/5150785 to your computer and use it in GitHub Desktop.
using System;
using System.Data;
using System.Linq;
using System.Collections;
using System.Collections.Specialized;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Collections.Generic;
using CSP_db_production_EntityDataAccess.Access;
using CSP_db_production_Utility.DataGridUtility;
using System.Threading.Tasks;
namespace CSP_db_production_DataEntryForm_Entity
{
public partial class PackageSelectorForm : Form
{
protected DataTable ListOfPMO;
protected DataTable AvailablePackage;
protected DataTable SelectedPackage;
protected DataTable DeselectedPackage;
protected SqlConnection ConnectionInstance;
protected InternalDisplayState currentDisplayMode;
protected string Cust_Digit;
protected string ListedPMO_No;
protected string ListedLotDigit;
protected string ListedProd_Code;
protected string ListedLevel_Priority;
protected string ListedTypeDigit;
public ChildPackageChangeDelegate ChildFormChangeCallBack;
protected PackageSelectorForm()
{
}
public PackageSelectorForm(SqlConnection ConnectionInstance, string Cust_Digit)
: this(ConnectionInstance, Cust_Digit ,InternalDisplayState.Lock)
{
}
public PackageSelectorForm(SqlConnection ConnectionInstance, string Cust_Digit, InternalDisplayState displayMode)
{
InitializeComponent();
this.ConnectionInstance = ConnectionInstance;
this.currentDisplayMode = displayMode;
this.Cust_Digit = Cust_Digit;
}
private void PackageSelectorForm_Load(object sender, EventArgs e)
{
SetFormPreLoadState(new object());
}
private void SetFormPreLoadState (object o)
{
var DBO = new PMORepository(ConnectionInstance);
ListOfPMO = DBO.GetPMOsOrderBatch(this.Cust_Digit);
cmbPMONo.DataSource = ListOfPMO.AsEnumerable().Select(r => r.Field<string>("PMO_No")).Distinct().ToList<string>();
SetListBoxAndCombobox(o);
CompleteLoad(o);
}
private void CompleteLoad(object o)
{
if (currentDisplayMode == InternalDisplayState.Lock || currentDisplayMode == InternalDisplayState.ReadOnly)
{
btnDeleteSelectPackage.Enabled = false;
btnSelectOne.Enabled = false;
btnSelectAll.Enabled = false;
}
else if (currentDisplayMode == InternalDisplayState.EditMode)
{
btnDeleteSelectPackage.Enabled = true;
btnSelectOne.Enabled = true;
btnSelectAll.Enabled = true;
}
}
private void ComboBox_SelectionChangeCommitted(object sender, EventArgs e)
{
SetListBoxAndCombobox(sender);
}
protected void SetListBoxAndCombobox(object sender)
{
Type t = sender.GetType();
var name = t == typeof(ComboBox) ? ((ComboBox)sender).Name : sender.ToString();
var PMO_No = cmbPMONo.SelectedValue.ToString();
if (name != cmbProduct.Name && name != cmbLotDigit.Name)
{
var Product = ListOfPMO.AsEnumerable().Where(r => r.Field<string>("PMO_No") == PMO_No)
.Select(r => new
{
Prod_Code = r.Field<string>("Prod_Code").ToString(),
Prod_Name = r.Field<string>("Prod_Name").ToString()
}).Distinct().ToList();
cmbProduct.DataSource = Product;
cmbProduct.ValueMember = "Prod_Code";
cmbProduct.DisplayMember = "Prod_Name";
}
var Prod_Code = cmbProduct.SelectedValue.ToString();
if (name != cmbLotDigit.Name && name != cmbPackageLevel.Name)
{
var Lot = ListOfPMO.AsEnumerable().Where(r => r.Field<string>("PMO_No") == PMO_No && r.Field<string>("Prod_Code") == Prod_Code)
.Select(x => x.Field<decimal>("LotDigit")).Distinct()
.ToList<decimal>();
cmbLotDigit.DataSource = Lot;
}
var LotDigit = cmbLotDigit.SelectedValue.ToString();
if (name != cmbLotDigit.Name && name != cmbPackageLevel.Name)
{
var LevelPriority = (new PackageLevelRepository(this.ConnectionInstance)).GetListOfPackageLevel(PMO_No, Prod_Code);
LevelPriority.Columns.AddRange ( new DataColumn [] {
new System.Data.DataColumn("Display", typeof(string)),
new System.Data.DataColumn("Key", typeof(string)),
});
LevelPriority.AsEnumerable().ToList<DataRow>().ForEach(r => r["Display"] = r["Level_Priority"].ToString() + " : " + r["UnitPrimary"].ToString() + " : " + r["TypeDigit"].ToString());
LevelPriority.AsEnumerable().ToList<DataRow>().ForEach(r => r["Key"] = r["Level_Priority"] + ":" + r["TypeDigit"].ToString());
cmbPackageLevel.DataSource = LevelPriority;
cmbPackageLevel.ValueMember = "Key";
cmbPackageLevel.DisplayMember = "Display";
}
}
private void btnListAvailablePackage_Click(object sender, EventArgs e)
{
var PMO_No = cmbPMONo.SelectedValue.ToString();
var Prod_Code = cmbProduct.SelectedValue.ToString();
var Lot_Digit = cmbLotDigit.SelectedValue.ToString();
var Level_Priority = cmbPackageLevel.SelectedValue.ToString().Split(':')[0];
var TypeDigit = cmbPackageLevel.SelectedValue.ToString().Split(':')[1];
//Dictionary<Action<object>, object> EnableButton = new Dictionary<Action<object>, object>
// {
// { ((r)=>{}) , new object()}
// };
btnListAvailablePackage.Enabled = false;
Dictionary<Action<object>, object> EnableButton2 = new Dictionary<Action<object>, object>
{
{ delegate (object o){ btnListAvailablePackage.Enabled = true; } , new object()}
};
LoadAllPackage(PMO_No, Prod_Code, Lot_Digit, Level_Priority, TypeDigit, EnableButton2);
if (SelectedPackage == null)
{
PreSetDataGridViewSelectedPackageList(AvailablePackage, DataGridViewAvailablePackageList,ref SelectedPackage, DataGridViewSelectedPackageList);
}
if (DeselectedPackage == null)
{
DeselectedPackage = SelectedPackage.Clone();
}
}
protected void LoadAllPackage(string PMO_No,string Prod_Code,string Lot_Digit,string Level_Priority,string TypeDigit
, Dictionary<Action<object>, object> invokelist)
{
PackageRepository p = new PackageRepository(this.ConnectionInstance);
this.ListedPMO_No = PMO_No;
this.ListedLotDigit = Lot_Digit;
this.ListedProd_Code = Prod_Code;
this.ListedLevel_Priority = Level_Priority;
this.ListedTypeDigit = TypeDigit;
AvailablePackage = p.GetListOfPackage(PMO_No, Prod_Code, Lot_Digit, Level_Priority, TypeDigit);
AvailablePackage.AsEnumerable().ToList<DataRow>().ForEach((r) =>
{
if (r["PackStatus"].ToString() == "U") r["PackStatus"] = "ยังไม่ได้บรรจุ";
else r["PackStatus"] = "บรรจุแล้ว";
});
Dictionary<string, string> GridViewColumnMapper = new Dictionary<string, string>()
{
{"Barcode" , DisplayField.Barcode },
{"UnitPrimary" , DisplayField.UnitPrimary },
{"Seq" , DisplayField.Seq },
{"Item_Sn_Start" , DisplayField.Item_Sn_Start },
{"Item_Sn_End" , DisplayField.Item_Sn_End },
{"ItemCount" , DisplayField.ItemCount },
{"PackStatus" , DisplayField.PackStatus },
{"PackDate2" , DisplayField.PackDate },
{"PackageCount" , DisplayField.PackageCount },
};
Utility.UI.DataGridUtility.DataGridViewLoader DataGridViewLoader = new Utility.UI.DataGridUtility.DataGridViewLoader(this.DataGridViewAvailablePackageList, AvailablePackage, GridViewColumnMapper, invokelist);
DataGridViewLoader.LoadGrid();
}
private void PreSetDataGridViewSelectedPackageList(DataTable Source, DataGridView SourceGrid,ref DataTable Destination, DataGridView DestinationGrid)
{
Destination = Source.Clone();
DataGridViewTool.DataGridViewColumnAllColumnClone(SourceGrid, DestinationGrid);
}
private void btnSelectAll_Click(object sender, EventArgs e)
{
//Action _ = delegate{//(()=>{
DataGridViewAvailablePackageList.SelectAll();
MovePackage(AvailablePackage, DataGridViewAvailablePackageList, SelectedPackage, DataGridViewSelectedPackageList);
// };
}
private void btnSelectOne_Click(object sender, EventArgs e)
{
MovePackage(AvailablePackage, DataGridViewAvailablePackageList, SelectedPackage, DataGridViewSelectedPackageList);
}
private void btnDeleteSelectPackage_Click(object sender, EventArgs e)
{
RemoveSelectedPackage( SelectedPackage, DataGridViewSelectedPackageList );
}
protected void MovePackage(DataTable Source,DataGridView SourceGrid,DataTable Destination,DataGridView DestinationGrid)
{
string Barcode ;
string Seq ;
foreach (DataGridViewRow row in SourceGrid.SelectedRows)
{
Barcode = row.Cells[DisplayField.Barcode].Value.ToString();
Seq = row.Cells[DisplayField.Seq].Value.ToString();
DestinationGrid.Rows.Insert(DestinationGrid.Rows == null ? 0 : DestinationGrid.Rows.Count, DataGridViewTool.DataGridViewRowAllCellClone(row));
SourceGrid.Rows.Remove(row);
DataRow SelectedRow = Source.AsEnumerable().Where(r => r["PMO_No"].ToString() == this.ListedPMO_No
&& r["LotDigit"].ToString() == this.ListedLotDigit
&& r["Prod_Code"].ToString() == this.ListedProd_Code
&& r["Level_Priority"].ToString() == this.ListedLevel_Priority
&& r["TypeDigit"].ToString() == this.ListedTypeDigit
&& r["Barcode"].ToString() == Barcode
&& r["Seq"].ToString() == Seq).FirstOrDefault<DataRow>();
Destination.ImportRow(SelectedRow);
Source.Rows.Remove(SelectedRow);
}
}
protected void RemoveSelectedPackage(DataTable Target, DataGridView TargetGrid)
{
string Barcode;
string Seq;
foreach (DataGridViewRow row in TargetGrid.SelectedRows)
{
Barcode = row.Cells[DisplayField.Barcode].Value.ToString();
Seq = row.Cells[DisplayField.Seq].Value.ToString();
TargetGrid.Rows.Remove(row);
DataRow SelectedRow = Target.AsEnumerable().Where(r => r["PMO_No"].ToString() == this.ListedPMO_No
&& r["LotDigit"].ToString() == this.ListedLotDigit
&& r["Prod_Code"].ToString() == this.ListedProd_Code
&& r["Level_Priority"].ToString() == this.ListedLevel_Priority
&& r["TypeDigit"].ToString() == this.ListedTypeDigit
&& r["Barcode"].ToString() == Barcode
&& r["Seq"].ToString() == Seq).FirstOrDefault<DataRow>();
DeselectedPackage.ImportRow(SelectedRow);
Target.Rows.Remove(SelectedRow);
}
}
private void btnOk_Click(object sender, EventArgs e)
{
if (SelectedPackage.Rows!=null)
{
int numberOfPackage = SelectedPackage.Rows.Count;
var Sum = SelectedPackage.Compute("SUM(ItemCount)", "");
string Item_Sn_Start = SelectedPackage.Compute("MIN(Item_Sn_Start)", "").ToString();
string Item_Sn_End = SelectedPackage.Compute("MAX(Item_Sn_End)", "").ToString();
int numberOfItem = Sum is Int32||Sum is Decimal? Convert.ToInt32(Sum):0;
Tuple<DataTable, DataTable, int, int,string,string>
ret = Tuple.Create(SelectedPackage, DeselectedPackage, numberOfPackage, numberOfItem, Item_Sn_Start, Item_Sn_End);
ChildFormChangeCallBack(CrossFormMessageType.UpdateParent, ret);
}
this.Close();
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void PackageSelectorForm_FormClosed(object sender, FormClosedEventArgs e)
{
ChildFormChangeCallBack(CrossFormMessageType.ChildInstanceRelease, null);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment