This commit is contained in:
mmrbnjd
2024-06-18 13:59:32 +03:30
parent 28424214ed
commit 692aa30afe
10 changed files with 241 additions and 120 deletions

View File

@@ -33,6 +33,25 @@ namespace Back.Controllers
// if (!await _checkPermission.AllowSYSGetCOD(Convert.ToInt32(UserID), user.RolUsers.First().CompanyID)) return Forbid("شما دسترسی به خواندن اطلاعات کالا را نداربد");
return Ok(await _servCOD.GetCODs(user.RolUsers.First().CompanyID, itemSerch));
}
[HttpGet("GetCod/{ID}")]
public async Task<ActionResult<RCOD>> GetCod(int ID)
{
var claim = HttpContext.User.Claims.First(c => c.Type == "UserID");
var UserID = claim.Value;
var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
var cod = await _servCOD.GetCodByCodID(ID, user.RolUsers.First().CompanyID);
return Ok(new RCOD
{
ID = cod.ID,
TaxID = cod.ItemTaxID,
Title = cod.Title,
Unit = cod.CODUnit.Title,
UnitID = cod.UnitID,
TaxRate = cod.TaxRate
});
}
[HttpGet("GetAllForidName")]
public async Task<ActionResult<List<CODIdName<int>>>> GetAllForidName()
{

View File

@@ -78,7 +78,8 @@ namespace Back.Services
public async Task<CODItem?> GetCodByCodID(int CodID, int CompanyID)
{
return await _CODRepo
.Get(w => w.ID == CodID && w.CompanyID == CompanyID && !w.IsDeleted).FirstOrDefaultAsync();
.Get(w => w.ID == CodID && w.CompanyID == CompanyID && !w.IsDeleted)
.Include(inc=>inc.CODUnit).FirstOrDefaultAsync();
}
public async Task<bool> ExistCodByCompanyID(int CodID, int CompanyID)
{

View File

@@ -5,6 +5,7 @@ using Back.Data.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Shared.DTOs;
using System.Data.SqlTypes;
using System.IdentityModel.Tokens.Jwt;
using System.Reflection;
using System.Security.Claims;
@@ -20,12 +21,20 @@ namespace Back.Services
private readonly IAsyncRepository<User> _RepoUser;
private readonly RepositoryBase<Company> _RepoCompany;
private readonly IAsyncRepository<PermissionPeriod> _RepoPermissionPeriod;
private readonly IAsyncRepository<Customer> _RepoCus;
private readonly IAsyncRepository<Invoice> _RepoInvoice;
private readonly IAsyncRepository<CODItem> _RepoCODItem;
public servUser(IConfiguration configuration
, servNotification servNotification
, IAsyncRepository<User> RepoUser
, IAsyncRepository<PermissionPeriod> RepoPermissionPeriod
, RepositoryBase<Company> repoCompany)
, RepositoryBase<Company> repoCompany, IAsyncRepository<Customer> RepoCus
, IAsyncRepository<Invoice> RepoInvoice, IAsyncRepository<CODItem> RepoCODItem)
{
_RepoCus = RepoCus;
_RepoInvoice = RepoInvoice;
_RepoCODItem = RepoCODItem;
_configuration = configuration;
_servNotification = servNotification;
_RepoUser = RepoUser;
@@ -212,7 +221,7 @@ namespace Back.Services
}
request.LastLoginDate = _RepoUser.Get(w => w.ID == UserID).Select(s => s.DateLastLogin).FirstOrDefault();
if (!string.IsNullOrEmpty(request.LastLoginDate))
request.LastLoginDate.ShamciToFormatShamci();
request.LastLoginDate = $"{request.LastLoginDate.Substring(8, 2)}:{request.LastLoginDate.Substring(10, 2)} {request.LastLoginDate.Substring(0, 4)}/{request.LastLoginDate.Substring(4, 2)}/{request.LastLoginDate.Substring(6, 2)}";
//if (user.Mobile == user.Username)
@@ -238,6 +247,50 @@ namespace Back.Services
Path = s.Path,
ViewSize = s.ViewSize
}).ToList();
LastActivitySevice lastInvoice = new LastActivitySevice();
#region LastActivitySevice
//invoice
var lastinv = await _RepoInvoice.Get(w => w.CompanyID == user.RolUsers.First().CompanyID && !w.IsDeleted)
.Include(inc=>inc.Customer)
.Select(s=>new LastActivitySevice
{
ID = s.ID,
Date=s.InvoiceDate.ShamciToFormatShamci(),
Name=s.Customer.FullName,
PermissionID=3,
TypeTitle=s.invoiceType.GetEnumDisplayName()
})
.OrderByDescending(o => o.ID).FirstOrDefaultAsync();
if (lastinv!=null)
request.lastActivitiesSevices.Add(lastinv);
//cod
var lastcod = await _RepoCODItem.Get(w => w.CompanyID == user.RolUsers.First().CompanyID && !w.IsDeleted)
.Select(s => new LastActivitySevice
{
ID = s.ID,
Date = "",
Name = s.Title,
PermissionID = 4,
TypeTitle = ""
})
.OrderByDescending(o => o.ID).FirstOrDefaultAsync();
if (lastcod != null)
request.lastActivitiesSevices.Add(lastcod);
//cus
var lastcus = await _RepoCus.Get(w => w.CompanyID == user.RolUsers.First().CompanyID && !w.IsDeleted)
.Select(s => new LastActivitySevice
{
ID = s.ID,
Date = "",
Name = s.FullName,
PermissionID = 8,
TypeTitle = ""
})
.OrderByDescending(o => o.ID).FirstOrDefaultAsync();
if (lastcus != null)
request.lastActivitiesSevices.Add(lastcus);
#endregion
return request;
}
public async Task<User> UpdateUser(User user)

