This commit is contained in:
mmrbnjd
2024-05-09 23:55:22 +03:30
parent 5674b71052
commit 4349d6da09
7 changed files with 235 additions and 73 deletions

View File

@@ -5,6 +5,7 @@ using Shared.DTOs.Serch;
using Shared.DTOs; using Shared.DTOs;
using System.Xml.Linq; using System.Xml.Linq;
using Back.Common; using Back.Common;
using Back.Validations;
namespace Back.Controllers namespace Back.Controllers
{ {
@@ -14,10 +15,12 @@ namespace Back.Controllers
{ {
private readonly ServCOD _servCOD; private readonly ServCOD _servCOD;
private readonly servUser _servUser; private readonly servUser _servUser;
public CODController(ServCOD servCOD, servUser servUser) private readonly AddOrCodValidation _addorupdateCodValidation;
public CODController(ServCOD servCOD, servUser servUser, AddOrCodValidation addorupdateCodValidation)
{ {
_servCOD = servCOD; _servCOD = servCOD;
_servUser = servUser; _servUser = servUser;
_addorupdateCodValidation = addorupdateCodValidation;
} }
[HttpPost("GetAll")] [HttpPost("GetAll")]
public async Task<ActionResult<PagingDto<RCOD>?>> GetAll([FromBody] ItemSerchGetCOD itemSerch) public async Task<ActionResult<PagingDto<RCOD>?>> GetAll([FromBody] ItemSerchGetCOD itemSerch)
@@ -36,85 +39,69 @@ namespace Back.Controllers
[HttpPost("Add")] [HttpPost("Add")]
public async Task<ActionResult<bool>> Add(RCOD item) public async Task<ActionResult<bool>> 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 resultValidationmodel = await _addorupdateCustomerValidation.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.add)); var claim = HttpContext.User.Claims.First(c => c.Type == "UserID");
//if (!resultValidationmodel.IsValid) var UserID = claim.Value;
// return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList()); var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
//return Ok(await _servCus.AddOrUpdateCustomer(new Data.Models.Customer var resultValidationmodel = await _addorupdateCodValidation.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.add));
//{ if (!resultValidationmodel.IsValid)
// Address = item.Address, return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList());
// BranchID = item.BranchID,
// CompanyID = user.RolUsers.First().CompanyID, return Ok(await _servCOD.AddOrUpdateCod(new Data.Models.CODItem
// CustomerType = item.CustomerType, {
// EconomicCode = item.EconomicCode,
// Email = item.Email, CompanyID = user.RolUsers.First().CompanyID,
// FullName = item.FullName, TaxRate = item.TaxRate,
// Info = item.Info, Title = item.Title,
// MeliCode = item.MeliCode, UnitID=item.UnitID,
// PassportNumber = item.PassportNumber, ItemTaxID=item.TaxID,
// Phone = item.Phone, IsDeleted = false
// ZipCode = item.ZipCode, }));
// IsDeleted = false
//}));
} }
[HttpPut("Update")] [HttpPut("Update")]
public async Task<ActionResult<bool>> Update(RCOD item) public async Task<ActionResult<bool>> Update(RCOD item)
{ {
return Ok(); //-----GetUserAndCompany
////-----GetUserAndCompany var claim = HttpContext.User.Claims.First(c => c.Type == "UserID");
//var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); var UserID = claim.Value;
//var UserID = claim.Value; var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
//var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
////-----Validaton //-----Validaton
//var resultValidationmodel = await _addorupdateCustomerValidation.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.update)); var resultValidationmodel = await _addorupdateCodValidation.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.update));
//if (!resultValidationmodel.IsValid) if (!resultValidationmodel.IsValid)
// return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList()); return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList());
////-----Get Cus //-----Get Cod
//var cus = await _servCus.GetCustomerByCustomerID(item.ID.Value, user.RolUsers.First().CompanyID); var Cod = await _servCOD.GetCodByCodID(item.ID.Value, user.RolUsers.First().CompanyID);
//if (cus == null) if (Cod == null)
// return BadRequest(new List<string> { "Cus notFound..." }); return BadRequest(new List<string> { "Cod notFound..." });
////-----change Cus ////-----change Cod
//cus.Address = item.Address; Cod.TaxRate = item.TaxRate;
//cus.BranchID = item.BranchID; Cod.Title = item.Title;
//cus.CompanyID = user.RolUsers.First().CompanyID; Cod.UnitID = item.UnitID;
//cus.CustomerType = item.CustomerType; Cod.ItemTaxID = item.TaxID;
//cus.EconomicCode = item.EconomicCode; Cod.IsDeleted = false;
//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;
////----Update and sendResult //----Update and sendResult
//return Ok(await _servCus.AddOrUpdateCustomer(cus)); return Ok(await _servCOD.AddOrUpdateCod(Cod));
} }
[HttpDelete("Delete/{ID}")] [HttpDelete("Delete/{ID}")]
public async Task<ActionResult<bool>> Delete(int ID) public async Task<ActionResult<bool>> Delete(int ID)
{ {
return Ok(); //-----GetUserAndCompany
////-----GetUserAndCompany var claim = HttpContext.User.Claims.First(c => c.Type == "UserID");
//var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); var UserID = claim.Value;
//var UserID = claim.Value; var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
//var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
////-----Get Cus //-----Get Cus
//var cus = await _servCus.GetCustomerByCustomerID(ID, user.RolUsers.First().CompanyID); var cod = await _servCOD.GetCodByCodID(ID, user.RolUsers.First().CompanyID);
//if (cus == null) if (cod == null)
// return NotFound(); return NotFound();
////----Update and sendResult //----Update and sendResult
//return Ok(await _servCus.DeleteCustomer(cus)); return Ok(await _servCOD.DeleteCod(cod));
} }
} }
} }

