using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DSWeb.EntityDA;
using DSWeb.Models;
using JsonHelper;
using System.Xml;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using DSWeb.Authority;

namespace DSWeb.PriceCarrier
{
    public partial class EBPricequeryLogLCLList : System.Web.UI.Page
    {
        CrmPriceCarrierDA CrmPriceCarrierDA = new CrmPriceCarrierDA();
        RangeDA RangeDA = new RangeDA();
        public string strUserID;//用户GID
        public string strCompanyID;//公司GID
        public string strShowName;//用户显示名
        public string strDeptName;//部门名称

        //grid
        private string strColumnVal;
        private string strType = "35";//Grid模块号
        //gridEnd

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["USERID"] != null)
            {
                strUserID = Session["USERID"].ToString().Trim();
            }
            else
            {
                Server.Transfer("~/Error/FriendError.aspx");
                return;
                //strUserID = ""; 
            }
            if (Session["SHOWNAME"] != null)
            {
                strShowName = Session["SHOWNAME"].ToString();
            }
            if (Session["COMPANYID"] != null)
            {
                strCompanyID = Session["COMPANYID"].ToString();
                this.hdCompanyid.Value = strCompanyID.Trim();
            }
            if (Session["DEPTNAME"] != null)
            {
                strDeptName = Session["DEPTNAME"].ToString();
            }
            //
            //
            /*
            //权限可视范围
            this.hdRangeV.Value = RangeDA.GetVISIBLERANGE(strUserID.Trim(), "modEBPricequeryLogLCLList");
            this.hdRangeO.Value = RangeDA.GetOPERATERANGE(strUserID.Trim(), "modEBPricequeryLogLCLList");
            this.hdRange.Value = "";
            //if (this.hdRangeV.Value.Trim() != this.hdRangeO.Value.Trim())
            //{
            this.hdRange.Value = "";
            if (this.hdRangeO.Value.Trim().Equals("4"))//无
            {
                this.imgAdd.Disabled = true;
                this.imgEdit.Disabled = true;
                this.imgDel.Disabled = true;
            }
            //}
            */