View File

@@ -13,9 +13,10 @@ namespace Shared.DTOs
{
public string Datenow { get { return DateTime.Now.ConvertMiladiToShamsiinFront(); } }
public string? LastLoginDate { get; set; }
public List<ServiceInDashBoardDTO> AlistofServices { get; set; }=new List<ServiceInDashBoardDTO>();
public List<ServiceInDashBoardDTO> AlistofServices { get; set; } = new List<ServiceInDashBoardDTO>();
public List<AlertDTO> Warning { get; set; } = new List<AlertDTO>();
public List<AlertDTO> Notifications { get; set; } = new List<AlertDTO>();
public List<LastActivitySevice> lastActivitiesSevices { get; set; }=new List<LastActivitySevice>();
}
public class ServiceInDashBoardDTO
{
@@ -26,4 +27,13 @@ namespace Shared.DTOs
public string Total { get; set; }
public int Remaining { get; set; }
}
public class LastActivitySevice
{
public int ID { get; set; }
public string Name { get; set; }
public string Date { get; set; }
public int PermissionID { get; set; }
public string? TypeTitle { get; set; }
}
}

View File

@@ -1,17 +1,19 @@
using Front.Services;
using Shared.DTOs;
using System.Net.Http.Json;
using System.Security.Cryptography;
namespace Front
{
public class Fixedvalues
{
public readonly HttpClientController _hc;
private List<ForCustomerSearch>? Cus=null;
private List<ForCustomerSearch>? Cus = null;
private List<IdName<int>>? Patterns = null;
private List<IdName<int>>? Units = null;
private List<CODIdName<int>>? Cods = null;
private CompanyDTO? InfoCompany = null;
public InvoiceDTO? invoice { get; set; }=null;
public InvoiceDTO? invoice { get; set; } = null;
private DashBoardDTO? dashBoard { get; set; } = null;
public Fixedvalues(HttpClientController hc)
{
@@ -19,16 +21,16 @@ namespace Front
}
public async Task<List<ForCustomerSearch>?> GetCustomers()
{
if (Cus == null)
if (Cus == null)
{
var request = await _hc.Get($"Customer/GetAllForidName");
if (request.IsSuccessStatusCode)
{
Cus= await request.Content.ReadFromJsonAsync<List<ForCustomerSearch>>();
Cus = await request.Content.ReadFromJsonAsync<List<ForCustomerSearch>>();
}
}
return Cus;
return Cus;
}
@@ -49,12 +51,12 @@ namespace Front
}
public async Task<List<IdName<int>>?> GetPatterns()
{
if (Patterns==null)
if (Patterns == null)
{
var request = await _hc.Get($"Invoice/GetPatterns");
if (request.IsSuccessStatusCode)
{
Patterns =await request.Content.ReadFromJsonAsync<List<IdName<int>>>();
Patterns = await request.Content.ReadFromJsonAsync<List<IdName<int>>>();
}
}
@@ -89,5 +91,19 @@ namespace Front
return dashBoard;
}
public async Task<List<IdName<int>>> GetUnits()
{
if (Units == null)
{
var rsp = await _hc.Get("COD/GetUnits");
if (rsp.IsSuccessStatusCode)
{
Units = await rsp.Content.ReadFromJsonAsync<List<IdName<int>>>();
}
}
return Units;
}
}
}

