Beispiel #1
0
        /// <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
        }
Beispiel #2
0
        /// <summary>
        /// UpdateDataSetAfterSaving
        /// </summary>
        /// <param name="pdstData"></param>
        /// <author>Trada</author>
        /// <date>Saturday, June 10 2006</date>

        public void UpdateDataSetAfterSaving(DataSet pdstData)
        {
            PRO_DCPResultDetailDS dsDCPResultDetail = new PRO_DCPResultDetailDS();

            dsDCPResultDetail.UpdateDataSetManual(pdstData);
        }