public string GetStoreFullPath(FileIdentifiers fileIdentifiers)
        {
            var storeFileIdentifier = new FileIdentifiers();

            storeFileIdentifier.DirName         = fileIdentifiers.DirName;
            storeFileIdentifier.PartialFileName = "Stores";
            FileInfo[] fileInfo     = GetFileInfo(storeFileIdentifier);
            var        XElementDoc  = XElement.Load(fileInfo[0].FullName);
            string     fileFullPath = string.Empty;
            var        storeId      = (from element in (XElementDoc.Descendants()
                                                        .Where(el => string.Compare(el.Name.LocalName, "Store",
                                                                                    StringComparison.OrdinalIgnoreCase) == 0))
                                       where (string)element.Element("StoreName") == fileIdentifiers.PartialFileName
                                       select(string) element.Element("StoreId"))
                                      .ToList().First();
            var storeIdInFormOf3Digits = string.Format("{0:000}", int.Parse(storeId));

            storeFileIdentifier.PartialFileName = $"Price*Full*-{storeIdInFormOf3Digits}-";
            FileInfo[] files = GetFileInfo(storeFileIdentifier);
            if (files.Any())
            {
                fileFullPath = files[0].FullName;
            }

            return(System.IO.Path.Combine(Path, fileFullPath));
        }
        public object[] GetReport(Data data)
        {
            var databaseOfShoppingCart = new DatabaseOfItem();

            UpdtaeShopingCart(data.products, databaseOfShoppingCart);
            List <FileIdentifiers> stores = new List <FileIdentifiers>();

            foreach (string chainAndBranchName in data.storesToCompare)
            {
                string[] chainAndBranch = chainAndBranchName.Split(',');
                var      store          = new FileIdentifiers()
                {
                    DirName         = chainAndBranch[0],
                    PartialFileName = chainAndBranch[1]
                };
                stores.Add(store);
            }

            var           fullReportOfStores = _storeFileManager.FullReportOfStores(stores, databaseOfShoppingCart);
            List <Report> reporetOfStores    = new List <Report>();

            foreach (var item in fullReportOfStores)
            {
                var report = new Report();
                report.StoreName   = item.Key;
                report.StoreReport = item.Value;
                reporetOfStores.Add(report);
            }

            return(reporetOfStores.ToArray <object>());
        }
        public FileInfo[] GetFileInfo(FileIdentifiers fileIdentifiers)
        {
            var directoryInWhichToSearch = new DirectoryInfo(System.IO.Path.Combine(Path, fileIdentifiers.DirName));

            FileInfo[] filesInDir = directoryInWhichToSearch.GetFiles($"*{fileIdentifiers.PartialFileName}*.*", SearchOption.AllDirectories);

            return(filesInDir);
        }
        public List <string> GetStoresNames(FileIdentifiers fileIdentifiers, XmlElementId xmlElementId)
        {
            FileInfo[] filesInDir = GetFileInfo(fileIdentifiers);
            xmlElementId.XmlFullPath = System.IO.Path.Combine(fileIdentifiers.DirName, filesInDir[0].Name);
            var storeNames = GetListOfElementsFromXml(xmlElementId);

            return(storeNames);
        }
        public object[] GetStoreNames(string info)
        {
            string[] getData         = info.Split(',');
            var      fileIdentifiers = new FileIdentifiers()
            {
                DirName         = getData[0],
                PartialFileName = getData[1]
            };
            string optionalAeraFilter = getData[2];

            return(_storeFileManager.GetStoresNames(fileIdentifiers, optionalAeraFilter).ToArray <object>());
        }
        public List <string> GetDirectories()
        {
            List <string> chainNames = new List <string>();

            var fileIdentifiers = new FileIdentifiers()
            {
                DirName         = Path,
                PartialFileName = "Stores"
            };

            FileInfo[] filesInDir = GetFileInfo(fileIdentifiers);
            foreach (FileInfo foundFile in filesInDir)
            {
                chainNames.Add(foundFile.Directory.Name);
            }

            return(chainNames);
        }
        public async Task <object[]> GetProductItems(string info)
        {
            string[] getData         = info.Split(',');
            var      fileIdentifiers = new FileIdentifiers()
            {
                DirName         = getData[0],
                PartialFileName = getData[1]
            };

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

            try
            {
                items = await _storeFileManager.GetItemsOfStore(fileIdentifiers);
            }
            catch (Exception ex) { }// log here}

            return(items.ToArray <object>());
        }
        public List <string> GetStoresNames(FileIdentifiers fileIdentifiers, string optionalAreaName)
        {
            FileInfo[] filesInDir   = GetFileInfo(fileIdentifiers);
            var        xmlElementId = new XmlElementId()
            {
                DescendantFrom = "Store",
                ElementName    = "StoreName",
                XmlFullPath    = System.IO.Path.Combine(Path, System.IO.Path.Combine(fileIdentifiers.DirName, filesInDir[0].Name))
            };

            if (!string.IsNullOrEmpty(optionalAreaName))
            {
                xmlElementId.ElementCondition         = "City";
                xmlElementId.ElementConditionExpected = optionalAreaName;
            }

            var storeNames = GetListOfElementsFromXml(xmlElementId);

            return(storeNames);
        }
        public Dictionary <string, double> GetItemsPrice(FileIdentifiers fileIdentifiers, List <string> items)
        {
            var    itemsNameAndPrice = new Dictionary <string, double>();
            double price             = 0;
            var    uri = GetStoreFullPath(fileIdentifiers);

            if (uri != string.Empty)
            {
                var XElementDoc = XElement.Load(uri);
                foreach (var itemName in items)
                {
                    price = (from element in XElementDoc.Descendants()
                             .Where(el => string.Compare(el.Name.LocalName, "Item",
                                                         StringComparison.OrdinalIgnoreCase) == 0)
                             where (string)element.Element("ItemName") == itemName
                             select(double) element.Element("ItemPrice")).FirstOrDefault();
                    itemsNameAndPrice.Add(itemName, price);
                }
            }

            return(itemsNameAndPrice);
        }
        public async Task <List <string> > GetItemsOfStore(FileIdentifiers fileIdentifiers)
        {
            var items        = new List <string>();
            var xmlElementId = new XmlElementId();

            xmlElementId.XmlFullPath    = GetStoreFullPath(fileIdentifiers);
            xmlElementId.DescendantFrom = "Item";
            xmlElementId.ElementName    = "ItemName";

            await Task.Run(() =>
            {
                var listOfItems = GetListOfElementsFromXml(xmlElementId);
                foreach (var item in listOfItems)
                {
                    if (!items.Contains(item))
                    {
                        items.Add(item);
                    }
                }
            });

            return(items);
        }