private void simpleButton1_Click(object sender, EventArgs e) { List <hopdong> dshd = new List <hopdong>(); Worksheet hhhd = spreadsheetControl1.Document.Worksheets.ActiveWorksheet; SearchOptions option = new SearchOptions(); option.SearchBy = SearchBy.Columns; option.SearchIn = SearchIn.Values; option.MatchEntireCellContents = true; option.MatchCase = false; IEnumerable <Cell> searchResult; //Tìm Mã nhân viên searchResult = hhhd.Search("Mã nhân sự", option); if (searchResult.Count() == 0) { MessageBox.Show("Không tìm thấy cột Mã nhân sự"); return; } int colmanv = searchResult.First().LeftColumnIndex; int dongmanv = searchResult.First().TopRowIndex; //Tìm Ngày hiệu lực HĐ searchResult = hhhd.Search("Ngày hiệu lực HĐ", option); if (searchResult.Count() == 0) { MessageBox.Show("Không tìm thấy cột Ngày hiệu lực HĐ"); return; } int colngayky = searchResult.First().LeftColumnIndex; //Tìm Ngày hết hiệu lực HĐ searchResult = hhhd.Search("Ngày hết hiệu lực HĐ", option); if (searchResult.Count() == 0) { MessageBox.Show("Không tìm thấy cột Ngày hết hiệu lực HĐ"); return; } int colngayhh = searchResult.First().LeftColumnIndex; //Tìm cột cuối cùng có giá trị. Nếu sau 5 cột liên tiếp không có thì coi là cột cuối int k = colngayhh + 1; while (true) { if (hhhd.Cells[dongmanv, k].Value.IsEmpty && hhhd.Cells[dongmanv, k + 1].Value.IsEmpty && hhhd.Cells[dongmanv, k + 2].Value.IsEmpty && hhhd.Cells[dongmanv, k + 3].Value.IsEmpty && hhhd.Cells[dongmanv, k + 4].Value.IsEmpty) { break; } k++; } //Các cột mới int colToeic = k, colKhenthuong = k + 2, colKyluat = k + 3; hhhd.Cells[dongmanv, colToeic].Value = "Ngoại ngữ"; hhhd.Cells[dongmanv, colKhenthuong].Value = "Khen thưởng"; hhhd.Cells[dongmanv, colKyluat].Value = "Kỷ luật"; //Lấy danh sách người hết hạn #region Lấy danh sách hết hạn int i, blank, maso; string codetv; DateTime ky, hethan; i = 0; blank = 0; while (true) { if (blank > 10) { break; } //Không có Manv coi như dòng trống if (hhhd.Cells[i, colmanv].Value.IsEmpty) { i++; blank++; continue; } //Manv không phải là số coi như dòng tróng if (!hhhd.Cells[i, colmanv].Value.IsNumeric && !hhhd.Cells[i, colmanv].Value.IsText) { i++; blank++; continue; } //Manv không phải dạng số bỏ qua if (!Int32.TryParse(hhhd.Cells[i, colmanv].Value.ToString(), out maso)) { i++; blank++; continue; } blank = 0; codetv = hhhd.Cells[i, colmanv].Value.ToString(); ky = Convert.ToDateTime(hhhd.Cells[i, colngayky].Value.ToString()); hethan = Convert.ToDateTime(hhhd.Cells[i, colngayhh].Value.ToString()); hopdong onetv = new hopdong(); onetv.manv = codetv; onetv.ngayky = ky; onetv.ngayhh = hethan; onetv.dong = i; dshd.Add(onetv); i++; } #endregion #region Lấy lịch khác bay List <lichbaycn> lbtv = new List <lichbaycn>(); List <lichkhacbay> dscode = new List <lichkhacbay>(); DateTime ngaymin, ngaymax; int socot = colKyluat + 1; ngaymax = dshd.Max(x => x.ngayhh); ngaymin = dshd.Min(x => x.ngayky); string f_lbaytv2 = @"\\10.100.8.108\phanbay\doantv\ddtvvfp6\solieu\lbaytv2.dbf"; string f_des = @"c:\temp\lbaytv2.dbf"; string f_dmctmd = @"\\10.100.8.108\phanbay\doantv\ddtvvfp6\tudien\dm_ctmd.dbf"; string f_dm = @"c:\temp\dm_ctmd.dbf"; File.Copy(f_lbaytv2, f_des, true); File.Copy(f_dmctmd, f_dm, true); FileStream flbtv2 = new FileStream(f_des, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); FileStream fdm = new FileStream(f_dm, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); NDbfReader.Table tbldm = NDbfReader.Table.Open(fdm); NDbfReader.Reader rddm = tbldm.OpenReader(Encoding.GetEncoding(1252)); while (rddm.Read()) { if (rddm.GetString("NHOMTK") == "NGHI") { lichkhacbay kb = new lichkhacbay(); kb.loai = rddm.GetString("LOAI"); kb.ten = Utils.Utils.TCVN3ToUnicode(rddm.GetString("TEN_LOAI")); dscode.Add(kb); } } NDbfReader.Table table = NDbfReader.Table.Open(flbtv2); NDbfReader.Reader readder = table.OpenReader(); while (readder.Read()) { string codenv = readder.GetString("CODE_TV"); DateTime?sdate = readder.GetDateTime("START_DATE"); DateTime?edate = readder.GetDateTime("END_DATE"); string loai = readder.GetString("LOAI"); if (codenv == null) //Không có Code_tv ==> Bỏ qua { continue; } if (!dshd.Any(x => x.manv == codenv)) //Không thuộc danh sách ==> bỏ qua { continue; } if (sdate == null || edate == null || edate < ngaymin || sdate > ngaymax) // { continue; } if (loai == null || loai == "FLY" || loai == "NKTT") //Trống field Loai hoặc Loai là FLY, NKTT (không có trong DM_CTMD) ==> bỏ qua { continue; } //Loai không phải nghỉ ==> Bỏ luôn var tendm = dscode.Where(x => x.loai == loai).FirstOrDefault(); if (tendm == null) { continue; } lichbaycn item = new lichbaycn(); item.manv = codenv; item.start_date = (DateTime)sdate; item.end_date = (DateTime)edate; item.loai = loai; item.note = readder.GetString("NOTE"); lbtv.Add(item); var codekb = dscode.Where(x => x.loai == loai).FirstOrDefault(); if (codekb != null && codekb.cot == 0) { codekb.cot = socot; hhhd.Cells[dongmanv, socot].Value = codekb.ten; socot++; } } flbtv2.Dispose(); fdm.Dispose(); #endregion #region Lấy thông tin khen thưởng kỷ luật string kq = ""; using (HREntities hr = new HREntities()) { foreach (var tv in dshd) { var ns = hr.HoSoGocs.Where(x => x.mans.Trim() == tv.manv).First(); //TOEIC var toeic = hr.ngoaingus.Where(x => x.id_ns == ns.id && x.ngoaingu_loai == 565 && (x.ngoaingu_bangcap == 669 || x.ngoaingu_bangcap == 670 || x.ngoaingu_bangcap == 671)).OrderByDescending(y => y.ngoaingu_ngaycap).FirstOrDefault(); if (toeic != null) { hhhd.Cells[tv.dong, colToeic].Value = toeic.ngoaingu_diemtong; if (toeic.ngoaingu_bangcap == 669) { hhhd.Cells[tv.dong, colToeic + 1].Value = "TOEIC"; } else if (toeic.ngoaingu_bangcap == 670) { hhhd.Cells[tv.dong, colToeic + 1].Value = "TOEFL"; } else { hhhd.Cells[tv.dong, colToeic + 1].Value = "IELTS"; } } //Khen thưởng var khenthuongs = hr.khenkluats.Where(x => x.id_ns == ns.id && x.kyluat == false && x.ktkl_ngayqd >= tv.ngayky && x.ktkl_ngayqd <= tv.ngayhh).ToList(); kq = ""; var dskt = khenthuongs .GroupBy(kt => kt.ktkl_hinhthuc) .Select(kt => new { hinhthuc = kt.Key, solan = kt.Count() }); foreach (var kt in dskt) { kq += hr.danhmucs.Where(x => x.id == kt.hinhthuc).FirstOrDefault().TenDanhMuc.Trim() + ":" + kt.solan.ToString() + ";"; } hhhd.Cells[tv.dong, colKhenthuong].Value = kq; //Kỷ luật var kyluats = hr.khenkluats.Where(x => x.id_ns == ns.id && x.kyluat == true && x.ktkl_hinhthuc != 3677 && x.ktkl_hinhthuc != 3679 && x.ktkl_hinhthuc != 3687 && x.ktkl_hinhthuc != 4020 && x.ktkl_hinhthuc != null && x.ktkl_ngayqd >= tv.ngayky && x.ktkl_ngayqd <= tv.ngayhh).ToList(); kq = ""; var dskl = kyluats .GroupBy(kt => kt.ktkl_hinhthuc) .Select(kt => new { hinhthuc = kt.Key, solan = kt.Count() }); foreach (var kl in dskl) { kq += hr.danhmucs.Where(x => x.id == kl.hinhthuc).FirstOrDefault().TenDanhMuc.Trim() + ":" + kl.solan.ToString() + ";"; } hhhd.Cells[tv.dong, colKyluat].Value = kq; //Lịch khác bay //Tính số ngày nghỉ từng loại. DateTime tungay; var lbcn = lbtv.Where(x => x.manv == tv.manv).ToList(); List <ctlkb> lbct = new List <ctlkb>(); foreach (var lich in lbcn) { tungay = lich.start_date; while (tungay <= lich.end_date) { if (!lbct.Any(x => x.ngay == tungay) && tungay >= tv.ngayky && tungay <= tv.ngayhh) { ctlkb newlct = new ctlkb(); newlct.ngay = tungay; newlct.loai = lich.loai; lbct.Add(newlct); } tungay = tungay.AddDays(1); } } //Tổng hợp các loại var kqcuoi = lbct .GroupBy(x => x.loai) .Select(x => new { loai = x.Key, songay = x.Count() }); //Ghi kết quả foreach (var xkq in kqcuoi) { var xcot = dscode.Where(x => x.loai == xkq.loai).FirstOrDefault(); hhhd.Cells[tv.dong, xcot.cot].Value = xkq.songay; } } } #endregion MessageBox.Show("Complete!"); }