View File

@@ -40,6 +40,7 @@ builder.Services.AddScoped<servTaxPayer>();
builder.Services.AddScoped<servCustomer>(); builder.Services.AddScoped<servCustomer>();
builder.Services.AddScoped<CompanyRegistrationValidation>(); builder.Services.AddScoped<CompanyRegistrationValidation>();
builder.Services.AddScoped<AddOrCustomerValidation>(); builder.Services.AddScoped<AddOrCustomerValidation>();
builder.Services.AddScoped<AddOrCodValidation>();
builder.Services.AddScoped<ServCOD>(); builder.Services.AddScoped<ServCOD>();
builder.Services.AddScoped(c => new mpNuget.RestClient("09119660045", "C54S2")); builder.Services.AddScoped(c => new mpNuget.RestClient("09119660045", "C54S2"));

View File

@@ -11,11 +11,13 @@ namespace Back.Services
{ {
private readonly IAsyncRepository<CODItem> _CODRepo; private readonly IAsyncRepository<CODItem> _CODRepo;
private readonly IAsyncRepository<CODUnit> _UnitRepo; private readonly IAsyncRepository<CODUnit> _UnitRepo;
public ServCOD(IAsyncRepository<CODItem> CODRepo, IAsyncRepository<CODUnit> unitRepo) private readonly CheckPermission _checkPermission;
public ServCOD(IAsyncRepository<CODItem> CODRepo, IAsyncRepository<CODUnit> unitRepo
, CheckPermission checkPermission)
{ {
_CODRepo = CODRepo; _CODRepo = CODRepo;
_UnitRepo = unitRepo; _UnitRepo = unitRepo;
_checkPermission = checkPermission;
} }
public async Task<PagingDto<RCOD>?> GetCODs(int CompanyID, ItemSerchGetCOD itemSerch) public async Task<PagingDto<RCOD>?> GetCODs(int CompanyID, ItemSerchGetCOD itemSerch)
{ {
@@ -47,6 +49,7 @@ namespace Back.Services
TaxID = s.ItemTaxID, TaxID = s.ItemTaxID,
Title = s.Title, Title = s.Title,
Unit = s.CODUnit.Title, Unit = s.CODUnit.Title,
UnitID=s.UnitID,
TaxRate = s.TaxRate TaxRate = s.TaxRate
}) })
.Paging(itemSerch.PageIndex, itemSerch.PageSize); .Paging(itemSerch.PageIndex, itemSerch.PageSize);
@@ -55,5 +58,96 @@ namespace Back.Services
{ {
return await _UnitRepo.GetAll().Select(s => new IdName<int> { ID = s.ID, Title = s.Title }).ToListAsync(); return await _UnitRepo.GetAll().Select(s => new IdName<int> { ID = s.ID, Title = s.Title }).ToListAsync();
} }
public async Task<CODItem?> GetCodByCodID(int CodID, int CompanyID)
{
return await _CODRepo
.Get(w => w.ID == CodID && w.CompanyID == CompanyID && !w.IsDeleted).FirstOrDefaultAsync();
}
public async Task<bool> ExistCodByCustomerID(int CodID, int CompanyID)
{
return await _CODRepo
.Get(w => w.ID == CodID && w.CompanyID == CompanyID && !w.IsDeleted).AnyAsync();
}
public async Task<bool> ExistUnit(int UnitID)
{
return await _UnitRepo
.Get(w => w.ID == UnitID ).AnyAsync();
}
public async Task<bool> 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<bool> 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;
}
}
} }
} }

