using System; using System.Drawing; using System.ComponentModel; using System.Windows.Forms; using System.Collections.Generic; using CLIP.eForm.Consent.UI.HospitalSvcRef; namespace CLIP.eForm.Consent.UI { /// /// 환자목록 > 입원 탭 클래스 /// /// ///

[설계자]

///

클립소프트 연구소 홍지철 (jchong@clipsoft.co.kr)

///

[원본 작성자]

///

클립소프트 기술부 이인희

///

[수정 작성자]

///

///

----------------------------------------------------------------------------------------

///

[HISTORY]

///

2016-07-11 : 최초작성

///

----------------------------------------------------------------------------------------

///
public partial class PatientSelectTabInPatient : UserControl { private IConsentMain consentMain = null; private ConsentCommandCtrl commandControl = null; private HospitalSvcRef.HospitalSvcSoapClient hospitalWebService = null; public PatientSelectTabInPatient() { InitializeComponent(); } private void PatientSelectTabInPatient_Load(object sender, EventArgs e) { if(this.DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime) { return; } consentMain = ConsentMainControl.GetConsentMainInterface(this); if(commandControl == null) commandControl = consentMain.ConsentCommandCtrl as ConsentCommandCtrl; hospitalWebService = WebMethodCommon.GetHospitalWebService(consentMain.PluginExecuteInfo["hospitalSvcUrl"]); if (ConsentMainControl.SETTING_DATA["MY_PATIENT"].Equals("Y")) { chkMyPatient.Visible = true; } // 의사로 Agent 를 실행할 경우 입원 환자 탭에서 내환자 체크 박스 숨기기 if(commandControl.CurrentEndUser != null) { if(!string.IsNullOrEmpty(commandControl.CurrentEndUser.JobKindCd)) { if(!commandControl.CurrentEndUser.JobKindCd.Substring(0, 2).Equals("11")) { chkMyPatient.Visible = false; } } } this.dateTimePickerClnDate.Value = DateTime.Now; InitComboBind(); foreach(DeptListVO ward in (DeptListVO[])comboWard.DataSource) { if(ward.deptCd.Equals(commandControl.CurrentEndUser.DeptCode)) { comboWard.SelectedValue = commandControl.CurrentEndUser.DeptCode; break; } } InitDataGrid(); } private void InitComboBind() { // 병동 정보 가져오기 및 설정 DeptListVO[] wardList = this.hospitalWebService.GetWardList(this.consentMain.ConsentExecuteInfo["dutinstcd"]); if(wardList != null) { this.comboWard.DisplayMember = "deptnm"; this.comboWard.ValueMember = "deptcd"; this.comboWard.DataSource = wardList; } // 진료과 정보 가져오기 및 설정 DeptListVO[] deptList = this.hospitalWebService.GetDeptList(GetSelectGubunValue(), this.consentMain.ConsentExecuteInfo["dutinstcd"]); if(deptList != null) { this.comboDept.DisplayMember = "deptnm"; this.comboDept.ValueMember = "deptcd"; this.comboDept.DataSource = deptList; } } private void InitDataGrid() { this.dataGridViewPatientSelectResult.AutoGenerateColumns = false; this.dataGridViewPatientSelectResult.AllowUserToAddRows = false; //this.dataGridViewPatientSelectResult.CellPainting += new DataGridViewCellPaintingEventHandler(this.dataGridViewPatientSelectResult_CellPainting); this.dataGridViewPatientSelectResult.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(this.dataGridViewPatientSelectResult_ColumnHeaderMouseClick); this.dataGridViewPatientSelectResult.RowPostPaint += new DataGridViewRowPostPaintEventHandler(this.dataGridViewPatientSelectResult_RowPostPaint); //CommonUtil.AddNewCheckBoxColumnToDataGridView(this.dataGridViewPatientSelectResult, "□", "colCheck", true, 30, DataGridViewContentAlignment.MiddleCenter); CommonUtil.AddNewColumnToDataGridView(this.dataGridViewPatientSelectResult, "입원일자", "indd", true, 70); CommonUtil.AddNewColumnToDataGridView(this.dataGridViewPatientSelectResult, "병실", "roomcd", true, 40); CommonUtil.AddNewColumnToDataGridView(this.dataGridViewPatientSelectResult, "성명", "hngnm", true, 80); CommonUtil.AddNewColumnToDataGridView(this.dataGridViewPatientSelectResult, "등록번호", "pid", true, 60); CommonUtil.AddNewColumnToDataGridView(this.dataGridViewPatientSelectResult, "과", "deptnm", true, 120); CommonUtil.AddNewColumnToDataGridView(this.dataGridViewPatientSelectResult, "주치의", "doctornm", true, 80); CommonUtil.AddNewColumnToDataGridView(this.dataGridViewPatientSelectResult, "구분", "dschnoti", true, 80); //dataGridViewPatientSelectResult.Columns["colCheck"].Visible = false; } #region 환자 조회 /// /// 선택된 구분 종류 반환 /// /// private string GetSelectGubunValue() { string strGubun = ""; if(this.radioGubunAll.Checked) { strGubun = "A"; } else { RadioButton rdoTemp = null; if(this.radioGubunFuture.Checked) rdoTemp = radioGubunFuture; else if(this.radioGubunIng.Checked) rdoTemp = radioGubunIng; else if(this.radioGubunOut.Checked) rdoTemp = radioGubunOut; strGubun = rdoTemp.Tag.ToString(); } return strGubun; } private void BindDataGridRows() { if(this.consentMain == null) consentMain = ConsentMainControl.GetConsentMainInterface(this); if(this.hospitalWebService == null) this.hospitalWebService = WebMethodCommon.GetHospitalWebService(consentMain.PluginExecuteInfo["hospitalSvcUrl"]); string srchdd = this.dateTimePickerClnDate.Value.ToShortDateString().Replace("-", ""); string orddeptcd = (this.comboDept.Items.Count > 0) ? this.comboDept.SelectedValue.ToString().Trim() : ""; string doctorid = (this.comboDoctor.Items.Count > 0) ? this.comboDoctor.SelectedValue.ToString().Trim() : ""; string pid = this.textBoxSearchText.Text.Trim(); string wardcd = (this.comboWard.Items.Count > 0) ? this.comboWard.SelectedValue.ToString().Trim() : ""; string patstat = GetSelectGubunValue(); DocListVO selectedDoctor = comboDoctor.SelectedItem as DocListVO; Cursor currentCursor = this.Cursor; this.Cursor = Cursors.WaitCursor; // 입원 환자 목록 조회 PatListVO[] resultData = hospitalWebService.GetPatientList(srchdd , orddeptcd , doctorid , pid , patstat , this.consentMain.ConsentExecuteInfo["dutinstcd"] , wardcd , this.consentMain.ConsentExecuteInfo["loginUserNo"] , chkMyPatient.Checked ? "Y" : string.Empty , string.Empty , selectedDoctor.drKind ?? "" , "I" // 입원 , "N" // 검색탭 여부(Y: 검색탭, N: 그외) ); this.Cursor = currentCursor; if(resultData == null) { return; } this.dataGridViewPatientSelectResult.DataSource = new SortableBindingList(resultData); } /// /// 진료과 콤보 박스 아이템 변경 이벤트 /// /// The source of the event. /// The instance containing the event data. private void comboDept_SelectedIndexChanged(object sender, EventArgs e) { // 주치의 목록 가져오기 DocListVO[] doctorList = this.hospitalWebService.GetDoctorList(DateTime.Now.ToShortDateString().Replace("-", ""), (this.comboDept.Items.Count > 0) ? this.comboDept.SelectedValue.ToString() : "", this.consentMain.ConsentExecuteInfo["dutinstcd"]); if(doctorList != null) { this.comboDoctor.DisplayMember = "doctornm"; this.comboDoctor.ValueMember = "doctorid"; this.comboDoctor.DataSource = doctorList; } } /// /// 조회 버튼 클릭 이벤트 /// /// The source of the event. /// The instance containing the event data. private void buttonPatientSelect_Click(object sender, EventArgs e) { var selectedWardIndex = this.comboWard.SelectedIndex; var selectedDeptIndex = this.comboDept.SelectedIndex; var selectedDoctorIndex = this.comboDoctor.SelectedIndex; var patientNameValue = this.textBoxSearchText.Text; if(selectedWardIndex == 0 && selectedDeptIndex == 0 && selectedDoctorIndex == 0 && String.Empty.Equals(patientNameValue)) { MessageBox.Show("병동, 진료과, 등록번호 중 1가지 이상 입력해주세요."); return; } buttonPatientSelect.Enabled = false; Application.DoEvents(); try { BindDataGridRows(); } catch(Exception ex) { throw ex; } finally { buttonPatientSelect.Enabled = true; } } #endregion #region 환자찾기 버튼 클릭 이벤트 /// /// 환자 찾기 버튼 클릭 이벤트, 환자 조회 팝업창 생성 /// /// The source of the event. /// The instance containing the event data. private void buttonSearchPop_Click(object sender, EventArgs e) { string strTemp = this.textBoxSearchText.Text.Trim(); int iResult; if(int.TryParse(strTemp, out iResult) && strTemp.Length > 6) { this.buttonPatientSelect.PerformClick(); } else { PatientSearchPopup popup = new PatientSearchPopup(textBoxSearchText.Text , consentMain.ConsentExecuteInfo["dutinstcd"] , consentMain.ConsentExecuteInfo["sysInstNm"]); DialogResult result = popup.ShowDialog(); if(result == DialogResult.OK) { this.textBoxSearchText.Text = popup.PatientID; this.buttonPatientSelect.PerformClick(); } popup.Close(); } } /// /// 등록번호 입력 컨트롤 키보드 입력 이벤트 /// /// The source of the event. /// The instance containing the event data. private void textBoxSearchText_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { this.buttonSearchPop.PerformClick(); } } #endregion #region 그리드 이벤트 /// /// 그리드 그리기 이벤트 /// /// The source of the event. /// The instance containing the event data. private void dataGridViewPatientSelectResult_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { //if(e.ColumnIndex == 0 && e.RowIndex == -1) { // Image InfoIcon; // // 체크박스 상태에 따른 아이콘 표시 // if(dataGridViewPatientSelectResult.Columns[0].HeaderText.Equals("□")) { // InfoIcon = Image.FromFile(@"../../Resources/uncheck.png"); // } // else { // InfoIcon = Image.FromFile(@"../../Resources/check.png"); // } // e.Paint(e.CellBounds, DataGridViewPaintParts.All); // e.Graphics.DrawImage(InfoIcon, e.CellBounds); // e.Handled = true; //} } /// /// 컬럼 헤드 클릭 이벤트 /// 선택 여부 체크박스 값 설정 /// /// The source of the event. /// The instance containing the event data. private void dataGridViewPatientSelectResult_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { //if(e.ColumnIndex == 0 && e.RowIndex == -1) { // bool chkStatus = false; // if(dataGridViewPatientSelectResult.Columns[0].HeaderText.Equals("□")) { // dataGridViewPatientSelectResult.Columns[0].HeaderText = "☑"; // chkStatus = true; // } // else { // dataGridViewPatientSelectResult.Columns[0].HeaderText = "□"; // } // foreach(DataGridViewRow r in dataGridViewPatientSelectResult.Rows) { // r.Cells["colCheck"].Value = chkStatus; // } // dataGridViewPatientSelectResult.RefreshEdit(); //} } /// /// 그리드 그리기 이후 이벤트, 행 번호 추가 /// /// The source of the event. /// The instance containing the event data. private void dataGridViewPatientSelectResult_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { if(e.RowIndex >= 0) { string NumberingText = (e.RowIndex + 1).ToString(); // 글자 사이즈 구하기. SizeF stringSize = e.Graphics.MeasureString(NumberingText, Font); // 글자에 맞춰 좌표계산. PointF StringPoint = new PointF ( Convert.ToSingle(this.dataGridViewPatientSelectResult.RowHeadersWidth - 3 - stringSize.Width), Convert.ToSingle(e.RowBounds.Y) + this.dataGridViewPatientSelectResult[0, e.RowIndex].ContentBounds.Height * 0.3f ); // 문자열 그리기. e.Graphics.DrawString ( NumberingText, Font, Brushes.Black, StringPoint.X, StringPoint.Y ); } } /// /// 입원 환자 목록 그리드 셀 더블클릭 이벤트 /// /// The source of the event. /// The instance containing the event data. private void dataGridViewPatientSelectResult_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if(e.RowIndex > -1) { PatListVO vo = this.dataGridViewPatientSelectResult.Rows[e.RowIndex].DataBoundItem as PatListVO; // 현재 선택 환자를 변경한다 consentMain.PatientListCtrl.SetChangePID(vo); } } #endregion public void ClearCheckBox() { //bool chkStatus = false; //dataGridViewPatientSelectResult.Columns[0].HeaderText = "□"; //foreach(DataGridViewRow r in dataGridViewPatientSelectResult.Rows) { // r.Cells["colCheck"].Value = chkStatus; //} //dataGridViewPatientSelectResult.RefreshEdit(); } public List GetCheckPatList() { List voList = new List(); foreach(DataGridViewRow r in dataGridViewPatientSelectResult.Rows) { if(Convert.ToBoolean(r.Cells["colCheck"].Value)) { voList.Add(r.DataBoundItem as PatListVO); } } return voList; } private void comboWard_DrawItem(object sender, DrawItemEventArgs e) { ComboBox box = sender as ComboBox; if(box is null) return; e.DrawBackground(); if(e.Index >= 0) { Graphics g = e.Graphics; using(Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? new SolidBrush(SystemColors.Highlight) : new SolidBrush(e.BackColor)) { using(Brush textBrush = new SolidBrush(e.ForeColor)) { g.FillRectangle(brush, e.Bounds); g.DrawString(((DeptListVO[])box.DataSource)[e.Index].deptNm, e.Font, textBrush, (float)e.Bounds.X, (float)(e.Bounds.Y) + 2.34F); } } } e.DrawFocusRectangle(); } private void comboWard_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = 20; } private void comboDept_DrawItem(object sender, DrawItemEventArgs e) { ComboBox box = sender as ComboBox; if(box is null) return; e.DrawBackground(); if(e.Index >= 0) { Graphics g = e.Graphics; using(Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? new SolidBrush(SystemColors.Highlight) : new SolidBrush(e.BackColor)) { using(Brush textBrush = new SolidBrush(e.ForeColor)) { g.FillRectangle(brush, e.Bounds); g.DrawString(((DeptListVO[])box.DataSource)[e.Index].deptNm, e.Font, textBrush, (float)e.Bounds.X, (float)(e.Bounds.Y) + 2.34F); } } } e.DrawFocusRectangle(); } private void comboDept_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = 20; } private void comboDoctor_DrawItem(object sender, DrawItemEventArgs e) { ComboBox box = sender as ComboBox; if(box is null) return; e.DrawBackground(); if(e.Index >= 0) { Graphics g = e.Graphics; using(Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? new SolidBrush(SystemColors.Highlight) : new SolidBrush(e.BackColor)) { using(Brush textBrush = new SolidBrush(e.ForeColor)) { g.FillRectangle(brush, e.Bounds); g.DrawString(((DocListVO[])box.DataSource)[e.Index].doctorNm, e.Font, textBrush, (float)e.Bounds.X, (float)(e.Bounds.Y) + 2.34F); } } } e.DrawFocusRectangle(); } private void comboDoctor_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = 20; } } }