Exemplo n.º 1
0
        public static IEnumerable <ImportData> FromDat(FileInfo file, ImportConfiguration configuration, int expirationDays)
        {
            List <ImportData> orders        = new List <ImportData>();
            string            line          = "";
            Boolean           final         = false;
            ImportData        Orden         = new ImportData();
            ImportData        OrdenCabecera = new ImportData();
            int    VersionEnvioPedido       = 0;
            string cabecera       = "";
            int    contadorlinias = -1;

            try
            {
                //leemos el fichero seleccionado linea por linea
                using (System.IO.StreamReader sr = new System.IO.StreamReader(file.FullName))
                {
                    while ((line = sr.ReadLine()) != null && !final)
                    {
                        //contamos linias leidas
                        contadorlinias = contadorlinias + 1;
                        //segun el tipo de registro insertamos unos campos o otros al objeto creado
                        string Tipo = line.Substring(11, 2).Trim();
                        //cada 4 filas insertamos los datos sin contar la cabecera inicial tipo 00

                        switch (Tipo)
                        {
                        //registro primer orden de suministro
                        case "00":
                            cabecera = line;
                            break;

                        case "05":
                            //Literal
                            Orden.SetLiteral05(line.Substring(0, 3).Trim());
                            //Numero envio
                            Orden.SetNumEnvio(line.Substring(3, 4).Trim());
                            //Contador
                            Orden.SetContador05(line.Substring(7, 4).Trim());
                            //Tipo
                            Orden.SetTipo05(line.Substring(11, 2).Trim());
                            //Instalacion
                            Orden.SetInstalacion05(line.Substring(13, 8).Trim());
                            //Codigo cepsa
                            Orden.SetCodCepsa(line.Substring(21, 9).Trim());
                            //Cliente
                            Orden.SetCliente(line.Substring(30, 8).Trim());
                            //Destinatario
                            Orden.SetDestinatario(line.Substring(38, 40).Trim());
                            //Cae
                            Orden.SetCae(line.Substring(78, 12).Trim());
                            //Registro Fiscal
                            Orden.SetRegistroFiscal(line.Substring(90, 1).Trim());
                            //IEE
                            Orden.SetIee(line.Substring(91, 10).Trim());
                            //Fecha Desde
                            Orden.SetFechaDesde(line.Substring(101, 8).Trim());
                            //Fecha Hasta
                            Orden.SetFechaHasta(line.Substring(109, 8).Trim());
                            //Duracion
                            Orden.SetDuracion(line.Substring(117, 3).Trim());
                            //Condiciones
                            Orden.SetCondiciones05(line.Substring(120, 5).Trim());
                            //Hora Desde
                            Orden.SetHoraDesde(line.Substring(125, 4).Trim());
                            //Hora Hasta
                            Orden.SetHoraHasta(line.Substring(129, 4).Trim());
                            //Observaciones 1
                            Orden.SetObservaciones1(line.Substring(133, 30).Trim());
                            //Observaciones 2
                            Orden.SetObservaciones2(line.Substring(163, 30).Trim());
                            break;

                        //registro segundo orden de suministro
                        case "06":
                            //Literal
                            Orden.SetLiteral06(line.Substring(0, 3).Trim());
                            //Numero envio
                            Orden.SetNumEnvio(line.Substring(3, 4).Trim());
                            //Contador
                            Orden.SetContador06(line.Substring(7, 4).Trim());
                            //Tipo
                            Orden.SetTipo06(line.Substring(11, 2).Trim());
                            //Instalacion
                            Orden.SetInstalacion06(line.Substring(13, 9).Trim());
                            //Contacto
                            Orden.SetContacto(line.Substring(22, 30).Trim());
                            //Cargo
                            Orden.SetCargo(line.Substring(52, 30).Trim());
                            //Telefono
                            Orden.SetTelefono(line.Substring(82, 15).Trim());
                            //Fax
                            Orden.SetFax(line.Substring(97, 15).Trim());
                            //Nif
                            Orden.SetNif(line.Substring(112, 14).Trim());
                            break;

                        //registro tercer orden de suministro
                        case "07":
                            //Literal
                            Orden.SetLiteral07(line.Substring(0, 3).Trim());
                            //Numero envio
                            Orden.SetNumEnvio(line.Substring(3, 4).Trim());
                            //Contador
                            Orden.SetContador07(line.Substring(7, 4).Trim());
                            //Tipo
                            Orden.SetTipo07(line.Substring(11, 2).Trim());
                            //Instalacion
                            Orden.SetInstalacion07(line.Substring(13, 9).Trim());
                            //Calle 1
                            Orden.SetCalle1(line.Substring(22, 35).Trim());
                            //Calle 2
                            Orden.SetCalle2(line.Substring(57, 35).Trim());
                            //Calle 3
                            Orden.SetCalle3(line.Substring(92, 35).Trim());
                            //Municipio
                            Orden.SetMunicipio(line.Substring(127, 5).Trim());
                            //Localidad
                            Orden.SetLocalidad(line.Substring(132, 35).Trim());
                            //Codigo Postal
                            Orden.SetCodigoPostal(line.Substring(167, 5).Trim());
                            //Provincia
                            Orden.SetProvincia(line.Substring(172, 2).Trim());
                            //Pais
                            Orden.Setpais(line.Substring(174, 3).Trim());
                            //Codigo postal internacional
                            Orden.SetCodigoPostalInternacional(line.Substring(177, 10).Trim());
                            //Region
                            Orden.SetRegion(line.Substring(187, 3).Trim());
                            //Ruta
                            Orden.SetRuta(line.Substring(193, 3).Trim());
                            break;

                        //registro cuarto orden de suministro
                        case "14":
                            //Literal
                            Orden.SetLiteral14(line.Substring(0, 3).Trim());
                            //Numero envio
                            Orden.SetNumEnvio(line.Substring(3, 4).Trim());
                            //Contador
                            Orden.SetContador14(line.Substring(7, 4).Trim());
                            //Tipo
                            Orden.SetTipo14(line.Substring(11, 2).Trim());
                            //Operador
                            Orden.SetOperador14(line.Substring(13, 6).Trim());
                            //Suministrador
                            Orden.SetSuministrador14(line.Substring(19, 6).Trim());

                            if (VersionEnvioPedido == 0)
                            {
                                //Transportista
                                Orden.SetTransportista14(line.Substring(25, 6).Trim());
                                //Pedido
                                Orden.SetPedido(line.Substring(31, 15).Trim());
                                //Instalacion
                                Orden.SetInstalacion14(line.Substring(47, 10).Trim());
                                //Material
                                Orden.SetMaterial(line.Substring(57, 9).Trim());
                                //Cantidad
                                Orden.SetCantidad(line.Substring(66, 11).Trim());
                                //Unidad de medida
                                Orden.SetUnidadDeMedida(line.Substring(77, 2).Trim());
                                //Fecha incial
                                Orden.SetFechaInicial(line.Substring(79, 8).Trim());
                                //Fecha Final
                                Orden.SetFechaFinal(line.Substring(87, 8).Trim());
                                //Tipo de operacion
                                Orden.SetTipoDeOperador(line.Substring(95, 1).Trim());
                                //Centro
                                Orden.SetCentro(line.Substring(96, 4).Trim());
                                //Condiciones
                                Orden.SetCondiciones14(line.Substring(100, 5).Trim());
                                //Horario
                                Orden.SetHorario(line.Substring(105, 8).Trim());
                                //obervaciones 1
                                Orden.SetObservaciones1(line.Substring(113, 30).Trim());
                                //observaciones 2
                                Orden.SetObservaciones2(line.Substring(143, 30).Trim());
                                //ultima descarga
                                Orden.SetUltimaDescarga(line.Substring(173, 1).Trim());
                                //volumen 1
                                Orden.SetVolumen1(line.Substring(174, 6).Trim());
                                //volumen 2
                                Orden.SetVolumen2(line.Substring(180, 6).Trim());
                                //volumne 3
                                Orden.SetVolumen3(line.Substring(186, 6).Trim());
                                //nivel de deposito 1
                                Orden.SetNivelDeDeposito1(line.Substring(192, 2).Trim());
                                //nivel de deposito 2
                                Orden.SetNivelDeDeposito2(line.Substring(194, 2).Trim());
                                //nivel de deposito 3
                                Orden.SetNivelDeDeposito3(line.Substring(196, 2).Trim());
                                //llenado
                                Orden.SetLlenado(line.Substring(198, 1).Trim());
                                //vaciado
                                Orden.SetVaciado(line.Substring(199, 1).Trim());
                            }
                            else if (VersionEnvioPedido == 1)
                            {
                                //Transportista
                                Orden.SetTransportista14(line.Substring(25, 10).Trim());
                                //Pedido
                                Orden.SetPedido(line.Substring(35, 15).Trim());
                                //Instalacion
                                Orden.SetInstalacion14(line.Substring(51, 10).Trim());
                                //Material
                                Orden.SetMaterial(line.Substring(61, 9).Trim());
                                //Cantidad
                                Orden.SetCantidad(line.Substring(70, 11).Trim());
                                //Unidad de medida
                                Orden.SetUnidadDeMedida(line.Substring(81, 2).Trim());
                                //Fecha incial
                                Orden.SetFechaInicial(line.Substring(83, 8).Trim());
                                //Fecha Final
                                Orden.SetFechaFinal(line.Substring(91, 8).Trim());
                                //Tipo de operacion
                                Orden.SetTipoDeOperador(line.Substring(99, 1).Trim());
                                //Centro
                                Orden.SetCentro(line.Substring(100, 4).Trim());
                                //Condiciones
                                Orden.SetCondiciones14(line.Substring(104, 5).Trim());
                                //Horario
                                Orden.SetHorario(line.Substring(109, 8).Trim());
                                //obervaciones 1
                                Orden.SetObservaciones1(line.Substring(117, 30).Trim());
                                //observaciones 2
                                Orden.SetObservaciones2(line.Substring(147, 30).Trim());
                                //ultima descarga
                                Orden.SetUltimaDescarga(line.Substring(177, 1).Trim());
                                //volumen 1
                                Orden.SetVolumen1(line.Substring(178, 6).Trim());
                                //volumen 2
                                Orden.SetVolumen2(line.Substring(184, 6).Trim());
                                //volumne 3
                                Orden.SetVolumen3(line.Substring(190, 6).Trim());
                                //nivel de deposito 1
                                Orden.SetNivelDeDeposito1(line.Substring(196, 2).Trim());
                                //nivel de deposito 2
                                Orden.SetNivelDeDeposito2(line.Substring(198, 2).Trim());
                                //nivel de deposito 3
                                Orden.SetNivelDeDeposito3(line.Substring(200, 2).Trim());
                                //llenado
                                Orden.SetLlenado(line.Substring(202, 1).Trim());
                                //vaciado
                                Orden.SetVaciado(line.Substring(203, 1).Trim());
                            }
                            break;

                        //marca finalización fichero
                        case "91":
                            final = true;
                            break;
                        }

                        //insertamos los datos del objeto en base de datos(de todos los registros cabecera/suministros orden 1,2,3,4)
                        if (contadorlinias == 4)
                        {
                            //insertamos la cabecera por el rgistro a introducir (order, order_Cepsa)
                            Orden.SetCabeceraOrder(cabecera);
                            //obtenemos los datos de geolocalización de latitud y longitud de google maps.
                            string   direccion    = Orden.Calle1;
                            string   provincia    = CodeProvinceTostring(Orden.Provincia).Trim();
                            string   codigopostal = Orden.Cod_Postal;
                            string   latitud      = "0";
                            string   longitud     = "0";
                            string[] gps          = Geocode(direccion, codigopostal, provincia);

                            //validación de los valores de geocalización
                            if (!string.IsNullOrEmpty(gps[0]) && !string.IsNullOrEmpty(gps[1]))
                            {
                                latitud  = gps[0];
                                longitud = gps[1];
                            }



                            //conversion del opeardor de cepsa
                            if (Orden.Operador00 == "910106")
                            {
                                Orden.Operador00 = "500";
                                Orden.Operador14 = "500";
                            }
                            Orden.InsertDatasOrderView(expirationDays, latitud, longitud);
                            orders.Add(Orden);
                            Orden          = new ImportData();
                            contadorlinias = 0;
                        }
                    }
                    sr.Close();
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("fichero no se ha importado correctamente: " + exp.ToString());
            }
            return(orders);
        }