Exemple #1
0
        private void btnDaoKieuChamCong_Click(object sender, EventArgs e)
        {
            dgrdTongHop.EndEdit();
            DataTable table = (dgrdTongHop.DataSource) as DataTable;

            if (table == null)
            {
                return;
            }
            DataRow[] arrRecord = table.Select("check = true", "UserEnrollNumber asc");
            if (arrRecord.Length == 0)
            {
                AutoClosingMessageBox.Show("Chưa chọn dòng dữ liệu thao tác.", "Thông báo", 2000);
                return;
            }

            bool flag = false;

            foreach (DataRow row in arrRecord)
            {
                // kiểm tra trước khi thực hiện
                if (row["TimeStrVao"] != DBNull.Value && row["TimeStrRa"] != DBNull.Value)
                {
                    flag = true;
                    continue;
                }
                cUserInfo tmpNV   = flstDSNVChk.Find(item => item.UserEnrollNumber == (int)row["UserEnrollNumber"]);
                cNgayCong tmpNgay = tmpNV.DSNgayCong.Find(item => item.NgayCong == (DateTime)row["TimeStrNgay"]);
                DateTime  tmpOldTime;
                cChk      tmpChkOld;
                bool      tmpIsCheckInOld;
                if (row["TimeStrVao"] != DBNull.Value)
                {
                    tmpOldTime      = (DateTime)row["TimeStrVao"];
                    tmpChkOld       = tmpNV.ds_CheckAuto.Find(item => item.TimeStr == tmpOldTime && item.GetType() == typeof(cChkIn));
                    tmpIsCheckInOld = true;
                }
                else
                {
                    tmpOldTime      = (DateTime)row["TimeStrRa"];
                    tmpChkOld       = tmpNV.ds_CheckAuto.Find(item => item.TimeStr == tmpOldTime && item.GetType() == typeof(cChkOut));
                    tmpIsCheckInOld = false;
                }
                if (tmpChkOld == null)
                {
                    MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo");
                    continue;
                }

                if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpChkOld, tmpChkOld.TimeStr, !tmpIsCheckInOld, "Chấm nhầm máy", "Thay đổi Số máy check") == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                    break;
                }
            }

            if (flag)
            {
                AutoClosingMessageBox.Show("Không thể đảo ngược giờ có đủ giờ vào và giờ ra", "Thông báo", 2000);
            }

            try {
                XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT);
                loadTable();
            } catch (Exception) {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi");
            }
            GC.Collect();
        }
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            // lấy ngày check
            var ngayBD = dtpNgayBD.Value.Date;
            var ngayKT = dtpNgayKT.Value.Date;

            if (ngayBD > ngayKT)
            {
                MyUtility.Swap(ref ngayBD, ref ngayKT);
            }
            List <DateTime> DSNgayCheck = new List <DateTime>();

            for (DateTime indexNgay = ngayBD; indexNgay <= ngayKT; indexNgay = indexNgay.AddDays(1d))
            {
                DSNgayCheck.Add(indexNgay);
            }


            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(DSNgayCheck[0], DSNgayCheck[DSNgayCheck.Count - 1]))
            {
                MessageBox.Show(String.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "khai báo vắng", "khai báo vắng", "khai báo vắng"),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            #region hỏi lại trước khi thực hiện
            if (MessageBox.Show(Resources.Text_XacNhanThemKhaiVang, Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            #endregion

            // lấy loại vắng
            if (cbLoaiVang.SelectedItem == null)
            {
                ACMessageBox.Show("Bạn chưa chọn loại vắng", "Thông báo", 2000);
                return;
            }
            var rowLV = cbLoaiVang.SelectedItem as DataRowView;

            var absentCode  = rowLV["AbsentCode"].ToString();
            var workingDay  = 1f;
            var workingTime = 8f;

            var formatString = "[{0}] đã xin phép vắng [{1}] [{2}] ngày ngày [{3}]";
            var tableVang    = DAO5.LietKeNgayVangChoNV(listMaCC_NV, DSNgayCheck.Min(), DSNgayCheck.Max());

            if (tableVang.Rows.Count > 0)
            {
                List <Warning> listWarning = new List <Warning>();
                foreach (var nv in listMaCC_NV)                  //duyệt từng nhân viên
                {
                    foreach (var ngay in DSNgayCheck)            // duyệt từng ngày check vắng của nhân viên
                    {
                        DateTime ngay1  = ngay;
                        int      nv1    = nv;
                        var      result = (from DataRow item in tableVang.Rows
                                           where (int)item["UserEnrollNumber"] == nv1 && (DateTime)item["TimeDate"] == ngay1
                                           select item).ToList();                                // lấy danh sách các xin phép vắng trong ngày xác định
                        if (result.Any())
                        {
                            // nếu có xin phép vắng thì ghi lại chuỗi các xin phép vắng đó
                            var userfullname = result[0]["UserFullName"].ToString();
                            listWarning.AddRange(result.Select(row123 => new Warning()
                            {
                                CB = "Đã có xin phép vắng",
                                ND = string.Format(formatString, userfullname, row123["AbsentCode"],
                                                   ((float)row123["Workingday"]).ToString("0.0"),
                                                   ((DateTime)row123["TimeDate"]).ToString("dd/MM/yyyy"))
                            }));
                        }
                    }
                }

                // hiện form cảnh báo, nếu xác nhận tiếp tục thì thực hiện , ko thì dừng
                frmWarning frm = new frmWarning {
                    listWarning = listWarning, WindowState = FormWindowState.Normal, StartPosition = FormStartPosition.CenterParent
                };
                //Point temp = XL2.GetCenterLocation(this.MdiParent.Size.Width, this.MdiParent.Size.Height, frm.Size.Width, frm.Size.Height);
                //frm.Location = new Point(this.MdiParent.Location.X + temp.X, this.MdiParent.Location.Y + temp.Y);
                frm.ShowDialog();
                if (frm.TiepTuc == false)
                {
                    return;
                }
            }

            IsReload = true;
            IEnumerable <dynamic> listMaCC_NgayVang = (from macc in listMaCC_NV
                                                       from ngay in DSNgayCheck
                                                       select new { MaCC = macc, NgayVang = ngay });

            List <Error> listError = new List <Error>();
            XL.ThemNgayVang(listMaCC_NgayVang, workingDay, workingTime, absentCode, listError);
            if (listError.Count > 0)
            {
                frmError frm = new frmError {
                    StartPosition = FormStartPosition.CenterParent, listError = listError
                };
                frm.ShowDialog();
            }

            Close();
        }
Exemple #3
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 = DAO.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_4008;
                    }
                    // 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 and Thang=@Thang", new string[] { "@SoNgayCong", "@UserEnrollNumber", "@Thang" }, new object[] { CongCongnhat, macc, ngaydauthang });                    //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 = DAO.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 = DAO.InsKetCongCa(nv.MaCC, ngayCong.Ngay,
                                                       (CIO.Vao != null) ? (DateTime?)CIO.Vao.Time : null,
                                                       (CIO.Raa != null) ? (DateTime?)CIO.Raa.Time : null,
                                                       null, string.Empty, false, false, false,
                                                       false, false,                                                    //ver 4.0.0.4	VaoTreLaCV, RaSomLaCV
                                                       false, false, false, 0f, false, 0f,                              //ver 4.0.0.8@BuGioTre, @BuGioSom, @BuPhepTre, @CongBuPhepTre, @BuPhepSom, @CongBuPhepSom,
                                                       0f, 0f, 0f, 0f, 0f, 0f,                                          //ver 4.0.0.8 CongTrongCa, CongNgoaiCa, TruCongTreVR, TruCongSomVR, TruCongTreBu, TruCongSomBu,
                                                       0, false, string.Empty,
                                                       null, null, null, null, null, null, null, null, string.Empty, string.Empty, CIO.HaveINOUT, 0f);
                            }
                            else
                            {
                                #region tạo shiftParams

                                var sp = CIO.ThuocCa;
                                shiftParams = string.Format(TemplateShiftParams, sp.Code, sp.ID, sp.Duty.Onn.ToString(@"d\ hh\:mm"), sp.Duty.Off.ToString(@"d\ hh\:mm"),
                                                            sp.NhanDienVao.Onn.ToString(@"d\ hh\:mm"), sp.NhanDienVao.Off.ToString(@"d\ hh\:mm"),
                                                            sp.NhanDienRaa.Onn.ToString(@"d\ hh\:mm"), sp.NhanDienRaa.Off.ToString(@"d\ hh\:mm"),
                                                            sp.LateeMin.Minutes, sp.chophepTreTS.ToString(@"d\ hh\:mm"),
                                                            sp.EarlyMin.Minutes, sp.chophepSomTS.ToString(@"d\ hh\:mm"),
                                                            sp.AfterOTMin.Minutes, sp.batdaulamthemTS.ToString(@"d\ hh\:mm"),
                                                            sp.LunchMin.Minutes, sp.WorkingTimeTS.TotalMinutes.ToString("#####"),
                                                            sp.Workingday.ToString("0.0"), sp.DayCount, Convert.ToInt32(sp.QuaDem),
                                                            Convert.ToInt32(sp.IsExtended), Convert.ToInt32(sp.Is_CaTuDo), Convert.ToInt32(sp.TachCaDem));

                                thongtinCa = string.Format(templateThongTinCa,
                                                           sp.Duty.Onn.ToString(@"d\ hh\:mm"), sp.Duty.Off.ToString(@"d\ hh\:mm"), sp.Code, sp.WorkingTimeTS.TotalMinutes.ToString("#####"),
                                                           sp.LunchMin.Minutes, sp.Workingday.ToString("0.0#"),
                                                           sp.LateeMin.Minutes, sp.EarlyMin.Minutes, Convert.ToInt32(sp.AfterOTMin.TotalMinutes), CIO.DaXN ? "đã" : "chưa",
                                                           sp.Code, sp.KyHieuCC);

                                #endregion

                                kq1 = DAO.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.ChoBuGioTre, CIO.ChoBuGioSom, CIO.ChoBuPhepTre, CIO.BuCongPhepTreCongDon, CIO.ChoBuPhepSom, CIO.BuCongPhepSomCongDon, //ver 4.0.0.8
                                                       CIO.CongTrongCa, CIO.CongNgoaiCa, CIO.TruCongTreVR, CIO.TruCongSomVR, CIO.TruCongTreBu, CIO.TruCongSomBu,                 //ver 4.0.0.8
                                                       CIO.OTMin, CIO.QuaDem, CIO.ThuocCa.KyHieuCC, CIO.TG.GioLamViec, CIO.TG.LamThem, CIO.TG.LamBanDem, CIO.TG.GioThuc,
                                                       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 = DAO.InsKetCongNgay(nv.MaCC, ngayCong.Ngay, ngayCong.TongCong_4008, /*ngayCong.TongNgayLVtest*/ 0f, ngayCong.PhuCaps._TongPC,                            //ver4.0.0.1 //ver 4.0.0.8 ngayCong.TongCong_4008,TongNgayLV=0f
                                                         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.GioLamViec, ngayCong.TG.LamThem,
                                                         ngayCong.TG.LamBanDem, ngayCong.TG.GioThuc, ngayCong.QuaDem,
                                                         ngayCong.CongDinhMucDuoi8Tieng, ngayCong.CongTichLuy, ngayCong.TruCongTreVR, ngayCong.TruCongSomVR,                                                 //ver 4.0.0.8
                                                         ngayCong.TruCongTreBu, ngayCong.TruCongSomBu, ngayCong.CongBuPhepTre, ngayCong.CongBuPhepSom                                                        //ver 4.0.0.8
                                                         );
                        }

                        //tbd fix lỗi phụ cấp công tác những ngày ko có làm việc
                        else
                        {
                            if (ngayCong.DSVang.Count != 0)
                            {
                                int kq2 = DAO.InsKetCongNgay(nv.MaCC, ngayCong.Ngay, ngayCong.TongCong_4008, /*ngayCong.TongNgayLVtest*/ 0f, ngayCong.PhuCaps._TongPC,                                //ver4.0.0.1 //ver 4.0.0.8 ngayCong.TongCong_4008,TongNgayLV=0f
                                                             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.GioLamViec, ngayCong.TG.LamThem,
                                                             ngayCong.TG.LamBanDem, ngayCong.TG.GioThuc, ngayCong.QuaDem,
                                                             ngayCong.CongDinhMucDuoi8Tieng, ngayCong.CongTichLuy, ngayCong.TruCongTreVR, ngayCong.TruCongSomVR,                                             //ver 4.0.0.8
                                                             ngayCong.TruCongTreBu, ngayCong.TruCongSomBu, ngayCong.CongBuPhepTre, ngayCong.CongBuPhepSom                                                    //ver 4.0.0.8
                                                             );
                            }
                        }
                    }
                }
                // 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
                DAO.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);
            }
        }
