From ad1fa6e376d2eb7bbd21b444826602a9c4eef856 Mon Sep 17 00:00:00 2001 From: kamil Date: Tue, 11 Jun 2024 23:54:59 +0200 Subject: [PATCH] =?UTF-8?q?poprawa=20mapowania=20i=20wylicze=C5=84=20total?= =?UTF-8?q?Price?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controllers/TransactionController.cs | 16 ++++++--- .../Transactions/Transaction2Mapping.cs | 1 + nHibernate/Transactions/TransactionCRUD.cs | 34 +++++++++++++++++-- nHibernate/Transactions/TransactionMapping.cs | 1 + 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/Controllers/TransactionController.cs b/Controllers/TransactionController.cs index a0fcffa..ba33ae3 100644 --- a/Controllers/TransactionController.cs +++ b/Controllers/TransactionController.cs @@ -23,6 +23,7 @@ using System.Text.Json; using System.Transactions; using FirmTracker_Server.nHibernate.Products; using FirmTracker_Server.nHibernate; +using Microsoft.AspNetCore.Http.HttpResults; namespace FirmTracker_Server.Controllers { @@ -63,17 +64,18 @@ namespace FirmTracker_Server.Controllers if (product.Quantity > availability) { - return BadRequest($"Can't add product {product.ProductID} to transaction. Available: {availability}, Desired: {product.Quantity}"); + throw new InvalidOperationException($"Can't add product {product.ProductID} to transaction. Available: {availability}, Desired: {product.Quantity}"); + //return BadRequest($"Can't add product {product.ProductID} to transaction. Available: {availability}, Desired: {product.Quantity}"); } else { - transaction.TotalPrice += ((product.Quantity * price) * ((1 - (transaction.Discount / 100)))); + //transaction.TotalPrice += ((product.Quantity * price) * ((1 - (transaction.Discount / 100)))); } } else { - transaction.TotalPrice += (price * ((1 - (transaction.Discount / 100)))); + //transaction.TotalPrice += (price * ((1 - (transaction.Discount / 100)))); } } @@ -91,6 +93,13 @@ namespace FirmTracker_Server.Controllers return CreatedAtAction(nameof(GetTransaction), new { id = transaction.Id }, transaction); } + catch (InvalidOperationException ioe) + { + return BadRequest(new { + Message = ioe.Message, + ErrorCode = "Availability" + }); + } catch (Exception ex) { return BadRequest(ex.Message); @@ -121,7 +130,6 @@ namespace FirmTracker_Server.Controllers try { - foreach (var product in transaction.TransactionProducts) { product.TransactionId = transaction.Id; diff --git a/nHibernate/Transactions/Transaction2Mapping.cs b/nHibernate/Transactions/Transaction2Mapping.cs index 0eb7b1b..0b27f2d 100644 --- a/nHibernate/Transactions/Transaction2Mapping.cs +++ b/nHibernate/Transactions/Transaction2Mapping.cs @@ -13,6 +13,7 @@ namespace FirmTracker_Server.nHibernate.Transactions Map(x => x.PaymentType); Map(x => x.Discount); Map(x => x.Description); + Map(x => x.TotalPrice); HasMany(x => x.TransactionProducts) .KeyColumn("TransactionId") diff --git a/nHibernate/Transactions/TransactionCRUD.cs b/nHibernate/Transactions/TransactionCRUD.cs index c76d904..3ebc8f6 100644 --- a/nHibernate/Transactions/TransactionCRUD.cs +++ b/nHibernate/Transactions/TransactionCRUD.cs @@ -19,7 +19,15 @@ namespace FirmTracker_Server.nHibernate.Transactions { foreach (var transactionProduct in transaction.TransactionProducts) { - + var product = session.Get(transactionProduct.ProductID); + if (product.Type != 0) + { + transaction.TotalPrice += ((transactionProduct.Quantity * product.Price) * ((1 - (transaction.Discount / 100)))); + } + else + { + transaction.TotalPrice += (product.Price) * ((1 - (transaction.Discount / 100))); + } transactionProduct.TransactionId = transaction.Id; session.Save(transactionProduct); } @@ -78,6 +86,15 @@ namespace FirmTracker_Server.nHibernate.Transactions { foreach (var transactionProduct in transaction.TransactionProducts) { + /*var product = session.Get(transactionProduct.ProductID); + if (product.Type != 0) + { + transaction.TotalPrice += ((transactionProduct.Quantity * product.Price) * ((1 - (transaction.Discount / 100)))); + } + else + { + transaction.TotalPrice += (product.Price) * ((1 - (transaction.Discount / 100))); + }*/ transactionProduct.TransactionId = transaction.Id; session.Update(transactionProduct); @@ -154,11 +171,22 @@ namespace FirmTracker_Server.nHibernate.Transactions var transactionToUpdate = session.Get(transactionId); if (transactionToUpdate != null) { + var product = session.Get(transactionProduct.ProductID); + if (product.Type != 0) + { + transactionToUpdate.TotalPrice += ((transactionProduct.Quantity * product.Price) * ((1 - (transactionToUpdate.Discount / 100)))); + } + else + { + transactionToUpdate.TotalPrice += (product.Price) * ((1 - (transactionToUpdate.Discount / 100))); + } + transactionProduct.TransactionId= transactionToUpdate.Id; session.Save(transactionProduct); transaction.Commit(); - - var product = session.Get(transactionProduct.ProductID); + + session.Update(transactionToUpdate); + //var product = session.Get(transactionProduct.ProductID); if (product.Type != 0) { product.Availability -= transactionProduct.Quantity; diff --git a/nHibernate/Transactions/TransactionMapping.cs b/nHibernate/Transactions/TransactionMapping.cs index 11aa421..6f0734f 100644 --- a/nHibernate/Transactions/TransactionMapping.cs +++ b/nHibernate/Transactions/TransactionMapping.cs @@ -13,6 +13,7 @@ namespace FirmTracker_Server.nHibernate.Transactions Map(x => x.PaymentType); Map(x => x.Discount); Map(x => x.Description); + Map(x => x.TotalPrice); HasMany(x => x.TransactionProducts) .KeyColumn("TransactionId")