using Newtonsoft.Json.Linq;
using Pub_Class;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Web.Http;
using WebAPI.Models;
namespace WebAPI.Controllers
{
    //工序流转卡Controller
    public class Sc_ProcessExchangeBillController : ApiController
    {
        public DBUtility.ClsPub.Enum_BillStatus BillStatus;
        private json objJsonResult = new json();
        SQLHelper.ClsCN oCN = new SQLHelper.ClsCN();
        DataSet ds;
        /// 
        /// 新增单据-保存按钮
        ///参数:string sql。
        ///返回值:object。
        /// 
        [Route("Sc_ProcessExchangeBill/AddBill")]
        [HttpPost]
        public object AddBill([FromBody] JObject sMainSub)
        {
            var _value = sMainSub["sMainSub"].ToString();
            string msg1 = _value.ToString();
            //保存单据
            return objJsonResult = AddBillMain(msg1);
        }
        public json AddBillMain(string msg1)
        {
            string[] sArray = msg1.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            string msg2 = sArray[0].ToString();
            string msg3 = sArray[1].ToString();
            bool bResult;
            try
            {
                msg2 = "[" + msg2.ToString() + "]";
                List mainList = Newtonsoft.Json.JsonConvert.DeserializeObject>(msg2);
                DAL.ClsSc_ProcessExchangeBill BillNew = new DAL.ClsSc_ProcessExchangeBill();
                //判断会计期是否合理
                string s = "";
                int sYear = 0;
                int sPeriod = 0; 
                DateTime HDate = mainList[0].HDate;//日期
                if (DBUtility.Xt_BaseBillFun.Fun_AllowYearPeriod(HDate, ref sYear, ref sPeriod, ref s) == false)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = s;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                BillNew.omodel.HInterID = mainList[0].HInterID;//递入type得到的单据ID
                BillNew.omodel.HYear = sYear;
                BillNew.omodel.HPeriod = sPeriod;
                BillNew.omodel.HBillNo = mainList[0].HBillNo;//递入type得到的单据号
                BillNew.omodel.HDate = HDate;
                BillNew.omodel.HRemark = mainList[0].HRemark;//备注
                BillNew.omodel.HMaker = mainList[0].HMaker;
                BillNew.omodel.HWWOrderInterID = ClsPub.isLong(mainList[0].HWWOrderInterID);
                BillNew.omodel.HWWOrderEntryID = ClsPub.isLong(mainList[0].HWWOrderEntryID);
                BillNew.omodel.HWWOrderBillNo = ClsPub.isStrNull(mainList[0].HWWOrderBillNo);
                BillNew.omodel.HICMOInterID = ClsPub.isLong(mainList[0].HICMOInterID);
                BillNew.omodel.HICMOEntryID = ClsPub.isLong(mainList[0].HICMOEntryID);
                BillNew.omodel.HICMOBillNo = ClsPub.isStrNull(mainList[0].HICMOBillNo);
                BillNew.omodel.HMaterID2 = ClsPub.isLong(mainList[0].HMaterID2);
                BillNew.omodel.HMaterID = ClsPub.isLong(mainList[0].HMaterID);
                BillNew.omodel.HMaterNumber = ClsPub.isStrNull(mainList[0].HMaterNumber);
                BillNew.omodel.HBatchNo = ClsPub.isStrNull(mainList[0].HBatchNo);
                BillNew.omodel.HUnitID = ClsPub.isLong(mainList[0].HUnitID);
                BillNew.omodel.HUnitNumber = ClsPub.isStrNull(mainList[0].HUnitNumber);
                BillNew.omodel.HPlanQty = ClsPub.isDoule(mainList[0].HPlanQty);
                BillNew.omodel.HQty = ClsPub.isDoule(mainList[0].HQty);
                BillNew.omodel.HPlanBeginDate = ClsPub.isDate(mainList[0].HPlanBeginDate);
                BillNew.omodel.HPlanEndDate = ClsPub.isDate(mainList[0].HPlanEndDate);
                BillNew.omodel.HExplanation = ClsPub.isStrNull(mainList[0].HExplanation);
                BillNew.omodel.HInnerBillNo = ClsPub.isStrNull(mainList[0].HInnerBillNo);
                BillNew.omodel.HWorkShopID = ClsPub.isLong(mainList[0].HWorkShopID);
                BillNew.omodel.HSupID = ClsPub.isLong(mainList[0].HSupID);
                BillNew.omodel.HBLFlag = mainList[0].HBLFlag;
                BillNew.omodel.HMainMaterID = ClsPub.isLong(mainList[0].HMainMaterID);
                BillNew.omodel.HKeyMaterID = ClsPub.isLong(mainList[0].HKeyMaterID);
                BillNew.omodel.HOrderProcNO = ClsPub.isStrNull(mainList[0].HOrderProcNO);
                BillNew.omodel.HEquipMentID = ClsPub.isLong(mainList[0].HEquipMentID);
                BillNew.omodel.HMateOutBatchNo = ClsPub.isStrNull(mainList[0].HMateOutBatchNo);
                BillNew.omodel.HProjectNum = ClsPub.isStrNull(mainList[0].HProjectNum);
                BillNew.omodel.HProdMaterCode = ClsPub.isStrNull(mainList[0].HProdMaterCode);
                BillNew.omodel.HSeOrderBillNo = ClsPub.isStrNull(mainList[0].HSeOrderBillNo);
                BillNew.omodel.HCusShortName = ClsPub.isStrNull(mainList[0].HCusShortName);
                BillNew.omodel.HCusNeedMaterial = ClsPub.isStrNull(mainList[0].HCusNeedMaterial);
                BillNew.omodel.HPlanSendGoodsDate = ClsPub.isStrNull(mainList[0].HPlanSendGoodsDate);
                BillNew.omodel.HProdMaterName = ClsPub.isStrNull(mainList[0].HProdMaterName);
                BillNew.omodel.HCusName = ClsPub.isStrNull(mainList[0].HCusName);
                BillNew.omodel.HWorkRemark = ClsPub.isStrNull(mainList[0].HWorkRemark);
                BillNew.omodel.HImportNote = ClsPub.isStrNull(mainList[0].HImportNote);
                BillNew.omodel.HMaterNumber_A = ClsPub.isStrNull(mainList[0].HMaterNumber_A);
                BillNew.omodel.HMaterNumber_B = ClsPub.isStrNull(mainList[0].HMaterNumber_B);
                BillNew.omodel.HMaterNumber_C = ClsPub.isStrNull(mainList[0].HMaterNumber_C);
                BillNew.omodel.HMaterNumber_D = ClsPub.isStrNull(mainList[0].HMaterNumber_D);
                BillNew.omodel.HProdType = ClsPub.isStrNull(mainList[0].HProdType);
                BillNew.omodel.HMaterShortName = ClsPub.isStrNull(mainList[0].HMaterShortName);
                BillNew.omodel.HMaterIDA = ClsPub.isStrNull(mainList[0].HMaterIDA);
                BillNew.omodel.HMaterIDB = ClsPub.isStrNull(mainList[0].HMaterIDB);
                BillNew.omodel.HMaterIDC = ClsPub.isStrNull(mainList[0].HMaterIDC);
                BillNew.omodel.HMaterIDD = ClsPub.isStrNull(mainList[0].HMaterIDD);
                List subList = Newtonsoft.Json.JsonConvert.DeserializeObject>(msg3);
                BillNew.DetailColl = new List();
                for (int i = 0; i < subList.ToArray().Length; i++)
                {
                    if (DBUtility.ClsPub.isInt(subList[i].HProcID) != 0)//HQty
                    {
                        Model.ClsSc_ProcessExchangeBillSub oSub = new Model.ClsSc_ProcessExchangeBillSub();
                        oSub.HEntryID = i;
                        oSub.HRemark = DBUtility.ClsPub.isStrNull(subList[i].HRemark);
                        oSub.HSourceInterID = ClsPub.isLong(mainList[0].HICMOInterID);
                        oSub.HSourceEntryID = ClsPub.isLong(mainList[0].HICMOEntryID);
                        oSub.HSourceBillType = "85";
                        oSub.HSourceBillNo = ClsPub.isStrNull(mainList[0].HICMOBillNo);
                        oSub.HRelationQty = DBUtility.ClsPub.isDoule(subList[i].HRelationQty);
                        //oSub.HRelationQty_In = DBUtility.ClsPub.isDoule(subList[i].HRelationQty_In);
                        //oSub.HRelationQty_Out = DBUtility.ClsPub.isDoule(subList[i].HRelationQty_Out);
                        //oSub.HRelationQty_WWOrder = DBUtility.ClsPub.isDoule(subList[i].HRelationQty_WWOrder);
                        //oSub.HRelationQty_Bad = DBUtility.ClsPub.isDoule(subList[i].HRelationQty_Bad);
                        oSub.HRelationMoney = DBUtility.ClsPub.isDoule(subList[i].HRelationMoney);
                        oSub.HCloseMan = DBUtility.ClsPub.isStrNull(subList[i].HCloseMan);
                        oSub.HEntryCloseDate = DBUtility.ClsPub.isDate(subList[i].HEntryCloseDate);
                        oSub.HCloseType = DBUtility.ClsPub.isBool(subList[i].HCloseType);
                        oSub.HQty = DBUtility.ClsPub.isDoule(subList[i].HQty);
                        if (oSub.HQty <= 0)
                        {
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = "第" + ClsPub.isStrNull(i + 1) + "行,流转卡数量不能为0或者小于0";
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                        oSub.HProcNo = DBUtility.ClsPub.isLong(subList[i].HProcNo);
                        if (oSub.HProcNo <= 0)
                        {
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = "第" + ClsPub.isStrNull(i + 1) + "行,流水号不能为0或者小于0";
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                        oSub.HProcID = DBUtility.ClsPub.isLong(subList[i].HProcID);
                        oSub.HProcNumber = DBUtility.ClsPub.isStrNull(subList[i].HProcNumber);
                        oSub.HWorkRemark = DBUtility.ClsPub.isStrNull(subList[i].HWorkRemark);
                        oSub.HCenterID = DBUtility.ClsPub.isLong(subList[i].HCenterID);
                        oSub.HDeptID = DBUtility.ClsPub.isLong(subList[i].HDeptID);
                        oSub.HDeptNumber = DBUtility.ClsPub.isStrNull(subList[i].HDeptNumber);
                        ////oSub.HGroupID = DBUtility.ClsPub.isLong(grdMain.Rows[i].Cells[HGroupIDCol].Value);
                        oSub.HGroupNumber = DBUtility.ClsPub.isStrNull(subList[i].HGroupNumber);
                        oSub.HWorkerID = DBUtility.ClsPub.isLong(subList[i].HWorkerID);
                        oSub.HWorkerNumber = DBUtility.ClsPub.isStrNull(subList[i].HWorkerNumber);
                        oSub.HSourceID = DBUtility.ClsPub.isLong(subList[i].HSourceID);
                        oSub.HTimeUnit = DBUtility.ClsPub.isStrNull(subList[i].HTimeUnit);
                        oSub.HPlanWorkTimes = DBUtility.ClsPub.isSingle(subList[i].HPlanWorkTimes);
                        oSub.HPlanBeginDate = DBUtility.ClsPub.isDate(subList[i].HPlanBeginDate);
                        oSub.HPlanEndDate = DBUtility.ClsPub.isDate(subList[i].HPlanEndDate);
                        oSub.HRelBeginDate = DBUtility.ClsPub.isDate(subList[i].HRelBeginDate);
                        oSub.HRelEndDate = DBUtility.ClsPub.isDate(subList[i].HRelEndDate);
                        oSub.HReadyTime = 0;
                        oSub.HQueueTime = 0;
                        oSub.HMoveTime = 0;
                        oSub.HBeginDayQty = DBUtility.ClsPub.isSingle(subList[i].HBeginDayQty);
                        oSub.HBeginFixQty = DBUtility.ClsPub.isSingle(subList[i].HBeginFixQty);
                        oSub.HFixWorkDays = DBUtility.ClsPub.isSingle(subList[i].HFixWorkDays);
                        oSub.HTrunWorkDays = DBUtility.ClsPub.isSingle(subList[i].HTrunWorkDays);
                        oSub.HReadyTimes = DBUtility.ClsPub.isSingle(subList[i].HReadyTimes);
                        oSub.HMyWorkDays = DBUtility.ClsPub.isSingle(subList[i].HMyWorkDays);
                        oSub.HOutPrice = DBUtility.ClsPub.isSingle(subList[i].HOutPrice);
                        oSub.HOutMoney = DBUtility.ClsPub.isSingle(subList[i].HOutMoney);
                        oSub.HLastProc = "否";
                        oSub.HFstProc = "否";
                        oSub.HKeyProc = DBUtility.ClsPub.isStrNull(subList[i].HKeyProc);
                        oSub.HSupID = DBUtility.ClsPub.isLong(subList[i].HSupID);
                        oSub.HSupFlag = DBUtility.ClsPub.isBool(subList[i].HSupFlag);
                        oSub.HBackProc = DBUtility.ClsPub.isBool(subList[i].HBackProc);
                        oSub.HEdit = DBUtility.ClsPub.isBool(subList[i].HEdit);
                        if (oSub.HCenterID == 0 && oSub.HSupFlag == false)
                        {
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = "第" + ClsPub.isStrNull(i + 1) + "行,工作中心或委外标记不能同时为空";
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                        oSub.HICMOBillNo = DBUtility.ClsPub.isStrNull(subList[i].HICMOBillNo);
                        oSub.HICMOInterID = DBUtility.ClsPub.isLong(subList[i].HICMOInterID);
                        oSub.HSeOrderInterID = DBUtility.ClsPub.isLong(subList[i].HSeOrderInterID);
                        oSub.HSeOrderEntryID = DBUtility.ClsPub.isLong(subList[i].HSeOrderEntryID);
                        oSub.HSeOrderBillNo = DBUtility.ClsPub.isStrNull(subList[i].HSeOrderBillNo);
                        oSub.HWWOrderInterID = DBUtility.ClsPub.isLong(subList[i].HWWOrderInterID);
                        oSub.HWWOrderEntryID = DBUtility.ClsPub.isLong(subList[i].HWWOrderEntryID);
                        oSub.HWWOrderBillNo = DBUtility.ClsPub.isStrNull(subList[i].HWWOrderBillNo);
                        oSub.HSumPassRate = DBUtility.ClsPub.isSingle(subList[i].HSumPassRate);
                        oSub.HPassRate = DBUtility.ClsPub.isSingle(subList[i].HPassRate);
                        oSub.HOverRate = DBUtility.ClsPub.isDoule(subList[i].HOverRate);
                        oSub.HMaxQty = DBUtility.ClsPub.isDoule(subList[i].HMaxQty);
                        oSub.HTechnologyParameter = DBUtility.ClsPub.isStrNull(subList[i].HTechnologyParameter);
                        oSub.HPicNum = DBUtility.ClsPub.isStrNull(subList[i].HPicNum);
                        oSub.HProcCheckNote = DBUtility.ClsPub.isStrNull(subList[i].HProcCheckNote);
                        BillNew.DetailColl.Add(oSub);
                    }
                }
                //保存完毕后处理
                //if (BillStatus == DBUtility.ClsPub.Enum_BillStatus.BillStatus_AddNew)
                //{
                //    bResult = BillNew.AddBill(ref ClsPub.sExeReturnInfo);
                //}
                //else
                //{
                //    bResult = BillNew.ModifyBill(BillNew.omodel.HInterID, ref ClsPub.sExeReturnInfo);
                //}
                bResult = BillNew.AddBill(ref ClsPub.sExeReturnInfo);
                //提示
                if (bResult == true)
                {
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    //objJsonResult.Message = "单据存盘完毕!单据号:" + mainList[0].HBillNo.Trim();
                    objJsonResult.Message = ClsPub.sExeReturnInfo+"单据号:" + mainList[0].HBillNo.Trim();
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "保存失败!原因:" + ClsPub.sExeReturnInfo;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        /// 
        /// 返回生产任务单明细行
        /// 
        /// 生产任务单ID
        /// object
        [Route("Sc_ProcessExchangeBill/GetICMOBillDetail")]
        [HttpGet]
        public object GetICMOBillDetail(int hmainid,int OrganizationID)
        {
            try
            {
                if (hmainid == 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "生产任务单ID为0!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                ds = oCN.RunProcReturn("select * from h_v_Sc_ICMOBillListDetail where hmainid=" + hmainid + " and HSTOCKINORGID="+ OrganizationID, "h_v_Sc_ICMOBillListDetail");
                if (ds == null || ds.Tables[0].Rows.Count == 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "此生产任务单无明细行!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else
                {
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "Sucess!";
                    objJsonResult.data = ds.Tables[0];
                    return objJsonResult;
                }
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        //
    }
}