/// <summary>
        /// Exports all product's data - product name and product tax.
        /// </summary>
        /// <returns>All products and their tax.</returns>
        public static IDictionary<string, double?> GetAllProducts()
        {
            var sqliteManager = new SQLiteDBManager();
            var context = sqliteManager.SQLiteContext;
            var products = context.Taxes
                .Select(p => new
                {
                    p.ProductName,
                    p.TaxRate
                })
                .ToDictionary(p => p.ProductName, p => p.TaxRate);

            Console.WriteLine("SQLite data gathered.");

            return products;
        }
        public static List<ExcelReportData> GetReportDate()
        {
            // SQLite
            var sqliteManager = new SQLiteDBManager();
            var sqliteProducts = sqliteManager.GetAllProducts();
            // System.Console.WriteLine(sqliteProducts.Count());
            Console.WriteLine("SQLite data gathered.");

            // MySQL
            var mysqlManager = new MysqlDBManager();
            // var mysqlVendors = mysqlManager.MySqlContext.Vendors.Count();
            var mysqlVendors = mysqlManager.MySqlContext.Vendors
                .Select(v => new
                {
                    VendorName = v.Name,
                    Products = v.Products.Select(p => new
                    {
                        ProductName = p.Name,
                        Income = p.Incomes.Select(s => s.Quantity * (double)p.Price).Sum()
                    }),
                    Expense = v.Expenses.Select(e => e.Amount)
                })
                .ToList();
            Console.WriteLine("MySQL data gathered.");

            var excelReportData = new List<ExcelReportData>();

            // Aggregation of data
            mysqlVendors.ForEach(v =>
            {
                var totalTaxes = 0m;
                var totalIncome = 0m;
                v.Products.ToList().ForEach(p =>
                {
                    var tax = 0m;
                    if (sqliteProducts.ContainsKey(p.ProductName))
                    {
                        tax = (decimal)sqliteProducts[p.ProductName];
                    }

                    totalTaxes += p.Income == null ? 0 : (decimal)p.Income * tax / 100;
                    totalIncome += p.Income == null ? 0 : (decimal)p.Income;
                });

                var financialResult = totalIncome - totalTaxes - v.Expense.Sum();

                var data = new ExcelReportData()
                {
                    FinancialResult = financialResult,
                    TotalExpense = v.Expense.Sum(),
                    TotalIncome = totalIncome,
                    TotalTaxes = totalTaxes,
                    VendorName = v.VendorName
                };

                excelReportData.Add(data);
            });

            // excelReportDatas.ForEach(Console.WriteLine);
            Console.WriteLine("Excel report issued.");

            return excelReportData;
        }