예제 #1
0
        private void btnThem_Capnhat_Click(object sender, EventArgs e)
        {
            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


            #region lấy thông tin từ form

            int?macc = (int?)lbUserEnrollNumber.Tag;
            if (macc == null)
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000);
                return;
            }
            double tamung = 0d, thuchiKhac = 0d, luongDieuchinh = 0d;
            float  mucDongBHXH = 0f;
            if (float.TryParse(tbMucDongBHXH.Text, out mucDongBHXH) == false)
            {
                ACMessageBox.Show("Mức đóng BHXH chưa hợp lệ. Vui lòng nhập lại.", Resources.Caption_Loi, 2000);
                return;
            }

            tamung         = Convert.ToDouble(numTamUng.Value);
            thuchiKhac     = Convert.ToDouble(numThuchiKhac.Value);
            luongDieuchinh = Convert.ToDouble(numLuongdieuchinh.Value);

            #endregion

            // thực hiện query
            int kq = DAO5.CapnhatThuchiThang((int)macc, m_thang, luongDieuchinh, tamung, thuchiKhac, mucDongBHXH);
            DAO5.GhiNhatKyThaotac("Thêm khoản thu chi tháng",
                                  string.Format("Thêm tạm ứng [{2}], lương điều chỉnh [{3}], mức đóng BHXH [{4}], thu chi khác [{5}] tháng [{0}]... cho 1 NV có mã chấm công [{1}]",
                                                m_thang.ToString("dd/MM/yyyy"), macc,
                                                tamung.ToString("###,###,###,###,###,##0"),
                                                luongDieuchinh.ToString("###,###,###,###,###,##0"),
                                                mucDongBHXH.ToString("#0.00"),
                                                thuchiKhac.ToString("###,###,###,###,###,##0")), maCC: macc);

            if (kq == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
            reloadGridDSThuChi();
        }