Exemple #4
0
        private void btnXacNhan_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                ACMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            var loai = 0;
            var temp = string.Empty;

            if (radKhongPC50.Checked)
            {
                loai = -1;
            }
            else if (radPC50.Checked)
            {
                loai = 1;
            }

            #region hỏi lại trước khi thực hiện

            if (loai == -1)
            {
                if (MessageBox.Show(Resources.Text_CancelXacNhan_PCTC50, Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel)
                {
                    return;
                }
            }
            else
            {
                if (MessageBox.Show(Resources.Text_XNPCTC50, Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel)
                {
                    return;
                }
            }

            #endregion

            IsReload = true;

            foreach (var row in m_arrRecd)
            {
                var nhanvien = (cUserInfo)row["cUserInfo"];
                var ngay     = (DateTime)row["TimeStrNgay"];
                var ngayCong = (cNgayCong)row["cNgayCong"];
                //if (ngay <= XL2.NgayCuoiThangKetCong && XL2.NgayCuoiThangKetCong != DateTime.MinValue) continue;//tbd temp patch// ko thực hiện đối với các ngày trong tháng đã kết công
                if (loai == -1)
                {
                    XL.CheckTinhPC50_UpdORInsNew_Sort(nhanvien, ngay, false);
                    XL.TinhPCTC_CuaNgay(ngayCong, false);
                    XL.TinhPCDB_CuaNgay(ngayCong, nhanvien.DSXNPhuCapDB);
                    XL.TinhPCNgayVang(ngayCong);
                }
                else
                {
                    XL.CheckTinhPC50_UpdORInsNew_Sort(nhanvien, ngay, true);
                    XL.TinhPCTC_CuaNgay(ngayCong, true);
                    XL.TinhPCDB_CuaNgay(ngayCong, nhanvien.DSXNPhuCapDB);
                    XL.TinhPCNgayVang(ngayCong);
                }
                //XL.TinhPCTC_CuaNgay(ngayCong, nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong);
                //XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong);
            }
            this.Close();
        }
Exemple #5
0
        private void ChuanBiDSLichTrinhVaCa()
        {
            XL.DSLichTrinh.Clear();
            XL.DSCa.Clear();
            XL.DSCaMoRong.Clear();

            // lấy danh sách lịch trình, mỗi dòng là 1 ca thuộc lịch trình => để duyệt từng lịch trình thì phải lấy dicstint
            var tableLichTrinh = DAL.LayDSLichTrinh();
            var tableDSCa      = DAL.LayDSCa();

            foreach (DataRow row in tableDSCa.Rows)
            {
                #region transfer dữ liệu từ row sang đối tượng
                var iShiftID   = (int)row["ShiftID"];
                var sShiftCode = row["ShiftCode"].ToString();

                TimeSpan tsOnDuty;
                TimeSpan.TryParse(row["Onduty"].ToString(), out tsOnDuty);
                TimeSpan tOffDuty;
                TimeSpan.TryParse(row["Offduty"].ToString(), out tOffDuty);
                var iDayCount = (int)row["DayCount"];
                tOffDuty = tOffDuty.Add(new TimeSpan(iDayCount, 0, 0, 0));

                var tOnTimeIn = tsOnDuty.Subtract(new TimeSpan(0, (int)row["OnTimeIn"], 0));
                var tCutIn    = tsOnDuty.Add(new TimeSpan(0, (int)row["CutIn"], 0));

                // phải add thêm 1 ngày daycount vì trong dữ liệu chỉ có chuỗi giờ thô : 05:45 không có ngày
                var tOnTimeOut = tOffDuty.Subtract(new TimeSpan(0, (int)row["OnTimeOut"], 0));
                var tCutOut    = tOffDuty.Add(new TimeSpan(0, (int)row["CutOut"], 0));

                var tAfterOT    = new TimeSpan(0, (int)row["AfterOT"], 0);
                var tLateGrace  = new TimeSpan(0, (int)row["LateGrace"], 0);
                var tEarlyGrace = new TimeSpan(0, (int)row["EarlyGrace"], 0);

                var tOnLunch  = XL2._0gio;
                var tOffLunch = XL2._0gio;
                if (row["OnLunch"] != DBNull.Value && row["OffLunch"] != DBNull.Value)
                {
                    TimeSpan.TryParse(row["OnLunch"].ToString(), out tOnLunch);
                    TimeSpan.TryParse(row["OffLunch"].ToString(), out tOffLunch);
                }

                var iShowPosition   = (int)row["ShowPosition"];
                var tempWorkingTime = int.Parse(row["WorkingTime"].ToString());
                var kyhieucc        = row["KyHieuCC"].ToString();
                var tempShift       = new cCaChuan {
                    ID              = iShiftID,
                    Code            = sShiftCode,
                    DayCount        = iDayCount,
                    QuaDem          = (iDayCount == 1),
                    OnnTS           = tsOnDuty,
                    OffTS           = tOffDuty,
                    OnnInnTS        = tOnTimeIn,
                    CutInnTS        = tCutIn,
                    OnnOutTS        = tOnTimeOut,
                    CutOutTS        = tCutOut,
                    AfterOTMin      = tAfterOT,
                    LateeMin        = tLateGrace,
                    EarlyMin        = tEarlyGrace,
                    Workingday      = (Single)row["Workingday"],
                    ShowPosition    = iShowPosition,
                    WorkingTimeTS   = new TimeSpan(0, tempWorkingTime, 0),
                    chophepTreTS    = tsOnDuty.Add(tLateGrace),
                    chophepSomTS    = tOffDuty - tEarlyGrace,
                    batdaulamthemTS = tOffDuty + tAfterOT,                    //[TBD] thay tOffDuty + XL2._30phut thành tempOffDuty + tempAfterOT --> đã thay
                    LunchMin        = tOffLunch.Subtract(tOnLunch),
                    KyHieuCC        = kyhieucc,
                };
                #endregion

                XL.DSCa.Add(tempShift);
            }
            var ca3va1 = XL.DSCa.Find(o => o.OnnTS == XL2._21h45 && o.Workingday == 2f);
            if (ca3va1 != null)
            {
                ca3va1.TachCa = true;
                var ca3 = XL.DSCa.Find(o => o.OnnTS == XL2._21h45 && o.Workingday == 1f);
                var ca1 = XL.DSCa.Find(o => o.OnnTS == XL2._05h45 && o.Workingday == 1f);
                ((cCaChuan)ca3va1).catruoc = ca3 as cCaChuan;
                ((cCaChuan)ca3va1).casauuu = ca1 as cCaChuan;
            }


            IEnumerable <DataRow> arrRows = tableLichTrinh.Rows.Cast <DataRow>();
            var arrRows_Distinct          = (from row in arrRows select new { a = (int)(row["SchID"]), b = row["SchName"].ToString() }).Distinct();
            foreach (var row in arrRows_Distinct)
            {
                var arrRows1  = tableLichTrinh.Select("SchID=" + row.a, "");
                var lichtrinh = new cShiftSchedule {
                    SchID = row.a, TenLichTrinh = row.b, DSCa = new List <cCaAbs>(), DSCaMoRong = new List <cCaAbs>()
                };
                foreach (var row1 in arrRows1)
                {
                    var shiftid = (int)row1["T1"];
                    var ca      = XL.DSCa.Find(o => o.ID == shiftid);
                    if (ca != null)
                    {
                        lichtrinh.DSCa.Add(ca);
                    }
                }
                lichtrinh.DSCaMoRong = XL.TaoDSCaMoRong(lichtrinh.DSCa);
                XL.DSLichTrinh.Add(lichtrinh);
            }


            if (XL.DSLichTrinh.Count == 0)
            {
                throw new NullReferenceException("Không có ds lịch trình");
            }
        }
Exemple #6
0
        private void btnTinhLuongVaXuatBB_Click(object sender, EventArgs e)
        {
            DateTime thang  = new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, 1);
            DateTime ngayBD = new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, 1);
            DateTime ngayKT = new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, DateTime.DaysInMonth(dtpThang.Value.Year, dtpThang.Value.Month));

            ngayBD = ngayBD.AddDays(-1d);
            ngayKT = ngayKT.AddDays(2d).Subtract(new TimeSpan(0, 0, 1));
            DataTable        tableAllDSNV = SqlDataAccessHelper.ExecuteQueryString(ThamSo.SelStrLayDSNV(), null, null);
            List <cUserInfo> dsnv         = new List <cUserInfo>();

            KhoitaoDSNV(tableAllDSNV, dsnv);

            XL.XemCong(dsnv, ngayBD, ngayKT);
            double dsanluong      = (double)(numSanLuong.Value);
            double ddongia        = (double)numDonGia.Value;
            double dluongtoithieu = (double)numLuongTT.Value;
            double dcongnhat      = (double)numLuongCongNhat.Value;
            double dboiduongca3   = (double)numBoiDuongCa3.Value;

            XL.DocLuongDieuChinh(thang, dsnv);
            XL.TinhLuong(thang, dsnv, ddongia, dsanluong, dluongtoithieu, dcongnhat, dboiduongca3);

            saveFileDialog.Filter = "Excel File|*.xlsx";
            saveFileDialog.ShowDialog();
            if (saveFileDialog.FileName == string.Empty)
            {
                return;
            }

            using (ExcelPackage p = new ExcelPackage()) {
                //Create a sheet
                p.Workbook.Worksheets.Add("Bang Luong");
                ExcelWorksheet ws = p.Workbook.Worksheets[1];
                ws.Name = "Bang Luong";                        //Setting Sheet's name
                ws.Cells.Style.Font.Size = 8;                  //Default font size for whole sheet
                ws.Cells.Style.Font.Name = "Times News Roman"; //Default Font name for whole sheet

                ws.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                ws.Cells.Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                //Merging cells and create a center heading for out table

                int iLastRow = 0, iLastCol = 0;
                ws.Cells[2, 1].Value           = "STT";
                ws.Cells[2, 2].Value           = "Tên NV";
                ws.Cells[2, 3].Value           = "Mã CC";
                ws.Cells[2, 4].Value           = "T.Công";
                ws.Cells[2, 5].Value           = "T.PC";
                ws.Cells[2, 6].Value           = "Công CV";
                ws.Cells[2, 7].Value           = "Lương CB";
                ws.Cells[2, 8].Value           = "Làm qua đêm";
                ws.Cells[2, 9].Value           = "Bồi dưỡng ca 3";
                ws.Cells[2, 10].Value          = "Lương SP";
                ws.Cells[2, 11].Value          = "Điều chỉnh lương tháng trước";
                ws.Cells[2, 12].Value          = "Tổng lương";
                ws.Cells[2, 1].Style.WrapText  = true;
                ws.Cells[2, 2].Style.WrapText  = true;
                ws.Cells[2, 3].Style.WrapText  = true;
                ws.Cells[2, 4].Style.WrapText  = true;
                ws.Cells[2, 5].Style.WrapText  = true;
                ws.Cells[2, 6].Style.WrapText  = true;
                ws.Cells[2, 7].Style.WrapText  = true;
                ws.Cells[2, 8].Style.WrapText  = true;
                ws.Cells[2, 9].Style.WrapText  = true;
                ws.Cells[2, 10].Style.WrapText = true;
                ws.Cells[2, 11].Style.WrapText = true;
                ws.Cells[2, 12].Style.WrapText = true;


                for (int iRow = 3, index = 0; index < dsnv.Count; iRow++, index++)
                {
                    cUserInfo nv = dsnv[index];
                    ws.Cells[iRow, 1].Value  = index + 1;
                    ws.Cells[iRow, 2].Value  = nv.UserFullName;
                    ws.Cells[iRow, 3].Value  = nv.UserEnrollNumber;
                    ws.Cells[iRow, 4].Value  = nv.TongCongThang.ToString();                          //;
                    ws.Cells[iRow, 5].Value  = nv.TongPCapThang.ToString();                          //;
                    ws.Cells[iRow, 6].Value  = nv.TongCongCV.ToString("#0.#");                       //;
                    ws.Cells[iRow, 7].Value  = nv.Luong.LuongCB.ToString("###,###,##0.###");         //;
                    ws.Cells[iRow, 8].Value  = nv.TongNgayQuaDem.ToString("#0");                     //;
                    ws.Cells[iRow, 9].Value  = nv.Luong.BoiDuongQuaDem.ToString("###,##0");          //;
                    ws.Cells[iRow, 10].Value = nv.Luong.LuongSP.ToString("###,###,##0.###");         //;
                    ws.Cells[iRow, 11].Value = nv.Luong.LuongThangTruoc.ToString("###,###,##0.###"); //;
                    ws.Cells[iRow, 12].Value = nv.Luong.TongLuong.ToString("###,###,##0.###");       //;
                    ws.Cells[iRow, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 4].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 5].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 6].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 7].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 8].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 9].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 10].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 11].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    ws.Cells[iRow, 12].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                }
                ws.Column(1).Width                    = 4;
                ws.Column(2).Width                    = 18;
                ws.Column(3).Width                    = 6;
                ws.Column(4).Width                    = 8;
                ws.Column(5).Width                    = 8;
                ws.Column(6).Width                    = 8;
                ws.Column(7).Width                    = 11.5;
                ws.Column(8).Width                    = 8;
                ws.Column(9).Width                    = 10;
                ws.Column(10).Width                   = 11.5;
                ws.Column(11).Width                   = 11.5;
                ws.Column(12).Width                   = 15;
                ws.Cells[1, 1, 1, 12].Value           = "Bảng lương tháng " + dtpThang.Value.ToString("MM/yyyy");
                ws.Cells[1, 1, 1, 12].Style.Font.Bold = true;
                ws.Cells[1, 1, 1, 12].Style.Font.Size = 14;
                ws.Cells[1, 1, 1, 12].Merge           = true;
                ws.Cells[2, 1, 2, 12].Style.Font.Bold = true;


                Byte[] bin = p.GetAsByteArray();

                string file_path = saveFileDialog.FileName;

                File.WriteAllBytes(file_path, bin);
            }
            saveFileDialog.FileName = string.Empty;
        }
