setting
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
using Back.Services;
|
using Back.Data.Models;
|
||||||
|
using Back.Services;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.AspNetCore.Http.HttpResults;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Shared.DTOs;
|
using Shared.DTOs;
|
||||||
|
|
||||||
@@ -13,17 +15,20 @@ namespace Back.Controllers
|
|||||||
{
|
{
|
||||||
private readonly servCompany _servCompany;
|
private readonly servCompany _servCompany;
|
||||||
private readonly servUser _servUser;
|
private readonly servUser _servUser;
|
||||||
public CompanyController(servCompany servCompany, servUser servUser)
|
private readonly servTaxPayer _servTaxPayer;
|
||||||
|
public CompanyController(servCompany servCompany, servUser servUser, servTaxPayer servTaxPayer)
|
||||||
{
|
{
|
||||||
_servUser = servUser;
|
_servUser = servUser;
|
||||||
_servCompany = servCompany;
|
_servCompany = servCompany;
|
||||||
|
_servTaxPayer = servTaxPayer;
|
||||||
}
|
}
|
||||||
[HttpPost("ChangeLogo")]
|
[HttpPost("ChangeLogo")]
|
||||||
public async Task<ActionResult<bool>> ChangeLogo(byte[] logo)
|
public async Task<ActionResult<bool>> ChangeLogo(byte[] logo)
|
||||||
{
|
{
|
||||||
if (logo == null)
|
if (logo == null)
|
||||||
return BadRequest();
|
return BadRequest();
|
||||||
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 result = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
|
var result = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
|
||||||
var company = result?.RolUsers.First().Company;
|
var company = result?.RolUsers.First().Company;
|
||||||
@@ -44,5 +49,49 @@ namespace Back.Controllers
|
|||||||
await _servUser.UpdateUser(user);
|
await _servUser.UpdateUser(user);
|
||||||
return Ok(await _servCompany.AddORUpdateCompanyBoolResult(company));
|
return Ok(await _servCompany.AddORUpdateCompanyBoolResult(company));
|
||||||
}
|
}
|
||||||
|
[HttpGet("TaxPayerInfo")]
|
||||||
|
public async Task<ActionResult<TaxPayerInfoDto>> TaxPayerInfo()
|
||||||
|
{
|
||||||
|
var claim = HttpContext.User.Claims.First(c => c.Type == "UserID");
|
||||||
|
var UserID = claim.Value;
|
||||||
|
var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
|
||||||
|
var company = user?.RolUsers.First().Company;
|
||||||
|
return Ok(new TaxPayerInfoDto
|
||||||
|
{
|
||||||
|
EconomicCode = company.EconomicCode,
|
||||||
|
PrivateKey = company.PrivateKey ,
|
||||||
|
UniqeMemory = company.UniqeMemory ,
|
||||||
|
BranchID=company.BranchID,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
[HttpPut("ChangeTaxPayerInfo")]
|
||||||
|
public async Task<ActionResult<bool>> ChangeTaxPayerInfo(TaxPayerInfoDto model)
|
||||||
|
{
|
||||||
|
var claim = HttpContext.User.Claims.First(c => c.Type == "UserID");
|
||||||
|
var UserID = claim.Value;
|
||||||
|
var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(model.BranchID) && (model.BranchID.Length > 10 || !int.TryParse(model.BranchID, out int a)))
|
||||||
|
return BadRequest(new List<string> {"مقدار کد شعبه صحیح نمی باشد" });
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(model.UniqeMemory) && (model.UniqeMemory.Length !=6 ))
|
||||||
|
return BadRequest(new List<string> { "مقدار حافظه مالیاتی صحیح نمی باشد" });
|
||||||
|
|
||||||
|
var company = user?.RolUsers.First().Company;
|
||||||
|
if (await _servTaxPayer.ExistSuccessfulorSendorpendingInvoiceinCompanyID(company.ID) &&
|
||||||
|
(model.EconomicCode != company.EconomicCode || model.PrivateKey != company.PrivateKey || model.UniqeMemory != company.UniqeMemory))
|
||||||
|
return BadRequest(new List<string> { "به دلیل اینکه صورتحسابی با مشخصات کلیدی شما به سازمان مالیات ارسال شده امکان تغییر این موارد را ندارید" +
|
||||||
|
'\n' + "فیلدهای کلیدی شامل (کداقتصادی،شناسه حافظه مالیاتی،کلید خصوصی)" });
|
||||||
|
|
||||||
|
if (await _servTaxPayer.CheckingTheCompanyKeyInformation(company.ID, model.UniqeMemory, model.PrivateKey, model.EconomicCode))
|
||||||
|
return BadRequest(new List<string> { "فیلدهای کلیدی شامل (کداقتصادی،شناسه حافظه مالیاتی،کلید خصوصی)" + " برای شرکت دیگری ثبت شده است" });
|
||||||
|
|
||||||
|
|
||||||
|
company.EconomicCode = model.EconomicCode;
|
||||||
|
company.PrivateKey = model.PrivateKey;
|
||||||
|
company.UniqeMemory = model.UniqeMemory;
|
||||||
|
company.BranchID = model.BranchID;
|
||||||
|
return Ok(await _servCompany.AddORUpdateCompanyBoolResult(company));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -36,6 +36,7 @@ builder.Services.AddScoped<servNotification>();
|
|||||||
builder.Services.AddScoped<servPermission>();
|
builder.Services.AddScoped<servPermission>();
|
||||||
builder.Services.AddScoped<servSendMsg>();
|
builder.Services.AddScoped<servSendMsg>();
|
||||||
builder.Services.AddScoped<servUser>();
|
builder.Services.AddScoped<servUser>();
|
||||||
|
builder.Services.AddScoped<servTaxPayer>();
|
||||||
builder.Services.AddScoped<CompanyRegistrationValidation>();
|
builder.Services.AddScoped<CompanyRegistrationValidation>();
|
||||||
builder.Services.AddScoped(c => new mpNuget.RestClient("09119660045", "C54S2"));
|
builder.Services.AddScoped(c => new mpNuget.RestClient("09119660045", "C54S2"));
|
||||||
|
|
||||||
|
27
Back/Services/servTaxPayer.cs
Normal file
27
Back/Services/servTaxPayer.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
using Back.Common.Enums;
|
||||||
|
using Back.Data.Contracts;
|
||||||
|
using Back.Data.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace Back.Services
|
||||||
|
{
|
||||||
|
public class servTaxPayer
|
||||||
|
{
|
||||||
|
private readonly IAsyncRepository<SentTax> _repoSentTax;
|
||||||
|
public servTaxPayer(IAsyncRepository<SentTax> repoSentTax)
|
||||||
|
{
|
||||||
|
_repoSentTax = repoSentTax;
|
||||||
|
}
|
||||||
|
public async Task<bool> ExistSuccessfulorSendorpendingInvoiceinCompanyID(int CompanyID)
|
||||||
|
{
|
||||||
|
return await _repoSentTax.Get(w => w.invoice.CompanyID == CompanyID && (w.SentStatus == SentStatus.Successful || w.SentStatus == SentStatus.Send || w.SentStatus == SentStatus.pending)).AnyAsync();
|
||||||
|
}
|
||||||
|
public async Task<bool> CheckingTheCompanyKeyInformation(int CompanyID, string UniqeMemory, string PrivateKey, string EconomicCode)
|
||||||
|
{
|
||||||
|
return await _repoSentTax.Get(w => (w.invoice.company.UniqeMemory == UniqeMemory || w.invoice.company.PrivateKey == PrivateKey || w.invoice.company.EconomicCode == EconomicCode)
|
||||||
|
&& (w.SentStatus == SentStatus.Successful || w.SentStatus == SentStatus.Send || w.SentStatus == SentStatus.pending)
|
||||||
|
&& w.invoice.CompanyID != CompanyID).AnyAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
16
Shared/DTOs/TaxPayerInfoDto.cs
Normal file
16
Shared/DTOs/TaxPayerInfoDto.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Shared.DTOs
|
||||||
|
{
|
||||||
|
public class TaxPayerInfoDto
|
||||||
|
{
|
||||||
|
public string? EconomicCode { get; set; }
|
||||||
|
public string? UniqeMemory { get; set; }
|
||||||
|
public string? PrivateKey { get; set; }
|
||||||
|
public string? BranchID { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@@ -40,19 +40,19 @@
|
|||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li class="menu-item @cssActionItem[5]" @onclick="() => onClickcssActionItem(5)">
|
<li class="menu-item @cssActionItem[5]" @onclick="() => onClickcssActionItem(5)">
|
||||||
<NavLink href="#" target="_blank" class="menu-link">
|
<NavLink href="#" class="menu-link">
|
||||||
<i class="menu-icon tf-icons bx bx-support"></i>
|
<i class="menu-icon tf-icons bx bx-support"></i>
|
||||||
<div>پشتیبانی</div>
|
<div>پشتیبانی</div>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li class="menu-item @cssActionItem[6]" @onclick="() => onClickcssActionItem(6)">
|
<li class="menu-item @cssActionItem[6]" @onclick="() => onClickcssActionItem(6)">
|
||||||
<NavLink href="#" target="_blank" class="menu-link">
|
<NavLink href="#" class="menu-link">
|
||||||
<i class="menu-icon tf-icons bx bx-copy"></i>
|
<i class="menu-icon tf-icons bx bx-copy"></i>
|
||||||
<div >سفارشات</div>
|
<div >سفارشات</div>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li class="menu-item @cssActionItem[7]" @onclick="() => onClickcssActionItem(7)">
|
<li class="menu-item @cssActionItem[7]" @onclick="() => onClickcssActionItem(7)">
|
||||||
<NavLink href="#" target="_blank" class="menu-link">
|
<NavLink href="Setting" class="menu-link">
|
||||||
<i class="menu-icon tf-icons bx bx-file"></i>
|
<i class="menu-icon tf-icons bx bx-file"></i>
|
||||||
<div>تنظیمات</div>
|
<div>تنظیمات</div>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
|
134
TaxPayerFull/Pages/UserPanel/Setting.razor
Normal file
134
TaxPayerFull/Pages/UserPanel/Setting.razor
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
@page "/Setting"
|
||||||
|
@* @page "/Profile/{from}" *@
|
||||||
|
@using Front.Services
|
||||||
|
@using Shared.DTOs
|
||||||
|
@layout PanelLayout
|
||||||
|
@inject UserAuthenticationDTO userinfo
|
||||||
|
@inject HttpClientController _hc
|
||||||
|
@inject ILocalStorageService Storage;
|
||||||
|
<div class="container-xxl flex-grow-1 container-p-y">
|
||||||
|
<h4 class="fw-bold py-3 mb-4">
|
||||||
|
<span class="text-muted fw-light">متفرقه /</span> تنظیمات
|
||||||
|
</h4>
|
||||||
|
<div class="row">
|
||||||
|
<Alert hidden="@Hidealert" Color="@alertColor" Dismissable="false">
|
||||||
|
<Icon Name="@alertIconName" class="me-2"></Icon>
|
||||||
|
@alertMessage
|
||||||
|
</Alert>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="card mb-4">
|
||||||
|
<h5 class="card-header">مالیات</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
<EditForm Model="InfoModel" OnSubmit="Submit" FormName="TaxPayer">
|
||||||
|
<div class="row">
|
||||||
|
<div class="mb-3 col-md-6">
|
||||||
|
<label for="defaultFormControlInput" class="form-label">کد اقتصادی</label>
|
||||||
|
<InputText @bind-Value="@InfoModel.EconomicCode" style="text-align:center;" class="form-control" type="text" id="EconomicCode" />
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 col-md-6">
|
||||||
|
<label for="defaultFormControlInput" class="form-label">حافظه مالیاتی</label>
|
||||||
|
<InputText style="text-align:center;" @bind-Value="@InfoModel.UniqeMemory" class="form-control" type="text" id="UniqeMemory" />
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 col-md-6">
|
||||||
|
<label for="defaultFormControlInput" class="form-label">کلید خصوصی</label>
|
||||||
|
<InputText @bind-Value="@InfoModel.PrivateKey" style="text-align:center;" class="form-control" type="text" id="PrivateKey" />
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 col-md-6">
|
||||||
|
<label for="defaultFormControlInput" class="form-label">کد شعبه</label>
|
||||||
|
<InputText @bind-Value="@InfoModel.BranchID" style="text-align:center;" class="form-control" type="text" id="BaranchID" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-2">
|
||||||
|
<button type="submit" class="btn btn-primary">ارسال</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</EditForm>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
[SupplyParameterFromForm]
|
||||||
|
public TaxPayerInfoDto? InfoModel { get; set; }
|
||||||
|
|
||||||
|
// alert
|
||||||
|
AlertColor alertColor = AlertColor.Primary;
|
||||||
|
IconName alertIconName = IconName.CheckCircleFill;
|
||||||
|
bool Hidealert = true;
|
||||||
|
string alertMessage = "";
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
InfoModel ??= new();
|
||||||
|
var request = await _hc.Get($"Company/TaxPayerInfo");
|
||||||
|
if (request.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
InfoModel = await request.Content.ReadFromJsonAsync<TaxPayerInfoDto>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_hc._nav.NavigateTo("Panel");
|
||||||
|
|
||||||
|
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@functions{
|
||||||
|
private void ShowDangerAlert(string msg)
|
||||||
|
{
|
||||||
|
Hidealert = false;
|
||||||
|
alertColor = AlertColor.Danger;
|
||||||
|
alertIconName = IconName.ExclamationTriangleFill;
|
||||||
|
alertMessage = msg;
|
||||||
|
}
|
||||||
|
private void ShowSuccessAlert(string msg)
|
||||||
|
{
|
||||||
|
Hidealert = false;
|
||||||
|
alertColor = AlertColor.Success;
|
||||||
|
alertIconName = IconName.CheckCircleFill;
|
||||||
|
alertMessage = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async Task Submit()
|
||||||
|
{
|
||||||
|
|
||||||
|
var request = await _hc.Put($"Company/ChangeTaxPayerInfo", InfoModel);
|
||||||
|
if (request.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
if (await request.Content.ReadFromJsonAsync<bool>())
|
||||||
|
{
|
||||||
|
ShowSuccessAlert("تغییر نام با موفقیت انجام شد");
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowDangerAlert("خطایی در اجرای عملیات رخ داده");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var errors = await request.Content.ReadFromJsonAsync<List<string>>();
|
||||||
|
ShowDangerAlert(errors[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -14,7 +14,23 @@ builder.Services.AddBlazorBootstrap();
|
|||||||
builder.Services.AddScoped<ILocalStorageService, LocalStorageService>();
|
builder.Services.AddScoped<ILocalStorageService, LocalStorageService>();
|
||||||
builder.Services.AddScoped<localService>();
|
builder.Services.AddScoped<localService>();
|
||||||
builder.Services.AddScoped<HttpClientController>();
|
builder.Services.AddScoped<HttpClientController>();
|
||||||
builder.Services.AddScoped(sp => new UserAuthenticationDTO());
|
builder.Services.AddScoped(sp => new UserAuthenticationDTO()
|
||||||
|
{
|
||||||
|
Company = new CompanyAuthenticationDTO()
|
||||||
|
{
|
||||||
|
ID = 0,
|
||||||
|
IsAdmin = false,
|
||||||
|
Logo = "",
|
||||||
|
Name = ""
|
||||||
|
}
|
||||||
|
,
|
||||||
|
FullName = "",
|
||||||
|
Photo="",
|
||||||
|
Token="",
|
||||||
|
UserName = "",
|
||||||
|
enterDate =new DateTime(),
|
||||||
|
exitDate = new DateTime(),
|
||||||
|
}) ;
|
||||||
|
|
||||||
|
|
||||||
//builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("https://localhost:7075/api/") });
|
//builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("https://localhost:7075/api/") });
|
||||||
|
@@ -26,5 +26,12 @@ namespace Front.Services
|
|||||||
_nav.NavigateTo("/Sign-in/unon");
|
_nav.NavigateTo("/Sign-in/unon");
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
public async Task<HttpResponseMessage> Put<T>(string route, T mode)
|
||||||
|
{
|
||||||
|
var request = await _hc.PutAsJsonAsync(route, mode);
|
||||||
|
if (request.StatusCode == System.Net.HttpStatusCode.Unauthorized)
|
||||||
|
_nav.NavigateTo("/Sign-in/unon");
|
||||||
|
return request;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user