예제 #2
0
        public static bool HuyKetLuongThang(DateTime ngaydauthang)
        {
            var query = @" delete from ThongSoKetLuongThang where Thang=@Thang 
						   delete from KetLuongThang where Thang=@Thang "                        ;
            var kq    = SqlDataAccessHelper.ExecNoneQueryString(query, new string[] { "@Thang" }, new object[] { ngaydauthang });

            DAO5.GhiNhatKyThaotac("Huỷ kết lương tháng", string.Format("Huỷ kết lương tháng [{0}]", ngaydauthang.ToString("MM/yyyy")));
            if (kq == 0)
            {
                return(false);
            }
            return(true);
        }
        private void btnXoaKBVang_Click(object sender, EventArgs e)
        {
            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(dtpNgayBD.Value.Date, dtpNgayKT.Value.Date))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "xem công", "xoá khai báo vắng", "xem công"),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            DataGridView currDataGrid = XacDinhDataGridViewDangChon();

            if (MessageBox.Show("Xoá các khai báo vắng của nhân viên với các ngày được chọn?", Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            if (currDataGrid.SelectedRows.Count != 0)
            {
                IEnumerable <dynamic> arrRecord = (from DataGridViewRow row in currDataGrid.SelectedRows
                                                   let rowViews = (DataRowView)row.DataBoundItem
                                                                  select new { MaCC = (int)rowViews["UserEnrollNumber"], NgayVang = (DateTime)rowViews["TimeStrNgay"] }).ToList();

                if (arrRecord.Any() == false)
                {
                    return;
                }

                string query = " delete from Absent where UserEnrollNumber = @UserEnrollNumber and TimeDate = @TimeDate ";
                foreach (dynamic obj in arrRecord)
                {
                    int kq = SqlDataAccessHelper.ExecNoneQueryString(
                        query,
                        new string[] { "@UserEnrollNumber", "@TimeDate" },
                        new object[] { obj.MaCC, obj.NgayVang });
                    DAO5.GhiNhatKyThaotac("Xoá các khai báo vắng trong ngày",
                                          string.Format("Xoá tất cả khai báo vắng của NV có mã chấm công [{0}] trong ngày [{1}]", (int)obj.MaCC, ((DateTime)obj.NgayVang).ToString("dd/MM/yyyy")), maCC: (int)obj.MaCC);
                }
                btnXem.PerformClick();
            }
        }
예제 #4
0
        private void btnXoaKBVang_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region chưa chọn nhân viên thì báo
            var listMaCC_NV = (from DataGridViewRow dataGridViewRow in dgrdTongHop.SelectedRows
                               let row = (DataRowView)dataGridViewRow.DataBoundItem
                                         select(int) row["UserEnrollNumber"]).ToList();
            if (listMaCC_NV.Count == 0)
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000);
                return;
            }

            #endregion

            if (MessageBox.Show(string.Format("Xoá tất cả khai báo vắng ngày {0} của các nhân viên được chọn?", dtpNgay.Value.Date.ToString("dddd dd/MM/yyyy")),
                                Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            IEnumerable <dynamic> templist = (from macc in listMaCC_NV
                                              select new { MaCC = macc, NgayVang = dtpNgay.Value.Date });
            string query = " delete from Absent where UserEnrollNumber = @UserEnrollNumber and TimeDate = @TimeDate ";
            try
            {
                foreach (dynamic obj in templist)
                {
                    SqlDataAccessHelper.ExecNoneQueryString(
                        query,
                        new string[] { "@UserEnrollNumber", "@TimeDate" },
                        new object[] { obj.MaCC, obj.NgayVang });
                    DAO5.GhiNhatKyThaotac("Xoá các khai báo vắng trong ngày",
                                          string.Format("Xoá tất cả khai báo vắng của NV có mã chấm công [{0}] trong ngày [{1}]", (int)obj.MaCC, ((DateTime)obj.NgayVang).ToString("dd/MM/yyyy")), maCC: (int)obj.MaCC);
                }
            }
            catch (Exception ex)
            {
                lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
            dtpNgay_ValueChanged(null, null);
        }
        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho cập nhật lương công nhật nếu tháng này đã đã kết lương

            if (XL.Kiemtra(m_thang, MyUtility.LastDayOfMonth(m_thang)))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "cập nhật thông tin làm việc công nhật", "cập nhật thông tin làm việc công nhật", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            // lấy thông tin từ form
            var UserEnrollNumber = (lbUserEnrollNumber.Tag == null) ? -1 : (int)lbUserEnrollNumber.Tag;
            var DonGiaLuong      = (int)numDonGiaLuong.Value;
            var TamUng           = Convert.ToDouble(numTamUng.Value);

            #region update đơn giá lương , tạm ứng xuống csdl
            //info ko cần lưu thành tiền vì lúc lưu xuống đã tính thành tiền để có cơ sở tính lương, lúc lấy lên thì tính ra số tổng rồi mới xuất bb
            string query = @" 
update DSNVChiCongNhatThang 
set DonGiaLuong=@DonGiaLuong, TamUng=@TamUng 
where UserEnrollNumber=@UserEnrollNumber and Thang=@Thang ";
            int    kq2   = SqlDataAccessHelper.ExecNoneQueryString(query,
                                                                   new string[] { "@DonGiaLuong", "@TamUng", "@UserEnrollNumber", "@Thang" },
                                                                   new object[] { DonGiaLuong, TamUng, UserEnrollNumber, m_thang });
            DAO5.GhiNhatKyThaotac("Cập nhật lương công nhật và tạm ứng",
                                  string.Format("Cập nhật đơn giá lương công nhật [{1}], tạm ứng [{2}] cho NV có mã chấm công [{0}]",
                                                UserEnrollNumber, DonGiaLuong.ToString(Settings.Default.numFormatMoney), TamUng.ToString(Settings.Default.numFormatMoney)), maCC: UserEnrollNumber);
            #endregion

            // sau khi cập nhật thì reload lại
            var table = DAO5.LayTableCongNhat(m_thang);
            dgrdDSLuongCongnhat.DataSource = table;
            dgrdDSLuongCongnhat.ClearSelection();
        }
예제 #6
0
        private void btnXoa_Click(object sender, EventArgs e)
        {
            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

            #region lấy thông tin từ form

            int?macc = (int?)lbUserEnrollNumber.Tag;
            if (macc == null)
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000);
                return;
            }

            #endregion

            // thực hiện query
            int kq = SqlDataAccessHelper.ExecNoneQueryString(
                " delete from DSThuChiThang where Thang=@Thang and UserEnrollNumber=@UserEnrollNumber ",
                new string[] { "@Thang", "@UserEnrollNumber" },
                new object[] { m_thang, macc });
            DAO5.GhiNhatKyThaotac("Xoá khoản thu chi tháng", string.Format("Xoá tạm ứng, lương điều chỉnh, mức đóng BHXH, thu chi khác tháng [{0}]... của 1 NV có mã chấm công [{1}]", m_thang.ToString("dd/MM/yyyy"), macc), maCC: macc);
            if (kq == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }

            reloadGridDSThuChi();
        }
