Created
March 13, 2013 10:12
-
-
Save phatty/5150785 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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