Esempio n. 1
0
        public JsonResult GuardarArchivo(HttpPostedFileBase txtfile, string precioLabel, string precioSelect)
        {
            IDictionary <string, string> respuesta = new Dictionary <string, string>();
            object usuario = Session["user_usuarioid"];

            if (usuario == null)
            {
                respuesta.Add("valor", "-1");
                respuesta.Add("clase", "danger");
                respuesta.Add("mensaje", "Su sesión ha expirado, no es posible hacer el cargue del archivo");
                return(Json(respuesta));
            }

            //Consulta de parametros por defecto en la creacion de la referencia
            icb_sysparameter tipo_id_consulta = db.icb_sysparameter.Where(d => d.syspar_cod == "P112").FirstOrDefault();
            int tipo_id =
                tipo_id_consulta != null
                    ? Convert.ToInt32(tipo_id_consulta.syspar_value)
                    : 3; //valor por defecto desarrollo

            icb_sysparameter linea_id_consulta = db.icb_sysparameter.Where(d => d.syspar_cod == "P113").FirstOrDefault();
            string           linea_id          =
                linea_id_consulta != null ? linea_id_consulta.syspar_value : "01"; //valor por defecto desarrollo

            icb_sysparameter proveedor_consulta = db.icb_sysparameter.Where(d => d.syspar_cod == "P114").FirstOrDefault();
            string           proveedor          =
                proveedor_consulta != null ? proveedor_consulta.syspar_value : "48"; //valor por defecto desarrollo

            try
            {
                string path = Server.MapPath("~/Content/" + txtfile.FileName);
                // Validacion para cuando el archivo esta en uso y no puede ser usado desde visual

                if (System.IO.File.Exists(path))
                {
                    System.IO.File.Delete(path);
                }

                txtfile.SaveAs(path);

                using (StreamReader objReader = new StreamReader(path))
                {
                    string lineasPrecio          = "";
                    int    contadorReferenciaNok = 0;
                    string lineasNok             = "";
                    int    contadorPrecioNok     = 0;
                    int    registros             = 0;
                    if (objReader.Peek() <= -1)
                    {
                        respuesta.Add("valor", "0");
                        respuesta.Add("clase", "danger");
                        respuesta.Add("mensaje",
                                      "El archivo se encuentra vacio o no cumple con el formato establecido");
                        return(Json(respuesta));
                    }

                    archListaPrecios archivoTransaccion = new archListaPrecios
                    {
                        nombre          = txtfile.FileName,
                        listaPrecio     = precioLabel,
                        fecha           = DateTime.Now,
                        items           = registros,
                        userid_creacion = Convert.ToInt32(usuario)
                    };
                    db.archListaPrecios.Add(archivoTransaccion);
                    db.SaveChanges();
                    int  ultimoArchivo = archivoTransaccion.id;
                    bool encabezado    = true;
                    while (objReader.Peek() > -1)
                    {
                        string linea = objReader.ReadLine();
                        if (encabezado)
                        {
                            encabezado = false;
                            continue;
                        }

                        registros++;
                        //Codigo de la referencia
                        int    i      = 0;
                        string codigo = linea.Substring(0, 18);
                        while (linea.Substring(i, 1) == "0")
                        {
                            i++;
                            codigo = linea.Substring(i, 18 - i);
                        }

                        //Descripción de la referencia
                        string descripcion = linea.Substring(28, 25).Trim();

                        //Precio de venta
                        string  c      = linea.Substring(54, 12).Trim();
                        decimal precio = c != null
                            ? Convert.ToDecimal(linea.Substring(54, 12).Trim(), CultureInfo.InvariantCulture)
                            : 0;

                        //Precio compra
                        string  r     = linea.Substring(150, 15).Trim();
                        decimal costo = !string.IsNullOrEmpty(linea.Substring(150, 15).Trim())
                            ? Convert.ToDecimal(linea.Substring(150, 15).Trim(), CultureInfo.InvariantCulture)
                            : 0;

                        //costo de emergencia
                        decimal costo_emergencia = linea.Substring(165, 13).Trim() != null
                            ? Convert.ToDecimal(linea.Substring(165, 13).Trim(), CultureInfo.InvariantCulture)
                            : 0;

                        //Unidad de medida
                        string unidad_medida = linea.Substring(147, 3).Trim();
                        if (unidad_medida.ToUpper() == "PZA")
                        {
                            unidad_medida = "UND";
                        }
                        else
                        {
                            unidad_medida = "OTRO";
                        }

                        //Valor IVA
                        string valor_iva = linea.Substring(179, 2).Trim();
                        if (valor_iva.ToUpper() == "UD" || valor_iva.ToUpper() == "XD")
                        {
                            valor_iva = "19";
                        }
                        else
                        {
                            valor_iva = "0";
                        }

                        icb_referencia buscarReferencia  = db.icb_referencia.FirstOrDefault(x => x.ref_codigo == codigo);
                        bool           referencia_creada = false;
                        if (buscarReferencia == null)
                        {
                            referencia_creada = true;
                            //insertarLog(ultimoArchivo, codigo, precio, costo, costo_emergencia, "La referencia no se encuentra en la base de datos");
                            //lineasNok += codigo + ", ";
                            //contadorReferenciaNok++;
                            icb_referencia referencia = new icb_referencia
                            {
                                ref_codigo           = codigo,
                                ref_descripcion      = descripcion,
                                ref_stock            = 0, //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                ref_estado           = true,
                                ref_usuario_creacion = Convert.ToInt32(usuario),
                                ref_fecha_creacion   = DateTime.Now,
                                ref_valor_unitario   = precio,
                                ref_cantidad_min     = 0, //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                ref_cantidad_max     = 0, //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                ref_valor_total      = 0, //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                por_iva           = Convert.ToInt32(valor_iva),
                                por_iva_compra    = Convert.ToInt32(valor_iva),
                                costo_unitario    = costo,
                                manejo_inv        = true,
                                unidad_medida     = unidad_medida,
                                costo_anterior    = 0,      //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                costo_emergencia  = costo_emergencia,
                                por_dscto         = 0,      //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                por_dscto_max     = 0,      //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                precio_venta      = precio,
                                precio_alterno    = precio, //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                precio_garantia   = costo,  //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                precio_diesel     = 0,      //Se deja este valor en 0 solititud 2019-08-26 jairo mateus
                                modulo            = "R",    // Este codigo corresponde a las referencias de respuestos
                                tipo_id           = tipo_id,
                                linea_id          = linea_id,
                                proveedor_ppal    = Convert.ToInt32(proveedor),
                                clasificacion_ABC = "C" //valor por defecto a solicitud del 2019-08-28 jairo mateus
                            };
                            db.icb_referencia.Add(referencia);
                            db.SaveChanges();
                        }

                        if (precio != 0 || referencia_creada)
                        {
                            int lista_precios = db.cargarListaPrecios(precio, codigo, costo, costo_emergencia,
                                                                      Convert.ToInt32(usuario), Convert.ToInt32(precioSelect));
                            detalleArchListaPrecios detalleTransaccion = new detalleArchListaPrecios
                            {
                                idArch          = ultimoArchivo,
                                referencia      = codigo,
                                precio          = precio,
                                costo           = costo,
                                costoEmergencia = costo_emergencia
                            };
                            db.detalleArchListaPrecios.Add(detalleTransaccion);
                        }
                        else
                        {
                            insertarLog(ultimoArchivo, codigo, precio, costo, costo_emergencia,
                                        "La referencia no tiene precio");
                            lineasPrecio += codigo + ", ";
                            contadorPrecioNok++;
                        }
                    }

                    archListaPrecios ObjArchivo = db.archListaPrecios.FirstOrDefault(x => x.id == ultimoArchivo);
                    ObjArchivo.items = registros;
                    ObjArchivo.registros_erroneos   = contadorReferenciaNok + contadorPrecioNok;
                    ObjArchivo.registros_ingresados = registros - (contadorReferenciaNok + contadorPrecioNok);
                    db.Entry(ObjArchivo).State      = EntityState.Modified;
                    if (lineasNok != "")
                    {
                        int a = lineasNok.Length;
                        lineasNok = lineasNok.Substring(0, a - 2);
                        respuesta.Add("sinReferencia", lineasNok);
                        respuesta.Add("mensajeRerencia",
                                      "Las siguientes referencias no fueron registradas porque no se encuentran en la base de datos: " +
                                      lineasNok);
                    }

                    if (lineasPrecio != "")
                    {
                        int b = lineasPrecio.Length;
                        lineasPrecio = lineasPrecio.Substring(0, b - 2);
                        respuesta.Add("sinPrecio", lineasPrecio);
                        respuesta.Add("mensajePrecio",
                                      "Las siguientes referencias no fueron registradas porque no tienen precio: " +
                                      lineasPrecio);
                    }

                    respuesta.Add("valor", "1");
                    respuesta.Add("clase", "success");
                    respuesta.Add("mensaje", "El archivo Fue procesado correctamente!");
                    try
                    {
                        db.SaveChanges();
                    }
                    catch (Exception dbEx)
                    {
                        Exception raise = dbEx;
                    }

                    return(Json(respuesta));
                }
            }
            catch (DbEntityValidationException dbEx)
            {
                Exception raise = dbEx;
                foreach (DbEntityValidationResult validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (DbValidationError validationError in validationErrors.ValidationErrors)
                    {
                        string message = string.Format("{0}:{1}",
                                                       validationErrors.Entry.Entity,
                                                       validationError.ErrorMessage);
                        // raise a new exception nesting
                        // the current instance as InnerException
                        raise = new InvalidOperationException(message, raise);
                    }
                }

                respuesta.Add("valor", "1");
                respuesta.Add("clase", "success");
                respuesta.Add("mensaje", "Error: " + raise);
                return(Json(respuesta));
            }
        }