From 207ee083306343fc8b97701faad3bfb3675df447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Ry=C5=BCek?= Date: Sun, 9 Jun 2024 23:35:15 +0200 Subject: [PATCH] update/delete dla raportu + drobne poprawki --- Controllers/ExpenseController.cs | 10 ++-- Controllers/ReportController.cs | 90 ++++++++++++++++++++++++++++++++ nHibernate/Reports/ReportCRUD.cs | 79 ++++++++++++++++++++++++++++ 3 files changed, 174 insertions(+), 5 deletions(-) diff --git a/Controllers/ExpenseController.cs b/Controllers/ExpenseController.cs index cb6b8e6..7ee2eee 100644 --- a/Controllers/ExpenseController.cs +++ b/Controllers/ExpenseController.cs @@ -30,7 +30,7 @@ namespace FirmTracker_Server.Controllers // GET: api/Expenses [HttpGet("{id}")] [ProducesResponseType(200)] // Created - [ProducesResponseType(400)] // Bad Request + [ProducesResponseType(404)] // Bad Request public IActionResult GetExpense(int id) { var expense = _expenseCrud.GetExpense(id); @@ -43,8 +43,8 @@ namespace FirmTracker_Server.Controllers //PUT: api/Expenses [HttpPut("{id}")] - [ProducesResponseType(200)] - [ProducesResponseType(200)] + [ProducesResponseType(204)] + [ProducesResponseType(400)] public IActionResult UpdateExpense(int id, [FromBody] Expense expense) { if (id != expense.Id) @@ -63,8 +63,8 @@ namespace FirmTracker_Server.Controllers } [HttpDelete("{id}")] - [ProducesResponseType(200)] - [ProducesResponseType(400)] + [ProducesResponseType(204)] + [ProducesResponseType(404)] public IActionResult DeleteExpense(int id) { try diff --git a/Controllers/ReportController.cs b/Controllers/ReportController.cs index 7f4eae8..2879b59 100644 --- a/Controllers/ReportController.cs +++ b/Controllers/ReportController.cs @@ -8,6 +8,7 @@ using FirmTracker_Server.nHibernate.Products; using FirmTracker_Server.nHibernate; using NHibernate.Linq; + namespace FirmTracker_Server.Controllers { [Route("api/[controller]")] @@ -31,6 +32,10 @@ namespace FirmTracker_Server.Controllers { var fromDate = dateRange.FromDate; var toDate = dateRange.ToDate; + if (fromDate >= toDate) + { + return BadRequest(); + } using (var session = SessionFactory.OpenSession()) { var transactions = session.Query() @@ -125,5 +130,90 @@ namespace FirmTracker_Server.Controllers return Ok(reports); } + + [HttpPut("{id}")] + [ProducesResponseType(204)] + [ProducesResponseType(400)] + [ProducesResponseType(404)] + public IActionResult UpdateReport(int reportId, [FromBody] Report.DateRangeDto dateRange) + { + try + { + var report = _reportCRUD.GetReport(reportId); + if (report == null) + { + return NotFound(); + } + using (var session = SessionFactory.OpenSession()) + { + var fromDate = dateRange.FromDate; + var toDate = dateRange.ToDate; + if (fromDate >= toDate) + { + return BadRequest(); + } + var transactions = session.Query() + .Where(t => t.Date >= fromDate && t.Date <= toDate) + .FetchMany(t => t.TransactionProducts) + .ToList(); + + var expenses = session.Query() + .Where(e => e.Date >= fromDate && e.Date <= toDate) + .ToList(); + + // Calculate total income from transactions + decimal totalIncome = 0; + foreach (var transaction in transactions) + { + foreach (var product in transaction.TransactionProducts) + { + decimal price = _productCRUD.GetProductPrice(product.ProductID); + int type = _productCRUD.GetProductType(product.ProductID); + if (type == 1) + { + totalIncome += ((product.Quantity * price) * ((1 - (transaction.Discount / 100)))); + } + else + { + totalIncome += (price * ((1 - (transaction.Discount / 100)))); + } + } + } + + var totalExpenses = expenses.Sum(e => e.Value); + var totalBalance = totalIncome - totalExpenses; + + report.FromDate = fromDate; + report.ToDate = toDate; + report.TotalIncome = totalIncome; + report.TotalExpenses = totalExpenses; + report.TotalBalance = totalBalance; + + _reportCRUD.UpdateReport(report, transactions, expenses); + + return NoContent(); + } + } + catch (Exception ex) + { + return BadRequest(ex.Message); + } + } + + [HttpDelete] + [ProducesResponseType(204)] + [ProducesResponseType(404)] + public IActionResult DeleteReport(int reportId) + { + try + { + _reportCRUD.DeleteReport(reportId); + return NoContent(); + } + catch (Exception ex) + { + return NotFound(ex.Message); + } + } } } diff --git a/nHibernate/Reports/ReportCRUD.cs b/nHibernate/Reports/ReportCRUD.cs index 77466f3..89109b6 100644 --- a/nHibernate/Reports/ReportCRUD.cs +++ b/nHibernate/Reports/ReportCRUD.cs @@ -98,5 +98,84 @@ namespace FirmTracker_Server.nHibernate.Reports return reports; } } + + public Report UpdateReport(Report report, IList transactions, IList expenses) + { + using (var session = SessionFactory.OpenSession()) + using (var transaction = session.BeginTransaction()) + { + try + { + session.Update(report); + + + session.CreateQuery("delete from ReportTransaction where Report.Id = :reportId") + .SetParameter("reportId", report.Id) + .ExecuteUpdate(); + session.CreateQuery("delete from ReportExpense where Report.Id = :reportId") + .SetParameter("reportId", report.Id) + .ExecuteUpdate(); + + foreach (var transactionItem in transactions) + { + var reportTransaction = new ReportTransaction + { + Report = report, + Transaction = transactionItem + }; + session.Save(reportTransaction); + } + + foreach (var expenseItem in expenses) + { + var reportExpense = new ReportExpense + { + Report = report, + Expense = expenseItem + }; + session.Save(reportExpense); + } + + transaction.Commit(); + return report; + } + catch + { + transaction.Rollback(); + throw; + } + } + } + + public void DeleteReport(int reportId) + { + using (var session = SessionFactory.OpenSession()) + using (var transaction = session.BeginTransaction()) + { + try + { + session.CreateQuery("delete from ReportTransaction where Report.Id = :reportId") + .SetParameter("reportId", reportId) + .ExecuteUpdate(); + session.CreateQuery("delete from ReportExpense where Report.Id = :reportId") + .SetParameter("reportId", reportId) + .ExecuteUpdate(); + + var report = session.Get(reportId); + if (report != null) + { + session.Delete(report); + } + + transaction.Commit(); + } + catch + { + transaction.Rollback(); + throw; + } + } + } + } }