Exemple #7
0
        private void btnSuaa_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;
            var timespanGioVao = dtpVao.Value.TimeOfDay;
            var timespanGioRaa = dtpRaa.Value.TimeOfDay;
            var lydo           = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText;
            var ghichu         = tbGhiChu.Text;

            if (dgrdDSGioVaoRa.SelectedRows.Count == 0)
            {
                return;
            }

            #region hỏi lại trước khi sửa

            if (radGioVao.Checked)
            {
                if (MessageBox.Show(string.Format(Resources.xacNhanSuaGioHangLoat, "vào", dtpVao.Value.ToString("H:mm")),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }
            else
            {
                if (MessageBox.Show(string.Format(Resources.xacNhanSuaGioHangLoat, "ra", dtpRaa.Value.ToString("H:mm")),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }

            #endregion

            var flagThongBao = false;             // flag thông báo không cho phép sửa giờ đã CN
            IEnumerable <DataGridViewRow> dataGridViewRows = dgrdDSGioVaoRa.SelectedRows.Cast <DataGridViewRow>();
            var arrRecord = (from row in dataGridViewRows
                             let nv = (cUserInfo)(((DataRowView)row.DataBoundItem).Row["cUserInfo"])
                                      let cChkInOut = (cChkInOut)(((DataRowView)row.DataBoundItem).Row["cChkInOut"])
                                                      let ngay = (DateTime)(((DataRowView)row.DataBoundItem).Row["TimeStrNgay"])
                                                                 select new { nhanvien = nv, CIO = cChkInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList();
            var ds_raa3_vao1     = new List <cChk>();
            var DS_Check_KoHopLe = new List <cChk>();
            foreach (var group in arrRecord)
            {
                var nhanvien = group.Key;
                foreach (var item in group)
                {
                    if (item.CIO.GetType() == typeof(cChkInOut_V))
                    {
                        flagThongBao = true;
                        continue;
                    }
                    if (radGioVao.Checked)
                    {
                        if (item.CIO.HaveINOUT == -2)
                        {
                            continue;
                        }
                        var giovao      = item.Ngay.Add(timespanGioVao);
                        var checkinnold = item.CIO.Vao;
                        var checkinnnew = new cChkInn_A {
                            MaCC    = nhanvien.MaCC, Type = "I", Time = giovao, Source = "PC", MachineNo = 21, IsEdited = 1,
                            PhucHoi = new cPhucHoi {
                                IDGioGoc = int.MaxValue, Them = checkinnold.PhucHoi.Them, Xoaa = checkinnold.PhucHoi.Xoaa
                            }
                        };
                        XL.SuaGioChoNV(checkinnold, checkinnnew, nhanvien, XL2.currUserID, lydo, ghichu);
                    }
                    else
                    {
                        if (item.CIO.HaveINOUT == -1)
                        {
                            continue;
                        }
                        var gioraa      = item.Ngay.Add(timespanGioRaa);
                        var checkoutold = item.CIO.Raa;
                        var checkoutnew = new cChkOut_A {
                            MaCC    = nhanvien.MaCC, Type = "O", Time = gioraa, Source = "PC", MachineNo = 22, IsEdited = 1,
                            PhucHoi = new cPhucHoi {
                                IDGioGoc = int.MaxValue, Them = checkoutold.PhucHoi.Them, Xoaa = checkoutold.PhucHoi.Xoaa
                            }
                        };
                        XL.SuaGioChoNV(checkoutold, checkoutnew, nhanvien, XL2.currUserID, lydo, ghichu);
                    }
                }
                XL.SapXepDS_Check(new[] { nhanvien.DS_Check_A });
                XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                if (nhanvien.DS_Check_KoHopLe.Count > 0)
                {
                    DS_Check_KoHopLe.AddRange(nhanvien.DS_Check_KoHopLe);
                    nhanvien.DS_Check_KoHopLe.Clear();
                }

                XL.GhepCIO_A(nhanvien.DS_Check_A, nhanvien.DS_CIO_A);
                XL.LoaiBoCIOKoHopLe(nhanvien.DS_CIO_A, nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                XL.XetCa_CIO_A(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien.DS_Check_A);
                XL.TronDS_CIO_A_V(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa);
                XL.TinhCongTheoNgay(nhanvien.DSVaoRa, nhanvien.NgayCongBD_Bef2D, nhanvien.NgayCongKT_Aft2D, nhanvien.DSVang, nhanvien.DSNgayCong, nhanvien.MacDinhTinhPC50);
                XL.TinhLaiPhuCapTC(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong);
                XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong);
            }
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            loadGrid();
            if (flagThongBao)
            {
                AutoClosingMessageBox.Show("Không thể sửa các giờ đã xác nhận.", "Thông báo", 2000);
            }
        }
Exemple #8
0
        private void btnThucHien_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            // kiểm tra chọn ca làm việc chưa? chưa thì báo
            cCaAbs ca = cbCa.SelectedItem as cCaAbs;

            if (ca == null || cbCa.SelectedIndex == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn ca làm việc.", "Thông báo", 1500);
                return;
            }

            //đã chọn ca làm việc
            var      ngay       = dtpNgay.Value.Date;
            TimeSpan timespanBD = dtpBDLam.Value.TimeOfDay;
            TimeSpan timeSpanKT = dtpKTLam.Value.TimeOfDay;
            var      timeBD     = ngay.Add(timespanBD);
            var      timeKT     = ngay.Add(timeSpanKT);

            if (timespanBD > timeSpanKT)
            {
                timeKT = timeKT.AddDays(1d);
            }

            var sophutOT     = (checkXNLamThem.Checked && numSoPhutOT.Value > 0) ? (int)numSoPhutOT.Value : 0;
            var TinhPCTC     = (checkTinhPC150.Checked);
            var TreSomTinhCV = checkTreSomTinhCV.Checked;
            var giolam       = TimeSpan.Zero;
            var Cong         = 0d;
            var PhuCap       = 0d;

            if (ca.QuaDem && timespanBD < timeSpanKT && timespanBD < XL2._04h30)
            {
                timeBD = timeBD.AddDays(1d);
                timeKT = timeKT.AddDays(1d);
            }
            if (TinhToan(ngay, ca.ID, ca.WorkingTimeTS, ca.Workingday, ca.LunchMin, ngay.Add(ca.OnnTS), ngay.Add(ca.OffTS), ngay.Add(ca.chophepTreTS), ngay.Add(ca.chophepSomTS),
                         timeBD, timeKT, sophutOT, TinhPCTC, out giolam, out Cong, out PhuCap) == false)
            {
                tbGioLam.Text = giolam.TotalHours.ToString("#0.##");
                tbCong.Text   = Cong.ToString("0.0#");
                tbPC.Text     = PhuCap.ToString("0.0#");
                return;
            }

            #region hỏi lại trước khi thực hiện

            if (
                MessageBox.Show(
                    "Bạn muốn thêm các giờ chấm công tay cho các nhân viên?\nVui lòng kiểm tra kỹ thời gian nhập để không làm sai lệch công của nhân viên.",
                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion


            // kiểm tra chọn NV chưa, chưa thì báo
            DataView tableCheckNV = dgrdDSNVTrgPhg.DataSource as DataView;
            if (tableCheckNV == null)
            {
                return;
            }
            DataRow[] arrRows = tableCheckNV.Table.Select("check = true", "UserEnrollNumber asc");
            if (arrRows.Length == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn nhân viên.", "Thông báo", 1500);
                return;
            }

            // đã chọn NV, lấy ds mã CC đã chọn
            string lydo   = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText;
            string ghichu = tbGhiChu.Text;

            bool flag = true;

            try {
                foreach (DataRow row in arrRows)
                {
                    //dsNVcheck.Add((int)row["UserEnrollNumber"]);
                    int iUserEnrollNumber = (int)row["UserEnrollNumber"];
                    if (ca.ID == int.MinValue)
                    {
                        XL.TaoCaTuDo((cCaTuDo)ca, timeBD, XL2._08gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1f, "8");
                    }
                    else if (ca.ID == int.MinValue + 1)
                    {
                        XL.TaoCaTuDo((cCaTuDo)ca, timeBD, XL2._12gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1.5f, "D");
                    }

                    if (checkXNLamThem.Checked || TinhPCTC || TreSomTinhCV)                     //1.có XN làm thêm --> thêm giờ XN,  2.không xác nhận làm thêm thì thêm giờ A
                    {
                        var nv = new cUserInfo {
                            MaCC = iUserEnrollNumber, NgayCongBD_Bef2D = ngay.Date.AddDays(-2d), NgayCongKT_Aft2D = ngay.Date.AddDays(2d)
                        };
                        var chkinn = new cChkInn_A {
                            Time = timeBD, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        };

                        var chkout = new cChkOut_A {
                            Time = timeKT, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        };
                        var cio_a = new cChkInOut_A {
                            Vao           = chkinn,
                            Raa           = chkout,
                            HaveINOUT     = 1,
                            ThuocCa       = ca,
                            TimeDaiDien   = chkinn.Time,
                            ThuocNgayCong = XL.ThuocNgayCong(chkinn.Time),
                            TD            = new ThoiDiem()
                        };
                        if (cio_a.ThuocNgayCong <= XL2.ThangKetCong && XL2.ThangKetCong != DateTime.MinValue)
                        {
                            continue;                                                                                                           //tbd temp patch
                        }
                        nv.DS_CIO_A.Add(cio_a);
                        XL.ThemGioChoNV(chkinn, nv, XL2.currUserID, lydo, ghichu);
                        XL.ThemGioChoNV(chkout, nv, XL2.currUserID, lydo, ghichu);
                        if (ca.TachCa)
                        {
                            XL.XacNhanCoTachCa(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV);
                        }
                        else
                        {
                            XL.XacNhanKoTachCa(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV);
                        }
                    }
                    else                      //2.không xác nhận làm thêm thì thêm giờ A
                    {
                        if (timeBD.Date <= XL2.ThangKetCong && XL2.ThangKetCong != DateTime.MinValue)
                        {
                            continue;                                                                                                   //tbd temp patch
                        }
                        var nv = new cUserInfo {
                            MaCC = iUserEnrollNumber, NgayCongBD_Bef2D = ngay.Date.AddDays(-2d), NgayCongKT_Aft2D = ngay.Date.AddDays(2d)
                        };
                        XL.ThemGioChoNV(new cChkInn_A {
                            Time = timeBD, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        }, new cUserInfo {
                            MaCC = iUserEnrollNumber
                        }, XL2.currUserID, lydo, ghichu);
                        XL.ThemGioChoNV(new cChkOut_A {
                            Time = timeKT, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        }, new cUserInfo {
                            MaCC = iUserEnrollNumber
                        }, XL2.currUserID, lydo, ghichu);
                        XL.CheckTinhPC50(nv, (timeBD.TimeOfDay < XL2._04h30 ? timeBD.Date.AddDays(-1) : timeBD.Date), TinhPCTC);
                    }
                }
            } catch (Exception exception) {
                lg.Error("", exception);
            }
            if (flag)
            {
                AutoClosingMessageBox.Show("Thêm giờ chấm công tay cho các nhân viên thành công.", "Thông báo", 2000);
            }
        }
Exemple #9
0
        public bool TinhToan(DateTime ngay, int ShiftID, TimeSpan ShiftWorkingTime, double ShiftWorkingDay, TimeSpan LunchMin,
                             DateTime ThoiDiem_onnDuty, DateTime ThoiDiem_offDuty, DateTime ThoiDiem_ChoPhepTre, DateTime ThoiDiem_ChoPhepSom,
                             DateTime timeBD, DateTime timeKT, int sophutOT, bool tinhPCTC,
                             out TimeSpan tongGioLam, out double cong, out double phucap)
        {
            var tongGioThuc = TimeSpan.Zero;

            tongGioLam = TimeSpan.Zero;
            cong       = 0f;
            phucap     = 0f;

            tongGioThuc = timeKT - timeBD;
            if (tongGioThuc < XL2._30phut || tongGioThuc > XL2._24h00)
            {
                MessageBox.Show("Thời gian vào ra chưa hợp lệ. Vui lòng kiểm tra lại.");
                return(false);
            }
            sophutOT = (checkXNLamThem.Checked && numSoPhutOT.Value > 0) ? (int)numSoPhutOT.Value : 0;
            if (ShiftID == int.MinValue)
            {
                ThoiDiem_onnDuty    = timeBD;
                ThoiDiem_offDuty    = timeBD.Add(XL2._08gio);
                ThoiDiem_ChoPhepTre = ThoiDiem_onnDuty.Add(XL2.ChoPhepTre);
                ThoiDiem_ChoPhepSom = ThoiDiem_offDuty.Subtract(XL2.ChoPhepSom);
            }
            if (ShiftID == int.MinValue + 1)
            {
                ThoiDiem_onnDuty    = timeBD;
                ThoiDiem_offDuty    = timeBD.Add(XL2._12gio);
                ThoiDiem_ChoPhepTre = ThoiDiem_onnDuty.Add(XL2.ChoPhepTre);
                ThoiDiem_ChoPhepSom = ThoiDiem_offDuty.Subtract(XL2.ChoPhepSom);
            }
            if (ThoiDiem_offDuty < timeBD || timeKT < ThoiDiem_onnDuty)
            {
                MessageBox.Show("Thời gian vào ra chưa hợp lệ. Vui lòng kiểm tra lại.");
                return(false);
            }
            var ra_coOT = ThoiDiem_offDuty.Add(new TimeSpan(0, sophutOT, 0));

            if (timeKT < ra_coOT && sophutOT > 0)
            {
                MessageBox.Show("Giờ ra chưa được cộng thêm giờ làm thêm. Vui lòng kiểm tra lại.");
                return(false);
            }

            var vaolam      = DateTime.MinValue;
            var raalam      = DateTime.MinValue;
            var raalam_CoOT = DateTime.MinValue;
            var vaotre      = TimeSpan.Zero;
            var raasom      = TimeSpan.Zero;

            XL.Vao(timeBD, ThoiDiem_onnDuty, ThoiDiem_ChoPhepTre, out vaolam, out vaotre);
            XL.Raa(timeKT, ThoiDiem_offDuty, ThoiDiem_ChoPhepSom, out raalam, out raasom);
            XL.LamThem(raalam, new TimeSpan(0, sophutOT, 0), out raalam_CoOT);
            tongGioLam = raalam_CoOT - vaolam - LunchMin;
            cong       = (tongGioLam.TotalHours / ShiftWorkingTime.TotalHours) * ShiftWorkingDay;
            phucap     = (tinhPCTC) ? ((tongGioLam > XL2._08gio) ? ((tongGioLam - XL2._08gio).TotalHours / 8d) * (XL2.PC50 / 100d) : 0d)
                                                                : 0f;

            return(true);
        }
Exemple #10
0
        public List <cNgayCong> TinhCongTheoNgay(List <cChkInOut> pDSVaoRa, DateTime ngayBD, DateTime ngayKT, bool macdinhtinhpc50)
        {
            List <cNgayCong> kq = new List <cNgayCong>();
            DateTime         ngaydem;

            if (pDSVaoRa.Count == 0)
            {
                ngaydem = ngayBD.Date;
                while (ngaydem <= ngayKT)                   // <= vì lấy luôn ngày KT : vắng mặt
                {
                    cNgayCong ngayKOcheck = new cNgayCong()
                    {
                        NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                    };
                    kq.Add(ngayKOcheck);
                    ngaydem = ngaydem.AddDays(1d);
                }
                return(kq);
            }

            int vtriBD = 0;

            ngaydem = ngayBD.Date;

            while (ngaydem <= ngayKT.Date)
            {
                if (vtriBD >= pDSVaoRa.Count)                   // hết DS nhưng ngaydem <= ngày KT ==> ghi lại những ngày sau là vắng mặt
                {
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong ngayKOcheck = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(ngayKOcheck);
                        ngaydem = ngaydem.AddDays(1d);
                    }
                    continue;
                }

                // chưa hết DS, bắt đầu từ ngày của DSVaoRa tại vtbd, đó là ngày có mặt
                cChkInOut CIO = pDSVaoRa[vtriBD];
                XL.TinhCongTheoCa(CIO, CIO.ThuocCa);
                DateTime ngayCoMat = CIO.ThuocNgayCong;

                // ghi lại những ngày vắng mặt trước ngày có mặt
                while (ngaydem < ngayCoMat)                   // ko có = vì chỉ chạy đến trước ngày của tmpVaoRa thôi
                {
                    cNgayCong ngayKOcheck = new cNgayCong()
                    {
                        NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                    };
                    kq.Add(ngayKOcheck);
                    ngaydem = ngaydem.AddDays(1d);
                }
                //ngaydem = ngày có mặt. stop, tmpVaoRa là vào ra đầu tiên trong ngày
                #region collapse

                double    pcdem       = Convert.ToDouble(Properties.Settings.Default.PCDem / 100);
                double    pctc        = Convert.ToDouble(Properties.Settings.Default.PCTangCuong / 100);
                cNgayCong ngayCOcheck = new cNgayCong()
                {
                    HasCheck  = true,
                    NgayCong  = ngayCoMat,
                    TinhPC150 = macdinhtinhpc50,                    // mặc định khởi tạo ngày có tính PC 50%, nếu tồn tại ít nhất 1 ca nào ko tính pc 50% thì set cả ngày ko tính pc 50%
                    TG        = new ThoiGian()
                    {
                        LamTinhCong = CIO.TG.LamTinhCong, LamTinhPC30 = CIO.TG.LamTinhPC30
                    },
                    TongGioThuc = CIO.TongGioThuc,
                    TongTre     = CIO.VaoTre,
                    TongSom     = CIO.RaaSom,
                    TongCong    = Math.Round(CIO.Cong, 2),
                    PhuCap30    = Math.Round(((CIO.TG.LamTinhPC30.TotalHours > 0d)
                                        ? ((CIO.TG.LamTinhPC30.TotalHours / 8d) * pcdem)
                                        : 0d), 2)
                                  // công thức cũ (tính phụ cấp tăng ca theo công) là : + (((tmpVaoRa.Cong > 1f) ? (tmpVaoRa.Cong - 1f) * 0.5f : 0f))
                                  // đổi lại công thức mới (tính phụ cấp theo giờ) là : + (((tmpVaoRa.TGLamTinhCong.TotalHours > 8f) ? (((float)tmpVaoRa.TGLamTinhCong.TotalHours - 8f) / 8f) * 0.5f : 0f))
                };

                if (CIO.QuaDem == true)
                {
                    ngayCOcheck.QuaDem = true;                                     // set qua đêm nếu có
                }
                if (CIO.TinhPC150 != macdinhtinhpc50)
                {
                    ngayCOcheck.TinhPC150 = CIO.TinhPC150;
                }
                if (ngayCOcheck.TinhPC150)
                {
                    ngayCOcheck.PhuCap50 = Math.Round((((CIO.TG.LamTinhCong.TotalHours > 8d)
                                                                                                                   ? (((CIO.TG.LamTinhCong.TotalHours - 8d) / 8d) * pctc)
                                                                                                                   : 0d)), 2);
                }
                else
                {
                    ngayCOcheck.PhuCap50 = 0d;
                }

                ngayCOcheck.TongPhuCap = Math.Round((ngayCOcheck.PhuCap30 + ngayCOcheck.PhuCap50), 2);
                ngayCOcheck.them(CIO);
                #endregion


                // sau khi tạo ngày công mới vào ra đó là vào ra đầu tiên thì chuyển sang VAORA next
                vtriBD++;
                // nếu hết ds thì ngưng, add tmpNgayCong1 vào danh sách ngày công (do chưa add)
                if (vtriBD >= pDSVaoRa.Count)
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngayCOcheck.NgayCong.AddDays(1d);
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong ngayKOcheck = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(ngayKOcheck);
                        ngaydem = ngaydem.AddDays(1.0d);
                    }
                    continue;
                }
                // chưa hết DSVàoRa, xem các vào ra kế tiếp, nếu cùng ngày công thì add thêm vào tmpNgayCong1
                while (vtriBD < pDSVaoRa.Count && ThamSo.GetDate(pDSVaoRa[vtriBD].TimeStrDaiDien) == ngayCOcheck.NgayCong)
                {
                    cChkInOut CIO_1 = pDSVaoRa[vtriBD];
                    XL.TinhCongTheoCa(CIO_1, CIO_1.ThuocCa);

                    #region collapse
                    ngayCOcheck.TongGioThuc    += CIO_1.TongGioThuc;
                    ngayCOcheck.TG.LamTinhCong += CIO_1.TG.LamTinhCong;
                    ngayCOcheck.TG.LamTinhPC30 += CIO_1.TG.LamTinhPC30;
                    ngayCOcheck.TongTre        += CIO_1.VaoTre;
                    ngayCOcheck.TongSom        += CIO_1.RaaSom;
                    ngayCOcheck.TongCong       += Math.Round(CIO_1.Cong, 2);

                    ngayCOcheck.PhuCap30 = Math.Round(((ngayCOcheck.TG.LamTinhPC30.TotalHours > 0d)
                                                                                                   ? ((ngayCOcheck.TG.LamTinhPC30.TotalHours / 8d) * pcdem)
                                                                                                   : 0d), 2);
                    #endregion
                    if (CIO_1.QuaDem == true)
                    {
                        ngayCOcheck.QuaDem = true;                                           // set qua đêm nếu có
                    }
                    if (CIO_1.TinhPC150 != macdinhtinhpc50)
                    {
                        ngayCOcheck.TinhPC150 = CIO_1.TinhPC150;
                    }
                    if (ngayCOcheck.TinhPC150)
                    {
                        ngayCOcheck.PhuCap50 = Math.Round((((ngayCOcheck.TG.LamTinhCong.TotalHours > 8d)
                                                                                                                           ? (((ngayCOcheck.TG.LamTinhCong.TotalHours - 8d) / 8d) * pctc)
                                                                                                                           : 0d)), 2);
                    }
                    else
                    {
                        ngayCOcheck.PhuCap50 = 0d;
                    }

                    ngayCOcheck.TongPhuCap = Math.Round((ngayCOcheck.PhuCap30 + ngayCOcheck.PhuCap50), 2);
                    ngayCOcheck.them(CIO_1);

                    vtriBD++;
                }
                //thoát khỏi vòng lặp: hoặc hết ds hoặc chuyển sang ngày mới
                if (vtriBD >= pDSVaoRa.Count)
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngayCOcheck.NgayCong.AddDays(1d);
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong tmpNgayCong = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(tmpNgayCong);
                        ngaydem = ngaydem.AddDays(1d);
                    }
                }
                else
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngaydem.AddDays(1d);
                }
            }

            return(kq);
        }
        private void btnXacNhan_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            var loai   = 0;
            var pcngay = 0;
            var pcdem  = 0;
            var temp   = string.Empty;

            if (radKhongPC.Checked)
            {
                loai = -1;
            }
            else if (radPCNgayNghi.Checked)
            {
                loai   = 200;
                pcngay = XL2.PC100;
                pcdem  = XL2.PC160;
                temp   = "ngày nghỉ {0}% (ban ngày), {1}% (ban đêm)";
                temp   = string.Format(temp, XL2.PC100, XL2.PC160);
            }
            else if (radPCNgayLe.Checked)
            {
                loai   = 300;
                pcngay = XL2.PC200;
                pcdem  = XL2.PC290;
                temp   = "ngày lễ {0}% (ban ngày), {1}% (ban đêm), chưa kể công lễ, tết";
                temp   = string.Format(temp, XL2.PC200, XL2.PC290);
            }
            else if (radPCCus1.Checked)
            {
                loai   = 1;
                pcngay = (int)(numPCCus1.Value);
                temp   = "tuỳ chỉnh " + pcngay + "% cho giờ làm trên 8 tiếng";
            }
            else if (radPCCus2.Checked)
            {
                loai   = 2;
                pcngay = (int)(numPCCus2.Value);
                temp   = "tuỳ chỉnh " + pcngay + "% cho giờ làm";
            }

            #region hỏi lại trước khi thực hiện

            if (loai == -1)
            {
                if (MessageBox.Show(string.Format("Bạn muốn huỷ xác nhận tính phụ cấp {0}?", temp), Resources.Caption_XacNhan,
                                    MessageBoxButtons.OKCancel) == DialogResult.Cancel)
                {
                    return;
                }
            }
            else
            {
                if (MessageBox.Show(string.Format("Bạn muốn xác nhận các ngày làm việc vừa chọn tính phụ cấp {0}?", temp),
                                    Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel)
                {
                    return;
                }
            }

            #endregion

            IsReload = true;

            foreach (var row in m_arrRecd)
            {
                var nhanvien = (cUserInfo)row["cUserInfo"];
                var ngay     = (DateTime)row["TimeStrNgay"];
                var ngayCong = (cNgayCong)row["cNgayCong"];
                //if (ngay <= XL2.NgayCuoiThangKetCong && XL2.NgayCuoiThangKetCong != DateTime.MinValue) continue;//tbd temp patch// ko thực hiện đối với các ngày trong tháng đã kết công
                if (loai == -1)
                {
                    XL.HuyBo_TinhPCDB(nhanvien, ngayCong, nhanvien.DSXNPhuCapDB);
                }
                else
                {
                    XL.TinhPCDB(nhanvien, ngayCong, ngay, loai, pcngay, pcdem, temp);
                }
            }
            this.Close();
        }
Exemple #12
0
        public void ArrayRowsToDS_CIO_V(DataRow[] arrRows)           // cấu trúc là cấu trúc ghép 2 bảng checkinout và xác nhận
        {
            DS_CIO_V.Clear();

            if (arrRows.Length != 0)
            {
                for (int i = 0, j = 1; i < arrRows.Length;)                    //i là index rowInn, j là index row out

                {
                    DataRow rowInn = arrRows[i];
                    if (j >= arrRows.Length)
                    {
                        break;                                          // ko có phần tử kế tiếp để xét
                    }
                    DataRow  rowOut       = arrRows[j];
                    int      IDinn        = (int)rowInn["ID"];
                    int      IDout        = (int)rowOut["ID"];
                    string   SourceInn    = (string)rowInn["Source"];
                    string   SourceOut    = (string)rowOut["Source"];
                    int      MachineNoInn = (int)rowInn["MachineNo"];
                    int      MachineNoOut = (int)rowOut["MachineNo"];
                    DateTime timeInn      = (DateTime)rowInn["TimeStr"];
                    DateTime timeOut      = (DateTime)rowOut["TimeStr"];
                    if (IDinn != IDout)                    // bị mất cặp -> bỏ qua đến cặp kế tiếp, phải tăng i, j vì i+1=j ==> j+1
                    {
                        i = i + 1;
                        j = j + 1;
                        continue;
                    }
                    // cùng id --> xét có gần nhau ko
                    if (MachineNoInn % 2 == MachineNoOut % 2)
                    {
                        j = j + 1;
                        continue;
                    }
                    // đủ điều kiện ghép  cặp
                    #region lấy thông tin
                    int      shiftID = (int)rowInn["ShiftID"];
                    string   shiftCode = rowInn["ShiftCode"].ToString();
                    int      dayCount = (int)rowInn["DayCount"];
                    Single   workingday = (Single)rowInn["Workingday"];
                    TimeSpan onnDutyTs, offDutyTs;
                    TimeSpan.TryParse(rowInn["Onduty"].ToString(), out onnDutyTs);
                    TimeSpan.TryParse(rowInn["Offduty"].ToString(), out offDutyTs);

                    TimeSpan afterOTTs    = new TimeSpan(0, (int)rowInn["AfterOT"], 0);
                    TimeSpan lateGraceTSS = new TimeSpan(0, (int)rowInn["LateGrace"], 0);
                    TimeSpan earlyGraceTS = new TimeSpan(0, (int)rowInn["EarlyGrace"], 0);

                    lateGraceTSS = onnDutyTs.Add(lateGraceTSS);
                    // add thêm 1 ngày daycount nếu có
                    offDutyTs    = offDutyTs.Add(new TimeSpan(dayCount, 0, 0, 0));
                    earlyGraceTS = offDutyTs.Subtract(earlyGraceTS);
                    afterOTTs    = offDutyTs.Add(afterOTTs);
                    int  pOTMin        = (int)rowInn["OTMin"];
                    bool tempTinhPC150 = false;
                    if (rowInn["TinhPC150"] == DBNull.Value)
                    {
                        tempTinhPC150 = false;
                    }
                    else
                    {
                        tempTinhPC150 = (bool)rowInn["TinhPC150"];
                    }

                    int      wkt          = int.Parse(rowInn["WorkingTime"].ToString());
                    TimeSpan pWorkingTime = new TimeSpan(0, wkt, 0);

                    #endregion

                    cChkInn_V chkInnV = new cChkInn_V()
                    {
                        GioLienQuan = null, ID = IDinn, MachineNo = MachineNoInn, Source = SourceInn, TimeStr = timeInn
                    };
                    cChkOut_V chkOutV = new cChkOut_V()
                    {
                        GioLienQuan = null, ID = IDout, MachineNo = MachineNoOut, Source = SourceOut, TimeStr = timeOut
                    };
                    cChkInOut_V chkInOutV = new cChkInOut_V()
                    {
                        Vao            = chkInnV,
                        Raa            = chkOutV,
                        TG             = new ThoiGian(),
                        HaveINOUT      = 1,
                        TongGioThuc    = chkOutV.TimeStr - chkInnV.TimeStr,
                        TimeStrDaiDien = chkInnV.TimeStr,
                        TinhPC150      = tempTinhPC150,
                        LamThem        = new TimeSpan(0, 0, pOTMin, 0),
                        ThuocNgayCong  = chkInnV.TimeStr.Date,
                    };                     // [TBD] xem lại thuộc ngày công

                    cShift tmpThuocCa;
                    if (shiftID > 0)
                    {
                        tmpThuocCa = DSCa.Find(item => item.ShiftID == shiftID);
                    }
                    else if (shiftID > int.MinValue + 100 && shiftID < 0)                     // ca tách và ca kết hợp  [Chú ý] + 100 vì chừa khoảng này cho các loại khác
                    {
                        tmpThuocCa = new cShift()
                        {
                            ShiftID = shiftID, ShiftCode = shiftCode, OnnDutyTS = onnDutyTs, OffDutyTS = offDutyTs, chophepvaotreTS = lateGraceTSS, chopheprasomTS = earlyGraceTS, batdaulamthemTS = afterOTTs, WorkingTimeTS = pWorkingTime, Workingday = workingday, DayCount = dayCount, QuaDem = (dayCount == 1), LunchMinute = ThamSo._0gio, LoaiCa = 0
                        }
                    }
                    ;                                                          //[TBD]
                    else if (shiftID < int.MinValue + 100)                     // ca tự do 8 tiếng
                    {
                        tmpThuocCa = new cShift()
                        {
                            ShiftID = shiftID, ShiftCode = shiftCode, OnnDutyTS = onnDutyTs, OffDutyTS = offDutyTs, chophepvaotreTS = lateGraceTSS, chopheprasomTS = earlyGraceTS, batdaulamthemTS = afterOTTs, WorkingTimeTS = pWorkingTime, Workingday = workingday, DayCount = dayCount, QuaDem = (dayCount == 1), LunchMinute = ThamSo._0gio, LoaiCa = 1
                        }
                    }
                    ;
                    else
                    {
                        tmpThuocCa = new cShift()
                        {
                            ShiftID = shiftID, ShiftCode = "XacNhan8h", OnnDutyTS = onnDutyTs, OffDutyTS = offDutyTs, chophepvaotreTS = lateGraceTSS, chopheprasomTS = earlyGraceTS, batdaulamthemTS = afterOTTs, WorkingTimeTS = pWorkingTime, Workingday = workingday, DayCount = dayCount, QuaDem = (dayCount == 1), LunchMinute = ThamSo._0gio, LoaiCa = 1
                        };                                                                                                                                                                                                                                                                                                                                                                                        //[TBD]
                    }
                    if (tmpThuocCa == null)
                    {
                        log.Fatal("ERROR function Check_GioDaXN");
                    }
                    chkInOutV.ThuocCa = tmpThuocCa;
                    chkInOutV.QuaDem  = tmpThuocCa.QuaDem;
                    XL.TinhCongTheoCa(chkInOutV, chkInOutV.ThuocCa);                    //[TBD]
                    DS_CIO_V.Add(chkInOutV);

                    // sau khi thực hiện xong thì tăng
                    i = i + 2;
                    j = j + 2;
                }
            }
        }
