void ChooseCategories(GroupSignature signature)
 {
     DCT.Execute(d =>
     {
         if (!string.IsNullOrEmpty(signature.Category1))
         {
             Thread.Sleep(1000);
         }
         //2
         if (!string.IsNullOrEmpty(signature.Category2))
         {
             Thread.Sleep(1000);
         }
         //3
         if (!string.IsNullOrEmpty(signature.Category3))
         {
             Thread.Sleep(1000);
         }
         //4
         if (!string.IsNullOrEmpty(signature.Category4))
         {
             Thread.Sleep(1000);
         }
         //5
         if (!string.IsNullOrEmpty(signature.Category5))
         {
             Thread.Sleep(1000);
         }
     });
 }
Example #2
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Создает сигнатуру группы из хэша </summary>
        ///
        /// <remarks>   SV Milovanov, 12.02.2018. </remarks>
        ///
        /// <param name="hash"> The hash. </param>
        ///
        /// <returns>   The group signature. </returns>
        ///-------------------------------------------------------------------------------------------------
        public static GroupSignature GetGroupSignature(string hash)
        {
            GroupSignature result = null;

            BCT.Execute(data =>
            {
                var group = data.BulletinDb.Groups.FirstOrDefault(q => q.Hash == hash);
                if (group != null)
                {
                    var chosenCategories     = new List <string>();
                    var groupedCategories    = data.BulletinDb.GroupedCategories.Where(q => q.GroupId == group.Id).Select(q => q.CategoryId).ToArray();
                    var categories           = data.BulletinDb.CategoryTemplates.Where(q => groupedCategories.Contains(q.Id)).ToArray();
                    var topCategory          = categories.FirstOrDefault(q => q.ParentId == Guid.Empty);
                    var nothandledCategories = categories.Where(q => q.Id != topCategory.Id).ToList();
                    var parentId             = topCategory.Id;
                    chosenCategories.Add(topCategory.Name);
                    while (nothandledCategories.Count > 0)
                    {
                        for (var i = 0; i < nothandledCategories.Count; i++)
                        {
                            if (nothandledCategories[i].ParentId == parentId)
                            {
                                parentId = nothandledCategories[i].Id;
                                chosenCategories.Add(nothandledCategories[i].Name);
                                nothandledCategories.RemoveAt(i);
                                break;
                            }
                        }
                    }
                    result = new GroupSignature(chosenCategories.ToArray());
                }
            });
            return(result);
        }
Example #3
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Generates the XLS from group. </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///
        /// <param name="signature">    The signature. </param>
        ///
        /// <returns>   The XLS from group. </returns>
        ///-------------------------------------------------------------------------------------------------

        public override string GenerateXlsFromGroup(GroupSignature signature)
        {
            _DCT.Execute(data =>
            {
                var groupContainer = GroupContainerList.Get(Uid);
                var group          = groupContainer.Get(signature.GetHash());

                var fields = group.Fields;
                var names  = fields.Select(q => q.Key).ToArray();

                var xls = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"bulletins[{group.ToString()}].xlsx"));
                if (xls.Exists)
                {
                    xls.Delete();
                }
                using (var package = new ExcelPackage(xls))
                {
                    var worksheet = package.Workbook.Worksheets.Add("Мои объявления");
                    for (var i = 0; i < names.Length; i++)
                    {
                        var cell             = worksheet.Cells[1, i + 1];
                        cell.Style.Font.Size = 14;
                        cell.Value           = names[i];
                        cell.AutoFitColumns();
                    }

                    package.Save();
                }
            });
            return(null);
        }
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Редактирует буллетины из xls. </summary>
        ///
        /// <remarks>   SV Milovanov, 05.02.2018. </remarks>
        ///-------------------------------------------------------------------------------------------------

        public override void EditBulletinsFromXls()
        {
            DCT.Execute(data =>
            {
                var group = new GroupSignature("Хобби и отдых", "Охота и рыбалка");
                var xls   = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"edit_bulletins[{group}].xlsx"));

                using (var package = new ExcelPackage(xls))
                {
                    var worksheet    = package.Workbook.Worksheets.FirstOrDefault();
                    var endOfColumns = false;
                    var columnCount  = 0;
                    while (!endOfColumns)
                    {
                        if (!string.IsNullOrEmpty(worksheet.Cells[1, columnCount + 2].Value as string))
                        {
                            columnCount++;
                        }
                        else
                        {
                            endOfColumns = true;
                        }
                    }

                    var endOfBulletins = false;
                    var bulletinCount  = 0;
                    while (!endOfBulletins)
                    {
                        if (!string.IsNullOrEmpty(worksheet.Cells[bulletinCount + 2, 1].Value as string))
                        {
                            bulletinCount++;
                        }
                        else
                        {
                            endOfBulletins = true;
                        }
                    }

                    Exit();
                    Auth();
                    for (var i = 0; i < bulletinCount; i++)
                    {
                        var dictionary = new Dictionary <string, string>();
                        for (var j = 0; j < columnCount; j++)
                        {
                            var header = worksheet.Cells[1, j + 2];
                            var cell   = worksheet.Cells[i + 2, j + 2];
                            var key    = header.Value as string;
                            var v      = cell.Value != null ? cell.Value.ToString() : string.Empty;
                            dictionary.Add(key, v);
                        }
                        var guidCell = worksheet.Cells[i + 2, 1];
                        var guid     = guidCell.Value as string;

                        EditBulletin(Guid.Parse(guid), dictionary);
                    }
                }
            });
        }
