Пример #1
0
        static void Main(string[] args)
        {
            //lista impiegati creata come mock

            var employees = CreateEmployess();

            //per ogni impiegato della lista
            //    se è il suo giorno di paga
            //        calcola la sua paga
            //        crea un record con ID, paga e data di oggi
            //        salva record in una lista di record
            List <PayCheckRecord> payCheckRecords = new List <PayCheckRecord>();

            var date = new DateTime(2019, 8, 31);

            foreach (var e in employees)
            {
                if (e.IsPayDay(date))
                {
                    var pay    = e.CalculatePay(date);
                    var record = new PayCheckRecord(e.ID, DateTime.Today, pay);
                    payCheckRecords.Add(record);
                }
            }

            Console.ReadKey();
        }
Пример #2
0
        private void btn重新同步_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("重新同步后需重新审核,确实重新同步吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false) == DialogResult.Yes)
            {
                Thread.Sleep(200);

                CreateWaitDialog("正在同步...", "请耐心等待");
                //删除历史数据
                SalaryAuditingResult.ClearAuditingResult((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                //删除工资表
                PrivateSalary.ClearPrivateSalary((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                //清除旧的抽查记录
                PayCheckRecord.ClearPayCheckRecord((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                //同步基础工资
                StringBuilder sb = SalaryResult.SychSalaryResult((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                //同步工资明细
                StringBuilder sbItem = SalaryResultItem.SychSalaryResultItem((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                sb.Append(sbItem.ToString());

                CloseWaitDialog();

                MyHelper.WriteLog(LogType.信息, "重新同步上表工资", String.Format("日历组:{0}, {1}   薪资组: {2}, {3}", (string)cbb日历组.EditValue, cbb日历组.Text, (string)ccb薪资组.EditValue, ccb薪资组.Text));

                string msg = sb.ToString();
                if (string.IsNullOrEmpty(msg))
                {
                    LoadData(true);
                }
                else
                {
                    MessageBox.Show(msg);
                }
            }
            SetButtonEnabled();
        }
Пример #3
0
        public void LoadData(bool onlyPayGroup)
        {
            currRows.Clear();

            CreateWaitDialog("正在查询...", "请稍等");
            //清除原来的数据
            List <PayCheckRecord> items = PayCheckRecord.GetPayCheckRecordList(null, 日历组);

            if (items.Count == 0)
            {
                MessageBox.Show("没有找不到任何记录, 请生成工资表后重试。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                CloseWaitDialog();
                return;
            }

            //获取工资记录集合
            List <PrivateSalary> rows = new List <PrivateSalary>();

            foreach (PayCheckRecord item in items)
            {
                if (item.工资记录 != null)
                {
                    rows.Add(item.工资记录);
                }
            }
            //只显示有权看的
            foreach (PrivateSalary row in rows)
            {
                if (myPayGroupList.Find(a => a.英文名 == row.薪资组.Trim()) != null)
                {
                    currRows.Add(row);
                }
            }
            if (onlyPayGroup)
            {
                currRows = currRows.FindAll(a => a.薪资组 == (string)cb薪资组.EditValue);
                SetButtonEnabled();
            }
            //排序
            currRows = currRows.OrderBy(a => a.基础工资表.财务公司).ThenBy(a => a.基础工资表.财务部门序号).ThenBy(a => a.基础工资表.员工序号).ToList();

            CreateWaitDialog("正在加载...", "请稍等");

            gridControl1.DataSource = currRows;
            gridControl1.RefreshDataSource();

            CloseWaitDialog();

            bandedGridView1.ExpandAllGroups();
            gridControl1.Refresh();
        }
Пример #4
0
        //产生抽查记录
        private void GenerateCheckRecords()
        {
            int 最少抽查数 = (int)(员工工资计算器列表.Count * 0.1 + 0.9);
            var 薪等集合  = from p in 员工工资计算器列表
                        group p by p.评定职等 into g
                        select g;

            List <PrivateSalary> 候选的记录 = GetWaiting();
            List <PrivateSalary> 抽中的记录 = new List <PrivateSalary>();

            //每个薪资组选择一条记录
            foreach (var grade in 薪等集合)
            {
                List <PrivateSalary> items = 候选的记录.FindAll(a => a.评定职等 == grade.Key);
                if (items.Count > 0)
                {
                    Random        rdm          = new Random(unchecked ((int)DateTime.Now.Ticks));
                    int           x            = (int)rdm.Next(0, items.Count);
                    PrivateSalary selectedItem = items[x];
                    抽中的记录.Add(selectedItem);
                    //把选择的记录从候选表删除
                    候选的记录.Remove(selectedItem);
                }
            }
            //如果小于最少抽查数,继续抽查
            while (抽中的记录.Count < 最少抽查数 && 候选的记录.Count > 0)
            {
                Random        rdm          = new Random(unchecked ((int)DateTime.Now.Ticks));
                int           x            = (int)rdm.Next(0, 候选的记录.Count);
                PrivateSalary selectedItem = 候选的记录[x];
                抽中的记录.Add(selectedItem);
                //把选择的记录从候选表删除
                候选的记录.Remove(selectedItem);
            }
            //清除旧的抽查记录
            PayCheckRecord.ClearPayCheckRecord(日历组, 薪资组);
            //保存选中的记录
            foreach (PrivateSalary item in 抽中的记录)
            {
                PayCheckRecord rec = PayCheckRecord.AddPayCheckRecord(item.标识);
                rec.抽取时间 = DateTime.Now;
                rec.薪资组  = item.薪资组;
                rec.日历组  = item.日历组;
                rec.Save();
            }
        }
Пример #5
0
        private void btn审核_Click(object sender, EventArgs e)
        {
            //必须审核完抽查的记录才能正式审核
            ColumnView colView = (ColumnView)gridControl1.MainView;

            if (colView != null)
            {
                PrivateSalary currentItem = (PrivateSalary)colView.GetFocusedRow();
                if (currentItem != null)
                {
                    PayCheckRecord pcr = PayCheckRecord.GetPayCheckRecord(currentItem.标识);
                    if (pcr != null)
                    {
                        if (MessageBox.Show(currentItem.姓名 + " 的工资经核实无误吗?", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, 0, false) == DialogResult.Yes)
                        {
                            if (MessageBox.Show(currentItem.姓名 + " 的工资经核实无误吗?", "再次确认", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button2, 0, false) == DialogResult.Yes)
                            {
                                pcr.DoAuditing(AccessController.CurrentUser.姓名);

                                MyHelper.WriteLog(LogType.信息, "审核抽查的工资记录", pcr.ToString <PayCheckRecord>());

                                MessageBox.Show("当前记录已审核成功");
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("审核失败:找不到记录, 请重新打开后重试。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("审核失败:找不到工资记录, 请重新打开后重试。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }