From 80f5f30a01f7b9939ed992637b73b37ef408a771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Ry=C5=BCek?= Date: Sat, 8 Jun 2024 03:39:54 +0200 Subject: [PATCH] =?UTF-8?q?dodanie=20tabel=20=C5=82=C4=85cz=C4=85cych=20ra?= =?UTF-8?q?porty=20z=20transakcj=C4=85/wydatkiem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nHIbernate/Reports/Report.cs | 18 ++-- nHIbernate/Reports/ReportMapping.cs | 15 ++- nHIbernate/SessionFactory.cs | 4 +- nHibernate/Reports/ReportCRUD.cs | 93 +++++++++++++++++++ nHibernate/Reports/ReportExpense.cs | 26 ++++++ nHibernate/Reports/ReportExpenseMapping.cs | 15 +++ nHibernate/Reports/ReportTransaction.cs | 26 ++++++ .../Reports/ReportTransactionMapping.cs | 15 +++ 8 files changed, 196 insertions(+), 16 deletions(-) create mode 100644 nHibernate/Reports/ReportCRUD.cs create mode 100644 nHibernate/Reports/ReportExpense.cs create mode 100644 nHibernate/Reports/ReportExpenseMapping.cs create mode 100644 nHibernate/Reports/ReportTransaction.cs create mode 100644 nHibernate/Reports/ReportTransactionMapping.cs diff --git a/nHIbernate/Reports/Report.cs b/nHIbernate/Reports/Report.cs index a763a61..5a64618 100644 --- a/nHIbernate/Reports/Report.cs +++ b/nHIbernate/Reports/Report.cs @@ -1,5 +1,6 @@ using FirmTracker_Server.nHibernate.Expenses; using FirmTracker_Server.nHibernate.Transactions; +using Newtonsoft.Json; namespace FirmTracker_Server.nHibernate.Reports { @@ -8,16 +9,21 @@ namespace FirmTracker_Server.nHibernate.Reports public virtual int Id { get; set; } public virtual DateTime FromDate { get; set; } public virtual DateTime ToDate { get; set; } - public virtual IList Transactions { get; set;} = new List(); - public virtual IList Expenses { get; set; } = new List(); public virtual decimal TotalIncome { get; set; } public virtual decimal TotalExpenses { get; set; } public virtual decimal TotalBalance { get; set; } - public Report() { - Transactions = new List(); - Expenses = new List(); - } + + public virtual IList ReportTransactions { get; set; } = new List(); + public virtual IList ReportExpenses { get; set; } = new List(); + + + public class DateRangeDto + { + public DateTime FromDate { get; set; } + public DateTime ToDate { get; set; } + + } } } diff --git a/nHIbernate/Reports/ReportMapping.cs b/nHIbernate/Reports/ReportMapping.cs index e0c0fa2..2f01038 100644 --- a/nHIbernate/Reports/ReportMapping.cs +++ b/nHIbernate/Reports/ReportMapping.cs @@ -13,17 +13,14 @@ namespace FirmTracker_Server.nHibernate.Reports Map(x => x.TotalExpenses); Map(x => x.TotalBalance); - HasManyToMany(x => x.Transactions) - .Cascade.All() - .Table("ReportTransactions") - .ParentKeyColumn("ReportId") - .ChildKeyColumn("TransactionId"); + HasMany(x => x.ReportTransactions) + .Cascade.All() + .Inverse(); - HasManyToMany(x => x.Expenses) + HasMany(x => x.ReportExpenses) .Cascade.All() - .Table("ReportExpenses") - .ParentKeyColumn("ReportId") - .ChildKeyColumn("ExpenseId"); + .Inverse(); + } } diff --git a/nHIbernate/SessionFactory.cs b/nHIbernate/SessionFactory.cs index 71f7ad9..cc7ebbe 100644 --- a/nHIbernate/SessionFactory.cs +++ b/nHIbernate/SessionFactory.cs @@ -34,7 +34,9 @@ namespace FirmTracker_Server.nHibernate .AddFromAssemblyOf() .AddFromAssemblyOf() .AddFromAssemblyOf() - .AddFromAssemblyOf(); + .AddFromAssemblyOf() + .AddFromAssemblyOf() + .AddFromAssemblyOf(); }) .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true)) //SchemaUpdate . Execute dla only update .BuildSessionFactory(); diff --git a/nHibernate/Reports/ReportCRUD.cs b/nHibernate/Reports/ReportCRUD.cs new file mode 100644 index 0000000..276b2c6 --- /dev/null +++ b/nHibernate/Reports/ReportCRUD.cs @@ -0,0 +1,93 @@ +using FirmTracker_Server.nHibernate.Expenses; +using FirmTracker_Server.nHibernate.Transactions; +using NHibernate; +using NHibernate.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Transactions; +namespace FirmTracker_Server.nHibernate.Reports +{ + public class ReportCRUD + { + public Report AddReport(DateTime fromDate, DateTime toDate) + { + using (var session = SessionFactory.OpenSession()) + using (var sessionTransaction = session.BeginTransaction()) + { + try + { + var transactions = session.Query() + .Where(t => t.Date >= fromDate && t.Date <= toDate) + .ToList(); + + var expenses = session.Query() + .Where(e => e.Date >= fromDate && e.Date <= toDate) + .ToList(); + + var totalIncome = transactions.Sum(t => t.TotalPrice); + var totalExpenses = expenses.Sum(e => e.Value); + var totalBalance = totalIncome - totalExpenses; + + var report = new Report + { + FromDate = fromDate, + ToDate = toDate, + TotalIncome = totalIncome, + TotalExpenses = totalExpenses, + TotalBalance = totalBalance + + }; + + foreach (var transactionItem in transactions) + { + var reportTransaction = new ReportTransaction + { + ReportId = report.Id, + TransactionId = transactionItem.Id + }; + report.ReportTransactions.Add(reportTransaction); + } + + foreach (var expenseItem in expenses) + { + var reportExpense = new ReportExpense + { + ReportId = report.Id, + ExpenseId = expenseItem.Id + }; + report.ReportExpenses.Add(reportExpense); + } + + session.Save(report); + sessionTransaction.Commit(); + return report; + } + catch + { + sessionTransaction.Rollback(); + throw; + } + } + } + + public Report GetReport(int reportId) + { + using (var session = SessionFactory.OpenSession()) + { + return session.Get(reportId); + } + } + + public IList GetAllReports() + { + using (var session = SessionFactory.OpenSession()) + { + var reports = session.Query() + .ToList(); + + return reports; + } + } + } +} diff --git a/nHibernate/Reports/ReportExpense.cs b/nHibernate/Reports/ReportExpense.cs new file mode 100644 index 0000000..39e0f5a --- /dev/null +++ b/nHibernate/Reports/ReportExpense.cs @@ -0,0 +1,26 @@ +using FirmTracker_Server.nHibernate.Expenses; + +namespace FirmTracker_Server.nHibernate.Reports +{ + public class ReportExpense + { + public virtual int Id { get; set; } + public virtual int ReportId { get; set; } + public virtual int ExpenseId { get; set; } + + public override bool Equals(object obj) + { + if (obj == null || GetType() != obj.GetType()) + return false; + + var other = (ReportExpense)obj; + return ReportId == other.ReportId && ExpenseId == other.ExpenseId; + } + + public override int GetHashCode() + { + return HashCode.Combine(ReportId, ExpenseId); + } + } + +} diff --git a/nHibernate/Reports/ReportExpenseMapping.cs b/nHibernate/Reports/ReportExpenseMapping.cs new file mode 100644 index 0000000..052064a --- /dev/null +++ b/nHibernate/Reports/ReportExpenseMapping.cs @@ -0,0 +1,15 @@ +using FluentNHibernate.Mapping; + +namespace FirmTracker_Server.nHibernate.Reports +{ + public class ReportExpenseMapping : ClassMap + { + public ReportExpenseMapping() + { + Table("ReportExpenses"); + Id(x => x.Id); + References(x => x.ReportId, "ReportId"); + References(x => x.ExpenseId, "ExpenseId"); + } + } +} diff --git a/nHibernate/Reports/ReportTransaction.cs b/nHibernate/Reports/ReportTransaction.cs new file mode 100644 index 0000000..51d2d6c --- /dev/null +++ b/nHibernate/Reports/ReportTransaction.cs @@ -0,0 +1,26 @@ +using FirmTracker_Server.nHibernate.Transactions; + +namespace FirmTracker_Server.nHibernate.Reports +{ + public class ReportTransaction + { + public virtual int Id { get; set; } + public virtual int ReportId { get; set; } + public virtual int TransactionId { get; set; } + + public override bool Equals(object obj) + { + if (obj == null || GetType() != obj.GetType()) + return false; + + var other = (ReportTransaction)obj; + return ReportId == other.ReportId && TransactionId == other.TransactionId; + } + + public override int GetHashCode() + { + return HashCode.Combine(ReportId, TransactionId); + } + } + +} diff --git a/nHibernate/Reports/ReportTransactionMapping.cs b/nHibernate/Reports/ReportTransactionMapping.cs new file mode 100644 index 0000000..e872b4c --- /dev/null +++ b/nHibernate/Reports/ReportTransactionMapping.cs @@ -0,0 +1,15 @@ +using FluentNHibernate.Mapping; + +namespace FirmTracker_Server.nHibernate.Reports +{ + public class ReportTransactionMapping : ClassMap + { + public ReportTransactionMapping() + { + Table("ReportTransactions"); + Id(x => x.Id); + References(x => x.ReportId, "ReportId"); + References(x => x.TransactionId, "TransactionId"); + } + } +}