using Model;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPI;
using WebAPI.Models;
namespace WebAPI.Controllers
{
    public class MoveStockBillController : ApiController
    {
        public DBUtility.ClsPub.Enum_BillStatus BillStatus;
        public Int64 HCusID;//客户ID
        public Int64 HDeptID;//部门ID
        public Int64 HWHID;//仓库ID
        public Int64 HSPID;//仓位ID
        public string HCusName;
        public string HDeptName;
        public string HWHName;
        public string HSPName;
        public Int64 HInterID;//本单ID
        public string HBillNo;
        public string HSourceBillNo;
        public string HSourceBillType;
        public string HBillType = "1207";//单据类型
        public string sBillCode = "ICStockBill";
        public string sTranType = "41";
        public bool sRedBlueFlag = false;
        public bool SourceFlag = false;
        public bool sCheckflag = false;
        public Int64 sThirdMaterID = 0;
        public string sHSourceBillType = "3720";
        public int iCount = 0;      //查询次数
        public bool bFirst = false;
        public bool sGridClick = false;
        public WebServer webserver = new WebServer();
        public DataSet ds = new DataSet();
        public ClsGy_BarCodeBill_WMS_Model_View oView = new ClsGy_BarCodeBill_WMS_Model_View();
        public ClsKF_PonderationBillMain_Temp model = new ClsKF_PonderationBillMain_Temp();
        private JsonResult objJsonResult = new JsonResult();
        private json objjson = new json();
        /// 
        /// 调拨单/返回出入库条码临时表/直接调用webservice
        /// 
        /// 
        [Route("MoveStockBill/DisBillEntryList_Webs_Json")]
        [HttpGet]
        public object DisBillEntryList_Webs_Json(long HBillID, string HBillType, string sWhere)
        {
            try
            {
                WebS.WebService1 oWebs = new WebS.WebService1();
                //ds = webserver.GetKf_PonderationBillMain_Temp(HBillID, HBillType, sWhere);
                ds = oWebs.GetKf_PonderationBillMain_Temp(HBillID, HBillType, sWhere);
                if (ds == null || ds.Tables[0].Rows.Count <= 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "没有返回任何记录!";
                    objJsonResult.data = null;
                    return objJsonResult;
                    //DBUtility.ClsPub.MessageBeep((int)DBUtility.ClsPub.BeepType.Warning);
                }
                else
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "获取信息成功!";
                    objJsonResult.data = ds.Tables[0];
                    return objJsonResult;
                }
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "没有返回任何记录!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        /// 
        /// 调拨单/扫条码
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        //[Route("MoveStockBill/get_InfoByBarCode_Source_Json")]
        //[HttpGet]
        //public object get_InfoByBarCode_Source_Json(string sCode, Int64 sInterID, string sBillNo, Double sQty, Int64 HWHID, Int64 HSPID, Int64 SCWhID, Int64 SCSPID)
        //{
        //    try
        //    {
        //        WebS.ClsKF_PonderationBillMain_Temp model = new WebS.ClsKF_PonderationBillMain_Temp();
        //        string sErrMsg = "";
        //        bool sBool = false;
        //        double sRelQty = 0;
        //        oView = webserver.get_InfoByBarCode_Source(sCode, sInterID, ref sBool, ref DBUtility.ClsPub.sErrInfo);
        //        if (oView == null)
        //        {
        //            objJsonResult.code = "0";
        //            objJsonResult.count = 0;
        //            objJsonResult.Message = "单据号:" + sBillNo + ",单据ID:" + sInterID + ";" + DBUtility.ClsPub.sErrInfo;
        //            objJsonResult.data = null;
        //            return objJsonResult;
        //        }
        //        if (oView.HBarCodeType == "唯一条码" && sQty > 0 && oView.HQty < sQty)
        //        {
        //            sRelQty = oView.HQty;
        //        }
        //        else if (sQty > 0)
        //        {
        //            sRelQty = sQty;
        //        }
        //        else
        //        {
        //            sRelQty = oView.HQty;
        //        }
        //        model.HInterID = DBUtility.ClsPub.isLong(sInterID);
        //        model.HBillNo = DBUtility.ClsPub.isStrNull(sBillNo);
        //        model.HBillType = this.HBillType;
        //        model.HMaker = DBUtility.ClsPub.CurUserName;
        //        //
        //        model.HMaterID = oView.HMaterID;
        //        model.HAuxPropID = oView.HAuxPropID;
        //        model.HErpClsID = oView.HErpClsID;
        //        model.HQty = oView.HQty;
        //        model.HQtyMust = oView.HinitQty;
        //        model.HBarCode = oView.HBarCode;
        //        model.HBatchNo = oView.HBatchNo;
        //        model.HMTONo = oView.HMTONo;
        //        model.HWhID = DBUtility.ClsPub.isLong(HWHID);
        //        model.HStockPlaceID = DBUtility.ClsPub.isLong(HSPID);
        //        model.HSCWHID = SCWhID;
        //        model.HOutStockPlaceID = SCSPID;
        //        //model.HVDAPack = txtHVDAPack2.Text.Trim();
        //        //model.HVDAMaterNum = txtHVDAMaterID.Text.Trim();
        //        //model.HVDAQty = DBUtility.ClsPub.ObjToDouble(txtHVDAQty.Text.Trim());
        //        //
        //        model.HSourceInterID = oView.HSourceInterID;
        //        model.HSourceEntryID = oView.HSourceEntryID;
        //        model.HSourceBillNo = oView.HSourceBillNo;
        //        model.HSourceBillType = oView.HSourceBillType;
        //        model.HRedBlueFlag = false;
        //        model.HPieceQty = 1;
        //        //model.HSTOCKORGID = DBUtility.ClsPub.HORGANIZATIONSID;
        //        //model.HOWNERID = DBUtility.ClsPub.HORGANIZATIONSID;
        //        WebS.WebService1 oWebs = new WebS.WebService1();
        //        //if (webserver.set_SavePonderationBillMain_Temp_Qty(model, sQty, ref DBUtility.ClsPub.sErrInfo))
        //        bool flag = oWebs.Get_CheckQtyByBarCode_GetWhAndSP(model.HInterID, model.HBillType, model.HBarCode, ref SCWhID, ref SCSPID, sRelQty, ref sRelQty);
        //        if (flag)
        //        {
        //            sQty = sRelQty;
        //        }
        //        else if (sRelQty == 0)
        //        {
        //            objJsonResult.code = "0";
        //            objJsonResult.count = 0;
        //            objJsonResult.Message = "无库存!";
        //            objJsonResult.data = null;
        //            return objJsonResult;
        //        }
        //        else
        //        {
        //            sQty = sRelQty;
        //        }
        //        if (oWebs.set_SavePonderationBillMain_Temp_Qty(model, sQty, ref DBUtility.ClsPub.sErrInfo))
        //        {
        //            objJsonResult.code = "0";
        //            objJsonResult.count = 1;
        //            objJsonResult.Message = "扫码成功!";
        //            objJsonResult.data = null;
        //            return objJsonResult;
        //        }
        //        else
        //        {
        //            objJsonResult.code = "0";
        //            objJsonResult.count = 0;
        //            objJsonResult.Message = "扫码失败!" + DBUtility.ClsPub.sErrInfo;
        //            objJsonResult.data = null;
        //            return objJsonResult;
        //        }
        //    }
        //    catch (Exception)
        //    {
        //        throw;
        //    }
        //}
        /// 
        /// 调拨单/扫条码
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        [Route("MoveStockBill/get_InfoByBarCode_Source_Json")]
        [HttpGet]
        public object get_InfoByBarCode_Source_Json(string sCode, Int64 sInterID, string sBillNo, Double sQty, Int64 HWHID, Int64 HSPID, Int64 SCWhID, Int64 SCSPID, string HMaker, Int64 HOrgID)
        {
            try
            {
                DAL.ClsGy_BarCodeBill_View dal = new DAL.ClsGy_BarCodeBill_View();
                SQLHelper.ClsCN oCn = new SQLHelper.ClsCN();
                dal.GetInfoByNumber_View(sCode);
                if (dal.omodel_View.HBarCodeType != "托盘条码")
                {
                    return get_InfoByBarCode_Source_Json_s(sCode, sInterID, sBillNo, sQty, HWHID, HSPID, SCWhID, SCSPID, HMaker, HOrgID);
                }
                else
                {
                    //如果是雅琪诺则托盘条码分解并模拟扫码
                    //分解托条码得到明细条码信息写入出入库条码临时表
                    DataSet dsTBarCode;
                    string sBarCode_MX;
                    dsTBarCode = oCn.RunProcReturn("select b.HBarCode HBarCodeMX from Sc_PackUnionBillMain a  " +
                    " inner join Sc_PackUnionBillSub b on a.HInterID = b.HInterID " +
                    " Where a.HBarCode_Pack = '" + sCode + "'", "Sc_PackUnionBillMain");
                    if (dsTBarCode == null || dsTBarCode.Tables[0].Rows.Count == 0)
                    {
                        //sErrMsg = "没有找到托盘条码!";
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "扫码失败!没有找到托盘条码!";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    else
                    {
                        for (int i = 0; i < dsTBarCode.Tables[0].Rows.Count; i++)
                        {
                            sBarCode_MX = DBUtility.ClsPub.isStrNull(dsTBarCode.Tables[0].Rows[i]["HBarCodeMX"]);
                            objJsonResult = (JsonResult)get_InfoByBarCode_Source_Json_s(sBarCode_MX, sInterID, sBillNo, sQty, HWHID, HSPID, SCWhID, SCSPID, HMaker,HOrgID);
                            if (objJsonResult.code == "0")
                            {
                                return objJsonResult;
                            }
                        }
                        return objJsonResult;
                    }
                }
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "扫码失败!" + DBUtility.ClsPub.isStrNull(e);
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        public object get_InfoByBarCode_Source_Json_s(string sCode, Int64 sInterID, string sBillNo, Double sQty, Int64 HWHID, Int64 HSPID, Int64 SCWhID, Int64 SCSPID, string HMaker,Int64 HOrgID)
        {
            try
            {
                WebS.ClsKF_PonderationBillMain_Temp model = new WebS.ClsKF_PonderationBillMain_Temp();
                string sErrMsg = "";
                bool sBool = false;
                double sRelQty = 0;
                oView = webserver.get_InfoByBarCode_Source(sCode, sInterID, ref sBool, ref DBUtility.ClsPub.sErrInfo);
                if (oView == null)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "1-单据号:" + sBillNo + ",单据ID:" + sInterID + ";" + DBUtility.ClsPub.sErrInfo;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                if (oView.HBarCodeType == "唯一条码" && sQty > 0 && oView.HQty < sQty)
                {
                    sRelQty = oView.HQty;
                }
                else if (sQty > 0)
                {
                    sRelQty = sQty;
                }
                else
                {
                    sRelQty = oView.HQty;
                }
                model.HInterID = DBUtility.ClsPub.isLong(sInterID);
                model.HBillNo = DBUtility.ClsPub.isStrNull(sBillNo);
                model.HBillType = this.HBillType;
                model.HMaker = HMaker;
                //
                model.HMaterID = oView.HMaterID;
                model.HAuxPropID = oView.HAuxPropID;
                model.HErpClsID = oView.HErpClsID;
                model.HQty = oView.HQty;
                model.HQtyMust = oView.HinitQty;
                model.HBarCode = oView.HBarCode;
                model.HBatchNo = oView.HBatchNo;
                model.HMTONo = oView.HMTONo;
                model.HWhID = DBUtility.ClsPub.isLong(HWHID);
                model.HStockPlaceID = DBUtility.ClsPub.isLong(HSPID);
                model.HSCWHID = SCWhID;
                model.HOutStockPlaceID = SCSPID;
                //model.HVDAPack = txtHVDAPack2.Text.Trim();
                //model.HVDAMaterNum = txtHVDAMaterID.Text.Trim();
                //model.HVDAQty = DBUtility.ClsPub.ObjToDouble(txtHVDAQty.Text.Trim());
                //
                model.HSourceInterID = oView.HSourceInterID;
                model.HSourceEntryID = oView.HSourceEntryID;
                model.HSourceBillNo = oView.HSourceBillNo;
                model.HSourceBillType = oView.HSourceBillType;
                model.HRedBlueFlag = false;
                model.HPieceQty = 1;
                model.HSTOCKORGID = HOrgID;
                model.HOWNERID = HOrgID;
                WebS.WebService1 oWebs = new WebS.WebService1();
                //if (webserver.set_SavePonderationBillMain_Temp_Qty(model, sQty, ref DBUtility.ClsPub.sErrInfo))
                bool flag = oWebs.Get_CheckQtyByBarCode_GetWhAndSP(model.HInterID, model.HBillType, model.HBarCode, ref SCWhID, ref SCSPID, sRelQty, ref sRelQty);
                if (flag)
                {
                    //sQty = sRelQty;
                    model.HSCWHID = SCWhID;
                    model.HOutStockPlaceID = SCSPID;
                    if(SCWhID<=0)
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "1-仓库无库存!";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
                else if (sRelQty == 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "2-无库存!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                if (oWebs.set_SavePonderationBillMain_Temp_Qty(model, sQty, ref DBUtility.ClsPub.sErrInfo))
                {
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "3-扫码成功!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "4-扫码失败!" + DBUtility.ClsPub.sErrInfo;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// 
        /// 生成调拨单
        /// 
        /// 
        [Route("MoveStockBill/set_SaveMoveStockBill_Json")]
        [HttpPost]
        public object set_SaveMoveStockBill_Json([FromBody]JObject oMain)
        {
            var _value = oMain["oMain"].ToString();
            string msg1 = _value.ToString();
            //List lsmain = new List();
            //ListModels oListModels = new ListModels();
            //lsmain = oListModels.getMoveStockBillMainByJson(msg1);
            //lsmain[0].HYear = DBUtility.ClsPub.isLong(DateTime.Now.Year);
            //lsmain[0].HDate = DBUtility.ClsPub.isDate(DateTime.Now.ToString("yyyy-MM-dd"));
            //string sSourceBillType = lsmain[0].HBillType;
            //BLL.ClsKf_MoveStockBill bll = new BLL.ClsKf_MoveStockBill();
            //return bll.set_SaveMoveStockBill(lsmain[0], sSourceBillType, ref DBUtility.ClsPub.sErrInfo);
            try
            {
                List lsmain = new List();
                ListModels oListModels = new ListModels();
                lsmain = oListModels.getMoveStockBillMainByJson(msg1);
                lsmain[0].HYear = DBUtility.ClsPub.isLong(DateTime.Now.Year);
                lsmain[0].HDate = DBUtility.ClsPub.isDate(DateTime.Now.ToString("yyyy-MM-dd"));
                string sSourceBillType = lsmain[0].HBillType;
                //string sSourceBillType = "-1";
                WebAPI.WebS.ClsKf_MoveStockBillMain websLsmain = new WebS.ClsKf_MoveStockBillMain();
                websLsmain.HInterID = lsmain[0].HInterID;
                websLsmain.HDate = lsmain[0].HDate;
                websLsmain.HBillNo = lsmain[0].HBillNo;
                websLsmain.HDeptID = lsmain[0].HDeptID;
                websLsmain.HEmpID = lsmain[0].HEmpID;
                websLsmain.HRemark = lsmain[0].HRemark;
                websLsmain.HMaker = lsmain[0].HMaker;
                websLsmain.HWHID = lsmain[0].HWHID;
                websLsmain.HSCWHID = lsmain[0].HSCWHID;
                websLsmain.HKeeperID = lsmain[0].HKeeperID;
                websLsmain.HSecManagerID = lsmain[0].HSecManagerID;
                websLsmain.HManagerID = 0;
                websLsmain.HBillerID = 0;
                websLsmain.HExplanation = "";
                websLsmain.HInnerBillNo = "";
                websLsmain.HRedBlueFlag = true;
                websLsmain.HMainSourceBillType = "-1";
                websLsmain.HStockStyle = "";
                websLsmain.HBillType = "1207";
                websLsmain.HSupID = 0;
                //websLsmain.HGroupID = lsmain[0].HGroupID;
                if (webserver.set_SaveMoveStockBill(websLsmain, "-1", ref DBUtility.ClsPub.sErrInfo))
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "生成调拨单成功!单据号为:";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else
                {
                    objJsonResult.code = "99";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "上传失败!" + DBUtility.ClsPub.sErrInfo;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
            }
            catch (Exception e)
            {
                objJsonResult.code = "3";
                objJsonResult.count = 0;
                objJsonResult.Message = "上传失败!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        /// 
        /// 
        /// 
        /// 
        [Route("MoveStockBill/GetKf_PonderationBillMain_Temp_Sum_Json")]
        [HttpGet]
        public Object GetKf_PonderationBillMain_Temp_Sum_Json(long HBillID, string HBillType, string sWhere)
        {
            try
            {
                ds = webserver.GetKf_PonderationBillMain_Temp_Sum(HBillID, HBillType, sWhere);
                if (ds == null || ds.Tables[0].Rows.Count <= 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "没有返回任何记录!";
                    objJsonResult.data = null;
                    return objJsonResult;
                    //DBUtility.ClsPub.MessageBeep((int)DBUtility.ClsPub.BeepType.Warning);
                }
                else
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "获取信息成功!";
                    objJsonResult.data = ds.Tables[0];
                    return objJsonResult;
                }
            }
            catch (Exception e)
            {
                
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "没有返回任何记录!"+e.ToString();
                    objJsonResult.data = null;
                    return objJsonResult;
            }
        }
        /// 
        /// 写入临时表  扫源单的方法
        /// 
        /// 
        /// 
        [Route("MoveStockBill/set_SavePonderationBillMain_Temp_Source_Fast_Json")]
        [HttpGet]
        public object set_SavePonderationBillMain_Temp_Source_Fast_Json(string HSourceBillType, string HSourceBillNo, Int64 sInterID, string sBillNo)
        {
            try
            {
                // DataSet ds = new DataSet();
                // WebServer webserver = new WebServer();
                string sWhere = " Where 单据号 like '%" + HSourceBillNo.Trim() + "%'";
                ds = webserver.GetSc_PPBomBillList(sWhere);
                if (ds == null || ds.Tables[0].Rows.Count <= 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "没有返回任何记录!";
                    objJsonResult.data = null;
                    return objJsonResult;
                    //DBUtility.ClsPub.MessageBeep((int)DBUtility.ClsPub.BeepType.Warning);
                }
                else
                {
                    //HSupID = DBUtility.ClsPub.isLong(ds.Tables[0].Rows[0]["HSupID"]);
                    //HSupName = Convert.ToString(ds.Tables[0].Rows[0]["HSupName"]);
                    HDeptID = DBUtility.ClsPub.isLong(ds.Tables[0].Rows[0]["HDeptID"]);
                    HDeptName = Convert.ToString(ds.Tables[0].Rows[0]["HDeptName"]);
                    if (webserver.set_SavePonderationBillMain_Temp_Source_Fast(sInterID, sBillNo, HBillType, HSourceBillNo, HSourceBillType, "蓝字", ref DBUtility.ClsPub.sErrInfo))
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 1;
                        objJsonResult.Message = "返回记录成功!";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    else
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "写入临时表失败!" + DBUtility.ClsPub.sErrInfo;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
            }
            catch (Exception ex)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "没有返回任何记录!" + ex.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        //删除记录
        [Route("MoveStock/Delete_Json")]
        [HttpGet]
        //public object Delete_Json(long sInterID, long sMaterID,long sAuxPropID,string sMTONo,long sSourceInterID,long sSourceEntryID,string sBillType)
        //{
        public object Delete_Json(long HInterID, long HMaterID, long HAuxPropID, string HMTONo, long HSourceInterID, long HSourceEntryID, string sHBillType)
        {
            string sErrMsg = string.Empty;
            try
            {
                //if (webserver.set_DelPonderationBillMain_Temp_InterIDAndSource(sInterID,sMaterID,sAuxPropID,sMTONo,sSourceInterID,sSourceEntryID,sBillType, ref sErrMsg))
                //{
                if (webserver.set_DelPonderationBillMain_Temp_InterIDAndSource(HInterID, HMaterID, HAuxPropID, HMTONo, HSourceInterID, HSourceEntryID, sHBillType, ref sErrMsg))
                {
                    objjson.code = "0";
                    objjson.count = 1;
                    objjson.Message = "删除成功!";
                    objjson.data = null;
                    return objjson;
                }
                else
                {
                    objjson.code = "0";
                    objjson.count = 0;
                    objjson.Message = "删除失败!";
                    objjson.data = null;
                    return objjson;
                }
            }
            catch (Exception)
            {
                objjson.code = "0";
                objjson.count = 0;
                objjson.Message = "删除失败!";
                objjson.data = null;
                return objjson;
            }
        }
    }
}