using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Datalib.EntityClasses; using Datalib.HelperClasses; using System.Linq; using System.Linq.Expressions; using Datalib.Linq; using DevExpress.XtraEditors; using DevExpress.Spreadsheet; using SD.LLBLGen.Pro.ORMSupportClasses; using PatientMan.Classes; namespace PatientMan.Forms { public partial class frmLogBooks : PatientMan.BasicForms.frmCommon { EntityCollection Patients = new EntityCollection(); EntityCollection exams = new EntityCollection(); EntityCollection preclinics = new EntityCollection(); EntityCollection clinics = new EntityCollection(); EntityCollection treatments = new EntityCollection(); List PatientLists {get;set;} int startYear { set; get; } const int PreArvPageNum = 15; const int ArvPageNum = 10; int PageNum = 0; int SelectedReportIndex; public frmLogBooks() { InitializeComponent(); } private void frmLogBooks_Load(object sender, EventArgs e) { var path = Application.StartupPath; var templatefile = path + @"\templates\logbook2.xls"; //this.barGen.Enabled = SettingInfo.Registered ; object val = this.LogTypes.Items[0]; this.BarLogType.EditValue = val; LinqMetaData meta = new LinqMetaData(adapter); PatientLists = meta.TblPatient.Where(g => g.Dateofreferral == null).ToList(); PageNum = PatientLists.Count; genPages(PageNum, PreArvPageNum); this.spreadsheetControl.LoadDocument(templatefile); adapter.FetchEntityCollection(Patients, null); adapter.FetchEntityCollection(exams, null); adapter.FetchEntityCollection(preclinics, null); // adapter.FetchEntityCollection(clinics, null); adapter.FetchEntityCollection(treatments, null); var cohortlist = (from p in Patients where (p.DateofArv != null) orderby p.DateofArv select new { x = p.DateofArv.Value.Month.ToString().Length == 1 ? "0" + p.DateofArv.Value.Month.ToString() + "-" + p.DateofArv.Value.Year.ToString():p.DateofArv.Value.Month.ToString() + "-" + p.DateofArv.Value.Year.ToString() }).GroupBy(x => x.x).Select(x => x.First()).ToArray(); foreach (var s in cohortlist) { Cohorts.Items.Add(s.x); } GenYearList(); } public override void LoadData() { base.LoadData(); } private void LogTypes_EditValueChanged(object sender, EventArgs e) { string templateFile = ""; string path = Application.StartupPath; SelectedReportIndex = ((ComboBoxEdit)sender).SelectedIndex; switch (SelectedReportIndex) { case 0: templateFile = path + @"\templates\logbook2.xls"; this.barCohort.Enabled = false; this.barYear.Enabled = true; LinqMetaData meta = new LinqMetaData(adapter); if (barYear.EditValue==null) { PatientLists = meta.TblPatient.Where(g => g.Dateofreferral == null).ToList(); }else { char[] separator = new char[] { ',' }; string yeartmp = this.repYearList.GetCheckedItems().ToString(); yeartmp = yeartmp.Replace(" ", ""); string[] yearSelected = yeartmp.Split(separator); PatientLists = meta.TblPatient.Where(g => g.Dateofreferral == null).Where(g=>yearSelected.Contains(g.DateofRegistration.Value.Year.ToString())).ToList(); this.spreadsheetControl.LoadDocument(templateFile); } //PageNum = PatientLists.Count; //genPages(PageNum, PreArvPageNum); break; case 1: templateFile = path + @"\templates\logbook4.xls"; this.barCohort.Enabled = true; this.barYear.Enabled = false; var cohorts = this.barCohort.EditValue; if (cohorts != null) { int bookMonth = Convert.ToInt32(cohorts.ToString().Substring(0, 2)); int bookYear = Convert.ToInt32(cohorts.ToString().Substring(3, 4)); PatientLists = (from q in Patients where (q.DateofArv != null && q.DateofArv.Value.Month == bookMonth && q.DateofArv.Value.Year == bookYear) select q).ToList(); PageNum = PatientLists.Count; }else { PageNum = 0; } genPages(PageNum, ArvPageNum); this.spreadsheetControl.LoadDocument(templateFile); break; case 2: templateFile = path + @"\templates\pmtct.xls"; this.barCohort.Enabled = false; this.barYear.Enabled = false; this.spreadsheetControl.LoadDocument(templateFile); break; } } private void barGen_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (Page.EditValue == null && SelectedReportIndex==3) return; int pageNo = Convert.ToInt32(Page.EditValue); switch (SelectedReportIndex) { case 0: fillPreArvCohorts(pageNo); break; case 1: FillArvCohorts( pageNo); break; case 2: clsPMTCT pmtct = new clsPMTCT(); pmtct.spreed = this.spreadsheetControl; pmtct.Calculate(); break; } } private void FillArvCohorts(int PageNo) { this.spreadsheetControl.Visible = false; this.progressPanel.Visible = true; int StartNum = ArvPageNum*(PageNo-1); int EndNum = Math.Min(ArvPageNum*PageNo-1,PageNum-1); string path = Application.StartupPath; string templateFile = path + @"\templates\logbook4.xls"; this.spreadsheetControl.LoadDocument(templateFile); int rows =8; for (int i= StartNum; i<=EndNum;i++) { FillArvPatientInfo(rows, PatientLists[i], i+1); rows =rows+2; } this.spreadsheetControl.Visible = true; this.progressPanel.Visible = false; } private void FillArvPatientInfo(int rows,TblPatientEntity p, int pos) { var _arvTreatment = treatments.Where(m => m.PatientId == p.PatientId).Where(m=>m.TreatmentId=="01").OrderBy(m=>m.TreatmentSdate).ToList(); var _otherTreatment = treatments.Where(m => m.PatientId == p.PatientId).Where(m => m.TreatmentId != "01").Where(m=>m.TreatmentSdate >= p.DateofArv).OrderBy(m=>m.TreatmentSdate).ToList(); var _clinics = exams.Where(m => m.PatientId == p.PatientId).Where(g => g.IsClinic == 1).Where(g=>g.ExamDate >=p.DateofArv).ToList(); var _exams = exams.Where(m => m.PatientId == p.PatientId).Where(g=>g.ExamDate >=p.DateofArv).OrderBy(m=>m.ExamDate).ToList(); var _preclinics = preclinics.Where(m => m.PatientId == p.PatientId).Where(m => m.Testid == "01").ToList(); string FirstCd4 = _preclinics.Where(m => m.TestDate <= p.DateofArv).OrderBy(m => m.TestDate).Count() > 0 ? _preclinics.Where(m => m.TestDate <= p.DateofArv).OrderBy(m => m.TestDate).Last().QuantityResult.ToString() : "N/A"; LinqMetaData meta = new LinqMetaData(adapter); #region "Điền thông in ban đầu" try { this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 0].Value = pos.ToString(); this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 1].Value = p.PatientId; ; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 2].Value = p.PatientName; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 3].Value = p.Sex == 1 ? p.BirthYear.ToString() : null; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 4].Value = p.Sex == 2 ? p.BirthYear.ToString() : null; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 5].Value = p.DateofArv; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 6].Value = p.Regimenid != string.Empty ? meta.TblRegimen.Where(q => q.Regimenid == p.Regimenid).First().Sign : "N/A"; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 7].Value = _clinics.Count() > 0 ? _clinics.First().ClinicStage.ToString() : "N/A"; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 8].Value = FirstCd4; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 9].Value = _clinics.Count() > 0 ?_clinics.First().Weight.ToString() : "N/A"; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows + 1, 9].Value = exams.Where(m => m.PatientId == p.PatientId).Where(g => g.IsClinic == 1).Count() > 0 ? exams.Where(m => m.PatientId == p.PatientId).Where(g => g.IsClinic == 1).First().Height.ToString() : "N/A"; } catch(Exception er) { MessageBox.Show(er.Message + " " + p.PatientId); } //Điền phác đồ cuối cùng ở ô thay đổi phác đồ if (_arvTreatment.Count > 1) { int LastRec = _arvTreatment.Count - 1; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 10].Value = _arvTreatment[LastRec].TreatmentSdate; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 11].Value = _arvTreatment[LastRec-1].ReasonId; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 12].Value = meta.TblRegimen.Where(m => m.Regimenid == _arvTreatment[LastRec].Regimenid).First().Sign; } //Phác đồ tháng đầu tiên try { this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, 13].Value = _arvTreatment.Count() > 0 ? meta.TblRegimen.Where(m => m.Regimenid == _arvTreatment[0].Regimenid).Single().Sign : "N/A"; }catch (Exception er) { MessageBox.Show(er.Message+ " " + p.PatientId); } //Tính ngày cuối cùng cho Logs-Book - Nếu bệnh nhân đã kết thúc điều trị ngày cuối cùng trong LogBooks là ngày kết thúc. Nếu không ngày cuối cùng là ngày hiện thời var EndExamDate = (_exams.Count ==0)?p.DateofArv:(_exams.Last().EndExamDate==null? DateTime.Today :_exams.Last().EndExamDate); #endregion #region "Khởi tạo danh sách sự kiện" List Statuses = new List(); // Tính số tháng cần điền var printmonths = 0; int monthCounts = common.MonthDiff(p.DateofArv.Value, EndExamDate.Value); try { printmonths = p.HaveArvBefore == 1 ? common.MonthDiff(p.DateofArv.Value, p.DateofRegistration.Value) : 0; } catch (Exception er) { MessageBox.Show("Thiếu ngày đăng ký " + p.PatientId); } for (int i = 0; i <= monthCounts; i++) { var s = new ArvStatus(); s.month = i; s.PatientId = p.PatientId; if (i >= printmonths) { s.ExamDes = "KK"; s.remonth = i + 1; s.Regimenid = ""; s.OtherStatus = ""; s.CD4 = (i == 0) ? FirstCd4 : "N/A"; } Statuses.Add(s); } if (p.HaveArvBefore == 1) { try { Statuses[printmonths].ExamDes = "CT"; Statuses[printmonths].Regimenid = meta.TblRegimen.Where(m => m.Regimenid == p.Regimenid).First().Sign; } catch (Exception err) { MessageBox.Show(err + " " + p.PatientId); } } for (int j = 0; j < _exams.Count; j++) { try { var ex = _exams[j]; int mondiff = common.MonthDiff(p.DateofArv.Value, ex.ExamDate.Value); var currNode = Statuses.Where(q => q.month == mondiff).First(); if (ex.ReTreatment==1) { currNode.ExamDes = "DTL"; } else { if (currNode.ExamDes =="KK") currNode.ExamDes = "CK"; } if (ex.EndExamDate !=null ) { int monthEnd = 0; monthEnd = common.MonthDiff(p.DateofArv.Value, ex.EndExamDate.Value); var enndCurrNode = Statuses.Where(q => q.month == monthEnd).First(); try { enndCurrNode.EndReason = ex.ReasonEnd.Length == 0 ? "00" : meta.TblRegimenStopReason.Where(q => q.ReasonId == ex.ReasonEnd).First().Sign; enndCurrNode.ExamDes = ex.ReasonEnd.Length == 0 ? "00" : meta.TblRegimenStopReason.Where(q => q.ReasonId == ex.ReasonEnd).First().Sign; } catch(Exception err) { MessageBox.Show(err.Message + " " + p.PatientId + " " + monthEnd.ToString() + " " + ex.ReasonEnd + " Lý do kết thúc điều trị"); } } // if (p.HaveArvBefore == 1 && mondiff == printmonths) currNode.ExamDes = "CT"; currNode.ArvDes = currNode.ExamDes; currNode.remonth = ex.ReExamDate != null? common.MonthDiff(p.DateofArv.Value, ex.ReExamDate.Value):currNode.month; }catch(Exception err) { MessageBox.Show(err.Message + " Step 1"); } } #endregion #region "điền CD4" var _interPreClinics = _preclinics.Where(m => m.TestDate >= p.DateofArv).ToList(); for (int i = 1; i < _interPreClinics.Count; i++) { var ex = _interPreClinics[i]; int mondiff = common.MonthDiff(p.DateofArv.Value, ex.TestDate.Value); var currNode = Statuses.Where(q => q.month == mondiff).First(); currNode.CD4 = ex.QuantityResult.ToString(); } #endregion #region "Điền phác đồ" for (int i = 0; i < _arvTreatment.Count; i++) { var ex = _arvTreatment[i]; try { int mondiff = common.MonthDiff(p.DateofArv.Value, ex.TreatmentSdate.Value); var currNode = Statuses.Where(q => q.month == mondiff).First(); currNode.Regimenid = meta.TblRegimen.Where(m => m.Regimenid == ex.Regimenid).Single().Sign; } catch(Exception err) { MessageBox.Show(err.Message + " " + p.PatientId + " In phác đồ ARV"); } } #endregion #region "Điền các thông tin điều trị khác" for (int i = 0; i <_otherTreatment.Count; i++) { var ex = _otherTreatment[i]; int mondiff = common.MonthDiff(p.DateofArv.Value, ex.TreatmentSdate.Value) ; var currNode = Statuses.Where(q => q.month == mondiff).First(); try { currNode.OtherStatus = currNode.OtherStatus.Trim().Length == 0 ? meta.TblTreatment.Where(m => m.TreatmentId == ex.TreatmentId).First().Sign : currNode.OtherStatus ; // currNode.OtherStatus = currNode.OtherStatus + meta.TblTreatment.Where(m => m.TreatmentId == ex.TreatmentId).First().Sign; } catch (Exception er) { MessageBox.Show(er.Message + " ," + p.PatientId + ex.TreatmentId); } } #endregion #region "Finalizing" for(int i=printmonths+1; i< Statuses.Count; i++) { if( Statuses[i].CD4 == "N/A") Statuses[i].CD4 = Statuses[i-1].CD4; if (Statuses[i].Regimenid == "N/A" && Statuses[i].ExamDes == "CK") Statuses[i].Regimenid = Statuses[i - 1].Regimenid; if (Statuses[i].ExamDes == "KK") { Statuses[i].remonth = Statuses[i - 1].remonth; Statuses[i].Regimenid = Statuses[i - 1].Regimenid; } if (Statuses[i].month < Statuses[i - 1].remonth ) Statuses[i].ExamDes = "CK"; if (Statuses[i].ExamDes == "CK" && Statuses[i].Regimenid == "") Statuses[i].Regimenid = Statuses[i - 1].Regimenid; if (Statuses[i].ExamDes == "KK" && (Statuses[i - 1].ExamDes == "B" || Statuses[i - 1].ExamDes =="")) Statuses[i].ExamDes = ""; if (Statuses[i].ExamDes == "KK" && (Statuses[i - 1].ExamDes == "B" || Statuses[i - 1].ExamDes =="")) Statuses[i].Regimenid = ""; } #endregion #region "Fill Spreed Sheet" for(int i =0; i< Statuses.Count; i++) { var g = Statuses[i]; // if (i==0 && p.HaveArvBefore==0) g.Regimenid= _ArvTreatment.Count() > 0 ? meta.TblRegimen.Where(m => m.Regimenid == _ArvTreatment[0].Regimenid).Single().Sign : ""; g.ArvDes = g.ExamDes; if (g.ExamDes == "DTL" || g.ExamDes == "CT") g.ArvDes = g.Regimenid + "\n" + g.ExamDes; if (g.ExamDes == "CK") g.ArvDes = g.Regimenid + "\n" + " "; int col = g.getCol(); if (col != 0) { this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, col].Value = g.ArvDes; this.spreadsheetControl.Document.Worksheets["ARV"].Cells[7, col].Value = p.DateofArv.Value.AddMonths(i).ToString("MM")+ "/" + p.DateofArv.Value.AddMonths(i).ToString("yy"); this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows+1, col].Value = g.OtherStatus; } if ( g.month%6==0 && g.month!=0) { this.spreadsheetControl.Document.Worksheets["ARV"].Cells[rows, col+1].Value = g.CD4; } } #endregion } private void fillPreArvCohorts(int PageNo) { this.spreadsheetControl.Visible = false; this.progressPanel.Visible = true; string path = Application.StartupPath; string templateFile = path + @"\templates\logbook2.xls"; this.spreadsheetControl.LoadDocument(templateFile); int minYear = PatientLists.Where(m=>m.DateofRegistration!=null).Select(m => new { year = m.DateofRegistration.Value.Year }).OrderBy(m => m.year).First().year; this.startYear = minYear; for (int i=1;i<28;i+=4) { this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[6, 12 + i].Value = minYear++; } int StartNum = PreArvPageNum * (PageNo - 1); int EndNum = Math.Min(PreArvPageNum * PageNo - 1, PageNum - 1); int rows = 9; for (int i= StartNum; i<=EndNum;i++) { fillPreArvPatientInfo(rows, PatientLists[i], i+1); rows = rows + 2; } this.spreadsheetControl.Visible = true; this.progressPanel.Visible = false; } private void fillPreArvPatientInfo(int thisrow, TblPatientEntity p, int pos) { var _exams = p.DateofArv != null ? exams.Where(m => m.PatientId == p.PatientId).Where(m => m.ExamDate <= p.DateofArv).ToList() : exams.Where(m => m.PatientId == p.PatientId).ToList(); var _treatment = p.DateofArv != null ?treatments.Where(m => m.PatientId == p.PatientId).Where(m => m.TreatmentSdate <= p.DateofArv).ToList():treatments.Where(m => m.PatientId == p.PatientId).ToList(); var _clinics = p.DateofArv != null ? exams.Where(m => m.PatientId == p.PatientId).Where(g => g.IsClinic == 1).Where(m => m.ExamDate <= p.DateofArv).ToList() : exams.Where(m => m.PatientId == p.PatientId).Where(g => g.IsClinic == 1).ToList(); var _preclinics = p.DateofArv != null ? preclinics.Where(m => m.PatientId == p.PatientId).Where(m => m.TestDate <= p.DateofArv).Where(m=>m.Testid =="01").ToList() : preclinics.Where(m => m.PatientId == p.PatientId).Where(m=>m.Testid =="01").ToList(); try { this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 0].Value = pos.ToString(); this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 2].Value = p.PatientName; this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 1].Value = p.DateofRegistration != null ? p.DateofRegistration.Value.ToShortDateString() : "N/A"; this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 3].Value = p.PatientId; this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 4].Value = (p.Sex == 1 ? p.BirthYear.ToString() : null); this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 5].Value = (p.Sex == 2 ? p.BirthYear.ToString() : null); this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 6].Value = p.Address; this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 8].Value = _clinics.Count==0 ? "N/A" : _clinics.First().ClinicStage.ToString(); this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 9].Value = _preclinics.Where(m => m.Testid == "01").Count() > 0 ? _preclinics.Where(m => m.Testid == "01").First().QuantityResult.ToString() : "N/A"; this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 10].Value = _clinics.Count == 0 ? "N/A" : _clinics.First().Weight.ToString(); this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow + 1, 10].Value = _clinics.Count == 0 ? "N/A" : _clinics.First().Height.ToString(); this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 11].Value = this.ArvDate(p.PatientId); this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, 12].Value = p.DateofArv != null ? p.DateofArv.Value.ToShortDateString() : "N/A"; } catch (Exception err) { MessageBox.Show(err.Message); } if (_exams.Count() == 0) return; List Statuses = new List(); var EndExamDate = _exams.Last().EndExamDate == null ? (p.DateofArv == null ? DateTime.Today : p.DateofArv) : _exams.Last().EndExamDate; int quarterCount = (EndExamDate.Value.Year - this.startYear) * 4 + common.GetQuarter(EndExamDate.Value); int startQuarter = (_exams.First().ExamDate.Value.Year - this.startYear) * 4 + common.GetQuarter(_exams.First().ExamDate.Value); for (int i = startQuarter; i <= quarterCount; i++) { var s = new prevArvStatus(); s.quarter = i ; s.PreArvDes = ""; s.OtherStatus = ""; Statuses.Add(s); s.col = s.quarter + 13; } for (int i = 0; i < _preclinics.Count; i++) { var ex = _preclinics[i]; int quarters = (ex.TestDate.Value.Year-this.startYear ) * 4 + common.GetQuarter(ex.TestDate.Value); try { var currNode = Statuses.Where(q => q.quarter == quarters).First(); currNode.PreArvDes = ex.QuantityResult.ToString(); } catch(Exception err) { MessageBox.Show(err.Message + " " + p.PatientId + " " + quarters); } } for (int i = 0; i < _exams.Count; i++) { var ex = _exams[i]; int quarters = (ex.ExamDate.Value.Year - this.startYear) * 4 + common.GetQuarter(ex.ExamDate.Value); if (ex.EndExamDate != null) { int Equarters = (ex.EndExamDate.Value.Year - this.startYear) * 4 + common.GetQuarter(ex.EndExamDate.Value); Statuses.Where(q => q.quarter == Equarters).First().PreArvDes = ex.ReasonEnd + "\n" + ex.EndExamDate.Value.ToShortDateString() ; } } for (int i = 1; i < Statuses.Count; i++) { // if (Statuses[i].CD4 == "N/A") Statuses[i].CD4 = Statuses[i - 1].CD4; // if (Statuses[i].PreArvDes == "KK") Statuses[i].PreArvDes = Statuses[i - 1].PreArvDes; } //Fill Spreed Sheet for (int i = 0; i < Statuses.Count; i++) { var g = Statuses[i]; int col = g.col; try { this.spreadsheetControl.Document.Worksheets["Pre-ARV"].Cells[thisrow, col - 1].Value = g.PreArvDes; ; } catch (Exception err) { MessageBox.Show(err.Message + " " + Statuses.Count().ToString()); } } } private void spreadsheetControl_DoubleClick(object sender, EventArgs e) { string PatientID = "0"; switch( SelectedReportIndex) { case 0: PatientID= this.spreadsheetControl.ActiveWorksheet.Cells[spreadsheetControl.ActiveCell.RowIndex, 3].Value.ToString(); break; case 1: PatientID = this.spreadsheetControl.ActiveWorksheet.Cells[spreadsheetControl.ActiveCell.RowIndex, 1].Value.ToString(); break; } if(PatientID.Length>3) { var frm = new frmPatientInfo(); frm.PatientsCollection = new EntityCollection(); var PatientInfo = new TblPatientEntity(PatientID); adapter.FetchEntity(PatientInfo); frm.PatientsCollection.Add(PatientInfo); frm.PatientInfo = PatientInfo; frm.LoadData(); frm.ShowDialog(); } } private void genPages(int Records,int RecordperPage) { this.PageList.Items.Clear(); int m = Records % RecordperPage > 0 ? Records / RecordperPage + 1 : Records / RecordperPage; for (int i =1;i<=m;i++) { this.PageList.Items.Add(i); } } private void barCohort_EditValueChanged(object sender, EventArgs e) { var cohorts = this.barCohort.EditValue; string path = Application.StartupPath; string templateFile = path + @"\templates\logbook4.xls"; if (cohorts != null) { int bookMonth = Convert.ToInt32(cohorts.ToString().Substring(0, 2)); int bookYear = Convert.ToInt32(cohorts.ToString().Substring(3, 4)); PatientLists = (from q in Patients where (q.DateofArv != null && q.DateofArv.Value.Month == bookMonth && q.DateofArv.Value.Year == bookYear) select q).ToList(); PageNum = PatientLists.Count; } else { PageNum = 0; } genPages(PageNum, ArvPageNum); this.spreadsheetControl.LoadDocument(templateFile); } private void GenYearList() { LinqMetaData meta = new LinqMetaData(adapter); var years = meta.TblPatient.Where(m=>m.DateofRegistration!=null).Where(m=>m.HaveArvBefore==0).Select(m => new { year=m.DateofRegistration.Value.Year }).Distinct().ToList(); this.repYearList.DataSource = years; this.repYearList.DisplayMember = "year"; this.repYearList.ValueMember = "year"; } private void barYear_EditValueChanged(object sender, EventArgs e) { char[] separator = new char[] { ',' }; LinqMetaData meta = new LinqMetaData(adapter); string Yeartmp = this.barYear.EditValue.ToString(); Yeartmp = Yeartmp.Replace(" ", ""); PatientLists.Clear(); string[] YearSelected = Yeartmp.Split(separator); List tempPatient = meta.TblPatient.Where(g => g.DateofRegistration != null).ToList(); PatientLists = (from q in tempPatient where YearSelected.Contains(q.DateofRegistration.Value.Year.ToString()) orderby q.DateofRegistration select q).ToList(); PageNum = PatientLists.Count; MessageBox.Show(PageNum.ToString()); genPages(PageNum, PreArvPageNum); } private void spreadsheetControl_Click(object sender, EventArgs e) { } private string ArvDate(string PatientId) { try { var exams = new EntityCollection(); var tests = new EntityCollection(); adapter.FetchEntityCollection(exams, null); adapter.FetchEntityCollection(tests, null); DateTime CD4CriteridaDate = tests.Where(m => m.PatientId == PatientId).Where(p => p.Testid == "01").Where(p => p.QuantityResult < 350).OrderBy(p => p.TestDate).First().TestDate.Value; DateTime ClinicStateDate = exams.Where(p => p.ClinicStage >= 3).Where(m => m.PatientId == PatientId).OrderBy(m => m.ExamDate).First().ExamDate.Value; return common.MinDate(CD4CriteridaDate, CD4CriteridaDate).ToShortDateString(); } catch { return "N/A"; } } private void barExcel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.SaveFileDialog.FileName = "arvlogbook" + DateTime.Today.ToString("dd") + DateTime.Today.ToString("MM") + DateTime.Today.ToString("yy") + ".xls"; this.SaveFileDialog.Filter = "Excel File|*.xls"; if (this.SaveFileDialog.ShowDialog() == DialogResult.OK) { this.spreadsheetControl.SaveDocument(SaveFileDialog.FileName, DocumentFormat.Xls); MessageBox.Show("Quá trình kết xuất file đã hoàn tất", "kết xuất", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void barpdf_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.SaveFileDialog.FileName = "arvlogbook" + DateTime.Today.ToString("dd") + DateTime.Today.ToString("MM") + DateTime.Today.ToString("yy") + ".pdf"; this.SaveFileDialog.Filter = "Pdf File|*.pdf"; if (this.SaveFileDialog.ShowDialog() == DialogResult.OK) { this.spreadsheetControl.ExportToPdf(SaveFileDialog.FileName); MessageBox.Show("Quá trình kết xuất file đã hoàn tất", "kết xuất", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void barReload_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { LinqMetaData meta = new LinqMetaData(adapter); var patientids = meta.TblPatient.Select(m => m.PatientId).ToList(); foreach (string id in patientids) { fixdata(id); } MessageBox.Show("Quá trình hiệu chỉnh dữ liệu đã kết thúc. Đề khởi động lại logbook để tác vụ có hiệu lực", "Hiệu chỉnh", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void fixdata(string patientid) { TblPatientEntity PatientInfor = new TblPatientEntity(patientid); adapter.FetchEntity(PatientInfor); EntityCollectionExamInfos = new EntityCollection(); ExamInfos = PatientInfor.TblExaminationInfos; ISortExpression sorter = new SortExpression(TblExaminationInfoFields.ExamDate | SortOperator.Ascending); adapter.FetchEntityCollection(ExamInfos, PatientInfor.GetRelationInfoTblExaminationInfos(), 0, sorter); for (int j = 0; j <= ExamInfos.Count - 1; j++) { ExamInfos[j].DayDiff = (j == 0) ? (short)0 : (short) (System.Convert.ToDateTime(ExamInfos[j].ExamDate) - System.Convert.ToDateTime(ExamInfos[j - 1].ReExamDate)).TotalDays; ExamInfos[j].Status = (ExamInfos[j].DayDiff == 0) ? (short)1 : ((ExamInfos[j].DayDiff < 0) ? (short)2 : (short)3); if (j > 0) ExamInfos[j].ReTreatment = (ExamInfos[j - 1].ReasonEnd =="10") ? (short)1 : (short)0; } adapter.SaveEntityCollection(ExamInfos); } } }