Exemple #13
0
        private void btnXoaGio_Click(object sender, EventArgs e)
        {
            DataTable table = dgrdTongHop.DataSource as DataTable;

            if (table == null)
            {
                return;
            }
            DataRow[] arrRows = table.Select("check = true", "UserEnrollNumber asc");
            //1 nếu chưa chọn ai thì thông báo
            if (arrRows.Length == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn Nhân viên.", "Thông báo", 1000);
                return;
            }

            if (MessageBox.Show("Xoá giờ chấm công của các nhân viên?", "Xác nhận", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
            {
                return;
            }
            bool flagThongBao = false, flagLoiThaoTacDL = false;

            foreach (DataRow row in arrRows)
            {
                cUserInfo tmpNV = flstDSNVChk.Find(o => o.UserEnrollNumber == (int)row["UserEnrollNumber"]);
                DateTime  t_Vao = (row["TimeStrVao"] != DBNull.Value) ? (DateTime)row["TimeStrVao"] : DateTime.MinValue;
                DateTime  t_Raa = (row["TimeStrRa"] != DBNull.Value) ? (DateTime)row["TimeStrRa"] : DateTime.MinValue;

                if (rdXoaVao.Checked)
                {
                    if (t_Vao == DateTime.MinValue)
                    {
                        continue;
                    }
                    cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Vao && o.GetType() == typeof(cChkIn));
                    if (tmpCheck == null)
                    {
                        flagThongBao = true;                  // giờ chưa xl thì xóa, giờ xác nhận thì bỏ qua
                    }
                    else
                    {
                        if (XL.XoaGioChoNV(tmpNV, tmpCheck, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false)
                        {
                            flagLoiThaoTacDL = true;
                            break;
                        }
                    }
                }
                else if (rdXoaRa.Checked)
                {
                    if (t_Raa == DateTime.MinValue)
                    {
                        continue;
                    }
                    cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Raa && o.GetType() == typeof(cChkOut));
                    if (tmpCheck == null)
                    {
                        flagThongBao = true;
                    }
                    else
                    {
                        if (XL.XoaGioChoNV(tmpNV, tmpCheck, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false)
                        {
                            flagLoiThaoTacDL = true;
                            break;
                        }
                    }
                }
                else
                {
                    if (t_Vao != DateTime.MinValue && t_Raa != DateTime.MinValue)
                    {
                        cChk tmpCheckIn  = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Vao && o.GetType() == typeof(cChkIn));
                        cChk tmpCheckOut = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Raa && o.GetType() == typeof(cChkOut));
                        if (tmpCheckIn != null && tmpCheckOut != null)
                        {
                            if (XL.XoaGioChoNV(tmpNV, tmpCheckIn, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false)
                            {
                                flagLoiThaoTacDL = true; break;
                            }
                            if (XL.XoaGioChoNV(tmpNV, tmpCheckOut, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false)
                            {
                                flagLoiThaoTacDL = true; break;
                            }
                        }
                        else
                        {
                            flagThongBao = true;
                        }
                    }
                }
            }
            if (flagThongBao)
            {
                MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo");
            }
            if (flagLoiThaoTacDL)
            {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại.", "Lỗi", MessageBoxButtons.OK);
            }
            try {
                XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT);
                loadTable();
            } catch (Exception) {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại.", "Lỗi", MessageBoxButtons.OK);
            }
            GC.Collect();
        }
Exemple #14
0
        private void btnSuaGio_Click(object sender, EventArgs e)
        {
            DataRowView row = dgrdTongHop.Tag as DataRowView;

            if (row == null)
            {
                return;
            }
            cUserInfo tmpNV = flstDSNVChk.Find(o => o.UserEnrollNumber == (int)row["UserEnrollNumber"]);

            DateTime tmpOldVao   = (row["TimeStrVao"] != DBNull.Value) ? (DateTime)row["TimeStrVao"] : DateTime.MinValue;
            DateTime tmpOldRaa   = (row["TimeStrRa"] != DBNull.Value) ? (DateTime)row["TimeStrRa"] : DateTime.MinValue;
            DateTime tmpNgayCong = (DateTime)row["TimeStrNgay"];

            cNgayCong ngayCong = tmpNV.DSNgayCong.Find(o => o.NgayCong == tmpNgayCong);

            log.Debug(tmpNV.ToString() + tmpNgayCong + ngayCong);
            cChkInOut old_CIO;

            if (ngayCong.HasCheck == false || (tmpOldVao == DateTime.MinValue && tmpOldRaa == DateTime.MinValue))
            {
                old_CIO = null;
            }
            else if (tmpOldVao == DateTime.MinValue)
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Raa.TimeStr == tmpOldRaa);
            }
            else if (tmpOldRaa == DateTime.MinValue)
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Vao.TimeStr == tmpOldVao);
            }
            else
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT > 0 && o.Vao.TimeStr == tmpOldVao && o.Raa.TimeStr == tmpOldRaa);
            }
            if (old_CIO != null && old_CIO.DaXN == true)
            {
                MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo");
                return;
            }


            if (checkVao_Sua.Checked)
            {
                dtpVao_Sua.Update();
                cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == tmpOldVao && o.MachineNo % 2 == 1);
                if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpCheck, dtpVao_Sua.Value, true, cbLyDo_Sua.Text, tbGhiChu_Sua.Text) == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                }
            }
            if (checkRa_Sua.Checked)
            {
                dtpRa_Sua.Update();
                cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == tmpOldRaa && o.MachineNo % 2 == 0);
                if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpCheck, dtpRa_Sua.Value, false, cbLyDo_Sua.Text, tbGhiChu_Sua.Text) == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                }
            }
            try {
                XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT);
                loadTable();
            } catch (Exception) {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi");
                return;
            }
            GC.Collect();
        }
Exemple #15
0
        void XuatBBDSNVDLV(ExcelPackage p)
        {
            #region             //Create a sheet
            p.Workbook.Worksheets.Add("DSNV Dang Lam Viec");
            var ws = p.Workbook.Worksheets[1];
            ws.Name = "DSNV Dang Lam Viec";                //Setting Sheet's name

            ws.Cells.Style.Font.Size = 10;                 //Default font size for whole sheet
            ws.Cells.Style.Font.Name = "Times News Roman"; //Default Font name for whole sheet

            #endregion
            var sR = 1;
            XL2.VeLogo("bbdiemdanhdlv", ws);
            XL2.GhiThongTinTongcty(ws, "", 1, 4, 12, 1, 9, 12, 4, 9);
            int sttnv = 0, startColws = 1;
            #region 1.tieu de bang cham cong tu ngay den ngay 2. bỏ 1 dòng trống

            sR = sR + 7;            // sR+1 là dòng trống
            XL.FormatCells(ws.Cells[sR, 6], "Danh sách nhân viên đang làm việc ngày " + dtpNgay.Value.ToString("dd/MM/yyyy"),
                           size: 14, hAlign: ExcelHorizontalAlignment.CenterContinuous, bold: true, VeBorder: false);
            #endregion

            sR++;
            sR++;
            #region  write stt +0
            ws.Column(startColws).Width = (int)Z.STT;
            XL.FormatCells(ws.Cells[sR, startColws], "STT", bold: true);
            startColws++;
            #endregion
            #region  write ho ten +1
            ws.Column(startColws).Width = (int)Z.TEN;
            XL.FormatCells(ws.Cells[sR, startColws], "Họ tên", bold: true);
            startColws++;
            #endregion
            #region write manv +2
            ws.Column(startColws).Width = (int)Z.MANV;
            XL.FormatCells(ws.Cells[sR, startColws], "Mã NV", bold: true);
            startColws++;
            #endregion
            #region write trạng thái +3
            ws.Column(startColws).Width = (int)Z.TRANGTHAI;
            XL.FormatCells(ws.Cells[sR, startColws], "Trạng thái", bold: true);
            startColws++;
            #endregion
            #region write ca +4
            ws.Column(startColws).Width = (int)Z.CA;
            XL.FormatCells(ws.Cells[sR, startColws], "Ca", bold: true);
            startColws++;
            #endregion

            #region write vào 1 +5
            ws.Column(startColws).Width = (int)Z.VAO1;
            XL.FormatCells(ws.Cells[sR, startColws], "Vào 1", bold: true);
            ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            startColws++;
            #endregion
            #region write raa 1 +6
            ws.Column(startColws).Width = (int)Z.RAA1;
            XL.FormatCells(ws.Cells[sR, startColws], "Ra 1", bold: true);
            ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            startColws++;
            #endregion
            #region write vào 2 +7
            ws.Column(startColws).Width = (int)Z.VAO2;
            XL.FormatCells(ws.Cells[sR, startColws], "Vào 2", bold: true);
            ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            startColws++;
            #endregion
            #region write raa 2 +8
            ws.Column(startColws).Width = (int)Z.RAA2;
            XL.FormatCells(ws.Cells[sR, startColws], "Ra 2", bold: true);
            ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            startColws++;
            #endregion
            #region write vào 3 +9
            ws.Column(startColws).Width = (int)Z.VAO3;
            XL.FormatCells(ws.Cells[sR, startColws], "Vào 3", bold: true);
            ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            startColws++;
            #endregion
            #region write raa 3 +10
            ws.Column(startColws).Width = (int)Z.RAA3;
            XL.FormatCells(ws.Cells[sR, startColws], "Ra 3", bold: true);
            ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            startColws++;
            #endregion

            sR++;
            var pb_c2 = (from item in m_DSNV
                         select new { item.PBCap2.ID, item.PBCap2.TenPhongBan }).Distinct().ToList();
            try {
                foreach (var pb_i in pb_c2)
                {
                    #region                     //write ten phong ban, tang 1 dong
                    XL.FormatCells(ws.Cells[sR, 1], pb_i.TenPhongBan, bold: true, VeBorder: false, hAlign: ExcelHorizontalAlignment.Left);
                    #endregion
                    sR++;                    //chỉ số dòng mới, dòn
                    var pb_c1 = (from item in m_DSNV
                                 where item.PBCap2.ID == pb_i.ID
                                 select new { item.PBCap1.ID, item.PBCap1.TenPhongBan }).Distinct().ToList();

                    foreach (var pb in pb_c1)
                    {
                        #region                         //write ten pb cap 1 tang 1 dong
                        XL.FormatCells(ws.Cells[sR, 1], pb.TenPhongBan, bold: true, VeBorder: false, hAlign: ExcelHorizontalAlignment.Left);
                        sR++;
                        #endregion
                        var dsnv = (from c in m_DSNV
                                    where c.PBCap1.ID == pb.ID
                                    select c).ToList();
                        foreach (var nhanvien in dsnv)
                        {
                            // duyet tung nv, nhớ tăng sR
                            startColws = 1;                            //reset startcol =1 mỗi lần ghi nv mới

                            var ngayCong = nhanvien.DSNgayCong[2];
                            if (ngayCong.DSVaoRa.Count == 0 || ngayCong.DSVaoRa[ngayCong.DSVaoRa.Count - 1].Raa != null)
                            {
                                continue;
                            }

                            #region  stt,hoten,macc
                            sttnv++;
                            XL.FormatCells(ws.Cells[sR, startColws + 0], sttnv);
                            XL.FormatCells(ws.Cells[sR, startColws + 1], nhanvien.TenNV, hAlign: ExcelHorizontalAlignment.Left); //Ten
                            XL.FormatCells(ws.Cells[sR, startColws + 2], nhanvien.MaNV, hAlign: ExcelHorizontalAlignment.Left);  //MaNV
                            startColws = startColws + 3;                                                                         // + 4 là 4 cột, nếu thêm 1 cột thì +5, +6
                            #endregion

                            var xCol = startColws;

                            #region trạng thái
                            XL.FormatCells(ws.Cells[sR, xCol], "Đang làm việc");
                            xCol++;

                            #endregion

                            #region ca
                            XL.FormatCells(ws.Cells[sR, xCol], ngayCong.CIOs_Absents_Code_Comp());                            //
                            xCol++;

                            #endregion

                            #region vào ra 1-->3

                            for (int x = 0; x < ngayCong.DSVaoRa.Count || x < 3; x++)
                            {
                                if (x < 3 && x >= ngayCong.DSVaoRa.Count)
                                {
                                    XL.FormatCells(ws.Cells[sR, xCol], null);
                                    xCol++;
                                    XL.FormatCells(ws.Cells[sR, xCol], null);
                                    xCol++;
                                }
                                else
                                {
                                    XL.FormatCells(ws.Cells[sR, xCol], ngayCong.DSVaoRa[x].Vao != null ? ngayCong.DSVaoRa[x].Vao.Time : (object)null, numberFormat: "H:mm d/M");
                                    xCol++;
                                    XL.FormatCells(ws.Cells[sR, xCol], ngayCong.DSVaoRa[x].Raa != null ? ngayCong.DSVaoRa[x].Raa.Time : (object)null, numberFormat: "H:mm d/M");
                                    xCol++;
                                }
                            }


                            #endregion

                            sR++;
                        }
                    }
                }
                sR += 2;
            } catch (Exception exception) {
                throw exception;
            }
        }
        private void btnXacNhan_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            // đọc tháng kết công để ko cho phép xác nhận nếu đã kết công
            //XL2.NgayCuoiThangKetCong = XL.DocThangKetCong();//tbd temp patch

            #region hỏi trước khi xác nhận

            if (MessageBox.Show(Resources.Text_ConfirmDongY_XacNhan, Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel)
            {
                return;
            }

            #endregion

            #region lấy trước các thông số
            //numPhutTinhLamThem.Update();

            #region             //ver 4.0.0.4 kiểm tra ko nếu nhập giờ làm thêm ko hợp lệ thì báo, vượt ngưỡng max thì thoát

            TimeSpan OTCa = TimeSpan.Zero;
            if ((checkXNLamThem.Checked) && TimeSpan.TryParseExact(maskPhutTinhLamThem.Text, @"hh\:mm", CultureInfo.InvariantCulture, out OTCa) == false)
            {
                ACMessageBox.Show(Resources.Text_NhapThoiGianLamThemChuaHopLe, Resources.Caption_Loi, 3000);
                return;
            }
            var maxOTCa = TimeSpan.Zero;
            if (maskPhutTinhLamThem.Tag != null)
            {
                maxOTCa = (TimeSpan)maskPhutTinhLamThem.Tag;
            }
            if (OTCa > maxOTCa)
            {
                ACMessageBox.Show(Resources.Text_GioLamThemLonHonTGOLai, Resources.Caption_ThongBao, 3000);
                return;
            }
            #endregion

            var currShift       = (tbXNCa.Tag != null) ? (cCa)tbXNCa.Tag : null;
            var bDuyetCPTre     = checkXNChoPhepTre.Checked;
            var bDuyetCPSom     = checkXNChoPhepSom.Checked;
            var bXacNhanLamThem = checkXNLamThem.Checked;
            //var soPhutLamThem = (checkXNLamThem.Checked) ? Convert.ToInt32(numPhutTinhLamThem.Value) : 0;
            var soPhutLamThem   = Convert.ToInt32(OTCa.TotalMinutes); //ver 4.0.0.4
            var choPhepTinhPc50 = checkXNTinhPC50.Checked;
            var bVaoTreLaCV     = checkXNVaoTreTinhCV.Checked;        //ver 4.0.0.4
            var bRaaSomLaCV     = checkXNRaaSomTinhCV.Checked;        //ver 4.0.0.4
            var lydo            = (cbXNLyDo.SelectedItem != null) ? cbXNLyDo.SelectedItem.ToString() : cbXNLyDo.SelectedText;
            var ghichu          = tbXNGhiChu.Text;

            #endregion
            // chế độ xác nhận single
            if (dgrdGioCoLamThem.SelectedRows.Count == 1)
            {
                // kiểm tra các điều kiện trước khi xác nhận
                IsReload = true;
                var dataRow = (DataRowView)dgrdGioCoLamThem.SelectedRows[0].DataBoundItem;
                XuLyDon(dataRow, currShift, bDuyetCPTre, bDuyetCPSom, soPhutLamThem, choPhepTinhPc50, lydo, ghichu,
                        bVaoTreLaCV, bRaaSomLaCV); //ver 4.0.0.4
            }
            else                                   // chế độ xác nhận multiple
            {
                IsReload = true;
                foreach (var dataRow in (from DataGridViewRow dataGridViewRow in dgrdGioCoLamThem.SelectedRows
                                         select(DataRowView) dataGridViewRow.DataBoundItem))
                {
                    XuLyDon(dataRow, currShift, bDuyetCPTre, bDuyetCPSom, soPhutLamThem, choPhepTinhPc50, lydo, ghichu,
                            bVaoTreLaCV, bRaaSomLaCV);                    //ver 4.0.0.4
                }
            }
            XL.TaoTableXacNhanCa(m_DSNV, m_arrRecd, m_tableDS_CIO);
        }
