public bool ModifyAttendanceSummary(AttendanceSummaryModel model) { using (var dbContext = new MissionskyOAEntities()) { //获取年假信息 var holidays = dbContext.AttendanceSummaries.FirstOrDefault(it => it.Id == model.Id); if (model.LastValue != null) { holidays.LastValue = model.LastValue; } if (model.BaseValue != null) { holidays.BaseValue = model.BaseValue; } if (model.RemainValue != null) { holidays.RemainValue = model.RemainValue; } //更新到数据库 dbContext.SaveChanges(); } return(true); }
/// <summary> /// 编辑 /// </summary> /// <param name="id"></param> /// <returns></returns> public ActionResult AttendanceSummaryEdit(int?id) { ViewBag.Title = "编辑年假信息"; AttendanceSummaryModel model = new AttendanceSummaryModel(); return(View(model)); }
public ActionResult EditAttendanceSummary(AttendanceSummaryModel model) { try { this.AttendanceSummaryService.ModifyAttendanceSummary(model); return(Json("OK")); } catch (Exception ex) { return(Json(new { error = ex.Message })); } }
public static AttendanceSummary ToEntity(this AttendanceSummaryModel model) { var entity = new AttendanceSummary() { Id = model.Id, UserId = model.UserId, Year = model.Year, Type = (int)model.Type, LastValue = model.LastValue, BaseValue = model.BaseValue, RemainValue = model.RemainValue }; return(entity); }
public static AttendanceSummaryModel ToModel(this AttendanceSummary entity) { // 将entity 转为 Model var model = new AttendanceSummaryModel() { Id = entity.Id, UserId = entity.UserId, Year = entity.Year, Type = (OrderType)entity.Type, LastValue = entity.LastValue, BaseValue = entity.BaseValue, RemainValue = entity.RemainValue }; //考勤(申请单)类型名称 model.TypeName = EnumExtensions.GetDescriptionList(typeof(OrderType))[model.Type.ToString()]; return(model); }
/// <summary> /// View Attendance Summary Layout. /// </summary> public void ViewAttendanceSummaryLayout() { TitleBar lblPageName = new TitleBar("View Attendance Summary"); StackLayout slTitle = new StackLayout { Orientation = StackOrientation.Horizontal, Padding = new Thickness(0, 5, 0, 0), BackgroundColor = Color.White, Children = { lblPageName } }; Seperator spTitle = new Seperator(); Image imgStartDateDropDown = new Image { Source = Constants.ImagePath.DropDownArrow, HorizontalOptions = LayoutOptions.EndAndExpand }; Label lblCurrentDate = new Label { TextColor = Color.Black, Text = "Select Month" }; Picker pcrYearRange = new Picker { IsVisible = false, Title = "Year Range" }; foreach (YearMonthModel item in _YearMonth) { pcrYearRange.Items.Add(item.Value); } StackLayout slSelectMonthDisplay = new StackLayout { Children = { lblCurrentDate, pcrYearRange, imgStartDateDropDown }, Orientation = StackOrientation.Horizontal, Padding = new Thickness(Device.OnPlatform(0, 5, 0), Device.OnPlatform(0, 5, 0), Device.OnPlatform(0, 10, 0), Device.OnPlatform(0, 5, 0)) }; //Frame layout for start date Frame frmSelectMonth = new Frame { Content = slSelectMonthDisplay, HorizontalOptions = LayoutOptions.FillAndExpand, OutlineColor = Color.Black, Padding = new Thickness(10) }; var dateTimePickerTap = new TapGestureRecognizer(); dateTimePickerTap.NumberOfTapsRequired = 1; // single-tap dateTimePickerTap.Tapped += (s, e) => { pcrYearRange.Focus(); }; frmSelectMonth.GestureRecognizers.Add(dateTimePickerTap); slSelectMonthDisplay.GestureRecognizers.Add(dateTimePickerTap); StackLayout slStartDateFrmaeLayout = new StackLayout { Children = { frmSelectMonth } }; StackLayout slStartDateLayout = new StackLayout { Children = { slStartDateFrmaeLayout }, Orientation = StackOrientation.Vertical, HorizontalOptions = LayoutOptions.FillAndExpand }; StackLayout slSearchLayout = new StackLayout { Orientation = StackOrientation.Horizontal, Padding = new Thickness(0, 0, 0, 10), Children = { slStartDateLayout } }; _NotAvailData = new Label { Text = "No data availalble for this search data.", TextColor = Color.Red, IsVisible = false }; _Loader = new LoadingIndicator(); Label lblTotalWorkingDays = new Label { TextColor = Color.Black }; StackLayout slTotalWorkingDays = new StackLayout { Children = { lblTotalWorkingDays }, Padding = new Thickness(0, 0, 0, 10) }; Label lblTotalPresentDay = new Label { TextColor = Color.Black }; StackLayout slTotalPresentDay = new StackLayout { Children = { lblTotalPresentDay }, Padding = new Thickness(0, 0, 0, 10) }; Label lblTotalAbsentDay = new Label { TextColor = Color.Black }; StackLayout slTotalAbsentDay = new StackLayout { Children = { lblTotalAbsentDay }, Padding = new Thickness(0, 0, 0, 10) }; pcrYearRange.SelectedIndexChanged += (s, e) => { Device.BeginInvokeOnMainThread(async() => { try { _Loader.IsShowLoading = true; lblTotalWorkingDays.Text = string.Empty; lblTotalPresentDay.Text = string.Empty; lblTotalAbsentDay.Text = string.Empty; lblCurrentDate.Text = pcrYearRange.Items[pcrYearRange.SelectedIndex].ToString(); DateTime dt = Convert.ToDateTime("1-" + lblCurrentDate.Text); int dateCounter = dt.ConvetDatetoDateCounter(); AttendanceSummaryModel attendanceSummary = await AttendanceSummaryModel.GetAttendanceSummary(dateCounter); if (!string.IsNullOrEmpty(Convert.ToString(attendanceSummary.AbsentDays)) && !string.IsNullOrEmpty(Convert.ToString(attendanceSummary.PresentDays)) && !string.IsNullOrEmpty(Convert.ToString(attendanceSummary.TotalWorkingDays))) { _NotAvailData.IsVisible = false; lblTotalWorkingDays.Text = "Total WorkingDays: " + attendanceSummary.TotalWorkingDays.ToString(); lblTotalPresentDay.Text = "Total PresentDays: " + attendanceSummary.PresentDays.ToString(); lblTotalAbsentDay.Text = "Total AbsentDays: " + attendanceSummary.AbsentDays.ToString(); } else { _NotAvailData.IsVisible = true; slTotalAbsentDay.IsVisible = false; slTotalPresentDay.IsVisible = false; slTotalWorkingDays.IsVisible = false; } _Loader.IsShowLoading = false; } catch (Exception ex) { } }); }; StackLayout slViewAttendance = new StackLayout { Children = { new StackLayout { Padding = new Thickness(20, Device.OnPlatform(40, 20, 0), 20, 20), Children = { slTitle, spTitle.LineSeperatorView, slSearchLayout, _Loader, _NotAvailData, slTotalWorkingDays, slTotalPresentDay, slTotalAbsentDay }, VerticalOptions = LayoutOptions.FillAndExpand, }, }, BackgroundColor = LayoutHelper.PageBackgroundColor }; Content = new ScrollView { Content = slViewAttendance, }; }
/// <summary> /// 验证余额是否充足 /// </summary> /// <param name="users">申请单用户</param> /// <param name="orderType">假单类型</param> /// <param name="orderTime">申请时长</param> /// <returns></returns> public AttendanceSummaryModel CheckVacationBalance(IList <OrderUserModel> users, OrderType orderType, double orderTime) { using (var dbContext = new MissionskyOAEntities()) { AttendanceSummaryModel summary = null; users.ToList().ForEach(user => { // 1、正常假期申请:扣假 if (orderTime < 0) { // 2、 summary = GetUserAttendanceSummary(dbContext, user.Id, orderType); // 3、年假 || 加班, 验证剩余假期 if (orderType == OrderType.AnnualLeave || orderType == OrderType.DaysOff) { summary = summary ?? new AttendanceSummaryModel(); double uncompleted = 0.0; //未完成的假期申请 double remainVacation = 0.0; //剩余假期 /* * * 处理未完成的假期时间(直接处理数据库逻辑来获取) * * 未完成的假期申请: 表明还有在假期还在申请中.... * 满足未完成假期申请的条件: * 1、当前用户Id * 2、申请的假期类型 * 3、为正常申请 * 4、申请状态不能是已取消和已拒绝 * 5、申请流程尚未完成 * 6、申请时间必须为本年度的 * * **/ var sql = @"SELECT ISNULL(SUM(D.IOHours), 0) AS UncompletedValue FROM [Order] O INNER JOIN OrderDet D ON O.Id = D.OrderId WHERE O.UserId = {0} --用户 AND ISNULL(O.OrderType, 0) = {1} --假期类型 AND ISNULL(O.RefOrderId, 0) = 0 --正常申请 AND ISNULL(O.Status, 0) NOT IN (4, 3) --状态不是已取消或已拒绝 AND (ISNULL(O.NextStep, 0) != 0 AND NOT EXISTS(SELECT 1 FROM WorkflowStep WHERE [Type] = 3 AND ID = O.NextStep)) --流程未完成且当前步骤不是财务审批(未扣除的假期申请) AND YEAR(D.StartDate) = YEAR(GETDATE()) AND YEAR(D.EndDate) = YEAR(GETDATE()) --本年度的休假"; // 获取未完成假期时间 var data = dbContext.Database.SqlQuery <double>(string.Format(sql, user.Id, (int)orderType)); if (data != null) { uncompleted = Math.Abs(data.FirstOrDefault()); } // 申请时间为: 当前有的假期时间 - 尚未完成的时间 remainVacation = summary.RemainValue.HasValue ? summary.RemainValue.Value - uncompleted : 0.0; //无剩余假期 || 请假时间多于剩余假期 /* * 1、剩余假期时间 < 0 * 2、申请时间 > 剩余时间 * * * **/ if (remainVacation <= 0 || Math.Abs(orderTime) > remainVacation) { throw new InvalidOperationException(string.Format("{0}剩余假期({1}小时)不足。{2}", user.UserName, summary.RemainValue, (uncompleted > 0 ? "尚有未完成的申请。" : string.Empty))); } } } }); return(summary); } }
public ActionResult EditingPopup_Update([DataSourceRequest] DataSourceRequest request, AttendanceSummaryModel attendance) { if (attendance != null && ModelState.IsValid) { AttendanceSummaryService.ModifyAttendanceSummary(attendance); } return(Json(new[] { attendance }.ToDataSourceResult(request, ModelState))); }