View File

@@ -0,0 +1,109 @@
@using Front.Services
@using Shared.DTOs
@inject HttpClientController hc;
@inject Fixedvalues fv;
<Modal @ref="cusmodal" />
<Modal @ref="codmodal" />
<div class="col-md-6 col-lg-4 col-xl-4 order-0 mb-4">
<div class="card h-51">
<div class="card-header d-flex align-items-center justify-content-between pb-0">
<div class="card-title mb-0">
<h5 class="m-0 me-2">آخرین</h5>
</div>
</div>
<div class="card-body">
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="d-flex flex-column align-items-center gap-1">
</div>
<div id="orderStatisticsChart"></div>
</div>
<ul class="p-0 m-0">
@if (dashBoard!=null && dashBoard.lastActivitiesSevices.Any(w => w.PermissionID == 3))
{
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0"><img src="assets/img/icons/unicons/cc-success.png" alt="User" class="rounded"></div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
@{int invoid = Convert.ToInt32(dashBoard?.lastActivitiesSevices.Where(w => w.PermissionID == 3).Select(s => s.ID).First());}
<button @onclick="()=>InvoiceItem(invoid)" type="button" class="btn btn-link">صورتحساب</button>
<small>مربوط به مشتری @dashBoard?.lastActivitiesSevices.Where(w => w.PermissionID == 3).Select(s => s.Name).First() در وضعیت @dashBoard.lastActivitiesSevices.Where(w => w.PermissionID == 3).Select(s => s.TypeTitle).First()</small>
</div>
</div>
</li>
}
@if (dashBoard != null && dashBoard.lastActivitiesSevices.Any(w => w.PermissionID == 4))
{
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0"><img src="assets/img/icons/unicons/wallet-info.png" alt="chart success" class="rounded"></div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
@{
int codid = Convert.ToInt32(dashBoard?.lastActivitiesSevices.Where(w => w.PermissionID == 4).Select(s => s.ID).First());
}
<button @onclick="()=>CODItem(codid)" type="button" class="btn btn-link">کالا</button>
<small>با عنوان @dashBoard?.lastActivitiesSevices.Where(w => w.PermissionID == 4).Select(s => s.Name).First()</small>
</div>
</div>
</li>
}
@if (dashBoard != null && dashBoard.lastActivitiesSevices.Any(w => w.PermissionID == 8))
{
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0"><img src="assets/img/icons/unicons/cc-primary.png" alt="chart success" class="rounded"></div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
@{ int cusid = Convert.ToInt32(dashBoard?.lastActivitiesSevices.Where(w => w.PermissionID == 8).Select(s => s.ID).First());}
<button @onclick="()=>CustomerItem(cusid)" type="button" class="btn btn-link">مشتری</button>
<small>با نام @dashBoard?.lastActivitiesSevices.Where(w => w.PermissionID == 8).Select(s => s.Name).First()</small>
</div>
</div>
</li>
}
</ul>
</div>
</div>
</div>
@code {
[Parameter] public DashBoardDTO? dashBoard { get; set; }
private Modal cusmodal = default!;
private Modal codmodal = default!;
}
@functions{
public async Task CallBackCustomerItem(ActionInResultComponent result)
{
}
public async Task InvoiceItem(int ID) => hc._nav.NavigateTo($"InvoiceDetails/{ID}");
public async Task CustomerItem(int ID)
{
var rsp = await hc.Get($"Customer/GetCustomer/{ID}");
if (rsp.IsSuccessStatusCode)
{
var cus = await rsp.Content.ReadFromJsonAsync<RCustomer>();
var parameters = new Dictionary<string, object>();
parameters.Add("Cus", cus);
parameters.Add("OnMultipleOfThree", EventCallback.Factory.Create<ActionInResultComponent>(this, CallBackCustomerItem));
await cusmodal.ShowAsync<CUSComponent.CustomerItem>(title: "ویرایش اطلاعات", parameters: parameters);
}
}
public async Task CallBackCodItem(ActionInResultComponent result){}
public async Task CODItem(int ID){
var rsp = await hc.Get($"Cod/GetCod/{ID}");
if (rsp.IsSuccessStatusCode)
{
var cod = await rsp.Content.ReadFromJsonAsync<RCOD>();
var parameters = new Dictionary<string, object>();
var Unitrequest = await fv.GetUnits();
parameters.Add("Cod", cod);
parameters.Add("Unitrequest", Unitrequest);
parameters.Add("OnMultipleOfThree", EventCallback.Factory.Create<ActionInResultComponent>(this, CallBackCodItem));
await codmodal.ShowAsync<CUSComponent.CodItem>(title: "ویرایش اطلاعات", parameters: parameters);
}
}
}