예제 #7
0
        private void btnXoaTatcaDSThuchiThang_Click(object sender, EventArgs e)
        {
            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

            //xác nhận trước khi xóa
            string messContent = "Bạn muốn xóa tất cả danh sách thu chi tháng {0}?.";
            messContent = string.Format(messContent, m_thang.ToString("MM/yyyy"));
            if (MessageBox.Show(messContent, Resources.Caption_XacNhan) == DialogResult.No)
            {
                return;
            }

            // thực hiện query
            int kq = SqlDataAccessHelper.ExecNoneQueryString("delete from DSThuChiThang where thang=@Thang ", new string[] { "@Thang" }, new object[] { m_thang });
            DAO5.GhiNhatKyThaotac("Xoá tất cả khoản thu chi tháng", string.Format("Xoá tạm ứng, lương điều chỉnh, mức đóng BHXH, thu chi khác của TẤT CẢ NV tháng [{0}]", m_thang.ToString("dd/MM/yyyy")));

            if (kq == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }

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

            #region lấy ds UserEnrollNumber được chọn

            BindingContext[dgrdDSNVTrgPhg.DataSource].EndCurrentEdit();

            var checkRows = (from DataGridViewRow dataGridViewRow in dgrdDSNVTrgPhg.Rows
                             let row = (DataRowView)dataGridViewRow.DataBoundItem
                                       where dataGridViewRow.Cells["check"].FormattedValue != null && (bool)dataGridViewRow.Cells["check"].FormattedValue
                                       select(int) row["UserEnrollNumber"]).ToList();

            #endregion

            #region chưa chọn NV thì báo và thoát

            if (checkRows.Count == 0)
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000);
                return;
            }

            #endregion

            #region xác nhận trước khi xoá
            if (MessageBox.Show("Bạn muốn xoá Nhân viên này khỏi CSDL? \nKhi xoá Nhân viên sẽ không thể phục hồi lại nhân viên này.\nCân nhắc sử dụng chức năng vô hiệu hoá trạng thái hoạt động (UserEnabled).\nBấm yes để xoá Nhân viên. Bấm No để quay trở lại.", Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            #endregion
            TreeNode node = treePhongBan.SelectedNode;            // sử dụng để reload dgrid

            var    query = "	delete from UserInfo where ( UserEnrollNumber = {0} ) ";
            string temp  = string.Join(" or UserEnrollNumber = ", checkRows.ToArray());
            query = string.Format(query, temp);
            int kq = SqlDataAccessHelper.ExecNoneQueryString(query, null, null);
            foreach (int checkedUEN in checkRows)
            {
                DAO5.GhiNhatKyThaotac("Xoá NV khỏi CSDL", string.Format("Xoá NV có mã chấm công [{0}] khỏi CSDL", checkedUEN), maCC: checkedUEN);
            }
            if (kq != 0)
            {
                ACMessageBox.Show("Xoá Nhân viên thành công.", Resources.Caption_ThongBao, 2000);
            }
            else
            {
                ACMessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi, 2000);
            }

            #region reload grid

            string oldFilter = string.Empty;
            var    dataView  = dgrdDSNVTrgPhg.DataSource as DataView;
            if (dataView != null)
            {
                oldFilter = dataView.RowFilter;
            }
            treePhongBan_AfterSelect(treePhongBan, new TreeViewEventArgs(node));
            dataView = dgrdDSNVTrgPhg.DataSource as DataView;
            if (dataView != null)
            {
                dataView.RowFilter = oldFilter;
            }

            #endregion
        }
        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            string maNV  = tbMaNV.Text;
            string hoten = tbHoTenNV.Text.TrimEnd('?', '.', ',');

            string[] words    = hoten.Split(' ');
            string   ten      = (words.Last(item => item != string.Empty));
            int      gioitinh = (radNam.Checked) ? 0 : 1;
            int      maCC;

            if (int.TryParse(tbMaCC.Text, out maCC) == false)
            {
                ACMessageBox.Show("Mã chấm công phải là số hợp lệ.", Resources.Caption_Loi, 2000);
                return;
            }
            string   tenCC = tbUserEnrollName.Text;
            string   mathetu = tbMaTheTu.Text;
            DateTime ngayvaolam = dtpNgayVaoLam.Value.Date;
            int      idchucvu = (int)cbChucVu.SelectedValue;
            int      idphong = (int)cbPhongBan.SelectedValue;
            string   tenphong = (cbPhongBan.SelectedItem != null) ? cbPhongBan.SelectedItem.ToString() : cbPhongBan.SelectedText;
            int      idlichtrinh = (int)cbLichTrinh.SelectedValue;
            string   tenLichTrinh = (cbLichTrinh.SelectedItem != null) ? cbLichTrinh.SelectedItem.ToString() : cbLichTrinh.SelectedText;
            float    hslcb, hslcv, hsbhxhcongthem;

            if (float.TryParse(tbHSLCB.Text, out hslcb) == false ||
                float.TryParse(tbHSLCV.Text, out hslcv) == false ||
                float.TryParse(tbHSBHXHCongThem.Text, out hsbhxhcongthem) == false)
            {
                ACMessageBox.Show(Resources.Text_HeSoLCB_CV_BHXH_ChuaHopLe, Resources.Caption_Loi, 2000);
                return;
            }
            bool userEnabled = checkUserEnabled.Checked;

            if (mode == 1)
            {
                var tableKiemTraTonTai = SqlDataAccessHelper.ExecuteQueryString(
                    "select * from UserInfo where UserEnrollNumber = @UserEnrollNumber",
                    new string[] { "@UserFullCode", "@UserEnrollNumber" },
                    new object[] { maNV, maCC });
                if (tableKiemTraTonTai.Rows.Count > 0)
                {
                    ACMessageBox.Show("Mã nhân viên hoặc mã chấm công đã tồn tại trong CSDL. Vui lòng chọn mã khác.", Resources.Caption_Loi, 2000);
                    return;
                }
            }
            #region xác nhận trước khi lưu
            if (MessageBox.Show(Resources.Text_XacNhanLuuThongTinNV, Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel)
            {
                return;
            }
            #endregion

            #region execute query

            int kq1 = SqlDataAccessHelper.ExecNoneQueryString(
                @" UPDATE UserInfo Set 
								UserFullCode = @UserFullCode, UserFullName = @UserFullName, UserLastName = @UserLastName, UserEnrollName = @UserEnrollName,
								  UserCardNo = @UserCardNo, UserHireDay = @UserHireDay, UserIDTitle = @IDChucVu, UserSex = @UserSex, 
								  UserEnabled = @UserEnabled, UserIDD = @UserIDD, SchID = @SchID, 
								  HeSoLuongCB = @HeSoLuongCB, HeSoLuongSP = @HeSoLuongSP, HSBHCongThem = @HSBHCongThem

								where UserEnrollNumber = @UserEnrollNumber

							if ( @@ROWCOUNT = 0 )  
							INSERT INTO UserInfo (  UserFullCode,  UserFullName,  UserLastName,  UserEnrollNumber,  UserEnrollName,
									UserCardNo,  UserHireDay,  UserIDTitle,  UserSex,  UserPrivilege,  UserEnabled,
									UserIDD,  SchID,  HeSoLuongCB,  HeSoLuongSP,  HSBHCongThem,  
									PushCardID,  UserPW, UserGroup, UserTZ) 
							VALUES (  @UserFullCode,  @UserFullName,  @UserLastName,  @UserEnrollNumber,  @UserEnrollName,
									  @UserCardNo,  @UserHireDay,  @IDChucVu,  @UserSex,  @UserPrivilege,  @UserEnabled,
									  @UserIDD,  @SchID,  @HeSoLuongCB,  @HeSoLuongSP,  @HSBHCongThem,  
									  @PushCardID,  @UserPW, @UserGroup, @UserTZ )"                                    ,
                new string[] {
                "@UserFullCode", "@UserFullName", "@UserLastName", "@UserEnrollNumber", "@UserEnrollName",
                "@UserCardNo", "@UserHireDay", "@IDChucVu", "@UserSex",
                "@UserEnabled", "@UserIDD", "@SchID",
                "@HeSoLuongCB", "@HeSoLuongSP", "@HSBHCongThem",
                "@UserPrivilege", "@PushCardID", "@UserPW", "@UserGroup", "@UserTZ"
            },
                new object[] {
                maNV, hoten, ten, maCC, tenCC,
                mathetu, ngayvaolam, idchucvu, gioitinh,
                userEnabled, idphong, idlichtrinh,
                hslcb, hslcv, hsbhxhcongthem,
                0, "[0000000000]", string.Empty, 1, "0000000000000000",
            });
            string noidung =
                @"Lưu thông tin nhân viên có mã chấm công [{0}], mã nhân viên [{1}], hệ số lương cơ bản [{2}], hệ số lương sản phẩm [{3}], hệ số bảo hiểm cộng thêm cho lãnh đạo [{4}], tình trạng hoạt động [{5}], phòng ban [{6}], lịch trình [{7}]";
            DAO5.GhiNhatKyThaotac("Lưu thông tin nhân viên", string.Format(noidung,
                                                                           maCC, maNV, hslcb.ToString("0.00"), hslcv.ToString("0.00"), hsbhxhcongthem.ToString("0.00"), userEnabled, tenphong, tenLichTrinh), maCC: maCC);

            #endregion
            if (checkLamCongnhat.Enabled && checkLamCongnhat.Checked)
            {
                var ngayBD        = dtpNgayBDCongnhat.Value.Date;
                var ngayKT        = dtpNgayKTCongnhat.Value.Date;
                var laNVChinhthuc = checkNVChinhThuc.Checked;
                if (ngayBD > ngayKT)                 // hoán vị ngày bắt đầu kết thúc nếu bị ngược
                {
                    var temp = ngayBD;
                    ngayKT = ngayBD;
                    ngayBD = temp;
                }
                //thực hiện tách nếu làm công nhật ngày bd và kt là nhiều tháng liên tiếp
                List <DateTime> arrNgayBD, arrNgayKT;
                XL2.TachThang(ngayBD, ngayKT, out arrNgayBD, out arrNgayKT);
                for (int i = 0; i < arrNgayBD.Count; i++)
                {
                    int kq2 = DAO5.UpdIns_ThuChiNVCongNhat(new DateTime(arrNgayBD[i].Year, arrNgayBD[i].Month, 1), maCC, idphong, tenphong, arrNgayBD[i], arrNgayKT[i], 0, 0d, laNVChinhthuc);
                    if (kq2 == 0)
                    {
                        MessageBox.Show(Resources.Text_CoLoi);
                        break;
                    }
                }
            }

            if (kq1 == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
            else
            {
                IsReload = true;
                if (mode == 1)
                {
                    ACMessageBox.Show("Thêm nhân viên thành công.", Resources.Caption_ThongBao, 2000);
                    MyUtility.ClearControlText(tbMaNV, tbHoTenNV, tbMaCC, tbUserEnrollName);
                    radNam.Checked            = true;
                    tbMaTheTu.Text            = "0000000000";
                    tbHSLCB.Text              = "000";
                    tbHSLCV.Text              = "000";
                    tbHSBHXHCongThem.Text     = "000";
                    cbChucVu.SelectedIndex    = 0;
                    cbPhongBan.SelectedIndex  = 0;
                    cbLichTrinh.SelectedIndex = 0;
                    checkUserEnabled.Checked  = true;
                }
                else
                {
                    Close();
                }
            }
        }
        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            DateTime ngaydauthang  = dtpThang.Value;
            int      uen           = (int)m_currRowNV["UserEnrollNumber"];
            bool     LaNVChinhThuc = checkNVChinhThuc.Checked;
            DateTime ngayBD        = dtpNgayBDCongnhat.Value;
            DateTime ngayKT        = dtpNgayKTCongnhat.Value;

            if (ngayBD > ngayKT)
            {
                MyUtility.Swap(ref ngayBD, ref ngayKT);
            }
            if (checkLamCongnhat.Checked && checkLamCongnhat.Enabled)
            {
                #region query string

                var query = @"	
		UPDATE	DSNVChiCongNhatThang
		SET		IDPhong = @IDPhong ,TenPhong = @TenPhong
				,NgayBatDau = @NgayBatDau ,NgayKetThuc = @NgayKetThuc ,SoNgayCong = 0
				,NVChinhThuc = @NVChinhThuc
		WHERE	Thang = @Thang and UserEnrollNumber = @UserEnrollNumber
		if @@ROWCOUNT = 0
		INSERT INTO		DSNVChiCongNhatThang
				(Thang ,UserEnrollNumber ,IDPhong ,TenPhong
				,NgayBatDau ,NgayKetThuc ,SoNgayCong
				,DonGiaLuong ,TamUng ,NVChinhThuc)
		VALUES
				(@Thang ,@UserEnrollNumber ,@IDPhong ,@TenPhong
				,@NgayBatDau ,@NgayKetThuc ,0 
				,0 ,0 ,@NVChinhThuc) "                ;

                #endregion

                int idPhong  = (int)m_currRowNV["MaPhong"];
                var tenPhong = m_currRowNV["TenPhong"].ToString();
                #region update or insert xuống csdl

                int kq = SqlDataAccessHelper.ExecNoneQueryString(
                    query,
                    new string[] { "@Thang", "@UserEnrollNumber", "@IDPhong", "@TenPhong", "@NgayBatDau", "@NgayKetThuc", "@NVChinhThuc" },
                    new object[] { ngaydauthang, uen, idPhong, tenPhong, ngayBD, ngayKT, LaNVChinhThuc });
                DAO5.GhiNhatKyThaotac("Lưu ngày làm việc công nhật",
                                      string.Format("Lưu thời gian làm việc công nhật bắt đầu từ ngày [{1}] đến hết ngày [{2}], [{3}] cho NV có mã chấm công [{0}]",
                                                    uen, ngayBD.ToString("dd/MM/yyyy"), ngayKT.ToString("dd/MM/yyyy"), LaNVChinhThuc ? "tính lương các ngày còn lại như NV chính thức" : ""), maCC: uen);
                if (kq == 0)                // báo lỗi
                {
                    MessageBox.Show(Resources.Text_CoLoi);
                    return;
                }
                #endregion

                // sau khi update thì đóng form và reload
                IsReload = true;
                Close();
            }
        }
        private void btnLuu_Click(object sender, EventArgs e)
        {
            int           idPhong = -1, idChucVu = -1, idLichtrinh = -1, userEnabled = -1;
            float         hslcb = -1f, hslcv = -1f;
            List <string> arrString      = new List <string>();
            List <string> arrString2     = new List <string>();
            bool          IsExist_1Check = false;

            if (checkPhong.Checked)
            {
                TreeNode node = treePhongBan.SelectedNode;
                if (node == null)
                {
                    ACMessageBox.Show("chưa chọn node", "", 1000); return;
                }
                //node != null
                idPhong = ((cPhongBan)(node.Tag)).ID;
                arrString.Add(" UserIDD = @MaPhong ");
                arrString2.Add("bộ phận mới: [" + ((cPhongBan)node.Tag).Ten + "]; ");
                IsExist_1Check = true;
            }
            if (checkChucVu.Checked)
            {
                idChucVu = (int)cbChucVu.SelectedValue;
                arrString.Add(" UserIDTitle = @IDChucVu ");
                arrString2.Add("chức vụ mới: [" + ((cbChucVu.SelectedItem != null) ? cbLichTrinh.SelectedItem.ToString() : cbLichTrinh.SelectedText) + "]; ");
                IsExist_1Check = true;
            }
            if (checkLichtrinh.Checked)
            {
                idLichtrinh = (int)cbLichTrinh.SelectedValue;
                arrString.Add(" SchID = @SchID ");                // (cbXNLyDo.SelectedItem != null) ? cbXNLyDo.SelectedItem.ToString() : cbXNLyDo.SelectedText;
                arrString2.Add("lịch trình làm việc mới: [" + ((cbLichTrinh.SelectedItem != null) ? cbLichTrinh.SelectedItem.ToString() : cbLichTrinh.SelectedText) + "]; ");
                IsExist_1Check = true;
            }
            if (checkHSLCB.Checked)
            {
                if (float.TryParse(tbHSLCB.Text, out hslcb) == false)
                {
                    ACMessageBox.Show(Resources.Text_HeSoLCB_CV_BHXH_ChuaHopLe, Resources.Caption_Loi, 2000);
                    return;
                }
                else
                {
                    arrString.Add(" HeSoLuongCB = @HeSoLuongCB ");
                    arrString2.Add("hệ số lương cơ bản mới: [" + hslcb.ToString("0.00") + "]; ");
                }
                IsExist_1Check = true;
            }
            if (checkHSLCV.Checked)
            {
                if (float.TryParse(tbHSLCV.Text, out hslcv) == false)
                {
                    ACMessageBox.Show(Resources.Text_HeSoLCB_CV_BHXH_ChuaHopLe, Resources.Caption_Loi, 2000);
                    return;
                }
                else
                {
                    arrString.Add(" HeSoLuongSP = @HeSoLuongSP ");
                    arrString2.Add("hệ số lương sản phẩm mới: [" + hslcv.ToString("0.00") + "]; ");
                }
                IsExist_1Check = true;
            }

            if (checkTinhtrangHoatdong.Checked)
            {
                userEnabled = (checkUserEnabled.Checked) ? 1 : 0;
                arrString.Add(" UserEnabled = @UserEnabled ");
                arrString2.Add("tình trạng mới: [" + (checkUserEnabled.Checked ? "đang làm việc" : "ngưng việc") + "]; ");
                IsExist_1Check = true;
            }
            // chưa chọn thì báo
            if (IsExist_1Check == false)
            {
                ACMessageBox.Show("Bạn chưa chọn thông tin cần cập nhật nào.", Resources.Caption_ThongBao, 2000);
                return;
            }
            // xác nhận
            if (MessageBox.Show("Cập nhật thông tin hàng loại cho nhân viên?", Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            var    listUEN       = (from DataRowView row in RowViews select(int) row["UserEnrollNumber"]).ToList();
            string temp1         = string.Join(" , ", arrString.ToArray());                   // nối các thuộc tính với nhau
            string temp2         = string.Join(" or UserEnrollNumber = ", listUEN.ToArray()); // nối các userenrollnumber với nhau
            string formatstring1 = @"	update UserInfo set {0} where ( UserEnrollNumber = {1} ) ";
            string temp3         = string.Join("", arrString2.ToArray());
            string formatstring2 = @"Cập nhật thông tin NV mã chấm công [{0}] {1}";
            string query         = string.Format(formatstring1, temp1, temp2);
            int    kq            = SqlDataAccessHelper.ExecNoneQueryString(query,
                                                                           new string[] { "@MaPhong", "@IDChucVu", "@SchID",
                                                                                          "@HeSoLuongCB", "@HeSoLuongSP", "@UserEnabled", },
                                                                           new object[] { idPhong, idChucVu, idLichtrinh, hslcb, hslcv, userEnabled });

            foreach (int uen in listUEN)
            {
                DAO5.GhiNhatKyThaotac("Cập nhật thông tin NV hàng loạt", string.Format(formatstring2, uen, temp3), maCC: uen);
            }
            if (kq == 0)
            {
                ACMessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi, 2000);
            }
            else
            {
                IsReload = true;
                Close();
            }
        }
예제 #12
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
        }