Files
2025-08-02 05:20:17 +07:00

847 lines
63 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Datalib.DatabaseSpecific;
using System.Windows.Forms;
using Datalib.Linq;
using Datalib.EntityClasses;
using Datalib.FactoryClasses;
using Datalib.HelperClasses;
using PatientMan.Classes;
namespace PatientMan.Classes
{
class clsProgress
{
public DevExpress.XtraSpreadsheet.SpreadsheetControl spreed;
public DateTime BeginDate;
public DateTime EndDate;
private DevExpress.Spreadsheet.Worksheet _Progress, _Tracking;
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
public void Calculate()
{
_Progress = this.spreed.Document.Worksheets["Progress"];
_Tracking = this.spreed.Document.Worksheets["Tracking"];
//V1A();
// V1B();
V1C(); VIIPreArv(); VIIARV(); V3C();
}
private void V1A()
{
LinqMetaData meta = new LinqMetaData(adapter);
DateTime BeginDate = this.BeginDate;
DateTime EndDate = this.EndDate;
#region index1patie
// Chỉ số 1 - 1A - Số lượt bệnh nhân đến PKNT trong kỳ báo cáo - Liên quan đến điều trị Lao (TreatmentId = "02"
int[] index1 = { 0, 0 };
string[] indexs1 = { "", "" };
index1[0] = meta.TblExaminationInfo.Where(m => m.ExamDate >= BeginDate).Where(m => m.ExamDate <= EndDate).Where(m => m.NoSelfExam != 1).Select(g => g.PatientId).ToList().Count();
indexs1[0] = string.Join(",", meta.TblTreatmentInfo.Where(m => m.TreatmentSdate <= EndDate).Where(m => m.TreatmentEdate == null || m.TreatmentEdate > EndDate).GroupBy(m => m.PatientId).Select(g => g.Key).ToArray());
index1[1] = meta.TblExaminationInfo.Where(m => m.ExamDate >= BeginDate).Where(m => m.ExamDate <= EndDate).Where(m => m.NoSelfExam == 1).Select(g => g.PatientId).ToList().Count();
//Fill
_Progress.Cells[11, 3].Value = index1[0]; _Progress.Cells[11, 7].Value = index1[1];
_Tracking.Cells[11, 3].Value = indexs1[0]; _Tracking.Cells[11, 7].Value = indexs1[1];
#endregion
#region index2
//chỉ số 2 - 1A - số bệnh nhân mới đăng ký trong kỳ báo cáo
int[] index2 = { 0, 0, 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "", "", "" };
var index2result = meta.TblPatient.Where(m => m.DateofRegistration >= BeginDate).Where(m => m.DateofRegistration <= EndDate).Select(m => new { PatientId = m.PatientId, Sex = m.Sex, Age = EndDate.Year - m.BirthYear }).ToList();
// Nam < 1 tuổi
index2[0] = index2result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index2[1] = index2result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15
index2[2] = index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs2[2] = string.Join(",", index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nữ < 1 tuổi
index2[3] = index2result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
// Nữ từ 1-14
index2[4] = index2result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs2[4] = string.Join(",", index2result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15
index2[5] = index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
// Fill
_Progress.Cells[12, 3].Value = index2[0]; _Progress.Cells[12, 4].Value = index2[1]; _Progress.Cells[12, 5].Value = index2[2];
_Progress.Cells[12, 7].Value = index2[3]; _Progress.Cells[12, 8].Value = index2[4]; _Progress.Cells[12, 9].Value = index2[5];
_Tracking.Cells[12, 3].Value = indexs2[0]; _Tracking.Cells[12, 4].Value = indexs2[1]; _Tracking.Cells[12, 5].Value = indexs2[2];
_Tracking.Cells[12, 7].Value = indexs2[3]; _Tracking.Cells[12, 8].Value = indexs2[4]; _Tracking.Cells[12, 9].Value = indexs2[5];
#endregion
#region index 3
//chỉ số 3 - 1A - số bệnh đang quản lý trong kỳ báo cáo
int[] index3 = { 0, 0, 0, 0, 0, 0 };
string[] indexs3 = { "", "", "", "", "", "" };
var index3preresult = meta.TblExaminationInfo.Where(m => m.ExamDate <= EndDate).Join(meta.TblPatient, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, ExamDate = e.ExamDate, EndExamDate = e.EndExamDate }).ToList();
var index3result = index3preresult.GroupBy(m => m.PatientId).Select(g => g.OrderBy(m => m.ExamDate).Last()).Where(m => m.EndExamDate == null || m.EndExamDate > EndDate).ToList();
//Nam < 1 tuổi
index3[0] = index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14`
index3[1] = index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs3[1] = string.Join(",", index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index3[2] = index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs3[2] = string.Join(",", index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index3[3] = index3result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index3[4] = index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs3[4] = string.Join(",", index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index3[5] = index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs3[5] = string.Join(",", index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Fill
_Progress.Cells[13, 3].Value = index3[0]; _Progress.Cells[13, 4].Value = index3[1]; _Progress.Cells[13, 5].Value = index3[2];
_Progress.Cells[13, 7].Value = index3[3]; _Progress.Cells[13, 8].Value = index3[4]; _Progress.Cells[13, 9].Value = index3[5];
_Tracking.Cells[13, 3].Value = indexs3[0]; _Tracking.Cells[13, 4].Value = indexs3[1]; _Tracking.Cells[13, 5].Value = indexs3[2];
_Tracking.Cells[13, 7].Value = indexs3[3]; _Tracking.Cells[13, 8].Value = indexs3[4]; _Tracking.Cells[13, 9].Value = indexs3[5];
#endregion
}
private void V1B()
{
int age = 15;
LinqMetaData meta = new LinqMetaData(adapter);
DateTime thisBeginDate = this.BeginDate;
DateTime thisEndDate = this.EndDate;
DateTime EndDate = this.EndDate;
#region index1
// Chỉ số 1 - 1B - Số lượt bệnh nhân đến PKNT trong kỳ báo cáo - Liên quan đến điều trị Comtrimoxazole (TreatmentId = "04"
int[] index1 = { 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "" };
List<string> endTreatment = meta.TblReferralsTo.Where(m => m.EndDate <= thisBeginDate).GroupBy(m => m.PatientId).Select(g => g.Key).ToList();
List<string> Comtri = meta.TblTreatmentInfo.Where(c => !endTreatment.Contains(c.PatientId)).Where(m => m.TreatmentId == "04").Where(m => m.TreatmentSdate <= thisEndDate).Where(m => m.TreatmentEdate == null || m.TreatmentEdate > thisEndDate).GroupBy(m => m.PatientId).Select(g => g.Key).ToList();
var Result = meta.TblPatient.Where(c => Comtri.Contains(c.PatientId)).Select(m => new { PatientId = m.PatientId, Sex = m.Sex, Age = thisEndDate.Year - m.BirthYear }).ToList();
//Nam < 15
index1[0] = Result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
//Nam >=15
index1[1] = Result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
//Nữ < 15 tuổi
index1[2] = Result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
//Nữ >=15
index1[3] = Result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
_Progress.Cells[20, 3].Value = index1[0]; _Progress.Cells[20, 5].Value = index1[1]; _Progress.Cells[20, 7].Value = index1[2]; _Progress.Cells[20, 9].Value = index1[3];
_Tracking.Cells[20, 3].Value = indexs1[0]; _Tracking.Cells[20, 5].Value = indexs1[1]; _Tracking.Cells[20, 7].Value = indexs1[2]; _Tracking.Cells[20, 9].Value = indexs1[3];
#endregion
}
private void V1C()
{
LinqMetaData meta = new LinqMetaData(adapter);
EntityCollection<TblTreatmentInfoEntity> TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
EntityCollection <TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
adapter.FetchEntityCollection(TreatmentInfo, null);
adapter.FetchEntityCollection(Patients, null);
int age = 15;
DateTime thisBeginDate = this.BeginDate;
DateTime thisEndDate = this.EndDate;
#region index1
////Chỉ số 1 - 1C - Số lượt bệnh nhân tự đến được sàng lọc Lao trong kỳ báo cáo
//int[] index1 = { 0, 0, 0, 0 };
//var tbScreens = meta.TblExaminationInfo.Where(p => p.TbScreen == 1).Where(p => p.ExamDate >= thisBeginDate && p.ExamDate <= thisEndDate).ToList();
//var tbPositive = tbScreens.Where(p => p.TbScreenResult == "02").ToList();
//var tbNegative = tbScreens.Where(p => p.TbScreenResult != "02").ToList();
//List<string> tbTreat = meta.TblTreatmentInfo.Where(p => p.TreatmentId == "02").Where(p => p.TreatmentSdate >= thisBeginDate && p.TreatmentSdate <= thisEndDate).GroupBy(p => p.PatientId).Select(g => g.Key).ToList();
//index1[0] = tbPositive.Where(p => tbTreat.Contains(p.PatientId)).ToList().Count();
//index1[1] = tbNegative.Where(p => tbTreat.Contains(p.PatientId)).ToList().Count();
//index1[2] = tbPositive.Count - index1[0];
//index1[3] = tbNegative.Count - index1[1];
////Fill
//_Progress.Cells[25, 3].Value = index1[0]; _Progress.Cells[25, 5].Value = index1[1];
//_Progress.Cells[25, 7].Value = index1[2]; _Progress.Cells[25, 9].Value = index1[3];
#endregion
#region index3
//Chỉ số 3 - Số bệnh nhân bắt đầu điều trị Lao trong kỳ báo cáo
//Lọc tất cả các bản ghi trong bảng tblTreatmentInfo có kiểu điều trị là Lao (02) và có ngày điều trị trong khoảng báo cáo, nhóm lại lấy bản ghi duy nhất
int[] index3 = { 0, 0 };
string[] indexs3 = {"", ""};
var index3prevresult = (from tr in TreatmentInfo where (tr.TreatmentId == "02" && tr.TreatmentSdate >= thisBeginDate && tr.TreatmentSdate <= thisEndDate) group tr by tr.PatientId into g select g.First()).ToList();
var index3result = index3prevresult.Join(Patients,
t => t.PatientId,
p => p.PatientId,
(t, p)
=> new { PatientId = p.PatientId, Sex = p.Sex, Age = thisEndDate.Year - p.BirthYear }).ToList();
//Nam
index3[0] = index3result.Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",",index3result.Where(m => m.Sex == 1).Select(p=>p.PatientId).ToArray());
//Nữ
index3[1] = index3result.Where(m => m.Sex == 2).Count();
indexs3[1] = string.Join(",", index3result.Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_Progress.Cells[16, 3].Value = index3[0]; _Progress.Cells[16, 7].Value = index3[1];
_Tracking.Cells[16, 3].Value = indexs3[0]; _Tracking.Cells[16, 7].Value = indexs3[1];
#endregion
#region index4
//Chỉ số 4 - Số bệnh nhân bắt đầu điều trị dự phòng mắc Lao bằng INH (IPT) trong kì báo cáo
//int[] index4 = { 0, 0, 0, 0 };
//string[] indexs4 = { "", "", "", "" };
//var index4prevresult = (from tr in TreatmentInfo where tr.TreatmentId == "03" group tr by tr.PatientId into g select g.OrderBy(p => p.TreatmentEdate).First()).Where(p => p.TreatmentEdate >= thisBeginDate && p.TreatmentEdate <= thisEndDate).ToList();
//var index4result = index4prevresult.Join(meta.TblPatient,
// t => t.PatientId,
// p => p.PatientId,
// (t, p)
// => new { PatientId = p.PatientId, Sex = p.Sex, Age = thisEndDate.Year - p.BirthYear }).ToList();
////Nam < 15
//index4[0] = index4result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
////Nam >=15
//index4[1] = index4result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
////Nữ < 15 tuổi
//index4[2] = index4result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
////Nữ >=15
//index4[3] = index4result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
////fill
//_Progress.Cells[31, 3].Value = index4[0]; _Progress.Cells[31, 5].Value = index4[1]; _Progress.Cells[31, 7].Value = index4[2]; _Progress.Cells[31, 9].Value = index4[3];
//_Tracking.Cells[31, 3].Value = indexs4[0]; _Tracking.Cells[31, 5].Value = indexs4[1]; _Tracking.Cells[31, 7].Value = indexs4[2]; _Tracking.Cells[31, 9].Value = indexs4[3];
#endregion
}
private void VIIPreArv()
{
//Dịch vụ trước điều trị ARV
EntityCollection<TblExaminationInfoEntity> exams = new EntityCollection<TblExaminationInfoEntity>();
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblReferralsToEntity> ReferralTo = new EntityCollection<TblReferralsToEntity>();
adapter.FetchEntityCollection(exams, null);
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(ReferralTo, null);
int row = 0;
#region index1
// Đang quản lý
int[] index1 = { 0, 0, 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "", "", "" };
List<string> ends = exams.Where(p => p.ExamDate <= EndDate).GroupBy(q => q.PatientId).Select(g => g.OrderByDescending(m => m.ExamDate).First()).ToList().Where(s => s.EndExamDate == null || s.EndExamDate > EndDate).Select(t => t.PatientId).ToList();
var index1Result = Patients.Where(m => m.DateofArv >= EndDate || m.DateofArv == null).Where(p => ends.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index1[0] = index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs1[0] = string.Join(",", index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index1[1] = index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs1[1] = string.Join(",", index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index1[2] = index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs1[2] = string.Join(",", index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index1[3] = index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs1[3] = string.Join(",", index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index1[4] = index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs1[4] = string.Join(",", index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index1[5] = index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs1[5] = string.Join(",", index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 21;
_Progress.Cells[row, 3].Value = index1[0]; _Progress.Cells[row, 4].Value = index1[1]; _Progress.Cells[row, 5].Value = index1[2];
_Progress.Cells[row, 7].Value = index1[3]; _Progress.Cells[row, 8].Value = index1[4]; _Progress.Cells[row, 9].Value = index1[5];
_Tracking.Cells[row, 3].Value = indexs1[0]; _Tracking.Cells[row, 4].Value = indexs1[1]; _Tracking.Cells[row, 5].Value = indexs1[2];
_Tracking.Cells[row, 7].Value = indexs1[3]; _Tracking.Cells[row, 8].Value = indexs1[4]; _Tracking.Cells[row, 9].Value = indexs1[5];
#endregion
#region index2
// Mới đăng ký trong kỳ báo cáo
int[] index2 = { 0, 0, 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "", "", "" };
var index2Result = Patients.Where(m => m.DateofRegistration >= BeginDate && m.DateofRegistration <= EndDate && m.Dateofreferral ==null).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index2[0] = index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index2[1] = index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index2[2] = index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs2[2] = string.Join(",", index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index2[3] = index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index2[4] = index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs2[4] = string.Join(",", index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index2[5] = index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs2[5] = string.Join(",", index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 22;
_Progress.Cells[row, 3].Value = index2[0]; _Progress.Cells[row, 4].Value = index2[1]; _Progress.Cells[row, 5].Value = index2[2];
_Progress.Cells[row, 7].Value = index2[3]; _Progress.Cells[row, 8].Value = index2[4]; _Progress.Cells[row, 9].Value = index2[5];
_Tracking.Cells[row, 3].Value = indexs2[0]; _Tracking.Cells[row, 4].Value = indexs2[1]; _Tracking.Cells[row, 5].Value = indexs2[2];
_Tracking.Cells[row, 7].Value = indexs2[3]; _Tracking.Cells[row, 8].Value = indexs2[4]; _Tracking.Cells[row, 9].Value = indexs2[5];
#endregion
#region index3
//Điều trị lại trong kỳ báo cáo
int[] index3 = { 0, 0, 0, 0, 0, 4 };
string[] indexs3 = { "", "", "", "", "", "" };
var index3Preresult = exams.Where(m => m.ExamDate >= BeginDate && m.ExamDate <= EndDate && m.ReTreatment == 1).ToList();
var index3result = index3Preresult.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, ExamDate = e.ExamDate, DateofArv = p.DateofArv }).Where(m => m.DateofArv == null || m.ExamDate <= m.DateofArv).ToList();
//Nam < 1 tuổi
index3[0] = index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index3[1] = index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs3[1] = string.Join(",", index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index3[2] = index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs3[2] = string.Join(",", index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index3[3] = index3result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index3[4] = index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs3[4] = string.Join(",", index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index3[5] = index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs3[5] = string.Join(",", index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 23;
_Progress.Cells[row, 3].Value = index3[0]; _Progress.Cells[row, 4].Value = index3[1]; _Progress.Cells[row, 5].Value = index3[2];
_Progress.Cells[row, 7].Value = index3[3]; _Progress.Cells[row, 8].Value = index3[4]; _Progress.Cells[row, 9].Value = index3[5];
_Tracking.Cells[row, 3].Value = indexs3[0]; _Tracking.Cells[row, 4].Value = indexs3[1]; _Tracking.Cells[row, 5].Value = indexs3[2];
_Tracking.Cells[row, 7].Value = indexs3[3]; _Tracking.Cells[row, 8].Value = indexs3[4]; _Tracking.Cells[row, 9].Value = indexs3[5];
#endregion
#region index4
//Chuyển đến trong kỳ báo cáo
int[] index4 = { 0, 0, 0, 0, 0, 0 };
string[] indexs4 = { "", "", "", "", "", "" };
var Returns = exams.Where(p=>p.ExamDate >=BeginDate && p.ExamDate <= EndDate && p.ReTreatment==2).Join (Patients , p=>p.PatientId, q=>q.PatientId, (p,q)=>new {p.PatientId, p.ExamDate, q.DateofArv, q.Sex, q.BirthYear}).Where (p=>p.DateofArv==null || p.DateofArv > p.ExamDate).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
var index4Result = Patients.Where(p => p.Dateofreferral != null && p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.HaveArvBefore != 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
index4Result.AddRange(Returns);
//Nam < 1 tuổi
index4[0] = index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs4[0] = string.Join(",", index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
// Nam từ 1-14
index4[1] = index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs4[1] = string.Join(",", index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
// Nam từ 15 tuổi
index4[2] = index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs4[2] = string.Join(",", index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
//Nữ < 1 tuổi
index4[3] = index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs4[3] = string.Join(",", index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//Nữ từ 1-14
index4[4] = index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs4[4] = string.Join(",", index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//Nữ từ 15 tuổi
index4[5] = index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs4[5] = string.Join(",", index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//fill
row = 24;
_Progress.Cells[row, 3].Value = index4[0]; _Progress.Cells[row, 4].Value = index4[1]; _Progress.Cells[row, 5].Value = index4[2];
_Progress.Cells[row, 7].Value = index4[3]; _Progress.Cells[row, 8].Value = index4[4]; _Progress.Cells[row, 9].Value = index4[5];
_Tracking.Cells[row, 3].Value = indexs4[0]; _Tracking.Cells[row, 4].Value = indexs4[1]; _Tracking.Cells[row, 5].Value = indexs4[2];
_Tracking.Cells[row, 7].Value = indexs4[3]; _Tracking.Cells[row, 8].Value = indexs4[4]; _Tracking.Cells[row, 9].Value = indexs4[5];
#endregion
#region index5
//Chuyển đi trong kỳ báo cáo
int[] index5 = { 0, 0, 0, 0, 0, 0 };
string[] indexs5 = { "", "", "", "", "", "" };
var referrals = ReferralTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "09").ToList();
var index5Result = referrals.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, DateofArv = p.DateofArv, EndDate = e.EndDate }).Where(m => m.DateofArv == null || m.EndDate < m.DateofArv).ToList();
//Nam < 1 tuổi
index5[0] = index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs5[0] = string.Join(",", index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index5[1] = index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs5[1] = string.Join(",", index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index5[2] = index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs5[2] = string.Join(",", index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index5[3] = index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs5[3] = string.Join(",", index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index5[4] = index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs5[4] = string.Join(",", index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index5[5] = index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs5[5] = string.Join(",", index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 25;
_Progress.Cells[row, 3].Value = index5[0]; _Progress.Cells[row, 4].Value = index5[1]; _Progress.Cells[row, 5].Value = index5[2];
_Progress.Cells[row, 7].Value = index5[3]; _Progress.Cells[row, 8].Value = index5[4]; _Progress.Cells[row, 9].Value = index5[5];
_Tracking.Cells[row, 3].Value = indexs5[0]; _Tracking.Cells[row, 4].Value = indexs5[1]; _Tracking.Cells[row, 5].Value = indexs5[2];
_Tracking.Cells[row, 7].Value = indexs5[3]; _Tracking.Cells[row, 8].Value = indexs5[4]; _Tracking.Cells[row, 9].Value = indexs5[5];
#endregion
#region index6
int[] index6 = { 0, 0, 0, 0, 0, 0 };
string[] indexs6 = { "", "", "", "", "", "" };
var lossfollows = ReferralTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "10").ToList();
var index6Result = lossfollows.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, DateofArv = p.DateofArv, EndDate = e.EndDate }).Where(m => m.DateofArv == null || m.EndDate < m.DateofArv).ToList();
//Nam < 1 tuổi
index6[0] = index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs6[0] = string.Join(",", index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index6[1] = index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs6[1] = string.Join(",", index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index6[2] = index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs6[2] = string.Join(",", index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index6[3] = index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs6[3] = string.Join(",", index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index6[4] = index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs6[4] = string.Join(",", index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index6[5] = index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs6[5] = string.Join(",", index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 26;
_Progress.Cells[row, 3].Value = index6[0]; _Progress.Cells[row, 4].Value = index6[1]; _Progress.Cells[row, 5].Value = index6[2];
_Progress.Cells[row, 7].Value = index6[3]; _Progress.Cells[row, 8].Value = index6[4]; _Progress.Cells[row, 9].Value = index6[5];
_Tracking.Cells[row, 3].Value = indexs6[0]; _Tracking.Cells[row, 4].Value = indexs6[1]; _Tracking.Cells[row, 5].Value = indexs6[2];
_Tracking.Cells[row, 7].Value = indexs6[3]; _Tracking.Cells[row, 8].Value = indexs6[4]; _Tracking.Cells[row, 9].Value = indexs6[5];
#endregion
#region index7
//Tử vong
int[] index7 = { 0, 0, 0, 0, 0, 0 };
string[] indexs7 = { "", "", "", "", "", "" };
var deaths = ReferralTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "11").ToList();
var index7Result = deaths.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, DateofArv = p.DateofArv, EndDate = e.EndDate }).Where(m => m.DateofArv == null || m.EndDate < m.DateofArv).ToList();
//Nam < 1 tuổi
index7[0] = index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs7[0] = string.Join(",", index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
// Nam từ 1-14
index7[1] = index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs7[1] = string.Join(",", index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
// Nam từ 15 tuổi
index7[2] = index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs7[2] = string.Join(",", index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
//Nữ < 1 tuổi
index7[3] = index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs7[3] = string.Join(",", index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//Nữ từ 1-14
index7[4] = index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs7[4] = string.Join(",", index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//Nữ từ 15 tuổi
index7[5] = index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs7[5] = string.Join(",", index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//fill
row = 27;
_Progress.Cells[row, 3].Value = index7[0]; _Progress.Cells[row, 4].Value = index7[1]; _Progress.Cells[row, 5].Value = index7[2];
_Progress.Cells[row, 7].Value = index7[3]; _Progress.Cells[row, 8].Value = index7[4]; _Progress.Cells[row, 9].Value = index7[5];
_Tracking.Cells[row, 3].Value = indexs7[0]; _Tracking.Cells[row, 4].Value = indexs7[1]; _Tracking.Cells[row, 5].Value = indexs7[2];
_Tracking.Cells[row, 7].Value = indexs7[3]; _Tracking.Cells[row, 8].Value = indexs7[4]; _Tracking.Cells[row, 9].Value = indexs7[5];
#endregion
}
private void VIIARV()
{
//Dịch vụ sau điều trị ARV
LinqMetaData meta = new LinqMetaData(adapter);
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblTreatmentInfoEntity> TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
EntityCollection<TblExaminationInfoEntity> Exams = new EntityCollection<TblExaminationInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(TreatmentInfo, null);
adapter.FetchEntityCollection(Exams, null);
#region index1
// Đang quản lý
int[] index1 = { 0, 0, 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "", "", "" };
int row = 0;
//Lưu ý những cá nhân được đánh dấu là kết thúc điều trị nhưng lại quay lại
List<string> LastArv = TreatmentInfo.Where(p => p.TreatmentSdate <= EndDate && p.TreatmentId == "01").GroupBy(p => p.PatientId).Select(p => p.OrderBy(q => q.TreatmentSdate).Last()).ToList().Where(p => p.TreatmentEdate == null || p.TreatmentEdate > EndDate).Select(p => p.PatientId).ToList();
var index1Result = Patients.Where(p => LastArv.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index1[0] = index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs1[0] = string.Join(",", index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index1[1] = index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs1[1] = string.Join(",", index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index1[2] = index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs1[2] = string.Join(",", index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index1[3] = index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs1[3] = string.Join(",", index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index1[4] = index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs1[4] = string.Join(",", index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index1[5] = index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs1[5] = string.Join(",", index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 32;
_Progress.Cells[row, 3].Value = index1[0]; _Progress.Cells[row, 4].Value = index1[1]; _Progress.Cells[row, 5].Value = index1[2];
_Progress.Cells[row, 7].Value = index1[3]; _Progress.Cells[row, 8].Value = index1[4]; _Progress.Cells[row, 9].Value = index1[5];
_Tracking.Cells[row, 3].Value = indexs1[0]; _Tracking.Cells[row, 4].Value = indexs1[1]; _Tracking.Cells[row, 5].Value = indexs1[2];
_Tracking.Cells[row, 7].Value = indexs1[3]; _Tracking.Cells[row, 8].Value = indexs1[4]; _Tracking.Cells[row, 9].Value = indexs1[5];
#endregion
#region index2
//Bắt đầu điều trị Arv trong kỳ báo cáo
int[] index2 = { 0, 0, 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "", "", "" };
var index2Result = Patients.Where(m => m.DateofArv != null && m.DateofArv >= BeginDate && m.DateofArv <= EndDate && m.HaveArvBefore != 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index2[0] = index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index2[1] = index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index2[2] = index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs2[2] = string.Join(",", index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index2[3] = index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index2[4] = index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs2[4] = string.Join(",", index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index2[5] = index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs2[5] = string.Join(",", index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 33;
_Progress.Cells[row, 3].Value = index2[0]; _Progress.Cells[row, 4].Value = index2[1]; _Progress.Cells[row, 5].Value = index2[2];
_Progress.Cells[row, 7].Value = index2[3]; _Progress.Cells[row, 8].Value = index2[4]; _Progress.Cells[row, 9].Value = index2[5];
_Tracking.Cells[row, 3].Value = indexs2[0]; _Tracking.Cells[row, 4].Value = indexs2[1]; _Tracking.Cells[row, 5].Value = indexs2[2];
_Tracking.Cells[row, 7].Value = indexs2[3]; _Tracking.Cells[row, 8].Value = indexs2[4]; _Tracking.Cells[row, 9].Value = indexs2[5];
#endregion
#region index3
//Điều trị lại trong kỳ báo cáo
int[] index3 = { 0, 0, 0, 0, 0, 4 };
string[] indexs3 = { "", "", "", "", "", "" };
var index3Preresult = Exams.Where(m => m.ExamDate >= BeginDate && m.ExamDate <= EndDate && m.ReTreatment == 1).ToList();
var index3Result = index3Preresult.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, ExamDate = e.ExamDate, DateofArv = p.DateofArv }).Where(m => m.DateofArv != null && m.ExamDate > m.DateofArv).ToList();
//Nam < 1 tuổi
index3[0] = index3Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",", index3Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index3[1] = index3Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs3[1] = string.Join(",", index3Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index3[2] = index3Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs3[2] = string.Join(",", index3Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index3[3] = index3Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index3[4] = index3Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs3[4] = string.Join(",", index3Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index3[5] = index3Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs3[5] = string.Join(",", index3Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 34;
_Progress.Cells[row, 3].Value = index3[0]; _Progress.Cells[row, 4].Value = index3[1]; _Progress.Cells[row, 5].Value = index3[2];
_Progress.Cells[row, 7].Value = index3[3]; _Progress.Cells[row, 8].Value = index3[4]; _Progress.Cells[row, 9].Value = index3[5];
_Tracking.Cells[row, 3].Value = indexs3[0]; _Tracking.Cells[row, 4].Value = indexs3[1]; _Tracking.Cells[row, 5].Value = indexs3[2];
_Tracking.Cells[row, 7].Value = indexs3[3]; _Tracking.Cells[row, 8].Value = indexs3[4]; _Tracking.Cells[row, 9].Value = indexs3[5];
#endregion
#region index4
//Chuyển đến trong kỳ báo cáo
int[] index4 = { 0, 0, 0, 0, 0, 0 };
string[] indexs4 = { "", "", "", "", "", "" };
var Returns = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate && p.ReTreatment == 2).Join(Patients, p => p.PatientId, q => q.PatientId, (p, q) => new { p.PatientId, p.ExamDate, q.DateofArv, q.Sex, q.BirthYear }).Where(p => p.DateofArv!= null && p.DateofArv < p.ExamDate).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
var index4Result = Patients.Where(p=>p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.HaveArvBefore == 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
index4Result.AddRange(Returns);
//Nam < 1 tuổi
index4[0] = index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs4[0] = string.Join(",", index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index4[1] = index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs4[1] = string.Join(",", index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index4[2] = index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs4[2] = string.Join(",", index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index4[3] = index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs4[3] = string.Join(",", index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index4[4] = index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs4[4] = string.Join(",", index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index4[5] = index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs4[5] = string.Join(",", index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 35;
_Progress.Cells[row, 3].Value = index4[0]; _Progress.Cells[row, 4].Value = index4[1]; _Progress.Cells[row, 5].Value = index4[2];
_Progress.Cells[row, 7].Value = index4[3]; _Progress.Cells[row, 8].Value = index4[4]; _Progress.Cells[row, 9].Value = index4[5];
_Tracking.Cells[row, 3].Value = indexs4[0]; _Tracking.Cells[row, 4].Value = indexs4[1]; _Tracking.Cells[row, 5].Value = indexs4[2];
_Tracking.Cells[row, 7].Value = indexs4[3]; _Tracking.Cells[row, 8].Value = indexs4[4]; _Tracking.Cells[row, 9].Value = indexs4[5];
#endregion
#region index5
//Chuyển đi trong kỳ báo cáo
int[] index5 = { 0, 0, 0, 0, 0, 0 };
string[] indexs5 = { "", "", "", "", "", "" };
var referrals = TreatmentInfo.Where(p => p.TreatmentEdate != null && p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.ReasonId == "09" && p.TreatmentId == "01").ToList();
var index5Result = referrals.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = e.TreatmentEdate.Value.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index5[0] = index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs5[0] = string.Join(",", index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index5[1] = index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs5[1] = string.Join(",", index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index5[2] = index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs5[2] = string.Join(",", index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index5[3] = index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs5[3] = string.Join(",", index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index5[4] = index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs5[4] = string.Join(",", index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index5[5] = index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs5[5] = string.Join(",", index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 36;
_Progress.Cells[row, 3].Value = index5[0]; _Progress.Cells[row, 4].Value = index5[1]; _Progress.Cells[row, 5].Value = index5[2];
_Progress.Cells[row, 7].Value = index5[3]; _Progress.Cells[row, 8].Value = index5[4]; _Progress.Cells[row, 9].Value = index5[5];
_Tracking.Cells[row, 3].Value = indexs5[0]; _Tracking.Cells[row, 4].Value = indexs5[1]; _Tracking.Cells[row, 5].Value = indexs5[2];
_Tracking.Cells[row, 7].Value = indexs5[3]; _Tracking.Cells[row, 8].Value = indexs5[4]; _Tracking.Cells[row, 9].Value = indexs5[5];
#endregion
#region index6
//Tử vong trong kỳ báo cáo
int[] index6 = { 0, 0, 0, 0, 0, 0 };
string[] indexs6 = { "", "", "", "", "", "" };
var deaths = TreatmentInfo.Where(p => p.TreatmentEdate != null && p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.ReasonId == "11" && p.TreatmentId == "01").ToList();
var index6Result = deaths.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = e.TreatmentEdate.Value.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index6[0] = index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs6[0] = string.Join(",", index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index6[1] = index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs6[1] = string.Join(",", index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index6[2] = index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs6[2] = string.Join(",", index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index6[3] = index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs6[3] = string.Join(",", index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index6[4] = index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs6[4] = string.Join(",", index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index6[5] = index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs6[5] = string.Join(",", index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 37;
_Progress.Cells[row, 3].Value = index6[0]; _Progress.Cells[row, 4].Value = index6[1]; _Progress.Cells[row, 5].Value = index6[2];
_Progress.Cells[row, 7].Value = index6[3]; _Progress.Cells[row, 8].Value = index6[4]; _Progress.Cells[row, 9].Value = index6[5];
_Tracking.Cells[row, 3].Value = indexs6[0]; _Tracking.Cells[row, 4].Value = indexs6[1]; _Tracking.Cells[row, 5].Value = indexs6[2];
_Tracking.Cells[row, 7].Value = indexs6[3]; _Tracking.Cells[row, 8].Value = indexs6[4]; _Tracking.Cells[row, 9].Value = indexs6[5];
#endregion
#region index7
//Bỏ trị trong kỳ báo cáo
int[] index7 = { 0, 0, 0, 0, 0, 0 };
string[] indexs7 = { "", "", "", "", "", "" };
var lossfollows = TreatmentInfo.Where(p => p.TreatmentEdate != null && p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.ReasonId == "10" && p.TreatmentId == "01").ToList();
var index7Result = lossfollows.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = e.TreatmentEdate.Value.Year - p.BirthYear}).ToList();
//Nam < 1 tuổi
index7[0] = index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs7[0] = string.Join(",", index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index7[1] = index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs7[1] = string.Join(",", index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index7[2] = index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs7[2] = string.Join(",", index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index7[3] = index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs7[3] = string.Join(",", index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index7[4] = index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs7[4] = string.Join(",", index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index7[5] = index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs7[5] = string.Join(",", index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 38;
_Progress.Cells[row, 3].Value = index7[0]; _Progress.Cells[row, 4].Value = index7[1]; _Progress.Cells[row, 5].Value = index7[2];
_Progress.Cells[row, 7].Value = index7[3]; _Progress.Cells[row, 8].Value = index7[4]; _Progress.Cells[row, 9].Value = index7[5];
_Tracking.Cells[row, 3].Value = indexs7[0]; _Tracking.Cells[row, 4].Value = indexs7[1]; _Tracking.Cells[row, 5].Value = indexs7[2];
_Tracking.Cells[row, 7].Value = indexs7[3]; _Tracking.Cells[row, 8].Value = indexs7[4]; _Tracking.Cells[row, 9].Value = indexs7[5];
#endregion
#region index8
//Không khám trong kỳ báo cáo - lưu ý đến ngày hẹn tái khám
int[] index8 = { 0, 0, 0, 0, 0, 0 };
string[] indexs8 = { "", "", "", "", "", "" };
var ReExams = Exams.Where(p => p.ReExamDate >= BeginDate && p.ReExamDate <= EndDate && (p.EndExamDate==null || p.EndExamDate > p.ReExamDate)).GroupBy(m => m.PatientId).Select(g => new { PatientId = g.Key, c1 = g.Count() }).ToList();
var exams = Exams.Where(p => p.ExamDate.Value.AddDays(p.DayDiff<0?Math.Abs(p.DayDiff.Value):0) >= BeginDate && p.ExamDate.Value.AddDays(p.DayDiff<0?Math.Abs(p.DayDiff.Value):0) <= EndDate).GroupBy(m => m.PatientId).Select(g => new { PatientId = g.Key, c2 = g.Count() }).ToList();
//var exams = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate).GroupBy(m => m.PatientId).Select(g => new { PatientId = g.Key, c2 = g.Count() }).ToList();
var skips1 = (from p in ReExams join q in exams on p.PatientId equals q.PatientId into g from q in g.DefaultIfEmpty() select new { PatientId = p.PatientId, p.c1, c2 = (q == null) ? 0 : q.c2 }).ToList().Where(m => m.c1 > m.c2).Select(m => new { PatientId =m.PatientId,c1= m.c1, c2=m.c2 }).ToList();
//PatientMan.Forms.frmTest frm = new PatientMan.Forms.frmTest();
//frm.grdTest.DataSource = skips1;
//frm.Show();
List<string> skips = skips1.Select(m => m.PatientId).ToList();
var index8Result = Patients.Where(p=>p.DateofArv != null && p.DateofArv < BeginDate).Where(p => skips.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index8[0] = index8Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs8[0] = string.Join(",", index8Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index8[1] = index8Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs8[1] = string.Join(",", index8Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index8[2] = index8Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs8[2] = string.Join(",", index8Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index8[3] = index8Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs8[3] = string.Join(",", index8Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index8[4] = index8Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs8[4] = string.Join(",", index8Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index8[5] = index8Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs8[5] = string.Join(",", index8Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 39;
//_Progress.Cells[row, 3].Value = index8[0]; _Progress.Cells[row, 4].Value = index8[1]; _Progress.Cells[row, 5].Value = index8[2];
//_Progress.Cells[row, 7].Value = index8[3]; _Progress.Cells[row, 8].Value = index8[4]; _Progress.Cells[row, 9].Value = index8[5];
//_Tracking.Cells[row, 3].Value = indexs8[0]; _Tracking.Cells[row, 4].Value = indexs8[1]; _Tracking.Cells[row, 5].Value = indexs8[2];
//_Tracking.Cells[row, 7].Value = indexs8[3]; _Tracking.Cells[row, 8].Value = indexs8[4]; _Tracking.Cells[row, 9].Value = indexs8[5];
#endregion
}
private void V3C()
{
LinqMetaData meta = new LinqMetaData(adapter);
int row = 0;
DateTime thisBeginDate = this.BeginDate;
DateTime thisEndDate = this.EndDate;
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblTreatmentInfoEntity> TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(TreatmentInfo, null);
var Arvs = TreatmentInfo.Where(p => p.TreatmentSdate < EndDate && p.TreatmentSdate >= BeginDate.AddMonths(-12) && p.TreatmentId == "01").ToList();
var SelectedPatients = Arvs.Join(Patients.Where(p=>p.DateofArv!=null && p.DateofArv.Value.AddYears(1) > p.DateofRegistration && p.DateofArv>=BeginDate.AddMonths(-12) && p.DateofArv<=EndDate.AddMonths(-12)), a => a.PatientId, p => p.PatientId, (a, p) => new { p.PatientId, p.Sex, EndPointArv = p.DateofArv.Value.AddMonths(12), Age = p.DateofArv.Value.AddMonths(12).Year - p.BirthYear, a.TreatmentSdate, a.TreatmentEdate, a.ReasonId }).Where(p => p.TreatmentSdate <= p.EndPointArv).ToList();
#region "Index1"
int[] index1 = new int[2];
string[] index1s = new string[2];
var index1preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "11" ? true : false }).Where(p => !p.moveout && !p.dead && !p.lost).ToList();
//Nam
index1[0] = index1preresult.Where(m => m.Sex == 1).Count();
index1s[0] = string.Join(",", index1preresult.Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ
index1[1] = index1preresult.Where(m => m.Sex == 2).Count();
index1s[1] = string.Join(",", index1preresult.Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 52;
_Progress.Cells[row, 3].Value = index1[0]; _Progress.Cells[row, 7].Value = index1[1];
_Tracking.Cells[row, 3].Value = index1s[0]; _Tracking.Cells[row, 7].Value = index1s[1];
#endregion
#region "Index2"
int[] index2 = new int[2];
string[] index2s = new string[2];
var index2preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "11" ? true : false }).Where(p => !p.moveout).ToList();
//Nam
index2[0] = index2preresult.Where(m => m.Sex == 1).Count();
index2s[0] = string.Join(",", index2preresult.Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ
index2[1] = index2preresult.Where(m => m.Sex == 2).Count();
index2s[1] = string.Join(",", index2preresult.Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 53;
_Progress.Cells[row, 3].Value = index2[0]; _Progress.Cells[row, 7].Value = index2[1];
_Tracking.Cells[row, 3].Value = index2s[0]; _Tracking.Cells[row, 7].Value = index2s[1];
#endregion
}
}
}