/// <summary> /// سرانه های اضافه کار تشویقی, شب کاری تشویقی, تعطیل کار تشویقی مربوط به ماه/سال مشخص به صورت صفحه بندی شده بر می گرداند /// بر اساس دسترسی کاربر به دپارتمان /// </summary> /// <param name="parentDepartmentId">آی دی ارگان/سازمان جهت جستجو</param> /// <param name="departmentName">نام معاونت جهت جستجو</param> /// <param name="year">سال</param> /// <param name="month">ماه</param> /// <param name="pageIndex">ایندکس صفحه</param> /// <param name="pageSize">اندازه صفحه</param> /// <param name="count">تعداد کل رکوردها بدون صفحه بندی</param> /// <returns>لیست پروکسی سرانه</returns> public IList <OverTimeProxy> GetDetails(decimal parentDepartmentId, string departmentName, int year, int month, int pageIndex, int pageSize, out int count) { DateTime Date; if (BLanguage.CurrentSystemLanguage == LanguagesName.Parsi) { Date = Utility.ToMildiDate(String.Format("{0}/{1}/{2}", year, month, 1)); } else { Date = new DateTime(year, month, 1); } //----------------------------------------------------------------- //چک کن اگه موجودیت والد برای این ماه/سال در دیتابیس وجود نداشت, یه موجودیت والد ذخیره کن this.CheckOverTimeExists(Date); //----------------------------------------------------------------- OverTime overTimeAlias = null; OverTimeDetail overTimeDetailAlias = null; Department departmentAlias = null; IQueryOver <OverTimeDetail, OverTimeDetail> searchQuery; IList <decimal> accessableIDs = accessPort.GetAccessibleDeparments(); if (accessableIDs.Count < this.operationBatchSizeValue && this.operationBatchSizeValue < 2100) { searchQuery = NHSession.QueryOver(() => overTimeDetailAlias) .JoinAlias(() => overTimeDetailAlias.OverTime, () => overTimeAlias) .JoinAlias(() => overTimeDetailAlias.Department, () => departmentAlias) .Where(() => departmentAlias.ID.IsIn(accessableIDs.ToList()) && overTimeAlias.Date == Date && departmentAlias.ParentPath.IsLike("," + parentDepartmentId + ",", MatchMode.Anywhere) && departmentAlias.DepartmentType == DepartmentType.Assistance && overTimeAlias.IsActive == true); } else { GTS.Clock.Model.Temp.Temp tempAlias = null; string operationGUID = this.bTemp.InsertTempList(accessableIDs); searchQuery = NHSession.QueryOver(() => overTimeDetailAlias) .JoinAlias(() => overTimeDetailAlias.OverTime, () => overTimeAlias) .JoinAlias(() => overTimeDetailAlias.Department, () => departmentAlias) .JoinAlias(() => departmentAlias.TempList, () => tempAlias) .Where(() => tempAlias.OperationGUID == operationGUID && overTimeAlias.Date == Date && departmentAlias.ParentPath.IsLike("," + parentDepartmentId + ",", MatchMode.Anywhere) && departmentAlias.DepartmentType == DepartmentType.Assistance && overTimeAlias.IsActive == true); this.bTemp.DeleteTempList(operationGUID); } if (!Utility.IsEmpty(departmentName)) { searchQuery.Where(() => departmentAlias.Name.IsLike(departmentName, MatchMode.Anywhere)); } count = searchQuery.RowCount(); IList <OverTimeDetail> list = new List <OverTimeDetail>(); list = searchQuery.Skip(pageIndex * pageSize).Take(pageSize).List <OverTimeDetail>(); personList = bPerson.GetPersonsInfoForOverTime(); IList <OverTimeProxy> proxyList = new List <OverTimeProxy>(); var calendarList = bCalendar.GetCalendarListByDateRange(Date, Date.AddMonths(1), "6"); foreach (var item in list) { OverTimeProxy proxy = ConvertToProxy(item); proxy.MonthHolidayCount = calendarList != null?calendarList.Count() : 0; proxyList.Add(proxy); } return(proxyList); }