using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;

namespace SiaSun.LMS.Implement
{
    public class PlanImport:S_BaseService
    {
        public PlanImport()
        {
        }


        public bool PlanCreate(SiaSun.LMS.Model.PLAN_MAIN mPLAN_MAIN,
                               IList<SiaSun.LMS.Model.PLAN_LIST> lsPLAN_LIST,           
                              out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            int iReturn = 0;

            try
            {
                this._P_Base_House.BeginTransaction();

                if (null != this._P_PLAN_MAIN.GetModelPlanCode(mPLAN_MAIN.PLAN_CODE))
                {
                    bResult = false;

                    sResult = string.Format("{0}单号已经存在!", mPLAN_MAIN.PLAN_CODE);

                    return bResult;
                }

                this._P_PLAN_MAIN.Add(mPLAN_MAIN);



                foreach (SiaSun.LMS.Model.PLAN_LIST mPLAN_LIST in lsPLAN_LIST)
                {


                    if (mPLAN_LIST.PLAN_ID.Equals(0))
                    {
                        mPLAN_LIST.PLAN_ID = mPLAN_MAIN.PLAN_ID;
                        this._P_PLAN_LIST.Add(mPLAN_LIST);
                    }
                    else
                    {
                        this._P_PLAN_LIST.Update(mPLAN_LIST);
                    }
                }

                iReturn =  this.ExecuteNonQuery_ReturnInt(string.Format(" update u5wmcsinterface set wmi_status = '3' where wmi_taskno = '{0}'", mPLAN_MAIN.PLAN_CODE),"ERPMap");

            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;
            }
            finally
            {
                if (iReturn>0)
                {
                    this._P_Base_House.CommitTransaction();
                }
                else
                {
                    this._P_Base_House.RollBackTransaction();
                }
            }


            return bResult;
        }


        /// <summary>
        /// 导入模板中存在[物料类别编码],可在【物料导入】进行导入
        /// 导入模板中不存在[物料类别编码],可在【物料维护】指定类别导入
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool GoodsCreate(DataTable dt, int GOODS_CLASS_ID,out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            int rowaffect = 0;

            Model.GOODS_CLASS mGOODS_CLASS = null;

            try
            {
                if (GOODS_CLASS_ID != 0)
                {
                    mGOODS_CLASS = this._P_GOODS_CLASS.GetModel(GOODS_CLASS_ID);

                    if (mGOODS_CLASS==null)
                    {
                        sResult = string.Format("物料类别索引[{0}]不存在", GOODS_CLASS_ID);

                        bResult = false;

                        return bResult;
                    }
                }

                foreach (DataRow dr in dt.Rows)
                {
                    if (string.IsNullOrEmpty(dr["物料编码"].ToString()) || string.IsNullOrEmpty(dr["物料名称"].ToString()))
                        continue;

                    if (string.IsNullOrEmpty(dr["物料类别编码"].ToString()) && GOODS_CLASS_ID == 0)
                    {
                        bResult = false;
                        sResult = string.Format("模板中不存在[物料类别编码]");
                        return bResult;
                    }

                    Model.GOODS_MAIN mGOODS_MAIN = this._P_GOODS_MAIN.GetModel(dr["物料编码"].ToString());
                    string aa = dr["物料编码"].ToString();
                    if (GOODS_CLASS_ID == 0)
                    {
                        mGOODS_CLASS = this._P_GOODS_CLASS.GetModel(dr["物料类别编码"].ToString());

                        if (mGOODS_CLASS == null)
                        {
                            sResult = string.Format("物料类别编码[{0}]不存在,请先建立该类别", dr["物料类别编码"].ToString());

                            bResult = false;

                            break;
                        }
                    }

                    if (mGOODS_MAIN == null)
                    {
                        mGOODS_MAIN = new Model.GOODS_MAIN();

                        mGOODS_MAIN.GOODS_CLASS_ID = mGOODS_CLASS.GOODS_CLASS_ID;

                        mGOODS_MAIN.GOODS_CODE = dr["物料编码"].ToString();

                        mGOODS_MAIN.GOODS_NAME = dr["物料名称"].ToString();

                        mGOODS_MAIN.GOODS_UNITS = dr["单位"].ToString();

                       // mGOODS_MAIN.GOODS_CONST_PROPERTY1 = dr["物料状态"].ToString();

                        //mGOODS_MAIN.GOODS_CONST_PROPERTY2 = dr["制造商名称"].ToString();

                       // mGOODS_MAIN.GOODS_CONST_PROPERTY3 = dr["供应商名称"].ToString();

                        mGOODS_MAIN.GOODS_CONST_PROPERTY4 = dr["规格型号"].ToString();

                       // mGOODS_MAIN.GOODS_CONST_PROPERTY5 = dr["版本号"].ToString();

                        //mGOODS_MAIN.GOODS_CONST_PROPERTY6 = dr["出厂日期"].ToString();

                        //mGOODS_MAIN.GOODS_CONST_PROPERTY7 = dr["单价"].ToString();

                        //mGOODS_MAIN.GOODS_CONST_PROPERTY8 = dr["数量"].ToString();

                        mGOODS_MAIN.GOODS_FLAG = "1";

                        rowaffect += this._P_GOODS_MAIN.Add(mGOODS_MAIN);
                    }
                    else
                    {
                        mGOODS_MAIN.GOODS_CLASS_ID = mGOODS_CLASS.GOODS_CLASS_ID;

                        mGOODS_MAIN.GOODS_CODE = dr["物料编码"].ToString();

                        mGOODS_MAIN.GOODS_NAME = dr["物料名称"].ToString();

                        mGOODS_MAIN.GOODS_UNITS = dr["单位"].ToString();

                        mGOODS_MAIN.GOODS_CONST_PROPERTY1 = dr["规格型号"].ToString();

                        mGOODS_MAIN.GOODS_FLAG = "1";

                        rowaffect += this._P_GOODS_MAIN.Update(mGOODS_MAIN);
                    }
                }

                if (rowaffect > 0)
                {
                    sResult = string.Format("导入{0}条物料成功!", rowaffect);
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }

            return bResult;
        }
       
    }
}