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 void SaveFile(string filePath, DatabaseOfItem databaseOfItem)
 {
     using (Stream stream = File.Open(filePath, FileMode.OpenOrCreate))
     {
         var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
         binaryFormatter.Serialize(stream, databaseOfItem);
     }
 }
 private void UpdtaeShopingCart(Product[] products, DatabaseOfItem databaseOfShoppingCart)
 {
     foreach (var item in products)
     {
         databaseOfShoppingCart.ItemsAndQuantities.Add(item.Name, item.Quantity);
         databaseOfShoppingCart.Items.Add(item.Name);
     }
 }
        public DatabaseOfItem LoadFile(string filePath)
        {
            using (Stream stream = File.OpenRead(filePath))
            {
                var            binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                DatabaseOfItem databaseOfItem  = null;
                try
                {
                    databaseOfItem = (DatabaseOfItem)binaryFormatter.Deserialize(stream);
                }
                catch (Exception) { }

                return(databaseOfItem);
            }
        }
        public string FullReportOfStore(DatabaseOfItem databaseOfItem)
        {
            var    report = new StringBuilder();
            double sum    = 0;

            foreach (var item in databaseOfItem.ItemsAndPrices)
            {
                var amount = (item.Value * databaseOfItem.ItemsAndQuantities[item.Key])
                             != 0 ? (item.Value * databaseOfItem.ItemsAndQuantities[item.Key]).ToString()
                    : "Not Exists";
                report.AppendFormat(@"{0} = {1} x{2}{3}",
                                    amount, item.Key,
                                    databaseOfItem.ItemsAndQuantities[item.Key],
                                    Environment.NewLine);
                sum += item.Value * databaseOfItem.ItemsAndQuantities[item.Key];
            }

            report.Insert(0, $"Total = {sum}{Environment.NewLine}{Environment.NewLine}");
            return(report.ToString());
        }
        public Dictionary <string, string> FullReportOfStores(List <FileIdentifiers> stores, DatabaseOfItem databaseOfShoppingCart)
        {
            var report = new Dictionary <string, string>();

            foreach (var store in stores)
            {
                try
                {
                    var itemsAndPrices = GetItemsPrice(store, databaseOfShoppingCart.Items)
                                         .OrderBy(item => item.Value).ToDictionary(pair => pair.Key, pair => pair.Value);

                    databaseOfShoppingCart.ItemsAndPrices = itemsAndPrices;
                    report.Add($"{store.DirName},{store.PartialFileName}", FullReportOfStore(databaseOfShoppingCart));
                }
                catch (Exception ex)
                {
                    //log here
                }
            }

            return(report);
        }