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)); }