コード例 #1
0
        /// <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);
        }