Example #5
0
 ///-------------------------------------------------------------------------------------------------
 /// <summary>   Loads fields from group. </summary>
 ///
 /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
 ///
 /// <param name="signature">    The signature. </param>
 ///-------------------------------------------------------------------------------------------------
 public override void LoadFieldsFromGroup(GroupSignature signature)
 {
     DCT.Execute(data =>
     {
         var groupContainer = GroupContainerList.Get(Uid);
         var group          = groupContainer.GetGroupPackage(signature.GetHash());
         Fields             = group.Fields;
     });
 }
Example #6
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Gets XLS group. </summary>
        ///
        /// <remarks>   SV Milovanov, 06.02.2018. </remarks>
        ///
        /// <param name="boardName">    Name of the board. </param>
        ///-------------------------------------------------------------------------------------------------

        public static void GetXlsGroup(string boardName)
        {
            DCT.Execute(data =>
            {
                var board          = data.Db1.Boards.FirstOrDefault(q => q.Name == boardName);
                var boardContainer = BoardContainerList.Get(board.Id);
                var signature      = new GroupSignature("Хобби и отдых", "Спорт и отдых", "Другое");
                // boardContainer.GetXlsGroup(signature);
            });
        }
Example #7
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Генерация excel-файла для выбранной доски и сигнатуры группы. </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///
        /// <param name="boardId">  . </param>
        ///
        /// <returns>   An array of byte. </returns>
        ///-------------------------------------------------------------------------------------------------

        public static byte[] GenerateXls(string boardId)
        {
            _DCT.Execute(data =>
            {
                var boardContainer = BoardContainerList.Get(boardId);
                var group          = new GroupSignature("Транспорт", "Автомобили", "С пробегом");
                var s = boardContainer.GenerateXlsFromGroup(group);
            });

            return(null);
        }
 void ChooseCategories(GroupSignature signature)
 {
     DCT.Execute(d =>
     {
         foreach (var category in signature.GetCategories())
         {
             if (!string.IsNullOrEmpty(category))
             {
                 WebDriver.JsClick(By.CssSelector($"input[title='{category}']"));
                 Thread.Sleep(1000);
             }
         }
     });
 }
Example #9
0
        public static GroupSignature GetGroupSignature(Guid instanceId)
        {
            GroupSignature result = null;

            BCT.Execute(d =>
            {
                var dbInstance = d.BulletinDb.BulletinInstances.FirstOrDefault(q => q.Id == instanceId);
                var groupId    = dbInstance.GroupId;
                var dbGroup    = d.BulletinDb.Groups.FirstOrDefault(q => q.Id == groupId);
                var groupHash  = dbGroup.Hash;
                result         = GetGroupSignature(groupHash);
            });
            return(result);
        }
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Генерирует пустую xls для группы. </summary>
        ///
        /// <remarks>   SV Milovanov, 06.02.2018. </remarks>
        ///-------------------------------------------------------------------------------------------------

        public override void GetXlsGroup(GroupSignature signature)
        {
            DCT.Execute(d =>
            {
                var groupContainer = GroupContainerList.Get(Uid);
                var groupPackage   = groupContainer.GetGroupPackage(signature.GetHash());

                var xls = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"new_bulletins[{groupPackage}].xlsx"));
                if (xls.Exists)
                {
                    xls.Delete();
                }

                using (var package = new ExcelPackage(xls))
                {
                    var worksheet = package.Workbook.Worksheets.Add("Мои объявления");
                    var pairs     = groupPackage.Fields;


                    var count = 0;
                    foreach (var pair in pairs)
                    {
                        var cell = worksheet.Cells[1, count + 2];

                        cell.Style.Font.Size = 14;
                        cell.Value           = pair.Key;
                        cell.AutoFitColumns();

                        var options = pair.Value.Options;
                        if (options != null && options.Length > 0)
                        {
                            var optCells = worksheet.Cells[2, count + 2, 100, count + 2];
                            worksheet.DataValidations.Clear();
                            var validation = worksheet.DataValidations.AddListValidation(optCells.Address);
                            validation.ShowErrorMessage = true;
                            validation.ErrorStyle       = ExcelDataValidationWarningStyle.warning;
                            validation.ErrorTitle       = "An invalid value was entered";
                            validation.Error            = "Select a value from the list";
                            for (var i = 0; i < options.Length; i++)
                            {
                                validation.Formula.Values.Add(options[i].Text);
                            }
                        }
                        count++;
                    }
                    package.Save();
                }
            });
        }