View File

@@ -72,16 +72,16 @@
vraArray = fv.invoice.items.Select(s => s.vra?.ToString("N0")).ToArray();
//How to activate
Stimulsoft.Base.StiLicense.Key =
"6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHn0s4gy0Fr5YoUZ9V00Y0igCSFQzwEqYBh/N77k" +
"4f0fWXTHW5rqeBNLkaurJDenJ9o97TyqHs9HfvINK18Uwzsc/bG01Rq+x3H3Rf+g7AY92gvWmp7VA2Ux" +
"a30Q97f61siWz2dE5kdBVcCnSFzC6awE74JzDcJMj8OuxplqB1CYcpoPcOjKy1PiATlC3UsBaLEXsok1" +
"xxtRMQ283r282tkh8XQitsxtTczAJBxijuJNfziYhci2jResWXK51ygOOEbVAxmpflujkJ8oEVHkOA/C" +
"jX6bGx05pNZ6oSIu9H8deF94MyqIwcdeirCe60GbIQByQtLimfxbIZnO35X3fs/94av0ODfELqrQEpLr" +
"pU6FNeHttvlMc5UVrT4K+8lPbqR8Hq0PFWmFrbVIYSi7tAVFMMe2D1C59NWyLu3AkrD3No7YhLVh7LV0" +
"Tttr/8FrcZ8xirBPcMZCIGrRIesrHxOsZH2V8t/t0GXCnLLAWX+TNvdNXkB8cF2y9ZXf1enI064yE5dw" +
"Ms2fQ0yOUG/xornE";
// //How to activate
// Stimulsoft.Base.StiLicense.Key =
// "6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHn0s4gy0Fr5YoUZ9V00Y0igCSFQzwEqYBh/N77k" +
// "4f0fWXTHW5rqeBNLkaurJDenJ9o97TyqHs9HfvINK18Uwzsc/bG01Rq+x3H3Rf+g7AY92gvWmp7VA2Ux" +
// "a30Q97f61siWz2dE5kdBVcCnSFzC6awE74JzDcJMj8OuxplqB1CYcpoPcOjKy1PiATlC3UsBaLEXsok1" +
// "xxtRMQ283r282tkh8XQitsxtTczAJBxijuJNfziYhci2jResWXK51ygOOEbVAxmpflujkJ8oEVHkOA/C" +
// "jX6bGx05pNZ6oSIu9H8deF94MyqIwcdeirCe60GbIQByQtLimfxbIZnO35X3fs/94av0ODfELqrQEpLr" +
// "pU6FNeHttvlMc5UVrT4K+8lPbqR8Hq0PFWmFrbVIYSi7tAVFMMe2D1C59NWyLu3AkrD3No7YhLVh7LV0" +
// "Tttr/8FrcZ8xirBPcMZCIGrRIesrHxOsZH2V8t/t0GXCnLLAWX+TNvdNXkB8cF2y9ZXf1enI064yE5dw" +
// "Ms2fQ0yOUG/xornE";
//var licenseStream = await Http.GetStreamAsync("Secret/license.key");
//Stimulsoft.Base.StiLicense.LoadFromStream(licenseStream);

View File

