using System;
using System.Collections.Generic;
using System.Configuration;
using System.Drawing;
using System.Windows.Forms;
using QMAPP.FJC.Entity;
using QMAPP.FJC.Entity.Operation;
using QMAPP.ServicesAgent;
using QMAPP.WinForm.Common;
using QMFrameWork.Common.Serialization;
using QMFrameWork.Data;
using QMAPP.FJC.Entity.Basic;
using QM.Common;
using QMAPP.Entity;
using QMAPP.WinForm.Forms.Operation;

namespace QMAPP.WinForm.Forms.Injection
{
    /// <summary>
    /// 模块编号:M12-3
    /// 作    用:注塑打包
    /// 作    者:王庆男
    /// 编写日期:2015年06月11日
    ///</summary>
    public partial class ProductBundleForm : Form
    {
        Product product = new Product();//编辑保存
        Product searchModel = new Product();//查询条件
        public ProductBundleForm()
        {
            InitializeComponent();
        }

        #region 窗体载入

        private void Form_Load(object sender, EventArgs e)
        {
            #region 绑定下拉列表
            BasicData basicData = new BasicData();
            //初始化控件属性
            this.DGView.AutoGenerateColumns = false;

            //加载注塑设备列表
            this.comMachineCode.DataSource = basicData.GetMachineInfoList(new string[] { EnumGeter.ProcessType_M.Injection.GetHashCode().ToString() }, true);
            this.comMachineCode.DisplayMember = "MACHINENAME";
            this.comMachineCode.ValueMember = "MACHINECODDE";
            //加载操作人列表
            this.comOperator.DataSource = basicData.GetOperatorInfoList(EnumGeter.MACHINETYPE.zhusu.GetHashCode().ToString(), true); ;
            this.comOperator.DisplayMember = "OPERATOR";
            this.comOperator.ValueMember = "OPERATORCODE";

            //产品类型
            ProductBasic searchModelList = new ProductBasic();
            searchModelList.PRODUCTMAINTYPE = EnumGeter.PRODUCTMAINTYPE.zhusu.GetHashCode().ToString();
            searchModelList.PRODUCTUNIT = EnumGeter.PRODUCTUNIT.SET.GetHashCode().ToString();
            searchModelList.PRODUCTSOURCE = EnumGeter.PRODUCTSOURCE.SELFMADE.GetHashCode().ToString();

            this.comProType.DataSource = basicData.GetProductBasicList(searchModelList, true);
            this.comProType.DisplayMember = "PRODUCTNAME";
            this.comProType.ValueMember = "PRODUCTTYPE";

            this.comProTypeB.DataSource = basicData.GetProductBasicList(searchModelList, true);
            this.comProTypeB.DisplayMember = "PRODUCTNAME";
            this.comProTypeB.ValueMember = "PRODUCTTYPE";
            #endregion
            //初始化分页
            this.pager1.Init();
            //加载默认查询条件
            SetSearchModel();
            BindGirdData();


            #region 打印模板拷贝

            PrintTempleCopyClass printClass = new PrintTempleCopyClass();
            printClass.CopyPrintTemple("ProductBundleForm");

            #endregion
        }

        #endregion

        #region 绑定数据

