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;
using AIMSBLL;
using AIMSExtension;
using AIMSModel;
namespace AIMS.PublicUI.UI
{
    public partial class frmAppliance : Form
    {
        /// 
        /// 器械集合全部
        /// 
        public List list;
        /// 
        /// 器械集合有效
        /// 
        public List validlist;
        /// 
        /// 声明保存数据时的状态
        /// 
        public EditState _state;
        /// 
        /// 编号
        /// 
        public int numberId;
        public frmAppliance()
        {
            InitializeComponent();
        }
        private void frmAppliance_Load(object sender, EventArgs e)
        {
            Initial();
            chkAll_CheckedChanged(null, null);
            txtName.Enabled = true;
            txtName.TextChanged += new EventHandler(txtName_TextChanged);
        }
        private void Initial()
        {
            ControlExtension.EnabledControl(panel1, false);
            chkAll.Enabled = true;
            list = BAppliance.Select();
        }
        /// 
        /// 为DataGridView绑定数据
        /// 
        private void BindDgv(List list)
        {
            dgvAppliance.AutoGenerateColumns = false;
            dgvAppliance.Rows.Clear();
            int num = 1;
            foreach (Appliance item in list)
            {
                int index = this.dgvAppliance.Rows.Add();
                this.dgvAppliance.Rows[index].Cells["Id"].Value = item.Id;
                this.dgvAppliance.Rows[index].Cells["Index"].Value = num;
                num++;
                this.dgvAppliance.Rows[index].Cells["oName"].Value = item.Name;
                this.dgvAppliance.Rows[index].Cells["HCode"].Value = item.HCode;
                this.dgvAppliance.Rows[index].Cells["Type"].Value = GetTypeNameByCode(Convert.ToInt32(item.ApplianceType));
                this.dgvAppliance.Rows[index].Cells["UseRate"].Value = item.UseRate;
                this.dgvAppliance.Rows[index].Cells["IsValid"].Value = item.IsValid == 1 ? "有效" : "无效";
            }
        }
        /// 
        /// 根据器械类型编码得到器械类型名称
        /// 
        /// 
        /// 
        private string GetTypeNameByCode(int code)
        {
            string typeName = string.Empty;
            switch (code)
            {
                case 0:
                    typeName = "器械";
                    break;
                case 1:
                    typeName = "敷料";
                    break;
                case 9:
                    typeName = "其它";
                    break;
            }
            return typeName;
        }
        /// 
        /// 根据器械类型名称得到器械类型编码
        /// 
        /// 
        /// 
        private int GetCodeByTypeName(string typeName)
        {
            int code = 0;
            switch (typeName)
            {
                case "器械":
                    code = 0;
                    break;
                case "敷料":
                    code = 1;
                    break;
                case "其它":
                    code = 9;
                    break;
            }
            return code;
        }
        /// 
        /// 退出事件
        /// 
        /// 
        /// 
        private void tsbExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        /// 
        /// 新增事件
        /// 
        /// 
        /// 
        private void tsbAdd_Click(object sender, EventArgs e)
        {
            //设置状态为新增
            _state = EditState.ADD;
            txtName.TextChanged -= new EventHandler(txtName_TextChanged);
            txtName.TextChanged += new EventHandler(txtName_TextChanged_1);
            ControlExtension.ClearControl(panel1);
            ControlExtension.EnabledControl(panel1, true);
            chkIsValid.Checked = true;
            cboType.Text = "器械";
        }
        /// 
        /// 修改事件
        /// 
        /// 
        /// 
        private void tsbModify_Click(object sender, EventArgs e)
        {
            //设置状态为修改
            _state = EditState.EDIT;
            if (!(dgvAppliance.SelectedRows.Count > 0))
            {
                MessageBox.Show("请选择列表中的一项!");
                return;
            }
            txtName.TextChanged -= new EventHandler(txtName_TextChanged);
            txtName.TextChanged -= new EventHandler(txtName_TextChanged);
            txtName.TextChanged += new EventHandler(txtName_TextChanged_1);
            //ControlExtension.ClearControl(panel1);
            ControlExtension.EnabledControl(panel1, true);
            numberId = Convert.ToInt32(dgvAppliance.SelectedRows[0].Cells["Id"].Value);
            txtName.Text = dgvAppliance.SelectedRows[0].Cells["oName"].Value.ToString();
            txtHCode.Text = dgvAppliance.SelectedRows[0].Cells["HCode"].Value.ToString();
            cboType.Text = dgvAppliance.SelectedRows[0].Cells["Type"].Value.ToString();
            chkIsValid.Checked = dgvAppliance.SelectedRows[0].Cells["IsValid"].Value.ToString() == "有效" ? true : false;
        }
        /// 
        /// 取消事件
        /// 
        /// 
        /// 
        private void tsbCancel_Click(object sender, EventArgs e)
        {
            ControlExtension.ClearControl(panel1);
            ControlExtension.EnabledControl(panel1, false);
            txtName.Enabled = true;
            chkAll.Enabled = true;
            txtName.TextChanged -= new EventHandler(txtName_TextChanged_1);
            txtName.TextChanged -= new EventHandler(txtName_TextChanged);
            txtName.TextChanged += new EventHandler(txtName_TextChanged);
            chkAll_CheckedChanged(null, null);
        }
        /// 
        /// 保存数据事件
        /// 
        /// 
        /// 
        private void tsbSave_Click(object sender, EventArgs e)
        {
            if (!ValidInput())
            {
                return;
            }
            if (_state == EditState.ADD && dgvAppliance.Rows.Count > 0 && ControlExtension.ValidDataGridViewExistsItemName(dgvAppliance, "oName", txtName.Text.Trim()))
            {
                MessageBox.Show("该器械名称已存在,请重新输入!/r/n或选择器械使用类型后保存!");
                txtName.Focus();
                return;
            }
            Appliance app = new Appliance();
            app.Name = txtName.Text.Trim();
            app.HCode = txtHCode.Text.Trim();
            app.ApplianceType = GetCodeByTypeName(cboType.Text);
            app.IsValid = chkIsValid.Checked == true ? 1 : 0;
            app.OperatorId = PublicMethod.OperatorId;
            app.OperatorTime = DateTime.Now;
            int num = 0;
            if (_state == EditState.ADD)
            {
                app.UseRate = 0;
                num = BAppliance.Insert(app);
                if (num > 0)
                {
                    MessageBox.Show("保存成功!");
                    tsbCancel_Click(null, null);
                }
            }
            else if (_state == EditState.EDIT)
            {
                app.Id = numberId;// Convert.ToInt32(dgvAppliance.SelectedRows[0].Cells["Id"].Value);
                app.UseRate = Convert.ToInt32(dgvAppliance.SelectedRows[0].Cells["UseRate"].Value);
                num = BAppliance.Update(app);
                if (num > 0)
                {
                    MessageBox.Show("修改成功!");
                    dgvAppliance.SelectedRows[0].Cells["oName"].Value = txtName.Text.ToString();
                    dgvAppliance.SelectedRows[0].Cells["HCode"].Value = txtHCode.Text.ToString();
                    dgvAppliance.SelectedRows[0].Cells["Type"].Value = cboType.Text.ToString();
                    dgvAppliance.SelectedRows[0].Cells["IsValid"].Value = chkIsValid.Checked == true ? "有效" : "无效";
                    ControlExtension.ClearControl(panel1);
                    ControlExtension.EnabledControl(panel1, false);
                    txtName.Enabled = true;
                    chkAll.Enabled = true;
                    txtName.TextChanged -= new EventHandler(txtName_TextChanged_1);
                    txtName.TextChanged -= new EventHandler(txtName_TextChanged);
                    txtName.TextChanged += new EventHandler(txtName_TextChanged);
                }
            }
        }
        /// 
        /// 输入验证
        /// 
        /// 
        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 (cboType.Text.Trim().Length < 1)
            {
                MessageBox.Show("请选择器械类别!", "系统提示");
            }
            else
            {
                key = true;
            }
            return key;
        }
        /// 
        /// 输入字典名称时为助记码文本框赋值
        /// 
        /// 
        /// 
        private void txtName_TextChanged(object sender, EventArgs e)
        {
            chkAll_CheckedChanged(null, null);
        }
        /// 
        /// 输入字典名称时为助记码文本框赋值
        /// 
        /// 
        /// 
        private void txtName_TextChanged_1(object sender, EventArgs e)
        {
            txtHCode.Text = PublicMethod.GetFirstLetter(txtName.Text);
        }
        private void chkAll_CheckedChanged(object sender, EventArgs e)
        {
            if (chkAll.Checked)
            {
                list = BAppliance.Select(" name like '%" + txtName.Text + "%' or HCode like '%" + txtName.Text + "%' ", null);
                BindDgv(list);
            }
            else
            {
                validlist = BAppliance.Select(" IsValid=1 and (name like '%" + txtName.Text + "%' or HCode like '%" + txtName.Text + "%')", null);
                BindDgv(validlist);
            }
        }
    }
}