示例#1
0
        /// <summary>
        /// 获取并设置下一申请期信息,仅在当前父阶段所有子阶段都完成后才调用
        /// </summary>
        /// <param name="currentParentStage"></param>
        /// <returns></returns>
        public string ChildStageFinishHandler_GetNextParent(StudentApplyStageEntity currentParentStage)
        {
            Guid studentID = currentParentStage.StudentID;
            IEnumerable<StudentApplyStageEntity> siblingParentStages = repository.StudentApplyStage.Where(s => s.StudentID == studentID && s.StageClass == 1 && s.StageNo != currentParentStage.StageNo);
            StudentApplyStageEntity nextParent;

            if (siblingParentStages.Count(s => s.Percentage < 100) <= 0)
            {
                return "ApplyCompleted";
            }
            else
            {
                //如果所有申请期的Percentage 都不为0,则选取第一个未完成的申请期
                //否则,选取第一个未开始的申请期,并调用StartParentStage 函数初始化申请期的进度信息
                if (siblingParentStages.Count(s => s.Percentage == 0) <= 0)
                {
                    nextParent = siblingParentStages.FirstOrDefault(s => s.Percentage > 0 && s.Percentage < 100);
                }
                else
                {
                    nextParent = siblingParentStages.FirstOrDefault(s => s.Percentage == 0);
                    StartParentStage(nextParent.StageNo, studentID);
                }
                return nextParent.StageNameEn;
            }
        }
示例#2
0
        public JsonResult Post_InformationFormsHandout(StudentApplyStageEntity ajaxData)
        {
            StudentApplyStageEntity newEntity = repository.StudentApplyStage.SingleOrDefault(s => s.StudentID == ajaxData.StudentID && s.StageNo == ajaxData.StageNo);
            if (newEntity == null)
                return Json(new { SaveResult = false, Msg = "学生ID 为空,或不存在指定的阶段" });

            newEntity.EndDate = ajaxData.EndDate;
            newEntity.Remark = ajaxData.Remark;
            newEntity.CurrentOption = ajaxData.CurrentOption;
            newEntity.Percentage = UpdateChildPercentage(newEntity);
            repository.SaveStudentApplyStage(newEntity);

            if(newEntity.Percentage < 100)
                return Json(new { SaveResult = true, Percentage = newEntity.Percentage });

            StageSubmitCBModel returnData = ChildStageFinishHandler(newEntity);
            returnData.SaveResult = true;
            returnData.Percentage = newEntity.Percentage;
            return Json(returnData);
        }
示例#3
0
        public StageSubmitCBModel ChildStageFinishHandler(StudentApplyStageEntity childStage)
        {
            //dynamic resultObject = new ExpandoObject();
            StageSubmitCBModel resultData = new StageSubmitCBModel();

            StudentApplyStageEntity parentStage = repository.StudentApplyStage.SingleOrDefault(s => s.StudentID == childStage.StudentID && s.StageNo == childStage.ParentNo);
            parentStage.Percentage = UpdateParentPercentage(parentStage.StageNo, parentStage.StudentID);
            if (parentStage.Percentage == 100)
            {
                resultData.IsParentComplete = true;
                resultData.NextParentNameEn = ChildStageFinishHandler_GetNextParent(parentStage);
            }
            else
            {
                resultData.IsParentComplete = false;
                resultData.NextSiblingNameEn = ChildStageFinishHandler_GetNextSibling(childStage);
            }
            repository.SaveStudentApplyStage(parentStage);

            return resultData;
        }
示例#4
0
        /// <summary>
        /// 获取并设置下一子阶段信息,仅在当前子阶段完成,而其他兄弟子阶段未全部完成才调用
        /// </summary>
        /// <param name="currentChildStage"></param>
        /// <returns></returns>
        public string ChildStageFinishHandler_GetNextSibling(StudentApplyStageEntity currentChildStage)
        {
            Guid studentID = currentChildStage.StudentID;
            IEnumerable<StudentApplyStageEntity> siblingChild = repository.StudentApplyStage
                .Where(s => s.StudentID == studentID && s.ParentNo == currentChildStage.ParentNo && s.StageClass == 2 && s.StageNo != currentChildStage.StageNo);

            StudentApplyStageEntity nextChild;
            //如果兄弟阶段的Percent 都不为0,则选取第一个未完成的阶段
            //否则,选取第一个未开始的阶段,Percent 为0
            if (siblingChild.Count(s => s.Percentage == 0) <= 0)
            {
                nextChild = siblingChild.Where(s => s.Percentage > 0 && s.Percentage < 100).OrderBy(s => s.StageNo).First();
            }
            else
            {
                nextChild = siblingChild.Where(s => s.Percentage == 0).OrderBy(s=>s.StageNo).First();
                nextChild.Percentage = 1;
                nextChild.CurrentOption = nextChild.BeginOption;
                repository.SaveStudentApplyStage(nextChild);
            }
            return nextChild.StageNameEn;
        }
