/// <summary> /// UpdateDataSetForDCP /// </summary> /// <param name="dstData"></param> /// <param name="pstrMasterIDToUpdate"></param> /// <param name="parrMasterIDToUpdate"></param> /// <author>Trada</author> /// <date>Monday, April 24 2006</date> public void UpdateDataSetForDCP(DataSet dstData, string pstrMasterIDToUpdate, ArrayList parrMasterIDToUpdate, int pintDCOptionMasterID) { //Get ShiftPattern for refer information PRO_ShiftPatternDS dsShiftPattern = new PRO_ShiftPatternDS(); DataSet dstShift = dsShiftPattern.List(); PRO_DCPResultDetailDS dsDCPResultDetail = new PRO_DCPResultDetailDS(); PRO_DCPResultMasterDS dsDCPResultMaster = new PRO_DCPResultMasterDS(); MTR_CPODS dsCPO = new MTR_CPODS(); //build a new dataset for new rows #region Clone dataset contain new rows DataSet dstNewDataSet = new DataSet(); DataSet dstModifiedDataSet = new DataSet(); dstNewDataSet = dstData.Clone(); dstModifiedDataSet = dstData.Clone(); foreach (DataRow drow in dstData.Tables[0].Rows) { if (drow.RowState == DataRowState.Added) { DataRow drowNew = dstNewDataSet.Tables[0].NewRow(); for (int i = 0; i < dstData.Tables[0].Columns.Count; i++) { drowNew[i] = drow[i]; } dstNewDataSet.Tables[0].Rows.Add(drowNew); } if (drow.RowState == DataRowState.Modified) { DataRow drowNew = dstModifiedDataSet.Tables[0].NewRow(); for (int i = 0; i < dstData.Tables[0].Columns.Count; i++) { drowNew[i] = drow[i]; } dstModifiedDataSet.Tables[0].Rows.Add(drowNew); } } #endregion //update data #region sort new dataset by productid and start time string strOrderby = ITM_ProductTable.PRODUCTID_FLD + "," + PRO_DCPResultDetailTable.STARTTIME_FLD; DataRow[] adrowNewDataSet = dstNewDataSet.Tables[0].Select(string.Empty, strOrderby); if (adrowNewDataSet.Length > 0) { #region Calculate and update Master Table int i = 0; while (i < adrowNewDataSet.Length) { int j = i; decimal decQuantity = decimal.Parse(adrowNewDataSet[0][PRO_DCPResultDetailTable.QUANTITY_FLD].ToString()); DateTime dtmStartDateTime = new DateTime(); dtmStartDateTime = (DateTime)adrowNewDataSet[i][MTR_CPOTable.STARTDATE_FLD]; while ((j < adrowNewDataSet.Length - 1) && (int.Parse(adrowNewDataSet[j][ITM_ProductTable.PRODUCTID_FLD].ToString()) == int.Parse(adrowNewDataSet[j + 1][ITM_ProductTable.PRODUCTID_FLD].ToString()))) { decQuantity += decimal.Parse(adrowNewDataSet[j + 1][PRO_DCPResultDetailTable.QUANTITY_FLD].ToString()); j = j + 1; } //assign value to VO PRO_DCPResultMasterVO voDCPResultMaster = new PRO_DCPResultMasterVO(); //voDCPResultMaster.DCOptionMasterID = intDCOptionMasterID; voDCPResultMaster.DCOptionMasterID = pintDCOptionMasterID; voDCPResultMaster.Quantity = decQuantity; voDCPResultMaster.StartDateTime = dtmStartDateTime; voDCPResultMaster.ProductID = int.Parse(adrowNewDataSet[i][ITM_ProductTable.PRODUCTID_FLD].ToString()); voDCPResultMaster.DueDateTime = (DateTime)adrowNewDataSet[j][MTR_CPOTable.DUEDATE_FLD]; voDCPResultMaster.RoutingID = int.Parse(adrowNewDataSet[i][ITM_RoutingTable.ROUTINGID_FLD].ToString()); voDCPResultMaster.WorkCenterID = int.Parse(adrowNewDataSet[i][MST_WorkCenterTable.WORKCENTERID_FLD].ToString()); //insert to database //insert to master table int intDCPResultMasterID = dsDCPResultMaster.AddAndReturnID(voDCPResultMaster); foreach (DataRow drowDetail in dstNewDataSet.Tables[0].Rows) { //set value of Converted column drowDetail[PRO_DCPResultDetailTable.WOCONVERTED_FLD] = false; //Set value of Start Time and End Time drowDetail[PRO_DCPResultDetailTable.STARTTIME_FLD] = drowDetail[MTR_CPOTable.STARTDATE_FLD]; drowDetail[PRO_DCPResultDetailTable.ENDTIME_FLD] = drowDetail[MTR_CPOTable.DUEDATE_FLD]; //set value of Working date to detail table DataRow[] adrowShift = dstShift.Tables[0].Select(PRO_ShiftPatternTable.SHIFTID_FLD + " = " + drowDetail[PRO_DCPResultDetailTable.SHIFTID_FLD].ToString()); if (adrowShift.Length > 0) { DateTime dtmWorkingDate = new DateTime(); dtmWorkingDate = GetDateOnly((DateTime)drowDetail[MTR_CPOTable.STARTDATE_FLD], (DateTime)adrowShift[0][PRO_ShiftPatternTable.WORKTIMEFROM_FLD], (DateTime)adrowShift[0][PRO_ShiftPatternTable.WORKTIMETO_FLD]); drowDetail[PRO_DCPResultDetailTable.WORKINGDATE_FLD] = GetDateOnly(dtmWorkingDate); } //set value of totalsecond to detail table //drowDetail[PRO_DCPResultDetailTable.TOTALSECOND_FLD] = GetTotalSecond(int.Parse(drowDetail[PRO_DCPResultDetailTable.SHIFTID_FLD].ToString()), dstShift, (DateTime)drowDetail[PRO_DCPResultDetailTable.STARTTIME_FLD], (DateTime)drowDetail[PRO_DCPResultDetailTable.ENDTIME_FLD]); //set value of percentage to detail table drowDetail[PRO_DCPResultDetailTable.PERCENTAGE_FLD] = 100 * Decimal.Parse(drowDetail[PRO_DCPResultDetailTable.QUANTITY_FLD].ToString()) / decQuantity; //set value of MasterID to Detail Table if (int.Parse(drowDetail[ITM_ProductTable.PRODUCTID_FLD].ToString()) == int.Parse(adrowNewDataSet[i][ITM_ProductTable.PRODUCTID_FLD].ToString())) { drowDetail[PRO_DCPResultMasterTable.DCPRESULTMASTERID_FLD] = intDCPResultMasterID; } } i = j + 1; } #endregion //update detail to database dsDCPResultDetail.UpdateDataSetManual(dstNewDataSet); } #endregion //Remove new rows //delete row has status is add new #region delete row has status is add new DataRow[] adrowToDelete = dstData.Tables[0].Select(string.Empty, string.Empty, DataViewRowState.Added); for (int i = 0; i < adrowToDelete.Length; i++) { adrowToDelete[i].Delete(); } #endregion foreach (DataRow drow in dstModifiedDataSet.Tables[0].Rows) { Int64 intDCPResultMasterToEdit = 0; if (drow[PRO_DCPResultMasterTable.DCPRESULTMASTERID_FLD].ToString() != string.Empty) { intDCPResultMasterToEdit = Convert.ToInt64(drow[PRO_DCPResultDetailTable.DCPRESULTMASTERID_FLD]); } #region sort Modified dataset by productid and start time string strOrderbyCond = PRO_DCPResultDetailTable.DCPRESULTMASTERID_FLD + "," + PRO_DCPResultDetailTable.STARTTIME_FLD; DataRow[] adrowModifiedDataSet = dstData.Tables[0].Select(PRO_DCPResultDetailTable.DCPRESULTMASTERID_FLD + " = " + intDCPResultMasterToEdit.ToString(), strOrderbyCond); if (adrowModifiedDataSet.Length > 0) { #region Calculate and update Master Table int i = 0; while (i < adrowModifiedDataSet.Length) { int j = i; decimal decQuantity = decimal.Parse(adrowModifiedDataSet[0][PRO_DCPResultDetailTable.QUANTITY_FLD].ToString()); DateTime dtmStartDateTime = new DateTime(); dtmStartDateTime = (DateTime)adrowModifiedDataSet[i][MTR_CPOTable.STARTDATE_FLD]; while ((j < adrowModifiedDataSet.Length - 1) && (int.Parse(adrowModifiedDataSet[j][PRO_DCPResultDetailTable.DCPRESULTMASTERID_FLD].ToString()) == int.Parse(adrowModifiedDataSet[j + 1][PRO_DCPResultDetailTable.DCPRESULTMASTERID_FLD].ToString()))) { decQuantity += decimal.Parse(adrowModifiedDataSet[j + 1][PRO_DCPResultDetailTable.QUANTITY_FLD].ToString()); j = j + 1; } //assign value to VO PRO_DCPResultMasterVO voDCPResultMaster = new PRO_DCPResultMasterVO(); //voDCPResultMaster.DCOptionMasterID = intDCOptionMasterID; //voDCPResultMaster.DCOptionMasterID = pintDCOptionMasterID; voDCPResultMaster.DCPResultMasterID = int.Parse(adrowModifiedDataSet[i][PRO_DCPResultDetailTable.DCPRESULTMASTERID_FLD].ToString()); voDCPResultMaster.Quantity = decQuantity; voDCPResultMaster.StartDateTime = dtmStartDateTime; //voDCPResultMaster.ProductID = int.Parse(adrowNewDataSet[i][ITM_ProductTable.PRODUCTID_FLD].ToString()); voDCPResultMaster.DueDateTime = (DateTime)adrowModifiedDataSet[j][MTR_CPOTable.DUEDATE_FLD]; //insert to database //insert to master table dsDCPResultMaster.Update(voDCPResultMaster); foreach (DataRow drowDetail in adrowModifiedDataSet) { //set value of Converted column //drowDetail[PRO_DCPResultDetailTable.WOCONVERTED_FLD] = false; //Set value of Start Time and End Time drowDetail[PRO_DCPResultDetailTable.STARTTIME_FLD] = drowDetail[MTR_CPOTable.STARTDATE_FLD]; drowDetail[PRO_DCPResultDetailTable.ENDTIME_FLD] = drowDetail[MTR_CPOTable.DUEDATE_FLD]; //set value of Working date to detail table DataRow[] adrowShift = dstShift.Tables[0].Select(PRO_ShiftPatternTable.SHIFTID_FLD + " = " + drowDetail[PRO_DCPResultDetailTable.SHIFTID_FLD].ToString()); if (adrowShift.Length > 0) { DateTime dtmWorkingDate = new DateTime(); dtmWorkingDate = GetDateOnly((DateTime)drowDetail[MTR_CPOTable.STARTDATE_FLD], (DateTime)adrowShift[0][PRO_ShiftPatternTable.WORKTIMEFROM_FLD], (DateTime)adrowShift[0][PRO_ShiftPatternTable.WORKTIMETO_FLD]); drowDetail[PRO_DCPResultDetailTable.WORKINGDATE_FLD] = GetDateOnly(dtmWorkingDate); } //set value of totalsecond to detail table //drowDetail[PRO_DCPResultDetailTable.TOTALSECOND_FLD] = GetTotalSecond(int.Parse(drowDetail[PRO_DCPResultDetailTable.SHIFTID_FLD].ToString()), dstShift, (DateTime)drowDetail[PRO_DCPResultDetailTable.STARTTIME_FLD], (DateTime)drowDetail[PRO_DCPResultDetailTable.ENDTIME_FLD]); //set value of percentage to detail table drowDetail[PRO_DCPResultDetailTable.PERCENTAGE_FLD] = 100 * Decimal.Parse(drowDetail[PRO_DCPResultDetailTable.QUANTITY_FLD].ToString()) / decQuantity; } i = j + 1; } #endregion //update detail to database dsDCPResultDetail.UpdateDataSetManual(dstData); } #endregion } #region Update DataSet (old code) dsCPO.UpdateDataSetForDCP(dstData); #endregion #region Delete master Table for delete multi-rows event //Update Master Table //First, we get detail and master table from database for re-calculating master information if (parrMasterIDToUpdate.Count > 0) { string strMasterIDToDelete = "0"; DataSet dstDCPResultDetailAfterSaving = new DataSet(); DataSet dstDCPResultMaster = new DataSet(); //Master Table dstDCPResultMaster = dsDCPResultMaster.GetDCPResultMasterByArrayMasterID(pstrMasterIDToUpdate); //Detail table dstDCPResultDetailAfterSaving = dsDCPResultDetail.GetDCPResultDetailByMasterID(pstrMasterIDToUpdate); if (dstDCPResultDetailAfterSaving.Tables[0].Rows.Count > 0) { if (parrMasterIDToUpdate.Count > 0) { for (int i = 0; i < parrMasterIDToUpdate.Count; i++) { //Select Detail for each masterID DataRow[] adrowDetailByMasterID = dstDCPResultDetailAfterSaving.Tables[0].Select(PRO_DCPResultDetailTable.DCPRESULTMASTERID_FLD + " = " + parrMasterIDToUpdate[i].ToString(), PRO_DCPResultDetailTable.STARTTIME_FLD); //Select Master for each masterID DataRow[] adrowMasterByMasterID = dstDCPResultMaster.Tables[0].Select(PRO_DCPResultMasterTable.DCPRESULTMASTERID_FLD + " = " + parrMasterIDToUpdate[i].ToString()); if (adrowDetailByMasterID.Length > 0) //Update Master { if (adrowMasterByMasterID.Length > 0) { decimal decQuantityMaster = 0; for (int j = 0; j < adrowDetailByMasterID.Length; j++) { if ((adrowDetailByMasterID[j][PRO_DCPResultDetailTable.QUANTITY_FLD] != null) && (adrowDetailByMasterID[j][PRO_DCPResultDetailTable.QUANTITY_FLD] != DBNull.Value)) { decQuantityMaster += decimal.Parse(adrowDetailByMasterID[j][PRO_DCPResultDetailTable.QUANTITY_FLD].ToString()); } } adrowMasterByMasterID[0][PRO_DCPResultMasterTable.QUANTITY_FLD] = decQuantityMaster; adrowMasterByMasterID[0][PRO_DCPResultMasterTable.STARTDATETIME_FLD] = (DateTime)adrowDetailByMasterID[0][PRO_DCPResultDetailTable.STARTTIME_FLD]; adrowMasterByMasterID[0][PRO_DCPResultMasterTable.DUEDATETIME_FLD] = (DateTime)adrowDetailByMasterID[adrowDetailByMasterID.Length - 1][PRO_DCPResultDetailTable.ENDTIME_FLD]; } } else { //Save MasterID to Delete strMasterIDToDelete += "," + parrMasterIDToUpdate[i].ToString(); } } } //Update Master dsDCPResultMaster.UpdateDataSetDeleteMultiRows(dstDCPResultMaster); //Delete Master dsDCPResultMaster.DeleteMultiRows(strMasterIDToDelete); } else { //Delete Master dsDCPResultMaster.DeleteMultiRows(pstrMasterIDToUpdate); } } #endregion }
/// <summary> /// /// </summary> /// <param name="pintDCOptionMasterID"></param> public void DeleteDCPResults(int pintDCOptionMasterID) { PRO_DCPResultMasterDS dsDCPResultMaster = new PRO_DCPResultMasterDS(); dsDCPResultMaster.DeleteOldResult(pintDCOptionMasterID); }