//modificar
        public JsonResult ModificarCostoFC(int Id, string Id_Acreedor, string nombre, string Id_Moneda, decimal Importe, DateTime Fecha_Inicio, DateTime Fecha_Fin, string Cuenta, string Id_Sociedad, int lineaNegocio)
        {
            object      respuesta   = null;
            CultureInfo cultureInfo = new CultureInfo("es-ES", false);
            CostoFR     costofr     = db.CostoFR.Where(x => x.Id == Id).SingleOrDefault();
            //Trafico trafico = db.Trafico.Where(x => x.Id_TraficoTR == Id_TraficoTR && x.Id_LineaNegocio == lineaNegocio && x.Activo == 1 && x.Sentido == "Costos").SingleOrDefault();
            Acreedor        acreedor        = db.Acreedor.Where(x => x.Acreedor1 == Id_Acreedor && x.Id_LineaNegocio == lineaNegocio && x.Activo == 1).SingleOrDefault();
            Operador        operador        = db.Operador.Where(x => x.Id_Operador == nombre && x.Id_LineaNegocio == lineaNegocio && x.Activo == 1).SingleOrDefault();
            Moneda          moneda          = db.Moneda.Where(x => x.Moneda1 == Id_Moneda && x.Id_LineaNegocio == lineaNegocio && x.Activo == 1).SingleOrDefault();
            CuentaResultado cuentaResultado = db.CuentaResultado.Where(x => x.Cuenta == Cuenta && x.Id_LineaNegocio == lineaNegocio && x.Activo == 1).SingleOrDefault();
            Sociedad        sociedad        = db.Sociedad.Where(x => x.Id_Sociedad == Id_Sociedad && x.Id_LineaNegocio == lineaNegocio && x.Activo == 1).SingleOrDefault();
            //Acreedor acreedor = db.Acreedor.Where(x => x.Acreedor1 == Id_Acreedor && x.Id_LineaNegocio == lineaNegocio && x.Activo == 1);
            //costofr.Id_Operador = operador.Id;


            bool valid   = true;
            var  mensaje = "";


            if (DateTime.Compare(Fecha_Inicio, Fecha_Fin) > 0)
            {
                valid   = false;
                mensaje = "Fecha Inicio debe ser menor que Fecha Fin";
            }


            if (valid)
            {
                try
                {
                    costofr.TipoOperador    = operador.Tipo_Operador;
                    costofr.Operador        = operador.Id_Operador;
                    costofr.AcreedorSap     = acreedor.Acreedor1;
                    costofr.NombreProveedor = acreedor.NombreAcreedor;
                    costofr.Moneda          = moneda.Moneda1;
                    costofr.Importe         = Importe;
                    costofr.Fecha_Inicio    = Fecha_Inicio.ToShortDateString();
                    costofr.Fecha_Fin       = Fecha_Fin.ToShortDateString();
                    costofr.CuentaR         = cuentaResultado.Cuenta;
                    costofr.SociedadGL      = int.Parse(sociedad.Id_Sociedad);
                    Log log = new Log();
                    log.insertaBitacoraModificacion(costofr, "Id", costofr.Id, "CostoFR.html", Request.UserHostAddress);
                    db.SaveChanges();
                    respuesta = new { success = true, results = "ok" };
                }
                catch (Exception ex)
                {
                    var error = ex.Message;
                    respuesta = new { success = false, results = "Hubo un error mientras se procesaba la petición" };
                }
            }
            else
            {
                respuesta = new { success = false, results = mensaje };
            }

            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }
        //Borrar
        public JsonResult borrarCostoFC(string strID)
        {
            int Id = 0;

            strID = strID.TrimEnd(',');
            string strmsg   = "ok";
            string strSalto = "</br>";
            bool   blsucc   = true;
            object respuesta;

            try
            {
                string[] Ids = strID.Split(',');

                for (int i = 0; i < Ids.Length; i++)
                {
                    if (Ids[i].Length != 0)
                    {
                        Id = int.Parse(Ids[i]);

                        string strresp_val = funGralCtrl.ValidaRelacion("CostoFC", Id);

                        if (strresp_val.Length == 0)
                        {
                            CostoFR CostoFC = db.CostoFR.Where(x => x.Id == Id).SingleOrDefault();
                            CostoFC.Activo = 0;
                            Log log = new Log();
                            log.insertaNuevoOEliminado(CostoFC, "Eliminado", "CostoFR.html", Request.UserHostAddress);

                            db.SaveChanges();
                        }
                        else
                        {
                            strmsg = "El(Los) " + Ids.Length.ToString() + " registro(s) que quieres borrar se está(n) usando en el(los) catálogo(s) " + strSalto;
                            strmsg = strmsg + strresp_val + strSalto;
                            blsucc = false;
                            break;
                        }
                    }
                }
                respuesta = new { success = blsucc, results = strmsg };
            }
            catch (Exception ex)
            {
                respuesta = new { success = false, results = ex.Message };
            }
            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }
        public JsonResult cargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio)
        {
            FuncionesGeneralesController FNCGrales = new FuncionesGeneralesController();
            List <string>        listaErrores      = new List <string>();
            IEnumerable <string> lineas            = null;
            object respuesta       = null;
            int    totalProcesados = 0;
            int    lineaActual     = 2;
            bool   status          = false;
            string exception       = "Error, se presento un error inesperado";

            //DateTime fecha = new DateTime();
            try
            {
                List <string> csvData = new List <string>();
                using (StreamReader reader = new StreamReader(archivoCSV.InputStream, Encoding.Default))
                {
                    while (!reader.EndOfStream)
                    {
                        csvData.Add(reader.ReadLine());
                    }
                }

                lineas = csvData.Skip(1);

                totalProcesados = lineas.Count();
                using (TransactionScope scope = new TransactionScope())
                {
                    foreach (string linea in lineas)
                    {
                        var lineaSplit = linea.Split(';');
                        if (lineaSplit.Count() == 12)
                        {
                            try
                            {
                                CostoFR CFR = new CostoFR();

                                CFR.TipoOperador    = lineaSplit[0];
                                CFR.Operador        = lineaSplit[1];
                                CFR.AcreedorSap     = lineaSplit[2];
                                CFR.NombreProveedor = lineaSplit[3];
                                CFR.Moneda          = lineaSplit[4];
                                CFR.Importe         = Convert.ToDecimal(string.IsNullOrEmpty(lineaSplit[5]) ? "0" : lineaSplit[5]);
                                // DateTime FechaInicio = FNCGrales.ConvierteFecha(lineaSplit[6], '/', "DMY");
                                CFR.Fecha_Inicio = lineaSplit[6];
                                // DateTime FechaFin = FNCGrales.ConvierteFecha(lineaSplit[7], '/', "DMY");
                                CFR.Fecha_Fin       = lineaSplit[7];
                                CFR.CuentaR         = lineaSplit[8];
                                CFR.SociedadGL      = int.Parse(string.IsNullOrEmpty(lineaSplit[9]) ? "0" : lineaSplit[9]);
                                CFR.TC              = decimal.Parse(string.IsNullOrEmpty(lineaSplit[10]) ? "0" : lineaSplit[10]);
                                CFR.Activo          = 1;
                                CFR.Id_LineaNegocio = lineaNegocio;

                                db.CostoFR.Add(CFR);
                                Log log = new Log();
                                log.insertaNuevoOEliminado(CFR, "Nuevo", "CostoFR.html", Request.UserHostAddress);
                            }
                            catch (FormatException)
                            {
                                listaErrores.Add("línea " + lineaActual + ": Campo con formato erróneo");
                            }
                        }
                        else
                        {
                            listaErrores.Add("Línea " + lineaActual + ": Número de campos insuficiente.");
                        }
                        ++lineaActual;
                    }
                    db.SaveChanges();
                    scope.Complete();
                    exception = "Datos cargados con éxito";
                    status    = true;
                }
            }
            catch (FileNotFoundException)
            {
                exception = "El archivo Selecionado aún no existe en el Repositorio.";
                status    = false;
            }
            catch (UnauthorizedAccessException)
            {
                exception = "No tiene permiso para acceder al archivo actual.";
                status    = false;
            }
            catch (IOException e) when((e.HResult & 0x0000FFFF) == 32)
            {
                exception = "Falta el nombre del archivo, o el archivo o directorio está en uso.";
                status    = false;
            }
            catch (TransactionAbortedException)
            {
                exception = "Transacción abortada. Se presentó un error.";
                status    = false;
            }
            finally
            {
                respuesta = new
                {
                    success = true,
                    results = listaErrores,
                    mensaje = exception,
                    totalProcesados,
                    status
                };
            }
            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }
        //agregar
        public JsonResult agregarCostoFC(int Id_Acreedor, int Id_Operador, int Id_Moneda, decimal Importe, DateTime Fecha_Inicio, DateTime Fecha_fin, int Id_Cuenta, int Id_Sociedad, int Linea_Negocio)
        {
            object          respuesta = null;
            bool            valid     = true;
            var             mensaje   = "";
            TC_Cierre       tC_Cierre = db.TC_Cierre.Where(x => x.Id_Moneda == Id_Moneda && x.Mes_Consumo.Year == Fecha_Inicio.Year && x.Mes_Consumo.Month == Fecha_Inicio.Month && x.Sentido == "COSTO" && x.Id_LineaNegocio == Linea_Negocio && x.Activo == 1).SingleOrDefault();
            Operador        operador  = db.Operador.Where(x => x.Id == Id_Operador && x.Id_LineaNegocio == Linea_Negocio && x.Activo == 1).SingleOrDefault();
            Acreedor        acreedor  = db.Acreedor.Where(x => x.Id == Id_Acreedor && x.Id_LineaNegocio == Linea_Negocio && x.Activo == 1).SingleOrDefault();
            Moneda          moneda    = db.Moneda.Where(x => x.Id == Id_Moneda && x.Id_LineaNegocio == Linea_Negocio && x.Activo == 1).SingleOrDefault();
            CuentaResultado cuentaR   = db.CuentaResultado.Where(x => x.Id == Id_Cuenta && x.Id_LineaNegocio == Linea_Negocio && x.Activo == 1).SingleOrDefault();
            Sociedad        sociedad  = db.Sociedad.Where(x => x.Id == Id_Sociedad && x.Id_LineaNegocio == Linea_Negocio && x.Activo == 1).SingleOrDefault();

            if (DateTime.Compare(Fecha_Inicio, Fecha_fin) >= 0)
            {
                valid   = false;
                mensaje = "Fecha Inicio Debe Ser MENOR que  Fin";
            }

            if (Convert.ToInt64(cuentaR.Cuenta) <= 0) //numeros negativos
            {
                valid = false;
                if (mensaje != "")
                {
                    mensaje = mensaje + " y " + "Importe No Pueder Ser Menor a Cero";
                }
                else
                {
                    mensaje = "Cuenta debe ser mayor a cero";
                }
            }

            if (valid)
            {
                try
                {
                    var nuevo = new CostoFR();
                    nuevo.TipoOperador    = operador.Tipo_Operador;
                    nuevo.Operador        = operador.Id_Operador;
                    nuevo.AcreedorSap     = acreedor.Acreedor1;
                    nuevo.NombreProveedor = acreedor.NombreAcreedor;
                    nuevo.Moneda          = moneda.Moneda1;
                    nuevo.Importe         = Importe;
                    nuevo.Fecha_Inicio    = Fecha_Inicio.ToShortDateString();
                    nuevo.Fecha_Fin       = Fecha_fin.ToShortDateString();
                    nuevo.CuentaR         = cuentaR.Cuenta;
                    nuevo.SociedadGL      = int.Parse(sociedad.Id_Sociedad);
                    if (tC_Cierre == null)
                    {
                        nuevo.TC = 0;
                    }
                    else
                    {
                        nuevo.TC = tC_Cierre.TC_MXN;
                    }
                    nuevo.Activo          = 1;
                    nuevo.Id_LineaNegocio = Linea_Negocio;

                    db.CostoFR.Add(nuevo);
                    Log log = new Log();
                    log.insertaNuevoOEliminado(nuevo, "Nuevo", "CostoFR.html", Request.UserHostAddress);

                    db.SaveChanges();
                    respuesta = new { success = true, result = "ok" };
                }
                catch (Exception ex)
                {
                    var error = ex.Message;
                    respuesta = new { success = false, result = "Hubo un error mientras se procesaba la petición" };
                }
            }
            else
            {
                respuesta = new { success = false, result = mensaje };
            }

            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }