Пример #1
0
        public OrderTemplateTreeViewModel(string tpltypeCode, string code_entp)
        {
            this.qryService = XapServiceMgr.find <ICiOrdQryService>();
            Emp2Dep2GroupDTO edg = new Emp2Dep2GroupDTO();

            edg.Id_dep    = UserManager.getInstance().CurrentDept.Id_dep;
            edg.Name_dep  = UserManager.getInstance().CurrentDept.Name;
            edg.Id_emp    = UserManager.getInstance().CurrentPsnInfo.Id_psndoc;
            edg.Name_emp  = UserManager.getInstance().CurrentPsnInfo.Name;
            edg.Id_org    = UserManager.getInstance().CurrentOrg.Id_org;
            edg.Name_org  = UserManager.getInstance().CurrentOrg.Name;
            edg.Code_entp = code_entp;
            UdidocDO udidocDo = UdiDocCache.GetInstance()
                                .GetUdidoc(BdSrvDictCodeTypeConst.SD_ORTPLTP, tpltypeCode);

            if (udidocDo != null)
            {
                this.OrderTplTreeList = this.qryService.getOrderTplTreeDto(udidocDo.Id_udidoc, edg);
            }

            KeyNodeDataAdapterFactory <OrderTplTreeDto> moduleAdapter = new KeyNodeDataAdapterFactory <OrderTplTreeDto>("Id", "Parent");

            moduleAdapter.CustomCaptionFunc = (dataobj => dataobj.Nm);

            this.TreeModel        = new TreeKeyModel <OrderTplTreeDto>(moduleAdapter);
            this.TreeModel.Loader = new OTreeKeyLoader();
            this.TreeModel.AddRange(this.OrderTplTreeList);
        }
 /// <summary>
 /// 获取当前选中适用范围
 /// </summary>
 /// <param name="id">适用范围ID</param>
 public void GetCurrUdidocDO_SubOwnerType(string id)
 {
     foreach (UdidocDO u in udidocDOs_SubOwnerType)
     {
         if (u.Id_udidoc.Equals(id))
         {
             this.CurrUdidocDO_SubOwnerType = u;
         }
     }
 }
Пример #3
0
        private void DiCertificateTreeView_Load(object sender, EventArgs e)
        {
            this.viewModel = new DiCertificateTreeViewModel();
            this.currUdi = viewModel.CurrUdidocDO_DiceType;
            this.currDi = new EntDiProveDO();

            this.oTree1.TreeItemSelected += new xap.rui.control.tree.events.TreeItemEventHandler(oTree1_TreeItemSelected);

            this.OnInit();
        }
Пример #4
0
        /// <summary>
        /// 响应树列表选中
        /// </summary>
        private void onSelectRow()
        {
            if (xLabTitl != null)
            {
                //获取当前诊断证明分类
                currUdi            = DiCertificateTreeViewModel.GetDiprovetTp(dataSource.Sd_diprovetp);
                xLabTitl.ValueText = currUdi.Name;

                this.LoadData();
            }
        }
Пример #5
0
 /// <summary>
 /// 初始化诊断证明类型
 /// </summary>
 private void getUdidocDOs()
 {
     udidocDOs_DiceType = Utils.GetUdidocDOList(EnDictCodeTypeConst.SD_DICETP);
     foreach (UdidocDO udidoc in udidocDOs_DiceType)
     {
         //诊断证明
         if (udidoc.Code == EnDictCodeConst.SD_DICETP_DI)
         {
             CurrUdidocDO_DiceType = udidoc;
         }
     }
 }
 /// <summary>
 /// 初始化适用范围(全院)
 /// </summary>
 protected void getUdidocDOs()
 {
     udidocDOs_SubOwnerType = udidoc_service.findByUdidoclistCode(BdSrvDictCodeTypeConst.SD_OWTP);
     DicScopetp             = new Dictionary <string, string>();
     foreach (UdidocDO udidoc in udidocDOs_SubOwnerType)
     {
         DicScopetp.Add(udidoc.Name, udidoc.Id_udidoc);
         //适用范围:全院
         if (udidoc.Code == BdSrvDictCodeConst.SD_OWTP_HOSPITAL)
         {
             CurrUdidocDO_SubOwnerType = udidoc;
         }
     }
 }