示例#5
0
 /// <summary>
 /// 返回子阶段的阶段百分比
 /// </summary>
 /// <param name="childStage"></param>
 /// <returns></returns>
 public int UpdateChildPercentage(StudentApplyStageEntity childStage)
 {
     string[] statusOptionArray = childStage.StatusOption.Split(',');
     int statusOptionLength = statusOptionArray.Length;
     int currentOptionIndex = Array.IndexOf(statusOptionArray, childStage.CurrentOption);
     return (currentOptionIndex + 1) * 100 / statusOptionLength;
 }
示例#6
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="stageNo">当前阶段ID</param>
        /// <param name="refBeginDate">基准开始日期</param>
        /// <param name="refEndDate">基准结束日期</param>
        /// <param name="currentDetail">当前阶段Detail</param>
        /// <param name="studentID">学生ID</param>
        /// <param name="isDateSameWithParent">是否和父阶段日期一样</param>
        /// <returns></returns>
        StudentApplyStageEntity CalApplyStage(
            int stageNo, 
            DateTime refBeginDate, 
            DateTime? refEndDate, 
            ApplyStageVersionDetailEntity currentDetail, 
            Guid studentID, 
            bool isDateSameWithParent, 
            DateTime signDate)
        {
            StudentApplyStageEntity applyStage = new StudentApplyStageEntity
            {
                ID = Guid.NewGuid(),
                StudentID = studentID,
                StageNo = stageNo,
                StageName = currentDetail.StageName,
                StageNameEn = currentDetail.StageNameEn,
                StageClass = currentDetail.StageClass,
                ParentNo = currentDetail.ParentNo,
                IsForbid = currentDetail.IsForbid,
                StatusOption = currentDetail.StatusOption,
                BeginOption = currentDetail.BeginOption,
                EndOption = currentDetail.EndOption,
                CurrentOption = currentDetail.BeginOption,
                CanForbid = currentDetail.CanForbid,
                CanChangeDate = currentDetail.CanChangeDate,
                CanChangeName = currentDetail.CanChangeName,
                IsDateSameWithParent = currentDetail.IsDateSameWithParent
            };
            //如果当前阶段的日期与父阶段一样,则直接赋值即可
            if (isDateSameWithParent)
            {
                applyStage.BeginDate = refBeginDate;
                applyStage.EndDate = Convert.ToDateTime(refEndDate);
            }
            else
            {
                //如果当前阶段的开始日期需要计算,则在基准开始日期上加上给定天数
                if (Convert.ToBoolean(currentDetail.IsCalBeginDate))
                {
                    applyStage.BeginDate = refBeginDate.AddDays(Convert.ToInt16(currentDetail.BeginDate));
                }
                else    //否则,则拼接年、月、日 来计算日期。下面算法的结果是,计算出给定月份的最后一天的日期值
                {
                    int year = (signDate.Month > currentDetail.BeginDate) ? signDate.Year + 1 : signDate.Year;
                    int month = Convert.ToInt16(currentDetail.BeginDate) + 1;
                    if (month > 12)
                    {
                        year += 1;
                        month = 1;
                    }
                    int day = 1;
                    applyStage.BeginDate = new DateTime(year, month, day).AddDays(-1);
                }

                //如果当前阶段的结束日期需要计算,则在基准结束日期上加上给定天数
                if (Convert.ToBoolean(currentDetail.IsCalEndDate))
                {
                    applyStage.EndDate = applyStage.BeginDate.AddDays(Convert.ToInt16(currentDetail.EndDate));
                }
                else    //否则,则拼接年、月、日 来计算日期。下面算法的结果是,计算出给定月份的最后一天的日期值
                {

                    int year = (signDate.Month > currentDetail.EndDate) ? signDate.Year + 1 : signDate.Year;
                    int month = Convert.ToInt16(currentDetail.EndDate) + 1;
                    if (month > 12)
                    {
                        year += 1;
                        month = 1;
                    }
                    int day = 1;
                    applyStage.EndDate = new DateTime(year, month, day).AddDays(-1);
                }
            }
            return applyStage;
        }
示例#7
0
 /// <summary>
 /// 更新一条数据
 /// </summary>
 /// <param name="applyStage"></param>
 public void SaveStudentApplyStage(StudentApplyStageEntity applyStage)
 {
     StudentApplyStageEntity originEntity = context.StudentApplyStage.SingleOrDefault(s => s.StudentID == applyStage.StudentID && s.StageNo == applyStage.StageNo);
     context.Entry(originEntity).CurrentValues.SetValues(applyStage);
     context.SaveChanges();
 }