示例#1
0
        public void ThucHienKetCong(object sender, WaitWindowEventArgs e)
        {
            #region

            string TemplateShiftParams = @"Ca: [{0}]; ID: [{1}]; Onn: [{2}]; Off: [{3}]; 
BD_NDVao: [{4}]; KT_NDVao: [{5}]; BD_NDRa: [{6}]; KT_NDRa: [{7}];
CPTre: [{8}]ph: [{9}]; CPSom: [{10}]ph: [{11}]; AfterOT: [{12}]ph: [{13}]; LunchMin: [{14}];
WKTime: [{15}]; WKDay: [{16}]; DayCount: [{17}]; QuaDem: [{18}];
CaMoRong: [{19}]; CaTuDo: [{20}]; TachCaDem: [{21}];";
            string templateThongTinCa = @"Thông tin ca [{10}] (ký hiệu [{11}]):  Vào ca lúc [{0}], Ra ca lúc [{1}], Ca [{2}], 
Ca làm việc [{3}] tiếng, được nghỉ trưa [{4}] phút, tính [{5}] công, 
cho phép trễ [{6}] phút, ra sớm [{7}] phút, thời gian làm thêm tối thiểu [{8}] phút, [{9}] qua xác nhận quản lý";
            string shiftParams = string.Empty, thongtinCa = string.Empty;

            #endregion

            DateTime         thang      = (DateTime)e.Arguments[0];
            List <cPhongBan> dsphongban = (List <cPhongBan>)e.Arguments[1];
            #region  lấy ngày BD và kết thúc

            DateTime ngaydauthang = MyUtility.FirstDayOfMonth(thang), ngaycuoithang = MyUtility.LastDayOfMonth(thang);
            var      ngayBD_Bef2D = ngaydauthang.AddDays(-2d);
            var      ngayKT_Aft2D = ngaycuoithang.AddDays(2d);

            #endregion

            try             //general try catch
            {
                // khởi tạo các nhân viên chấm công thuộc phòng ban check kết công (được thao tác) và tính toán công, phụ cấp
                XL.KhoiTaoDSNV_ChamCong(m_DSNV, (from cPhongBan item in dsphongban select item.ID).ToList(), dsphongban);
                XL.XemCong_v08(m_DSNV, ngayBD_Bef2D, ngayKT_Aft2D);
                // sau khi tính công xong thì cập nhật lại xử lý các trường hợp công nhật
                var tableCongNhat = DAO5.LayTableCongNhat(thang);
                foreach (DataRow row in tableCongNhat.Rows)
                {
                    int      macc   = (int)row["UserEnrollNumber"];
                    DateTime ngayBD = (DateTime)row["NgayBatDau"];
                    DateTime ngayKT = (DateTime)row["NgayKetThuc"];
                    var      nv     = m_DSNV.Find(o => o.MaCC == macc);            //tìm nv , ko tìm thấy thì tiếp tục
                    if (nv == null)
                    {
                        continue;
                    }
                    //duyệt qua các ngày công để set lại phụ cấp, xoá hết các ds vắng
                    float CongCongnhat = 0f;
                    foreach (var ngayCong in nv.DSNgayCong.Where(o => o.Ngay >= ngayBD && o.Ngay <= ngayKT))
                    {
                        ngayCong.PhuCaps = new PhuCap();
                        ngayCong.QuaDem  = false;
                        ngayCong.DSVang.Clear();
                        CongCongnhat += ngayCong.TongCong;
                    }
                    // cập nhật số ngày công công nhật xuống csdl
                    int kq1 = SqlDataAccessHelper.ExecNoneQueryString(" update DSNVChiCongNhatThang set SoNgayCong = @SoNgayCong where UserEnrollNumber= @UserEnrollNumber", new string[] { "@SoNgayCong", "@UserEnrollNumber" }, new object[] { CongCongnhat, macc });                    //info ko cần log
                    if (kq1 == 0)
                    {
                        MessageBox.Show(Resources.Text_CoLoi);
                    }
                }

                // xoá bỏ các kết công cũ của tháng (nếu có) để ghi kết công mới cho tháng
                int kq = DAO5.DelKetCongCa_Ngay(ngaydauthang, ngaycuoithang, (from nv in m_DSNV select nv.MaCC).ToList());
                //bool flagError = false;
                foreach (var nv in m_DSNV)
                {
                    foreach (var ngayCong in nv.DSNgayCong.Where(item => item.Ngay >= ngaydauthang && item.Ngay <= ngaycuoithang))
                    {
                        foreach (var CIO in ngayCong.DSVaoRa)
                        {
                            int kq1 = 0;
                            if (CIO.HaveINOUT < 0)
                            {
                                kq1 = DAO5.InsKetCongCa(nv.MaCC, ngayCong.Ngay,
                                                        (CIO.Vao != null) ? (DateTime?)CIO.Vao.Time : null,
                                                        (CIO.Raa != null) ? (DateTime?)CIO.Raa.Time : null,
                                                        null, string.Empty, null, null, null,
                                                        null, null,                                                   //ver 4.0.0.4	VaoTreLaCV, RaSomLaCV
                                                        null, null, string.Empty,
                                                        null, null, null, null, null, null, null, null, string.Empty, string.Empty, CIO.HaveINOUT, null);
                            }
                            else
                            {
                                #region tạo shiftParams

                                var sp = CIO.ThuocCa;
                                shiftParams = string.Format(TemplateShiftParams, sp.Code, sp.ID, sp.TOD_Duty.Onn.ToString(@"d\ hh\:mm"), sp.TOD_Duty.Off.ToString(@"d\ hh\:mm"),
                                                            //sp.TOD_NhanDienVao.Onn.ToString(@"d\ hh\:mm"), sp.TOD_NhanDienVao.Off.ToString(@"d\ hh\:mm"),
                                                            //sp.TOD_NhanDienRaa.Onn.ToString(@"d\ hh\:mm"), sp.TOD_NhanDienRaa.Off.ToString(@"d\ hh\:mm"),
                                                            sp.TS_PhutChoTre.Minutes, string.Empty /* sp.TOD_ChoPhepTreSom.Onn.ToString(@"d\ hh\:mm")*/,
                                                            sp.TS_PhutChoSom.Minutes, string.Empty /*sp.TOD_ChoPhepTreSom.Off.ToString(@"d\ hh\:mm")*/,
                                                            sp.TS_PhutAfterOT.Minutes, string.Empty /*sp.TOD_batdaulamthem.ToString(@"d\ hh\:mm")*/,
                                                            sp.TS_PhutNghiTrua.Minutes, sp.WorkingTimeTS.TotalMinutes.ToString("#####"),
                                                            sp.Workingday.ToString("0.0"), /*sp.DayCount*/ 0, Convert.ToInt32(sp.QuaDem),
                                                            Convert.ToInt32(sp.IsExtended), /*Convert.ToInt32(sp.Is_CaTuDo)*/ false, Convert.ToInt32(sp.TachCaDem));

                                thongtinCa = string.Format(templateThongTinCa,
                                                           sp.TOD_Duty.Onn.ToString(@"d\ hh\:mm"), sp.TOD_Duty.Off.ToString(@"d\ hh\:mm"), sp.Code, sp.WorkingTimeTS.TotalMinutes.ToString("#####"),
                                                           sp.TS_PhutNghiTrua.Minutes, sp.Workingday.ToString("0.0#"),
                                                           sp.TS_PhutChoTre.Minutes, sp.TS_PhutChoSom.Minutes, Convert.ToInt32(sp.TS_PhutAfterOT.TotalMinutes), CIO.DaXN ? "đã" : "chưa",
                                                           sp.Code, sp.KyHieuCC);

                                #endregion

                                kq1 = DAO5.InsKetCongCa(nv.MaCC, ngayCong.Ngay, CIO.Vao.Time, CIO.Raa.Time,
                                                        CIO.ThuocCa.ID, CIO.ThuocCa.Code, CIO.DaXN, CIO.DuyetChoPhepVaoTre, CIO.DuyetChoPhepRaSom,
                                                        CIO.VaoTreTinhCV, CIO.RaaSomTinhCV,                                                   //ver 4.0.0.4
                                                        CIO.OTMin, CIO.QuaDem, CIO.ThuocCa.KyHieuCC, CIO.TG.GioLamViec5, CIO.TG.LamTangCuong, CIO.TG.LamBanDem, CIO.TG.GioThucTe5,
                                                        CIO.TG.VaoTre, CIO.TG.RaaSom,
                                                        CIO.TD.BD_LV, CIO.TD.KT_LV, thongtinCa, shiftParams,
                                                        CIO.HaveINOUT, CIO.Cong);
                            }
                        }
                        if (ngayCong.DSVaoRa.Count != 0)
                        {
                            int kq2 = DAO5.InsKetCongNgay(nv.MaCC, ngayCong.Ngay, ngayCong.TongCong, ngayCong.TongNgayLV, ngayCong.PhuCaps._TongPC,                             //ver4.0.0.1
                                                          ngayCong.PhuCaps._30_dem, ngayCong.PhuCaps._50_TC, ngayCong.PhuCaps._100_TCC3,
                                                          ngayCong.PhuCaps._100_LVNN_Ngay, ngayCong.PhuCaps._150_LVNN_Dem,
                                                          ngayCong.PhuCaps._200_LeTet_Ngay, ngayCong.PhuCaps._250_LeTet_Dem,
                                                          ngayCong.PhuCaps._Cus, ngayCong.TG.GioLamViec5, ngayCong.TG.LamTangCuong,
                                                          ngayCong.TG.LamBanDem, ngayCong.TG.GioThucTe5, ngayCong.QuaDem);
                        }
                    }
                }
                // sau khi ghi kết công thì cập nhật tình trạng kết công (đã kết công), đồng thời ghi log đã kết công
                DAO5.UpdInsKetCongBoPhan(ngaydauthang, (from cPhongBan item in dsphongban select item).ToList());
            } catch (Exception ex)             //general try catch
            {
                lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
        }