Пример #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected virtual void XapFormControl_FormCreated(object sender, EventArgs e)
        {
            // 初始化医嘱组件
            string path = Application.StartupPath + "\\modules\\iihci\\ui\\commoncontent\\OrderContent.xml";

            doctorOrderConfig = this.Deserialize(path);

            gv = this.xapFormControl1.GetGridView("order");
            gv.DataTable.DataDisplay            += tabControl_DataDisplay;
            gv.DataTable.CustomerCellMouseClick += OnXapFromGrid_CellClick;
            gv.DataTable.MultiCheckChanged      += new EventHandler <MutilCheckedEventArgs>(mutilCheckedEventArgs);
            gv.DataTable.SelectedAllChanged     += new EventHandler(SelectedAllChanged);
            gv.MouseClick                  += OnXapFromGrid_MouseClick;
            gv.MouseDoubleClick            += OnXapFromGrid_MouseDoubleClick;
            gv.ReadOnly                     = true;
            gv.DataTable.CrossBackColor     = true;
            gv.DataTable.Rows.DefaultHeight = 30;

            UdidocDO[] udidocs = OrReportPictureButton.GetInstance().getMap()[EnDictCodeConst.SD_ENTP_OUTPATIENT];
            if (udidocs == null)
            {
                udidocs = new UdidocDO[0];
            }
            int columnWidth = 6 + (2 + RelativeUIParam.RELATIVECELLSIZE.Height) * udidocs.Length;

            columnWidth = columnWidth <= 90 ? 90 : columnWidth;
            gv.DataTable.Columns["customercolumn_check_result"].Width        = columnWidth;
            gv.DataTable.Columns["customercolumn_check_result"].DefalutWidth = columnWidth;

            List <ControlTab> tabs       = xapFormControl1.FormModel.Tabs;
            XTabControl       tabControl = tabs[0].tabContrl;

            tabControl.SelectedChanging     += TabControl_SelectedChanging;
            tabControl.SelectedIndexChanged += tabControl_SelectedIndexChanged;
            XTabPage xtab = tabControl.XTabPages[1];

            this.orderPresView = this.createOrderPresControl();
            xtab.PageControl   = this.orderPresView;
            foreach (XDataColumn item in gv.DataTable.Columns)
            {
                item.AlignCell = StringAlignment.Center;
            }
        }
Пример #8
0
        /// <summary>
        /// 获取树节点数据
        /// </summary>
        public void GetTreeKeyModel()
        {
            var adapter1 = new KeyNodeDataAdapterFactory <UdidocDO>("Id_udidoc", "Id_udidoc")
            {
                CustomCaptionFunc = x => x.Name
            };
            var adapter2 = new KeyNodeDataAdapterFactory <EntDiProveDO>("Id_diprove", null, "Id_diprovetp")
            {
                CustomCaptionFunc = x => x.Name_emp + string.Format("{0}-{1:D2}-{2:D2}", ((DateTime)x.Dt_diprove).Date.Year, ((DateTime)x.Dt_diprove).Date.Month, ((DateTime)x.Dt_diprove).Date.Day)
            };

            lazyLoadTreeModel = new LazyLoadTreeModel("");
            lazyLoadTreeModel.LazyLoadChildren = (oTree, bizNode) =>
            {
                if (bizNode.IsRoot)
                {
                    //根节点下加载诊断证明分类
                    foreach (var udi in udidocDOs_DiceType)
                    {
                        var data = adapter1.Wrap(udi);
                        oTree.AppendBizNode(bizNode, data);
                    }
                }
                else
                {
                    //在非根节点下加载数据节点
                    UdidocDO moduleDo = bizNode.UserObject as UdidocDO;
                    if (moduleDo != null && "1" == moduleDo.Ctrl1)
                    {
                        //在分类节点下,加载数据节点(非数据独一模式,独一模式没必要显示数据节点)
                        foreach (var item in lstEntDiProveDOs)
                        {
                            if (item.Id_diprovetp != null && moduleDo.Id_udidoc == item.Id_diprovetp)
                            {
                                var data = adapter2.Wrap(item);
                                oTree.AppendBizNode(bizNode, data);
                            }
                        }
                    }
                }
                return(true);
            };
        }