Exemple #17
0
        void XuatBBDSNVVang(ExcelPackage p)
        {
            #region             //Create a sheet
            p.Workbook.Worksheets.Add("DSNV Vang");
            var ws = p.Workbook.Worksheets[2];
            ws.Name = "DSNV Vang";                         //Setting Sheet's name

            ws.Cells.Style.Font.Size = 10;                 //Default font size for whole sheet
            ws.Cells.Style.Font.Name = "Times News Roman"; //Default Font name for whole sheet

            #endregion
            var sR = 1;
            XL2.VeLogo("bbdiemdanhvang", ws);
            XL2.GhiThongTinTongcty(ws, "", 1, 4, 12, 1, 9, 12, 4, 9);
            int sttnv = 0, startColws = 1;
            #region 1.tieu de bang cham cong tu ngay den ngay 2. bỏ 1 dòng trống

            sR = sR + 7;            // sR+1 là dòng trống
            XL.FormatCells(ws.Cells[sR, 6], "Danh sách nhân viên vắng ngày " + dtpNgay.Value.ToString("dd/MM/yyyy"),
                           size: 14, hAlign: ExcelHorizontalAlignment.CenterContinuous, bold: true, VeBorder: false);
            #endregion

            sR++;
            sR++;
            #region  write stt +0
            ws.Column(startColws).Width = (int)Z.STT;
            XL.FormatCells(ws.Cells[sR, startColws], "STT", bold: true);
            startColws++;
            #endregion
            #region  write ho ten +1
            ws.Column(startColws).Width = (int)Z.TEN;
            XL.FormatCells(ws.Cells[sR, startColws], "Họ tên", bold: true);
            startColws++;
            #endregion
            #region write manv +2
            ws.Column(startColws).Width = (int)Z.MANV;
            XL.FormatCells(ws.Cells[sR, startColws], "Mã NV", bold: true);
            startColws++;
            #endregion
            #region write trạng thái +3
            ws.Column(startColws).Width = (int)Z.TRANGTHAI;
            XL.FormatCells(ws.Cells[sR, startColws], "Trạng thái", bold: true);
            startColws++;
            #endregion
            #region write ca +4
            ws.Column(startColws).Width = (int)Z.CA;
            XL.FormatCells(ws.Cells[sR, startColws], "Ca", bold: true);
            startColws++;
            #endregion

            //startCol = 4

            sR++;
            var pb_c2 = (from item in m_DSNV
                         select new { item.PBCap2.ID, item.PBCap2.TenPhongBan }).Distinct().ToList();
            try {
                foreach (var pb_i in pb_c2)
                {
                    #region                     //write ten phong ban, tang 1 dong
                    XL.FormatCells(ws.Cells[sR, 1], pb_i.TenPhongBan, bold: true, VeBorder: false, hAlign: ExcelHorizontalAlignment.Left);
                    #endregion
                    sR++;                    //chỉ số dòng mới, dòn
                    var pb_c1 = (from item in m_DSNV
                                 where item.PBCap2.ID == pb_i.ID
                                 select new { item.PBCap1.ID, item.PBCap1.TenPhongBan }).Distinct().ToList();

                    foreach (var pb in pb_c1)
                    {
                        #region                         //write ten pb cap 1 tang 1 dong
                        XL.FormatCells(ws.Cells[sR, 1], pb.TenPhongBan, bold: true, VeBorder: false, hAlign: ExcelHorizontalAlignment.Left);
                        sR++;
                        #endregion
                        var dsnv = (from c in m_DSNV
                                    where c.PBCap1.ID == pb.ID
                                    select c).ToList();
                        foreach (var nhanvien in dsnv)
                        {
                            // duyet tung nv, nhớ tăng sR
                            startColws = 1;                            //reset startcol =1 mỗi lần ghi nv mới

                            var ngayCong = nhanvien.DSNgayCong[2];
                            if (ngayCong.DSVaoRa.Count > 0)
                            {
                                continue;
                            }

                            #region  stt,hoten,macc
                            sttnv++;
                            XL.FormatCells(ws.Cells[sR, startColws + 0], sttnv);
                            XL.FormatCells(ws.Cells[sR, startColws + 1], nhanvien.TenNV, hAlign: ExcelHorizontalAlignment.Left); //Ten
                            XL.FormatCells(ws.Cells[sR, startColws + 2], nhanvien.MaNV, hAlign: ExcelHorizontalAlignment.Left);  //MaNV
                            startColws = startColws + 3;                                                                         // + 4 là 4 cột, nếu thêm 1 cột thì +5, +6
                            #endregion

                            var xCol = startColws;

                            #region trạng thái
                            XL.FormatCells(ws.Cells[sR, xCol], "Vắng");
                            xCol++;

                            #endregion

                            #region ca
                            XL.FormatCells(ws.Cells[sR, xCol], ngayCong.Absents_Code());                            //
                            xCol++;

                            #endregion

                            sR++;
                        }
                    }
                }

                sR += 2;
            } catch (Exception exception) {
                throw exception;
            }
        }
        private void frmXacNhanTangCa_Load(object sender, EventArgs e)
        {
            IsReload = false;

            XL.TaoTableXacNhanCa(m_DSNV, m_arrRecd, m_tableDS_CIO);
        }
Exemple #19
0
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;

            #region lấy thông tin

            var timespanGioVao = dtpVao.Value.TimeOfDay;
            var timespanGioRaa = dtpRaa.Value.TimeOfDay;
            var lydo           = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText;
            var ghichu         = tbGhiChu.Text;

            #endregion

            var tempstring = radGioVao.Checked ? "vào" : "ra";
            var temptime   = (radGioVao.Checked) ? dtpVao.Value : dtpRaa.Value;
            if (dgrdDSGioVaoRa.SelectedRows.Count == 0)
            {
                return;
            }

            #region hỏi lại trước khi thêm

            if (MessageBox.Show(string.Format(Resources.xacNhanThemGioHangLoat, tempstring, temptime.ToString("H:mm")),
                                Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            #region lấy ds các giờ vào ra, group lại theo từng nhân viên để thực hiện thêm 1 loạt rồi sau đó xử lý tính toán lại checkinout và ngày công

            IEnumerable <DataGridViewRow> dataGridViewRows = dgrdDSGioVaoRa.SelectedRows.Cast <DataGridViewRow>();
            var arrRecord = (from row in dataGridViewRows
                             let nv = (cUserInfo)(((DataRowView)row.DataBoundItem).Row["cUserInfo"])
                                      let cChkInOut = (cChkInOut)(((DataRowView)row.DataBoundItem).Row["cChkInOut"])
                                                      let ngay = (DateTime)(((DataRowView)row.DataBoundItem).Row["TimeStrNgay"])
                                                                 select new { nhanvien = nv, CIO = cChkInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList();

            #endregion

            var ds_raa3_vao1     = new List <cChk>();
            var DS_Check_KoHopLe = new List <cChk>();
            foreach (var group in arrRecord)
            {
                var nhanvien = group.Key;
                foreach (var item in group)
                {
                    if (item.CIO.HaveINOUT == 1)
                    {
                        continue;                               // 1. bỏ qua các giờ đủ IO
                    }
                    if (radGioVao.Checked)                      //2. thêm I cho O kv
                    {
                        if (item.CIO.HaveINOUT == -2)
                        {
                            var giovao = item.Ngay.Add(timespanGioVao);
                            if (giovao > item.CIO.Raa.Time)
                            {
                                giovao = giovao.AddDays(-1d);                                                        // trừ đi 1 ngày nếu (giờ vào thêm) > giờ ra
                            }
                            var checkinn = new cChkInn_A {
                                IsEdited = 1, MaCC = item.nhanvien.MaCC, Type = "I", Time = giovao, Source = "PC", MachineNo = 21, PhucHoi = new cPhucHoi {
                                    Them = true, IDGioGoc = -1, Xoaa = false
                                }
                            };
                            XL.ThemGioChoNV(checkinn, item.nhanvien, XL2.currUserID, lydo, ghichu);
                        }
                    }
                    else
                    {
                        if (item.CIO.HaveINOUT == -1)                          //3. thêm O cho I kr
                        {
                            var gioraa = item.Ngay.Add(timespanGioRaa);
                            if (gioraa < item.CIO.Vao.Time)
                            {
                                gioraa = gioraa.AddDays(1d);                                                        // cộng thêm 1 ngày nếu (giờ vào thêm) > giờ ra
                            }
                            var checkout = new cChkOut_A()
                            {
                                IsEdited = 1, MaCC = item.nhanvien.MaCC, Type = "O", Time = gioraa, Source = "PC", MachineNo = 22, PhucHoi = new cPhucHoi {
                                    Them = true, IDGioGoc = -1, Xoaa = false
                                }
                            };
                            XL.ThemGioChoNV(checkout, item.nhanvien, XL2.currUserID, lydo, ghichu);
                        }
                    }
                }

                XL.SapXepDS_Check(new[] { nhanvien.DS_Check_A });

                XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                XL.GhepCIO_A(nhanvien.DS_Check_A, nhanvien.DS_CIO_A);
                XL.LoaiBoCIOKoHopLe(nhanvien.DS_CIO_A, nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                if (nhanvien.DS_Check_KoHopLe.Count > 0)
                {
                    DS_Check_KoHopLe.AddRange(nhanvien.DS_Check_KoHopLe);
                    nhanvien.DS_Check_KoHopLe.Clear();
                }

                XL.XetCa_CIO_A(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien.DS_Check_A);
                XL.TronDS_CIO_A_V(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa);
                XL.TinhCongTheoNgay(nhanvien.DSVaoRa, nhanvien.NgayCongBD_Bef2D, nhanvien.NgayCongKT_Aft2D, nhanvien.DSVang, nhanvien.DSNgayCong, nhanvien.MacDinhTinhPC50);
                XL.TinhLaiPhuCapTC(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong);
                XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong);
            }
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            loadGrid();
        }
Exemple #20
0
        private void KetLuong(object sender, WaitWindowEventArgs e)
        {
            #region lấy thông tin từ csdl và khỏi tạo  nv

            var ngaydauthang              = MyUtility.FirstDayOfMonth(m_Thang);
            var ngaycuoithang             = MyUtility.LastDayOfMonth(m_Thang);
            var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang);
            var tableDSThuchiThang        = DAO5.LayDSThuchiThang(ngaydauthang);
            var tableKetcongNgay          = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa            = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);

            var dsnv       = new List <cUserInfo>();
            var dsphongban = new List <cPhongBan>();
            XL.KhoiTaoDSPhongBan(dsphongban);             // khởi tạo các phòng ban để cập nhật thông tin phòng ban cho nhân viên tính công
            XL.KhoiTaoDSNV_TinhLuong(dsnv, dsphongban);   // khởi tạo tất cả nhân viên tính công, bao gồm cả công nhật ngày(nv chính thức) và công nhật tháng

            #endregion

            #region             //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi

            foreach (var nv in dsnv)
            {
                nv.DSNgayCong = new List <cNgayCong>();
                nv.DSVang     = new List <cLoaiVang>();
                for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                {
                    XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                }
                XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);                //info trường hợp nhân viên công nhật sẽ được xử lý bên dưới
                XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);

                XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang);
            }


            #endregion

            //có được ds nhân viên với công, phụ cấp, các loại vắng, công ngày lễ --> bắt đầu tính lương
            #region lấy thông số để tính lương
            var sanluong01           = (int)(numSanLuong.Value);
            var dongia02             = (int)numDonGia.Value;
            var perTrichQuyLuong     = (int)numTrichQuyLuong.Value;
            var sanluongGiacongNoiBo = (int)numSanluongGiacongNoibo.Value;
            var dongiaGiacongNoiBo   = (int)numDongiaGiacongNoibo.Value;
            var sanluongGiacongNgoai = (int)numSanluongGiacongNgoai.Value;
            var dongiaGiacongNgoai   = (int)numDongiaGiacongNgoai.Value;
            var mucLuongToithieu     = (int)numLuongTT.Value;
            var donGiaBdCa3          = (int)numBoiDuongCa3.Value;
            var DinhMuccomtrua       = (int)numDinhMucComTrua.Value;

            double tongQuy100Per03 = Convert.ToDouble(sanluong01) * Convert.ToDouble(dongia02);
            double _80perQuy100_04 = tongQuy100Per03 * (perTrichQuyLuong / 100d);             // ko cần round vì 220*0.8=176 chẵn

            #endregion
            // xác định công chuẩn của tháng
            var congChuanThang = XL.TinhCongChuanCuaThang(ngaydauthang);
            #region             // thống kê công, phụ cấp hàng ngày của từng nhân viên chính thức
            //trường hợp nhân viên vừa công nhật vừa chính thức thì chỉ thống kê ngày công sau ngày kết thúc công nhật
            foreach (var nv in dsnv)
            {
                // thống kê công và phụ cấp từng nv
                XL.ThongKeThang(ref nv.ThongKeThang, nv.DSNgayCong, nv.NgayBDCongnhat, nv.NgayKTCongnhat, nv.LoaiCN);
                // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo
                if (nv.LoaiCN == LoaiCongNhat.NVCongNhat)                // nhân viên làm công nhật, công cv tự động, khai báo = 0
                {
                    nv.ThongKeThang.CongCV_Auto = 0f;
                    nv.ThongKeThang.CongCV_KB   = 0f;
                }
                else
                {
                    if (nv.LoaiCN == LoaiCongNhat.NVChinhThuc)                    // nhân viên chính thức
                    {
                        nv.ThongKeThang.CongCV_Auto = congChuanThang -
                                                      /*(nv.ThongKeThang.Cong + nv.ThongKeThang.Le + nv.ThongKeThang.Phep + //ver4.0.0.0*/
                                                      (nv.ThongKeThang.TongNgayLV + nv.ThongKeThang.Le + nv.ThongKeThang.Phep +                                                             //ver4.0.0.1
                                                       nv.ThongKeThang.BHXH + nv.ThongKeThang.H_CT_PT +
                                                       nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo + nv.ThongKeThang.CongCV_KB);                                                          //DANGLAM
                        if (nv.ThongKeThang.CongCV_Auto < 0f)
                        {
                            nv.ThongKeThang.CongCV_Auto = 0f;
                        }
                    }
                    else                    // nhân viên chính thức vừa công nhật thì công cv_auto =0, công cv khai báo ko đổi
                    {
                        nv.ThongKeThang.CongCV_Auto = 0f;
                    }
                }
                nv.ThongKeThang.CongCV = nv.ThongKeThang.CongCV_Auto + nv.ThongKeThang.CongCV_KB;
            }

            #endregion

            #region             // tính lương công nhật cho các nhân viên làm công nhật và tổng lương công nhật

            double TongLuongCongNhat_AllNV = 0d;

            foreach (DataRow row in tableDSNVChiCongnhatThang.Rows.Cast <DataRow>())
            {
                // lấy thông tin
                var macc        = (int)row["UserEnrollNumber"];
                var dongiaLuong = (int)row["DonGiaLuong"];
                var soNgayCong  = (float)row["SoNgayCong"];
                var TamUng      = (double)row["TamUng"];
                // xác định nhân viên
                var nv = dsnv.Find(o => o.MaCC == macc);
                if (nv == null)
                {
                    continue;
                }
                nv.ThongKeThang.Cong_Congnhat = soNgayCong;
                nv.chiTietLuong.CongNhat      = soNgayCong * dongiaLuong;            //ko trừ tạm ứng, tạm ứng chỉ ở phần thực lãnh mới ghi
                TongLuongCongNhat_AllNV      += nv.chiTietLuong.CongNhat;
            }

            #endregion

            #region             //đọc danh sách thu chi cho từng nhân viên (lưu ý ko đọc phụ cấp của nhân viên công nhật

            foreach (DataRow row in tableDSThuchiThang.Rows.Cast <DataRow>())
            {
                var macc = (int)row["UserEnrollNumber"];
                // xác định nhân viên
                var nv = dsnv.Find(o => o.MaCC == macc);
                if (nv == null)
                {
                    continue;
                }
                nv.chiTietLuong.KhauTru.TamUng     = (double)row["TamUng"];
                nv.chiTietLuong.LuongDieuChinh     = (double)row["LuongDieuChinh"];
                nv.chiTietLuong.MucDongBHXH        = (float)row["MucDongBHXH"];
                nv.chiTietLuong.KhauTru.ThuChiKhac = (double)row["ThuChiKhac"];
            }

            #endregion

            #region             // tính lương cho nv chính thức

            double tong_qlcb_2 = 0d, tong_SPLamRa_B2_2 = 0d, tongQuyLuongCV = 0d, tongQuyLuongNghiDinhCP = 0d, tongChiKhacTuQuyLuong = 0d, tongQuyLuongSP = 0d;
            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                //if (Math.Abs(nv.ThongKeThang.Cong - 0f) < 0.01f) nv.ThongKeThang.CongCV = 0f; //fortesting nếu ko chấm công thì cũng ko có công cv
                XL.TinhLuongCoBan_CongVaPC_A202(nv.HeSo.LuongCB, mucLuongToithieu, nv.ThongKeThang.Cong, nv.ThongKeThang.PhuCaps._TongPC,
                                                nv.ThongKeThang.Phep, nv.ThongKeThang.H_CT_PT, nv.ThongKeThang.PTDT, nv.ThongKeThang.Le, nv.ThongKeThang.CongCV,                                                //DANGLAM
                                                out nv.chiTietLuong.LCB_Theo.CongThucTe, out nv.chiTietLuong.LCB_Theo.CheDoNghi, out nv.chiTietLuong.LCB_Theo.CongCV,
                                                out nv.chiTietLuong.LCB_Theo.PhuCap);
                tongQuyLuongCV         += nv.chiTietLuong.LCB_Theo.CongCV;
                tongQuyLuongNghiDinhCP += nv.chiTietLuong.LCB_Theo.TongCong_CD_CV_PC;

                XL.TinhBoiDuongQuaDemA512(nv.ThongKeThang.NgayQuaDem, donGiaBdCa3, out nv.chiTietLuong.BoiDuongQuaDem);
                tong_qlcb_2           += nv.chiTietLuong.LCB_Theo.TongCong_CD_CV_PC + nv.chiTietLuong.BoiDuongQuaDem + nv.chiTietLuong.LuongDieuChinh;       //info tong_qlcb_2 bao gồm lương cb 1nv, bồi dưỡng ca 3 1nv, lương tháng trước 1 nv
                tongChiKhacTuQuyLuong += nv.chiTietLuong.BoiDuongQuaDem + nv.chiTietLuong.KhauTru.ThuChiKhac;

                XL.TinhSPLamRa_CongVaPC_B102(nv.HeSo.LuongCV, nv.ThongKeThang.Cong, nv.ThongKeThang.PhuCaps._TongPC, nv.ThongKeThang.Phep, nv.ThongKeThang.H_CT_PT, nv.ThongKeThang.PTDT, nv.ThongKeThang.Le,                //DANGLAM
                                             out nv.chiTietLuong.SPLamRa_Theo.CongThucTe, out nv.chiTietLuong.SPLamRa_Theo.CheDoNghi, out nv.chiTietLuong.SPLamRa_Theo.PhuCap);
                tong_SPLamRa_B2_2 += nv.chiTietLuong.SPLamRa_Theo.TongSPLamRa;
                // tính khấu trừ BHXH
                nv.chiTietLuong.KhauTru.BHXH = Convert.ToDouble(nv.HeSo.BHXH_YT_TN * mucLuongToithieu * (nv.chiTietLuong.MucDongBHXH / 100f));
                // tính tiền cơm trưa
                var temp1 = DinhMuccomtrua - ((DinhMuccomtrua / congChuanThang) * nv.ThongKeThang.NghiRo);
                nv.chiTietLuong.TienComTrua = (temp1 >= 0d) ? temp1 : 0d;
            }
            var    chitienGiacongNoibo       = Convert.ToDouble(sanluongGiacongNoiBo) * Convert.ToDouble(dongiaGiacongNoiBo);
            var    chitienGiacongNgoai       = Convert.ToDouble(sanluongGiacongNgoai) * Convert.ToDouble(dongiaGiacongNgoai);
            var    tong_qlSP_A71_1_VaGiaCong = (_80perQuy100_04 + chitienGiacongNoibo + chitienGiacongNgoai) - tong_qlcb_2 - TongLuongCongNhat_AllNV;
            double giaTri_1SP_B3_1           = tong_qlSP_A71_1_VaGiaCong / tong_SPLamRa_B2_2;   // tính ra được 1 đơn vị sản phẩm có giá bao nhiêu
            //double tong0 = 0d, tong1 = 0d, tong2 = 0d, tong3 = 0d, tong4 = 0d, tong5 = 0d, tong6 = 0d, tong7 = 0d, tong8 = 0d, tong9 = 0d, tong10 = 0d, tong11 = 0d, tong12 = 0d, tong13 = 0d, tong14 = 0d, tong15 = 0d, tong16 = 0d, tong17 = 0d, tong18 = 0d, tong19 = 0d, tong20 = 0d, tong21 = 0d, tong22 = 0d, tong23 = 0d, tong24 = 0d, tong25 = 0d, tong26 = 0d, tong27 = 0d, tong28 = 0d, tong29 = 0d, tong30 = 0d, tong31 = 0d, tong32 = 0d, tong33 = 0d, tong34 = 0d, tong35 = 0d, tong36 = 0d;

            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                nv.chiTietLuong.LSP_Theo.CongThucTe = nv.chiTietLuong.SPLamRa_Theo.CongThucTe * giaTri_1SP_B3_1;
                nv.chiTietLuong.LSP_Theo.CheDoNghi  = nv.chiTietLuong.SPLamRa_Theo.CheDoNghi * giaTri_1SP_B3_1;
                nv.chiTietLuong.LSP_Theo.PhuCap     = nv.chiTietLuong.SPLamRa_Theo.PhuCap * giaTri_1SP_B3_1;
                tongQuyLuongSP += nv.chiTietLuong.LSP_Theo.TongCong_CD_PC;
                //fortesting region [03]
            }

            #endregion

            //fortesting testing region [01]
            #region             // cập nhật lương xuống csdl , trước khi cập nhật thì xoá lương cũ

            // cập nhật lương xuống csdl , trước khi cập nhật thì xoá lương cũ
            int kq1 = SqlDataAccessHelper.ExecNoneQueryString(
                "delete from KetLuongThang where Thang = @Thang", new string[] { "@Thang" }, new object[] { m_Thang });                 //INFO LOG DO KẾT LƯƠNG THÁNG THỰC HIỆN

            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                int kq = DAO5.InsKetLuongThang(m_Thang, nv);
                //if (kq == 0) MessageBox.Show("Xảy ra lỗi tại vị trí NV: " + nv.MaCC + nv.TenNV);//fortesting
            }

            // sau khi cập nhật lương từng nhân viên thì cập nhật thông số kết lương tháng
            int kq2 = DAO5.UpdInsThongsoKetluongThang(m_Thang,
                                                      XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290,
                                                      sanluong01, dongia02, perTrichQuyLuong,
                                                      sanluongGiacongNoiBo, dongiaGiacongNoiBo, sanluongGiacongNgoai, dongiaGiacongNgoai,
                                                      mucLuongToithieu, donGiaBdCa3, DinhMuccomtrua,
                                                      tongQuyLuongCV, tongQuyLuongNghiDinhCP,
                                                      tongChiKhacTuQuyLuong, tongQuyLuongSP, giaTri_1SP_B3_1);

            //ghi log
            string noidung = string.Format("Kết lương tháng [{0}]", m_Thang.ToString("MM/yyyy"));
            DAO5.GhiNhatKyThaotac("Kết lương", noidung);

            #endregion
        }
