Files
Backend-Api/ServiceHost/Areas/Client/Pages/Index.cshtml.cs

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();
}
}
}
}