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);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 编辑
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult AttendanceSummaryEdit(int?id)
        {
            ViewBag.Title = "编辑年假信息";
            AttendanceSummaryModel model = new AttendanceSummaryModel();

            return(View(model));
        }
Ejemplo n.º 3
0
 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);
            }
        }
Ejemplo n.º 8
0
        public ActionResult EditingPopup_Update([DataSourceRequest] DataSourceRequest request, AttendanceSummaryModel attendance)
        {
            if (attendance != null && ModelState.IsValid)
            {
                AttendanceSummaryService.ModifyAttendanceSummary(attendance);
            }

            return(Json(new[] { attendance }.ToDataSourceResult(request, ModelState)));
        }