Example #11
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Создает сигнатуру группы из инстанции буллетина. </summary>
        ///
        /// <remarks>   SV Milovanov, 12.02.2018. </remarks>
        ///
        /// <param name="instanceId">   Identifier for the instance. </param>
        ///
        /// <returns>   The group signature. </returns>
        ///-------------------------------------------------------------------------------------------------
        public static GroupSignature GetGroupSignature2(Guid bulletinId)
        {
            GroupSignature result = null;

            BCT.Execute(d =>
            {
                var dbBulletin = d.BulletinDb.Bulletins.FirstOrDefault(q => q.Id == bulletinId);
                var groupId    = dbBulletin.GroupId;
                var dbGroup    = d.BulletinDb.Groups.FirstOrDefault(q => q.Id == groupId);
                if (dbGroup != null)
                {
                    var groupHash = dbGroup.Hash;
                    result        = GetGroupSignature(groupHash);
                }
            });
            return(result);
        }
Example #12
0
 void AddBulletin(string cardName, string cardDescription, string cardPrice, string cardImageLinks)
 {
     DCT.Execute(d =>
     {
         if (string.IsNullOrEmpty(cardName) ||
             string.IsNullOrEmpty(cardDescription) ||
             string.IsNullOrEmpty(cardPrice))
         {
             MessageBox.Show("Пожалуйста, заполните все поля для добавления объявления");
             return;
         }
         var access = new AccessCache
         {
             Login    = Settings.Default.BoardLogin,
             Password = Settings.Default.BoardPassword,
         };
         var signature = new GroupSignature(CardCategory1, CardCategory2, CardCategory3);
         var fields    = new Dictionary <string, string>
         {
             { "Вид объявления", "Продаю свое" },
             { "Название объявления", cardName },
             { "Описание объявления", cardDescription },
             { "Цена", cardPrice },
         };
         if (!string.IsNullOrEmpty(cardImageLinks))
         {
             fields.Add(@"Фотографии", cardImageLinks);
         }
         var package = new BulletinPackage
         {
             Signature   = signature,
             ValueFields = fields,
             Access      = access,
         };
         ServiceClient._CreateBulletin(package, AddBulletinCallback);
     });
 }
 public abstract void LoadFieldsFromGroup(GroupSignature signature);
 public abstract string GenerateXlsFromGroup(GroupSignature signature);
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Генерирует пустую xls для группы </summary>
        ///
        /// <remarks>   SV Milovanov, 06.02.2018. </remarks>
        ///-------------------------------------------------------------------------------------------------

        public abstract void GetXlsGroup(GroupSignature signature);
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Добавление буллетина </summary>
        ///
        /// <remarks>   SV Milovanov, 05.02.2018. </remarks>
        ///
        /// <param name="signature">    Сигнатура группы </param>
        /// <param name="fields">       Словарь полей </param>
        ///-------------------------------------------------------------------------------------------------

        public void AddBulletin(GroupSignature signature, Dictionary <string, string> fields)
        {
            DCT.Execute(data =>
            {
                WebWorker.DownloadPage("https://www.avito.ru/additem", (doc) =>
                {
                    //1
                    if (!string.IsNullOrEmpty(signature.Category1))
                    {
                        var categoryRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                            .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category1);
                        if (categoryRadio == null)
                        {
                            return;
                        }
                        categoryRadio.InvokeMember("click");
                        Thread.Sleep(1000);
                    }
                    //2
                    if (!string.IsNullOrEmpty(signature.Category2))
                    {
                        var serviceRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                           .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category2);
                        if (serviceRadio == null)
                        {
                            return;
                        }
                        serviceRadio.InvokeMember("click");
                        Thread.Sleep(1000);
                    }
                    //3
                    if (!string.IsNullOrEmpty(signature.Category3))
                    {
                        var serviceTypeRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                               .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category3);
                        if (serviceTypeRadio == null)
                        {
                            return;
                        }
                        serviceTypeRadio.InvokeMember("click");
                        Thread.Sleep(1000);
                    }
                    //4
                    if (!string.IsNullOrEmpty(signature.Category4))
                    {
                        var serviceTypeRadio2 = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                                .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category4);
                        if (serviceTypeRadio2 == null)
                        {
                            return;
                        }
                        serviceTypeRadio2.InvokeMember("click");
                        Thread.Sleep(1000);
                    }
                    //5
                    if (!string.IsNullOrEmpty(signature.Category5))
                    {
                        var serviceTypeRadio3 = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                                .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == signature.Category5);
                        if (serviceTypeRadio3 == null)
                        {
                            return;
                        }
                        serviceTypeRadio3.InvokeMember("click");
                        Thread.Sleep(1000);
                    }

                    var fieldSetter = FieldContainerList.Get(Uid);
                    fieldSetter.LoadFieldsFromGroup(signature);

                    foreach (var pair in fields)
                    {
                        var template = fieldSetter.Fields.FirstOrDefault(q => q.Key == pair.Key);
                        fieldSetter.SetFieldValue(template.Key, pair.Value);
                    }

                    //Продолжить с пакетом «Обычная продажа»
                    var radioButton = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                      .FirstOrDefault(q => q.GetAttribute("id") == "pack1");
                    if (radioButton != null)
                    {
                        radioButton.InvokeMember("click");
                    }


                    var buttons = WebWorker.WebDocument.GetElementsByTagName("button").Cast <HtmlElement>();
                    var pack    = "Продолжить с пакетом «Обычная продажа»";
                    var button  = buttons.FirstOrDefault(btn => btn.InnerText == pack);
                    if (button != null)
                    {
                        button.InvokeMember("click");
                    }

                    Thread.Sleep(1000);
                });
                WebWorker.DownloadPage("https://www.avito.ru/additem/confirm", (doc) =>
                {
                    ////Снимаем галочки
                    var servicePremium = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                         .FirstOrDefault(q => q.GetAttribute("id") == "service-premium");
                    if (servicePremium != null)
                    {
                        servicePremium.InvokeMember("click");
                    }
                    var serviceVip = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                     .FirstOrDefault(q => q.GetAttribute("id") == "service-vip");
                    if (serviceVip != null)
                    {
                        serviceVip.InvokeMember("click");
                    }
                    var serviceHighlight = WebWorker.WebDocument.GetElementsByTagName("input").Cast <HtmlElement>()
                                           .FirstOrDefault(q => q.GetAttribute("id") == "service-highlight");
                    if (serviceHighlight != null)
                    {
                        serviceHighlight.InvokeMember("click");
                    }

                    ////Подтверждаем
                    var text           = "Продолжить";
                    var buttonContinue = WebWorker.WebDocument.GetElementsByTagName("button").Cast <HtmlElement>().FirstOrDefault(btn => btn.InnerText == text);
                    if (buttonContinue != null)
                    {
                        buttonContinue.InvokeMember("click");
                    }
                });
            });
        }
