using AIMS.OremrUserControl;
using AIMSBLL;
using AIMSExtension;
using AIMSModel;
using DCSoftDotfuscate;
using DevComponents.AdvTree;
using DevComponents.DotNetBar;
using DocumentManagement;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace AIMS.OperationAfter.UI
{
    public partial class frmDocument3 : Form
    {
        //文档目录
        private ucClassify ucClassify;
        //患者基本信息
        private PatientRecord Patient;
        const int CLOSE_SIZE = 18;   //关闭图标尺寸
        public string PerortName;
        //患者信息
        DataRow vPatient = null;
        /// 
        /// 声明保存数据时的状态
        /// 
        public EditState _state;
        public frmDocument3()
        {
            InitializeComponent();
            //基本信息初始化
            Patient = new PatientRecord();
        }
        public frmDocument3(PatientRecord p)
        {
            InitializeComponent();
            Patient = p;
            StringBuilder sb = new StringBuilder();
            string t = "    ";
            sb.Append("患者:" + Patient.PatientName + t);
            sb.Append("住院号:" + Patient.MdrecNo + t);
            sb.Append("性别:" + Patient.Sex + t);
            sb.Append("手术名称:" + Patient.OperationInfoName + t);
            sb.Append("状态:" + Patient.State + t);
            this.lblPatient.Text = sb.ToString();
        }
        /// 
        /// 医疗文书窗体加载
        /// 
        /// 
        /// 
        private void frmDocument3_Load_1(object sender, EventArgs e)
        {
            ControlExtension.GetOperationSiteRoom(labelSite, CboOperationSite, null);
            if (PublicMethod.OperatorNo == "admin" || PublicMethod.RoleName.Contains("数据中心"))
            {
                buttonX1.Visible = true;
            }
            System.Drawing.Size mSize = SystemInformation.WorkingArea.Size;
            txtnameOrHnum.Text = "姓名或住院号关键字";
            txtnameOrHnum.ForeColor = Color.FromArgb(164, 164, 164);
            dtpSearchTime.Value = DateTime.Now;
            //ucClassify初始化
            ucClassify = new DocumentManagement.ucClassify();
            this.expandablePanel1.Controls.Add(ucClassify);
            ucClassify.IsReadOnly = true;
            ucClassify.Dock = DockStyle.Fill;
            ucClassify.tv.NodeMouseClick += new TreeNodeMouseClickEventHandler(tv_NodeMouseClick);
            ucClassify.RefreshTree(Patient.PatientId);
            tsbDoc.TabItemClose += new TabStrip.UserActionEventHandler(tsbDoc_TabItemClose);
            this.CboOperationSite.SelectedIndexChanged += new System.EventHandler(this.CboOperationSite_SelectedIndexChanged);
            if (PublicMethod.OperatorNo == "admin" || PublicMethod.RoleName.Contains("删除医疗文书"))
            {
                btnDelete.Visible = true;
            }
        }
        /// 
        /// 手术间信息加载到treeview
        /// 
        private void FullTreeView()
        {
            treeViewPatient.Nodes.Clear();
            try
            {
                DateTime beginTime = Convert.ToDateTime(dtpSearchTime.Value.ToString("yyyy-MM-dd 00:00:00"));
                DateTime endTime = Convert.ToDateTime(dtpSearchTime.Value.ToString("yyyy-MM-dd 23:59:59"));
                DataTable vPlanedOpeList = BOperationApply.GetOperationFrontDataTable(beginTime.ToString("yyyy-MM-dd 00:00:00"), endTime.ToString("yyyy-MM-dd 23:59:59"));
                if (vPlanedOpeList.Rows.Count <= 0) return;
                vPlanedOpeList = AIMSExtension.PublicMethod.GetNewDataTable(vPlanedOpeList, "State not IN ('退回','作废') ", "");
                if (CboOperationSite.Visible == true && CboOperationSite.SelectedIndex > 0)
                {
                    vPlanedOpeList = AIMSExtension.PublicMethod.GetNewDataTable(vPlanedOpeList, " OperationSite ='" + CboOperationSite.SelectedValue + "' ", "");
                }
                List list = new List();
                foreach (var item in ControlExtension.SiteRooms)
                {
                    foreach (DataRow po in vPlanedOpeList.Rows)
                    {
                        if (po["OperationRoom"].ToString() != "" && po["OperationRoom"].ToString() == item.Name)
                        {
                            list.Add(item.Name);
                            break;
                        }
                    }
                }
                foreach (var item in list)
                {
                    TreeNode roomnode = new TreeNode(item);
                    roomnode.Tag = item;
                    treeViewPatient.Nodes.Add(roomnode);
                    foreach (DataRow vpo in vPlanedOpeList.Rows)
                    {
                        if (item == vpo["OperationRoom"].ToString())
                        {
                            TreeNode sNode = new TreeNode(vpo["PatientName"].ToString() + "-" + vpo["MdrecNo"].ToString());
                            sNode.Tag = vpo;
                            roomnode.Nodes.Add(sNode);
                        }
                    }
                }
                TreeNode roomnodenull = new TreeNode("未排程");
                foreach (DataRow vpo in vPlanedOpeList.Rows)
                {
                    if (vpo["OperationRoom"].ToString() == "")
                    {
                        TreeNode sNode = new TreeNode(vpo["PatientName"].ToString() + "-" + vpo["MdrecNo"].ToString());
                        sNode.Tag = vpo;
                        roomnodenull.Nodes.Add(sNode);
                    }
                }
                treeViewPatient.Nodes.Add(roomnodenull);
            }
            catch (Exception exp)
            {
                //异常处理保存
                PublicMethod.WriteLog(exp, "");
            }
        }
        String templateName = string.Empty;
        /// 
        /// 添加医疗文书选项卡
        /// 
        public Form frmss;
        /// 
        /// 查询手术间患者
        /// 
        /// 
        /// 
        private void btnChoose_Click_1(object sender, EventArgs e)
        {
            this.treeViewPatient.AfterSelect -= new System.Windows.Forms.TreeViewEventHandler(this.treeViewPatient_AfterSelect);
            FullTreeView();
            treeViewPatient.ExpandAll();
            this.treeViewPatient.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewPatient_AfterSelect);
        }
        private void dtpSearchTime_ValueChanged(object sender, EventArgs e)
        {
            panel2.Width = groupBox2.Width;
            txtnameOrHnum.Text = "";
            this.treeViewPatient.AfterSelect -= new System.Windows.Forms.TreeViewEventHandler(this.treeViewPatient_AfterSelect);
            FullTreeView();
            treeViewPatient.ExpandAll();
            //if (treeViewPatient.Nodes.Count > 0) treeViewPatient.SelectedNode = treeViewPatient.Nodes[0];
            this.treeViewPatient.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewPatient_AfterSelect);
        }
        private void txtnameOrHnum_Leave(object sender, EventArgs e)
        {
            if (txtnameOrHnum.Text.Equals(""))
            {
                txtnameOrHnum.Text = "姓名或住院号关键字";
                txtnameOrHnum.ForeColor = Color.FromArgb(164, 164, 164);
            }
        }
        private void btnBeforeDay_Click(object sender, EventArgs e)
        {
            dtpSearchTime.Value = dtpSearchTime.Value.AddDays(-1);
        }
        private void btnAfterDay_Click(object sender, EventArgs e)
        {
            dtpSearchTime.Value = dtpSearchTime.Value.AddDays(1);
        }
        private void txtnameOrHnum_KeyUp(object sender, KeyEventArgs e)
        {
            this.treeViewPatient.AfterSelect -= new System.Windows.Forms.TreeViewEventHandler(this.treeViewPatient_AfterSelect);
            FullTreeView();
            if (treeViewPatient.Nodes.Count > 0)
            {
                treeViewPatient.ExpandAll();
                //treeViewPatient.SelectedNode = treeViewPatient.Nodes[0];
            }
            this.treeViewPatient.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewPatient_AfterSelect);
        }
        private void txtnameOrHnum_Click_1(object sender, EventArgs e)
        {
            txtnameOrHnum.Text = "";
            txtnameOrHnum.ForeColor = Color.Black;
        }
        private void txtnameOrHnum_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                FullTreeView();
                treeViewPatient.ExpandAll();
            }
        }
        /// 
        /// 赋值患者基本信息
        /// 
        /// 
        ///  
        private void treeViewPatient_AfterSelect(object sender, TreeViewEventArgs e)
        {
            vPatient = treeViewPatient.SelectedNode.Tag as DataRow;
            //如果有患者就是读患者的记录,否则以日期为条件取记录
            if (vPatient != null)
            {
                //关闭打开的文档
                while (tsbDoc.Tabs.Count > 0)
                {
                    tsbDoc.SelectedTab = tsbDoc.Tabs[0];
                    CloseTab();
                }
                GetPatinentRecord(vPatient["PatientId"].ToString());
                StringBuilder sb = new StringBuilder();
                string t = "    ";
                sb.Append("患者:" + Patient.PatientName + t);
                sb.Append("住院号:" + Patient.MdrecNo + t);
                sb.Append("性别:" + Patient.Sex + t);
                //sb.Append("手术名称:" + Patient.OperationInfoName + t);
                //sb.Append("状态:" + Patient.State + t);
                this.lblPatient.Text = sb.ToString();
                this.ucClassify.RefreshTree(this.Patient.PatientId);
            }
        }
        public void GetPatinentRecord(string Patientid)
        {
            this.Patient = PatientRecord.GetPatientRecord(int.Parse(Patientid));
        }
        void tsbDoc_TabItemClose(object sender, TabStripActionEventArgs e)
        {
            TabItem tb = (sender as DevComponents.DotNetBar.TabControl).SelectedTab;
            ucDocument doc = tb.AttachedControl.Controls[0] as ucDocument;
            doc.CloseMsg(tb.Text, ref e.Cancel);
        }
        /// 
        /// 文档目录点击事件
        /// 
        /// 
        /// 
        void tv_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                //判断是否选择患者
                if (this.Patient.PatientId == 0)
                {
                    MessageBox.Show("请先选择患者!", "系统提示");
                    return;
                }
                TreeNode node = e.Node;
                //父节点不操作
                if (node.Parent == null)
                {
                    foreach (TreeNode item in node.Nodes)
                    {
                        item.Checked = node.Checked;
                    }
                    return;
                }
                if (this.Patient.PatientId > 0)
                {
                    //判断是否已经打开文书
                    foreach (var item in tsbDoc.Tabs)
                    {
                        if ((item as TabItem).Text.Replace("*", "").Equals(node.Text))
                        {
                            tsbDoc.SelectedTab = item as TabItem;
                            return;
                        }
                    }
                    //创建该文书标签
                    TabItem tb = this.tsbDoc.CreateTab(node.Text);
                    tsbDoc.SelectedTab = tb;
                    Control c = tb.AttachedControl;
                    ucDocument doc = new ucDocument(int.Parse(node.Name), int.Parse(node.Tag.ToString()), Patient);
                    doc.RefreshUc += new ucDocument.RefreshUcClassify(ucClassify.RefreshTree);
                    doc.ModifyT += new ucDocument.ModifyTitle(ModifyTitle);
                    doc.ClearT += new ucDocument.ClearTitle(ClearTitle);
                    doc.CloseP += new ucDocument.CloseParent(CloseTab);
                    doc.Parent = c;
                    doc.Dock = DockStyle.Fill;
                    doc.Show();
                }
            }
        }
        /// 
        /// 关闭标签
        /// 
        private void CloseTab()
        {
            ucDocument doc = tsbDoc.SelectedTab.AttachedControl.Controls[0] as ucDocument;
            bool isCancel = false;
            doc.CloseMsg(tsbDoc.SelectedTab.Text, ref isCancel);
            if (!isCancel)
            {
                tsbDoc.Tabs.Remove(tsbDoc.SelectedTab);
            }
        }
        /// 
        /// 添加标题*号
        /// 
        private void ModifyTitle()
        {
            if (!tsbDoc.SelectedTab.Text.EndsWith("*"))
            {
                tsbDoc.SelectedTab.Text += "*";
            }
        }
        /// 
        /// 清除标题*号
        /// 
        private void ClearTitle()
        {
            tsbDoc.SelectedTab.Text = tsbDoc.SelectedTab.Text.Replace("*", "");
        }
        private void txtnameOrHnum_TextChanged(object sender, EventArgs e)
        {
        }
        private void dtpSearchTime_Click(object sender, EventArgs e)
        {
        }
        private void btnSel_Click(object sender, EventArgs e)
        {
            //判断是否选择患者
            if (this.Patient.PatientId == 0)
            {
                MessageBox.Show("请先选择患者!");
                return;
            }
            string showtext = "";
            //判断是否已经打开文书
            foreach (var item in tsbDoc.Tabs)
            {
                if ((item as TabItem).Text.Contains("*"))
                {
                    tsbDoc.SelectedTab = item as TabItem;
                    showtext += (item as TabItem).Text + " ";
                }
            }
            if (showtext != "")
            {
                MessageBox.Show(showtext + "未保存 请确认保存后批量打印!", "系统提示");
                return;
            }
            tsbDoc.Tabs.Clear();
            List Ids = new List();
            for (int i = 0; i < ucClassify.tv.Nodes.Count; i++)
            {
                TreeNode item = ucClassify.tv.Nodes[i];
                if (item != null && item.Parent == null)
                {
                    foreach (TreeNode node in item.Nodes)
                    {
                        if (node.Tag != null && int.Parse(node.Tag.ToString()) > 0 && this.Patient.PatientId > 0 && node.Checked == true)
                        {
                            Ids.Add(int.Parse(node.Tag.ToString()));
                        }
                    }
                }
            }
            for (int i = 0; i < ucClassify.tv.Nodes.Count; i++)
            {
                TreeNode item = ucClassify.tv.Nodes[i];
                if (item != null)
                {
                    foreach (TreeNode node in item.Nodes)
                    {
                        if (Ids.Contains(int.Parse(node.Tag.ToString())))
                        {
                            //创建该文书标签
                            TabItem tb = this.tsbDoc.CreateTab(node.Text);
                            tsbDoc.SelectedTab = tb;
                            Control c = tb.AttachedControl;
                            ucDocument doc = new ucDocument(int.Parse(node.Name), int.Parse(node.Tag.ToString()), Patient);
                            doc.RefreshUc += new ucDocument.RefreshUcClassify(ucClassify.RefreshTree);
                            doc.ModifyT += new ucDocument.ModifyTitle(ModifyTitle);
                            doc.ClearT += new ucDocument.ClearTitle(ClearTitle);
                            doc.CloseP += new ucDocument.CloseParent(CloseTab);
                            doc.Parent = c;
                            doc.Dock = DockStyle.Fill;
                            doc.Show();
                            doc.myEditControl.ExecuteCommand("FilePrint", false, null);
                            ControlExtension.UPDocument(Patient.PatientId, Patient.ApplyId, doc.DModel.Id, 3, doc.DModel.TemplateId.ToString(), doc.DModel.XmlFileName);
                        }
                    }
                }
            }
        }
        private void buttonX1_Click(object sender, EventArgs e)
        {
            //判断是否选择患者
            if (this.Patient.PatientId == 0)
            {
                MessageBox.Show("请先选择患者!", "系统提示");
                return;
            }
            EMRExtension.OpenEMRS(Patient.PatientId, Patient.ApplyId);
        }
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //判断是否选择患者
            if (this.Patient.PatientId == 0 || tsbDoc.SelectedTab == null)
            {
                MessageBox.Show("请先选择患者!", "系统提示");
                return;
            }
            PrintDocument DModel = DocumentDAL.GetDocumentbyName(tsbDoc.SelectedTab.Text, Patient.PatientId);
            if (DModel != null && DModel.Id > 0)
            {
                DialogResult dialogResult = MessageBox.Show("确认要删除 " + tsbDoc.SelectedTab.Text + " 文书?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dialogResult == DialogResult.Yes)
                {
                    DocumentDAL.DeletePrintDocument2(DModel);
                    PublicMethod.WriteLog("删除文书" + tsbDoc.SelectedTab.Text, Patient.PatientId);
                    this.ucClassify.RefreshTree(this.Patient.PatientId);
                    CloseTab();
                }
            }
        }
        private void CboOperationSite_SelectedIndexChanged(object sender, EventArgs e)
        {
            ControlExtension.SetOperationSiteRoom(CboOperationSite, null);
            dtpSearchTime_ValueChanged(null, null);
        }
    }
}