File name
        Commit message
        Commit date
    File name
        Commit message
        Commit date
    File name
        Commit message
        Commit date
    File name
        Commit message
        Commit date
    using ClientLib;
using ClientLib.CommonService;
using Newtonsoft.Json.Linq;
using PublicLib;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HANMI_SALE
{
    public static class SaleForECount
    {
    //    public static void ECountInterface(OrderManager caller, object obj)
    //    {
    //        try
    //        {
    //            ConstClass._MAIN.Cursor = Cursors.WaitCursor;
    //            if (caller.gridControl_Main.DataSource == null || obj == null || !(obj is DataTable))
    //            {
    //                throw new Exception("업로드할 정보를 조회 후 다시 시도하십시오.");
    //            }
    //            DataTable selData = caller.gridControl_Main.DataSource as DataTable;
    //            DataRow[] rows = selData.Select("SEL_FIELD = 'Y'");
    //            if (rows == null || rows.Length < 1)
    //            {
    //                throw new Exception("업로드할 정보를 조회 후 선택을 하십시오.");
    //            }
    //            caller.progressBarControl_Main.Properties.Minimum = 0;
    //            caller.progressBarControl_Main.Properties.Maximum = 6;
    //            caller.progressBarControl_Det.Properties.Minimum = 0;
    //            caller.progressBarControl_Det.Properties.Maximum = 0;
    //            caller.progressBarControl_Det.Visible = false;
    //            caller.panelControl_Progress.Visible = true;
    //            caller.panelControl_Progress.BringToFront();
    //            caller.labelControl_Msg.Text = "데이터 획득중...";
    //            caller.progressBarControl_Main.Position = 1;
    //            Application.DoEvents();
    //            DataRow[] rs;
    //            DataTable aData = obj as DataTable;
    //            int ii = 0;
    //            while (ii < aData.Rows.Count)
    //            {
    //                rs = selData.Select("SEL_FIELD = 'Y' and ORDER_NO = '" + UtilClass.toStr(aData.Rows[ii]["ORDER_NO"]) + "'");
    //                if (rs == null || rs.Length < 1)
    //                {
    //                    aData.Rows.RemoveAt(ii);
    //                }
    //                else
    //                {
    //                    ii++;
    //                }
    //            }
                
    //            //string nos = "";
    //            //for (int i = 0; i < aData.Rows.Count; i++)
    //            //{
    //            //    if (aData.Rows[i].RowState == DataRowState.Deleted)
    //            //    {
    //            //        continue;
    //            //    }
    //            //    if (UtilClass.isNull(nos))
    //            //    {
    //            //        nos = "'" + UtilClass.toStr(aData.Rows[i]["ORDER_NO"]) + "'";
    //            //    }
    //            //    else
    //            //    {
    //            //        nos += ",'" + UtilClass.toStr(aData.Rows[i]["ORDER_NO"]) + "'";
    //            //    }
    //            //}
    //            //SerializedSqlParam[] aParam = new SerializedSqlParam[]
    //            //{
    //            //    ClientClass.CreateSqlParameter("COMP_CD", SqlDbType.NVarChar, ConstClass._COMP_CD),
    //            //    ClientClass.CreateSqlParameter("NOS", SqlDbType.NVarChar, nos)
    //            //};
    //            //ResultData resultData = ClientClass.GetData("GetSaleDataForEcount", aParam);
    //            //if (resultData.isError)
    //            //{
    //            //    throw new Exception(resultData.ResultValue);
    //            //}
    //            //DataTable bData = resultData.TableData;
    //            string comp_code, api_key, user_id, user_pwd, session_id;
    //            DataView view = new DataView(ConstClass._DATA);
    //            view.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S02' and NO_CD = '01'";
    //            if (view.Count < 1)
    //            {
    //                throw new Exception("ECOUNT 연동을 위한 회사코드가 없습니다. 개발사로 문의바랍니다.");
    //            }
    //            comp_code = UtilClass.toStr(view[0]["NO_CD_NM"]);
    //            view.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S02' and NO_CD = '02'";
    //            if (view.Count < 1)
    //            {
    //                throw new Exception("ECOUNT 연동을 위한 API KEY가 없습니다. 개발사로 문의바랍니다.");
    //            }
    //            api_key = UtilClass.toStr(view[0]["NO_CD_NM"]);
    //            view.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S02' and NO_CD = '03'";
    //            if (view.Count < 1)
    //            {
    //                throw new Exception("ECOUNT 연동을 위한 사용자 ID가 없습니다. 개발사로 문의바랍니다.");
    //            }
    //            user_id = UtilClass.toStr(view[0]["NO_CD_NM"]);
    //            view.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S02' and NO_CD = '04'";
    //            if (view.Count < 1)
    //            {
    //                throw new Exception("ECOUNT 연동을 위한 사용자 비밀번호가 없습니다. 개발사로 문의바랍니다.");
    //            }
    //            user_pwd = UtilClass.toStr(view[0]["NO_CD_NM"]);
    //            HttpWebRequest request;
    //            HttpWebResponse response;
    //            JObject jObject, subObject;
    //            string urlStr, readStr, status, zone;
    //            ///////////////// 존코드 획득
    //            caller.labelControl_Msg.Text = "로그인 정보 획득중...";
    //            caller.progressBarControl_Main.Position = 2;
    //            Application.DoEvents();
    //            urlStr = "https://oapi.ecounterp.com/OAPI/V1/Zone";
    //            request = (HttpWebRequest)WebRequest.Create(urlStr);
    //            request.ContentType = "application/json";
    //            request.Method = "POST";
    //            using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
    //            {
    //                writer.Write("{ \"COM_CODE\" : \"" + comp_code + "\" }");
    //                writer.Flush();
    //                writer.Close();
    //            }
    //            readStr = "";
    //            response = (HttpWebResponse)request.GetResponse();
    //            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    //            {
    //                readStr = reader.ReadToEnd();
    //            }
    //            jObject = JObject.Parse(readStr);
    //            status = UtilClass.toStr(jObject["Status"]);
    //            if (UtilClass.isEqual(status, "500"))
    //            {
    //                throw new Exception("존 정보가 없습니다. ECOUNT에 문의하십시오.");
    //            }
    //            else if (!UtilClass.isEqual(status, "200"))
    //            {
    //                throw new Exception("존 정보 획득에 실패하였습니다. ECOUNT에 문의하십시오.");
    //            }
    //            subObject = jObject["Data"] as JObject;
    //            zone = UtilClass.toStr(subObject["ZONE"]);
    //            ///////////////// 로그인
    //            caller.labelControl_Msg.Text = "로그인 중...";
    //            caller.progressBarControl_Main.Position = 3;
    //            Application.DoEvents();
    //            urlStr = "https://oapi" + zone + ".ecounterp.com/OAPI/V1/OAPILogin";
    //            request = (HttpWebRequest)WebRequest.Create(urlStr);
    //            request.ContentType = "application/json";
    //            request.Method = "POST";
    //            using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
    //            {
    //                writer.Write("{ \"COM_CODE\" : \"" + comp_code + "\" , \"USER_ID\" : \"" + user_id + "\" , " +
    //                    "\"API_CERT_KEY\" : \"" + api_key + "\" , \"LAN_TYPE\" : \"ko-KR\" , " +
    //                    "\"ZONE\" : \"" + zone + "\" }");
    //                writer.Flush();
    //                writer.Close();
    //            }
    //            readStr = "";
    //            response = (HttpWebResponse)request.GetResponse();
    //            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    //            {
    //                readStr = reader.ReadToEnd();
    //            }
    //            jObject = JObject.Parse(readStr);
    //            status = UtilClass.toStr(jObject["Status"]);
    //            if (UtilClass.isEqual(status, "500"))
    //            {
    //                JObject eObject = jObject["Error"] as JObject;
    //                throw new Exception(UtilClass.toStr(eObject["Message"]));
    //            }
    //            else if (!UtilClass.isEqual(status, "200"))
    //            {
    //                throw new Exception("로그인 경로가 잘못되어 실패하였습니다. ECOUNT에 문의하십시오.");
    //            }
    //            subObject = (jObject["Data"] as JObject)["Datas"] as JObject;
    //            session_id = UtilClass.toStr(subObject["SESSION_ID"]);
    //            ///////////////// 판매 업로드
    //            ///////////////// 출하창고는 향후 다시 결정하기 전까지 임의로 100 : 한미칼라 본사 1층 을 고정입력
    //            caller.labelControl_Msg.Text = "업로드 자료 생성중...";
    //            caller.progressBarControl_Main.Position = 4;
    //            caller.progressBarControl_Det.Properties.Minimum = 0;
    //            caller.progressBarControl_Det.Properties.Maximum = rows.Length;
    //            caller.progressBarControl_Det.Position = 0;
    //            caller.progressBarControl_Det.Visible = true;
    //            Application.DoEvents();
    //            int no = 0, vat;
    //            JArray saleList = new JArray(), saleDetails;
    //            JObject uploadObject, dataObject, saleMaster, detail;
    //            uploadObject = new JObject();
    //            DataTable srcData = new DataTable();
    //            srcData.Columns.Add("ORDER_NO", typeof(string));
    //            srcData.Columns.Add("ECOUNT_NO", typeof(string));
    //            srcData.TableName = "ADATA";
    //            DataRow srcRow;
    //            //DataView bView = new DataView(bData);
    //            for (int i = 0; i < aData.Rows.Count; i++)
    //            {
    //                if (aData.Rows[i].RowState == DataRowState.Deleted)
    //                {
    //                    continue;
    //                }
    //                if (UtilClass.isNull(aData.Rows[i]["ORDER_DT"]))
    //                {
    //                    continue;
    //                }
    //                dataObject = new JObject();
    //                no++;
    //                saleMaster = new JObject();
    //                saleMaster.Add("NO", no.ToString()); // 일련번호
    //                saleMaster.Add("IO_DATE", UtilClass.toStr(aData.Rows[i]["ORDER_DT"]).Replace(".", "")); // 판매일자
    //                saleMaster.Add("CUST", UtilClass.toStr(aData.Rows[i]["CUST_CD"])); // 거래처코드
    //                saleMaster.Add("CUST_DES", UtilClass.toStr(aData.Rows[i]["CUST_NM"])); // 거래처명
    //                saleMaster.Add("WH_CD", "100"); // 출하창고
    //                vat = UtilClass.toInt(aData.Rows[i]["VAT_MY"]); // 부가세
    //                saleMaster.Add("IO_TYPE", vat > 0 ? "11" : "12");
    //                saleMaster.Add("P_DES1", ""); // 추가항목1(필수입력)
    //                //bView.RowFilter = "ORDER_NO = '" + UtilClass.toStr(aData.Rows[i]["ORDER_NO"]) + "'";
    //                srcRow = srcData.NewRow();
    //                srcRow["ORDER_NO"] = aData.Rows[i]["ORDER_NO"];
    //                srcRow["ECOUNT_NO"] = UtilClass.toStr(aData.Rows[i]["ORDER_DT"]).Replace(".", "") + "-" + no;
    //                srcData.Rows.Add(srcRow);
    //                saleDetails = new JArray();
    //                for (int j = 0; j < rows.Length; j++)
    //                {
    //                    caller.progressBarControl_Det.Position++;
    //                    Application.DoEvents();
    //                    detail = new JObject();
    //                    detail.Add("PROD_CD", UtilClass.toStr(rows[j]["ITEM_CD"]));
    //                    detail.Add("PROD_DES", UtilClass.toStr(rows[j]["ITEM_NM"]));
    //                    detail.Add("SIZE_DES", UtilClass.toStr(rows[j]["ORDER_NORM"]));
    //                    detail.Add("N_QTY", UtilClass.toInt(rows[j]["FIN_QTY"]));
    //                    detail.Add("N_PRICE", UtilClass.toInt(rows[j]["CURR_UNIT_MY"]));
    //                    detail.Add("N_SUPPLY_AMT", UtilClass.toInt(rows[j]["CURR_MY"]));
    //                    detail.Add("N_VAT_AMT", UtilClass.toInt(rows[j]["VAT_MY"]));
    //                    detail.Add("REMARKS", UtilClass.toStr(rows[j]["LN_RMK"]));
    //                    detail.Add("REQ_DATE", UtilClass.toStr(aData.Rows[i]["ORDER_DT"]).Replace(".", ""));
    //                    detail.Add("N_REQ_NO", UtilClass.toInt(aData.Rows[i]["ORDER_SEQ"]));
    //                    saleDetails.Add(detail);
    //                }
    //                dataObject.Add("SaleMaster", saleMaster);
    //                dataObject.Add("SaleDetails", saleDetails);
    //                saleList.Add(dataObject);
    //            }
    //            if (no < 1)
    //            {
    //                throw new Exception("ECOUNT에 업로드가 가능한 정보가 없습니다.");
    //            }
    //            uploadObject.Add("SaleList", saleList);
    //            caller.labelControl_Msg.Text = "자료 업로드 중...";
    //            caller.progressBarControl_Main.Position = 5;
    //            Application.DoEvents();
    //            urlStr = "https://oapi" + zone + ".ecounterp.com/OAPI/V1/Inventory/SaveSale?SESSION_ID=" + session_id;
    //            request = (HttpWebRequest)WebRequest.Create(urlStr);
    //            request.ContentType = "application/json";
    //            request.Method = "POST";
    //            using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
    //            {
    //                writer.Write(uploadObject.ToString());
    //                writer.Flush();
    //                writer.Close();
    //            }
    //            readStr = "";
    //            response = (HttpWebResponse)request.GetResponse();
    //            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    //            {
    //                readStr = reader.ReadToEnd();
    //            }
    //            jObject = JObject.Parse(readStr);
    //            status = UtilClass.toStr(jObject["Status"]);
    //            if (UtilClass.isEqual(status, "500"))
    //            {
    //                JObject eObject = jObject["Error"] as JObject;
    //                string errStr = UtilClass.toStr(eObject["Message"]);
    //                throw new Exception("다음과 같은 이유로 ECOUNT에 업로드를 하지 못했습니다.\n\n" + errStr);
    //            }
    //            else if (!UtilClass.isEqual(status, "200"))
    //            {
    //                throw new Exception("업로드에 실패하였습니다. 개발사에 문의하십시오.");
    //            }
    //            caller.labelControl_Msg.Text = "시스템에 결과 반영중...";
    //            caller.progressBarControl_Main.Position = 6;
    //            Application.DoEvents();
    //            ResultData data1 = new ResultData();
    //            data1.TableData = srcData;
    //            ResultData[] dataList = new ResultData[] { data1 };
    //            SerializedSqlParam[] bParam = new SerializedSqlParam[]
    //            {
    //                ClientClass.CreateSqlParameter("COMP_CD", SqlDbType.NVarChar, ConstClass._COMP_CD)
    //            };
    //            ResultData ecountResult = ClientClass.SetTableData("SaveECountResult", dataList, bParam);
    //            if (ecountResult.isError)
    //            {
    //                MessageBox.Show("ECOUNT에 자료업로드에 성공하였지만, 다음과 같은 이유로 시스템에 반영을 하지 못했습니다.\n\n" + ecountResult.ResultValue);
    //            }
    //            caller.labelControl_Msg.Text = "";
    //            Application.DoEvents();
    //            ConstClass._MAIN.Cursor = Cursors.Arrow;
    //            MessageBox.Show("자료 업로드 완료");
    //            caller.panelControl_Progress.Visible = false;
    //            caller.searchProc();
    //        }
    //        catch (Exception ex)
    //        {
    //            ConstClass._MAIN.Cursor = Cursors.Arrow;
    //            MessageBox.Show(ex.Message);
    //            caller.panelControl_Progress.Visible = false;
    //        }
    //    }
    }
}