private void Setbill(List<BillItem>Bill)
{
List<bool> FindItemEpicor = new List<bool>();
List<bool> FindItemSldWrks = new List<bool>();
List<BillItem> AddBack = new List<BillItem>();
List<string> AddBack_Opts = new List<string>();
List<string> AddBack_Ops = new List<string>();
List<string> AddBack_Uom = new List<string>();
#region Locate items
//See if the part exists in the SolidWorks data
for (int i = 0; i < Bill.Count; i++)
{FindItemSldWrks.Add(false);}
//See if the part exists in the Epicor data
for (int i = 0; i < EngWBDS.Tables["ECOMtl"].Rows.Count; i++)
{
FindItemEpicor.Add(false);
BillItem Item = new BillItem();
Item.PartNumber = EngWBDS.Tables["ECOMtl"].Rows[i]["MtlPartNum"].ToString();
Item.Qty = EngWBDS.Tables["ECOMtl"].Rows[i]["QtyPer"].ToString();
AddBack.Add(Item);
//AddBack.Add(EngWBDS.Tables["ECOMtl"].Rows[i]["MtlPartNum"].ToString());
//AddBack_Qty.Add(EngWBDS.Tables["ECOMtl"].Rows[i]["QtyPer"].ToString());
AddBack_Ops.Add(EngWBDS.Tables["ECOMtl"].Rows[i]["RelatedOperation"].ToString());
AddBack_Uom.Add(EngWBDS.Tables["ECOMtl"].Rows[i]["UOMCode"].ToString());
}
for (int i = 0; i < Bill.Count; i++)
{
for (int j = 0; j < EngWBDS.Tables["ECOMtl"].Rows.Count; j++)
{
string DS_val = EngWBDS.Tables["ECOMtl"].Rows[j]["MtlPartNum"].ToString();
if (DS_val == Bill[i].PartNumber)
FindItemSldWrks[i] = true;
}
}
for (int i = 0; i < EngWBDS.Tables["ECOMtl"].Rows.Count; i++)
{
for (int j = 0; j < Bill.Count; j++)
{
if (EngWBDS.Tables["ECOMtl"].Rows[i]["MtlPartNum"].ToString() == Bill[j].PartNumber)
FindItemEpicor[i] = true;
}
}
#endregion
#region Determine what needs to be saved
AddBack = SafeParts(AddBack, AddBack_Ops,AddBack_Uom, out AddBack_Opts, out AddBack_Ops, out AddBack_Uom);
#endregion
#region Delete Missing Items
for (int i = EngWBDS.Tables["ECOMtl"].Rows.Count - 1; i > -1; i--)
{
if (!FindItemEpicor[i])
{
//Remove items
EngWBDS.Tables["ECOMtl"].Rows[i].Delete();
EngWB.Update(EngWBDS);
EngWBDS = EngWB.GetDatasetForTree(gid_txt.Text, parent_txt.Text, parentrev_txt.Text, "", null, false, false);
}
}
#endregion
int rowmod = EngWBDS.Tables["ECOMtl"].Rows.Count;
#region Add missing items
try
{
for (int i = 0; i < Bill.Count; i++)
{
if (!FindItemSldWrks[i])
{
try
{
//rowmod = EngWBDS.Tables["ECOMtl"].Rows.Count;
//Add item
EngWB.GetNewECOMtl(EngWBDS, gid_txt.Text, parent_txt.Text, parentrev_txt.Text, "");
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count-1]["MtlPartNum"] = Bill[i].PartNumber;
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count-1]["QtyPer"] = Bill[i].Qty;
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count-1]["RelatedOperation"] = ops_cbo.SelectedValue;
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count - 1]["OpDesc"] = EngWBDS.Tables["ECOOpr"].Rows[ops_cbo.SelectedIndex]["OpDesc"];
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count - 1]["PullAsAsm"] = false;
if (DataList.GetType(Bill[i].PartNumber) == "Purchased")
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count - 1]["ViewAsAsm"] = false;
else
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count - 1]["ViewAsAsm"] = true;
partnum_txt.Text = Bill[i].PartNumber;
DataTable ds = DataList.PartUOM(partnum_txt.Text);
uom_cbo.DataSource = ds;
uom_cbo.DisplayMember = "UOMCode";
uom_cbo.ValueMember = "UOMCode";
uom_cbo.SelectedIndex = 0;
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count - 1]["UOMCode"] = uom_cbo.SelectedValue;
decimal qty_val = decimal.Parse(Bill[i].Qty);
EngWBDS.Tables["ECOMtl"].Rows[EngWBDS.Tables["ECOMtl"].Rows.Count - 1]["QtyPer"] = qty_val;
EngWB.Update(EngWBDS);
EngWBDS = EngWB.GetDatasetForTree(gid_txt.Text, parent_txt.Text, parentrev_txt.Text, "", null, false, false);
}
catch { }
}
}
}
catch { }
#endregion
#region Add Saved items
try
{
for (int i = 0; i < AddBack.Count; i++)
{
rowmod = EngWBDS.Tables["ECOMtl"].Rows.Count;
//Add item
EngWB.GetNewECOMtl(EngWBDS, gid_txt.Text, parent_txt.Text, parentrev_txt.Text, "");
EngWBDS.Tables["ECOMtl"].Rows[rowmod]["MtlPartNum"] = AddBack[i];
EngWBDS.Tables["ECOMtl"].Rows[rowmod]["QtyPer"] = AddBack[i].Qty;
//EngWBDS.Tables["ECOMtl"].Rows[rowmod]["QtyPer"] = AddBack_Qty[i];
EngWBDS.Tables["ECOMtl"].Rows[rowmod]["RelatedOperation"] = AddBack_Ops[i];
EngWBDS.Tables["ECOMtl"].Rows[rowmod]["OpDesc"] = EngWBDS.Tables["ECOOpr"].Rows[ops_cbo.SelectedIndex]["OpDesc"];
char[] opts = AddBack_Opts[i].ToCharArray();
EngWBDS.Tables["ECOMtl"].Rows[rowmod]["ViewAsAsm"] = (opts[0] == '1' ? true : false);
EngWBDS.Tables["ECOMtl"].Rows[rowmod]["PullAsAsm"] = (opts[1] == '1' ? true : false);
partnum_txt.Text = AddBack[i].PartNumber;
DataTable ds = DataList.PartUOM(partnum_txt.Text);
uom_cbo.DataSource = ds;
uom_cbo.DisplayMember = "UOMCode";
uom_cbo.ValueMember = "UOMCode";
uom_cbo.SelectedIndex = 0;
EngWBDS.Tables["ECOMtl"].Rows[rowmod]["UOMCode"] = AddBack_Uom[i];
uom_cbo.Text = AddBack_Uom[i];
decimal qty_val = decimal.Parse(AddBack[i].Qty);
//decimal qty_val = decimal.Parse(AddBack_Qty[i]);
EngWBDS.Tables["ECOMtl"].Rows[rowmod]["QtyPer"] = qty_val;
EngWB.Update(EngWBDS);
EngWBDS = EngWB.GetDatasetForTree(gid_txt.Text, parent_txt.Text, parentrev_txt.Text, "", null, false, false);
}
}
catch{}
#endregion
#region Update per line
for (int i = 0; i < Bill.Count; i++)
{
for (int j = 0; j < EngWBDS.Tables["ECOMtl"].Rows.Count; j++)
{
EngWBDS.Tables["ECOMtl"].Rows[j]["OpDesc"] = EngWBDS.Tables["ECOOpr"].Rows[((int.Parse(EngWBDS.Tables["ECOMtl"].Rows[j]["RelatedOperation"].ToString())/10)-1)]["OpDesc"];
string EpicValue = EngWBDS.Tables["ECOMtl"].Rows[j]["MtlPartNum"].ToString();
string _BillItem = Bill[i].PartNumber;
decimal EpicQty = decimal.Parse(EngWBDS.Tables["ECOMtl"].Rows[j]["QtyPer"].ToString());
decimal _BillQty = decimal.Parse(Bill[i].Qty);
if (EpicValue == _BillItem && EpicQty != _BillQty)
{
EngWBDS.Tables["ECOMtl"].Rows[j]["QtyPer"] = Bill[i].Qty;
}
}
}
#endregion
try
{
EngWB.Update(EngWBDS);
EngWB.ResequenceMaterials(gid_txt.Text, parent_txt.Text, parentrev_txt.Text, "", null, false, Properties.Settings.Default.mtlreqtype, false, false, false);
EngWBDS = EngWB.GetDatasetForTree(gid_txt.Text, parent_txt.Text, parentrev_txt.Text, "", null, false, false);
BillDataGrid.DataSource = EngWBDS.Tables["ECOMtl"];
EnableItemDetails();
}
catch { }
}