private void WriteUnmatchedElementsIntoLogFile(CrossTabLogFile logFile, UnMatchedElementInfo unmatchedElement)
        {
            //Write unmatched elements into log
            if (unmatchedElement != null)
            {
                //area
                foreach (string Key in unmatchedElement.Areas.Keys)
                {
                    logFile.AddUnmatchedArea(this._Caption, Key, unmatchedElement.Areas[Key]);
                }

                // indicator
                foreach (string IndicatorKey in unmatchedElement.Indicators.Keys)
                {
                    logFile.AddUnmatchedIndicator(this._Caption, unmatchedElement.Indicators[IndicatorKey], IndicatorKey);
                }

                // unit
                foreach (string UnitKey in unmatchedElement.Units.Keys)
                {
                    logFile.AddUnmatchedUnit(this._Caption, unmatchedElement.Units[UnitKey], UnitKey);
                }

                // Subgroup
                foreach (string SGKey in unmatchedElement.Subgroups.Keys)
                {
                    logFile.AddUnmatchedSubgroup(this._Caption, unmatchedElement.Subgroups[SGKey], SGKey);
                }
            }
        }
        /// <summary>
        /// Imports mapped data values into database
        /// </summary>
        public void ImportTableValuesIntoDB(Database dbDatabase, CrossTabLogFile logFile)
        {
            Mapping MappedValues = null;
            string DataValue = String.Empty;
            string DenominatorValue = string.Empty;
            UnMatchedElementInfo UnmatchedElement;

            try
            {

                // import datavalues into target database
                for (int RowIndex = 0; RowIndex < this._DataValueTable.Rows.Count; RowIndex++)
                {
                    for (int ColIndex = 0; ColIndex < this._DataValueTable.Columns.Count; ColIndex++)
                    {
                        // dont insert denominator column values
                        if (this.DenominatorTable.Select(DenominatorColumns.DenominatorColumn + "='" + ColIndex +"'").Length == 0)
                        {
                            MappedValues = this.GetCellMapping(RowIndex, ColIndex, dbDatabase);
                            DataValue = Convert.ToString(this._DataValueTable.Rows[RowIndex][ColIndex]);

                            if (!string.IsNullOrEmpty(DataValue) && MappedValues != null && MappedValues.IsVaildMappedValues())
                            {

                                // dont import missingvaluecharacter into data table
                                if (!string.IsNullOrEmpty(this._MissingValueCharacter) && DataValue == this._MissingValueCharacter)
                                {
                                    // dont import missingvaluecharacter into data table
                                }
                                else
                                {
                                    // replace datavalue to zero if datavalue is equal to zero mask value
                                    if (!string.IsNullOrEmpty(this._ZeroMaskValue))
                                    {
                                        if (DataValue == this._ZeroMaskValue)
                                        {
                                            DataValue = "0";
                                        }
                                    }

                                    // round numeric datavalue
                                    if (DataValue != "-" && DataValue != "." && Microsoft.VisualBasic.Information.IsNumeric(DataValue))
                                    {
                                        DataValue = Convert.ToString(Math.Round(Convert.ToDecimal(DataValue), this._DecimalValue));
                                    }

                                    // get denominator value
                                    DenominatorValue = this.GetDenominatorValue(RowIndex, ColIndex);
                                    UnmatchedElement = MappedValues.ImportMappedValuesIntoDB(dbDatabase.DBConnection, dbDatabase.DBQueries, DataValue, DenominatorValue);

                                    this.WriteUnmatchedElementsIntoLogFile(logFile, UnmatchedElement);
                                }

                            }
                            else
                            {
                                // WRITE unmapped information into log file
                                this.WriteUnmappedInfoIntoLogFile(logFile, MappedValues, Convert.ToString(DataValue));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.ToString());
            }
        }
 private void WriteUnmappedInfoIntoLogFile(CrossTabLogFile logFile, Mapping mappedValues, string cellValue)
 {
     if (!string.IsNullOrEmpty(cellValue))
     {
         logFile.AddUnMappedCells(this._Caption, cellValue,
             string.IsNullOrEmpty(mappedValues.IndicatorGID),
     string.IsNullOrEmpty(mappedValues.UnitGID),
     string.IsNullOrEmpty(mappedValues.SubgroupValGID),
     string.IsNullOrEmpty(mappedValues.AreaID),
     string.IsNullOrEmpty(mappedValues.Timeperiod),
     string.IsNullOrEmpty(mappedValues.Source));
     }
 }
        /// <summary>
        /// Imports input files into database and returns log file name with path
        /// </summary>
        /// 
        public string ImportFilesIntoDB(Database dbDatabase)
        {
            string RetVal = string.Empty;

            CrossTabLogFile LogFile = new CrossTabLogFile();
            List<string> InputFileNames = new List<string>();
            int TableIndex = 1;
            try
            {
                RetVal = DICommon.DefaultFolder.DefaultSpreadSheetsFolder + LogFile.GenerateLogFileName(this._DXApplicationName);

                // Get fileNames
                foreach (CrossTabInputFileInfo InputFile1 in this._InputFiles)
                {
                    if (string.IsNullOrEmpty(InputFile1.ActucalFileNameWPath))
                    {
                        InputFileNames.Add(InputFile1.FileNameWPath);
                    }
                    else
                    {
                        InputFileNames.Add(InputFile1.ActucalFileNameWPath);
                    }
                }

                // Start log file
                LogFile.Start(RetVal, this._DXApplicationName, InputFileNames, this._OutputFileNameForLogFile, dbDatabase.DBConnection, dbDatabase.DBQueries);

                foreach (CrossTabInputFileInfo InputFileInfo in this._InputFiles)
                {
                    TableIndex = 1;

                    // Write file name in log file
                    LogFile.StartInputFileLog(InputFileInfo.ActucalFileNameWithoutExtension);

                    foreach (CrossTabTableInfo TableInfo in InputFileInfo.Tables)
                    {

                        if (string.IsNullOrEmpty(TableInfo.Caption))
                        {
                            TableInfo.Caption = TableIndex.ToString();
                        }

                        TableInfo.ZeroMaskValue = this._ZeroMaskValue;
                        TableInfo.MissingValueCharacter = this._MissingValueCharacter;
                        TableInfo.ImportTableValuesIntoDB(dbDatabase, LogFile);

                        TableIndex++;
                    }

                    //end input file log
                    LogFile.EndInputFileLog();
                }

                // close log file
                LogFile.Close();

                //update I,U & S NIDs in data table
                try
                {
                    dbDatabase.DBConnection.ExecuteNonQuery(DI_LibDAL.Queries.Data.Update.UpdateIndicatorUnitSubgroupVAlNids(dbDatabase.DBQueries.TablesName));
                }
                catch (Exception ex)
                {
                    throw new ApplicationException(ex.ToString());
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.ToString());
            }
            return RetVal;
        }