public void Resfresh(Document doc)
        {
            var i = _documents.IndexOf(doc);

            if (i == -1)
                return;

            _documents[i] = doc;
        }
        public void Add(Document doc)
        {
            if (!doc.HasData)
                return;

            if (_dates.Contains(doc.Date))
                return;

            _dates.Add(doc.Date);
            _documents.Add(doc);
        }
 public Document<Warehouse> GetWarehouses(XmlNodeList methodProperties)
 {
     var xmlResponse = MakeTask("Address", "getWarehouses", methodProperties).Result;
     var doc = new Document<Warehouse>();
     doc.LoadFromXml(xmlResponse);
     return doc;
 }
 public Document<DataItem> GetDocumentList(XmlNodeList methodProperties)
 {
     var xmlResponse = MakeTask("InternetDocument", "getDocumentList", methodProperties);
     var doc = new Document<DataItem>();
     doc.LoadFromXml(xmlResponse.Result);
     return doc;
 }
 public async Task<Document<Warehouse>> GetWarehousesAsync(XmlNodeList methodProperties)
 {
     var xmlResponse = await MakeTask("Address", "getWarehouses", methodProperties);
     var doc = new Document<Warehouse>();
     doc.LoadFromXml(xmlResponse);
     return doc;
 }
        public Document<TrackingItem> DocumentsTracking(XmlNodeList methodProperties)
        {
            var task = MakeTask("InternetDocument", "documentsTracking", methodProperties);

            var document = new Document<TrackingItem>();
            document.LoadFromXml(task.Result);
            return document;
        }
 public async Task<Document<DataItem>> GetDocumentListAsync(XmlNodeList methodProperties)
 {
     var xmlResponse = await MakeTask("InternetDocument", "getDocumentList", methodProperties);
     var doc = new Document<DataItem>();
     doc.LoadFromXml(xmlResponse);
     return doc;
 }
 private Document<City> GetCities(XmlNodeList methodProperties)
 {
     var xmlResponse = MakeTask("Address", "getCities", methodProperties);
     var doc = new Document<City>();
     doc.LoadFromXml(xmlResponse.Result);
     return doc;
 }
        public async Task<Document<TrackingItem>> DocumentsTrackingAsync(XmlNodeList methodProperties)
        {
            var task = await MakeTask("InternetDocument", "documentsTracking", methodProperties);

            var document = new Document<TrackingItem>();
            document.LoadFromXml(task);
            return document;
        } 
        private async Task DoWorkAsync(Document<Warehouse> document, SqlConnection connectionWarehouses)
        {
           foreach (var item in document.Items)
            {
                using (
                    SqlCommand cmd2 =
                        new SqlCommand(
                            "INSERT INTO [Warehouses] (Description, DescriptionRu, Phone, TypeOfWarehouse," +
                            " Ref, Number, CityRef, Longitude, Latitude) VALUES (@Description, @DescriptionRu, @Phone, @TypeOfWarehouse," +
                            " @Ref, @Number, @CityRef, @Longitude, @Latitude)", connectionWarehouses)
                    )
                {
                    cmd2.Parameters.AddWithValue("@Description", item.Description);
                    cmd2.Parameters.AddWithValue("@DescriptionRu", item.DescriptionRu);
                    cmd2.Parameters.AddWithValue("@Phone", item.Phone);
                    cmd2.Parameters.AddWithValue("@TypeOfWarehouse", item.TypeOfWarehouse);
                    cmd2.Parameters.AddWithValue("@Ref", item.Ref);
                    cmd2.Parameters.AddWithValue("@Number", item.Number);
                    cmd2.Parameters.AddWithValue("@CityRef", item.CityRef);
                    cmd2.Parameters.AddWithValue("@Longitude", item.Longitude);
                    cmd2.Parameters.AddWithValue("@Latitude", item.Latitude);
                    await cmd2.ExecuteNonQueryAsync();


                    cmd2.CommandText =
                        "INSERT INTO [Reception] (Ref, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) " +
                        "VALUES (@Ref, @Monday, @Tuesday, @Wednesday, @Thursday, @Friday, @Saturday, @Sunday)";
                    cmd2.Parameters.AddWithValue("@Monday", item.Reception.Monday);
                    cmd2.Parameters.AddWithValue("@Tuesday", item.Reception.Tuesday);
                    cmd2.Parameters.AddWithValue("@Wednesday", item.Reception.Wednesday);
                    cmd2.Parameters.AddWithValue("@Thursday", item.Reception.Thursday);
                    cmd2.Parameters.AddWithValue("@Friday", item.Reception.Friday);
                    cmd2.Parameters.AddWithValue("@Saturday", item.Reception.Saturday);
                    cmd2.Parameters.AddWithValue("@Sunday", item.Reception.Sunday);

                    await cmd2.ExecuteNonQueryAsync();

                    cmd2.CommandText =
                        "INSERT INTO [Delivery] (Ref, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) " +
                        "VALUES (@Ref, @Monday, @Tuesday, @Wednesday, @Thursday, @Friday, @Saturday, @Sunday)";
                    cmd2.Parameters["@Monday"].Value = item.Delivery.Monday;
                    cmd2.Parameters["@Tuesday"].Value = item.Delivery.Tuesday;
                    cmd2.Parameters["@Wednesday"].Value = item.Delivery.Wednesday;
                    cmd2.Parameters["@Thursday"].Value = item.Delivery.Thursday;
                    cmd2.Parameters["@Friday"].Value = item.Delivery.Friday;
                    cmd2.Parameters["@Saturday"].Value = item.Delivery.Saturday;
                    cmd2.Parameters["@Sunday"].Value = item.Delivery.Sunday;

                    await cmd2.ExecuteNonQueryAsync();

                    cmd2.CommandText =
                        "INSERT INTO [Schedule] (Ref, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) " +
                        "VALUES (@Ref, @Monday, @Tuesday, @Wednesday, @Thursday, @Friday, @Saturday, @Sunday)";
                    cmd2.Parameters["@Monday"].Value = item.Schedule.Monday;
                    cmd2.Parameters["@Tuesday"].Value = item.Schedule.Tuesday;
                    cmd2.Parameters["@Wednesday"].Value = item.Schedule.Wednesday;
                    cmd2.Parameters["@Thursday"].Value = item.Schedule.Thursday;
                    cmd2.Parameters["@Friday"].Value = item.Schedule.Friday;
                    cmd2.Parameters["@Saturday"].Value = item.Schedule.Saturday;
                    cmd2.Parameters["@Sunday"].Value = item.Schedule.Sunday;

                    await cmd2.ExecuteNonQueryAsync();


                }
            }
        }
 private async Task AddCitiesToDataBase(Document<City> doc, SqlConnection connection)
 {
     foreach (var item in doc.Items)
     {
         using (
             SqlCommand cmd =
                 new SqlCommand(
                     "INSERT INTO [Cities] (Description, DescriptionRu, Ref, Monday, Tuesday, Wednesday," +
                     " Thursday, Friday, Saturday, Sunday, Area, CityID) VALUES " +
                     "(@Description, @DescriptionRu, @Ref, @Monday, @Tuesday, @Wednesday," +
                     " @Thursday, @Friday, @Saturday, @Sunday, @Area, @CityID)", connection))
         {
             cmd.Parameters.AddWithValue("@Description", item.Description);
             cmd.Parameters.AddWithValue("@DescriptionRu", item.DescriptionRu);
             cmd.Parameters.AddWithValue("@Ref", item.Ref);
             cmd.Parameters.AddWithValue("@Monday", item.Monday);
             cmd.Parameters.AddWithValue("@Tuesday", item.Tuesday);
             cmd.Parameters.AddWithValue("@Wednesday", item.Wednesday);
             cmd.Parameters.AddWithValue("@Thursday", item.Thursday);
             cmd.Parameters.AddWithValue("@Friday", item.Friday);
             cmd.Parameters.AddWithValue("@Saturday", item.Saturday);
             cmd.Parameters.AddWithValue("@Sunday", item.Sunday);
             cmd.Parameters.AddWithValue("@Area", item.Area);
             cmd.Parameters.AddWithValue("@CityID", item.CityId);
             try
             {
                 await cmd.ExecuteNonQueryAsync();
             }
             catch (SqlException)
             {
                 return;
             }
         }
     }
 }
        private async void MenuItem_OnClick(object sender, RoutedEventArgs e)
        {
            var selectedItems = DG_doc.SelectedItems.Cast<DataItem>().ToList();
            var dataGridItems = DG_doc.Items;



            var newXmlDocument = await Task<List<DataItem>>.Factory.StartNew(() =>
            {
                var methodPrepetries = CreateXmlListPropertiesForDocumentsTracking(selectedItems);

                //                var task = MakeTask("InternetDocument", "documentsTracking", methodPrepetries);

                var document = new Document();
                //              document.LoadResponseXmlDocument(task.Result);

                return document.Items;
            });

            for (var i = 0; i < selectedItems.Count; i++)
            {
                var index = dataGridItems.IndexOf(selectedItems[i]);
                selectedItems[i].StateName = newXmlDocument[i].StateName;
                //  var oldResponseList = await DeSerializeDocuments();
                dataGridItems[index] = selectedItems[i];
            }
        }
        private void AddItemsToDataGrid(Document document, DataItem filterItem)
        {
            if (!document.Success || !document.HasData)
                return;

            AddItemsToDataGrid(document.Items, filterItem);
        }
        private async Task<XmlDocument> MakeTask(string modelName, string methodName, XmlNodeList xmlList)
        {
            var newDocument = new Document();
            var xmlQuery = newDocument.MakeRequestXmlDocument(_apiKey, modelName, methodName, xmlList);

            XmlDocument xmlResponse = null;
            try
            {
                Thread.Sleep(new Random().Next(50));
                xmlResponse = await newDocument.SendRequestXmlDocumentAsync(xmlQuery);
            }
            catch (WebException e)
            {
                MessageBox.Show(e.Message);
                Close();
            }

            newDocument.LoadResponseXmlDocument(xmlResponse);
            if (!newDocument.Success)
            {
                MessageBox.Show("Invalid API key");
                this.Close();
            }


            lock (_locker)
            {
                using (SqlConnection connection = new SqlConnection(_connectionString))
                {
                    connection.Open();
                    foreach (var item in newDocument.Items)
                    {
                        AddToDateBase(connection, item);
                    }
                }
            }


            return xmlResponse;
        }