using Back.Common; using Back.Data.Models; 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 OrdersController : ControllerBase { private readonly ServOrders _servOrders; private readonly ServPromotion _servPromotion; private readonly ServPricing _servPricing; private readonly servUser _servUser; public OrdersController(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( OrderID, CompanyID)); } [HttpDelete("CancelOrder/{OrderID}")] public async Task>> CancelOrder(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; var order =await _servOrders.GetOrder(OrderID, CompanyID); if (order==null) return NotFound(); if (order.Status==StatusOrder.Create) { order.Status = StatusOrder.Cancel; order.ApprovalDate = DateTime.Now.ConvertMiladiToShamsi(); return Ok(await _servOrders.UpdateOrder(order)); } else return BadRequest(new List { "در این وضعیت امکان ابطال نیست" }); } [HttpPost("AddOrder")] public async Task> AddOrder(PromotionDto item) { 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; Order order = new Order(); order = new Order() { CompanyID = CompanyID, ApprovalDate = DateTime.Now.ConvertMiladiToShamsi(), DateCreate = DateTime.Now.ConvertMiladiToShamsi(), Status = StatusOrder.Create, UserID = Convert.ToInt32(UserID) }; if (item.ID<0) { var pricing = await _servPricing.GetPricing(); if (pricing == null) return NotFound(); //permission order.OrderItems = item.promotionDetails.Select(s => new OrderItem { APrice = pricing.Where(w => w.PermissionID == s.PermissionID).Select(c => c.Price).FirstOrDefault(), PermissionID = s.PermissionID, Discount=0, Tax=0, CreditAmount=s.CreditAmount }).ToList(); } else { //promotion var pro=await _servPromotion.GetByPromotionID(item.ID); if (pro == null) return NotFound(); order.OrderItems=new List() { new OrderItem() { PromotionID=pro.ID, APrice=pro.PromotionDetails.Sum(s=>s.TPrice), CreditAmount=1, Tax=0, Discount=0 } }; } var result= await _servOrders.AddOrder(order); if (result !=null) return Ok(new OrderDto { ApprovalDate = result.ApprovalDate.ShamciToFormatShamci(), DateCreate = result.DateCreate.ShamciToFormatShamci(), ID = result.ID, PreDiscount = result.PreDiscount, Status = result.Status, TDiscount = result.TDiscount, TPrice = result.TPrice, TTax = result.TPrice, lstDiscount = result.lstDiscount, }); else return BadRequest(new List { "خطا در ثبت سفارش" }); } } }