        private DataPage BindGirdData()
        {
            List<Product> recorders = null;//查询结果列表
            DataPage dataPage = new DataPage();
            //获取前台分页设置信息
            dataPage = pager1.DataPage;
            try
            {
                #region 服务查询
                QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
                dataPage = agent.InvokeServiceFunction<DataPage>(B9BasicService.ProductBLL_GetList.ToString(), searchModel, dataPage);
                recorders = JsonConvertHelper.GetDeserialize<List<Product>>(dataPage.Result.ToString());
                #endregion
                this.DGView.DataSource = recorders;
                this.pager1.DataPage = dataPage;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return dataPage;
        }

        #endregion
        /// <summary>
        /// 分页事件
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        private DataPage pager1_EventPaging(Controls.EventPagingArg e)
        {
           return  BindGirdData();
        }

        /// <summary>
        /// 查询事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tsbSearch_Click(object sender, EventArgs e)
        {
            SetSearchModel();
            this.pager1.Init();
            BindGirdData();
        }

        /// <summary>
        /// 设置查询条件
        /// </summary>
        private void SetSearchModel()
        {
            searchModel = new Product();
            searchModel.PRODUCTTYPES = string.Join(",", new int[] {  EnumGeter.ProductType.kaiguanzhijia.GetHashCode() });//设置零件条码表的零件类别
            //操作人
            if (this.comOperator.SelectedValue != null && string.IsNullOrEmpty(this.comOperator.SelectedValue.ToString().Trim()) == false)
            {
                searchModel.MACHINECODDE = this.comOperator.SelectedValue.ToString().Trim();
            }
            //条码
            if (string.IsNullOrEmpty(this.txtProductCode.Text.Trim()) == false)
            {
                searchModel.PRODUCTCODE = this.txtProductCode.Text.Trim();
            }
            //零件类别
            if (this.comProTypeB.SelectedValue != null && string.IsNullOrEmpty(this.comProTypeB.SelectedValue.ToString()) == false)
            {
                searchModel.PRODUCTTYPE = this.comProTypeB.SelectedValue.ToString();
            }
        }

        /// <summary>
        /// 行序号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DG_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, this.DGView.RowHeadersWidth - 4, e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), new Font("宋体", 12, FontStyle.Bold), rectangle, this.DGView.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

        /// <summary>
        /// 零件类别联动事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comProType_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.comProType.SelectedValue !=null && !string.IsNullOrEmpty(this.comProType.SelectedValue.ToString()))
            {
                ProductBasic basic = this.comProType.SelectedItem as ProductBasic;
                this.lblCount.Text = basic.CAPATITY.ToString();
                this.txtCount.Text = basic.CAPATITY.ToString();
            }
        }


