Compare commits

..

2 Commits

Author SHA1 Message Date
112369c2a5 add fridays to holiday in DashboardController 2025-09-21 11:30:46 +03:30
53eab1be67 feat: Add DashboardController for Admin 2025-09-21 11:03:06 +03:30
19 changed files with 115 additions and 96 deletions

View File

@@ -160,6 +160,4 @@ public class CreateCheckout
public TimeSpan TotalPaidLeave { get; set; }
public TimeSpan TotalSickLeave { get; set; }
public bool HasLeft { get; set; }
}

View File

@@ -57,12 +57,4 @@ public class ContractingPartyGetListViewModel
/// </summary>
public ActivationStatus Status { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
public string NationalId { get; set; }
public string RepresentativeName { get; set; }
}

View File

@@ -200,11 +200,11 @@ public class CheckoutApplication : ICheckoutApplication
.Select(x => new CheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList();
command.SalaryAidDeduction = salaryAids.Sum(x => x.Amount.MoneyToDouble());
var loanInstallments = _rollCallMandatoryRepository.LoanInstallmentForCheckout(command.EmployeeId,
command.WorkshopId, command.ContractStartGr, command.HasLeft ? DateTime.MaxValue : command.ContractEndGr)
.Select(x =>
new CheckoutLoanInstallment(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList();
command.WorkshopId, command.ContractStartGr, command.ContractEndGr)
.Select(x => new CheckoutLoanInstallment(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList();
command.InstallmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble());

View File

@@ -319,10 +319,7 @@ namespace CompanyManagment.Application
if (workshopId == 170)
{
var exceptionEmployeeIds = _customizeWorkshopGroupSettingsRepository
.GetEmployeeSettingsByGroupSettingsId(117)
.Select(x => x.EmployeeId)
.Where(x=> workshopLeftWorksInMonth.Select(l=>l.EmployeeId).Contains(x)).ToList();
var exceptionEmployeeIds = _customizeWorkshopGroupSettingsRepository.GetEmployeeSettingsByGroupSettingsId(117).Select(x => x.EmployeeId).ToList();
foreach (var employeesId in exceptionEmployeeIds)
{

View File

@@ -249,10 +249,7 @@ namespace CompanyManagment.Application
if (workshopId == 170)
{
var exceptionEmployeeIds = _customizeWorkshopGroupSettingsRepository
.GetEmployeeSettingsByGroupSettingsId(117)
.Select(x => x.EmployeeId)
.Where(x=> workshopLeftWorksInMonth.Select(l=>l.EmployeeId).Contains(x)).ToList();
var exceptionEmployeeIds = _customizeWorkshopGroupSettingsRepository.GetEmployeeSettingsByGroupSettingsId(117).Select(x => x.EmployeeId).ToList();
foreach (var employeesId in exceptionEmployeeIds)
{

View File

@@ -1345,12 +1345,8 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
public List<EmployeeDetailsForInsuranceListViewModel> GetEmployeeInsuranceDataForEdit(long insuranceListId, DateTime startDate, DateTime endDate)
{
var employeeDataQuery = _context.EmployeeInsurancListDataSet
var res = _context.EmployeeInsurancListDataSet
.Where(x => x.InsuranceListId == insuranceListId)
.Join(_context.InsuranceListSet,
employeeInsurancListData => employeeInsurancListData.InsuranceListId,
insuranceList => insuranceList.id,
(employeeInsurancListData, insuranceList) => new{employeeInsurancListData,insuranceList})
.Join(_context.LeftWorkInsuranceList
.Where(x =>
((x.LeftWorkDate != null && x.LeftWorkDate != DateTime.MinValue) &&
@@ -1361,18 +1357,14 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
(x.LeftWorkDate == null || x.LeftWorkDate == DateTime.MinValue))
.Where(x => x.StartWorkDate <= endDate)
.Include(x => x.Employee),
employeeData =>new { employeeData.employeeInsurancListData.EmployeeId,employeeData.insuranceList.WorkshopId},
leftwork => new {leftwork.EmployeeId,leftwork.WorkshopId},
(employeeData, leftwork)
=> new { employeeData = employeeData.employeeInsurancListData, leftwork });
var employeeJobs =employeeDataQuery.Join(_context.Jobs,
employeeData => employeeData.EmployeeId,
leftwork => leftwork.EmployeeId,
(employeeData, leftwork) => new { employeeData, leftwork })
.Join(_context.Jobs,
result => result.leftwork.JobId,
job => job.id,
(result, job) => new { result, job });
var res =employeeJobs.GroupJoin(_context.InsuranceEmployeeInformationSet.AsSplitQuery(),
(result, job) => new { result, job })
.GroupJoin(_context.InsuranceEmployeeInformationSet.AsSplitQuery(),
allResult => allResult.result.employeeData.EmployeeId,
employeeInfo => employeeInfo.EmployeeId,
(allResult, employeeInfo) => new

View File

@@ -35,11 +35,9 @@ public class LoanRepository : RepositoryBase<long, Loan>, ILoanRepository
var startDate = loan.LoanInstallments.MinBy(x => x.InstallmentDate).InstallmentDate;
var endDate = loan.LoanInstallments.MaxBy(x => x.InstallmentDate).InstallmentDate;
var pc = new PersianCalendar();
var checkouts = (await _companyContext.CheckoutSet
.Where(x => x.WorkshopId == loan.WorkshopId && x.EmployeeId == loan.EmployeeId &&
startDate <= x.ContractEnd && endDate >= x.ContractEnd).AsNoTracking()
.SelectMany(x => x.LoanInstallments).ToListAsync());
var customizeCheckouts =await _companyContext.CustomizeCheckouts.Where(x => x.WorkshopId == loan.WorkshopId && x.EmployeeId == loan.EmployeeId &&
x.ContractStart <= endDate && x.ContractEnd >= startDate).Select(x=> new {x.MonthInt, x.YearInt}).ToListAsync();
var result = new LoanDetailsViewModel()
{
@@ -53,7 +51,7 @@ public class LoanRepository : RepositoryBase<long, Loan>, ILoanRepository
Id = x.Id,
InstallmentAmount = x.AmountForMonth.ToMoney(),
InstallmentDate = x.InstallmentDate.ToFarsi(),
IsPaid = checkouts.Any(c => c.EntityId == x.Id),
IsPaid = customizeCheckouts.Any(c => c.MonthInt.ToString() == x.Month && c.YearInt.ToString() == x.Year)
}).ToList()
};

View File

@@ -567,11 +567,7 @@ public class PersonalContractingPartyRepository : RepositoryBase<long, PersonalC
IsBlock = x.contractingParty.IsBlock == "true",
HasInstitutionContract = x.institution.Any(i => i.IsActiveString == "true"),
NationalIdOrNationalCode = x.contractingParty.IsLegal == "حقیقی" ? x.contractingParty.Nationalcode : x.contractingParty.NationalId,
Status = x.contractingParty.IsActiveString == "true" ? ActivationStatus.Active : ActivationStatus.DeActive,
Address = x.contractingParty.Address,
NationalId = x.contractingParty.NationalId,
PhoneNumber = x.contractingParty.Phone,
RepresentativeName = x.contractingParty.RepresentativeFullName
Status = x.contractingParty.IsActiveString == "true" ? ActivationStatus.Active : ActivationStatus.DeActive
}).ToListAsync();
return result;
}

View File

@@ -29,6 +29,12 @@ public class ContractingPartyController : AdminBaseController
Console.WriteLine(watch.Elapsed);
return result.ToList();
}
[HttpGet("t/{name}")]
public async Task<List<string>> TestApi(string name)
{
var res = _contractingPartyApplication.SearchByName(name).Where(x=>x.Contains(name)).ToList();
return res;
}
/// <summary>
/// جزئیات طرف حساب حقیقی

View File

@@ -0,0 +1,75 @@
using _0_Framework.Application;
using _0_Framework.Application.Sms;
using AccountManagement.Application.Contracts.Task;
using AccountManagement.Application.Contracts.Ticket;
using CompanyManagment.App.Contracts.ClientDashboard;
using CompanyManagment.App.Contracts.HolidayItem;
using Microsoft.AspNetCore.Mvc;
using PersianTools.Core;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Admin.Controllers;
public class DashboardController : AdminBaseController
{
private readonly ISmsService _smsService;
private readonly IHolidayItemApplication _holidayItemApplication;
private readonly ITaskApplication _taskApplication;
private readonly ITicketApplication _ticketApplication;
private long UserId;
public DashboardController(ISmsService smsService, IHolidayItemApplication holidayItemApplication, ITaskApplication taskApplication,IAuthHelper authHelper, ITicketApplication ticketApplication)
{
_smsService = smsService;
_holidayItemApplication = holidayItemApplication;
_taskApplication = taskApplication;
_ticketApplication = ticketApplication;
UserId = authHelper.CurrentAccountId();
}
[HttpGet]
public async Task<ActionResult<AdminDashboardViewModel>> Index()
{
var calenderList = new List<CalenderViewModel>();
var todayGr = DateTime.Today;
var todayFa = todayGr.ToFarsi();
var todayPersian = new PersianDateTime(
int.Parse(todayFa.Substring(0, 4)),
int.Parse(todayFa.Substring(5, 2)),
int.Parse(todayFa.Substring(8, 2))
);
var startDate =new PersianDateTime(todayGr.AddDays(-3));
var endDate =new PersianDateTime(todayGr.AddDays(3));
for (var day = startDate; day <= endDate; day = day.AddDays(1))
{
var calenderNewItem = new CalenderViewModel
{
DayNumber = day.ToString("dd"),
IsToday = day.DateTime == todayGr,
DayOfWeek = day.DayOfWeek,
Holiday = _holidayItemApplication.IsHoliday(day.ToGregorianDateTime()) || day.DayOfWeek== "جمعه"
};
calenderList.Add(calenderNewItem);
}
var taskCount = await _taskApplication.RequestedAndOverdueTasksCount(UserId);
var ticketCount = _ticketApplication.GetAdminTicketsCount();
return new AdminDashboardViewModel(calenderList, taskCount, ticketCount);
}
[HttpGet("sms-remaining")]
public async Task<ActionResult<SmsRemainingResult>> OnGetSmsRemaining()
{
var result = (int)await _smsService.GetCreditAmount();
return new SmsRemainingResult(result);
}
}
public record SmsRemainingResult(int Data);
public record AdminDashboardViewModel(List<CalenderViewModel> Calender, int TaskCount, int TicketCount);

View File

@@ -230,12 +230,9 @@
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10327" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تب امور مالیاتی </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10328" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تب طرح طبقه بندی </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10330" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تب تعیین سطح دسترسی </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10328" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تب طرح طبقه بندی </span> </label>
</div>
<!--پایان مودال-->
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10320" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> محاسبه مزایای پایان کار </span> </label>

View File

@@ -230,12 +230,9 @@
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10327" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تب امور مالیاتی </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10328" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تب طرح طبقه بندی </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10330" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تب تعیین سطح دسترسی </span> </label>
</div>
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10328" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> تب طرح طبقه بندی </span> </label>
</div>
<!--پایان مودال-->
<div class="child-check level3">
<label class="btn btn-inverse waves-effect waves-light m-b-5 children"><input type="checkbox" disabled="disabled" value="10320" class="check-btn"> &nbsp;<span style="bottom: 2px;position: relative"> محاسبه مزایای پایان کار </span> </label>

View File

@@ -1076,8 +1076,7 @@ public class IndexModel : PageModel
// ساعت موظفی پرسنل برای این ماه
EmployeeMandatoryHours = mandatoryCompute.EmployeeMandatoryHours,
HasInsuranceChekoutOverTime = workshop.InsuranceCheckoutOvertime,
HasLeft = separation.HasLeft
HasInsuranceChekoutOverTime = workshop.InsuranceCheckoutOvertime
};
_checkoutApplication.Create(command);

View File

@@ -299,23 +299,10 @@
</div>
</div>
</div>
<div class="row" id="formPermissionAccount" style="display: none">
@if (Model.Command.PermissionIds != null && Model.Command.PermissionIds.Contains(10330))
{
<partial name="_CreateForms/FormPermissionAccount" model="Model.Command"/>
}
else
{
<div class="flex-box w-100">
<h4 style="margin: auto; margin-top: 10%;" class="text-danger">
شما مجوز دسترسی به این بخش را ندارید.
</h4>
</div>
}
<partial name="_CreateForms/FormPermissionAccount" model="Model.Command" />
</div>
<div class="row" id="form2" style="display: none">
@if (Model.Command.PermissionIds != null && Model.Command.PermissionIds.Contains(10323))

View File

@@ -312,15 +312,7 @@
</div>
</div>
<div class="row" id="formPermissionAccount" style="display: none">
<div class="flex-box w-100" style="@(Model.HasPermissionAccount ? "display: none;" : "")">
<h4 style="margin: auto; margin-top: 10%;" class="text-danger">
شما مجوز دسترسی به این بخش را ندارید.
</h4>
</div>
<div style="@(!Model.HasPermissionAccount ? "display: none;" : "")">
<partial name="_EditForms/FormPermissionAccount" model="Model.Command"/>
</div>
<partial name="_EditForms/FormPermissionAccount" model="Model.Command" />
</div>
<div class="row" id="form2" style="display: none">
<input type="hidden" id="PermissionContract" asp-for="@Model.HasPermissionContract" value="@Model.HasPermissionContract" />

View File

@@ -32,7 +32,6 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops
public bool HasPermissionWorkshopInfo;
public bool HasPermissionContract;
public bool HasPermissionInsurance;
public bool HasPermissionAccount;
public List<AccountViewModel> DeactivatedAccounts;
public EditWorkshopModel(IWorkshopApplication workshopApplication, IWorkshopRepository workshopRepository, IEmployerApplication employerApplication, IAccountRepository accountRepository, IInsuranceJobApplication insuranceJobApplication, IAuthHelper authHelper, IRollCallServiceApplication rollCallServiceApplication)
@@ -52,7 +51,6 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops
HasPermissionWorkshopInfo = permissions.Any(x => x == 10326);
HasPermissionContract = permissions.Any(x => x == 10323);
HasPermissionInsurance = permissions.Any(x => x == 10324);
HasPermissionAccount = permissions.Any(x => x == 10330);
var permissionIds = _authHelper.GetPermissions();
// var currentAccout = _authHelper.CurrentAccountInfo();

View File

@@ -52,7 +52,6 @@ public class FinancialController : ClientBaseController
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpPost("CreatePay")]
[AllowAnonymous]
public async Task<ActionResult<OperationResult<string>>> CreatePay([FromForm] CreateFinancialPayRequest request, CancellationToken cancellationToken)
{
var op = new OperationResult<string>();

View File

@@ -62,8 +62,7 @@
</div>
<div class="flex items-center gap-3">
<a referrerpolicy='origin' target='_blank' href='https://trustseal.enamad.ir/?id=653633&Code=i4xawX1zauW7nICGaD0VqxehuTpMHAiC'><img referrerpolicy='origin' src='https://trustseal.enamad.ir/logo.aspx?id=653633&Code=i4xawX1zauW7nICGaD0VqxehuTpMHAiC' alt='' style='cursor:pointer' code='i4xawX1zauW7nICGaD0VqxehuTpMHAiC'></a>
<img src="~/assetsmain/images/enamad_icon.png" class="w-24" alt="" srcset="" style="visibility: hidden">
<img src="~/assetsmain/images/enamad_icon.png" class="w-24" alt="" srcset="" style="visibility: hidden">
<img src="~/assetsmain/images/enamed-park.png" class="w-24" alt="" srcset="" style="visibility: hidden">
</div>
</div>

View File

@@ -196,13 +196,13 @@
<div class="w-full" style="z-index: 10;">
<div class="!text-white text-center font-extrabold text-[#1.4rem] md:text-start">نشانی گزارشگیر</div>
<div class="flex flex-col items-center justify-between md:flex-row">
<div class="!text-white font-medium text-center text-[#0.8rem] md:text-start"> رشت - خیابان حاجی آباد - روبروی پارکینگ بزرگ حاجی آباد - ابتدای کوچه سپهدار - ساختمان دادماش - طبقه پنجم - واحد 17 </div>
<div class="!text-white font-medium text-center text-[#0.8rem] md:text-start">منطقه آزاد انزلی، مجتمع ونوس طبقه اول، قرفه ۵۵۰</div>
<div class="text-center">
<div class="!text-white font-medium text-[#0.8rem]">شماره تماس</div>
<div class="!text-white font-medium text-[#0.8rem]"><span class="ss03">01333238777</span></div>
<div class="!text-white font-medium text-[#0.8rem]"><span class="ss03">01333328886</span></div>
<div class="!text-white font-medium text-[#0.8rem]"><span class="ss03">01333328887</span></div>
<div class="!text-white font-medium text-[#0.8rem]"><span class="ss03">۰۱۳۳۲۳۲۸۸۸۶</span></div>
<div class="!text-white font-medium text-[#0.8rem]"><span class="ss03">۰۱۳۳۲۳۲۸۸۸۷</span></div>
<div class="!text-white font-medium text-[#0.8rem]"><span class="ss03">۰۱۳۳۳۲۴۴۹۲۶</span></div>
<div class="!text-white font-medium text-[#0.8rem]"><span class="ss03">۰۱۳۳۳۲۳۸۷۷۷</span></div>
</div>
</div>
</div>