2024-05-08 17:25:02 +03:30
using Back.Common ;
using Back.Services ;
2024-05-07 17:49:02 +03:30
using Back.Validations ;
2024-05-05 18:15:37 +03:30
using Microsoft.AspNetCore.Authorization ;
using Microsoft.AspNetCore.Mvc ;
2024-05-08 17:25:02 +03:30
using Service ;
2024-05-05 18:15:37 +03:30
using Shared.DTOs ;
2024-05-08 17:25:02 +03:30
using System.Net ;
using System.Reflection.Emit ;
2024-05-05 18:15:37 +03:30
namespace Back.Controllers
{
[Route("api/[controller] ")]
[Authorize]
[ApiController]
public class CustomerController : ControllerBase
{
private readonly CheckPermission _checkPermission ;
private readonly servUser _servUser ;
private readonly servCustomer _servCus ;
2024-05-08 17:25:02 +03:30
private readonly AddOrCustomerValidation _addorupdateCustomerValidation ;
2024-05-07 17:49:02 +03:30
public CustomerController ( CheckPermission checkPermission , servUser servUser
2024-05-08 17:25:02 +03:30
, servCustomer servCus , AddOrCustomerValidation addorupdateCustomerValidation )
2024-05-05 18:15:37 +03:30
{
2024-05-08 17:25:02 +03:30
_addorupdateCustomerValidation = addorupdateCustomerValidation ;
2024-05-05 18:15:37 +03:30
_checkPermission = checkPermission ;
_servUser = servUser ;
_servCus = servCus ;
}
[HttpPost("GetAll")]
public async Task < ActionResult < PagingDto < RCustomer > > > GetAll ( ItemSerchGetCustomer itemSerch )
{
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
2024-05-08 17:25:02 +03:30
if ( ! await _checkPermission . AllowSYSGetCustomer ( Convert . ToInt32 ( UserID ) , user . RolUsers . First ( ) . CompanyID ) ) return Forbid ( "شما دسترسی به خواندن اطلاعات مشتری را نداربد" ) ;
2024-05-05 18:15:37 +03:30
return Ok ( await _servCus . GetCustomers ( user . RolUsers . First ( ) . CompanyID , itemSerch ) ) ;
}
2024-05-07 17:49:02 +03:30
[HttpPost("Add")]
public async Task < ActionResult < bool > > Add ( RCustomer item )
{
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
2024-05-08 17:25:02 +03:30
var resultValidationmodel = await _addorupdateCustomerValidation . ValidateAsync ( Tuple . Create ( user . RolUsers . First ( ) . CompanyID , item , eActionValidation . add ) ) ;
2024-05-07 17:49:02 +03:30
if ( ! resultValidationmodel . IsValid )
return BadRequest ( resultValidationmodel . Errors . Select ( s = > s . ErrorMessage ) . ToList ( ) ) ;
2024-05-08 17:25:02 +03:30
return Ok ( await _servCus . AddOrUpdateCustomer ( new Data . Models . Customer
2024-05-07 17:49:02 +03:30
{
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
2024-05-08 17:25:02 +03:30
} ) ) ;
}
[HttpPut("Update")]
public async Task < ActionResult < bool > > Update ( RCustomer item )
{
//-----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 ( ) ) ;
//-----Get Cus
var cus = await _servCus . GetCustomerByCustomerID ( item . ID . Value , user . RolUsers . First ( ) . CompanyID ) ;
if ( cus = = null )
return BadRequest ( new List < string > { "Cus 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 ;
//----Update and sendResult
return Ok ( await _servCus . AddOrUpdateCustomer ( cus ) ) ;
}
[HttpDelete("Delete/{ID}")]
public async Task < ActionResult < bool > > Delete ( int ID )
{
//-----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 ( ) ;
//----Update and sendResult
return Ok ( await _servCus . DeleteCustomer ( cus ) ) ;
2024-05-07 17:49:02 +03:30
}
2024-05-05 18:15:37 +03:30
}
}