Пример #9
0
        public override bool OrdValivate(object model, BaseEmsView sender)
        {
            EmsDrugItemDO Emsdrugs = (model as EmsDrugsViewModel).GetFormDataSource() as EmsDrugItemDO;

            if (base.OrdValivate(model, sender) && Emsdrugs != null)
            {
                #region 药品重复检查
                IEnumerable <IGrouping <string, EmsOrDrug> > enuma = Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED).GroupBy(i => i.Id_mm).Where(g => g.Count() > 1);
                bool bcf = enuma.Count() >= 1;
                if (bcf)
                {
                    foreach (IGrouping <string, EmsOrDrug> group in enuma)
                    {
                        EmsOrDrug ems = group.First();
                        sender.OrdErrorList.Add("药品【" + ems.Name_mm + "】有重复!");
                    }
                }
                #endregion

                #region 空药品
                if (Emsdrugs.EmsOrDrugList.Count(p => !p.IsDELETED && string.IsNullOrEmpty(p.Id_srv)) > 0)
                {
                    sender.OrdErrorList.Add("药品有空数据!");
                }

                #endregion

                #region 剂|总量大于0
                foreach (EmsOrDrug item in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED).ToList())
                {
                    if (item.Quan_med == null || item.Quan_med.ToDouble() <= 0)
                    {
                        sender.OrdErrorList.Add(item.Name_mm + "剂量必须大于0!");
                    }
                    if (item.Quan_cur == null || item.Quan_cur.ToDouble() <= 0)
                    {
                        sender.OrdErrorList.Add(item.Name_mm + "总量必须大于0!");
                    }
                }
                #endregion
                List <string> depMps = new List <string>();
                foreach (EmsOrDrug item in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED).ToList())
                {
                    if (!depMps.Contains(item.Id_mp_dep))
                    {
                        depMps.Add(item.Id_mp_dep);
                    }
                }
                if (depMps.Count() > 1)
                {
                    sender.OrdErrorList.Add("药品的执行科室不一致,不能保存!");
                }
                #region 执行科室校验
                #endregion
                #region 在院执行为true时,在院执行次数必须大于0
                if (Emsdrugs.Fg_mp_in == true && (Emsdrugs.Times_mp_in == null || Emsdrugs.Times_mp_in <= 0))
                {
                    sender.OrdErrorList.Add("在院执行时,在院执行次数必须大于0!");
                }
                #endregion
                #region 药品不能为空
                if (Emsdrugs.EmsOrDrugList.Count(p => !p.IsDELETED) == 0)
                {
                    sender.OrdErrorList.Add("药品不能为空!");
                }
                #endregion


                #region 用药天数必须大于0
                if (Emsdrugs.Use_days < 0)
                {
                    sender.OrdErrorList.Add("用药天数小于0!");
                }
                #endregion
                #region 药品的单价不能为空
                string priceError = "";
                foreach (EmsOrDrug drug in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED))
                {
                    if (drug.Price == null)
                    {
                        priceError += "药品【" + drug.Name_srv + "】的价格为空,请与信息科联系!";
                    }
                }
                if (priceError != "")
                {
                    sender.OrdErrorList.Add(priceError);
                }
                #endregion
                #region 校验每个服务的药品用法是否在剂型关联的用法集合里
                List <string> id_dosages = new List <string>();
                foreach (EmsOrDrug drug in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED))
                {
                    id_dosages.Add(drug.Id_dosage);
                }
                RouteDosageRefDO[] rdros = LogicEx.GetInstance().getRouteDoSageRefDOById_dosages(id_dosages);
                string             error = "";
                foreach (EmsOrDrug drug in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED))
                {
                    RouteDosageRefDO item = rdros.FirstOrDefault(p => p.Id_dosage == drug.Id_dosage && p.Id_route == drug.Id_route);
                    if (item == null)
                    {
                        UdidocDO udidoc = LogicEx.GetInstance().getUdidocDOById(drug.Id_dosage);
                        if (udidoc != null)
                        {
                            error += drug.Name_srv + "剂型为" + udidoc.Name + ",不能使用" + drug.Name_route + "用法;";
                        }
                    }
                }
                if (error != "")
                {
                    sender.OrdErrorList.Add(error);
                }
                #endregion
                #region 药品库存的判断
                string mmcounterror = LogicEx.GetInstance().validateDrugCount(Emsdrugs.EmsOrDrugList.ToList());
                if (!string.IsNullOrEmpty(mmcounterror))
                {
                    sender.OrdErrorList.Add(mmcounterror);
                }
                #endregion
                #region 空数据记录提示
                EmsOrDrug drugitem = Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED).ToList().FirstOrDefault(p => p.Id_srv == null);
                if (drugitem != null)
                {
                    sender.OrdErrorList.Add("医疗单列表中存在空数据,请删除后保存");
                }
                #endregion
                #region 用法数据完整性校验
                if (String.IsNullOrEmpty(Emsdrugs.Id_route))
                {
                    sender.OrdErrorList.Add("药品的用法ID为空,请重新选择用法");
                }
                #endregion
            }

            return(sender.OrdErrorList.Count == 0);
        }
