public static ImportResult <Test1ImportResult> ImportTest1(HttpPostedFileBase httpPostedFileBase)
        {
            var fileData     = ImporterHelper.ImportFromFile(httpPostedFileBase, new Test1ImportFileStructure());
            var venuesImport = new Test1Import(fileData);

            return(venuesImport.Import());
        }
Beispiel #2
0
        private void load(List <FieldMatch> fields)
        {
            if (fields.Count == 0)
            {
                return;
            }
            var       parameters = new List <Interfaces.Params>();
            var       insertSql  = "insert into {0}.{1} (";
            var       selectSql  = "select ";
            string    valuesStr  = ") values (";
            DataTable datas      = new DataTable();

            foreach (var f in fields)
            {
                insertSql += "\"" + f.Dest.Name + "\",";
                valuesStr += ":" + f.Dest.Name + ",";
                selectSql += f.Src + ",";
                var p = new Interfaces.Params()
                {
                    paramName = f.Dest.Name
                };
                ImporterHelper.SetParamType(f.Dest, p);
                parameters.Add(p);
                datas.Columns.Add(f.Src);
            }
            selectSql  = selectSql.TrimEnd(',');
            insertSql  = insertSql.TrimEnd(',');
            valuesStr  = valuesStr.TrimEnd(',');
            insertSql += valuesStr + ")";
            selectSql += string.Format(" FROM [{0}#dbf]", Name);
            //инициируем считывание
            var reader = (new OleDbCommand(selectSql, Connection)).ExecuteReader();

            using (SqlWork sw = new SqlWork(_pgConnect, true))
            {
                sw.BeginTransaction();
                sw.sql = string.Format(insertSql, _pgTable.SchemeName, _pgTable.Name);
                for (int i = 0, report = 0; reader.Read(); report++)
                {
                    //добавляем в таблицу
                    List <object> colData = new List <object>();
                    for (int j = 0; j < datas.Columns.Count; j++)
                    {
                        colData.Add(reader[j]);
                    }
                    datas.Rows.Add(colData.ToArray());
                    i++;
                    if (i >= _rowsInSect)
                    {
                        //кладем в базу
                        for (int j = 0; j < datas.Rows.Count; j++)
                        {
                            for (int k = 0; k < datas.Columns.Count; k++)
                            {
                                ImporterHelper.SetParamValue(parameters[k], datas.Rows[j][k]);
                            }
                            sw.ExecuteNonQuery(parameters.ToArray());
                        }
                        i = 0;
                        datas.Clear();
                    }
                    ReportProgress(0, report);
                }
                reader.Close();
                sw.EndTransaction();
            }
        }
Beispiel #3
0
        /// <summary>
        /// Выгружаем поля
        /// </summary>
        private string FormQuerySQL(List <FieldMatch> fields, ref List <Interfaces.Params>[] paramList, ref List <String> columns)
        {
            for (int i = 0; i < paramList.Count(); i++)
            {
                paramList[i] = new List <Interfaces.Params>();
            }

            string fieldsStr = String.Empty;
            string valuesStr = String.Empty;

            foreach (var f in fields)
            {
                fieldsStr += String.Format("\"{0}\",", f.Dest.Name);
                valuesStr += String.Format(":{0},", f.Dest.Name);

                var p = new Interfaces.Params()
                {
                    paramName = f.Dest.Name
                };
                ImporterHelper.SetParamType(f.Dest, p);

                foreach (var par in paramList)
                {
                    par.Add(p.Clone());
                }

                columns.Add(f.Src);
            }

            if (!_loadGeom)
            {
                fieldsStr = fieldsStr.TrimEnd(',');
                valuesStr = valuesStr.TrimEnd(',');
            }
            else
            {
                // добавляем поле геометрии

                string geomSql = string.Format("st_geomfromwkb(:{0},{1})", _pgTable.GeomField, _pgTable.Srid);

                // нужно ли привести геометрию к мульти
                if (_isMulti)
                {
                    geomSql = String.Format("st_multi({0})", geomSql);
                }

                valuesStr += geomSql;
                fieldsStr += _pgTable.GeomField;
                columns.Add(_pgTable.GeomField);

                var p = new Interfaces.Params()
                {
                    paramName = _pgTable.GeomField, type = DbType.Binary, typeData = NpgsqlTypes.NpgsqlDbType.Bytea
                };

                foreach (var par in paramList)
                {
                    par.Add(p.Clone());
                }
            }

            return(string.Format("INSERT INTO {0}.{1} ({2}) VALUES ({3});",
                                 _pgTable.SchemeName, _pgTable.Name, fieldsStr, valuesStr));
        }
