diff --git a/PyroFetes/DTO/DeliveryNote/Request/CreateDeliveryNoteDto.cs b/PyroFetes/DTO/DeliveryNote/Request/CreateDeliveryNoteDto.cs index 5e0990d..f862856 100644 --- a/PyroFetes/DTO/DeliveryNote/Request/CreateDeliveryNoteDto.cs +++ b/PyroFetes/DTO/DeliveryNote/Request/CreateDeliveryNoteDto.cs @@ -8,5 +8,4 @@ public class CreateDeliveryNoteDto public DateOnly RealDeliveryDate { get; set; } public int DelivererId { get; set; } - } \ No newline at end of file diff --git a/PyroFetes/DTO/DeliveryNote/Request/PatchDeliveryNoteRealDeliveryDateDto.cs b/PyroFetes/DTO/DeliveryNote/Request/PatchDeliveryNoteRealDeliveryDateDto.cs index 486df5e..eb2182e 100644 --- a/PyroFetes/DTO/DeliveryNote/Request/PatchDeliveryNoteRealDeliveryDateDto.cs +++ b/PyroFetes/DTO/DeliveryNote/Request/PatchDeliveryNoteRealDeliveryDateDto.cs @@ -4,5 +4,4 @@ public class PatchDeliveryNoteRealDeliveryDateDto { public int Id { get; set; } public DateOnly RealDeliveryDate { get; set; } - } \ No newline at end of file diff --git a/PyroFetes/DTO/DeliveryNote/Request/UpdateDeliveryNoteDto.cs b/PyroFetes/DTO/DeliveryNote/Request/UpdateDeliveryNoteDto.cs index 1ab7cbf..b4746ff 100644 --- a/PyroFetes/DTO/DeliveryNote/Request/UpdateDeliveryNoteDto.cs +++ b/PyroFetes/DTO/DeliveryNote/Request/UpdateDeliveryNoteDto.cs @@ -9,5 +9,4 @@ public class UpdateDeliveryNoteDto public DateOnly? RealDeliveryDate { get; set; } public int DelivererId { get; set; } - } \ No newline at end of file diff --git a/PyroFetes/DTO/DeliveryNote/Response/GetDeliveryNoteDto.cs b/PyroFetes/DTO/DeliveryNote/Response/GetDeliveryNoteDto.cs index 6b4ffc7..3683ed3 100644 --- a/PyroFetes/DTO/DeliveryNote/Response/GetDeliveryNoteDto.cs +++ b/PyroFetes/DTO/DeliveryNote/Response/GetDeliveryNoteDto.cs @@ -13,5 +13,5 @@ public class GetDeliveryNoteDto public int DelivererId { get; set; } public string? DelivererTransporter { get; set; } - public List Products { get; set; } + public List? Products { get; set; } } \ No newline at end of file diff --git a/PyroFetes/DTO/PurchaseOrder/Request/PatchPurchaseOrderPurchaseConditionsDto.cs b/PyroFetes/DTO/PurchaseOrder/Request/PatchPurchaseOrderPurchaseConditionsDto.cs new file mode 100644 index 0000000..77586b0 --- /dev/null +++ b/PyroFetes/DTO/PurchaseOrder/Request/PatchPurchaseOrderPurchaseConditionsDto.cs @@ -0,0 +1,7 @@ +namespace PyroFetes.DTO.PurchaseOrder.Request; + +public class PatchPurchaseOrderPurchaseConditionsDto +{ + public int Id { get; set; } + public string? PurchaseConditions { get; set; } +} \ No newline at end of file diff --git a/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs b/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs new file mode 100644 index 0000000..38a012f --- /dev/null +++ b/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs @@ -0,0 +1,7 @@ +namespace PyroFetes.DTO.PurchaseOrder.Response; + +public class GetPurchaseOrderDto +{ + public int Id { get; set; } + public string? PurchaseConditions { get; set; } +} \ No newline at end of file diff --git a/PyroFetes/DTO/PurchaseProduct/Request/CreatePurchaseProductDto.cs b/PyroFetes/DTO/PurchaseProduct/Request/CreatePurchaseProductDto.cs index bac3997..1249b41 100644 --- a/PyroFetes/DTO/PurchaseProduct/Request/CreatePurchaseProductDto.cs +++ b/PyroFetes/DTO/PurchaseProduct/Request/CreatePurchaseProductDto.cs @@ -3,20 +3,7 @@ namespace PyroFetes.DTO.PurchaseProduct.Request; public class CreatePurchaseProductDto { public int Quantity { get; set; } - public int ProductId { get; set; } - public int ProductReferences { get; set; } - public string? ProductName { get; set; } - public decimal ProductDuration {get; set;} - public decimal ProductCaliber { get; set; } - public int ProductApprovalNumber { get; set; } - public decimal ProductWeight { get; set; } - public decimal ProductNec { get; set; } - public string? ProductImage { get; set; } - public string? ProductLink { get; set; } - public int ProductMinimalQuantity { get; set; } - - public int PurchaseOrderId { get; set; } public string? PurchaseOrderPurchaseConditions { get; set; } } \ No newline at end of file diff --git a/PyroFetes/DTO/PurchaseProduct/Request/PatchPurchaseProductQuantityDto.cs b/PyroFetes/DTO/PurchaseProduct/Request/PatchPurchaseProductQuantityDto.cs index 9389244..8bd9499 100644 --- a/PyroFetes/DTO/PurchaseProduct/Request/PatchPurchaseProductQuantityDto.cs +++ b/PyroFetes/DTO/PurchaseProduct/Request/PatchPurchaseProductQuantityDto.cs @@ -2,6 +2,7 @@ namespace PyroFetes.DTO.PurchaseProduct.Request; public class PatchPurchaseProductQuantityDto { - public int Id { get; set; } + public int ProductId { get; set; } + public int PurchaseOrderId { get; set; } public int Quantity { get; set; } } \ No newline at end of file diff --git a/PyroFetes/DTO/PurchaseProduct/Request/UpdatePurchaseProductDto.cs b/PyroFetes/DTO/PurchaseProduct/Request/UpdatePurchaseProductDto.cs index 0b2f039..ea6b7ae 100644 --- a/PyroFetes/DTO/PurchaseProduct/Request/UpdatePurchaseProductDto.cs +++ b/PyroFetes/DTO/PurchaseProduct/Request/UpdatePurchaseProductDto.cs @@ -2,10 +2,11 @@ namespace PyroFetes.DTO.PurchaseProduct.Request; public class UpdatePurchaseProductDto { - public int Id { get; set; } + public int ProductId { get; set; } + public int PurchaseOrderId { get; set; } + public int Quantity { get; set; } - public int ProductId { get; set; } public int ProductReferences { get; set; } public string? ProductName { get; set; } public decimal ProductDuration {get; set;} @@ -17,7 +18,5 @@ public class UpdatePurchaseProductDto public string? ProductLink { get; set; } public int ProductMinimalQuantity { get; set; } - - public int PurchaseOrderId { get; set; } public string? PurchaseOrderPurchaseConditions { get; set; } } \ No newline at end of file diff --git a/PyroFetes/DTO/PurchaseProduct/Response/GetPurchaseProductDto.cs b/PyroFetes/DTO/PurchaseProduct/Response/GetPurchaseProductDto.cs index 1858e3f..d086ed3 100644 --- a/PyroFetes/DTO/PurchaseProduct/Response/GetPurchaseProductDto.cs +++ b/PyroFetes/DTO/PurchaseProduct/Response/GetPurchaseProductDto.cs @@ -2,23 +2,20 @@ namespace PyroFetes.DTO.PurchaseProduct.Response; public class GetPurchaseProductDto { - public int Id { get; set; } - public int Quantity { get; set; } - public int ProductId { get; set; } - public int ProductReferences { get; set; } + public string? ProductReferences { get; set; } public string? ProductName { get; set; } public decimal ProductDuration {get; set;} public decimal ProductCaliber { get; set; } public int ProductApprovalNumber { get; set; } public decimal ProductWeight { get; set; } public decimal ProductNec { get; set; } - public decimal ProductSellingPrice { get; set; } public string? ProductImage { get; set; } public string? ProductLink { get; set; } public int ProductMinimalQuantity { get; set; } - public int PurchaseOrderId { get; set; } public string? PurchaseOrderPurchaseConditions { get; set; } + + public int Quantity { get; set; } } \ No newline at end of file diff --git a/PyroFetes/DTO/User/Request/PatchUserPasswordDto.cs b/PyroFetes/DTO/User/Request/PatchUserPasswordDto.cs new file mode 100644 index 0000000..bfa2051 --- /dev/null +++ b/PyroFetes/DTO/User/Request/PatchUserPasswordDto.cs @@ -0,0 +1,7 @@ +namespace PyroFetes.DTO.User.Request; + +public class PatchUserPasswordDto +{ + public int Id { get; set; } + public string? Password { get; set; } +} \ No newline at end of file diff --git a/PyroFetes/Endpoints/PurchaseProduct/CreatePurchaseProductEndpoint.cs b/PyroFetes/Endpoints/PurchaseProduct/CreatePurchaseProductEndpoint.cs new file mode 100644 index 0000000..f060c3a --- /dev/null +++ b/PyroFetes/Endpoints/PurchaseProduct/CreatePurchaseProductEndpoint.cs @@ -0,0 +1,67 @@ +using Microsoft.EntityFrameworkCore; +using FastEndpoints; +using PyroFetes.DTO.PurchaseProduct.Request; +using PyroFetes.DTO.PurchaseProduct.Response; + +namespace PyroFetes.Endpoints.PurchaseProduct; + +public class CreatePurchaseProductEndpoint(PyroFetesDbContext database) : Endpoint +{ + public override void Configure() + { + Post("/api/purchaseProducts"); + AllowAnonymous(); + } + + public override async Task HandleAsync(CreatePurchaseProductDto req, CancellationToken ct) + { + var product = await database.Products.FirstOrDefaultAsync(p => p.Id == req.ProductId, ct); + if (product == null) + { + await Send.NotFoundAsync(ct); + return; + } + + var purchaseOrder = await database.PurchaseOrders.FirstOrDefaultAsync(po => po.Id == req.PurchaseOrderId, ct); + + if (purchaseOrder == null) + { + purchaseOrder = new Models.PurchaseOrder() + { + PurchaseConditions = req.PurchaseOrderPurchaseConditions ?? "Conditions non précisées" + }; + database.PurchaseOrders.Add(purchaseOrder); + await database.SaveChangesAsync(ct); + } + + var purchaseProduct = new Models.PurchaseProduct() + { + ProductId = product.Id, + PurchaseOrderId = purchaseOrder.Id, + Quantity = req.Quantity + }; + database.PurchaseProducts.Add(purchaseProduct); + await database.SaveChangesAsync(ct); + + var responseDto = new GetPurchaseProductDto() + { + ProductId = product.Id, + ProductReferences = product.Reference, + ProductName = product.Name, + ProductDuration = product.Duration, + ProductCaliber = product.Caliber, + ProductApprovalNumber = product.ApprovalNumber, + ProductWeight = product.Weight, + ProductNec = product.Nec, + ProductImage = product.Image, + ProductLink = product.Link, + ProductMinimalQuantity = product.MinimalQuantity, + + PurchaseOrderId = purchaseOrder.Id, + PurchaseOrderPurchaseConditions = purchaseOrder.PurchaseConditions, + Quantity = purchaseProduct.Quantity + }; + + await Send.OkAsync(responseDto, ct); + } +} diff --git a/PyroFetes/Endpoints/PurchaseProduct/DeletePurchaseProductEndpoint.cs b/PyroFetes/Endpoints/PurchaseProduct/DeletePurchaseProductEndpoint.cs new file mode 100644 index 0000000..5a02644 --- /dev/null +++ b/PyroFetes/Endpoints/PurchaseProduct/DeletePurchaseProductEndpoint.cs @@ -0,0 +1,41 @@ +using FastEndpoints; +using Microsoft.EntityFrameworkCore; + +namespace PyroFetes.Endpoints.PurchaseProduct; + +public class DeletePurchaseOrderRequest +{ + public int Id { get; set; } +} + +public class DeletePurchaseOrderEndpoint(PyroFetesDbContext database) : Endpoint +{ + public override void Configure() + { + Delete("/api/purchaseOrders/{Id}", x => new {x.Id}); + AllowAnonymous(); + } + + public override async Task HandleAsync(DeletePurchaseOrderRequest req, CancellationToken ct) + { + var purchaseOrder = await database.PurchaseOrders + .Include(po => po.PurchaseProducts) + .SingleOrDefaultAsync(po => po.Id == req.Id, ct); + + if (purchaseOrder == null) + { + await Send.NotFoundAsync(ct); + return; + } + + if (purchaseOrder.PurchaseProducts != null && purchaseOrder.PurchaseProducts.Any()) + { + database.PurchaseProducts.RemoveRange(purchaseOrder.PurchaseProducts); + } + + database.PurchaseOrders.Remove(purchaseOrder); + await database.SaveChangesAsync(ct); + + await Send.NoContentAsync(ct); + } +} \ No newline at end of file diff --git a/PyroFetes/Endpoints/PurchaseProduct/PatchPurchaseProductQuantityEndpoint.cs b/PyroFetes/Endpoints/PurchaseProduct/PatchPurchaseProductQuantityEndpoint.cs new file mode 100644 index 0000000..dd53757 --- /dev/null +++ b/PyroFetes/Endpoints/PurchaseProduct/PatchPurchaseProductQuantityEndpoint.cs @@ -0,0 +1,36 @@ +using FastEndpoints; +using Microsoft.EntityFrameworkCore; +using PyroFetes.DTO.PurchaseProduct.Request; +using PyroFetes.DTO.PurchaseProduct.Response; + +namespace PyroFetes.Endpoints.PurchaseProduct; + +public class PatchPurchaseProductQuantityEndpoint(PyroFetesDbContext database) : Endpoint +{ + public override void Configure() + { + Patch("/api/purchaseOrders/{ProductId}/{PurchaseOrderId}/Quantity", x => new { x.ProductId, x.PurchaseOrderId }); + AllowAnonymous(); + } + + public override async Task HandleAsync(PatchPurchaseProductQuantityDto req, CancellationToken ct) + { + var purchaseProduct = await database.PurchaseProducts.SingleOrDefaultAsync(po => po.ProductId == req.ProductId && po.PurchaseOrderId == req.PurchaseOrderId, ct); + if (purchaseProduct == null) + { + await Send.NotFoundAsync(ct); + return; + } + + purchaseProduct.Quantity = req.Quantity; + await database.SaveChangesAsync(ct); + + GetPurchaseProductDto responseDto = new() + { + ProductId = purchaseProduct.ProductId, + PurchaseOrderId = purchaseProduct.PurchaseOrderId, + Quantity = purchaseProduct.Quantity + }; + await Send.OkAsync(responseDto, ct); + } +} \ No newline at end of file diff --git a/PyroFetes/PyroFetes.csproj b/PyroFetes/PyroFetes.csproj index 60e4770..289fb53 100644 --- a/PyroFetes/PyroFetes.csproj +++ b/PyroFetes/PyroFetes.csproj @@ -7,6 +7,8 @@ + +