Example #17
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Edit from XLS. </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///-------------------------------------------------------------------------------------------------

        public override void EditFromXls()
        {
            _DCT.Execute(data =>
            {
                var signature = new GroupSignature("Хобби и отдых", "Спорт и отдых", "Другое");
                //var signature = new GroupSignature("Личные вещи", "Товары для детей и игрушки", "Игрушки");
                var xls = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), $"edit_bulletins[{signature.ToString()}].xlsx"));

                using (var package = new ExcelPackage(xls))
                {
                    var worksheet    = package.Workbook.Worksheets.FirstOrDefault();
                    var endOfColumns = false;
                    var columnCount  = 0;
                    while (!endOfColumns)
                    {
                        if (!string.IsNullOrEmpty(worksheet.Cells[1, columnCount + 1].Value as string))
                        {
                            columnCount++;
                        }
                        else
                        {
                            endOfColumns = true;
                        }
                    }

                    var endOfBulletins = false;
                    var bulletinCount  = 0;
                    while (!endOfBulletins)
                    {
                        if (!string.IsNullOrEmpty(worksheet.Cells[bulletinCount + 2, 1].Value as string))
                        {
                            bulletinCount++;
                        }
                        else
                        {
                            endOfBulletins = true;
                        }
                    }

                    Exit();
                    Auth();
                    for (var i = 0; i < bulletinCount; i++)
                    {
                        var dictionary = new Dictionary <string, string>();
                        for (var j = 0; j < columnCount; j++)
                        {
                            var header = worksheet.Cells[1, j + 1];
                            var cell   = worksheet.Cells[i + 2, j + 1];
                            var key    = header.Value as string;
                            var v      = cell.Value != null ? cell.Value.ToString() : string.Empty;
                            dictionary.Add(key, v);
                        }
                        var urlCell = worksheet.Cells[i + 2, columnCount + 1];
                        var url     = urlCell.Value as string;

                        var stateCell = worksheet.Cells[i + 2, columnCount + 2];
                        var state     = stateCell.Value as string;

                        var bulletin = new Bulletin
                        {
                            Fields    = dictionary,
                            Signature = signature,
                            State     = state,
                            Url       = url
                        };
                        EditBulletin(bulletin);
                    }
                }
            });
        }