Beispiel #4
0
        private void load(List <FieldMatch> fields)
        {
            if (fields.Count == 0 && _loadGeom == false)
            {
                return;
            }

            // размер блока для загрузки в БД
            int rowsInSect = Math.Min(100, Math.Max(1, RowsCount / 10));

            // список параметров для загрузки в БД
            List <Interfaces.Params>[] paramList = new List <Interfaces.Params> [rowsInSect];

            // названия колонок таблицы
            List <String> columns = new List <string>();

            string wktTo   = GetSRText(_pgTable.Srid);
            string wktFrom = GetSRText(_srid);

            //инициируем считывание
            _shpWork.StartRead();

            List <string> errors = new List <string>();

            using (var sw = new SqlWork(_connect, true))
            {
                sw.BeginTransaction();
                sw.sql = FormQuerySQL(fields, ref paramList, ref columns);

                for (int i = 0, report = 0; _shpWork.Read() && report < RowsCount; report++)
                {
                    //добавляем в таблицу
                    for (int j = 0; j < columns.Count; j++)
                    {
                        try
                        {
                            if (_loadGeom == true && j == columns.Count - 1)
                            {
                                ImporterHelper.SetParamValue(
                                    paramList[i][j],
                                    _shpWork.TransformedCurrentGeometry(wktTo, wktFrom));
                            }
                            else
                            {
                                ImporterHelper.SetParamValue(
                                    paramList[i][j],
                                    _shpWork[columns[j]]);
                            }
                        }
                        catch (Exception e)
                        {
                            if (!errors.Contains(e.Message))
                            {
                                errors.Add(e.Message);
                            }
                        }
                    }

                    if (++i >= rowsInSect || report == RowsCount - 1)
                    {
                        //кладем в базу
                        for (int k = 0; k < i; k++)
                        {
                            try
                            {
                                sw.ExecuteNonQuery(paramList[k].ToArray());
                            }
                            catch (Exception e)
                            {
                                if (!errors.Contains(e.Message))
                                {
                                    errors.Add(e.Message);
                                }
                            }
                        }
                        i = 0;
                        ReportProgress(0, report);
                    }
                }
                _shpWork.EndRead();
                sw.EndTransaction();

                if (errors.Count > 0)
                {
                    throw new Exception(String.Join(Environment.NewLine, errors));
                }
            }
        }
        private void load(List <FieldMatch> fields, string rngString)
        {
            if (fields.Count == 0)
            {
                return;
            }
            var    parameters = new List <Interfaces.Params>();
            var    insertSql  = "insert into {0}.{1} (";
            string valuesStr  = ") values (";

            foreach (var f in fields)
            {
                insertSql += "\"" + f.Dest.Name + "\",";
                valuesStr += ":" + f.Dest.Name + ",";
                var p = new Interfaces.Params()
                {
                    paramName = f.Dest.Name
                };
                ImporterHelper.SetParamType(f.Dest, p);
                parameters.Add(p);
            }
            insertSql  = insertSql.TrimEnd(',');
            valuesStr  = valuesStr.TrimEnd(',');
            insertSql += valuesStr + ")";
            //читаем excel
            String sheetString = rngString.Split('$')[0];
            String rangeString = rngString.Split('$')[1];
            var    excelAppl   = new Excel.Application()
            {
                Visible = false
            };
            var workbook = excelAppl.Workbooks.Open(_inputFile.FullName);

            Excel.Worksheet workSheet = (Excel.Worksheet)(workbook.Sheets.Item[sheetString]);
            Excel.Range     workRange = workSheet.get_Range(rangeString);
            // Где на странице Excel находятся данные
            int lastRow     = workRange.Row + workRange.Rows.Count - 1;
            int firstRow    = workRange.Row;
            int lastColumn  = workRange.Column + workRange.Columns.Count - 1;
            int firstColumn = workRange.Column;
            // Получаются данные из excel в виде массива объектов
            var excValues = (object[, ])(workRange.Value);

            workbook.Close();

            // Сколько строк и сколько столбцов
            _rowsCount = excValues.GetLength(0) - 1;            //первая строка заголовки
            var colsCount = excValues.GetLength(1);

            excelAppl.Quit();

            DataTable datas = new DataTable();

            for (int j = 1; j <= colsCount; j++)
            {
                datas.Columns.Add(excValues[1, j].ToString());
            }

            using (SqlWork sw = new SqlWork(_pgConnect, true))
            {
                sw.BeginTransaction();
                sw.sql = string.Format(insertSql, _pgTable.SchemeName, _pgTable.Name);
                for (int i = 2, report = 0; i <= _rowsCount + 1; i++)
                {
                    //добавляем в таблицу
                    datas.Rows.Add(getRow(excValues, i, colsCount));
                    report++;
                    if (report >= _rowsInSect)
                    {
                        //убираем ненужные колонки
                        List <object> cols2delete = new List <object>();
                        for (int j = 0; j < datas.Columns.Count; j++)
                        {
                            if (fields.Find(w => w.Src == datas.Columns[j].Caption) == null)
                            {
                                cols2delete.Add(datas.Columns[j]);
                            }
                        }
                        foreach (var c in cols2delete)
                        {
                            datas.Columns.Remove((DataColumn)c);
                        }
                        //кладем в базу
                        for (int j = 0; j < datas.Rows.Count; j++)
                        {
                            for (int k = 0; k < datas.Columns.Count; k++)
                            {
                                ImporterHelper.SetParamValue(parameters[k], datas.Rows[j][k]);
                            }
                            sw.ExecuteNonQuery(parameters.ToArray());
                        }
                        report = 0;
                        datas  = new DataTable();
                        for (int j = 1; j <= colsCount; j++)
                        {
                            datas.Columns.Add(excValues[1, j].ToString());
                        }
                    }
                    ReportProgress(0, i - 2);
                }
                sw.EndTransaction();
            }
        }
        public void Execute()
        {
            if (!IsValidDateRange)
            {
                Log.Debug(string.Format("Genworth.SitecoreExt.ScheduledTasks.MarketingUtilityStatusTask: Out of Time Range; Start: {0}, End: {1}; Now: {2}", StartUpWindow, EndingWindow, DateTime.Now), this);
                return;
            }
            List <KeyValuePair <string, string> > summary = new List <KeyValuePair <string, string> >();

            try
            {
                Log.Debug(string.Format("Genworth.SitecoreExt.ScheduledTasks.MarketingUtilityStatusTask:Execute - start; Time Range; Start: {0}, End: {1}; Now: {2}", StartUpWindow, EndingWindow, DateTime.Now), this);

                var templates = ImporterHelper.GetExtendedDocumentTemplates();

                foreach (var template in templates)
                {
                    var items = GetItemsByTemplate(template);

                    Log.Debug(string.Format("Genworth.SitecoreExt.ScheduledTasks.MarketingUtilityStatusTask: Found {1} in {0}", template.TemplateFullName, items.Count()), this);

                    foreach (var item in items)
                    {
                        var createdDate = item.GetField("Statistics", "__created").GetDate();

                        var ownerEmailsDictionary   = item.GetNameValueDictionary("Repository Owner Emails");
                        var documentStateDictionary = item.GetNameValueDictionary("Repository Document State").Where(f => (ownerEmailsDictionary.ContainsKey(f.Key)) && (f.Value == "P" || f.Value == "R"));

                        if (documentStateDictionary.Count() < 1)
                        {
                            continue;
                        }

                        var repositoriesDictionary = GetRepositoryDictionary(item.GetMultilistItems("Repositories"));

                        // Add different emails.
                        var senderEmails = GetDifferentEmails(documentStateDictionary, ownerEmailsDictionary);

                        // Add submiter in case it is not included
                        AddDifferentString(senderEmails, item.GetText("Submitter Name"));

                        // Greate mail body
                        StringBuilder body = new StringBuilder();
                        body.AppendFormat("<h2>'{0}' file has repository status pending for approval</h2>", item.DisplayName);
                        body.AppendFormat("<p><b>Date: </b>{0}<br />", item.GetField("Statistics", "__created").GetDate());
                        body.AppendFormat("<b>Path: </b>{0}</p>", item.Paths.FullPath);

                        foreach (var ds in documentStateDictionary)
                        {
                            string key = null;
                            repositoriesDictionary.TryGetValue(ds.Key, out key);
                            body.AppendFormat("<b>Repository</b> '{0}' <b>status</b> '{1}'<br />", key ?? ds.Key, ds.Value);
                        }

                        string sBody = body.ToString();
                        foreach (var email in senderEmails)
                        {
                            // Add to summary
                            summary.Add(new KeyValuePair <string, string>(email.ToLower(), sBody));
                        }
                    }
                }

                var groups = summary.ToLookup(f => f.Key);
                Log.Debug(string.Format("Genworth.SitecoreExt.ScheduledTasks.MarketingUtilityStatusTask: Sending {0} emails", groups.Count()), this);

                MailQProvider mailq = new MailQProvider();
                foreach (var item in groups)
                {
                    var toAddress = item.Key;
                    var bodys     = item.Select(f => f.Value);

                    mailq.SendEmailWithOutTemplate(
                        "*****@*****.**",
                        null,
                        null,
                        "Marketing Collateral Distribution Utility - Repository status report " + toAddress,
                        string.Concat(bodys) + "<br/><br/>" + DateTime.Now
                        );
                }
            }
            catch (Exception ex)
            {
                Log.Error(String.Format("Genworth.SitecoreExt.ScheduledTasks.MarketingUtilityStatusTask:Execute failed due to {0}", ex.Message), this);
            }
            finally
            {
                Log.Debug("Genworth.SitecoreExt.ScheduledTasks.MarketingUtilityStatusTask: Ends", this);
            }
        }