Beispiel #1
0
        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."
                });
            }
        }