Пример #1
0
        List <EmployeeInfo> GetEmployeeList()
        {
            //上月期间开始
            DateTime            date     = SalaryResult.GetLastSalaryDate(null);
            List <EmployeeInfo> emp_list = EmployeeInfo.GetGuanPeiShengList(null, check包括离职人员.Checked == false);

            return(emp_list);
        }
        List <EmployeeInfo> GetEmployeeList()
        {
            //上月期间开始
            DateTime date = SalaryResult.GetLastSalaryDate(group);

            List <EmployeeInfo> emp_list = new List <EmployeeInfo>();

            if (jobgrade != null)
            {
                //先将在职员工信息加载到内存
                EmployeeInfo.GetEmployeeList(company_code, group, true);
                //获取上月工资表中的人员名单
                emp_list = SalaryResult.GetEmployeeList(date.Year, date.Month, company_code, group, true);
            }
            else
            {
                if (group == "管培生")
                {
                    //先将在职员工信息加载到内存
                    EmployeeInfo.GetEmployeeList(company_code, null, true);
                    //获取上月工资表中的人员名单
                    emp_list = SalaryResult.GetEmployeeList(date.Year, date.Month, company_code, null, true);
                    //移除非管培生
                    emp_list.RemoveAll(a => a.是管培生 == false);
                }
                else
                {
                    string[] grade_list = null;
                    if (group == "副总经理以上")
                    {
                        grade_list = 副总经理以上职等.Split(new char[] { ',' });
                    }
                    if (grade_list != null)
                    {
                        for (int i = 0; i < grade_list.Length; i++)
                        {
                            //先将在职员工信息加载到内存
                            EmployeeInfo.GetEmployeeList(company_code, group, true);
                            //获取上月工资表中的人员名单
                            List <EmployeeInfo> emps = SalaryResult.GetEmployeeList(date.Year, date.Month, company_code, grade_list[i], true);
                            emp_list.AddRange(emps);
                        }
                    }
                }
            }
            //如果不是管培生组,剔除管培生
            if (group != "管培生")
            {
                emp_list.RemoveAll(a => a.是管培生);
            }
            return(emp_list);
        }
        List <MonthlySalaryInput> CreateEditingRows()
        {
            List <MonthlySalaryInput> list = new List <MonthlySalaryInput>();

            //排序
            emp_list = emp_list.OrderBy(a => a.部门序号).ThenBy(a => a.机构序号).ThenBy(a => a.机构名称).ThenBy(a => a.员工序号).ToList();
            DateTime lastSalaryDate = SalaryResult.GetLastSalaryDate();
            int      order          = 1;

            foreach (EmployeeInfo emp in emp_list)
            {
                //2018-5-25 只创建没有月薪标准的人员
                //将当前执行的标准带过来
                MonthlySalary effectiveMonthlySalary = MonthlySalary.GetEffective(emp.员工编号, lastSalaryDate);
                if (effectiveMonthlySalary != null)
                {
                    continue;
                }

                string lastSalaryGrade = SalaryResult.GetLastestSalaryGrade(emp.员工编号);
                if (lastSalaryGrade == null)
                {
                    lastSalaryGrade = emp.职等;
                }

                //创建员工月薪记录
                MonthlySalaryInput ms = MonthlySalaryInput.AddMonthlySalaryInput(emp.员工编号, period, isCheck, true);
                ms.序号   = order;
                ms.薪酬体系 = salary_plan;
                ms.职等   = lastSalaryGrade;
                ms.群组   = group;
                //2018-4-23 新建的记录备注不要带过来
                if (ms.录入人.Trim() == "")
                {
                    ms.开始执行日期 = DateTime.MinValue;
                    ms.调整类型   = "";
                    ms.备注     = "";
                }
                ms.Save();
                list.Add(ms);
                order++;
            }

            return(list);
        }
        protected MonthlyRembursementSalaryItemEntry currMonthlyRembursementSalaryItemEntry = null;//当前记录

        public EditMonthlyRembursementSalaryItemListForm(bool isCheck)
        {
            // This call is required by the Windows Form Designer.
            InitializeComponent();

            // TODO: Add any initialization after the InitializeComponent call
            this.isCheck = isCheck;
            //获取最后一次上表工资的日期
            DateTime date = SalaryResult.GetLastSalaryDate(null);

            year  = date.Year;
            month = date.Month;

            comboBoxEdit年.Properties.Items.Add(year);
            comboBoxEdit年.Properties.Items.Add(year - 1);

            comboBoxEdit年.EditValue = year;
            comboBoxEdit月.EditValue = month;
        }
        private void btn保存提交_Click(object sender, EventArgs e)
        {
            bool isSameEditor = false;

            date开始执行日期.ForeColor   = Color.Black;
            date开始执行日期.BackColor   = Color.White;
            comboBox调整类型.ForeColor = Color.Black;
            comboBox调整类型.BackColor = Color.White;

            DateTime lastSalaryDate = SalaryResult.GetLastSalaryDate();

            if (date开始执行日期.DateTime < lastSalaryDate)
            {
                MessageBox.Show("提交失败:开始执行日期不正确,不能小于 " + lastSalaryDate.ToString("yyyy年M月d日"));
                return;
            }

            if (comboBox调整类型.Text == "")
            {
                MessageBox.Show("提交失败:调整类型不能为空");
                return;
            }

            CreateWaitDialog("正在准备保存...", "请稍等");
            try
            {
                //检查是否所有职等都录入完成
                foreach (MonthlySalaryInput ms in monthly_salary_list)
                {
                    if (ms.执行_月薪 == 0)
                    {
                        MessageBox.Show("温馨提醒:发现有执行月薪为 0 的人员,请仔细检查确认");
                        break;
                    }
                }
                //重新排序
                monthly_salary_list = monthly_salary_list.OrderByDescending(a => a.执行_月薪).ToList();
                int order = 1;
                //保存执行日期、录入人、录入时间、调整类型
                foreach (MonthlySalaryInput ms in monthly_salary_list)
                {
                    if (ms.另一人录入的记录 != null)
                    {
                        string editor          = AccessController.CurrentUser.姓名;
                        string editor_opposite = ms.另一人录入的记录.录入人.Trim();
                        if (editor == editor_opposite && editor_opposite != "")
                        {
                            isSameEditor = true;
                            break;
                        }
                    }
                    ms.序号     = order++;
                    ms.开始执行日期 = date开始执行日期.DateTime;
                    ms.调整类型   = comboBox调整类型.Text;
                    ms.备注     = "";
                    ms.录入人    = AccessController.CurrentUser.姓名;
                    ms.录入时间   = DateTime.Now;
                    ms.Save();
                }

                if (isSameEditor)
                {
                    CloseWaitDialog();

                    MessageBox.Show("提交失败:两次录入不能是同一个人");
                    return;
                }

                foreach (MonthlySalaryInput ms in monthly_salary_list)
                {
                    //手动比较录入的内容
                    ms.CompareInputContent();
                }

                SetWaitDialogCaption("正在比较双人录入是否一致...");

                LoadData(true);
                //检查差异
                bool   all_same        = true;
                bool   startdate_err   = false;
                bool   adjust_type_err = false;
                string error_fields    = "";
                foreach (MonthlySalaryInput ms in monthly_salary_list)
                {
                    if (!ms.另一人已录入 || ms.内容不同的字段.Count > 0)
                    {
                        all_same = false;
                        if (ms.内容不同的字段.Find(a => a.称 == "开始执行日期") != null)
                        {
                            startdate_err = true;
                        }
                        if (ms.内容不同的字段.Find(a => a.称 == "调整类型") != null)
                        {
                            adjust_type_err = true;
                        }
                        //2018-9-27 记录不同的字段
                        foreach (ModifyField f in ms.内容不同的字段)
                        {
                            if (error_fields != "")
                            {
                                error_fields += ",";
                            }
                            error_fields += f.称;
                        }
                        break;
                    }
                }
                if (all_same)
                {
                    monthly_salary_list = monthly_salary_list.OrderByDescending(a => a.执行_月薪).ToList();
                    int x = 1;
                    //转成正式
                    foreach (MonthlySalaryInput ms in monthly_salary_list)
                    {
                        ms.序号 = x++;
                        if (ms.开始执行日期 != DateTime.MinValue && ms.执行_月薪 > 0)
                        {
                            ms.UpdateToFormalTable();
                        }
                    }
                    MessageBox.Show("双人录入成功");
                }
                else
                {
                    //显示差异
                    gridControl1.DataSource = monthly_salary_list;
                    gridControl1.Refresh();
                    //设置开始执行日期颜色
                    if (startdate_err)
                    {
                        date开始执行日期.ForeColor = Color.Yellow;
                        date开始执行日期.BackColor = Color.Red;
                    }
                    if (adjust_type_err)
                    {
                        comboBox调整类型.ForeColor = Color.Yellow;
                        comboBox调整类型.BackColor = Color.Red;
                    }
                    MessageBox.Show("提交失败:红色项目不一致,请重新核对修改。如果多次修改提交仍然有问题可能数据已经异常,请清除表中记录重录试试。" + error_fields + " 不一致。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                gridControl1.Focus();
                this.Refresh();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
            finally
            {
                CloseWaitDialog();
            }
        }
        List <EmployeeInfo> GetEmployeeList()
        {
            //上月期间开始
            DateTime date = SalaryResult.GetLastSalaryDate(group);

            //2018-7-11 获取软件开发人员
            List <EmployeeInfo> developer_list = new List <EmployeeInfo>();
            List <string>       names          = Developer.GetDeveloperList();

            foreach (string name in names)
            {
                EmployeeInfo emp = EmployeeInfo.GetEmployeeInfoByName(name);
                if (emp != null)
                {
                    developer_list.Add(emp);
                }
            }

            List <EmployeeInfo> emp_list = new List <EmployeeInfo>();

            if (jobgrade != null)
            {
                if (salary_plan == "软件开发")
                {
                    emp_list = developer_list;
                }
                else
                {
                    //先将在职员工信息加载到内存
                    EmployeeInfo.GetEmployeeList(company_code, group, true);
                    //获取上月工资表中的人员名单
                    emp_list = SalaryResult.GetEmployeeList(date.Year, date.Month, company_code, group, !check包括离职人员.Checked);

                    //剔除软件开发人员
                    foreach (EmployeeInfo emp in developer_list)
                    {
                        emp_list.RemoveAll(a => a.员工编号 == emp.员工编号);
                    }
                }
            }
            else
            {
                if (group == "管培生")
                {
                    //先将在职员工信息加载到内存
                    EmployeeInfo.GetEmployeeList(company_code, null, true);
                    //获取上月工资表中的人员名单
                    emp_list = SalaryResult.GetEmployeeList(date.Year, date.Month, company_code, null, !check包括离职人员.Checked);
                    //移除非管培生
                    emp_list.RemoveAll(a => a.是管培生 == false);
                }
                else
                {
                    string[] grade_list = null;
                    if (group == "副总经理以上")
                    {
                        grade_list = 副总经理以上职等.Split(new char[] { ',' });
                    }
                    if (grade_list != null)
                    {
                        for (int i = 0; i < grade_list.Length; i++)
                        {
                            //先将在职员工信息加载到内存
                            EmployeeInfo.GetEmployeeList(company_code, group, true);
                            //获取上月工资表中的人员名单
                            List <EmployeeInfo> emps = SalaryResult.GetEmployeeList(date.Year, date.Month, company_code, grade_list[i], !check包括离职人员.Checked);
                            emp_list.AddRange(emps);
                        }
                    }
                }
                //剔除软件开发人员
                foreach (EmployeeInfo emp in developer_list)
                {
                    emp_list.RemoveAll(a => a.员工编号 == emp.员工编号);
                }
            }
            //如果不是管培生组,剔除管培生
            if (group != "管培生")
            {
                emp_list.RemoveAll(a => a.是管培生);
            }

            return(emp_list);
        }
        private void btn保存提交_Click(object sender, EventArgs e)
        {
            bool isSameEditor = false;

            if (grade_list.Count > 0 && grade_list[0].职级工资表 != null)
            {
                if (grade_list[0].职级工资表.Count > 0)
                {
                    RankSalaryStandardInput rss_1 = grade_list[0].职级工资表[0];
                    string editor          = rss_1.录入人;
                    string editor_opposite = rss_1.另一人录入的记录 != null?rss_1.另一人录入的记录.录入人.Trim() : "";

                    if (AccessController.CurrentUser.姓名 == editor_opposite && editor_opposite != "")
                    {
                        isSameEditor = true;
                    }
                }
            }

            if (isSameEditor)
            {
                MessageBox.Show("两次录入不能是同一个人");
                return;
            }

            date开始执行日期.ForeColor = Color.Black;
            date开始执行日期.BackColor = Color.Transparent;

            DateTime lastSalaryDate = SalaryResult.GetLastSalaryDate();

            if (date开始执行日期.DateTime < lastSalaryDate)
            {
                MessageBox.Show("提交失败:开始执行日期不正确,不能小于 " + lastSalaryDate.ToString("yyyy年M月d日"));
                return;
            }

            CreateWaitDialog("正在准备保存...", "请稍等");
            try
            {
                //保存执行日期
                foreach (AdjustJobGrade grade in grade_list)
                {
                    if (grade.职级工资表 == null)
                    {
                        continue;
                    }
                    foreach (RankSalaryStandardInput rss in grade.职级工资表)
                    {
                        rss.开始执行日期 = date开始执行日期.DateTime;
                        rss.录入人    = AccessController.CurrentUser.姓名;
                        rss.录入时间   = DateTime.Now;
                        rss.Save();
                    }
                }

                //检查是否所有职等都录入完成
                foreach (AdjustJobGrade grade in grade_list)
                {
                    if (grade.is_separator)
                    {
                        continue;
                    }

                    if (grade.职级工资表 == null || grade.职级工资表.Count == 0)
                    {
                        MessageBox.Show("提交失败:职级工资未录入完成");
                        return;
                    }
                    foreach (RankSalaryStandardInput rss in grade.职级工资表)
                    {
                        if (rss.月薪 == 0)
                        {
                            MessageBox.Show("提交失败:月薪不能为 0");
                            return;
                        }
                    }
                }
                //如果另一个人没有录入,返回
                RankSalaryStandardInput rss_1 = grade_list[0].职级工资表[0];
                if (rss_1.另一人录入的记录 == null)
                {
                    CloseWaitDialog();
                    MessageBox.Show("提交失败:另一个人还没有录入");
                    return;
                }

                SetWaitDialogCaption("正在比较双人录入是否一致...");

                LoadData(true);
                //检查差异
                bool all_same      = true;
                bool startdate_err = false;
                foreach (AdjustJobGrade grade in grade_list)
                {
                    if (grade.is_separator)
                    {
                        continue;                     //忽略分割行
                    }
                    //手动比较录入的内容
                    grade.CompareInputContent();

                    if (grade.内容不同的字段.Count > 0)
                    {
                        foreach (ModifyField field in grade.内容不同的字段)
                        {
                            if (field.称.StartsWith("R"))
                            {
                                continue;
                            }
                            if (field.称 == "开始执行日期")
                            {
                                startdate_err = true;
                            }
                            all_same = false;
                        }
                        break;
                    }
                }
                if (all_same)
                {
                    date开始执行日期.ForeColor = Color.Black;
                    date开始执行日期.BackColor = Color.Transparent;
                    //转成正式
                    foreach (AdjustJobGrade grade in grade_list)
                    {
                        if (grade.is_separator)
                        {
                            continue;                     //忽略分割行
                        }
                        if (grade.职级工资表 == null)
                        {
                            continue;
                        }
                        foreach (RankSalaryStandardInput rss in grade.职级工资表)
                        {
                            rss.UpdateToFormalTable();
                        }
                        grade.调整记录.UpdateToFormalRecord();
                    }
                    CloseWaitDialog();
                    MessageBox.Show("双人录入成功");
                }
                else
                {
                    //显示差异
                    gridControl1.RefreshDataSource();
                    gridControl1.Refresh();
                    //设置开始执行日期颜色
                    if (startdate_err)
                    {
                        date开始执行日期.ForeColor = Color.Yellow;
                        date开始执行日期.BackColor = Color.Red;
                    }
                    //转成正式
                    MessageBox.Show("红色项目不一致,请重新核对修改");
                }
                gridControl1.Focus();
                this.Refresh();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
            finally
            {
                CloseWaitDialog();
            }
        }