示例#1
0
        public DataTable UploadToTempDatabase(DataTable rawDataTable, int UserID, bool CreateCodeIfNotExists)
        {
            if (rawDataTable == null)
            {
                return(GetImportDataFromTempDatabase(null));
            }

            int rowCount = 1;

            foreach (DataRow row in rawDataTable.Rows)
            {
                rowCount++;

                EUploadEmpCostCenter uploadEmpCostCenter           = new EUploadEmpCostCenter();
                ArrayList            uploadEmpCostCenterDetailList = new ArrayList();
                ArrayList            lastEmpCostCenterDetailList   = null;

                string EmpNo = row[FIELD_EMP_NO].ToString().Trim();
                uploadEmpCostCenter.EmpID = Parse.GetEmpID(dbConn, EmpNo, UserID);
                if (uploadEmpCostCenter.EmpID < 0)
                {
                    errors.addError(ImportErrorMessage.ERROR_ACCESS_DENIED_EMP_NO, new string[] { EmpNo, rowCount.ToString() });
                }
                try
                {
                    uploadEmpCostCenter.EmpCostCenterEffFr = Parse.toDateTimeObject(row[FIELD_FROM]);
                }
                catch
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_FROM + "=" + row[FIELD_FROM].ToString(), EmpNo, rowCount.ToString() });
                }
                try
                {
                    uploadEmpCostCenter.EmpCostCenterEffTo = Parse.toDateTimeObject(row[FIELD_TO]);
                }
                catch
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_TO + "=" + row[FIELD_TO].ToString(), EmpNo, rowCount.ToString() });
                }
                int iFieldCount = 1;

                double totalPercentage = 0;
                while (row.Table.Columns.Contains(FIELD_COST_CENTER + iFieldCount) && row.Table.Columns.Contains(FIELD_PERCENTAGE + iFieldCount))
                {
                    if (!row.IsNull(FIELD_COST_CENTER + iFieldCount) && !row.IsNull(FIELD_PERCENTAGE + iFieldCount))
                    {
                        if (!string.IsNullOrEmpty(row[FIELD_COST_CENTER + iFieldCount].ToString().Trim()) && !string.IsNullOrEmpty(row[FIELD_PERCENTAGE + iFieldCount].ToString().Trim()))
                        {
                            EUploadEmpCostCenterDetail uploadEmpCostCenterDetail = new EUploadEmpCostCenterDetail();
                            uploadEmpCostCenterDetail.CostCenterID = Parse.GetCostCenterID(dbConn, row[FIELD_COST_CENTER + iFieldCount].ToString(), CreateCodeIfNotExists, UserID);
                            try
                            {
                                uploadEmpCostCenterDetail.EmpCostCenterPercentage = double.Parse(row[FIELD_PERCENTAGE + iFieldCount].ToString().Trim());
                                if (uploadEmpCostCenterDetail.CostCenterID > 0)
                                {
                                    totalPercentage += uploadEmpCostCenterDetail.EmpCostCenterPercentage;
                                    uploadEmpCostCenterDetailList.Add(uploadEmpCostCenterDetail);
                                }
                                else
                                {
                                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_COST_CENTER + iFieldCount + "=" + row[FIELD_COST_CENTER + iFieldCount].ToString(), EmpNo, rowCount.ToString() });
                                }
                            }
                            catch
                            {
                                errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_PERCENTAGE + iFieldCount + "=" + row[FIELD_PERCENTAGE + iFieldCount].ToString(), EmpNo, rowCount.ToString() });
                            }
                        }
                    }
                    iFieldCount++;
                }

                if (Math.Abs(Math.Round(totalPercentage, 2) - 100) >= 0.01)
                {
                    errors.addError(ImportErrorMessage.ERROR_TOTAL_PERCENTAGE_NOT_100, new string[] { rowCount.ToString() });
                }

                uploadEmpCostCenter.SessionID       = m_SessionID;
                uploadEmpCostCenter.TransactionDate = UploadDateTime;


                if (uploadEmpCostCenter.EmpID != 0 && errors.List.Count <= 0)
                {
                    if (rawDataTable.Columns.Contains(FIELD_SYNC_ID))
                    {
                        if (!row.IsNull(FIELD_SYNC_ID))
                        {
                            string strSynID = row[FIELD_SYNC_ID].ToString();
                            uploadEmpCostCenter.SynID = strSynID;
                            if (!string.IsNullOrEmpty(strSynID))
                            {
                                DBFilter synIDFilter = new DBFilter();
                                synIDFilter.add(new Match("SynID", strSynID));
                                ArrayList objSameSynIDList = EEmpCostCenter.db.select(dbConn, synIDFilter);
                                if (objSameSynIDList.Count > 0)
                                {
                                    uploadEmpCostCenter.EmpCostCenterID = ((EEmpCostCenter)objSameSynIDList[0]).EmpCostCenterID;
                                }
                            }

                            if (uploadEmpCostCenter.EmpCostCenterID != 0)
                            {
                                DBFilter empCostCenterSetailFilter = new DBFilter();
                                empCostCenterSetailFilter.add(new Match("EmpCostCenterID", uploadEmpCostCenter.EmpCostCenterID));
                                lastEmpCostCenterDetailList = EEmpCostCenterDetail.db.select(dbConn, empCostCenterSetailFilter);



                                bool IsSameDetail = true;
                                if (
                                    lastEmpCostCenterDetailList.Count == uploadEmpCostCenterDetailList.Count &&
                                    uploadEmpCostCenter.EmpCostCenterEffFr == uploadEmpCostCenter.EmpCostCenterEffFr &&
                                    uploadEmpCostCenter.EmpCostCenterEffTo == uploadEmpCostCenter.EmpCostCenterEffTo
                                    )
                                {
                                    foreach (EEmpCostCenterDetail empCostCenterDetail in lastEmpCostCenterDetailList)
                                    {
                                        foreach (EUploadEmpCostCenterDetail uploadEmpCostCenterDetail in uploadEmpCostCenterDetailList)
                                        {
                                            if (uploadEmpCostCenterDetail.CostCenterID == empCostCenterDetail.CostCenterID)
                                            {
                                                if (uploadEmpCostCenterDetail.EmpCostCenterPercentage - empCostCenterDetail.EmpCostCenterPercentage >= 0.01)
                                                {
                                                    uploadEmpCostCenterDetail.EmpCostCenterDetailID = empCostCenterDetail.EmpCostCenterDetailID;
                                                    IsSameDetail = false;
                                                }
                                                else
                                                {
                                                    uploadEmpCostCenterDetail.EmpCostCenterID       = empCostCenterDetail.EmpCostCenterID;
                                                    uploadEmpCostCenterDetail.EmpCostCenterDetailID = empCostCenterDetail.EmpCostCenterDetailID;
                                                }
                                                break;
                                            }
                                            if (uploadEmpCostCenterDetailList[uploadEmpCostCenterDetailList.Count - 1] == uploadEmpCostCenterDetail)
                                            {
                                                IsSameDetail = false;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    IsSameDetail = false;
                                }

                                if (IsSameDetail)
                                {
                                    continue;
                                }
                                else
                                {
                                    foreach (EUploadEmpCostCenterDetail uploadEmpCostCenterDetail in uploadEmpCostCenterDetailList)
                                    {
                                        uploadEmpCostCenterDetail.EmpCostCenterID = uploadEmpCostCenter.EmpCostCenterID;
                                        //uploadEmpHierarchy.EmpHierarchyID = empHierarchy.EmpHierarchyID;
                                    }
                                }
                            }
                        }
                    }
                    if (uploadEmpCostCenter.EmpCostCenterID == 0)
                    {
                        AND andTerms = new AND();
                        andTerms.add(new Match("EmpCostCenterEffFr", "<=", uploadEmpCostCenter.EmpCostCenterEffFr));

                        EEmpCostCenter lastEmpCostCenter = (EEmpCostCenter)AppUtils.GetLastObj(dbConn, uploadDB, "EmpCostCenterEffFr", uploadEmpCostCenter.EmpID, andTerms);
                        if (lastEmpCostCenter != null)
                        {
                            DBFilter empCostCenterSetailFilter = new DBFilter();
                            empCostCenterSetailFilter.add(new Match("EmpCostCenterID", lastEmpCostCenter.EmpCostCenterID));
                            lastEmpCostCenterDetailList = EEmpCostCenterDetail.db.select(dbConn, empCostCenterSetailFilter);



                            bool IsSameDetail = true;
                            if (
                                lastEmpCostCenterDetailList.Count == uploadEmpCostCenterDetailList.Count &&
                                uploadEmpCostCenter.EmpCostCenterEffFr == lastEmpCostCenter.EmpCostCenterEffFr &&
                                uploadEmpCostCenter.EmpCostCenterEffTo == lastEmpCostCenter.EmpCostCenterEffTo
                                )
                            {
                                foreach (EEmpCostCenterDetail empCostCenterDetail in lastEmpCostCenterDetailList)
                                {
                                    foreach (EUploadEmpCostCenterDetail uploadEmpCostCenterDetail in uploadEmpCostCenterDetailList)
                                    {
                                        if (uploadEmpCostCenterDetail.CostCenterID == empCostCenterDetail.CostCenterID)
                                        {
                                            if (uploadEmpCostCenterDetail.EmpCostCenterPercentage - empCostCenterDetail.EmpCostCenterPercentage >= 0.01)
                                            {
                                                uploadEmpCostCenterDetail.EmpCostCenterDetailID = empCostCenterDetail.EmpCostCenterDetailID;
                                                IsSameDetail = false;
                                            }
                                            else
                                            {
                                                uploadEmpCostCenterDetail.EmpCostCenterID       = empCostCenterDetail.EmpCostCenterID;
                                                uploadEmpCostCenterDetail.EmpCostCenterDetailID = empCostCenterDetail.EmpCostCenterDetailID;
                                            }
                                            break;
                                        }
                                        if (uploadEmpCostCenterDetailList[uploadEmpCostCenterDetailList.Count - 1] == uploadEmpCostCenterDetail)
                                        {
                                            IsSameDetail = false;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                IsSameDetail = false;
                            }

                            if (IsSameDetail)
                            {
                                continue;
                            }
                            else
                            {
                                // add postion terms with new ID
                                if (lastEmpCostCenter.EmpCostCenterEffFr.Equals(uploadEmpCostCenter.EmpCostCenterEffFr))
                                {
                                    uploadEmpCostCenter.EmpCostCenterID = lastEmpCostCenter.EmpCostCenterID;
                                    if (uploadEmpCostCenter.EmpCostCenterEffTo.Ticks == 0 && lastEmpCostCenter.EmpCostCenterEffTo.Ticks != 0)
                                    {
                                        EEmpCostCenter afterEmpCostCenter = (EEmpCostCenter)AppUtils.GetLastObj(dbConn, uploadDB, "EmpCostCenterEffFr", uploadEmpCostCenter.EmpID, new Match("EmpCostCenterEffFr", ">", lastEmpCostCenter.EmpCostCenterEffTo));
                                        if (afterEmpCostCenter != null)
                                        {
                                            uploadEmpCostCenter.EmpCostCenterEffTo = afterEmpCostCenter.EmpCostCenterEffFr.AddDays(-1);
                                        }
                                    }
                                    foreach (EUploadEmpCostCenterDetail uploadEmpCostCenterDetail in uploadEmpCostCenterDetailList)
                                    {
                                        uploadEmpCostCenterDetail.EmpCostCenterID = uploadEmpCostCenter.EmpCostCenterID;
                                        //uploadEmpHierarchy.EmpHierarchyID = empHierarchy.EmpHierarchyID;
                                    }
                                }
                                else
                                {
                                    AND lastObjAndTerms = new AND();
                                    lastObjAndTerms.add(new Match("EmpCostCenterEffFr", ">", uploadEmpCostCenter.EmpCostCenterEffFr));
                                    if (!uploadEmpCostCenter.EmpCostCenterEffTo.Ticks.Equals(0))
                                    {
                                        lastObjAndTerms.add(new Match("EmpCostCenterEffFr", "<=", uploadEmpCostCenter.EmpCostCenterEffTo));
                                    }

                                    EEmpCostCenter lastObj = (EEmpCostCenter)AppUtils.GetLastObj(dbConn, uploadDB, "EmpCostCenterEffFr", uploadEmpCostCenter.EmpID, lastObjAndTerms);
                                    if (lastObj != null)
                                    {
                                        if (!lastObj.EmpCostCenterEffTo.Ticks.Equals(0))
                                        {
                                            errors.addError(ImportErrorMessage.ERROR_DATE_FROM_OVERLAP, new string[] { uploadEmpCostCenter.EmpCostCenterEffFr.ToString("yyyy-MM-dd"), rowCount.ToString() });
                                            continue;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                if (uploadEmpCostCenter.EmpCostCenterID <= 0)
                {
                    uploadEmpCostCenter.ImportActionStatus = ImportDBObject.ImportActionEnum.INSERT;
                }
                else
                {
                    uploadEmpCostCenter.ImportActionStatus = ImportDBObject.ImportActionEnum.UPDATE;
                }

                uploadEmpCostCenter.UploadEmpID = ParseTemp.GetUploadEmpID(dbConn, EmpNo, m_SessionID);
                if (uploadEmpCostCenter.UploadEmpID == 0)
                {
                    if (uploadEmpCostCenter.EmpID == 0)
                    {
                        errors.addError(ImportErrorMessage.ERROR_INVALID_EMP_NO, new string[] { EmpNo, rowCount.ToString() });
                    }
                    else
                    {
                        uploadEmpCostCenter.UploadEmpID = ImportEmpPersonalInfoProcess.CreateDummyUploadEmployeeInfo(dbConn, uploadEmpCostCenter.EmpID, m_SessionID, UploadDateTime);
                    }
                }

                Hashtable values = new Hashtable();
                tempDB.populate(uploadEmpCostCenter, values);
                PageErrors pageErrors = new PageErrors(EUploadEmpPersonalInfo.db);
                tempDB.validate(pageErrors, values);
                if (pageErrors.errors.Count == 0)
                {
                    tempDB.insert(dbConn, uploadEmpCostCenter);
                    foreach (EUploadEmpCostCenterDetail uploadCostCenterDetail in uploadEmpCostCenterDetailList)
                    {
                        uploadCostCenterDetail.UploadEmpCostCenterID = uploadEmpCostCenter.UploadEmpCostCenterID;
                        tempDetailDB.insert(dbConn, uploadCostCenterDetail);
                    }
                }
                else
                {
                    pageErrors.addError(rawDataTable.TableName);
                    throw new HRImportException(pageErrors.getPrompt() + "(line " + rowCount.ToString() + ")");

                    //if (EmpID == 0)
                    //    errors.addError(ImportErrorMessage.ERROR_INVALID_EMP_NO, new string[] { EmpNo, rowCount.ToString() });
                    //else if (PayCodeID == 0)
                    //    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_PAYMENT_CODE + "=" + PaymentCode, EmpNo, rowCount.ToString() });
                    //else if (PayCodeID == 0)
                    //    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_PAYMENT_CODE + "=" + PaymentCode, EmpNo, rowCount.ToString() });
                    //else if (EffDate.Ticks == 0)
                    //    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_EFFECTIVE_DATE + "=" + EffDateString, EmpNo, rowCount.ToString() });
                    //else if (double.TryParse(amountString, out amount))
                    //    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_AMOUNT + "=" + amountString, EmpNo, rowCount.ToString() });
                }
            }
            if (errors.List.Count > 0)
            {
                ClearTempTable();
                throw (new HRImportException(rawDataTable.TableName + "\r\n" + errors.Message()));
            }
            return(GetImportDataFromTempDatabase(null));
        }
        public DataTable UploadToTempDatabase(DataTable rawDataTable, int UserID, bool CreateCodeIfNotExists)
        {
            if (rawDataTable == null)
            {
                return(GetImportDataFromTempDatabase(null));
            }

            int    rowCount = 1;
            int    costCenterFieldCounter = 0;
            string lastCostCenter         = "";

            foreach (DataRow row in rawDataTable.Rows)
            {
                EUploadEmpCostCenter uploadEmpCostCenter = new EUploadEmpCostCenter();
                string EmpNo = row[FIELD_EMP_NO].ToString().Trim();
                uploadEmpCostCenter.EmpID = Parse.GetEmpID(dbConn, EmpNo, UserID);
                if (uploadEmpCostCenter.EmpID < 0)
                {
                    errors.addError(ImportErrorMessage.ERROR_ACCESS_DENIED_EMP_NO, new string[] { EmpNo, rowCount.ToString() });
                }
                try
                {
                    uploadEmpCostCenter.EmpCostCenterEffFr = Parse.toDateTimeObject(row[FIELD_FROM]);
                }
                catch
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_FROM + "=" + row[FIELD_FROM].ToString(), EmpNo, rowCount.ToString() });
                }
                try
                {
                    uploadEmpCostCenter.EmpCostCenterEffTo = Parse.toDateTimeObject(row[FIELD_TO]);
                }
                catch
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_TO + "=" + row[FIELD_TO].ToString(), EmpNo, rowCount.ToString() });
                }

                if (row.Table.Columns.Contains(_FIELD_COST_CENTER) && row.Table.Columns.Contains(_FIELD_PERCENTAGE))
                {
                    if (!string.IsNullOrEmpty(row[_FIELD_COST_CENTER].ToString().Trim()) && !string.IsNullOrEmpty(row[_FIELD_PERCENTAGE].ToString().Trim()))
                    {
                        if (!row[_FIELD_COST_CENTER].ToString().Trim().Equals(lastCostCenter))
                        {
                            costCenterFieldCounter++;
                            lastCostCenter = row[_FIELD_COST_CENTER].ToString().Trim();
                        }
                    }
                }
            }
            DataSet   dataSet      = new DataSet();
            DataTable tmpDataTable = dataSet.Tables.Add(TABLE_NAME);

            tmpDataTable.Columns.Add(FIELD_EMP_NO, typeof(string));
            tmpDataTable.Columns.Add(FIELD_FROM, typeof(DateTime));
            tmpDataTable.Columns.Add(FIELD_TO, typeof(DateTime));
            for (int i = 1; i <= costCenterFieldCounter; i++)
            {
                tmpDataTable.Columns.Add(FIELD_COST_CENTER + i, typeof(string));
                tmpDataTable.Columns.Add(FIELD_PERCENTAGE + i, typeof(double));
            }

            ArrayList mRows = new ArrayList();

            foreach (DataRow row in rawDataTable.Rows)
            {
                if (!mRows.Contains(row))
                {
                    int     iFieldCount = 1;
                    DataRow newRow      = tmpDataTable.NewRow();
                    newRow[FIELD_EMP_NO] = row[FIELD_EMP_NO].ToString().Trim();
                    newRow[FIELD_FROM]   = Parse.toDateTimeObject(row[FIELD_FROM]);
                    newRow[FIELD_TO]     = Parse.toDateTimeObject(row[FIELD_TO]);
                    newRow[FIELD_COST_CENTER + iFieldCount] = row[_FIELD_COST_CENTER].ToString().Trim();
                    newRow[FIELD_PERCENTAGE + iFieldCount]  = Parse.toDecimal(row[_FIELD_PERCENTAGE]);
                    mRows.Add(row);
                    foreach (DataRow nextRow in rawDataTable.Rows)
                    {
                        if (!mRows.Contains(nextRow))
                        {
                            string   nextEmpNo = nextRow[FIELD_EMP_NO].ToString().Trim();
                            DateTime nextFrom  = Parse.toDateTimeObject(nextRow[FIELD_FROM]);
                            DateTime nextTo    = Parse.toDateTimeObject(nextRow[FIELD_TO]);
                            //if (!row.IsNull(_FIELD_COST_CENTER) && !row.IsNull(_FIELD_PERCENTAGE))
                            if (newRow[FIELD_EMP_NO].Equals(nextEmpNo) && newRow[FIELD_FROM].Equals(nextFrom) && newRow[FIELD_TO].Equals(nextTo))
                            {
                                iFieldCount++;
                                newRow[FIELD_COST_CENTER + iFieldCount] = nextRow[_FIELD_COST_CENTER].ToString().Trim();
                                newRow[FIELD_PERCENTAGE + iFieldCount]  = Parse.toDecimal(nextRow[_FIELD_PERCENTAGE]);
                                mRows.Add(nextRow);
                            }
                        }
                    }
                    tmpDataTable.Rows.Add(newRow);
                }
            }
            if (errors.List.Count > 0)
            {
                ClearTempTable();
                throw (new HRImportException(rawDataTable.TableName + "\r\n" + errors.Message()));
            }
            importEmpCostCenter.UploadToTempDatabase(tmpDataTable, UserID, CreateCodeIfNotExists);
            return(GetImportDataFromTempDatabase(null));
        }