using ICSSoft.Common;
using ICSSoft.Entity;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace ICSSoft.DataProject
{
    /// <summary>
    /// 使用中
    /// 销售模块
    /// </summary>
    public class ICSSalesService
    {
        private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        #region 销售出库
        /// <summary>
        /// 销售出库
        /// </summary>
        /// <param name="TransCode"></param>
        /// <param name="TransSequence"></param>
        /// <param name="Quantity"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="cmd"></param>
        public static void SalesShipmentDoc(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                string sql = @"DECLARE @Status VARCHAR(10)
                                SELECT @Status=a.Status FROM ICSSDN  a
                                WHERE a.SDNCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}' AND  a.Type='1'

                                IF (@Status IS NULL)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo139") + @"',16,1);
                                    RETURN
                                END
                                --ELSE IF (@Status!='2')
                                --BEGIN
	                                --RAISERROR('" + language.GetNameByCode("WMSAPIInfo140") + @"',16,1);
                                    --RETURN
                                --END
                                UPDATE a SET SDNQuantity=ISNULL(SDNQuantity,0)+'{2}'
                                FROM ICSSDN  a
                                WHERE a.SDNCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}' AND  a.Type='1'

                                IF EXISTS(SELECT a.ID FROM ICSSDN  a
	                                WHERE a.SDNCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND  a.Type='1' AND a.Quantity<a.SDNQuantity)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo091") + @"',16,1);
                                    RETURN
                                END";

                sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo141"));//"销售领料单更新失败!");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 销售出库接口
        /// </summary>
        /// <param name="TransType"></param>
        /// <param name="Identification"></param>
        /// <param name="cmd"></param>
        public static void SalesShipmentDocERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language, string BusinessCode)
        {
            try
            {
                #region 销售出库分两步操作 PDA扣减WMS库存但SAP不过账 PC端操作过账(EATTRIBUTE1字段作为标记可过账字段)
                string sql = @" select Distinct A.SDNCode,A.WorkPoint from ICSSDN A
                                LEFT JOIN ICSWareHouseLotInfoLog B ON B.TransCode=A.SDNCode AND B.WorkPoint=A.WorkPoint
                                where B.Identification='{0}' AND BusinessCode='19'";
                sql = string.Format(sql, Identification);
                DataTable dt = DBHelper.SQlReturnData(sql, cmd);
                if (dt.Rows.Count > 1)
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo202"));//单次提交单据数量卡控(只允许一张单据)
                }
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    string chksql = @"select SUM(Quantity) AS Quantity,SUM(SDNQuantity) AS SDNQuantity from ICSSDN
                                      where SDNCode='{0}' and WorkPoint='{1}'
                                      GROUP BY SDNCode,WorkPoint";
                    chksql = string.Format(chksql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                    DataTable chkdt = DBHelper.SQlReturnData(chksql, cmd);
                    if (Convert.ToDecimal(chkdt.Rows[0]["Quantity"]) == Convert.ToDecimal(chkdt.Rows[0]["SDNQuantity"]))
                    {
                        string updatesql = @"Update ICSSDN set EATTRIBUTE1='待过账' where SDNCode='{0}' AND WorkPoint='{1}'";
                        updatesql = string.Format(updatesql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        if (!DBHelper.ExecuteNonQuery(chksql, cmd))
                        {
                            throw new Exception(language.GetNameByCode("WMSAPIInfo141"));//"销售领料单更新失败!");
                        }
                    }
                }
                #endregion
                #region SAP(三层结构)
                //string IsSuccess = "";
                //string ErrorMessage = "";
                //string sql = @" select Distinct A.SDNCode,A.WorkPoint from ICSSDN A
                //                LEFT JOIN ICSWareHouseLotInfoLog B ON B.TransCode=A.SDNCode AND B.WorkPoint=A.WorkPoint
                //                where B.Identification='{0}' AND BusinessCode='19'";
                //sql = string.Format(sql, Identification);
                //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
                //if (dt.Rows.Count > 1)
                //{
                //    throw new Exception(language.GetNameByCode("WMSAPIInfo202"));//单次提交单据数量卡控(只允许一张单据)
                //}
                //for (int i = 0; i < dt.Rows.Count; i++)
                //{
                //    string chksql = @"select SUM(Quantity) AS Quantity,SUM(SDNQuantity) AS SDNQuantity from ICSSDN
                //                      where SDNCode='{0}' and WorkPoint='{1}'
                //                      GROUP BY SDNCode,WorkPoint";
                //    chksql = string.Format(chksql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                //    DataTable chkdt = DBHelper.SQlReturnData(chksql, cmd);
                //    if (Convert.ToDecimal(chkdt.Rows[0]["Quantity"]) == Convert.ToDecimal(chkdt.Rows[0]["SDNQuantity"]))
                //    {
                //        SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ Client = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ();
                //        SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ1 Info = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ1();
                //        List<SAPCallBackDispatchVPN.ZWMS_DO_HEAD> headlist = new List<SAPCallBackDispatchVPN.ZWMS_DO_HEAD>();
                //        SAPCallBackDispatchVPN.ZWMS_DO_HEAD head = new SAPCallBackDispatchVPN.ZWMS_DO_HEAD();
                //        head.VBELN = dt.Rows[i]["SDNCode"].ToString();
                //        headlist.Add(head);
                //        Info.T_HEAD = headlist.ToArray();
                //        List<SAPCallBackDispatchVPN.ZWMS_DO_ITEM> ItemList = new List<SAPCallBackDispatchVPN.ZWMS_DO_ITEM>();
                //        List<SAPCallBackDispatchVPN.ZWMS_DO_GERNR> ItemLineList = new List<SAPCallBackDispatchVPN.ZWMS_DO_GERNR>();
                //        Info.T_RETURN = new SAPCallBackDispatchVPN.ZWMS_DO_RETURN[1];
                //        sql = @" select A.SDNCode,A.InvCode,A.SAPSequence,A.Sequence,A.Quantity,A.SDNQuantity
                //            ,ISNULL(B.BatchCode,'') AS BatchCode from ICSSDN A
                //            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                //            WHERE SDNCode='{0}' AND A.WorkPoint='{1}'";
                //        sql = string.Format(sql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                //        DataTable Sapdt = DBHelper.SQlReturnData(sql, cmd);
                //        foreach (DataRow dr in Sapdt.Rows)
                //        {
                //            if (Convert.ToDecimal(dr["Quantity"].ToString()) == Convert.ToDecimal(dr["SDNQuantity"].ToString()))
                //            {
                //                SAPCallBackDispatchVPN.ZWMS_DO_GERNR ItemLine = new SAPCallBackDispatchVPN.ZWMS_DO_GERNR();
                //                SAPCallBackDispatchVPN.ZWMS_DO_ITEM Item = new SAPCallBackDispatchVPN.ZWMS_DO_ITEM();
                //                Item.VBELN = dr["SDNCode"].ToString();
                //                Item.POSNR = dr["SAPSequence"].ToString();
                //                Item.LFIMG = System.Decimal.Round(Convert.ToDecimal(dr["Quantity"].ToString()), 3);
                //                ItemList.Add(Item);
                //                if (dr["BatchCode"].ToString() != "")
                //                {
                //                    ItemLine.VBELN = dr["SDNCode"].ToString();
                //                    ItemLine.POSNR = dr["SAPSequence"].ToString();
                //                    ItemLine.GERNR = dr["BatchCode"].ToString();
                //                    ItemLineList.Add(ItemLine);
                //                }
                //            }
                //        }
                //        if (ItemList.Count > 0)
                //        {
                //            Info.T_ITEM = ItemList.ToArray();
                //            if (ItemLineList.Count > 0)
                //            {
                //                Info.T_GERNR = ItemLineList.ToArray();
                //            }
                //            SAPCallBackDispatchVPN.ZWMS_SK_DO_GZResponse result = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZResponse();
                //            result = Client.CallZWMS_SK_DO_GZ(Info);
                //            foreach (SAPCallBackDispatchVPN.ZWMS_DO_RETURN resultItem in result.T_RETURN)
                //            {
                //                if (resultItem.ZFLG == "N")
                //                {
                //                    IsSuccess = "N";
                //                    ErrorMessage += resultItem.ZMESS + "/r/n";
                //                }
                //            }
                //        }
                //    }
                //}
                //if (IsSuccess == "N")
                //{
                //    throw new Exception(ErrorMessage);
                //}
                #endregion
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

        #region 销售退货
        /// <summary>
        /// 销售退货
        /// </summary>
        /// <param name="TransCode"></param>
        /// <param name="TransSequence"></param>
        /// <param name="Quantity"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="cmd"></param>
        public static void SalesShipmentDocNegative(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                string sql = @"DECLARE @Status VARCHAR(10)
                                SELECT @Status=c.Status FROM ICSInventoryLot a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSSDN c ON b.TransCode=c.SDNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='2'

                                IF (@Status IS NULL)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo081") + @"',16,1);
                                    RETURN
                                END
                                --ELSE IF (@Status!='2')
                                --BEGIN
	                               -- RAISERROR('" + language.GetNameByCode("WMSAPIInfo142") + @"',16,1);
                                --  RETURN
                                --END
                                UPDATE c SET SDNQuantity=ISNULL(SDNQuantity,0)+'{2}'
                                FROM ICSInventoryLot a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSSDN c ON b.TransCode=c.SDNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='2'
                                IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
                                    INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                    INNER JOIN ICSSDN c ON b.TransCode=c.SDNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                    WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='2' AND c.Quantity<c.SDNQuantity)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo114") + @"',16,1);
                                END";
                sql = string.Format(sql, LotNo, WorkPoint, Quantity);
                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception("销售退货单更新失败!");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 销售退货接口
        /// </summary>
        /// <param name="TransType"></param>
        /// <param name="Identification"></param>
        /// <param name="cmd"></param>
        public static void SalesShipmentDocNegativeERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language, string BusinessCode)
        {
            try
            {
                #region SAP(三层结构)
                string IsSuccess = "";
                string ErrorMessage = "";
                string sql = @" select Distinct A.SDNCode,A.WorkPoint from ICSSDN A
                                LEFT JOIN ICSWareHouseLotInfoLog B ON B.TransCode=A.SDNCode AND B.WorkPoint=A.WorkPoint
                                where B.Identification='{0}' AND BusinessCode='20'";
                sql = string.Format(sql, Identification);
                DataTable dt = DBHelper.SQlReturnData(sql, cmd);
                if (dt.Rows.Count > 1)
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo202"));//单次提交单据数量卡控(只允许一张单据)
                }
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    string chksql = @"select SUM(Quantity) AS Quantity,SUM(SDNQuantity) AS SDNQuantity from ICSSDN
                                      where SDNCode='{0}' and WorkPoint='{1}'
                                      GROUP BY SDNCode,WorkPoint";
                    chksql = string.Format(chksql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                    DataTable chkdt = DBHelper.SQlReturnData(chksql, cmd);
                    if (Convert.ToDecimal(chkdt.Rows[0]["Quantity"]) == Convert.ToDecimal(chkdt.Rows[0]["SDNQuantity"]))
                    {
                        SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ Client = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ();
                        SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ1 Info = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ1();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_HEAD> headlist = new List<SAPCallBackDispatchVPN.ZWMS_DO_HEAD>();
                        SAPCallBackDispatchVPN.ZWMS_DO_HEAD head = new SAPCallBackDispatchVPN.ZWMS_DO_HEAD();
                        head.VBELN = dt.Rows[i]["SDNCode"].ToString();
                        headlist.Add(head);
                        Info.T_HEAD = headlist.ToArray();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_ITEM> ItemList = new List<SAPCallBackDispatchVPN.ZWMS_DO_ITEM>();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_GERNR> ItemLineList = new List<SAPCallBackDispatchVPN.ZWMS_DO_GERNR>();
                        Info.T_RETURN = new SAPCallBackDispatchVPN.ZWMS_DO_RETURN[1];
                        sql = @" select A.SDNCode,A.SAPSequence,A.InvCode,A.Sequence,A.Quantity,A.SDNQuantity
                            ,ISNULL(B.BatchCode,'') AS BatchCode from ICSSDN A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE SDNCode='{0}' AND A.WorkPoint='{1}'";
                        sql = string.Format(sql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable Sapdt = DBHelper.SQlReturnData(sql, cmd);
                        foreach (DataRow dr in Sapdt.Rows)
                        {
                            if (Convert.ToDecimal(dr["Quantity"].ToString()) == Convert.ToDecimal(dr["SDNQuantity"].ToString()))
                            {
                                SAPCallBackDispatchVPN.ZWMS_DO_ITEM Item = new SAPCallBackDispatchVPN.ZWMS_DO_ITEM();
                                SAPCallBackDispatchVPN.ZWMS_DO_GERNR ItemLine = new SAPCallBackDispatchVPN.ZWMS_DO_GERNR();
                                Item.VBELN = dr["SDNCode"].ToString();
                                Item.POSNR = dr["SAPSequence"].ToString();
                                Item.LFIMG = System.Decimal.Round(Convert.ToDecimal(dr["Quantity"].ToString()), 3);
                                ItemList.Add(Item);
                                if (dr["BatchCode"].ToString() != "")
                                {
                                    ItemLine.VBELN = dr["SDNCode"].ToString();
                                    ItemLine.POSNR = dr["SAPSequence"].ToString();
                                    ItemLine.GERNR = dr["BatchCode"].ToString();
                                    ItemLineList.Add(ItemLine);
                                }
                            }
                        }
                        if (ItemList.Count > 0)
                        {
                            Info.T_ITEM = ItemList.ToArray();
                            if (ItemLineList.Count > 0)
                            {
                                Info.T_GERNR = ItemLineList.ToArray();
                            }
                            SAPCallBackDispatchVPN.ZWMS_SK_DO_GZResponse result = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZResponse();
                            result = Client.CallZWMS_SK_DO_GZ(Info);
                            foreach (SAPCallBackDispatchVPN.ZWMS_DO_RETURN resultItem in result.T_RETURN)
                            {
                                if (resultItem.ZFLG == "N")
                                {
                                    IsSuccess = "N";
                                    ErrorMessage += resultItem.ZMESS + "/r/n";
                                }
                            }
                        }
                    }
                }
                if (IsSuccess == "N")
                {
                    throw new Exception(ErrorMessage);
                }
                #endregion
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

        #region 销售退货-原条码
        /// <summary>
        /// 销售退货-原条码
        /// </summary>
        /// <param name="TransCode"></param>
        /// <param name="TransSequence"></param>
        /// <param name="Quantity"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="cmd"></param>
        public static void SalesReturnBackIn(string TransCode, string TransSequence, string LotNo, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                string sql = @"DECLARE @Status VARCHAR(10)
                                SELECT @Status=sdn.Status FROM ICSSDN sdn
                                INNER JOIN ICSWareHouseLotInfoLog log ON sdn.WorkPoint=log.WorkPoint
                                INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
                                WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND sdn.SDNCode='{2}' AND sdn.Sequence='{3}' AND sdn.Type='2'

                                IF (@Status IS NULL)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo081") + @"',16,1);
                                    RETURN
                                END
                                ELSE IF (@Status!='2')
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo142") + @"',16,1);
                                    RETURN
                                END
                                UPDATE sdn SET SDNQuantity=ISNULL(SDNQuantity,0)+'{4}'
                                FROM ICSSDN sdn
                                INNER JOIN ICSWareHouseLotInfoLog log ON sdn.WorkPoint=log.WorkPoint
                                INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
                                WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND sdn.SDNCode='{2}' AND sdn.Sequence='{3}' AND sdn.Type='2'
                                IF EXISTS(SELECT a.LotNo FROM ICSSDN sdn
                                    INNER JOIN ICSWareHouseLotInfoLog log ON sdn.WorkPoint=log.WorkPoint
                                    INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
                                    WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND sdn.SDNCode='{2}' AND sdn.Sequence='{3}' AND sdn.Type='2' AND sdn.Quantity<sdn.SDNQuantity)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo114") + @"',16,1);
                                END";
                sql = string.Format(sql, LotNo, WorkPoint, TransCode, TransSequence, Quantity);
                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo143"));//"销售退货单更新失败!");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 销售退货-原条码接口
        /// </summary>
        /// <param name="TransType"></param>
        /// <param name="Identification"></param>
        /// <param name="cmd"></param>
        public static void SalesReturnBackInERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language, string BusinessCode)
        {
            try
            {
                #region ERP
                string sql = @"SELECT c.CusCode+a.ToWarehouseCode+c.SDNCode+a.MUSER AS Costre,c.CusCode,a.ToWarehouseCode AS WarehouseCode,c.SDNCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY c.CusCode,a.ToWarehouseCode,c.SDNCode,c.SDNDetailID,a.InvCode) AS Sequence,
                                    a.InvCode,SUM(a.Quantity) AS Quantity,SUM(a.Quantity*(lot.Amount/lot.Quantity)) AS Amount,c.SDNDetailID,Enable AS UpdateTodoQuantity
	                            ,a.WorkPoint,ISNULL(ext.ProjectCode, '') AS ProjectCode,CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,
	                            ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10                                   
                                INTO #TempERP
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
                                WHERE a.Identification='{0}' AND  ERPUpload='0' AND c.Type='2'  AND BusinessCode='{1}'
                                GROUP BY c.CusCode,a.ToWarehouseCode,c.SDNCode,a.MUSER,a.InvCode,c.SDNDetailID,Enable
                                ,a.WorkPoint,ISNULL(ext.ProjectCode, ''),CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),
                                ISNULL(ext.cFree1, ''),ISNULL(ext.cFree2, ''),ISNULL(ext.cFree3, ''),ISNULL(ext.cFree4, ''),ISNULL(ext.cFree5, ''),ISNULL(ext.cFree6, ''),ISNULL(ext.cFree7, ''),ISNULL(ext.cFree8, ''),ISNULL(ext.cFree9, ''),ISNULL(ext.cFree10, '')

                                SELECT DISTINCT Costre,WorkPoint,CusCode,WarehouseCode AS WHCode,SDNCode AS SDNRTCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
                                SELECT Costre,Sequence,InvCode,Quantity,Amount,SDNDetailID AS SDNRTDetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 FROM #TempERP

                                DROP TABLE #TempERP";
                sql = string.Format(sql, Identification, BusinessCode);
                DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);

                string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");

                string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.SalesReturnBackURL, Inputstr);
                Result result = new Result();
                result = JsonConvert.DeserializeObject<Result>(resultStr);
                if (result.Success)
                {
                    try
                    {
                        JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
                        foreach (var item in res)
                        {
                            JObject jo = (JObject)item;
                            JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
                            foreach (var detail in resdetail)
                            {
                                JObject det = (JObject)detail;
                                string allcol = jo["cWhCode"].ToString() + det["ProjectCode"].ToString() + det["cBatch"].ToString() + det["version"].ToString() + det["brand"].ToString() + det["cFree1"].ToString() + det["cFree2"].ToString() + det["cFree3"].ToString() + det["cFree4"].ToString() + det["cFree5"].ToString()
                                    + det["cFree6"].ToString() + det["cFree7"].ToString() + det["cFree8"].ToString() + det["cFree9"].ToString() + det["cFree10"].ToString();
                                ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SDNRTDetailID"].ToString(), Identification, jo["ID"].ToString(),
                                    det["DetailID"].ToString(), jo["SDNNEGCode"].ToString(), det["Sequence"].ToString(), allcol, cmd, language, BusinessCode);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Debug(ex.ToString());
                        log.Debug(resultStr);
                    }
                }
                else
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo080") + result.Message);
                }
                #endregion
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

    }
}