@@ -4,6 +4,7 @@
@using Front.CUSComponent
@using Shared.DTOs.Serch
@inject HttpClientController hc;
@inject Fixedvalues fv;
<PageTitle>کالا</PageTitle>
<Modal @ref="modal" />
@@ -125,11 +126,9 @@
protected override async Task OnInitializedAsync()
{
var rsp = await hc.Get("COD/GetUnits");
if (rsp.IsSuccessStatusCode)
{
Unitrequest = await rsp.Content.ReadFromJsonAsync<List<IdName<int>>>();
}
Unitrequest =await fv.GetUnits();
await base.OnInitializedAsync();
}
protected override async Task OnParametersSetAsync()

View File

@@ -331,9 +331,9 @@
<Button class="mt-3" Color="ButtonColor.Danger" @onclick="ShowConfirmationDeleteAsync" Type="ButtonType.Button">
حذف
</Button>
<Button class="mt-3" Color="ButtonColor.Primary" @onclick="ShowReport" Type="ButtonType.Button">
@* <Button class="mt-3" Color="ButtonColor.Primary" @onclick="ShowReport" Type="ButtonType.Button">
چاپ
</Button>
</Button> *@
}
}

View File

@@ -38,7 +38,7 @@
<div class="card-body">
<div class="card-title d-flex align-items-start justify-content-between">
<div class="avatar flex-shrink-0">
<img src="assets/img/icons/unicons/chart-success.png" alt="chart success" class="rounded">
<img src="assets/img/icons/unicons/cc-success.png" alt="User" class="rounded">
</div>
<div class="dropdown">
<button class="btn p-0" type="button" id="cardOpt3" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -387,93 +387,7 @@
</div>
<div class="row">
<!-- Order Statistics -->
<div class="col-md-6 col-lg-4 col-xl-4 order-0 mb-4">
<div class="card h-100">
<div class="card-header d-flex align-items-center justify-content-between pb-0">
<div class="card-title mb-0">
<h5 class="m-0 me-2">آمار سفارش</h5>
<small class="text-muted">42.82هزار کل فروش</small>
</div>
<div class="dropdown">
<button class="btn p-0" type="button" id="orederStatistics" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="bx bx-dots-vertical-rounded"></i>
</button>
<div class="dropdown-menu dropdown-menu-start new-style-17" aria-labelledby="orederStatistics">
<a class="dropdown-item" href="javascript:void(0);">انتخاب همه</a>
<a class="dropdown-item" href="javascript:void(0);">تازه کردن</a>
<a class="dropdown-item" href="javascript:void(0);">اشتراک</a>
</div>
</div>
</div>
<div class="card-body">
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="d-flex flex-column align-items-center gap-1">
<h2 class="mb-2">8,258</h2>
<span>کل سفارشات</span>
</div>
<div id="orderStatisticsChart"></div>
</div>
<ul class="p-0 m-0">
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<span class="avatar-initial rounded bg-label-primary"><i class='bx bx-mobile-alt'></i></span>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<h6 class="mb-0">الکترونیک</h6>
<small class="text-muted">موبایل، هدفون، تلویزیون</small>
</div>
<div class="user-progress">
<small class="fw-semibold">82.5هزار</small>
</div>
</div>
</li>
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<span class="avatar-initial rounded bg-label-success"><i class='bx bx-closet'></i></span>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<h6 class="mb-0">فشن</h6>
<small class="text-muted">تی شرت، شلوار جین، کفش</small>
</div>
<div class="user-progress">
<small class="fw-semibold">23.8هزار</small>
</div>
</div>
</li>
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<span class="avatar-initial rounded bg-label-info"><i class='bx bx-home-alt'></i></span>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<h6 class="mb-0">دکور</h6>
<small class="text-muted">هنرهای زیبا، غذاخوری</small>
</div>
<div class="user-progress">
<small class="fw-semibold">849هزار</small>
</div>
</div>
</li>
<li class="d-flex">
<div class="avatar flex-shrink-0 me-3">
<span class="avatar-initial rounded bg-label-secondary"><i class='bx bx-football'></i></span>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<h6 class="mb-0">ورزشی</h6>
<small class="text-muted">فوتبال، کیت کریکت</small>
</div>
<div class="user-progress">
<small class="fw-semibold">99</small>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
<LastActivityServices dashBoard="dashBoard" />
<!--/ Order Statistics -->
<!-- Expense Overview -->
<div class="col-md-6 col-lg-4 order-1 mb-4">