Exemple #21
0
        private void btnXoaGioRaa_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;
            var lydo   = cbLyDo.SelectedText;
            var ghichu = tbGhiChu.Text;

            #region hỏi lại ttrước khi xoá

            if (MessageBox.Show(string.Format(Resources.xacNhanXoaGioHangLoat, "ra"), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion


            if (dgrdDSGioVaoRa.SelectedRows.Count == 0)
            {
                return;
            }
            var flagThongBao = false;            // thông báo ko được xoá giờ đãn XN

            IEnumerable <DataGridViewRow> dataGridViewRows = dgrdDSGioVaoRa.SelectedRows.Cast <DataGridViewRow>();
            var arrRecord = (from row in dataGridViewRows
                             let nv = (cUserInfo)(((DataRowView)row.DataBoundItem).Row["cUserInfo"])
                                      let cChkInOut = (cChkInOut)(((DataRowView)row.DataBoundItem).Row["cChkInOut"])
                                                      let ngay = (DateTime)(((DataRowView)row.DataBoundItem).Row["TimeStrNgay"])
                                                                 select new { nhanvien = nv, CIO = cChkInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList();

            var ds_raa3_vao1     = new List <cChk>();
            var DS_Check_KoHopLe = new List <cChk>();
            foreach (var groupByNV in arrRecord)
            {
                var nhanvien = groupByNV.Key;
                foreach (var row in groupByNV)
                {
                    if (row.CIO.GetType() == typeof(cChkInOut_V))
                    {
                        flagThongBao = true;
                        continue;
                    }

                    if (row.CIO.HaveINOUT == -1)
                    {
                        continue;
                    }
                    var checkout = row.CIO.Raa;
                    XL.XoaGioChoNV(checkout, row.nhanvien, XL2.currUserID, lydo, ghichu);
                }
                XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                XL.GhepCIO_A(nhanvien.DS_Check_A, nhanvien.DS_CIO_A);
                XL.LoaiBoCIOKoHopLe(nhanvien.DS_CIO_A, nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                if (nhanvien.DS_Check_KoHopLe.Count > 0)
                {
                    DS_Check_KoHopLe.AddRange(nhanvien.DS_Check_KoHopLe);
                    nhanvien.DS_Check_KoHopLe.Clear();
                }

                XL.XetCa_CIO_A(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien.DS_Check_A);
                XL.TronDS_CIO_A_V(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa);
                XL.TinhCongTheoNgay(nhanvien.DSVaoRa, nhanvien.NgayCongBD_Bef2D, nhanvien.NgayCongKT_Aft2D, nhanvien.DSVang, nhanvien.DSNgayCong, nhanvien.MacDinhTinhPC50);
                XL.TinhLaiPhuCapTC(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong);
                XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong);
            }
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            loadGrid();


            if (flagThongBao)
            {
                AutoClosingMessageBox.Show("Không thể xoá các giờ đã xác nhận.", "Thông báo", 2000);
            }
        }
Exemple #22
0
        private void XuatBBLuong(object sender, WaitWindowEventArgs e)
        {
            string tenNVLapBieu  = (string)e.Arguments[0];
            string saveFileName  = (string)e.Arguments[1];
            var    ngaydauthang  = MyUtility.FirstDayOfMonth(m_Thang);
            var    ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang);
            //#region lấy dữ liệu kết lương để xuất

            var tableKetLuongThang        = DAO5.LayKetLuongThang(ngaydauthang);
            var tableThongsoKetluongThang = DAO5.LayThongsoKetluongThang(ngaydauthang);
            var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang);
            var tableTongLuongCongnhat    = SqlDataAccessHelper.ExecuteQueryString(
                @"select  CAST(SUM (SoNgayCong*DonGiaLuong) as float)  from DSNVChiCongNhatThang where Thang=@Thang",
                new string[] { "@Thang" }, new object[] { ngaydauthang });
            var tongLuongCongnhat  = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d;
            var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows
                                      let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value)
                                                                                                                           ? (double)row["LuongDieuChinh"]
                                                                                                                           : 0d
                                                           select luongdieuchinh).Sum();
            var tableKetcongNgay = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa   = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang      = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe      = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);
            var dsnv             = new List <cUserInfo>();

            ChuanBiDuLieuXuatLuong(dsnv, ngaydauthang, ngaycuoithang, tableKetLuongThang, tableKetcongNgay, tableKetcongCa, tableXPVang, tableNgayLe, tableDSNVChiCongnhatThang);

            //#endregion

            //fortesting testing region [02]
            using (var p = new ExcelPackage()) {
                //1. xuat bb bang thong so san luong, don gia, he so pc
                #region lay thong so cac loai pc de ghi cot tieu de
                int pc30   = (int)tableThongsoKetluongThang.Rows[0]["HSPCDem"];
                int pc50   = (int)tableThongsoKetluongThang.Rows[0]["HSPCTangCuong"];
                int pctcc3 = (int)tableThongsoKetluongThang.Rows[0]["HSPCTangCuong_Dem"];
                int pc100  = (int)tableThongsoKetluongThang.Rows[0]["HSPC200"];
                int pc160  = (int)tableThongsoKetluongThang.Rows[0]["HSPC260"];
                int pc200  = (int)tableThongsoKetluongThang.Rows[0]["HSPC300"];
                int pc290  = (int)tableThongsoKetluongThang.Rows[0]["HSPC390"];
                #endregion
                //2. xuat bb bang ket cong thang
                #region ghi sheet bang ket cong thang trinh ky

                p.Workbook.Worksheets.Add("BangKetCong");
                var ws = p.Workbook.Worksheets["BangKetCong"];
                ws.Name = "BangKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangKetcongThang(ws, ngaydauthang, ngaycuoithang, dsnv, string.Empty, string.Empty, pc30, pc50, pctcc3, pc100, pc160, pc200, pc290);

                #endregion
                //3. xuat bb chi tiết kết công
                #region ghi sheet chi tiết kết công

                p.Workbook.Worksheets.Add("ChiTietKetCong");
                ws      = p.Workbook.Worksheets["ChiTietKetCong"];
                ws.Name = "ChiTietKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangChiTietKetCong(ws, ngaydauthang, ngaycuoithang, dsnv, pc30, pc50, pctcc3, pc100, pc160, pc200, pc290);

                #endregion
                //4. xuat bb bang luong cong nhat
                #region ghi sheet bang luong cong nhat

                p.Workbook.Worksheets.Add("BangLuongCongNhat");
                ws      = p.Workbook.Worksheets["BangLuongCongNhat"];
                ws.Name = "BangLuongCongNhat";
                XL.ExportSheetBangLuongCongNhat(ws, ngaydauthang, tableDSNVChiCongnhatThang);

                #endregion
                //5. xuat bb bang luong chinh thuc
                #region ghi sheet bảng lương

                p.Workbook.Worksheets.Add("BangLuong");
                ws      = p.Workbook.Worksheets["BangLuong"];
                ws.Name = "BangLuong";
                XL.ExportSheetBangLuong(ws, m_Thang, dsnv, tenNVLapBieu);

                #endregion
                //6. xuat bb bang tong hop so lieu giam doc ky duyet
                #region ghi sheet bảng tổng hợp số liệu

                p.Workbook.Worksheets.Add("BangTongHopChi");
                ws      = p.Workbook.Worksheets["BangTongHopChi"];
                ws.Name = "BangTongHopChi";
                XL.ExportSheetTongHopChi(ws, m_Thang, tableThongsoKetluongThang, tongLuongCongnhat, tongLuongDieuchinh);

                #endregion
                //7. xuat sheet thong ke sữa
                #region ghi sheet thống kê BD ĐH

                p.Workbook.Worksheets.Add("BangThongKeBoiDuongDocHai");
                ws      = p.Workbook.Worksheets["BangThongKeBoiDuongDocHai"];
                ws.Name = "BangThongKeBoiDuongDocHai";
                XL.ExportSheetBangThongKeSua(ws, ngaydauthang, ngaycuoithang, dsnv);

                #endregion


                Byte[] bytes = p.GetAsByteArray();
                XL.XuatFileExcel(saveFileName, bytes, "frm4LuuHSPC XuatBBLuong");
            }
        }
        private void btnDiemDanh_Click(object sender, EventArgs e)
        {
            //1. lấy dữ liệu từ form
            #region lấy ngày BD và kết thúc, và update lại Ngày BD = 1 ngày trước 31/08 12:00 AM, ngày KT là 1 ngày sau ngay 1 23:59:59
            dtpNgay.Update();
            DateTime ngayBD = dtpNgay.Value.Date;
            ngayBD = ngayBD.AddDays(-1d);
            DateTime ngayKT = ngayBD.AddDays(2d).Subtract(new TimeSpan(0, 0, 1));
            #endregion
            //-----------BUG [KHÔNG PHẢI BUG] CHỈ TÔ MÀU ĐỂ CHÚ Ý] bắt buộc EndEdit thao tác trên Grid rồi mới thực hiện xử lý tác vụ

            //2. lấy danh sách nhân viên check
            if (flstDSNVDiemDanh == null)
            {
                flstDSNVDiemDanh = new List <cUserInfo>();
            }
            else
            {
                flstDSNVDiemDanh.Clear();
            }

            LayDSNVXemCong(fTableDSNVTrongPhong, flstDSNVDiemDanh, flstDSNV);
            //3. lấy dữ liệu chấm công của các nhân viên
            //[CHÚ Ý] ngày bắt đầu và kết thúc đã cộng trừ thêm 1 ngày trước sau ở bở trên
            try {
                XL.XemCong(flstDSNVDiemDanh, ngayBD, ngayKT);
            } catch (Exception exception) {
                log.Info(exception);
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi");
                GC.Collect();
                return;
            }

            //4. xử lý dữ liệu để đưa lên lưới tổng hợp
            DataTable tableCTDiemDanh = dgrdTongHop.DataSource as DataTable;
            if (tableCTDiemDanh == null)
            {
                tableCTDiemDanh = XL.TaoCauTrucDataTable(
                    new[] { "UserEnrollNumber", "UserFullName", "TimeStrVao1", "TimeStrRa1", "TimeStrVao2", "TimeStrRa2", "TimeStrVao3", "TimeStrRa3", "ShiftID1", "ShiftID2", "ShiftID3", "Ca", "TrangThai" },
                    new[] { typeof(int), typeof(string), typeof(DateTime), typeof(DateTime), typeof(DateTime), typeof(DateTime), typeof(DateTime), typeof(DateTime), typeof(int), typeof(int), typeof(int), typeof(string), typeof(string), });
            }
            else
            {
                tableCTDiemDanh.Rows.Clear();
            }

            int SoNVDangLamViec = 0, SoNVDaRaVe = 0, SoNVVang = 0;
            foreach (var nhanvien in flstDSNVDiemDanh)
            {
                DataRow row = tableCTDiemDanh.NewRow();
                row["UserEnrollNumber"] = nhanvien.UserEnrollNumber;
                row["UserFullName"]     = nhanvien.UserFullName;
                cNgayCong ngayCong = nhanvien.DSNgayCong[1];
                //nếu có check thì khỏi ghi vắng
                string ChuoiCa        = string.Empty;
                string ChuoiTrangThai = string.Empty;
                if (ngayCong.HasCheck)
                {
                    for (int i = 0; i < ngayCong.DSVaoRa.Count; i++)
                    {
                        if (i >= 3)
                        {
                            break;
                        }
                        row["TimeStrVao" + (i + 1)] = (ngayCong.DSVaoRa[i].Vao != null) ? ngayCong.DSVaoRa[i].Vao.TimeStr : (object)DBNull.Value;
                        row["TimeStrRa" + (i + 1)]  = (ngayCong.DSVaoRa[i].Raa != null) ? ngayCong.DSVaoRa[i].Raa.TimeStr : (object)DBNull.Value;
                        if (ngayCong.DSVaoRa[i].HaveINOUT > 0)
                        {
                            ChuoiCa += ngayCong.DSVaoRa[i].ThuocCa.ShiftCode + "; ";
                        }
                        else if (ngayCong.DSVaoRa[i].HaveINOUT == -1)
                        {
                            ChuoiCa += "KV; ";
                        }
                        else if (ngayCong.DSVaoRa[i].HaveINOUT == -2)
                        {
                            ChuoiCa += "KR; ";
                        }
                    }
                    cChkInOut lastCIO1 = ngayCong.DSVaoRa[ngayCong.DSVaoRa.Count - 1];
                    // xét vào ra cuối để ghi trạng thái
                    if (lastCIO1.HaveINOUT == -2)
                    {
                        ChuoiTrangThai = "Đang làm việc; ";
                        SoNVDangLamViec++;
                    }
                    else if (lastCIO1.HaveINOUT > 0 || lastCIO1.HaveINOUT == -1)
                    {
                        ChuoiTrangThai = "Đã ra về; ";
                        SoNVDaRaVe++;
                    }
                }
                else   // không có check, kiểm tra có khai báo vắng ko, nếu có thì ghi
                {
                    SoNVVang++;
                    ChuoiCa = string.Empty;
                    if (ngayCong.DSVang != null && ngayCong.DSVang.Count != 0)
                    {
                        foreach (var loaiVang in ngayCong.DSVang)
                        {
                            ChuoiTrangThai += "Vắng " + loaiVang.KyHieu + "; ";
                        }
                    }
                    else
                    {
                        ChuoiTrangThai = "Vắng";
                    }
                }
                row["Ca"]        = ChuoiCa;
                row["TrangThai"] = ChuoiTrangThai;
                tableCTDiemDanh.Rows.Add(row);
            }
            tbTongSoNV.Text        = flstDSNVDiemDanh.Count.ToString();
            tbSoNVDangLamViec.Text = SoNVDangLamViec.ToString();
            tbSoNVDaRaVe.Text      = SoNVDaRaVe.ToString();
            tbSoNVVang.Text        = SoNVVang.ToString();
            dgrdTongHop.DataSource = tableCTDiemDanh;
        }