Пример #10
0
        //绑定数据 检查
        private void AddObsDataBing(EmsUIDTO headDo, MedSrvDO med)
        {   // 诊断
            //headDo.Emsapobs.Id_srv = med.Id_srv;  // 检查申请单主键
            //headDo.Emsapobs.Id_emsobs = "";
            // 医嘱服务id
            headDo.Emsapobs.Id_orsrv = "";
            // 医嘱医疗单
            headDo.Emsapobs.Id_or = "";
            // 服务id
            headDo.Emsapobs.Id_srv = med.Id_srv;
            // 服务名称
            headDo.Emsapobs.Name_srv = med.Name;
            // 服务类型
            headDo.Emsapobs.Id_srvtp = med.Id_srvtp;
            // 服务类型名称
            headDo.Emsapobs.Name_srvtp = med.Srvca_name;
            // 检查类型id
            headDo.Emsapobs.Id_obstp = med.Id_srv;
            // 检查类型名称
            headDo.Emsapobs.Name_obstp = med.Name;

            // headDo.Emsapobs.Des_sympsign =

            headDo.MedSrvDO.Id_freq = med.Id_freq;

            headDo.MedSrvDO.Sd_srvtp = med.Sd_srvtp;

            // 检查申请单号
            headDo.Emsapobs.No_applyobs = qryService.getOrdApObsNoapplyform();
            headDo.Emsapobs.Dt_plan     = headDo.Emsapobs.Dt_begin_ui == null?this.NowTime() : headDo.Emsapobs.Dt_begin_ui;

            // 加急标识
            headDo.Emsapobs.Fg_urgent = false;
            MedSrvRisDO medSrvRisDo = patDiagImp.getBdSrvObs(med.Id_srv);

            if (medSrvRisDo != null && medSrvRisDo.If_mp_bed != null && (bool)medSrvRisDo.If_mp_bed)
            {
                // 床旁执行标志
                headDo.Emsapobs.Fg_mp_bed = true;
                // 症状体征描述
                // headDo.Emsapobs.Des_sympsign
                // 身体部位id
                headDo.Emsapobs.Id_body = medSrvRisDo.Id_body;
                // 身体部位编码
                headDo.Emsapobs.Sd_body = medSrvRisDo.Sd_body;
                // 身体部位名称
                headDo.Emsapobs.Name_body = medSrvRisDo.Name_body;
                // 身体体位id
                headDo.Emsapobs.Id_pos = medSrvRisDo.Id_pos;
                // 身体体位编码
                headDo.Emsapobs.Sd_pos = medSrvRisDo.Sd_pos;
                // 身体体位名称
                headDo.Emsapobs.Name_pos = medSrvRisDo.Name_pos;
            }
            else
            {
                // 床旁执行标志
                headDo.Emsapobs.Fg_mp_bed = false;
            }

            // 计划检查时间
            // headDo.Emsapobs.Dt_begin_ui
            // 诊断id
            string[] diagArray = patDiagImp.getDiagArray(headDo.PatInfo.Id_ent);
            if (diagArray != null)
            {
                headDo.Emsapobs.Id_di        = diagArray[7]; //主诊断的主项目id
                headDo.Emsapobs.Id_diitm     = diagArray[3]; //主诊断id
                headDo.Emsapobs.Name_diag    = diagArray[4]; //主诊断名称
                headDo.Emsapobs.Str_code_di  = diagArray[1]; //诊断编码拼接
                headDo.Emsapobs.Str_name_di  = diagArray[0]; //诊断名称拼接
                headDo.Emsapobs.Str_id_diitm = diagArray[2]; //诊断子项目id拼接
            }

            // 检查目的编码
            UdidocDO udidoc = patDiagImp.getBdUdidocList();

            if (udidoc != null)
            {
                headDo.Emsapobs.Sd_pps = udidoc.Code;
                headDo.Emsapobs.Id_pps = udidoc.Id_udidoc;
                // 检查目的描述
                headDo.Emsapobs.Des_pps = udidoc.Name;
            }
            else
            {                                                           // todo  暂时对应 需要修改
                headDo.Emsapobs.Sd_pps = CiDictCodeConst.SD_PPS_ASSIST; // "0001AA100000000312PC";// ##????
                headDo.Emsapobs.Id_pps = CiDictCodeConst.SD_PPS_ASSIST_ID;
                // 检查目的描述
                headDo.Emsapobs.Des_pps = CiDictCodeConst.SD_PPS_ASSIST_NAME;
            }
            //临床病症及体征内容拼接,住院部门界面没有显示,所以不给赋值,移回到门诊中2017-2-27
            //headDo.Emsapobs.Clinicalzztz = LogicEx.GetInstance().diseaseDescription(headDo.PatInfo.Id_ent);
            //headDo.Emsapobs.Des_sympsign = headDo.Emsapobs.Clinicalzztz;// 病情描述与临床症状及体征 各自保存,不互相复制
        }