        /// <summary>
        /// 打包
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tsbAdd_Click(object sender, EventArgs e)
        {
            //窗体数据校验
            string errorMessae = ErrorCheck();
            if (errorMessae != "")
            {
                MessageBox.Show(errorMessae, Resource1.ConfirmTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            
            #region 加载保存信息
            ProductBasic basic = this.comProType.SelectedItem as ProductBasic;
            MachineInfo machine = this.comMachineCode.SelectedItem as MachineInfo;
            string proCode = "";
          if (basic.PRODUCTTYPE.Equals(EnumGeter.ProductType.gujia.GetHashCode().ToString()))
            {
                proCode = "B9A";
                product.CURRENTPROCESS = EnumGeter.ProcessType.huoyanjiagong.GetHashCode().ToString();//需要读取该类别最后的一道工序
            }
            else if (basic.PRODUCTTYPE.Equals(EnumGeter.ProductType.qinangzhijia.GetHashCode().ToString()))
            {
                proCode = "FJC";
                product.CURRENTPROCESS = EnumGeter.ProcessType.hongwaihanjie.GetHashCode().ToString();//需要读取该类别最后的一道工序
            }
            else if (basic.PRODUCTTYPE.Equals(EnumGeter.ProductType.fengdao.GetHashCode().ToString()))
            {
                proCode = "B9B";
                product.CURRENTPROCESS = EnumGeter.ProcessType.maojie.GetHashCode().ToString();//需要读取该类别最后的一道工序
            }
            else if (basic.PRODUCTTYPE.Equals(EnumGeter.ProductType.HUDfengdao.GetHashCode().ToString()))
            {
                proCode = "B9C";
                product.CURRENTPROCESS = EnumGeter.ProcessType.zongchengzhuangpei.GetHashCode().ToString();//需要读取该类别最后的一道工序
            }
            else if (basic.PRODUCTTYPE.Equals(EnumGeter.ProductType.kaiguanzhijia.GetHashCode().ToString()))
            {
                proCode = "B9G";
                product.CURRENTPROCESS = EnumGeter.ProcessType.chaoshengbohanjie.GetHashCode().ToString();//需要读取该类别最后的一道工序
            }
          //if (basic.PRODUCTTYPE.Equals(EnumGeter.ProductType.qinangzhijia.GetHashCode().ToString()))
          //{
          //    proCode += Convert.ToDateTime(DateTime.Now).ToString("yyMMddHHmmss");
          //    proCode += ClientContext.LoginInfo.EmployeeNo;
          //    proCode += machine.MACHINENUM;
          //    proCode += Convert.ToDateTime(DateTime.Now).ToString("ff"); ;//获取流水已经精确到秒了还要流水?
          //}
          //else
          //{
          //    proCode += Convert.ToDateTime(DateTime.Now).ToString("yyMMddHHmm");
          //    proCode += machine.MACHINENUM;
          //    proCode += ClientContext.LoginInfo.EmployeeNo;
          //    proCode += Convert.ToDateTime(DateTime.Now).ToString("ssff"); ;//获取流水已经精确到秒了还要流水?
          //}
          proCode += "0";//供应商码
          proCode += DateTime.Now.ToString("yyMMddHHmmss");//年月日小时分钟秒
          proCode += ClientContext.produceShift.PRODUCESHIFTTCODE;//班次
          proCode += "24A";//颜色代码
          proCode += "01";//操作者代码
            product.PRODUCTTYPE = basic.PRODUCTTYPE;
            product.PRODUCTSOURCE = EnumGeter.PRODUCTSOURCE.SELFMADE.GetHashCode().ToString();
            product.PRODUCTCODE = proCode;//需要生成条码
            //骨架注塑条码规则,列如条码号B9A14081403301664950,其中B9A表示骨架注塑,140814表示日期,0330表示时间精确到秒,1表示机器号,66表示操作员号,4950表示流水号。
            //气囊支架注塑条码规则,列如条码号B9D14081403301664950,其中B9D表示气囊支架注塑,140814表示日期,0330表示时间精确到秒,1表示机器号,66表示操作员号,4950表示流水号。
            //开关支架包装盒条码规则:例如2015060908012511,其中2015表示年,06表示月,09表示日期,08表示小时,01表示分钟,25表示秒,11表示操作者号。
            //风道注塑条码规则,例如条码号B9B14081403301664950,其中B9B表示风道注塑,140814表示日期,0330表示时间精确到分钟,1表示机器号,66表示操作员号,4950表示流水号。
            //HUD风道注塑条码规则,例如条码号B9C14081403301664950,其中B9C表示HUD风道注塑,140814表示日期,0330表示时间精确到分钟,1表示机器号,66表示操作员号,4950表示流水号。
            MachineInfo machineInfo = this.comMachineCode.SelectedItem as MachineInfo;
            product.MACHINECODDE = machineInfo.MACHINECODDE;
            product.MACHINENAME = machineInfo.MACHINENAME;
            product.PRODUCESHIFTNAME = ClientContext.produceShift.PRODUCESHIFTNAME;//班组
            product.PRODUCESHIFTTCODE = ClientContext.produceShift.PRODUCESHIFTTCODE;//班组
            product.PRODUCTTYPE = basic.PRODUCTTYPE;
            product.STATUS = EnumGeter.PRODUCTSTAUTS.QUALIFIED.GetHashCode().ToString();
            product.PRODUCELINE = EnumGeter.PRODUCELINE.B9.ToString();
            product.OUTFLAG = EnumGeter.PRODUCTOUTFLAG.INLIBRARY.GetHashCode().ToString();
            product.USINGSTATE = EnumGeter.PRODUCTUSESTATE.UNUSED.GetHashCode().ToString();
            product.CAPACITY = Convert.ToInt32(this.txtCount.Text);
            product.USINGCOUNT = 0;
            #endregion

            #region 保存
            QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
            DataResult<int> result;//判断是否成功
            if (string.IsNullOrEmpty(product.PID) == true)
            {
                result = agent.InvokeServiceFunction<DataResult<int>>(B9BasicService.ProductBLL_InsertForBundle.ToString(), product);
            }
            else
            {
                result = agent.InvokeServiceFunction<DataResult<int>>(B9BasicService.ProductBLL_Update.ToString(), product);
            }
  
            //保存成功
            if (result.IsSuccess)
            {
                QM.Assist.LabelInfo ll = new QM.Assist.LabelInfo();
                ll.BarCode = proCode + ",*" + proCode + "*";
                QM.Assist.PrintUtil.LabelList2.Add(ll);
                QM.Assist.PrintUtil pu = new QM.Assist.PrintUtil();
                pu.PrintLabel2(System.Configuration.ConfigurationManager.AppSettings["proPath"].ToString
                    (), System.Configuration.ConfigurationManager.AppSettings[basic.PRODUCTTYPE + "temPath"].ToString
                    (), System.Configuration.ConfigurationManager.AppSettings[basic.PRODUCTTYPE + "dataPath"].ToString
                    ());

                product = new Product();
                SetSearchModel();
                this.pager1.Init();
                BindGirdData();
            }
            else
            {
                MessageBox.Show(result.Msg);
            }
            #endregion
        }

        /// <summary>
        /// 编辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tsbEdit_Click(object sender, EventArgs e)
        {
            if (this.DGView.SelectedRows.Count > 0)
            {
                //获取ID
                string selectKey = this.DGView.SelectedRows[0].Cells["Pid"].Value.ToString();
                Product searchModel = new Product();
                searchModel.PID = selectKey;
                //获取实体
                QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
                product = agent.InvokeServiceFunction<Product>(B9BasicService.ProductBLL_Get.ToString(), searchModel);
                //显示到界面
                this.comProType.SelectedValue = product.PRODUCTTYPE;
                this.txtCount.Text = product.CAPACITY.ToString();
            }
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tsbDelete_Click(object sender, EventArgs e)
        {
            if (this.DGView.SelectedRows.Count <= 0)
                return;
            if (MessageBox.Show(Resource1.ConfirmDelete, Resource1.ConfirmTitle, MessageBoxButtons.OKCancel) != DialogResult.OK)
                return;
            #region 删除
            string selectKey = this.DGView.SelectedRows[0].Cells["Pid"].Value.ToString();
            //删除校验判断该投料批次号是否已经生产出产品,如果已生产出产品则不允许删除,如果不允许则弹出提示'该批次号物料已使用,不能删除!'
            QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
            DataResult<int> result = agent.InvokeServiceFunction<DataResult<int>>(B9BasicService.ProductBLL_Delete.ToString(), selectKey);
            MessageBox.Show(result.Msg);
            if (result.IsSuccess)
            {
                BindGirdData();
            }
            #endregion

        }

        ///<summary>
        ///错误检测
        ///</summary>
        ///<returns></returns>
        private string ErrorCheck()
        {
            #region
            string strMessage = "";
            //设备
            if (this.comProType.SelectedValue == null || this.comProType.SelectedValue == string.Empty)
            {
                strMessage += Resource1.ProductTypeNullValidate + "\r\n";
            }
            //重量
            if (this.txtCount.Text == string.Empty)
            {
                strMessage += Resource1.NumNullValidate + "\r\n";
            }
            else
            {
                if (SysValidate.IsInt(txtCount.Text.Trim()) == false)
                {
                    strMessage += Resource1.NumFormatValidate + "\r\n";
                }
            }
            return strMessage;
            #endregion
        }

        private void tsbPrint_Click(object sender, EventArgs e)
        {
            if (this.DGView.SelectedRows.Count <= 0)
                return;
            string barCode = this.DGView.SelectedRows[0].Cells["PRODUCTCODE"].Value.ToString(); ;
            string type = this.DGView.SelectedRows[0].Cells["PRODUCTTYPE"].Value.ToString(); 
            //string xmlPath = @"D:/项目文件夹/FJC_CC_B9/truck/B9/ServicesCenter/WCF/EQUIPINTERFACETEST/Biaopi.xml";
            //BarcodeLib.BarCodeGenerate generate = new BarcodeLib.BarCodeGenerate();
            //generate.PrintBarCode(barCode, xmlPath);
            QM.Assist.LabelInfo ll = new QM.Assist.LabelInfo();
            ll.BarCode = barCode + ",*" + barCode + "*";
            QM.Assist.PrintUtil.LabelList2.Add(ll);
            QM.Assist.PrintUtil pu = new QM.Assist.PrintUtil();
            pu.PrintLabel2(System.Configuration.ConfigurationManager.AppSettings["proPath"].ToString
                (), System.Configuration.ConfigurationManager.AppSettings[type +"temPath"].ToString
                (), System.Configuration.ConfigurationManager.AppSettings[type +"dataPath"].ToString
                ());
        }
    }
}