public SendAutoResult SendAuto(int tps_id, List <int> ListCompleteEvent, string username, int?current_site) { try { using (InhCheckupDataContext cdc = new InhCheckupDataContext()) { cdc.Connection.Open(); DbTransaction trans = cdc.Connection.BeginTransaction(); cdc.Transaction = trans; try { trn_patient_queue PatientQueue = cdc.trn_patient_queues .Where(x => x.tps_id == tps_id) .FirstOrDefault(); trn_patient_regi PatientRegis = PatientQueue.trn_patient_regi; int tpr_id = PatientRegis.tpr_id; string queue_no = PatientRegis.tpr_queue_no; int mrm_id = (int)PatientQueue.mrm_id; int? mrd_id = PatientQueue.mrd_id; int? mhs_id = PatientRegis.tpr_site_use == null ? PatientRegis.mhs_id : PatientRegis.tpr_site_use; int _current_site = current_site != null ? (int)current_site : PatientQueue.mst_room_hdr.mhs_id; List <int> room_event = new List <int>(); mst_room_hdr roomHdr = cdc.mst_room_hdrs.Where(x => x.mrm_id == mrm_id).FirstOrDefault(); if (PatientQueue.mrd_id != null) { mst_room_dtl roomDtl = roomHdr.mst_room_dtls.Where(x => x.mrd_id == PatientQueue.mrd_id).FirstOrDefault(); if (roomDtl != null) { if (roomDtl.mst_room_hdr.mrm_code == "EM") { if (roomDtl.mrd_type == 'D') { mst_event mstEvent = cdc.mst_events.Where(x => x.mvt_code == "EM" && x.mvt_status == 'A').FirstOrDefault(); room_event.Add(mstEvent.mvt_id); } else { mst_event mstEvent = cdc.mst_events.Where(x => x.mvt_code == "EN" && x.mvt_status == 'A').FirstOrDefault(); room_event.Add(mstEvent.mvt_id); } } else { room_event = cdc.mst_room_events .Where(x => x.mrm_id == mrm_id) .Select(x => x.mvt_id).ToList(); } } } else { room_event = cdc.mst_room_events .Where(x => x.mrm_id == mrm_id) .Select(x => x.mvt_id).ToList(); } DateTime dateNow = globalCls.GetServerDateTime(); int? mze_id = null; if (roomHdr.mrm_code != "CB") { mze_id = roomHdr.mze_id; } int?next_mrm_id = null; int?next_mvt_id = null; List <sp_get_patient_roomResult> patientRoom = cdc.sp_get_patient_room(tpr_id, mhs_id).ToList(); List <sp_get_patient_roomResult> patientEventComplete = patientRoom.Where(x => ListCompleteEvent.Contains(x.mvt_id)).ToList(); foreach (sp_get_patient_roomResult pr in patientEventComplete) { patientRoom.Remove(pr); } List <inx_sp_get_patient_roomResult> inxPatientRoom = new List <inx_sp_get_patient_roomResult>(); ResultSendQueue result = filterPatientRoom(patientRoom, ref inxPatientRoom, room_event, _current_site, mze_id, 0); if (result == ResultSendQueue.Error) { return(new SendAutoResult { SendResult = SendAutoResult.Result.Error, AlertMsg = "Please Try Again." }); } else if (result == ResultSendQueue.OldRoom) { return(new SendAutoResult { SendResult = SendAutoResult.Result.Error, AlertMsg = "Please Try Again." }); } else { SendAutoResult _SendAutoResult = new SendAutoResult(); new TransactionPlanCls().EndPlan(ref PatientRegis, ListCompleteEvent); new TransactionQueueCls().EndQueue(ref PatientRegis, tps_id, dateNow, username); if (result == ResultSendQueue.SendCheckC) { new TransactionQueueCls().SendToCheckC(ref PatientRegis, dateNow, username); //new Class.GetLabResultCls().Insert_trn_patient_assBackground(tpr_id); new Class.InsertLabCls().RetrieveLabToEmrCheckup(tpr_id, username); new Class.GetVitalSignCLs().GetVistalSignBackground(tpr_id); var roomChkC = cdc.mst_room_hdrs .Where(x => x.mrm_code == "CC" && x.mhs_id == PatientRegis.mhs_id) .Select(x => new { x.mrm_ename, x.mst_hpc_site.mhs_ename, x.mst_zone.mze_ename }).FirstOrDefault(); if (roomChkC == null) { _SendAutoResult.AlertMsg = "Send Queue no. " + queue_no + " To Check Point C."; } else { _SendAutoResult.AlertMsg = string.Format(TemplateMsg, roomChkC.mrm_ename, roomChkC.mhs_ename, roomChkC.mze_ename, queue_no); } } else if (result == ResultSendQueue.SendCheckB) { new TransactionQueueCls().SendToCheckB(ref PatientRegis, dateNow, username); var chkB = PatientRegis.trn_patient_queues .Where(x => x.tps_status == "NS" && x.tps_ns_status == "QL") .Select(x => new { x.mrm_id, }).FirstOrDefault(); var room = cdc.mst_room_hdrs.Where(x => x.mrm_id == mrm_id).FirstOrDefault(); _SendAutoResult.AlertMsg = string.Format(TemplateMsg, room.mrm_ename, room.mst_hpc_site.mhs_ename, room.mst_zone.mze_ename, queue_no); } else { bool patient_eye_dropper = PatientRegis.trn_eye_exam_hdrs.Count() != 0 ? (PatientRegis.trn_eye_exam_hdrs.FirstOrDefault().teh_eyedropper == null ? false : (bool)PatientRegis.trn_eye_exam_hdrs.FirstOrDefault().teh_eyedropper) : false; bool checkEyeDoc = CheckEyeDoctor(tpr_id, mrd_id, patient_eye_dropper, inxPatientRoom, ref next_mrm_id, ref next_mvt_id); if (checkEyeDoc && next_mrm_id != null && next_mvt_id != null) { new TransactionQueueCls().SendToRoom(ref PatientRegis, (int)next_mrm_id, (int)next_mvt_id, dateNow, username); var nextRoom = inxPatientRoom.Where(x => x.mrm_id == next_mrm_id && x.mvt_id == next_mvt_id) .Select(x => new { x.mrm_ename, x.mhs_ename, x.mze_ename }).FirstOrDefault(); _SendAutoResult.AlertMsg = string.Format(TemplateMsg, nextRoom.mrm_ename, nextRoom.mhs_ename, nextRoom.mze_ename, queue_no); } else { string doctor_code = (PatientRegis.tpr_req_doc_code == null || PatientRegis.tpr_req_doc_code == "") ? PatientRegis.tpr_pe_doc_code : PatientRegis.tpr_req_doc_code; bool checkPE = CheckPE(tpr_id, doctor_code, inxPatientRoom, dateNow, ref next_mrm_id, ref next_mvt_id); if (checkPE) { new TransactionQueueCls().SendToRoom(ref PatientRegis, (int)next_mrm_id, (int)next_mvt_id, dateNow, username); var nextRoom = inxPatientRoom.Where(x => x.mrm_id == next_mrm_id && x.mvt_id == next_mvt_id) .Select(x => new { x.mrm_ename, x.mhs_ename, x.mze_ename }).FirstOrDefault(); _SendAutoResult.AlertMsg = string.Format(TemplateMsg, nextRoom.mrm_ename, nextRoom.mhs_ename, nextRoom.mze_ename, queue_no); } else { inx_sp_get_patient_roomResult firstPatientRoom = inxPatientRoom.OrderBy(x => x.priority).FirstOrDefault(); next_mrm_id = firstPatientRoom.mrm_id; next_mvt_id = firstPatientRoom.mvt_id; new TransactionQueueCls().SendToRoom(ref PatientRegis, (int)next_mrm_id, (int)next_mvt_id, dateNow, username); _SendAutoResult.AlertMsg = string.Format(TemplateMsg, firstPatientRoom.mrm_ename, firstPatientRoom.mhs_ename, firstPatientRoom.mze_ename, queue_no); } } } cdc.SubmitChanges(); if (inxPatientRoom.Count() > 0) { trn_patient_queue next_queue = PatientRegis.trn_patient_queues .Where(x => (x.tps_status == "NS" && x.tps_ns_status == "QL") || (x.tps_status == "NS" && x.tps_ns_status == "WP")).FirstOrDefault(); if (next_queue != null) { List <log_send_auto> log = GetLogSendAuto(inxPatientRoom, next_queue.tps_id, tps_id, queue_no); cdc.log_send_autos.InsertAllOnSubmit(log); } } cdc.SubmitChanges(); cdc.Transaction.Commit(); return(_SendAutoResult); } } catch (Exception ex) { globalCls.MessageError("get_lab_result.Class.SendAutoCls", "SendAuto(int tpr_id)", ex.Message); return(new SendAutoResult { SendResult = SendAutoResult.Result.Error, AlertMsg = "Please Try Again." }); } } } catch (Exception ex) { globalCls.MessageError("get_lab_result.Class.SendAutoCls", "SendAuto(int tpr_id)", ex.Message); return(new SendAutoResult { SendResult = SendAutoResult.Result.Error, AlertMsg = "Please Try Again." }); } }