diff --git a/Back/Controllers/CODController.cs b/Back/Controllers/CODController.cs index 2ae4e25..52fd6aa 100644 --- a/Back/Controllers/CODController.cs +++ b/Back/Controllers/CODController.cs @@ -5,6 +5,7 @@ using Shared.DTOs.Serch; using Shared.DTOs; using System.Xml.Linq; using Back.Common; +using Back.Validations; namespace Back.Controllers { @@ -14,10 +15,12 @@ namespace Back.Controllers { private readonly ServCOD _servCOD; private readonly servUser _servUser; - public CODController(ServCOD servCOD, servUser servUser) + private readonly AddOrCodValidation _addorupdateCodValidation; + public CODController(ServCOD servCOD, servUser servUser, AddOrCodValidation addorupdateCodValidation) { _servCOD = servCOD; - _servUser = servUser; + _servUser = servUser; + _addorupdateCodValidation = addorupdateCodValidation; } [HttpPost("GetAll")] public async Task?>> GetAll([FromBody] ItemSerchGetCOD itemSerch) @@ -36,85 +39,69 @@ namespace Back.Controllers [HttpPost("Add")] public async Task> Add(RCOD item) { - return Ok(); - //var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); - //var UserID = claim.Value; - //var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); + + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); - //var resultValidationmodel = await _addorupdateCustomerValidation.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.add)); - //if (!resultValidationmodel.IsValid) - // return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList()); + var resultValidationmodel = await _addorupdateCodValidation.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.add)); + if (!resultValidationmodel.IsValid) + return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList()); - //return Ok(await _servCus.AddOrUpdateCustomer(new Data.Models.Customer - //{ - // Address = item.Address, - // BranchID = item.BranchID, - // CompanyID = user.RolUsers.First().CompanyID, - // CustomerType = item.CustomerType, - // EconomicCode = item.EconomicCode, - // Email = item.Email, - // FullName = item.FullName, - // Info = item.Info, - // MeliCode = item.MeliCode, - // PassportNumber = item.PassportNumber, - // Phone = item.Phone, - // ZipCode = item.ZipCode, - // IsDeleted = false - //})); + return Ok(await _servCOD.AddOrUpdateCod(new Data.Models.CODItem + { + + CompanyID = user.RolUsers.First().CompanyID, + TaxRate = item.TaxRate, + Title = item.Title, + UnitID=item.UnitID, + ItemTaxID=item.TaxID, + IsDeleted = false + })); } [HttpPut("Update")] public async Task> Update(RCOD item) { - return Ok(); - ////-----GetUserAndCompany - //var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); - //var UserID = claim.Value; - //var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); + //-----GetUserAndCompany + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); - ////-----Validaton - //var resultValidationmodel = await _addorupdateCustomerValidation.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.update)); - //if (!resultValidationmodel.IsValid) - // return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList()); + //-----Validaton + var resultValidationmodel = await _addorupdateCodValidation.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.update)); + if (!resultValidationmodel.IsValid) + return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList()); - ////-----Get Cus - //var cus = await _servCus.GetCustomerByCustomerID(item.ID.Value, user.RolUsers.First().CompanyID); - //if (cus == null) - // return BadRequest(new List { "Cus notFound..." }); + //-----Get Cod + var Cod = await _servCOD.GetCodByCodID(item.ID.Value, user.RolUsers.First().CompanyID); + if (Cod == null) + return BadRequest(new List { "Cod notFound..." }); - ////-----change Cus - //cus.Address = item.Address; - //cus.BranchID = item.BranchID; - //cus.CompanyID = user.RolUsers.First().CompanyID; - //cus.CustomerType = item.CustomerType; - //cus.EconomicCode = item.EconomicCode; - //cus.Email = item.Email; - //cus.FullName = item.FullName; - //cus.Info = item.Info; - //cus.MeliCode = item.MeliCode; - //cus.PassportNumber = item.PassportNumber; - //cus.Phone = item.Phone; - //cus.ZipCode = item.ZipCode; - //cus.IsDeleted = false; + ////-----change Cod + Cod.TaxRate = item.TaxRate; + Cod.Title = item.Title; + Cod.UnitID = item.UnitID; + Cod.ItemTaxID = item.TaxID; + Cod.IsDeleted = false; - ////----Update and sendResult - //return Ok(await _servCus.AddOrUpdateCustomer(cus)); + //----Update and sendResult + return Ok(await _servCOD.AddOrUpdateCod(Cod)); } [HttpDelete("Delete/{ID}")] public async Task> Delete(int ID) { - return Ok(); - ////-----GetUserAndCompany - //var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); - //var UserID = claim.Value; - //var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); + //-----GetUserAndCompany + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); - ////-----Get Cus - //var cus = await _servCus.GetCustomerByCustomerID(ID, user.RolUsers.First().CompanyID); - //if (cus == null) - // return NotFound(); + //-----Get Cus + var cod = await _servCOD.GetCodByCodID(ID, user.RolUsers.First().CompanyID); + if (cod == null) + return NotFound(); - ////----Update and sendResult - //return Ok(await _servCus.DeleteCustomer(cus)); + //----Update and sendResult + return Ok(await _servCOD.DeleteCod(cod)); } } } diff --git a/Back/Program.cs b/Back/Program.cs index 040f5e2..b91d444 100644 --- a/Back/Program.cs +++ b/Back/Program.cs @@ -40,6 +40,7 @@ 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")); diff --git a/Back/Services/ServCOD.cs b/Back/Services/ServCOD.cs index 781600b..1f00acc 100644 --- a/Back/Services/ServCOD.cs +++ b/Back/Services/ServCOD.cs @@ -11,11 +11,13 @@ namespace Back.Services { private readonly IAsyncRepository _CODRepo; private readonly IAsyncRepository _UnitRepo; - public ServCOD(IAsyncRepository CODRepo, IAsyncRepository unitRepo) + private readonly CheckPermission _checkPermission; + public ServCOD(IAsyncRepository CODRepo, IAsyncRepository unitRepo + , CheckPermission checkPermission) { _CODRepo = CODRepo; _UnitRepo = unitRepo; - + _checkPermission = checkPermission; } public async Task?> GetCODs(int CompanyID, ItemSerchGetCOD itemSerch) { @@ -47,6 +49,7 @@ namespace Back.Services TaxID = s.ItemTaxID, Title = s.Title, Unit = s.CODUnit.Title, + UnitID=s.UnitID, TaxRate = s.TaxRate }) .Paging(itemSerch.PageIndex, itemSerch.PageSize); @@ -55,5 +58,96 @@ namespace Back.Services { return await _UnitRepo.GetAll().Select(s => new IdName { ID = s.ID, Title = s.Title }).ToListAsync(); } + public async Task GetCodByCodID(int CodID, int CompanyID) + { + return await _CODRepo + .Get(w => w.ID == CodID && w.CompanyID == CompanyID && !w.IsDeleted).FirstOrDefaultAsync(); + } + public async Task ExistCodByCustomerID(int CodID, int CompanyID) + { + return await _CODRepo + .Get(w => w.ID == CodID && w.CompanyID == CompanyID && !w.IsDeleted).AnyAsync(); + } + public async Task ExistUnit(int UnitID) + { + return await _UnitRepo + .Get(w => w.ID == UnitID ).AnyAsync(); + } + public async Task AddOrUpdateCod(CODItem item) + { + try + { + //SysLog log = new SysLog() + //{ + // TraceIdentifierID = _httpContextAccessor.HttpContext.TraceIdentifier, + // Datetime = DateTime.Now.ConvertMiladiToShamsi(), + // Method = $"{_httpContextAccessor.HttpContext.Request.Method}/{this.GetType().FullName}/AddORUpdateCustomer", + // Value = "*" + JsonConvert.SerializeObject(item), + // Route = _httpContextAccessor.HttpContext.Request.Path, + // Type = "User" + //}; + //_contextMongodb.InsertItem(log); + + if (item.ID == null || item.ID <= 0) + { + var ret = await _CODRepo.AddBoolResultAsync(item); + await _checkPermission.ExtensionofAccess(item.CompanyID, 5, "-1"); + return ret; + } + else + { + return await _CODRepo.UpdateAsync(item); + } + } + catch (Exception ex) + { + //SysLog log = new SysLog() + //{ + // TraceIdentifierID = _httpContextAccessor.HttpContext.TraceIdentifier, + // Datetime = DateTime.Now.ConvertMiladiToShamsi(), + // Method = $"{_httpContextAccessor.HttpContext.Request.Method}/{this.GetType().FullName}/AddORUpdateCustomer", + // Value = ex.Message, + // Route = _httpContextAccessor.HttpContext.Request.Path, + // Type = "catch" + //}; + //_contextMongodb.InsertItem(log); + return false; + } + + } + public async Task DeleteCod(CODItem item) + { + + try + { + item.IsDeleted = true; + return await _CODRepo.UpdateAsync(item); + //SysLog log = new SysLog() + //{ + // TraceIdentifierID = _httpContextAccessor.HttpContext.TraceIdentifier, + // Datetime = DateTime.Now.ConvertMiladiToShamsi(), + // Method = $"{_httpContextAccessor.HttpContext.Request.Method}/{this.GetType().FullName}/DeleteCustomer", + // Value = JsonConvert.SerializeObject(item.ID), + // Route = _httpContextAccessor.HttpContext.Request.Path, + // Type = "User" + //}; + //_contextMongodb.InsertItem(log); + } + catch (Exception ex) + { + //SysLog log = new SysLog() + //{ + // TraceIdentifierID = _httpContextAccessor.HttpContext.TraceIdentifier, + // Datetime = DateTime.Now.ConvertMiladiToShamsi(), + // Method = $"{_httpContextAccessor.HttpContext.Request.Method}/{this.GetType().FullName}/DeleteCustomer", + // Value = ex.Message, + // Route = _httpContextAccessor.HttpContext.Request.Path, + // Type = "catch" + //}; + //_contextMongodb.InsertItem(log); + return false; + + } + } } } diff --git a/Back/Validations/AddOrCodValidation.cs b/Back/Validations/AddOrCodValidation.cs new file mode 100644 index 0000000..066aca1 --- /dev/null +++ b/Back/Validations/AddOrCodValidation.cs @@ -0,0 +1,65 @@ +using Back.Common; +using Back.Services; +using FluentValidation; +using Shared.DTOs; + +namespace Back.Validations +{ + public class AddOrCodValidation : AbstractValidator> + { + public AddOrCodValidation(CheckPermission _checkPermission, ServCOD servCod) + { + CascadeMode = CascadeMode.Stop; + When(r => r.Item3 == eActionValidation.add, () => + { + RuleFor(r => r.Item1) + .Custom((CompanyID, context) => + { + + if (!_checkPermission.AllowAddCODInCompany(CompanyID).Result) + context.AddFailure("اضافه کردن کالا محدود شده است"); + }); + }); + + When(r => r.Item3 == eActionValidation.update, () => + { + RuleFor(r => r) + .Custom((model, context) => + { + var companyid = model.Item1; + if (!model.Item2.ID.HasValue || model.Item2.ID <= 0) + context.AddFailure("شناسه کالا نمی تواند خالی باشذ"); + else + { + var customerid = model.Item2.ID.Value; + if (!servCod.ExistCodByCustomerID(customerid, companyid).Result) + context.AddFailure("کالا با این شناسه یافت نشد"); + } + }); + }); + + + RuleFor(r => r.Item2.Title) + .NotNull().WithMessage("نام نمی تواند خالی باشد") + .NotEmpty().WithMessage("نام نمی تواند خالی باشد") + .MinimumLength(3).WithMessage("حداقل کارکتر مجار نام 3 می باشد"); + // + RuleFor(r => r.Item2.UnitID) + .NotNull().WithMessage("واحد اندازه گیزی نمی تواند خالی باشد") + .NotEmpty().WithMessage("واحد اندازه گیزی نمی تواند خالی باشد") + ; + RuleFor(r => r.Item2.TaxRate) + .NotNull().WithMessage("نرخ مالیات نمی تواند خالی باشد") + .NotEmpty().WithMessage("نرخ مالیات نمی تواند خالی باشد") + .Custom((TaxRate, context) => + { + if (TaxRate > 100) + context.AddFailure("نرخ مالیات نمی تواند بیشتر از 100 باشد"); + + }); + + + + } + } +} diff --git a/TaxPayerFull/CUSComponent/CodItem.razor b/TaxPayerFull/CUSComponent/CodItem.razor index 44fdc9e..5e0bb02 100644 --- a/TaxPayerFull/CUSComponent/CodItem.razor +++ b/TaxPayerFull/CUSComponent/CodItem.razor @@ -18,12 +18,27 @@
diff --git a/TaxPayerFull/Layout/ItemBlog - v2.razor b/TaxPayerFull/Layout/ItemBlog - v2.razor index 72e259d..55bfd2e 100644 --- a/TaxPayerFull/Layout/ItemBlog - v2.razor +++ b/TaxPayerFull/Layout/ItemBlog - v2.razor @@ -6,15 +6,15 @@

- + @Item?.Title.Split(':')[1] -

+
@Item?.Date
-
+ diff --git a/TaxPayerFull/Layout/ItemBlog.razor b/TaxPayerFull/Layout/ItemBlog.razor index c33d2be..22e12dd 100644 --- a/TaxPayerFull/Layout/ItemBlog.razor +++ b/TaxPayerFull/Layout/ItemBlog.razor @@ -15,7 +15,7 @@