namespace TO_REC
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private static readonly string cnnStrTPV =
           ConfigurationManager.ConnectionStrings["xTrelaTPVConnectionString"].ConnectionString;
 
        System.Data.OracleClient.OracleConnection conn =
            new System.Data.OracleClient.OracleConnection();  
        int idtabla;
        long Id;
        string sql = "";
 
        System.Collections.ArrayList ListaPedidos =
               new System.Collections.ArrayList();  
         //Instanciamos el objeto de la estructura
          CabPedido CPedido         
=  new CabPedido
();             PedidoDetalle PDetalle    
=  new PedidoDetalle
(); 
 
        private void RecogerXML()
        {
 
            XmlDocument doc1 
= new XmlDocument
();            
            SqlConnection cnn 
= new SqlConnection
(cnnStrTPV
); 
            cnn.Open();
 
            LoadXml1(cnn, doc1);
 
            cnn.Close();
 
            doc1.Save("C:\\Users\\dnonis\\Desktop\\temp\\OutputXml1.xml");
            
        }
 
 
 
        protected bool LoadXml1(SqlConnection cnn, XmlDocument doc1)
        {
            //Leemos el campo serialización(XML) de la bbdd. 
 
 
            idtabla = 122;//pedidostiendas
            Id = //100019014084;
                 //100163019855;
                  1001310122429;
                 //100152014221;
 
            sql = @"SELECT Serializacion
                    FROM xTrelaTPV..OPERACIONES
                    WHERE IdOperacion =" + Id +
                   "and idtabla=" + idtabla + "";
 
            SqlCommand cm 
= new SqlCommand
(sql, cnn
);            using (SqlDataReader dr = cm.ExecuteReader())
            {
                if (dr.Read())
                {
                    SqlXml MiXml = dr.GetSqlXml(dr.GetOrdinal("Serializacion"));
                    doc1.LoadXml(MiXml.Value);
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
 
        public void GetCampos_PedidoTienda()
        {
            XmlDocument xDoc 
= new XmlDocument
();//XmlDocument nos permite editar el XML            //La ruta del documento XML permite rutas relativas 
            //respeto del ejecutable!
 
            xDoc.Load("C:/Users/dnonis/Desktop/temp/OutputXml1.xml");//ruta del archivo xml
 
            XmlNodeList pedidostiendas =
                xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas
 
 
            foreach (XmlElement nodo in pedidostiendas)
            {
 
                
                CPedido.IdPedidoTienda = Convert.ToUInt64(nodo.GetElementsByTagName("IdPedidoTienda")[0].InnerText);//nodo xsi.nil
 
                CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[0].InnerText);
 
                CPedido.FechaPedido = nodo.GetElementsByTagName("FechaPedido")[0].InnerText;
 
                CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[0].InnerText;
 
                CPedido.IdDivisa = Convert.ToInt32(nodo.GetElementsByTagName("IdDivisa")[0].InnerText);
 
                CPedido.IdTicket = nodo.GetElementsByTagName("IdTicket")[0].InnerText;
 
                CPedido.Comodin2 = nodo.GetElementsByTagName("Comodin2")[0].InnerText;
 
                CPedido.Comodin8 = nodo.GetElementsByTagName("Comodin8")[0].InnerText;
 
                CPedido.IdEmpleado = nodo.GetElementsByTagName("IdEmpleado")[0].InnerText;
 
               
                ListaPedidos.Add(CPedido);
              
            }
 
             XmlNodeList pedidostiendasDetalleCollection =
                xDoc.GetElementsByTagName("PedidoTiendaDetalleCollection");
                XmlNodeList PedidoTiendaDetalle =
                  ((XmlElement)pedidostiendasDetalleCollection[0]).GetElementsByTagName("PedidoTiendaDetalle");
            
 
                foreach (XmlElement nodo1 in PedidoTiendaDetalle) 
                {
 
                    PDetalle.IdPedidoTienda1 = Convert.ToUInt64(nodo1.GetElementsByTagName("IdPedidoTienda")[0].InnerText);
                    
                    PDetalle.Linea = Convert.ToInt32(nodo1.GetElementsByTagName("Linea")[0].InnerText);
                    
                    PDetalle.IdTipoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdTipoPedido")[0].InnerText);
                    
                    PDetalle.IdEntidadDestinoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdEntidadDestinoPedido")[0].InnerText);
                    
                    PDetalle.FechaPrevistaEntregaEnTienda = nodo1.GetElementsByTagName("FechaPrevistaEntregaEnTienda")[0].InnerText;
                    
                    PDetalle.FechaEfectivaEntregaEnTienda = nodo1.GetElementsByTagName("FechaEfectivaEntregaEnTienda")[0].InnerText;
                    
                    PDetalle.IdArticuloVariante = nodo1.GetElementsByTagName("IdArticuloVariante")[0].InnerText;
                    
                    PDetalle.Unidades = nodo1.GetElementsByTagName("Unidades")[0].InnerText;
                    
                    PDetalle.UnidadesServidas = nodo1.GetElementsByTagName("UnidadesServidas")[0].InnerText;
                    
                    PDetalle.UnidadesCanceladas = nodo1.GetElementsByTagName("UnidadesCanceladas")[0].InnerText;
                    
                    PDetalle.PrecioVenta = nodo1.GetElementsByTagName("PrecioVenta")[0].InnerText;
                    
                    PDetalle.CodigoBarras = nodo1.GetElementsByTagName("CodigoBarras")[0].InnerText;
                    
                    PDetalle.IdPrioridadPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdPrioridadPedido")[0].InnerText);
 
                    if (PDetalle.IdReserva == null) { PDetalle.IdReserva = Convert.ToUInt32(nodo1.GetElementsByTagName("IdReserva")[0].InnerText); }
 
                    if (PDetalle.IdValija == null)  { PDetalle.IdValija = Convert.ToUInt32(nodo1.GetElementsByTagName("IdValija")[0].InnerText); }
 
                    if (PDetalle.IdEstadoPedido == null) { PDetalle.IdEstadoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdEstadoPedido")[0].InnerText); }
 
                    PDetalle.notas = nodo1.GetElementsByTagName("Observaciones")[0].InnerText;
 
 
                ListaPedidos.Add(PDetalle);
 
                }
        }
 
        public void InsertPedidosTotalOracle()
        {
 
            conn.ConnectionString =
                   "Data Source=DEVELOP_ORASRVDEV03;" + //schema bbdd
                   "User ID=xxxxx;" +                   //usuario
                   "Password=xxxxxxxxx";    //password
 
            conn.Open();//--abrimos conexion
 
            //Declaro una variable de tipo command del oracle
            System.Data.OracleClient.OracleCommand MiComando 
= new System.Data.OracleClient.OracleCommand();             System.Data.OracleClient.OracleCommand MiComando2
= new System.Data.OracleClient.OracleCommand();  
            
            /*OracleTransaction transaction1;
            OracleTransaction transaction2;*/
 
            ////////-------------------
            System.Data.OracleClient.OracleParameter var1 
= new System.Data.OracleClient.OracleParameter();             var1.OracleType = System.Data.OracleClient.OracleType.UInt32;
            
            if (CPedido.IdTicket == "") { var1.Value = Convert.ToUInt64(0); }
            else if (CPedido.IdTicket != "") { var1.Value = Convert.ToUInt64(CPedido.IdTicket); }
            else { var1.Value = Convert.ToUInt32(0); }
            ////////-------------------
            System.Data.OracleClient.OracleParameter var2 
= new System.Data.OracleClient.OracleParameter();             var2.OracleType = System.Data.OracleClient.OracleType.Int32;
            
            if (CPedido.Comodin2 == "") { var2.Value = Convert.ToInt32(0); }
            else if (CPedido.Comodin2 != "") { var2.Value = Convert.ToInt32(CPedido.Comodin2); }
            else { var2.Value = Convert.ToUInt32(0); }
            ////////-------------------
            System.Data.OracleClient.OracleParameter var3 
= new System.Data.OracleClient.OracleParameter();             var3.OracleType = System.Data.OracleClient.OracleType.UInt32;
            
            if (CPedido.IdEmpleado == "") { var3.Value = Convert.ToUInt64(0); }
            else if (CPedido.IdEmpleado != "") { var3.Value = Convert.ToUInt64(CPedido.IdEmpleado); }
            else { var3.Value = Convert.ToUInt32(0); }
            ////////-------------------
            System.Data.OracleClient.OracleParameter var4 
= new System.Data.OracleClient.OracleParameter();             var4.OracleType = System.Data.OracleClient.OracleType.VarChar;
 
            if (PDetalle.FechaPrevistaEntregaEnTienda == "") { var4.Value = "null"; }
            else { var4.Value = Convert.ToDateTime(PDetalle.FechaPrevistaEntregaEnTienda); }
            ////////-------------------
            System.Data.OracleClient.OracleParameter var5 
= new System.Data.OracleClient.OracleParameter();             var5.OracleType = System.Data.OracleClient.OracleType.VarChar;
 
            if (PDetalle.FechaEfectivaEntregaEnTienda == "") { var5.Value = "null"; }
            else { var5.Value = Convert.ToDateTime(PDetalle.FechaEfectivaEntregaEnTienda); }
            ////////-------------------
            
 
            MiComando.Parameters.Clear();
 
           /* // Start a local transaction
            transaction2 = conn.BeginTransaction(IsolationLevel.ReadCommitted);
            // Assign transaction object for a pending local transaction
             MiComando2.Transaction = transaction2;
            */
            try
            {
                string numTPV=Convert.ToString(CPedido.IdPedidoTienda);
                string numTPVsbtr= numTPV.Substring(7,2);
 
                //string numTicket = Convert.ToString(CPedido.IdTicket);
                //string numTicketsbtr = numTicket.Substring(10, (numTPV.Length));
                
 
                string oracle = "Insert into TO_REC_PEDIDOS_TIENDAS_CAB" +
                                "(CODIGO_EMPRESA,NUMERO_PEDIDO,TIENDA_ORIGEN,FECHA_PEDIDO,"+
                                "CODIGO_BARRAS_PEDIDO,CODIGO_DIVISA," +
                                "NUMERO_TPV,NUMERO_TIQUET,CLIENTE_DESTINO,PEDIDO_ORIGINAL_XTRELA," +
                                "CODIGO_TRABAJADOR,PERSONA_PEDIDO)" +
                                "VALUES('1234D',"+CPedido.IdPedidoTienda+"," +CPedido.IdentidadOrigenPedido+ ",'"+
                                Convert.ToDateTime(CPedido.FechaPedido)+"','"+CPedido.CodigoBarras+"',"+CPedido.IdDivisa+ ","+ 
                                Convert.ToInt32(numTPVsbtr)+","+var1.Value+",'EJEMPLO',"+ 
                                var2.Value+","+var3.Value+",'"+CPedido.Comodin8+"')";
 
 
                string oracle_= "Insert into TO_REC_PEDIDOS_TIENDAS_LIN" +
                                "(CODIGO_EMPRESA,NUMERO_PEDIDO,NUMERO_LINEA,TIPO_PEDIDO," +
                                "CLIENTE_DESTINO,FECHA_ENTREGA_PREVISTA,FECHA_ENTREGA_REAL,"+
                                "CODIGO_ARTICULO,UNIDADES_PEDIDAS,UNIDADES_SERVIDAS,UNIDADES_CANCELADAS,"+//,"+
                                "PRECIO_VENTA,CODIGO_BARRAS_SOBRE,PRIORIDAD_PEDIDO,"+
                                "NUMERO_RESERVA,NUMERO_VALIJA,STATUS_PEDIDO,"+
                                "OBSERVACIONES)"+
                                "VALUES('1234D',"+PDetalle.IdPedidoTienda1+","+PDetalle.Linea+",'"+
                                PDetalle.IdTipoPedido+"','"+PDetalle.IdEntidadDestinoPedido+"','"+
                                var4.Value+"','"+var5.Value+"','"+
                                PDetalle.IdArticuloVariante+"','"+(PDetalle.Unidades)+"','"+
                                (PDetalle.UnidadesServidas)+"','"+(PDetalle.UnidadesCanceladas)+"','"+
                                PDetalle.PrecioVenta+"','"+PDetalle.CodigoBarras+"',"+PDetalle.IdPrioridadPedido+","+
                                PDetalle.IdReserva+","+PDetalle.IdValija+","+
                                PDetalle.IdEstadoPedido+","+PDetalle.notas+")";
                
                
               
                MiComando 
= new OracleCommand
(oracle, conn
);                MiComando.ExecuteNonQuery();
 
                MiComando2 
= new OracleCommand
(oracle_, conn
);                MiComando2.ExecuteNonQuery();
                
                //transaction2.Commit();
 
                MessageBox.Show("Ejecución realizada con éxito", "INFO",
                   MessageBoxButtons.OK, MessageBoxIcon.Information);
 
                
            }
            catch (Exception err)
            {
                
                //transaction2.Rollback();
 
                MessageBox.Show("Error..." + err.Message, "ERROR",
                  MessageBoxButtons.OK, MessageBoxIcon.Error);
 
                MessageBox.Show("Para más información consulte con su Administrador");
 
            }
 
            conn.Close();//--cerramos conexión
 
 
            this.Close();//cerramos y salimos de la aplicación
 
        }
  
 
            public class CabPedido //--> .:Oracle:. "TO_REC_PEDIDOS_TIENDAS_CAB"
        {
 
            //Codigo_Empresa
            public ulong IdPedidoTienda;
            public int IdentidadOrigenPedido;
            public string FechaPedido;
            public string CodigoBarras;
            public int IdDivisa;//tinyint 
            public string IdTicket;//bigint 
            //cliente_destino
            public string Comodin2;
            public string Comodin8;//nvarchar(100) 
            public string IdEmpleado;//bigint 
            //Fecha_Grabacion
        }
 
 
          
             public class PedidoDetalle //--> "TO_REC_PEDIDOS_TIENDAS_LIN"
        {
            //Codigo_Empresa
            public ulong IdPedidoTienda1;
            public ulong IdPedidoTiendaDetalle;//¿¿??
            public int Linea;
            public int IdTipoPedido;
            public int IdEntidadDestinoPedido;
            public string FechaPrevistaEntregaEnTienda;//DATETIME
            public string FechaEfectivaEntregaEnTienda;//DATETIME
            //fecha real de entrega a cliente
            public string IdArticuloVariante;
            public string Unidades;//Numeric(11,4)
            public string UnidadesServidas;//Numeric(11,4)
            public string UnidadesCanceladas;//Numeric(11,4)
            public string PrecioVenta;//money
            public string CodigoBarras;
            public int IdPrioridadPedido;
            public long IdReserva;//long
            public long IdValija;//long
            public int IdEstadoPedido;
            public string notas;
            //Fecha_Grabacion
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            RecogerXML();
            GetCampos_PedidoTienda();
            InsertPedidosTotalOracle();
 
 
            this.Close();
 
        }
    }
}