From 630d5359626ad90589dc8244670f63def295f902 Mon Sep 17 00:00:00 2001 From: mmrbnjd Date: Thu, 25 Jul 2024 17:18:03 +0330 Subject: [PATCH] order --- Back/Controllers/OrderssController.cs | 57 ++++++++++++++++++++++++ Back/Data/Models/Order.cs | 5 ++- Back/Data/Models/OrderItem.cs | 10 ++--- Back/Data/Models/Promotion.cs | 9 ++-- Back/Program.cs | 3 ++ Back/Services/ServOrders.cs | 62 +++++++++++++++++++++++++++ Back/Services/ServPricing.cs | 28 ++++++++++++ Back/Services/ServPromotion.cs | 41 ++++++++++++++++++ Shared/DTOs/OrderDto.cs | 22 ++++++++++ Shared/DTOs/OrderItemDto.cs | 21 +++++++++ Shared/DTOs/PricingDto.cs | 15 +++++++ Shared/DTOs/PromotionDetailDto.cs | 18 ++++++++ Shared/DTOs/PromotionDto.cs | 15 +++++++ Shared/DTOs/Serch/ItemSerachOrder.cs | 14 ++++++ Shared/Enums/StatusOrder.cs | 6 +-- 15 files changed, 312 insertions(+), 14 deletions(-) create mode 100644 Back/Controllers/OrderssController.cs create mode 100644 Back/Services/ServOrders.cs create mode 100644 Back/Services/ServPricing.cs create mode 100644 Back/Services/ServPromotion.cs create mode 100644 Shared/DTOs/OrderDto.cs create mode 100644 Shared/DTOs/OrderItemDto.cs create mode 100644 Shared/DTOs/PricingDto.cs create mode 100644 Shared/DTOs/PromotionDetailDto.cs create mode 100644 Shared/DTOs/PromotionDto.cs create mode 100644 Shared/DTOs/Serch/ItemSerachOrder.cs diff --git a/Back/Controllers/OrderssController.cs b/Back/Controllers/OrderssController.cs new file mode 100644 index 0000000..d3158e8 --- /dev/null +++ b/Back/Controllers/OrderssController.cs @@ -0,0 +1,57 @@ +using Back.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Shared.DTOs; +using Shared.DTOs.Serch; + +namespace Back.Controllers +{ + + [Route("api/[controller]")] + [Authorize] + [ApiController] + public class OrderssController : ControllerBase + { + private readonly ServOrders _servOrders; + private readonly ServPromotion _servPromotion; + private readonly ServPricing _servPricing; + private readonly servUser _servUser; + + public OrderssController(ServOrders servOrders, ServPromotion servPromotion, ServPricing servPricing, servUser servUser) + { + _servOrders = servOrders; + _servPricing = servPricing; + _servPromotion = servPromotion; + _servUser = servUser; + + } + [HttpGet("GetAllPromotion")] + [AllowAnonymous] + public async Task>> GetAllPromotion() =>Ok(await _servPromotion.GetAll()); + + [HttpGet("GetAllPricing")] + [AllowAnonymous] + public async Task>> GetAllPricing() => Ok(await _servPricing.GetPricing()); + [HttpPost("GetAllOrder")] + public async Task>> GetAllOrder(ItemSerachOrder itemSerach) + { + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); + int CompanyID = user.RolUsers.First().CompanyID; + + return Ok(await _servOrders.GetOrdersByCompanyID(CompanyID,itemSerach)); + } + [HttpGet("GetOrderDetails/{OrderID}")] + public async Task>> GetOrderDetails(int OrderID) + { + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); + int CompanyID = user.RolUsers.First().CompanyID; + + return Ok(await _servOrders.GetOrderItems(CompanyID, OrderID)); + } + } +} diff --git a/Back/Data/Models/Order.cs b/Back/Data/Models/Order.cs index 78a7a1b..8602ea9 100644 --- a/Back/Data/Models/Order.cs +++ b/Back/Data/Models/Order.cs @@ -13,7 +13,10 @@ namespace Back.Data.Models public string ApprovalDate { get; set; } public decimal PreDiscount { get { return OrderItems.Sum(s => s.Total); } } public decimal TDiscount { get; set; } = 0; - public decimal TPrice { get { return OrderItems.Sum(s => s.Total) - TDiscount; } } + public decimal lstDiscount { get { return OrderItems.Sum(s => s.Total) - TDiscount; } } + public decimal TTax { get { return OrderItems.Sum(s => s.Tax); } } + public decimal TPrice { get { return lstDiscount - TTax; } } + #region Navigation [ForeignKey("CompanyID")] diff --git a/Back/Data/Models/OrderItem.cs b/Back/Data/Models/OrderItem.cs index 43e7058..18f3944 100644 --- a/Back/Data/Models/OrderItem.cs +++ b/Back/Data/Models/OrderItem.cs @@ -6,8 +6,8 @@ namespace Back.Data.Models { public int ID { get; set; } public int OrderID { get; set; } - public int PermissionID { get; set; } - public int CalculationTypeID { get; set; } + public int? PermissionID { get; set; } + public int? PromotionID { get; set; } public int CreditAmount { get; set; } public decimal APrice { get; set; } public decimal Discount { get; set; } @@ -18,9 +18,9 @@ namespace Back.Data.Models [ForeignKey("OrderID")] public virtual Order Order { get; set; } [ForeignKey("PermissionID")] - public virtual Permission Permission { get; set; } - [ForeignKey("CalculationTypeID")] - public virtual CalculationType CalculationType { get; set; } + public virtual Permission? Permission { get; set; } + [ForeignKey("PromotionID")] + public virtual Promotion? Promotion { get; set; } #endregion } } diff --git a/Back/Data/Models/Promotion.cs b/Back/Data/Models/Promotion.cs index 6f37ffc..1a8b99e 100644 --- a/Back/Data/Models/Promotion.cs +++ b/Back/Data/Models/Promotion.cs @@ -6,10 +6,9 @@ namespace Back.Data.Models { public int ID { get; set; } public string Name { get; set; } - public bool Satus { get; set; } + public bool Status { get; set; } - - public IEnumerable PromotionDetails { get; set; } + public virtual IEnumerable PromotionDetails { get; set; } } public class PromotionDetails { @@ -21,9 +20,9 @@ namespace Back.Data.Models public decimal TPrice { get { return APrice * CreditAmount; } } [ForeignKey("PermissionID")] - public Permission Permission { get; set; } + public virtual Permission Permission { get; set; } [ForeignKey("PromotionID")] - public Promotion Promotion { get; set; } + public virtual Promotion Promotion { get; set; } } } diff --git a/Back/Program.cs b/Back/Program.cs index e64c53a..c86c145 100644 --- a/Back/Program.cs +++ b/Back/Program.cs @@ -77,6 +77,9 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddScoped(c => new mpNuget.RestClient("09119660045", "C54S2")); string origins = "OriginTaxPayer"; diff --git a/Back/Services/ServOrders.cs b/Back/Services/ServOrders.cs new file mode 100644 index 0000000..a771907 --- /dev/null +++ b/Back/Services/ServOrders.cs @@ -0,0 +1,62 @@ +using Back.Data.Contracts; +using Back.Data.Models; +using Microsoft.EntityFrameworkCore; +using Shared.DTOs; +using Shared.DTOs.Serch; + +namespace Back.Services +{ + public class ServOrders + { + private readonly IAsyncRepository _repoOrder; + private readonly IAsyncRepository _repoOrderItem; + + + public ServOrders(IAsyncRepository repoOrder, IAsyncRepository repoOrderItem) + { + _repoOrder = repoOrder; + _repoOrderItem = repoOrderItem; + + } + public async Task> GetOrdersByCompanyID(int CompanyID, ItemSerachOrder itemSerach) + { + var request = _repoOrder.Get(w => w.CompanyID == CompanyID); + + if (itemSerach.Status.HasValue) + request = request.Where(w => w.Status == itemSerach.Status); + + if (itemSerach.ID.HasValue) + request = request.Where(w => w.ID == itemSerach.ID); + + request = request.Include(inc => inc.OrderItems); + return await request + .Select(w => new OrderDto + { + ApprovalDate = w.ApprovalDate, + DateCreate = w.DateCreate, + ID = w.ID, + PreDiscount = w.PreDiscount, + Status = w.Status, + TDiscount = w.TDiscount, + TPrice = w.TPrice, + TTax = w.TPrice, + lstDiscount = w.lstDiscount, + }).ToListAsync(); + } + public async Task> GetOrderItems(int OrderID,int CompanyID) + { + return await _repoOrderItem.Get(w => w.OrderID == OrderID && w.Order.CompanyID== CompanyID) + .Select(s=>new OrderItemDto + { + OrderID = OrderID, + APrice = s.APrice, + CreditAmount = s.CreditAmount, + Discount=s.Discount, + ID = s.ID, + Tax = s.Tax, + Type= s.PermissionID.HasValue && !s.PromotionID.HasValue ? "" : !s.PermissionID.HasValue && s.PromotionID.HasValue ? "تعرفه" : "نامشخص", + IDForType = s.PermissionID.HasValue && !s.PromotionID.HasValue ? s.PermissionID.Value : !s.PermissionID.HasValue && s.PromotionID.HasValue ? s.PromotionID.Value : 0 + }).ToListAsync(); + } + } +} diff --git a/Back/Services/ServPricing.cs b/Back/Services/ServPricing.cs new file mode 100644 index 0000000..5b6c46d --- /dev/null +++ b/Back/Services/ServPricing.cs @@ -0,0 +1,28 @@ +using Back.Data.Contracts; +using Back.Data.Models; +using Microsoft.EntityFrameworkCore; +using Shared.DTOs; + +namespace Back.Services +{ + + public class ServPricing + { + private readonly IAsyncRepository _repoPricing; + + public ServPricing(IAsyncRepository repoPricing) + { + _repoPricing = repoPricing; + } + public async Task> GetPricing() + { + return await _repoPricing.GetAll() + .Select(s=>new PricingDto + { + PermissionID = s.PermissionID, + PermissionTitle=s.Permission.Title, + Price = s.Price, + }).ToListAsync(); + } + } +} diff --git a/Back/Services/ServPromotion.cs b/Back/Services/ServPromotion.cs new file mode 100644 index 0000000..18e5805 --- /dev/null +++ b/Back/Services/ServPromotion.cs @@ -0,0 +1,41 @@ +using Back.Data.Contracts; +using Back.Data.Models; +using Microsoft.EntityFrameworkCore; +using Shared.DTOs; + +namespace Back.Services +{ + + + public class ServPromotion + { + private readonly IAsyncRepository _repoPromotion; + private readonly IAsyncRepository _repoPromotionDetails; + + + public ServPromotion(IAsyncRepository repoPromotion, IAsyncRepository repoPromotionDetails) + { + _repoPromotion = repoPromotion; + _repoPromotionDetails = repoPromotionDetails; + + } + public async Task> GetAll() + { + return await _repoPromotion.Get(w => w.Status) + .Include(inc => inc.PromotionDetails).ThenInclude(tinc => tinc.Permission) + .Select(s => new PromotionDto + { + ID = s.ID, + Name = s.Name, + promotionDetails = s.PromotionDetails.Select(s => new PromotionDetailDto + { + ID = s.ID, + APrice = s.APrice, + CreditAmount = s.CreditAmount, + PermissionID = s.PermissionID, + PermissionTitle = s.Permission.Title + }).ToList() + }).ToListAsync(); + } + } +} diff --git a/Shared/DTOs/OrderDto.cs b/Shared/DTOs/OrderDto.cs new file mode 100644 index 0000000..18f67e5 --- /dev/null +++ b/Shared/DTOs/OrderDto.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTOs +{ + public class OrderDto + { + public int ID { get; set; } + public StatusOrder Status { get; set; } + public string StatusTitle { get { return Status.GetEnumDisplayName(); } } + public string DateCreate { get; set; } + public string ApprovalDate { get; set; } + public decimal PreDiscount { get; set; } + public decimal TDiscount { get; set; } + public decimal lstDiscount { get; set; } + public decimal TTax { get; set; } + public decimal TPrice { get; set; } + } +} diff --git a/Shared/DTOs/OrderItemDto.cs b/Shared/DTOs/OrderItemDto.cs new file mode 100644 index 0000000..0060683 --- /dev/null +++ b/Shared/DTOs/OrderItemDto.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTOs +{ + public class OrderItemDto + { + public int ID { get; set; } + public int OrderID { get; set; } + public string Type { get; set; } + public int IDForType { get; set; } + public int CreditAmount { get; set; } + public decimal APrice { get; set; } + public decimal Discount { get; set; } + public decimal Tax { get; set; } + public decimal Total { get { return (CreditAmount * APrice) - Discount + Tax; } } + } +} diff --git a/Shared/DTOs/PricingDto.cs b/Shared/DTOs/PricingDto.cs new file mode 100644 index 0000000..022d807 --- /dev/null +++ b/Shared/DTOs/PricingDto.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTOs +{ + public class PricingDto + { + public int PermissionID { get; set; } + public string PermissionTitle { get; set; } + public decimal Price { get; set; } + } +} diff --git a/Shared/DTOs/PromotionDetailDto.cs b/Shared/DTOs/PromotionDetailDto.cs new file mode 100644 index 0000000..8a9abba --- /dev/null +++ b/Shared/DTOs/PromotionDetailDto.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTOs +{ + public class PromotionDetailDto + { + public int ID { get; set; } + public int PermissionID { get; set; } + public string PermissionTitle { get; set; } + public int CreditAmount { get; set; } + public decimal APrice { get; set; } + public decimal TPrice { get { return APrice * CreditAmount; } } + } +} diff --git a/Shared/DTOs/PromotionDto.cs b/Shared/DTOs/PromotionDto.cs new file mode 100644 index 0000000..45ee97c --- /dev/null +++ b/Shared/DTOs/PromotionDto.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTOs +{ + public class PromotionDto + { + public int ID { get; set; } + public string Name { get; set; } + public ICollection promotionDetails { get; set; } + } +} diff --git a/Shared/DTOs/Serch/ItemSerachOrder.cs b/Shared/DTOs/Serch/ItemSerachOrder.cs new file mode 100644 index 0000000..71a254a --- /dev/null +++ b/Shared/DTOs/Serch/ItemSerachOrder.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTOs.Serch +{ + public class ItemSerachOrder + { + public int? ID { get; set; } + public StatusOrder? Status { get; set; } + } +} diff --git a/Shared/Enums/StatusOrder.cs b/Shared/Enums/StatusOrder.cs index 46db2b9..6e12222 100644 --- a/Shared/Enums/StatusOrder.cs +++ b/Shared/Enums/StatusOrder.cs @@ -5,10 +5,10 @@ namespace Shared.DTOs public enum StatusOrder { [Display(Name = "ساخته شده")] - Create, + Create=1, [Display(Name = "پرداخت شده")] - Paid, + Paid=2, [Display(Name = "انصراف داده شده")] - Cancel + Cancel=3 } }