Exemple #24
0
        private void XuatBangChiTiet(object sender, WaitWindowEventArgs e)
        {
            string saveFileName = e.Arguments[0].ToString();

            var dsnv          = new List <cUserInfo>();
            var ngaydauthang  = MyUtility.FirstDayOfMonth(m_Thang);
            var ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang);

            #region lấy dữ liệu kết lương để xuất

            var tableKetLuongThang        = DAO5.LayKetLuongThang(ngaydauthang);
            var tableThongsoKetluongThang = DAO5.LayThongsoKetluongThang(ngaydauthang);
            var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang);
            var tableTongLuongCongnhat    = SqlDataAccessHelper.ExecuteQueryString(
                @"select  CAST(SUM (SoNgayCong*DonGiaLuong) as float)  from DSNVChiCongNhatThang where Thang=@Thang",
                new string[] { "@Thang" }, new object[] { ngaydauthang });
            var tongLuongCongnhat  = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d;
            var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows
                                      let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value)
                                                                                                                           ? (double)row["LuongDieuChinh"]
                                                                                                                           : 0d
                                                           select luongdieuchinh).Sum();
            var tableKetcongNgay = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa   = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang      = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe      = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);

            #endregion
            ChuanBiDuLieuXuatLuong(dsnv, ngaydauthang, ngaycuoithang, tableKetLuongThang, tableKetcongNgay, tableKetcongCa, tableXPVang, tableNgayLe, tableDSNVChiCongnhatThang);


            var      @continue = true;
            FileInfo template, fileResult;
            try {
                template = new FileInfo(Settings.Default.pathReportChiTietLuong);
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(string.Format(Resources.Text_CoLoi), Resources.Caption_Loi); return;
                }
            }
            try {
                fileResult = new FileInfo(saveFileName);
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(string.Format(Resources.Text_CoLoi), Resources.Caption_Loi); return;
                }
            }

            try {
                using (var packageResult = new ExcelPackage(template)) {
                    var workbook = packageResult.Workbook;
                    #region ghi sheet thong so

                    var ws = workbook.Worksheets["ThongSo"];
                    ws.Name = "ThongSo";                     //Setting Sheet's name
                    XL.ExportSheetThongSo1(ws, ngaydauthang, tableThongsoKetluongThang);
                    #endregion

                    #region ghi sheet chi tiết từng ngày công
                    ws      = workbook.Worksheets["BangChiTietNgayCong"];
                    ws.Name = "BangChiTietNgayCong";
                    XL.ExportSheetChiTietNgayCong1(ws, dsnv);

                    #endregion

                    var ws_Template = workbook.Worksheets["BangChiTietLuong"];
                    XL.ExportSheetChiTietLuong1(ws_Template, dsnv);

                    while (@continue)
                    {
                        try {
                            packageResult.SaveAs(fileResult);
                            @continue = false;
                        } catch (Exception ex) {
                            lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                            if (ex is IOException)
                            {
                                MessageBox.Show(Resources.Text_FileDangMoBoiUngDungKhac, Resources.Caption_Loi);
                                @continue = true;
                            }
                            else
                            {
                                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
                                @continue = false;
                            }
                        }
                    }
                }
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is IOException)
                {
                    MessageBox.Show(Resources.Text_FileDangMoBoiUngDungKhac, Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
                    return;
                }
            }
        }
        private void btnSuaGio_Click(object sender, EventArgs e)
        {
            IsReload = true;

            DataRowView row = dgrdTongHop.SelectedRows[0].DataBoundItem as DataRowView;

            if (row == null)
            {
                return;
            }
            int       iUserEnrollNumber = (int)row["UserEnrollNumber"];
            cUserInfo tmpNV             = flstDSNVChk.Find(o => o.UserEnrollNumber == iUserEnrollNumber);

            DateTime tmpOldVao   = (row["TimeStrVao"] != DBNull.Value) ? (DateTime)row["TimeStrVao"] : DateTime.MinValue;
            DateTime tmpOldRaa   = (row["TimeStrRa"] != DBNull.Value) ? (DateTime)row["TimeStrRa"] : DateTime.MinValue;
            DateTime tmpNgayCong = (DateTime)row["TimeStrNgay"];


            cNgayCong ngayCong = tmpNV.DSNgayCong.Find(o => o.NgayCong == tmpNgayCong);
            cChkInOut old_CIO  = row["obj"] as cChkInOut;

            if (ngayCong.HasCheck == false || (tmpOldVao == DateTime.MinValue && tmpOldRaa == DateTime.MinValue))
            {
                old_CIO = null;
            }
            else if (tmpOldVao == DateTime.MinValue)
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Raa.TimeStr == tmpOldRaa);
            }
            else if (tmpOldRaa == DateTime.MinValue)
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Vao.TimeStr == tmpOldVao);
            }
            else
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT > 0 && o.Vao.TimeStr == tmpOldVao && o.Raa.TimeStr == tmpOldRaa);
            }
            if (old_CIO != null && old_CIO.GetType() == typeof(cChkInOut_V))
            {
                MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo");
                return;
            }

            string Lydo = string.Empty;

            if (cbLyDo_Sua.SelectedItem == null)
            {
                Lydo = cbLyDo_Sua.Text;
            }
            else if (cbLyDo_Sua.SelectedItem != null)
            {
                Lydo = (string)cbLyDo_Sua.SelectedItem;
            }

            if (checkVao_Sua.Checked)
            {
                dtpVao_Sua.Update();
                cChk tmpCheck = old_CIO.Vao;
                if (DAL.SuaGioChoNV(iUserEnrollNumber, tmpCheck.TimeStr, dtpVao_Sua.Value.Add(new TimeSpan(0, 0, 1)), true, tmpCheck.Source, tmpCheck.MachineNo, ThamSo.currUserID, Lydo, tbGhiChu_Sua.Text) == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                }
            }
            if (checkRa_Sua.Checked)
            {
                dtpRa_Sua.Update();
                cChk tmpCheck = old_CIO.Raa;
                if (DAL.SuaGioChoNV(iUserEnrollNumber, tmpCheck.TimeStr, dtpRa_Sua.Value, false, tmpCheck.Source, tmpCheck.MachineNo, ThamSo.currUserID, Lydo, tbGhiChu_Sua.Text) == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                }
            }
            try {
                XL.XemCong(tmpNV, fNgayBD, fNgayKT);
                loadTable();
            } catch (Exception) {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi");
                return;
            }
            GC.Collect();
        }
Exemple #26
0
        private void ChuanBiDuLieuXuatLuong(List <cUserInfo> dsnv, DateTime ngaydauthang, DateTime ngaycuoithang,
                                            DataTable tableKetLuongThang, DataTable tableKetcongNgay, DataTable tableKetcongCa, DataTable tableXPVang, DataTable tableNgayLe,
                                            DataTable tableDSNVChiCongnhatThang)
        {
            #region lấy dữ liệu kết lương để xuất

            //var tableKetLuongThang = DAO.LayKetLuongThang(ngaydauthang);
            //var tableThongsoKetluongThang = DAO.LayThongsoKetluongThang(ngaydauthang);
            //var tableDSNVChiCongnhatThang = DAO.LayTableCongNhat(ngaydauthang);
            //var tableTongLuongCongnhat = SqlDataAccessHelper.ExecuteQueryString(
            //    @"select  CAST(SUM (SoNgayCong*DonGiaLuong) as float)  from DSNVChiCongNhatThang where Thang=@Thang",
            //    new string[] { "@Thang" }, new object[] { ngaydauthang });
            //var tongLuongCongnhat = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d;
            //var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows
            //                          let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value)
            //                                                   ? (double)row["LuongDieuChinh"]
            //                                                   : 0d
            //                          select luongdieuchinh).Sum();
            //var tableKetcongNgay = DAO.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            //var tableKetcongCa = DAO.LayKetcongCa(ngaydauthang, ngaycuoithang);
            //var tableXPVang = DAO.LayTableXPVang(ngaydauthang, ngaycuoithang);
            //var tableNgayLe = DAO.DocNgayLe(ngaydauthang, ngaycuoithang);

            #endregion

            #region tái tạo lại danh sách phòng ban của thời điểm kết lương để biết nv thuộc group phòng ban nào tại thời điểm kết lương

            var dsphongban = (from DataRow row in tableKetLuongThang.Rows
                              group row by new cPhongBan {
                ID = (int)row["IDPhong"],
                Ten = row["TenPhong"].ToString(),
                ViTri = (int)row["ViTriPhong"],
                idParent = (int)row["RelationIDDept"]
            }
                              into @group
                              orderby @group.Key.ViTri
                              select @group.Key).ToList();

            foreach (var item in dsphongban)
            {
                // mỗi item tương ứng 1 phòng ban
                int?idParent = item.idParent;
                if (idParent != null)
                {
                    cPhongBan parent = dsphongban.Find(o => o.ID == idParent);                     // info trường hợp idParent == 0 --> ko có phòng id=0 --> parent = null
                    item.parent = parent;
                }
            }

            #endregion

            foreach (DataRow row in tableKetLuongThang.Rows)               //info chỉ lấy các nhân viên chính thức, vừa chính thức vừa công nhật, thiếu các nv công nhật

            {
                cUserInfo nv = new cUserInfo();
                nv.MaCC       = (int)row["UserEnrollNumber"];
                nv.DSNgayCong = new List <cNgayCong>();
                nv.DSVang     = new List <cLoaiVang>();
                for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                {
                    XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                }
                XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);
                XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);

                //kiểm tra nv đó có làm công nhật ko ? tìm nv chính thức trong dsnv công nhật
                // vì bảng kết lương chỉ bao gồm các nhân viên chính thức , các nhân viên công nhật ko chính thức sẽ ko có trong này
                XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang);

                #region lấy thông tin cá nhân nv, phòng ban tổng công, phụ cấp, lương cơ bản, lương sản phẩm ... để xuất

                nv.MaNV  = row["UserFullCode"].ToString();
                nv.TenNV = row["UserFullName"].ToString();
                nv.HeSo  = new HeSo {
                    LuongCB = (float)row["HSLCB"], LuongCV = (float)row["HSLCV"], BHCongThem_ChoGD_PGD = (float)row["HSBHCongThem"]
                };
                nv.PhongBan                             = dsphongban.Find(o => o.ID == (int)row["IDPhong"]);
                nv.IDChucVu                             = (int)row["IDChucVu"];
                nv.ChucVu                               = row["ChucVu"].ToString();
                nv.ThongKeThang.Cong                    = (float)row["TongCong"];
                nv.ThongKeThang.Le                      = (float)row["TongLe"];
                nv.ThongKeThang.Phep                    = (float)row["TongPhep"];
                nv.ThongKeThang.H_CT_PT                 = (float)row["TongH_CT_PT"];
                nv.ThongKeThang.NgayQuaDem              = (int)row["TongQuaDem"];
                nv.ThongKeThang.CongCV                  = (float)row["TongCongCV"];
                nv.ThongKeThang.BHXH                    = (float)row["TongBHXH"];
                nv.ThongKeThang.NghiRo                  = (float)row["TongRo"];
                nv.ThongKeThang.PTDT                    = (float)row["TongPTDT"];//DANGLAM
                nv.ThongKeThang.PhuCaps._30_dem         = (float)row["TongPCDem"];
                nv.ThongKeThang.PhuCaps._50_TC          = (float)row["TongPCTC"];
                nv.ThongKeThang.PhuCaps._100_TCC3       = (float)row["TongPCTC_Dem"];
                nv.ThongKeThang.PhuCaps._100_LVNN_Ngay  = (float)row["TongPC200"];
                nv.ThongKeThang.PhuCaps._150_LVNN_Dem   = (float)row["TongPC260"];
                nv.ThongKeThang.PhuCaps._200_LeTet_Ngay = (float)row["TongPC300"];
                nv.ThongKeThang.PhuCaps._250_LeTet_Dem  = (float)row["TongPC390"];
                nv.ThongKeThang.PhuCaps._Cus            = (float)row["TongPCCus"];
                nv.ThongKeThang.PhuCaps._TongPC         = (float)row["TongPC"];         // tính toán dưới sql = tổng các loại phụ cấp, ko lưu dưới csdl
                nv.chiTietLuong.LCB_Theo.CongThucTe     = (double)row["LuongCB_TheoCongThucTe"];
                nv.chiTietLuong.LCB_Theo.CheDoNghi      = (double)row["LuongCB_TheoCheDoNghi"];
                nv.chiTietLuong.LCB_Theo.CongCV         = (double)row["LuongCB_TheoCongCV"];
                nv.chiTietLuong.LCB_Theo.PhuCap         = (double)row["PCLuongCB"];         // với 4 chi tiết lương này có thể tính được các tổng LCB
                nv.chiTietLuong.LSP_Theo.CongThucTe     = (double)row["LuongSP_TheoCongThucTe"];
                nv.chiTietLuong.LSP_Theo.CheDoNghi      = (double)row["LuongSP_TheoCheDoNghi"];
                nv.chiTietLuong.LSP_Theo.PhuCap         = (double)row["PCLuongSP"];         // với 2 chi tiết lương này có thể tính được các tổng LSP
                nv.chiTietLuong.LuongDieuChinh          = (double)row["LuongDieuChinh"];
                nv.chiTietLuong.BoiDuongQuaDem          = (double)row["BoiDuongCa3"];
                nv.chiTietLuong.KhauTru.TamUng          = (double)row["TamUng"];
                nv.chiTietLuong.MucDongBHXH             = (float)row["MucDongBHXH"];
                nv.chiTietLuong.KhauTru.BHXH            = (double)row["KhauTruBHXH"];
                nv.chiTietLuong.KhauTru.ThuChiKhac      = (double)row["ThuChiKhac"];
                nv.chiTietLuong.TienComTrua             = (double)row["TienComTrua"];
                nv.chiTietLuong.ThucLanh                = (double)row["ThucLanh"];

                #endregion

                dsnv.Add(nv);
            }
        }
Exemple #27
0
        private void btnCapNhatVaoCSDL_Click(object sender, EventArgs e)
        {
            IsReload = true;
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(m_Thang.Date, MyUtility.LastDayOfMonth(m_Thang)))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "chỉnh sửa thu chi tháng", "thực hiện thao tác", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion


            var      table     = dgrdDThuchiExcel.DataSource as DataTable;
            DateTime thang     = m_Thang;
            var      flagError = false;

            #region xác nhận trước khi thực hiện

            if (
                MessageBox.Show(string.Format("Bạn muốn cập nhật cho tháng {0}?", thang.ToString("M/yyyy")), Resources.Caption_XacNhan,
                                MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            if (table != null)
            {
                var tableTatCaNV = XL.LayDSNV(true);                //tbd
                foreach (DataRow row in table.Rows)
                {
                    #region lấy thông tin

                    var userFullcode = row["UserFullCode"].ToString().TrimStart().TrimEnd().ToLower();
                    //var arrRows = tableTatCaNV.Select("UserFullCode = '" +userFullcode + "'","", DataViewRowState.CurrentRows);
                    var resultRow = (tableTatCaNV.Rows.Cast <DataRow>().Where(
                                         dataRow => dataRow["UserFullCode"].ToString().TrimStart().TrimEnd().ToLower() == userFullcode)).SingleOrDefault();
                    if (resultRow == null)
                    {
                        continue;
                    }
                    var tenNV             = resultRow["UserFullName"].ToString();
                    var UserEnrollNumber  = (int)resultRow["UserEnrollNumber"];
                    var luongdieuchinh    = (double)row["LuongDieuChinh"];
                    var tamung            = (double)row["TamUng"];
                    var thuchikhac        = (double)row["ThuChiKhac"];
                    var mucdongbhxhDouble = (double)row["MucDongBHXH"];
                    var mucdongbhxhFloat  = Convert.ToSingle(mucdongbhxhDouble);

                    #endregion

                    var kq = DAO5.CapnhatThuchiThang(UserEnrollNumber, thang, luongdieuchinh, tamung, thuchikhac, mucdongbhxhFloat);

                    #region báo lỗi nếu ko cập nhật được

                    if (kq == 0)
                    {
                        flagError = true;
                        ACMessageBox.Show(string.Format("Xảy ra lỗi trong quá trình cập nhật tại vị trí nhân viên {0}, mã {1}.\nVui lòng thử lại.", tenNV,
                                                        userFullcode), "Lỗi", 3000);
                        break;
                    }

                    #endregion
                }
                if (flagError == false)
                {
                    ACMessageBox.Show("Thực hiện thành công.", "Thông báo", 2000);
                }
            }
        }
Exemple #28
0
        private void btnXuatBB_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            //1. lấy dữ liệu từ form
            #region lấy ngày BD và kết thúc, và update lại Ngày BD = 1 ngày trước 31/08 12:00 AM, ngày KT là 1 ngày sau ngay 1 23:59:59
            dtpNgay.Update();
            DateTime ngayBD = dtpNgay.Value.Date;
            ngayBD = ngayBD.AddDays(-2d);
            DateTime ngayKT = ngayBD.AddDays(4d);
            #endregion

            // lấy dsnv tất cả nv thuộc các phòng ban được chọn
            DataTable table = DAL.LayDSNV(m_listIDPhongBan.ToArray());
            if (table.Rows.Count == 0)
            {
                return;
            }
            m_DSNV.Clear();
            XL.KhoiTaoDSNV(m_DSNV, table);

            //3. lấy dữ liệu chấm công của các nhân viên
            //[CHÚ Ý] ngày bắt đầu và kết thúc đã cộng trừ thêm 1 ngày trước sau ở bở trên
            if (XL.KiemtraDulieuCapnhatTuServer(DateTime.Now) == false)
            {
                AutoClosingMessageBox.Show("Dữ liệu chấm công chưa được cập nhật mới nhất từ các máy chấm công.\nCác thay đổi giờ chấm công có thể làm sai sót giờ chấm công thực tế khi dữ liệu được cập nhật.", "Thông báo", 4000);
            }

            int SoNVDangLamViec = 0, SoNVDaRaVe = 0, SoNVVang = 0;
            //dsnv = XL.XemCong(table, ArrDSMaCC_Checked, ngayBD, ngayKT);
            XL.DiemDanh(m_DSNV, ngayBD, ngayKT);
            m_CTDiemDanh.Rows.Clear();
            XL.TaoTableDiemDanh(m_DSNV, m_CTDiemDanh, out SoNVDangLamViec, out SoNVDaRaVe, out SoNVVang);

            saveFileDlgDiemDanh.Filter = "Excel File|*.xlsx";
            saveFileDlgDiemDanh.ShowDialog();
            if (saveFileDlgDiemDanh.FileName == String.Empty)
            {
                return;
            }
            var saveFileName = saveFileDlgDiemDanh.FileName;

            using (var p = new ExcelPackage()) {
                #region Ghi file , nếu xảy ra lỗi thì báo
                XuatBBDSNVDLV(p);
                XuatBBDSNVVang(p);
                Byte[] bin = p.GetAsByteArray();
                try {
                    File.WriteAllBytes(saveFileName, bin);                    //(file_path, bin);
                    AutoClosingMessageBox.Show("Xuất báo biểu thành công.", "Thông báo", 2000);
                } catch (Exception exception) {
                    lg.Error("XuatBBDiemDanh", exception);
                    if (exception is UnauthorizedAccessException)
                    {
                        MessageBox.Show("Bạn chưa được cấp quyền ghi file vào folder.", "Lỗi");
                    }
                    else if (exception is DirectoryNotFoundException)
                    {
                        MessageBox.Show("Không tìm thấy folder lưu trữ.", "Lỗi");
                    }
                    else if (exception is IOException)
                    {
                        MessageBox.Show("File đang mở bởi ứng dụng khác.", "Lỗi");
                    }
                    else
                    {
                        MessageBox.Show("Không thể ghi được file báo biểu.", "Lỗi");
                    }
                }

                #endregion
            }
        }
