437 lines
16 KiB
C#
437 lines
16 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Security.Claims;
|
|
using _0_Framework.Application;
|
|
using AccountManagement.Application.Contracts.Account;
|
|
using Company.Domain.EmployeeAgg;
|
|
using CompanyManagment.App.Contracts.AndroidApkVersion;
|
|
using CompanyManagment.App.Contracts.ClientDashboard;
|
|
using CompanyManagment.App.Contracts.Employee;
|
|
using CompanyManagment.App.Contracts.HolidayItem;
|
|
using CompanyManagment.App.Contracts.Leave;
|
|
using CompanyManagment.App.Contracts.PaymentToEmployee;
|
|
using CompanyManagment.App.Contracts.Workshop;
|
|
using CompanyManagment.Application;
|
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
|
using Microsoft.AspNetCore.Authentication;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
using PersianTools.Core;
|
|
using CompanyManagment.App.Contracts.RollCallEmployee;
|
|
using CompanyManagment.App.Contracts.RollCallService;
|
|
using Microsoft.AspNetCore.Identity;
|
|
|
|
namespace ServiceHost.Areas.Client.Pages
|
|
{
|
|
[Authorize]
|
|
public class IndexModel : PageModel
|
|
{
|
|
private readonly IWorkshopApplication _workshopApplication;
|
|
private readonly ILeaveApplication _leaveApplication;
|
|
private readonly IEmployeeApplication _employeeApplication;
|
|
private readonly IPaymentToEmployeeApplication _paymentToEmployeeApplication;
|
|
private readonly IPaymentToEmployeeItemApplication _paymentToEmployeeItemApplication;
|
|
private readonly IHolidayItemApplication _holidayItemApplication;
|
|
private readonly IPasswordHasher _passwordHasher;
|
|
private readonly IAuthHelper _authHelper;
|
|
private readonly IAndroidApkVersionApplication _androidApkVersionApplication;
|
|
public string profilePicture { get; set; }
|
|
public string AccountFullName { get; set; }
|
|
public List<CalenderViewModel> CalenderViewModels;
|
|
public string Today { get; set; }
|
|
public string TodayDate { get; set; }
|
|
public List<WorkshopViewModel> Workshops;
|
|
public string SelectedWorkshop;
|
|
public ConnectedPersonnelViewModel Employees;
|
|
public List<LeaveMainViewModel> LeaveSearch;
|
|
public string workshopId { get; set; }
|
|
public int PageIndex;
|
|
public bool HasApkToDownload { get; set; }
|
|
public IndexModel(IAuthHelper authHelper, IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, ILeaveApplication leaveApplication, IEmployeeApplication employeeApplication, IPaymentToEmployeeItemApplication paymentToEmployeeItemApplication, IPaymentToEmployeeApplication paymentToEmployeeApplication, IHolidayItemApplication holidayItemApplication, IAndroidApkVersionApplication androidApkVersionApplication)
|
|
{
|
|
_workshopApplication = workshopApplication;
|
|
_employeeApplication = employeeApplication;
|
|
_paymentToEmployeeItemApplication = paymentToEmployeeItemApplication;
|
|
_paymentToEmployeeApplication = paymentToEmployeeApplication;
|
|
_holidayItemApplication = holidayItemApplication;
|
|
_androidApkVersionApplication = androidApkVersionApplication;
|
|
_leaveApplication = leaveApplication;
|
|
_authHelper = authHelper;
|
|
_passwordHasher = passwordHasher;
|
|
}
|
|
|
|
public void OnGet()
|
|
{
|
|
profilePicture = _authHelper.CurrentAccountInfo().ProfilePhoto;
|
|
AccountFullName = _authHelper.CurrentAccountInfo().Fullname;
|
|
var todayGr = DateTime.Now;
|
|
HasApkToDownload = _androidApkVersionApplication.HasAndroidApkToDownload();
|
|
#region TodayDate
|
|
|
|
var todayFa = todayGr.ToFarsi();
|
|
var syear = Convert.ToInt32(todayFa.Substring(0, 4));
|
|
var smonth = Convert.ToInt32(todayFa.Substring(5, 2));
|
|
var sday = Convert.ToInt32(todayFa.Substring(8, 2));
|
|
var todayPersian = new PersianDateTime(syear, smonth, sday);
|
|
var threeDaysBeforeGr = new PersianDateTime(syear, smonth, sday);
|
|
var threeDaysAfterGr = new PersianDateTime(syear, smonth, sday);
|
|
|
|
var dayOfWeek = todayPersian.DayOfWeek;
|
|
var month = todayPersian.MonthOfYear;
|
|
var day = todayFa.Substring(8, 2);
|
|
var year = todayFa.Substring(0, 4);
|
|
TodayDate = $"{dayOfWeek} - {day} {month} {year}";
|
|
#endregion
|
|
|
|
#region Calender
|
|
|
|
var todayFor = todayPersian;
|
|
|
|
threeDaysBeforeGr = threeDaysBeforeGr.AddDays(-3);
|
|
|
|
threeDaysAfterGr = threeDaysAfterGr.AddDays(3);
|
|
|
|
|
|
var d1 = threeDaysBeforeGr;
|
|
var d2 = threeDaysAfterGr;
|
|
|
|
var calenderList = new List<CalenderViewModel>();
|
|
for (var da = d1; da <= d2; da = da.AddDays(1))
|
|
{
|
|
var currentDay = $"{da}".Substring(8, 2);
|
|
var dayOfWeekCurrent = "";
|
|
|
|
switch ($"{da.DayOfWeek}")
|
|
{
|
|
case "شنبه":
|
|
dayOfWeekCurrent = "شنبه";
|
|
break;
|
|
case "یکشنبه":
|
|
dayOfWeekCurrent = "1 شنبه";
|
|
break;
|
|
case "دوشنبه":
|
|
dayOfWeekCurrent = "2 شنبه";
|
|
break;
|
|
case "سه شنبه":
|
|
dayOfWeekCurrent = "3 شنبه";
|
|
break;
|
|
case "چهارشنبه":
|
|
dayOfWeekCurrent = "4 شنبه";
|
|
break;
|
|
case "پنج شنبه":
|
|
dayOfWeekCurrent = "5 شنبه";
|
|
break;
|
|
case "جمعه":
|
|
dayOfWeekCurrent = "آدینه";
|
|
break;
|
|
}
|
|
|
|
var BoolDateHoliday = da.ToGregorianDateTime();
|
|
if (da == todayFor)
|
|
{
|
|
var calenderNewList = new CalenderViewModel()
|
|
{
|
|
DayNumber = currentDay,
|
|
IsToday = true,
|
|
DayOfWeek = dayOfWeekCurrent,
|
|
Holiday = _holidayItemApplication.IsHoliday(BoolDateHoliday),
|
|
};
|
|
calenderList.Add(calenderNewList);
|
|
}
|
|
else
|
|
{
|
|
var calenderNewList = new CalenderViewModel()
|
|
{
|
|
DayNumber = currentDay,
|
|
IsToday = false,
|
|
DayOfWeek = dayOfWeekCurrent,
|
|
Holiday = _holidayItemApplication.IsHoliday(BoolDateHoliday)
|
|
};
|
|
calenderList.Add(calenderNewList);
|
|
|
|
}
|
|
}
|
|
|
|
CalenderViewModels = calenderList;
|
|
|
|
#endregion
|
|
}
|
|
|
|
#region Get Employee & Workshop List by JSON
|
|
public IActionResult OnGetWorkshopList(WorkshopSearchModel searchModel)
|
|
{
|
|
Workshops = _workshopApplication.SearchForClient(searchModel).ToList();
|
|
var selectedWorkshop = _workshopApplication.SearchForClient(searchModel).OrderByDescending(x => x.PersonnelCount).FirstOrDefault();
|
|
SelectedWorkshop = selectedWorkshop.WorkshopFullName;
|
|
|
|
if (selectedWorkshop != null)
|
|
{
|
|
_authHelper.UpdateWorkshopSlugClaim(selectedWorkshop.Slug);
|
|
}
|
|
|
|
return new JsonResult(new
|
|
{
|
|
Workshops,
|
|
workshopName = SelectedWorkshop
|
|
});
|
|
}
|
|
|
|
public IActionResult OnPostSelectWorkshop(string slug, WorkshopSearchModel searchModel)
|
|
{
|
|
var workshopId = _passwordHasher.SlugDecrypt(slug);
|
|
if (workshopId != 0)
|
|
{
|
|
var workshop = _workshopApplication.SearchForClient(searchModel).FirstOrDefault(x => x.Id == workshopId);
|
|
if (workshop != null)
|
|
{
|
|
_authHelper.UpdateWorkshopSlugClaim(workshop.Slug);
|
|
}
|
|
|
|
return new JsonResult(new
|
|
{
|
|
isSuccedded = true,
|
|
message = "کارگاه مورد نظر شما انتخاب شد"
|
|
});
|
|
}
|
|
else
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
isSuccedded = false,
|
|
message = "کارگاه مورد نظر شما یافت نشد"
|
|
});
|
|
}
|
|
}
|
|
|
|
public IActionResult OnGetEmployeeList()
|
|
{
|
|
var workshopSlug = User.FindFirst("WorkshopSlug").Value;
|
|
var workshopId = _passwordHasher.SlugDecrypt(workshopSlug);
|
|
if (workshopId > 0)
|
|
{
|
|
var result = _workshopApplication.GetConnectedPersonnels(workshopId);
|
|
var r = result.GroupBy(x => x.PersonName).Select(x => x.First()).ToList();
|
|
|
|
Employees = new ConnectedPersonnelViewModel()
|
|
{
|
|
ConnectedPersonnelViewModels = r.OrderBy(x => x.Black ? 1 : 0).ThenBy(x => x.PersonelCode).ToList(),
|
|
};
|
|
|
|
|
|
// لیست پرسنلی که قرارداد ندارند
|
|
//var filteredBlackResult = _workshopApplication.GetConnectedPersonnels(workshopId)
|
|
// .Where(x => !x.Black && x.ContractPerson)
|
|
// .GroupBy(x => x.EmployeeId)
|
|
// .Select(x => x.First())
|
|
// .OrderBy(x => x.PersonelCode)
|
|
// .ToList();
|
|
|
|
//Employees = new ConnectedPersonnelViewModel()
|
|
//{
|
|
// ConnectedPersonnelViewModels = filteredBlackResult,
|
|
//};
|
|
|
|
return new JsonResult(new { Employees });
|
|
}
|
|
else
|
|
{
|
|
return new JsonResult(new { Employees = new ConnectedPersonnelViewModel() });
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
public IActionResult OnGetLeaveCreate()
|
|
{
|
|
var command = new CreateLeave();
|
|
|
|
return Partial("LeaveCreate", command);
|
|
}
|
|
|
|
public IActionResult OnPostLeaveSave(CreateLeave command)
|
|
{
|
|
if (User.Identity.IsAuthenticated)
|
|
{
|
|
var workshopSlugCliam = User.FindFirstValue("WorkshopSlug");
|
|
long workshopId = _passwordHasher.SlugDecrypt(workshopSlugCliam);
|
|
if (workshopId > 0)
|
|
{
|
|
command.WorkshopId = workshopId;
|
|
|
|
var result = _leaveApplication.Create(command);
|
|
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = result.IsSuccedded,
|
|
message = result.Message,
|
|
PrintID = result.SendId
|
|
});
|
|
}
|
|
else
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = false,
|
|
message = "کارگاه ای یافت نشده است",
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = false,
|
|
message = "داده ای یافت نشد!",
|
|
});
|
|
}
|
|
}
|
|
|
|
#region Compute Leave Hourly and Daily
|
|
public IActionResult OnGetComputeLeaveHourly(string startHours, string endHours)
|
|
{
|
|
var start = Convert.ToDateTime(startHours);
|
|
var end = Convert.ToDateTime(endHours);
|
|
if (start > end || start == end)
|
|
{
|
|
end = end.AddDays(1);
|
|
}
|
|
|
|
var HourlyDate = (end - start);
|
|
var hours = (int)HourlyDate.TotalHours;
|
|
var minutes = HourlyDate.TotalMinutes % 60;
|
|
|
|
if (hours > 0 && minutes > 0)
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
res = hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه",
|
|
});
|
|
}
|
|
else if (hours > 0 && minutes == 0)
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
res = hours + " " + "ساعت ",
|
|
});
|
|
}
|
|
else if (hours == 0 && minutes > 0)
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
res = minutes + " " + "دقیقه",
|
|
});
|
|
}
|
|
|
|
return new JsonResult(new
|
|
{
|
|
totalHours = $"{hours}",
|
|
});
|
|
}
|
|
|
|
public IActionResult OnGetComputeLeaveDaily(string startDay, string endDay)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(startDay) && !string.IsNullOrWhiteSpace(endDay))
|
|
{
|
|
var start = startDay.ToGeorgianDateTime();
|
|
var end = endDay.ToGeorgianDateTime();
|
|
if (end >= start)
|
|
{
|
|
var daysSpan = (end - start).TotalDays + 1;
|
|
return new JsonResult(new
|
|
{
|
|
res = $"{(int)daysSpan} روز",
|
|
});
|
|
}
|
|
else
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
status = false,
|
|
res = "تاریخ پایان از تاریخ شروع کوچکتر است.",
|
|
});
|
|
}
|
|
}
|
|
|
|
return new JsonResult(new
|
|
{
|
|
res = "",
|
|
});
|
|
}
|
|
#endregion
|
|
|
|
public IActionResult OnGetLeaveList()
|
|
{
|
|
return Partial("LeaveList");
|
|
}
|
|
|
|
public IActionResult OnGetLeaveListData(long workshopId, long employeeId)
|
|
{
|
|
var workshop = _workshopApplication.GetDetails(workshopId);
|
|
var employee = _employeeApplication.GetDetails(employeeId);
|
|
var search = new LeaveSearchModel()
|
|
{
|
|
WorkshopId = workshop.Id,
|
|
EmployeeId = employee.Id,
|
|
};
|
|
LeaveSearch = _leaveApplication.searchClient(search);
|
|
return new JsonResult(new { LeaveSearch });
|
|
}
|
|
|
|
public IActionResult OnGetPaymentToPersonnelCreate()
|
|
{
|
|
return Partial("PaymentToPersonnelCreate");
|
|
}
|
|
|
|
public IActionResult OnPostPaymentToPersonnelSave(CreatePaymentToEmployee command)
|
|
{
|
|
var payDateFa = command.CreatePaymentToEmployeeItem.PayDateFa;
|
|
command.Year = payDateFa.Substring(0, 4);
|
|
command.Month = payDateFa.Substring(5, 2);
|
|
|
|
var result = _paymentToEmployeeApplication.Create(command);
|
|
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = result.IsSuccedded,
|
|
message = result.Message
|
|
});
|
|
}
|
|
|
|
public IActionResult OnGetLastLeave(int pageIndex)
|
|
{
|
|
if (User.Identity.IsAuthenticated)
|
|
{
|
|
var workshopSlugCliam = User.FindFirstValue("WorkshopSlug");
|
|
long workshopId = _passwordHasher.SlugDecrypt(workshopSlugCliam);
|
|
if (workshopId > 0)
|
|
{
|
|
var command = new LeaveSearchModel()
|
|
{
|
|
WorkshopId = workshopId,
|
|
PageIndex = pageIndex
|
|
};
|
|
|
|
var result = _leaveApplication.LastLeaveMain(command);
|
|
int pageIndexCount = result.Count();
|
|
return new JsonResult(new
|
|
{
|
|
data = result,
|
|
pageIndex = pageIndexCount
|
|
});
|
|
}
|
|
else
|
|
{
|
|
return NotFound();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return BadRequest();
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|