using AIMS;
using AIMSBLL;
using AIMSExtension;
using AIMSModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DataDictionary.UI
{
    public partial class frmAnaesthesiaMethod : Form
    {
        /// 
        /// 麻醉字典集合
        /// 
        private List list;
        private EditState state = EditState.BROWSE;
        /// 
        /// 编号
        /// 
        public int pid;
        public frmAnaesthesiaMethod()
        {
            InitializeComponent();
        }
        private void frmAnaesthesiaMethod_Load(object sender, EventArgs e)
        {
            Initial();
            //FullTreeView(list);
            ControlExtension.EnabledControl(panel1, false);
        }
        /// 
        /// 初始化TreeView
        /// 
        private void Initial()
        {
            list = BAnaesthesiaMethod.Select("  IsValid=1 ", new ParameterList(), RecursiveType.None, 0);
            tvDictionary.Nodes.Clear();
            //设置根节点
            TreeNode rootNode = new TreeNode("麻醉方式");
            FillTvTreeNode(rootNode, 0);
            tvDictionary.Nodes.Add(rootNode);
            tvDictionary.Nodes[0].Expand();
            //初始化ComboBox
            List sList = list;
            sList.Insert(0, new AnaesthesiaMethod() { Id = -1, Name = "" });
            cboDict.DataSource = sList;
            cboDict.DisplayMember = "Name";
            cboDict.ValueMember = "Id";
        }
        private void FillTvTreeNode(TreeNode node, int ParentId)
        {
            foreach (AnaesthesiaMethod sAnaes in list)
            {
                if (sAnaes.ParentId == ParentId)
                {
                    TreeNode sNode = new TreeNode(sAnaes.Name);
                    sNode.Tag = sAnaes;
                    FillTvTreeNode(sNode, sAnaes.Id.Value);
                    node.Nodes.Add(sNode);
                }
            }
        }
        private void tsbExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void FullDgv(AnaesthesiaMethod anaes)
        {
            cboDict.Text = anaes.Name;
            dgvDictionary.AutoGenerateColumns = false;
            dgvDictionary.Rows.Clear();
            int num = 1;
            anaes.Children = list.Where(a => a.ParentId == anaes.Id).ToList();
            foreach (AnaesthesiaMethod sAnaes in anaes.Children)
            {
                int index = this.dgvDictionary.Rows.Add();
                this.dgvDictionary.Rows[index].Cells["Id"].Value = sAnaes.Id;
                this.dgvDictionary.Rows[index].Cells["Index"].Value = num;
                num++;
                this.dgvDictionary.Rows[index].Cells["aName"].Value = sAnaes.Name;
                this.dgvDictionary.Rows[index].Cells["HCode"].Value = sAnaes.HelpCode;
                this.dgvDictionary.Rows[index].Cells["pName"].Value = anaes.Name;
                this.dgvDictionary.Rows[index].Cells["UseRate"].Value = sAnaes.UseRate;
                this.dgvDictionary.Rows[index].Cells["IsValid"].Value = sAnaes.IsValid == 1 ? "有效" : "无效";
                this.dgvDictionary.Rows[index].Cells["Explain"].Value = sAnaes.Explain;
            }
        }
        private void tsbAdd_Click(object sender, EventArgs e)
        {
            if (tvDictionary.SelectedNode == null)
            {
                MessageBox.Show("请选择麻醉目录");
                return;
            }
            state = EditState.ADD;
            chkIsValid.Checked = true;
            if (tvDictionary.SelectedNode.Level == 0)
            {
                lblts.Text = "当前状态为:添加新麻醉类型";
                ControlExtension.EnabledControl(panel1, true);
                cboDict.Enabled = false;
            }
            else
            {
                lblts.Text = "当前状态为:为" + tvDictionary.SelectedNode.Text + "添加新麻醉方式";
                ControlExtension.EnabledControl(panel1, true);
                cboDict.Enabled = false;
            }
        }
        private void tsbModify_Click(object sender, EventArgs e)
        {
            if (dgvDictionary.SelectedRows.Count < 1)
            {
                MessageBox.Show("请从列表中选择要修改的麻醉方式!");
                return;
            }
            state = EditState.EDIT;
            pid = Convert.ToInt32(dgvDictionary.SelectedRows[0].Cells["Id"].Value);
            txtName.Text = dgvDictionary.SelectedRows[0].Cells["aName"].Value.ToString();
            txtHCode.Text = dgvDictionary.SelectedRows[0].Cells["HCode"].Value.ToString();
            if (dgvDictionary.SelectedRows[0].Cells["Explain"].Value != null)
                txtHqms.Text = dgvDictionary.SelectedRows[0].Cells["Explain"].Value.ToString();
            chkIsValid.Checked = dgvDictionary.SelectedRows[0].Cells["IsValid"].Value.ToString() == "有效" ? true : false;
            intDepOrder.Text = dgvDictionary.SelectedRows[0].Cells["UseRate"].Value.ToString();
            txtName.Enabled = true;
            txtHCode.Enabled = true;
            intDepOrder.Enabled = true;
            chkIsValid.Enabled = true;
            txtHqms.Enabled = true;
        }
        private void tsbCancel_Click(object sender, EventArgs e)
        {
            ControlExtension.EnabledControl(panel1, false);
            ControlExtension.ClearControl(panel1);
            lblts.Text = "";
            state = EditState.BROWSE;
        }
        private void tsbSave_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dgvDictionary.Rows)
            {
                if (state != EditState.EDIT && (row.Cells["aName"].Value.ToString() == txtName.Text.Trim()))
                {
                    MessageBox.Show("麻醉方式已存在,请重新输入");
                    txtName.Text = "";
                    txtName.Focus();
                    return;
                }
            }
            if (ValidInput())
            {
                AnaesthesiaMethod anaes = new AnaesthesiaMethod();
                string nodeName = cboDict.Text.Trim();
                if (Convert.ToInt32(cboDict.SelectedValue) > 0)
                {
                    anaes.ParentId = Convert.ToInt32(cboDict.SelectedValue);
                }
                else
                {
                    anaes.ParentId = 0;
                }
                anaes.Name = txtName.Text.Trim();
                anaes.HelpCode = txtHCode.Text.Trim();
                anaes.IsValid = chkIsValid.Checked == true ? 1 : 0;
                if (intDepOrder.Text.Trim().Length > 0)
                {
                    anaes.UseRate = int.Parse(intDepOrder.Text.Trim());
                }
                else
                {
                    anaes.UseRate = 0;
                }
                anaes.Explain = txtHqms.Text.Trim();
                anaes.OperatorNo = PublicMethod.OperatorNo;
                anaes.OperatorName = PublicMethod.OperatorName;
                anaes.OperateDate = DateTime.Now;
                int n = 0;
                if (state == EditState.ADD)
                {
                    n = BAnaesthesiaMethod.Insert(anaes);
                }
                else if (state == EditState.EDIT)
                {
                    anaes.Id = pid;
                    n = BAnaesthesiaMethod.Update(anaes);
                }
                if (n > 0)
                {
                    MessageBox.Show("保存成功!");
                    ControlExtension.EnabledControl(panel1, false);
                    ControlExtension.ClearControl(panel1);
                }
                Initial();
                state = EditState.BROWSE;
                foreach (TreeNode node in tvDictionary.Nodes[0].Nodes)
                {
                    if (node.Text == nodeName)
                    {
                        AnaesthesiaMethod sbd = node.Tag as AnaesthesiaMethod;
                        FullDgv(sbd);
                        break;
                    }
                }
            }
        }
        /// 
        /// 输入字典名称时为助记码文本框赋值
        /// 
        /// 
        /// 
        private void txtName_TextChanged(object sender, EventArgs e)
        {
            txtHCode.Text = PublicMethod.GetFirstLetter(txtName.Text);
        }
        /// 
        /// 输入验证
        /// 
        /// 
        private bool ValidInput()
        {
            bool key = false;
            if (txtName.Text.Trim().Length < 1)
            {
                MessageBox.Show("请输入名称!");
            }
            else if (txtHCode.Text.Trim().Length < 1)
            {
                MessageBox.Show("请输入助记码!");
            }
            else if (txtHqms.Text.Trim().Length < 1)
            {
                MessageBox.Show("请输HQMS编码!");
            }
            else
            {
                key = true;
            }
            return key;
        }
        private void tvDictionary_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (tvDictionary.SelectedNode.Level <= 0) return;
            AnaesthesiaMethod bd = tvDictionary.SelectedNode.Tag as AnaesthesiaMethod;
            FullDgv(bd);
        }
    }
}