            //grid
            if (!IsPostBack)
            {
                strUserID = strUserID.Trim();
            }
            if (hid_setting.Value.Trim() != "")
            {
                strColumnVal = hid_setting.Value.Trim();
                SaveColumnSetting(strColumnVal);
                hid_setting.Value = "";
            }
            if (hid_header.Value.Trim() != "")
            {
                strColumnVal = hid_header.Value.Trim();
                SaveColumnSetting(strColumnVal);
                hid_header.Value = "";
            }
            //gridEnd    
        }

        protected String getBSNO()
        {
            string strBSNO = Guid.NewGuid().ToString();
            strBSNO = strBSNO.Replace("-", "");
            strBSNO = "EBPQ" + strBSNO;
            return strBSNO;
        }

        protected void btExcel1_Click(object sender, EventArgs e)
        {
            setExcelReport();
        }
        protected void setExcelReport()
        {
            StringWriter sw = new StringWriter();
            string sSQL = "";
            //sw.WriteLine("结算单位\t委托编号\t主提单号\t分提单号\t船名\t航次\tETD\t目的港\t揽货人\t应收RMB\t实收RMB\t应收USD\t实收USD\t余额");
            sw.WriteLine(this.hdNAMES.Value.Trim());
            T_ALL_DA T_ALL_DA = new T_ALL_DA();
            DataSet DS = T_ALL_DA.GetAllSQL(this.hdSQL.Value.Trim());
            if (DS != null)
            {
                foreach (DataTable myTable in DS.Tables)
                {
                    foreach (DataRow myRow in myTable.Rows)//遍历表
                    {
                        sSQL = "";
                        for (int i = 0; i < myTable.Columns.Count; i++)
                        {
                            if (sSQL.Trim() != "")
                            {
                                sSQL += "\t";
                            }
                            if (myRow[i].ToString() == null || myRow[i].ToString() == "")
                            {
                                sSQL += "";
                                if (sSQL.Trim() == "")
                                {
                                    sSQL += "\t";
                                }
                            }
                            else
                            {
                                sSQL += myRow[i].ToString().Trim();
                            }
                        }
                        sw.WriteLine(sSQL);
                    }
                }
                //
                sw.Close();
                switch ("MUEXCEL")
                {
                    case "MUEXCEL":
                        Response.AddHeader("Content-Disposition", "attachment; filename=report.xls");
                        Response.ContentType = "application/ms-excel";
                        break;
                    case "MUTEXT":
                        Response.AddHeader("Content-Disposition", "attachment; filename=report.txt");
                        Response.ContentType = "application/txt";
                        break;
                    case "MUWORD":
                        Response.AddHeader("Content-Disposition", "attachment; filename=report.doc");
                        Response.ContentType = "application/ms-word";
                        break;
                    case "MUPDF":
                        Response.AddHeader("Content-Disposition", "attachment; filename=report.pdf");
                        Response.ContentType = "application/pdf";
                        break;
                    case "MUXML":
                        Response.AddHeader("Content-Disposition", "attachment; filename=report.xml");
                        Response.ContentType = "application/xml";
                        break;
                }
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                Response.Write(sw);
                Response.End();
            }
        }

        #region Grid参数
        private void SaveColumnSetting(string tempColumnVal)
        {

            JsonColumnGroupEntity jsonColumnGroupEntity = GetPostEntity(tempColumnVal);
            List<JsonColumnEntity> jsonColumnEntities = new List<JsonColumnEntity>();

            UserSettingDA userSettingDA = new UserSettingDA();

            UserSettingEntity userSettingEntity = userSettingDA.GetUserSettingByUserIDType(strUserID, strType);

            if (userSettingEntity.GID != null)
            {
                userSettingEntity.ModifiedUser = strUserID;

                GridEntity gridEntity = null;


                List<GridColumnEntity> gridColumnEntities = new List<GridColumnEntity>();
                gridEntity = GetSettingXml(userSettingEntity.Xml);
                gridEntity.PagePreCount = jsonColumnGroupEntity.ShowCount;

                foreach (JsonColumnEntity jColumn in jsonColumnGroupEntity.JsonColumnEntities)
                {
                    foreach (GridColumnEntity gColumn in gridEntity.Columns)
                    {
                        if (gColumn.Description.Equals(jColumn.col3))
                        {
                            gColumn.Description = jColumn.col3;
                            gColumn.Width = jColumn.col5;
                            gColumn.Index = jColumn.col4;
                            if (jColumn.col6 != -1)
                            {
                                gColumn.VisibleState = jColumn.col6;
                            }
                            //gridColumnEntities.Add(gColumn);
                            break;
                        }
                    }


                }
                //Columns
                //gridEntity.Columns = gridColumnEntities;

                userSettingEntity.Xml = SaveUserSetting(gridEntity).OuterXml;
                int iResult = userSettingDA.UpdateUserSetting(userSettingEntity);

            }
            else
            {
                if (jsonColumnGroupEntity != null)
                {
                    userSettingEntity = new UserSettingEntity();

                    userSettingEntity.GID = Guid.NewGuid().ToString();
                    userSettingEntity.Name = "EBPricequeryLogLCLListGridSetting";
                    userSettingEntity.Description = "海运拼箱运价日志查询Grid设置";
                    userSettingEntity.UserID = strUserID;
                    userSettingEntity.Type = 1;//type值为1表示Grid
                    string strRequestUrl = Request.Url.ToString();
                    string strUrl = strRequestUrl.Substring(0, strRequestUrl.LastIndexOf("/"));
                    string strPage = strRequestUrl.Substring(strRequestUrl.LastIndexOf("/") + 1, strRequestUrl.Length - strRequestUrl.LastIndexOf("/") - 1);

                    userSettingEntity.Url = strUrl;
                    userSettingEntity.Page = strPage;
                    userSettingEntity.CreateUser = strUserID;


                    GridEntity gridEntity = new GridEntity();

                    gridEntity.GID = userSettingEntity.GID;
                    gridEntity.UserID = strUserID;
                    gridEntity.GroupBy = "";
                    gridEntity.DefaultPrePageCount = 15;
                    gridEntity.PagePreCount = jsonColumnGroupEntity.ShowCount;

                    List<GridColumnEntity> gridColumnEntities = new List<GridColumnEntity>();

                    foreach (JsonColumnEntity column in jsonColumnGroupEntity.JsonColumnEntities)
                    {
                        GridColumnEntity gridColumnEntity = new GridColumnEntity();

                        if (column.col6 != -1)
                        {
                            gridColumnEntity.Name = column.col2;
                            gridColumnEntity.VisibleState = column.col6;
                        }
                        else
                        {
                            switch (column.col3.Trim())
                            {
                                case "起运港":
                                    gridColumnEntity.Name = "PODLOAD";
                                    break;
                                case "目的港":
                                    gridColumnEntity.Name = "DESTINATION";
                                    break;
                                case "船公司":
                                    gridColumnEntity.Name = "CARRIE";
                                    break;
                                case "航线别":
                                    gridColumnEntity.Name = "LANE";
                                    break;
                                case "客户":
                                    gridColumnEntity.Name = "CREATEUSER";
                                    break;
                                case "揽货人":
                                    gridColumnEntity.Name = "SALE";
                                    break;
                                case "查询时间":
                                    gridColumnEntity.Name = "LOGTIME";
                                    break;
                                case "分公司":
                                    gridColumnEntity.Name = "CORPID";
                                    break;
                            }
                            gridColumnEntity.VisibleState = 0;
                        }

                        gridColumnEntity.Description = column.col3;
                        gridColumnEntity.Index = column.col4;
                        gridColumnEntity.Width = column.col5;

                        gridColumnEntities.Add(gridColumnEntity);
                    }
                    //Columns
                    gridEntity.Columns = gridColumnEntities;

                    userSettingEntity.Xml = SaveUserSetting(gridEntity).OuterXml;

                    int iResult = userSettingDA.InsertUserSetting(userSettingEntity);

                    dvSaveState.InnerHtml = iResult.ToString();
                }
            }

        }

        #region 获取列信息
        /// <summary>
        /// 获取列信息
        /// </summary>
        /// <param name="tempValue"></param>
        /// <returns></returns>
        private JsonColumnGroupEntity GetPostEntity(string tempValue)
        {
            JsonColumnGroupEntity tempColumnGroupEntity = new JsonColumnGroupEntity();
            try
            {
                tempColumnGroupEntity = (JsonColumnGroupEntity)JSON.Instance.ToObject(tempValue);
            }
            catch (Exception error)
            {
                throw error;
            }
            return tempColumnGroupEntity;
        }
        #endregion

        private XmlDocument SaveUserSetting(GridEntity gridEntity)
        {

            XmlDocument xmlDoc = new XmlDocument();
            XmlElement root = xmlDoc.CreateElement("user-settings");

            //xmlDoc.AppendChild(root);

            XmlElement xGid = xmlDoc.CreateElement("gid");
            xGid.InnerText = gridEntity.GID;
            root.AppendChild(xGid);

            XmlElement xUserID = xmlDoc.CreateElement("userid");
            xUserID.InnerText = gridEntity.UserID;
            root.AppendChild(xUserID);

            XmlElement xCreateTime = xmlDoc.CreateElement("create-time");
            xCreateTime.InnerText = gridEntity.CreateTime.ToString();
            root.AppendChild(xCreateTime);

            XmlElement xColumns = xmlDoc.CreateElement("columns");

            foreach (GridColumnEntity column in gridEntity.Columns)
            {
                XmlElement xColumn = xmlDoc.CreateElement("column");
                XmlElement nName = xmlDoc.CreateElement("name");
                nName.InnerText = column.Name;

                xColumn.AppendChild(nName);

                XmlElement nDescription = xmlDoc.CreateElement("description");
                nDescription.InnerText = column.Description;

                xColumn.AppendChild(nDescription);

                XmlElement nIndex = xmlDoc.CreateElement("index");
                nIndex.InnerText = column.Index.ToString();

                xColumn.AppendChild(nIndex);

                XmlElement nWidth = xmlDoc.CreateElement("width");
                nWidth.InnerText = column.Width.ToString();

                xColumn.AppendChild(nWidth);

                XmlElement nVisible = xmlDoc.CreateElement("visible");
                nVisible.InnerText = column.VisibleState.ToString();

                xColumn.AppendChild(nVisible);

                xColumns.AppendChild(xColumn);
            }

            root.AppendChild(xColumns);

            XmlElement xGroupBy = xmlDoc.CreateElement("group-by");
            xGroupBy.InnerText = gridEntity.GroupBy;

            root.AppendChild(xGroupBy);

            XmlElement xPage = xmlDoc.CreateElement("page");

            XmlElement nPageDefault = xmlDoc.CreateElement("page-default");
            nPageDefault.InnerText = gridEntity.DefaultPrePageCount.ToString();
            xPage.AppendChild(nPageDefault);

            XmlElement nPagePre = xmlDoc.CreateElement("page-pre");
            nPagePre.InnerText = gridEntity.PagePreCount.ToString();
            xPage.AppendChild(nPagePre);

            root.AppendChild(xPage);

            xmlDoc.AppendChild(root);
            return xmlDoc;
        }

        private GridEntity GetSettingXml(string strXml)
        {
            XmlDocument xmlSettingDoc = new XmlDocument();
            GridEntity gridEntity = new GridEntity();
            try
            {
                xmlSettingDoc.LoadXml(strXml);

                gridEntity.GID = xmlSettingDoc.ChildNodes[0].ChildNodes[0].InnerText.Trim();
                gridEntity.UserID = xmlSettingDoc.ChildNodes[0].ChildNodes[1].InnerText.Trim();
                gridEntity.CreateTime = DateTime.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[2].InnerText.Trim());

                IList<GridColumnEntity> columnsEntities = new List<GridColumnEntity>();

                int iColCount = xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes.Count;

                for (int i = 0; i < iColCount; i++)
                {
                    GridColumnEntity columnEntity = new GridColumnEntity();
                    //columnEntity.GID = xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[0].ToString();
                    columnEntity.Name = xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[i].ChildNodes[0].InnerText.Trim();
                    columnEntity.Description = xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[i].ChildNodes[1].InnerText.Trim();
                    columnEntity.Index = int.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[i].ChildNodes[2].InnerText.Trim());
                    columnEntity.Width = int.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[i].ChildNodes[3].InnerText.Trim());

                    columnsEntities.Add(columnEntity);
                }

                gridEntity.Columns = columnsEntities;
                gridEntity.GroupBy = xmlSettingDoc.ChildNodes[0].ChildNodes[4].InnerText.Trim();
                gridEntity.DefaultPrePageCount = int.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[5].ChildNodes[0].InnerText.Trim());
                gridEntity.PagePreCount = int.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[5].ChildNodes[1].InnerText.Trim());
            }
            catch (Exception error)
            {
                throw (error);
            }

            return gridEntity;
        }

        public enum SqlName
        {
            NAME = 0,
            LOGTYPE = 1,
            LOGTIME = 2,
            LOGCONTENT = 3,
            USERNAME = 4
        }
        #endregion
    }
}