Exemple #29
0
        private void XuatBBChamCong(object sender, WaitWindowEventArgs e)
        {
            string           filePath     = e.Arguments[0].ToString();
            string           tenNVLapBieu = e.Arguments[1].ToString();
            string           tenTrgBP     = e.Arguments[2].ToString();
            DateTime         thang        = (DateTime)e.Arguments[3];
            List <cPhongBan> dsphongban   = (List <cPhongBan>)e.Arguments[4];
            var tongCongKoTinhCV          = 0f;
            var congTinhLuong             = 0f;
            var congKOtinhLuong           = 0f;

            try              //general try catch
            {
                List <WarningMessage> warningMessages = new List <WarningMessage>();
                #region lấy thông tin từ csdl và khỏi tạo  nv

                DateTime ngaydauthang = MyUtility.FirstDayOfMonth(dtpThang.Value), ngaycuoithang = MyUtility.LastDayOfMonth(dtpThang.Value);
                var      tableKetcongNgay          = DAO.LayKetcongNgay(ngaydauthang, ngaycuoithang);
                var      tableKetcongCa            = DAO.LayKetcongCa(ngaydauthang, ngaycuoithang);
                var      tableXPVang               = DAO.LayTableXPVang(ngaydauthang, ngaycuoithang);
                var      tableNgayLe               = DAO.DocNgayLe(ngaydauthang, ngaycuoithang);
                var      tableDSNVChiCongnhatThang = DAO.LayTableCongNhat(ngaydauthang);

                var dsnv = new List <cUserInfo>();
                XL.KhoiTaoDSNV_ChamCong(dsnv, (from p in dsphongban select p.ID).ToList(), dsphongban);                 // khởi tạo tất cả nhân viên tính công, bao gồm cả công nhật ngày(nv chính thức) và công nhật tháng

                /*
                 *                      List<cPhongBan> dsphongban = new List<cPhongBan>();
                 *                      // đưa về root node trước khi thực hiện
                 *                      var root = treePhongBan.TopNode;
                 *                      GetTopLevelNode(ref root);// mỗi lần duyệt node sẽ làm root node chuyển về parent của node cuối nên phải trả về node gốc để duyệt từ đầu
                 *                      while (root.PrevNode != null) root = root.PrevNode;
                 *                      GetNode_DuocThaotac_CheckKetcong(root, dsphongban);
                 */

                #endregion
                // xác định công chuẩn của tháng
                var congChuanThang = XL.TinhCongChuanCuaThang(ngaydauthang);

                #region                 //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi

                try {
                    foreach (var nv in dsnv)
                    {
                        nv.ThongKeThang = new ThongKeCong_PC();
                        nv.DSNgayCong   = new List <cNgayCong>();
                        nv.DSVang       = new List <cLoaiVang>();
                        for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                        {
                            XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                        }
                        //load ds xp vắng
                        //XL.LoadDSXPVang(nv.MaCC, nv.DSNgayCong, tableXPVang);
                        //XL.LoadNgayLe(nv.DSNgayCong, tableNgayLe);
                        XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);                        //info trường hợp nhân viên công nhật sẽ được xử lý bên dưới
                        XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);
                        XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang);
                    }

                    var soNgayChuNhat = XL.DemSoNgayNghiChunhat(ngaydauthang, true, false);
                    var soNgayThu7 = XL.DemSoNgayNghiChunhat(ngaydauthang, false, true);                    //v 4.0.0.1
                    int soNgayChamCongx2 = 0, soNgayNghiAnhHuongCongx2 = 0;
                    foreach (var nv in dsnv)
                    {
                        XL.ThongKeThang(ref nv.ThongKeThang, nv.DSNgayCong, nv.NgayBDCongnhat, nv.NgayKTCongnhat, nv.LoaiCN, out soNgayChamCongx2, out soNgayNghiAnhHuongCongx2);
                        // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo
                        if (nv.LoaiCN == LoaiCongNhat.NVCongNhat)                        // nhân viên làm công nhật, công cv tự động, khai báo = 0
                        {
                            nv.ThongKeThang.CongCV_Auto = 0f;
                            nv.ThongKeThang.CongCV_KB   = 0f;
                        }
                        else
                        {
                            if (nv.LoaiCN == LoaiCongNhat.NVChinhThuc)                            // nhân viên chính thức
                            {
                                congTinhLuong = (nv.ThongKeThang.TongNgayLV4008
                                                 + nv.ThongKeThang.Phep + nv.ThongKeThang.Le                                 //ver4.0.0.8
                                                 + nv.ThongKeThang.H_CT_PT);
                                congKOtinhLuong = nv.ThongKeThang.TongTruCongTreVR + nv.ThongKeThang.TongTruCongSomVR + nv.ThongKeThang.TreSom_KoDuBuCong
                                                  + nv.ThongKeThang.BHXH + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo;                                                 //ko có nv.ThongKeThang.CongCV_KB
                                tongCongKoTinhCV = congTinhLuong + congKOtinhLuong;

/*
 *                                                              tongCongKoTinhCV =  (nv.ThongKeThang.TongNgayLV4008
 + nv.ThongKeThang.TongTruCongTreVR+nv.ThongKeThang.TongTruCongSomVR + nv.ThongKeThang.TreSom_KoDuBuCong
 + nv.ThongKeThang.Phep + nv.ThongKeThang.Le //ver4.0.0.8
 + nv.ThongKeThang.BHXH + nv.ThongKeThang.H_CT_PT
 + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo + nv.ThongKeThang.CongCV_KB);//DANGLAM
 */

                                nv.ThongKeThang.CongCV_Auto = congChuanThang - tongCongKoTinhCV;
                                if (nv.ThongKeThang.CongCV_Auto < 0f)
                                {
                                    nv.ThongKeThang.CongCV_Auto = 0f;
                                }
                            }
                            else                            // nhân viên chính thức vừa công nhật thì công cv_auto =0, công cv khai báo ko đổi
                            {
                                nv.ThongKeThang.CongCV_Auto = 0f;
                            }
                        }
                        nv.ThongKeThang.CongCV = nv.ThongKeThang.CongCV_Auto + nv.ThongKeThang.CongCV_KB;
                        if (XL.KiemTraDieuKienCongCVAuto_VuotNguong(nv.ThongKeThang.CongCV_Auto, soNgayThu7, soNgayChuNhat))
                        {
                            warningMessages.Add(
                                new WarningMessage {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Có số công chờ việc được tính tự động [{0}] công theo quy định vượt quá [{1}] ngày thứ Bảy trong tháng.",
                                    nv.ThongKeThang.CongCV_Auto.ToString("#0.0#"), soNgayThu7)
                            });
                        }
                        if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 1)
                        {
                            warningMessages.Add(
                                new WarningMessage
                            {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Chấm công làm việc ngày nghỉ hàng tuần chưa đúng quy định ([{0}] ngày nghỉ >= [{1}] ngày chủ nhật).",
                                    soNgayNghiAnhHuongCongx2, soNgayChuNhat)
                            });
                        }
                        else if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 2)
                        {
                            warningMessages.Add(
                                new WarningMessage
                            {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Chấm công làm việc ngày nghỉ hàng tuần chưa đúng quy định ([{0}] ngày chấm công làm việc ngày nghỉ hàng tuần + [{1}] ngày nghỉ > [{2}] ngày chủ nhật).",
                                    soNgayChamCongx2, soNgayNghiAnhHuongCongx2, soNgayChuNhat)
                            });
                        }
                        else if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 3)
                        {
                            warningMessages.Add(
                                new WarningMessage
                            {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Nhân viên có [{0}] công làm việc vượt [{1}] ngày công chuẩn của tháng.",
                                    congTinhLuong.ToString("#0.0#"), congChuanThang.ToString(""))
                            });
                        }
                    }
                } catch (Exception ex) {
                    lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                }

                #endregion


                using (var p = new ExcelPackage()) {
                    //2. xuat bb bang ket cong thang
                    #region ghi sheet bang ket cong thang trinh ky

                    p.Workbook.Worksheets.Add("BangKetCong");
                    var ws = p.Workbook.Worksheets["BangKetCong"];
                    ws.Name = "BangKetCong";                                                                                                                  //Setting Sheet's name
                    XL.ExportSheetBangKetcongThang(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                                   dsnv, tenNVLapBieu, tenTrgBP, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290); //info dsnv kết công bộ phận gồm cả nv công nhật, chính thức, vừa chính thức vừa công nhật  khác với bảng lương

                    #endregion
                    //3. xuat bb chi tiết kết công
                    #region ghi sheet chi tiết kết công

                    p.Workbook.Worksheets.Add("ChiTietKetCong");
                    ws      = p.Workbook.Worksheets["ChiTietKetCong"];
                    ws.Name = "ChiTietKetCong";                     //Setting Sheet's name
                    XL.ExportSheetBangChiTietKetCong(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                                     dsnv, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290);

                    #endregion
                    //4. xuất bb lưu ý nếu có
                    if (warningMessages.Count > 0)
                    {
                        p.Workbook.Worksheets.Add("LUUY");
                        ws      = p.Workbook.Worksheets["LUUY"];
                        ws.Name = "LuuY";                         //Setting Sheet's name
                        ws.Cells.Style.Font.Name = "Times New Roman";
                        ws.Cells.Style.Font.Size = 12;
                        int top = 1, left = 1;
                        int ir = top, ic = left;
                        XL.FormatCell_T(ws, ref ir, ref ic, "Mã NV", plusCol: 1);
                        XL.FormatCell_T(ws, ref ir, ref ic, "Tên NV", plusCol: 1);
                        XL.FormatCell_T(ws, ref ir, ref ic, "Nội dung lưu ý", plusCol: 1, plusRow: 1);
                        foreach (WarningMessage message in warningMessages)
                        {
                            ic = left;
                            XL.FormatCell_W(ws, ref ir, ref ic, message.MaNV, colWidth: (int)L.MANV, plusCol: 1);
                            XL.FormatCell_W(ws, ref ir, ref ic, message.TenNV, colWidth: (int)L.HOTEN, plusCol: 1);
                            XL.FormatCell_W(ws, ref ir, ref ic, message.NoiDung, colWidth: 60, plusCol: 1, plusRow: 1);
                        }
                    }
                    Byte[] bytes = p.GetAsByteArray();
                    XL.XuatFileExcel(filePath, bytes, "frm_KetCongBoPhan XuatBBChamCong ");
                }

                if (warningMessages.Count > 0)
                {
                    MessageBox.Show("Vui lòng xem lại các cảnh báo của quá trình kết công trong sheet lưu ý.", Resources.Caption_ThongBao);
                }
            } 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);
            }
        }
Exemple #30
0
        private void Fill_NV_Cong_cell(List <cUserInfo> lstNV, ExcelWorksheet sheet, int startRow, int startCol, ref int iLastRow, ref int iLastCol)
        {
            int    iNV, iRow, iCol, iNgay;
            string content = string.Empty;


            sheet.Cells[startRow - 2, startCol].Value          = "STT";
            sheet.Cells[startRow - 2, startCol].Style.WrapText = true;
            sheet.Cells[startRow - 2, startCol, startRow - 1, startCol].Merge = true;
            sheet.Cells[startRow - 2, startCol, startRow - 1, startCol].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

            sheet.Cells[startRow - 2, startCol + 1].Value          = "Họ tên";
            sheet.Cells[startRow - 2, startCol + 1].Style.WrapText = true;
            sheet.Cells[startRow - 2, startCol + 1, startRow - 1, startCol + 1].Merge = true;
            sheet.Cells[startRow - 2, startCol + 1, startRow - 1, startCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

            sheet.Cells[startRow - 2, startCol + 2].Value          = "Mã CC";
            sheet.Cells[startRow - 2, startCol + 2].Style.WrapText = true;
            sheet.Cells[startRow - 2, startCol + 2, startRow - 1, startCol + 2].Merge = true;
            sheet.Cells[startRow - 2, startCol + 2, startRow - 1, startCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);


            for (iNV = 0, iRow = startRow; iNV < lstNV.Count; iNV++, iRow++)
            {
                cUserInfo nhanvien = lstNV[iNV];
                XL.ThongKe(nhanvien);
                #region stt, ten, ma
                sheet.Cells[iRow, startCol].Value = iNV + 1;
                sheet.Cells[iRow, startCol].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                sheet.Cells[iRow, startCol + 1].Value = nhanvien.UserFullName;                                 //Ten
                sheet.Cells[iRow, startCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); //Ten
                sheet.Cells[iRow, startCol + 2].Value = nhanvien.UserEnrollNumber;                             //MaCC
                sheet.Cells[iRow, startCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); //MaCC

                #endregion
                for (iNgay = 1, iCol = startCol + 3; iNgay < nhanvien.DSNgayCong.Count - 1; iNgay++, iCol += 2)
                {
                    cNgayCong ngayCong = nhanvien.DSNgayCong[iNgay];
                    if (iNV == 0)
                    {
                        sheet.Cells[startRow - 2, iCol].Value = ngayCong.NgayCong.Date.ToString("d ");
                        sheet.Cells[startRow - 2, iCol, startRow - 2, iCol + 1].Merge = true;
                        sheet.Cells[startRow - 2, iCol, startRow - 2, iCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

                        sheet.Cells[startRow - 1, iCol].Value = ngayCong.NgayCong.ToString("ddd");
                        sheet.Cells[startRow - 1, iCol, startRow - 1, iCol + 1].Merge = true;
                        sheet.Cells[startRow - 1, iCol, startRow - 1, iCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    }

                    content = (ngayCong.TongCong == 0d) ? "--" : ngayCong.TongCong.ToString("#0.##");
                    sheet.Cells[iRow, iCol].Value = content;
                    sheet.Cells[iRow, iCol].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                    content = (ngayCong.TongPhuCap == 0d) ? "--" : ngayCong.TongPhuCap.ToString("#0.##");
                    sheet.Cells[iRow, iCol + 1].Value = content;
                    sheet.Cells[iRow, iCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                }
                #region thống kê
                sheet.Cells[iRow, iCol].Value = nhanvien.TongCongThang.ToString("#0.##");                // tổng công tháng
                sheet.Cells[iRow, iCol].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

                sheet.Cells[iRow, iCol + 1].Value = nhanvien.TongPCapThang.ToString("#0.##");                // tổng PC tháng
                sheet.Cells[iRow, iCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

                sheet.Cells[iRow, iCol + 2].Value = nhanvien.TongCongH_CT_PT;                // tổng HHPT
                sheet.Cells[iRow, iCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

                sheet.Cells[iRow, iCol + 3].Value = nhanvien.TongCongPhep;                // tổng phép
                sheet.Cells[iRow, iCol + 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

                sheet.Cells[iRow, iCol + 4].Value = nhanvien.TongCongBH;                // tổng BH
                sheet.Cells[iRow, iCol + 4].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

                sheet.Cells[iRow, iCol + 5].Value = nhanvien.TongCongRo;                // tổng RO
                sheet.Cells[iRow, iCol + 5].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

                sheet.Cells[iRow, iCol + 6].Value = nhanvien.TongCongCV;                // tổng CV
                sheet.Cells[iRow, iCol + 6].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
                #endregion
                iLastRow = iRow;
                iLastCol = iCol + 7;
            }
            #region các cột thống kê
            sheet.Cells[startRow - 2, iLastCol - 7, startRow - 1, iLastCol - 7].Value = "T.công";
            sheet.Cells[startRow - 2, iLastCol - 7, startRow - 1, iLastCol - 7].Merge = true;
            sheet.Cells[startRow - 2, iLastCol - 7, startRow - 1, iLastCol - 7].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

            sheet.Cells[startRow - 2, iLastCol - 6, startRow - 1, iLastCol - 6].Value = "T.PC";
            sheet.Cells[startRow - 2, iLastCol - 6, startRow - 1, iLastCol - 6].Merge = true;
            sheet.Cells[startRow - 2, iLastCol - 6, startRow - 1, iLastCol - 6].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

            sheet.Cells[startRow - 2, iLastCol - 5, startRow - 1, iLastCol - 5].Value = "H,PT";
            sheet.Cells[startRow - 2, iLastCol - 5, startRow - 1, iLastCol - 5].Merge = true;
            sheet.Cells[startRow - 2, iLastCol - 5, startRow - 1, iLastCol - 5].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);


            sheet.Cells[startRow - 2, iLastCol - 4, startRow - 1, iLastCol - 4].Value = "P";
            sheet.Cells[startRow - 2, iLastCol - 4, startRow - 1, iLastCol - 4].Merge = true;
            sheet.Cells[startRow - 2, iLastCol - 4, startRow - 1, iLastCol - 4].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);


            sheet.Cells[startRow - 2, iLastCol - 3, startRow - 1, iLastCol - 3].Value = "BH";
            sheet.Cells[startRow - 2, iLastCol - 3, startRow - 1, iLastCol - 3].Merge = true;
            sheet.Cells[startRow - 2, iLastCol - 3, startRow - 1, iLastCol - 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

            sheet.Cells[startRow - 2, iLastCol - 2, startRow - 1, iLastCol - 2].Value = "Ro";
            sheet.Cells[startRow - 2, iLastCol - 2, startRow - 1, iLastCol - 2].Merge = true;
            sheet.Cells[startRow - 2, iLastCol - 2, startRow - 1, iLastCol - 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);

            sheet.Cells[startRow - 2, iLastCol - 1, startRow - 1, iLastCol - 1].Value = "CV";
            sheet.Cells[startRow - 2, iLastCol - 1, startRow - 1, iLastCol - 1].Merge = true;
            sheet.Cells[startRow - 2, iLastCol - 1, startRow - 1, iLastCol - 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black);
            #endregion

            ExcelColumn excelColumn;
            sheet.Column(1).Width = 4;
            sheet.Column(2).Width = 18;
            sheet.Column(3).Width = 5;
            for (int i = startCol + 3; i < iLastCol - 7; i++)
            {
                excelColumn       = sheet.Column(i);
                excelColumn.Width = 3;
            }
            for (int i = iLastCol - 7; i < iLastCol; i++)
            {
                excelColumn       = sheet.Column(i);
                excelColumn.Width = 4.75;
            }
        }