Ejemplo n.º 1
0
        private void frm_ChamCongTay_Load(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);
                this.Close();
                return;
            }

            dtpBDLam.ValueChanged += dtp_ValueChanged;
            dtpKTLam.ValueChanged += dtp_ValueChanged;
            dtpNgay.ValueChanged  += dtpNgay_ValueChanged;
            m_DSCa = new List <cCaAbs>(XL.DSCa);
            cCaTuDo tmp = new cCaTuDo {
                ID = 0, Code = "--"
            };
            cCaTuDo ca8tieng = new cCaTuDo {
                ID         = int.MinValue, Code = "Ca8h", LunchMin = TimeSpan.Zero, WorkingTimeTS = XL2._08gio, Workingday = 1f,
                AfterOTMin = XL2.LamThemAfterOT
            };
            cCaTuDo cadai = new cCaTuDo {
                ID         = int.MinValue + 1, Code = "CaDài 12h", LunchMin = TimeSpan.Zero, WorkingTimeTS = XL2._12gio, Workingday = 1.5f,
                AfterOTMin = XL2.LamThemAfterOT
            };

            m_DSCa.Insert(0, cadai);
            m_DSCa.Insert(0, ca8tieng);
            m_DSCa.Insert(0, tmp);

            cbCa.ValueMember               = "ID";
            cbCa.DisplayMember             = "Code";
            cbCa.DataSource                = m_DSCa;
            cbCa.SelectionChangeCommitted += cbCa_SelectionChangeCommitted;
            tbGioLam.TextChanged          += tbGioLam_TextChanged;


            DataTable tablePhong = DAL.LayDSPhong(XL2.currUserID);

            if (tablePhong.Rows.Count == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa được phân quyền thao tác.", "Thông báo", 2000);
                return;
            }
            //2. lấy dữ liệu phòng ban được phép thao tác  và load treePhongBan : xoá dữ liệu trước và load
            treePhongBan.Nodes.Clear();
            loadTreePhgBan(treePhongBan, tablePhong);

            // đăng ký sự kiện cho tree và chọn topNode
            treePhongBan.AfterSelect += treePhongBan_AfterSelect;
            treePhongBan.SelectedNode = treePhongBan.TopNode;
        }
        private void dgrdGioCoLamThem_SelectionChanged(object sender, EventArgs e)
        {
            if (dgrdGioCoLamThem.SelectedRows.Count == 0)
            {
                #region reset layout

                tbTenNV.Text                         = string.Empty;
                tbGioVao.Text                        = string.Empty;
                tbGioRaa.Text                        = string.Empty;
                tbThuocCa.Text                       = string.Empty;
                tbGioLam.Text                        = string.Empty;
                tbTongGio.Text                       = string.Empty;
                tbTreSom.Text                        = string.Empty;
                tbOLaiThem_ThongTin.Text             = string.Empty;
                tbLamThem.Text                       = string.Empty;
                checkThongTinChoPhepTinhPC50.Checked = false;
                checkThongTinTreSomTinhCV.Checked    = false;

                cbXNChonCa.DataSource       = null;
                cbXNChonCa.ValueMember      = "ID";         // do mỗi lần set null dataSource thì value member và code sẽ bị xóa
                cbXNChonCa.DisplayMember    = "Code";
                tbXNGioLam.Text             = string.Empty;
                tbXNTreSom.Text             = string.Empty;
                tbXN_OLaiThem.Text          = string.Empty;
                checkXacNhanLamThem.Checked = false;
                checkXacNhanLamThem.Enabled = false;
                numPhutTinhLamThem.Value    = 0;
                numPhutTinhLamThem.Enabled  = false;
                #endregion
                // ngoài reset layout thì disable nút xác nhận để tránh ấn nhầm gây lỗi
                btnXacNhan.Enabled = false;
                return;
            }
            else if (dgrdGioCoLamThem.SelectedRows.Count == 1)
            {
                btnXacNhan.Enabled = true;
                var dataRowView = dgrdGioCoLamThem.SelectedRows[0].DataBoundItem as DataRowView;
                var nhanvien    = dataRowView["cUserInfo"] as cUserInfo;
                var CIO         = dataRowView["cChkInOut"] as cChkInOut;
                var ngaycong    = dataRowView["cNgayCong"] as cNgayCong;

                #region fill thông tin CIO
                DateTime TimeStrVao   = CIO.Vao.Time;
                DateTime TimeStrRaa   = CIO.Raa.Time;
                DateTime ngaydangchon = CIO.ThuocNgayCong;
                tbTenNV.Text                         = nhanvien.TenNV;
                tbGioVao.Text                        = TimeStrVao.ToString("H:mm d/M");
                tbGioRaa.Text                        = TimeStrRaa.ToString("H:mm d/M");
                tbThuocCa.Text                       = CIO.ThuocCa.Code;
                tbGioLam.Text                        = CIO.TG.GioLamTrongNgay.TotalHours.ToString("#0.0#");
                tbTongGio.Text                       = CIO.TG.GioThuc.TotalHours.ToString("#0.0#");
                tbTreSom.Text                        = (CIO.TG.VaoTre + CIO.TG.RaaSom).TotalMinutes.ToString("###0");
                tbOLaiThem_ThongTin.Text             = (CIO.GetType() == typeof(cChkInOut_A)) ? CIO.TG.OLai.TotalMinutes.ToString("###0") : "0";
                tbLamThem.Text                       = (CIO.GetType() == typeof(cChkInOut_V)) ? CIO.TG.OTCa.TotalMinutes.ToString("###0") : "0";
                checkThongTinChoPhepTinhPC50.Checked = ngaycong.TinhPC50;
                checkThongTinTreSomTinhCV.Checked    = CIO.TreSomTinhCV;             //tbd
                //checkBox1.Checked = CIO.TreSomTinhCV;
                #endregion

                // xét xem nếu chọn đang chọn nhiều row là chế độ hàng loạt

                // 4. load ds chọn ca, tạo thêm 2 ca tự do và ca dài
                var dsCaChon = new List <cCaAbs>(nhanvien.LichTrinhLV.DSCaMoRong);
                var caKDQD   = new cCaTuDo {
                    ID = int.MinValue, Code = "Ca8h"
                };
                var CaDaiA = new cCaTuDo {
                    ID = int.MinValue + 1, Code = "CaDài 12h"
                };
                XL.TaoCaTuDo(caKDQD, TimeStrVao, XL2._08gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1f, "8");
                XL.TaoCaTuDo(CaDaiA, TimeStrVao, XL2._12gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1.5f, "D");

                // loại bỏ những ca chắc chắn ko xảy ra: ra ca < check vào 30ph. check ra < vào ca 30ph
                dsCaChon.RemoveAll(item => (
                                       CIO.TG.GioThuc.TotalHours < (item.WorkingTimeTS.TotalHours / 3d) ||
                                       TimeStrVao.TimeOfDay < XL2._04h30 ||  // xem [140515_3]
                                       TimeStrRaa <ngaydangchon.Add(item.OnnTS).Add(XL2._30phut) ||
                                                   TimeStrVao> ngaydangchon.Add(item.OffTS).Subtract(XL2._30phut)));
                // sau khi loại bỏ mới thêm 2 ca tự do vào
                dsCaChon.Insert(0, caKDQD);
                dsCaChon.Insert(1, CaDaiA);

                cbXNChonCa.DataSource = dsCaChon;
                cbXNChonCa.Update();
                cbXNChonCa.SelectedItem = (from a in dsCaChon where a.ID == CIO.ThuocCa.ID select a).FirstOrDefault();
                cbChonCa_SelectionChangeCommitted(cbXNChonCa, new EventArgs());
            }
            else               // chế độ xác nhận hàng loạt
            {
                btnXacNhan.Enabled = true;

                var dataRowView = dgrdGioCoLamThem.SelectedRows[0].DataBoundItem as DataRowView;
                var nhanvien    = dataRowView["cUserInfo"] as cUserInfo;
                var CIO         = dataRowView["cChkInOut"] as cChkInOut;
                var ngaycong    = dataRowView["cNgayCong"] as cNgayCong;

                #region fill thông tin CIO
                DateTime TimeStrVao   = CIO.Vao.Time;
                DateTime TimeStrRaa   = CIO.Raa.Time;
                DateTime ngaydangchon = CIO.ThuocNgayCong;
                tbTenNV.Text                         = nhanvien.TenNV;
                tbGioVao.Text                        = TimeStrVao.ToString("H:mm d/M");
                tbGioRaa.Text                        = TimeStrRaa.ToString("H:mm d/M");
                tbThuocCa.Text                       = CIO.ThuocCa.Code;
                tbGioLam.Text                        = CIO.TG.GioLamTrongNgay.TotalHours.ToString("#0.0#");
                tbTongGio.Text                       = CIO.TG.GioThuc.TotalHours.ToString("#0.0#");
                tbTreSom.Text                        = (CIO.TG.VaoTre + CIO.TG.RaaSom).TotalMinutes.ToString("###0");
                tbOLaiThem_ThongTin.Text             = (CIO.GetType() == typeof(cChkInOut_A)) ? CIO.TG.OLai.TotalMinutes.ToString("###0") : "0";
                tbLamThem.Text                       = (CIO.GetType() == typeof(cChkInOut_V)) ? CIO.TG.OTCa.TotalMinutes.ToString("###0") : "0";
                checkThongTinChoPhepTinhPC50.Checked = ngaycong.TinhPC50;
                checkThongTinTreSomTinhCV.Checked    = CIO.TreSomTinhCV;
                #endregion


                tbXNGioLam.Text            = string.Empty;
                tbXNTreSom.Text            = string.Empty;
                tbXN_OLaiThem.Text         = string.Empty;
                numPhutTinhLamThem.Value   = 0;
                numPhutTinhLamThem.Maximum = 840;

                IEnumerable <DataGridViewRow> dataGridViewRows = dgrdGioCoLamThem.SelectedRows.Cast <DataGridViewRow>();
                var dataRows = from x in dataGridViewRows select((DataRowView)x.DataBoundItem).Row;

                var dsCa = ((from row in dataRows
                             from ca in ((cUserInfo)row["cUserInfo"]).LichTrinhLV.DSCa
                             select ca)).Distinct().ToList();
                var caKDQD = new cCaTuDo {
                    ID = int.MinValue, Code = "Ca8h"
                };
                var CaDaiA = new cCaTuDo {
                    ID = int.MinValue + 1, Code = "CaDài 12h"
                };
                dsCa.Insert(0, caKDQD);
                dsCa.Insert(1, CaDaiA);

                cbXNChonCa.DataSource            = dsCa;
                checkTinhPC50.Checked            = true;      // mặc định check tính pc 50% theo nhân viên phòng nào
                checkXacNhanTreSomTinhCV.Checked = false;     // mặc định ko check tresomtinhCV
                cbXNChonCa.Update();
            }
        }