Пример #11
0
        private void oTree1_TreeItemSelected(object sender, xap.rui.control.tree.events.TreeItemEventArgs e)
        {
            bSelect = true;

            string strCommond = "";
            if (e.Node.Level != 1)
            {
                //strCommond = Utils.SELECTROW;
                Type tp = oTree1.FocusedUserObject.GetType();
                switch (tp.Name)
                {
                    case "UdidocDO"://选中诊断证明分类
                        this.currUdi = (UdidocDO)oTree1.FocusedUserObject;
                        //选中分类是数据独一模式(仅保存一条数据)
                        if ("0" == this.currUdi.Ctrl1)
                        {
                            if (this.ent4BannerDTO.Status.ToString() != EnDictCodeConst.SD_ENSTATUS_OP_FINISH)
                            {
                                //准备根据患者是否诊毕,判断是否要打印
                            }

                            //获取当前独一分类的诊断证明数据(唯一)
                            EntDiProveDO[] dos = viewModel.GetEntDiProveDOByDiProveType(this.ent4BannerDTO.Id_ent, this.currUdi.Code);
                            if (dos != null && dos.Length > 0)
                            {
                                this.currDi = dos[0];
                                //0904临时添加,数据保存模式和单据打印模式,需要分开判断
                                strCommond = this.currUdi.Ctrl2 == "0" && this.currDi.Num_print != null && this.currDi.Num_print > 0 ? Utils.SELECTROWONLYPRINTED : Utils.SELECTROWONLYSAVED;
                            }
                            else
                            {
                                this.createEntDiProveDO();//如果还没有保存数据,则新增数据(仅一次)
                                strCommond = Utils.SELECTROWONLYNEW;
                            }
                        }
                        else
                        {
                            //选中分类不是独一模式,
                            strCommond = Utils.SELECTROWNOTONLY;
                            this.currDi = new EntDiProveDO();
                            this.currDi.Id_diprovetp = this.currUdi.Id_udidoc;
                            this.currDi.Sd_diprovetp = this.currUdi.Code;
                        }
                        break;
                    case "EntDiProveDO"://选中诊断证明
                        strCommond = Utils.SELECTROWITEM;
                        this.currUdi = null;
                        this.currDi = (EntDiProveDO)oTree1.FocusedUserObject;
                        break;
                    default:
                        break;
                }
            }
            else
            {
                strCommond = Utils.SELECTROOT;
                this.currDi = null;
            }

            onFireEventSent(strCommond, this.currDi);
        }