Exemplo n.º 1
0
        public void GenerateVendorsFinancialResultReport()
        {
            var random          = new Random();
            var salesReport     = this.mySqlData.Value.LoadReports();
            var productsTaxes   = this.sqliteData.Value.GetAllProducTaxes().ToList();
            var vendorsExpenses = salesReport.Select(sr => new VendorExpense()
            {
                VendorName = sr.VendorName,
                Ammount    = 10 * random.Next(10, 30)
            });
            var salesJoinedWithTaxesGroupedByVendor = salesReport
                                                      .Join(productsTaxes,
                                                            (s => s.ProductName),
                                                            (pt => pt.ProductName),
                                                            (s, pt) => new { VendorName = s.VendorName, TotalIncome = s.TotalIncomes, TotalIncomeWithTax = s.TotalIncomes * (pt.Amount / 100) })
                                                      .GroupBy(s => s.VendorName)
                                                      .Select(sg => new { VendorName = sg.Key, TotalIncomes = sg.Sum(s => s.TotalIncome), TotalIncomeWithTax = sg.Sum(s => s.TotalIncomeWithTax) })
                                                      .ToList();
            var vendorFinancialInfoJoinedWithExpenses = salesJoinedWithTaxesGroupedByVendor
                                                        .Join(vendorsExpenses,
                                                              (f => f.VendorName),
                                                              (e => e.VendorName),
                                                              (f, e) => new { VendorName = f.VendorName, TotalIncomes = f.TotalIncomes, TotalIncomeWithTax = f.TotalIncomeWithTax, Expenses = e.Ammount })
                                                        .GroupBy(fg => fg.VendorName)
                                                        .Select(fg => new { VendorName = fg.Key, TotalIncomes = fg.Sum(f => f.TotalIncomes), TotalIncomeWithTax = fg.Sum(f => f.TotalIncomeWithTax), Expenses = fg.Sum(f => f.Expenses) })
                                                        .ToList();
            var reportEntries = new LinkedList <FinancialResultReportEntry>();

            foreach (var row in vendorFinancialInfoJoinedWithExpenses.ToList())
            {
                var reportRecord = new FinancialResultReportEntry();
                reportRecord.VendorName       = row.VendorName;
                reportRecord.Incomes          = row.TotalIncomes;
                reportRecord.Expenses         = (decimal)row.Expenses;
                reportRecord.Taxes            = (decimal)row.TotalIncomeWithTax;
                reportRecord.FinancialBalance = (decimal)(reportRecord.Incomes - reportRecord.Taxes - reportRecord.Expenses);
                reportEntries.AddLast(reportRecord);
            }
            var reportData = new FinancialResultReport();

            reportData.Report = reportEntries;
            this.xlsxHandler.Value.GenerateVendorsFinancialResultFile(reportData, "FinancialBalanceResults.xlsx");
        }
 public void GenerateVendorsFinancialResultReport()
 {
     var random = new Random();
     var salesReport = this.mySqlData.Value.LoadReports();
     var productsTaxes = this.sqliteData.Value.GetAllProducTaxes().ToList();
     var vendorsExpenses =
         salesReport.Select(
             sr => new VendorExpense { VendorName = sr.VendorName, Ammount = 10 * random.Next(10, 30) });
     var salesJoinedWithTaxesGroupedByVendor =
         salesReport.Join(
             productsTaxes,
             s => s.ProductName,
             pt => pt.ProductName,
             (s, pt) =>
             new
             {
                 s.VendorName,
                 TotalIncome = s.TotalIncomes,
                 TotalIncomeWithTax = s.TotalIncomes * (pt.Amount / 100)
             })
                    .GroupBy(s => s.VendorName)
                    .Select(
                        sg =>
                        new
                        {
                            VendorName = sg.Key,
                            TotalIncomes = sg.Sum(s => s.TotalIncome),
                            TotalIncomeWithTax = sg.Sum(s => s.TotalIncomeWithTax)
                        })
                    .ToList();
     var vendorFinancialInfoJoinedWithExpenses =
         salesJoinedWithTaxesGroupedByVendor.Join(
             vendorsExpenses,
             f => f.VendorName,
             e => e.VendorName,
             (f, e) => new { f.VendorName, f.TotalIncomes, f.TotalIncomeWithTax, Expenses = e.Ammount })
                                            .GroupBy(fg => fg.VendorName)
                                            .Select(
                                                fg =>
                                                new
                                                {
                                                    VendorName = fg.Key,
                                                    TotalIncomes = fg.Sum(f => f.TotalIncomes),
                                                    TotalIncomeWithTax = fg.Sum(f => f.TotalIncomeWithTax),
                                                    Expenses = fg.Sum(f => f.Expenses)
                                                })
                                            .ToList();
     var reportEntries = new LinkedList<FinancialResultReportEntry>();
     foreach (var row in vendorFinancialInfoJoinedWithExpenses.ToList())
     {
         var reportRecord = new FinancialResultReportEntry
         {
             VendorName = row.VendorName,
             Incomes = row.TotalIncomes,
             Expenses = row.Expenses,
             Taxes = (decimal)row.TotalIncomeWithTax
         };
         reportRecord.FinancialBalance = reportRecord.Incomes - reportRecord.Taxes - reportRecord.Expenses;
         reportEntries.AddLast(reportRecord);
     }
     var reportData = new FinancialResultReport { Report = reportEntries };
     this.xlsxHandler.Value.GenerateVendorsFinancialResultFile(reportData, "FinancialBalanceResults.xlsx");
 }