//public Tuple<bool, string, long> UpdateCouncilRequest(CouncilModel councilModel)
        //{
        //    try
        //    {
        //        var person =
        //            _personRepository.Where(s => s.Id == councilModel.PersonId).Include(i => i.Profile)
        //                .Include(i => i.Student).FirstOrDefault();
        //        person.Student.StudentNumber = councilModel.StudentNumber;
        //        person.Student.FieldofStudyId = councilModel.FieldofStudyId;
        //        person.Student.Grade = councilModel.Grade;
        //        person.Student.MilitaryServiceStatus = councilModel.MilitaryServiceStatus;

        //        person.Profile.Name = councilModel.Name;
        //        person.Profile.Family = councilModel.Family;
        //        person.Profile.NationalCode = councilModel.NationalCode;

        //        _studentRepository.Update(person.Student);
        //        _profileRepository.Update(person.Profile);

        //        //واکشی درخواست اگر وجود دارد
        //        var request = _requestRepository.Where(i => i.Id == councilModel.Id).Include(i => i.Council)
        //            .Include(i => i.MemberMaster).FirstOrDefault() ?? new Request();
        //        request.NumberofRemainingUnits = councilModel.NumberofRemainingUnits;
        //        request.NumberofSpentUnits = councilModel.NumberofSpentUnits;
        //        request.Description = councilModel.Description;
        //        request.MemberMaster = _memberMasterRepository.Where(d => d.RequestType == RequestType.Council)
        //            .OrderByDescending(p => p.Id).FirstOrDefault();

        //        var x = new PersianCalendar();
        //        councilModel.Date =
        //            x.ToDateTime(councilModel.Date.Year, councilModel.Date.Month, councilModel.Date.Day, 0, 0, 0, 0, 0);
        //        //درج درخواست به همراه شورا
        //        request.Council.CouncilNumber = councilModel.CouncilNumber;
        //        request.Council.Date = councilModel.Date;
        //        request.Council.Description = councilModel.Description;
        //        request.Council.ProblemText = councilModel.ProblemsCouncil;
        //        _requestRepository.Update(request);

        //        _unitOfWork.SaveChanges();
        //        return new Tuple<bool, string, long>(true, "عملیات ثبت به درستی انجام شد", request.Id);
        //    }
        //    catch (Exception exception)
        //    {
        //        return new Tuple<bool, string, long>(false, "خطا در ثبت درخواست", 0);
        //    }
        //}

        /// <summary>
        /// این متد اطلاعات مربوط به کمیسیون و پروفایل و دانشجویی یک شخص خاص را می دهد
        /// </summary>
        /// <param name="councilId"></param>
        /// <returns></returns>
        public Tuple <bool, string, CouncilModel> FindInfoCouncil(long councilId)
        {
            try
            {
                var councilModel = (from p in _requestRepository.Where(c => c.Id == councilId && c.RequestType == RequestType.Council)
                                    //.Include(i => i.Council).Include(i => i.Person).Include(i => i.Person.Student).Include(i => i.Person.Profile)
                                    select new CouncilModel
                {
                    Id = councilId,
                    NumberofRemainingUnits = p.NumberofRemainingUnits,
                    NumberofSpentUnits = p.NumberofSpentUnits,
                    RequestType = p.RequestType,
                    RequestStatus = p.RequestStatus,

                    CouncilNumber = p.Council.CouncilNumber,
                    Date = p.Council.Date,
                    Description = p.Council.Description,
                    ProblemsCouncil = p.Council.ProblemText,

                    PersonId = p.PersonId,
                    NameFamily = p.Person.Profile.Name + " " + p.Person.Profile.Family,
                    NationalCode = p.Person.Profile.NationalCode,

                    StudentNumber = p.Person.Student.StudentNumber,
                    FieldofStudyId = p.Person.Student.FieldofStudyId,
                    FieldofStudy = p.Person.Student.FieldofStudy.OrganizationStructureName.Name,
                    Gender = p.Person.Profile.Gender,
                    Grade = p.Person.Student.Grade,
                    MilitaryServiceStatus = p.Person.Student.MilitaryServiceStatus,
                    NumberofVotesCouncil = 0                     //p.Requests.Count(r => r.Council != null)
                }).FirstOrDefault();
                if (councilModel == null)
                {
                    return(new Tuple <bool, string, CouncilModel>(false, "رکورد کمیسیون نظر یافت نشد!", null));
                }
                councilModel.NumberofVotesCouncil =
                    _councilRepository.Where(c => c.Request.PersonId == councilModel.PersonId).Count();
                councilModel.GenderString = councilModel.Gender.GetDescription();
                councilModel.GradeString  = councilModel.Grade.GetDescription();
                councilModel.MilitaryServiceStatusString = councilModel.MilitaryServiceStatus.GetDescription();

                return(new Tuple <bool, string, CouncilModel>(true, "", councilModel));
            }
            catch (Exception e)
            {
                return(new Tuple <bool, string, CouncilModel>(false, "خطا در انجام عملیات!", null));
            }
        }
        public Tuple <bool, string> VotePermanent(VoteModel voteModel)
        {
            try
            {
                //var request = _requestRepository.Where(r => r.Id == voteModel.RequestId).Include(i => i.Person)
                //    .Include(i => i.Person.Profile).Include(i => i.Person.Student).FirstOrDefault();
                //ابتدا در کارتابل ذخیره شود
                var valid = InsertCartable(CartableStatus.Verdict, voteModel.PersonId, voteModel.PersonId, voteModel.RequestId, voteModel.PostId, voteModel.RowNumber, (voteModel.RequestType == RequestType.Council || voteModel.ReferTo), voteModel.VoteDescription);

                if (!valid)
                {
                    return(new Tuple <bool, string>(false,
                                                    "درخواست مورد نظر در جریان نمی باشد و صدور رای امکان پذیر نیست"));
                }
                // رای صادر شود
                _voteRepository.AddOrUpdate(v => v.RequestId, new Vote {
                    RequestId = voteModel.RequestId, PersonId = voteModel.PersonId, PostId = voteModel.PostId, VoteText = voteModel.VoteText, ReferText = voteModel.VoteDescription, VoteType = voteModel.VoteType, VoteStatus = voteModel.VoteStatus, DateVote = voteModel.DateVote.ToMiladiDate()
                });
                //هر کمیسیون یک شماره جلسه دارد که باید برای هر کمیسیون شماره ردیفی که در چاپ می آید مشخص شود
                // در واقه با ین شماره می توان ردیف کمیسیون را فهمید
                if (voteModel.RequestType == RequestType.Comision)
                {
                    var commission = _commissionRepository.Find(c => c.RequestId == voteModel.RequestId);
                    if (commission != null)
                    {
                        commission.RowNumber =
                            _commissionRepository.Where(c => c.CommissionNumber == commission.CommissionNumber)
                            .Select(s => s.RowNumber).DefaultIfEmpty(0).Max() + 1;
                        // اول شماره کمیسیون در متد ایجاد درخواست بود
                        // بر اساس تغییرات خواسته شده شماره کیسیون باید در مرحله صدور رای بیاید
                        commission.CommissionNumber = voteModel.DetailRequestModel.CommissionNumber;
                        _commissionRepository.Update(commission);
                    }
                }
                else
                {
                    var council = _councilRepository.Find(c => c.RequestId == voteModel.RequestId);
                    if (council != null)
                    {
                        council.RowNumber =
                            _councilRepository.Where(c => c.CouncilNumber == council.CouncilNumber)
                            .Select(s => s.RowNumber).DefaultIfEmpty(0).Max() + 1;
                        // این شماره  CommissionNumber
                        // DetailRequestModel در مدل
                        // برای کمیسیون و شورای یکی می باشد
                        council.CouncilNumber = voteModel.DetailRequestModel.CommissionNumber;
                        _councilRepository.Update(council);
                    }
                }
                _unitOfWork.SaveChanges();
                return(new Tuple <bool, string>(true, "صدور رای با موفقیت انجام شده است"));
            }
            catch (Exception exception)
            {
                return(new Tuple <bool, string>(false, "عملیات با مشکل مواجه شده است"));
            }
        }