View File

@@ -0,0 +1,65 @@
using Back.Common;
using Back.Services;
using FluentValidation;
using Shared.DTOs;
namespace Back.Validations
{
public class AddOrCodValidation : AbstractValidator<Tuple<int, RCOD, eActionValidation>>
{
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 باشد");
});
}
}
}

View File

@@ -18,14 +18,29 @@
<div class="form-group col-md-6"> <div class="form-group col-md-6">
<label class="col-sm-5 col-form-label" style="color:red" for="inputUnitID">واحد اندازه گیزی</label> <label class="col-sm-5 col-form-label" style="color:red" for="inputUnitID">واحد اندازه گیزی</label>
<select @bind="Cod.UnitID" class="form-control" aria-label="Default select example" id="inputUnitID"> <select @bind="Cod.UnitID" class="form-control" aria-label="Default select example" id="inputUnitID">
@if (Cod.UnitID > 0)
{
<option value="0" style="color: #b5b5b5" selected>انتخاب کنید...</option> <option value="0" style="color: #b5b5b5" selected>انتخاب کنید...</option>
}
else
{
<option value="0" style="color: #b5b5b5">انتخاب کنید...</option>
}
@if (Unitrequest != null) @if (Unitrequest != null)
{ {
foreach (var item in Unitrequest) foreach (var item in Unitrequest)
{
if (Cod.UnitID == item.ID)
{
<option value="@item.ID" selected>@item.Title</option>
}
else
{ {
<option value="@item.ID">@item.Title</option> <option value="@item.ID">@item.Title</option>
} }
} }
}
</select> </select>
</div> </div>
</div> </div>

View File

@@ -6,15 +6,15 @@
</div> </div>
<div class="rc__post-content"> <div class="rc__post-content">
<h3 class="rc__post-title"> <h3 class="rc__post-title">
<a href="blog-details.html"> <a href="@Navigation.ToAbsoluteUri($"/BlogDetails/{@Item?.ID}")">
@Item?.Title.Split(':')[1] @Item?.Title.Split(':')[1]
</a> </a>
</h3><a href="blog-details.html"> </h3><a>
<div class="rc__meta"> <div class="rc__meta">
<span>@Item?.Date</span> <span>@Item?.Date</span>
</div> </div>
</a> </a>
</div><a href="blog-details.html"> </div><a>
</a> </a>
</div><a href="@Navigation.ToAbsoluteUri($"/BlogDetails/{@Item?.ID}")"></a> </div><a href="@Navigation.ToAbsoluteUri($"/BlogDetails/{@Item?.ID}")"></a>

View File

@@ -15,7 +15,7 @@
</div> </div>
</div> </div>
<div class="tp-blog-title-box"> <div class="tp-blog-title-box">
<a class="tp-blog-title-sm" href="blog-details.html">@Item?.Title.Split(':')[1]</a> <a class="tp-blog-title-sm" href="@Navigation.ToAbsoluteUri($"/BlogDetails/{@Item?.ID}")">@Item?.Title.Split(':')[1]</a>
</div> </div>
<div class="tp-blog-author-info-box d-flex align-items-center"> <div class="tp-blog-author-info-box d-flex align-items-center">
<div class="tp-blog-avata"> <div class="tp-blog-avata">