/*GuardarCuentas: obtiene las cuentas provinientes del archivo de excel, les asigna su tipo
         * de cuenta y arma el catalogo de la empresa en el sistema*/
        public async Task <string> GuardarCuentas(int IdEmpresa, string celdaCod, string celdaNom, string hoja, IFormFile files)
        {
            int contador = int.Parse(celdaCod.Substring(1, 1));

            if (files == null || files.Length <= 0)
            {
                return("El archivo subido es inválido, intentelo de nuevo.");
            }

            if (!(Path.GetExtension(files.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase)))
            {
                return("Solo se aceptan archivos de tipo Excel.");
            }
            if (_context.Catalogodecuenta.Where(cC => cC.Idempresa == IdEmpresa).Any())
            {
                return("Ya existe un catálogo registrado para esta empresa.");
            }

            var listCuentas = new List <CuentaViewModel>();

            using (var stream = new MemoryStream())
            {
                await files.CopyToAsync(stream);

                using (var package = new ExcelPackage(stream))
                {
                    ExcelWorksheet worksheet = package.Workbook.Worksheets[hoja];
                    var            rowCount  = worksheet.Dimension.Rows;

                    for (int row = 1; row <= rowCount; row++)
                    {
                        if (!(worksheet.Cells[celdaCod].Value == null) || !(worksheet.Cells[celdaNom].Value == null))
                        {
                            listCuentas.Add(new CuentaViewModel
                            {
                                codigo = worksheet.Cells[celdaCod].Value.ToString().Trim(),
                                nombre = worksheet.Cells[celdaNom].Value.ToString().Trim(),
                            });
                            contador++;
                            celdaCod = celdaCod.Substring(0, 1) + contador;
                            celdaNom = celdaNom.Substring(0, 1) + contador;
                        }
                    }
                }
            }
            await cuentasController.InsertarCuentasDeTotal();

            await cuentasController.InsertarNuevasCuentas(listCuentas);

            List <Catalogodecuenta> catalogodecuentas = await ArmarCatalago(IdEmpresa, listCuentas);

            foreach (var catalogo in catalogodecuentas)
            {
                _context.Add(catalogo);
                await _context.SaveChangesAsync();
            }
            return("Archivo subido con éxito.");
        }
        public async Task VerificarYSubirEstado(int IdEmpresa, List <BalanceViewModel> balanceV)
        {
            var cuentasCatalogo = (from cuenta in _context.Catalogodecuenta
                                   where cuenta.Idempresa == IdEmpresa
                                   select new
            {
                nomCuenta = cuenta.IdcuentaNavigation.Nomcuenta,
                tipoCuenta = cuenta.IdcuentaNavigation.IdtipocuentaNavigation.Nomtipocuenta,
                idCuenta = cuenta.IdcuentaNavigation.Idcuenta,
                codCuentaC = cuenta.Codcuentacatalogo
            }).ToList();
            int idDefault = _context.Cuenta.Where(d => d.Nomcuenta.Equals("Default")).FirstOrDefault().Idcuenta;

            foreach (var filaEstado in balanceV)
            {
                var infoCuenta = cuentasCatalogo.Find(w => w.nomCuenta.Equals(filaEstado.nomCuenta));
                if (!(infoCuenta == null))
                {
                    var verificar = _context.Valoresestado.Where(s => s.Idcuenta == infoCuenta.idCuenta && s.Idempresa == IdEmpresa &&
                                                                 s.Valorestado == filaEstado.valor && s.Anio == filaEstado.anioFila && s.Nombrevalore.Equals(filaEstado.nomCuenta)).ToList();
                    if (verificar.Count == 0)
                    {
                        _context.Add(new Valoresestado
                        {
                            Idempresa    = IdEmpresa,
                            Idcuenta     = infoCuenta.idCuenta,
                            Valorestado  = filaEstado.valor,
                            Anio         = filaEstado.anioFila,
                            Nombrevalore = filaEstado.nomCuenta
                        });
                    }
                }
                else
                {
                    var verificar = _context.Valoresestado.Where(s => s.Idcuenta == idDefault && s.Idempresa == IdEmpresa &&
                                                                 s.Valorestado == filaEstado.valor && s.Anio == filaEstado.anioFila && s.Nombrevalore.Equals(filaEstado.nomCuenta)).ToList();
                    if (verificar.Count == 0)
                    {
                        _context.Add(new Valoresestado
                        {
                            Idempresa    = IdEmpresa,
                            Idcuenta     = idDefault,
                            Valorestado  = filaEstado.valor,
                            Anio         = filaEstado.anioFila,
                            Nombrevalore = filaEstado.nomCuenta
                        });
                    }
                }
            }
            await _context.SaveChangesAsync();
        }
        //InsertarNuevasCuentas: Verifica si la cuenta ya existe en la base, si no es así la inserta
        public async Task InsertarNuevasCuentas(List <CuentaViewModel> lstCuentasV)
        {
            List <Cuenta> lstCBase = await ConsultarCuentas();

            List <Cuenta> lstCuentas = await AsignarTipo(lstCuentasV);

            bool bandera = true;

            foreach (var cuenta in lstCuentas)
            {
                bandera = true;
                for (int i = 0; i < lstCBase.Count; i++)
                {
                    if (lstCBase[i].Nomcuenta.Equals(cuenta.Nomcuenta))
                    {
                        bandera = false;
                        break;
                    }
                }
                if (bandera)
                {
                    _context.Add(cuenta);
                    await _context.SaveChangesAsync();
                }
            }
        }
        public async Task <IActionResult> Create([Bind("idMensaje,mensajeMayorBase,mensajeMenorBase,mensajeMayorEmp,mensajeMenorEmp,mensajeIgualBase,mensajeIgualEmp,idRatio")] MensajesAnalisis mensajesAnalisis)
        {
            if (ModelState.IsValid)
            {
                _context.Add(mensajesAnalisis);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(mensajesAnalisis));
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Create([Bind("Idtipocuenta,Nomtipocuenta")] Tipocuenta tipocuenta)
        {
            if (ModelState.IsValid)
            {
                _context.Add(tipocuenta);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(tipocuenta));
        }
        public async Task <IActionResult> Create([Bind("nomCuentaEID,nomCuentaE")] NomCuentaE nomCuentaE)
        {
            if (ModelState.IsValid)
            {
                _context.Add(nomCuentaE);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(nomCuentaE));
        }
Ejemplo n.º 7
0
        public async Task <IActionResult> Create([Bind("Idsector,Nomsector")] Sector sector)
        {
            if (ModelState.IsValid)
            {
                _context.Add(sector);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(sector));
        }
        public async Task <IActionResult> Create([Bind("Idempresa,Idsector,Nomempresa,Descempresa,Razonsocial")] Empresa empresa)
        {
            if (ModelState.IsValid)
            {
                _context.Add(empresa);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["Idsector"] = new SelectList(_context.Sector, "Idsector", "Nomsector", empresa.Idsector);
            return(View(empresa));
        }
Ejemplo n.º 9
0
        public async Task <IActionResult> Create([Bind("Idratio,Idsector,Valorratiob")] Ratiobasesector ratiobasesector)
        {
            if (ModelState.IsValid)
            {
                //_context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[RATIOBASESECTOR] ON");
                //_context.Database.ExecuteSqlCommand("INSERT INTO RATIOBASESECTOR (Idratio, Idsector, Valorratiob) VALUES ("
                //    + ratiobasesector.Idratio + ", "
                //    + ratiobasesector.Idsector + ", "
                //    + ratiobasesector.Valorratiob + ");");
                _context.Add(ratiobasesector);
                await _context.SaveChangesAsync();

                //_context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[RATIOBASESECTOR] OFF");
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["Idratio"]  = new SelectList(_context.Ratio, "Idratio", "Nombreratiob", ratiobasesector.Idratio);
            ViewData["Idsector"] = new SelectList(_context.Sector, "Idsector", "Nomsector", ratiobasesector.Idsector);
            return(View(ratiobasesector));
        }
Ejemplo n.º 10
0
        /*VerificarBalance: verifica que el balance cuadre e inserta los valores en la base*/
        public async Task <int> VerificarBalance(int IdEmpresa, List <BalanceViewModel> balanceV)
        {
            int a1        = 0;
            int resultado = COD_BALANCE_DESCUADRADO; //Inicializo asumiendo que esta descuadrado

            //Obtengo la lista de cuentas en catalogo, excluyendo las cuentas de total que se agregaron en la creación cod=0 y hago una lista personalizada
            var cuentasCatalogo = (from cuenta in _context.Catalogodecuenta
                                   where cuenta.Idempresa == IdEmpresa &&
                                   cuenta.Codcuentacatalogo != "D" &&
                                   cuenta.Codcuentacatalogo != "0"
                                   select new
            {
                nomCuenta = cuenta.IdcuentaNavigation.Nomcuenta,
                tipoCuenta = cuenta.IdcuentaNavigation.IdtipocuentaNavigation.Nomtipocuenta,
                idCuenta = cuenta.IdcuentaNavigation.Idcuenta,
                cuentaEstandar = cuenta.nomCuentaE.nomCuentaE,
                codCuentaCatalogo = cuenta.Codcuentacatalogo
            }).ToList();
            //Recojo las listas del balance que correspondan a los 3 totales principales
            var ctaTotalActivos = balanceV.Where(x => x.nomCuenta.Equals("TOTAL ACTIVOS", StringComparison.OrdinalIgnoreCase) ||
                                                 x.nomCuenta.Equals("ACTIVO TOTAL", StringComparison.OrdinalIgnoreCase) || x.nomCuenta.Equals("TOTAL ACTIVO", StringComparison.OrdinalIgnoreCase) ||
                                                 x.nomCuenta.Equals("ACTIVOS TOTALES", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            var ctaTotalPasivo = balanceV.Where(x => x.nomCuenta.Equals("TOTAL PASIVO", StringComparison.OrdinalIgnoreCase) ||
                                                x.nomCuenta.Equals("PASIVO TOTAL", StringComparison.OrdinalIgnoreCase) || x.nomCuenta.Equals("TOTAL PASIVOS", StringComparison.OrdinalIgnoreCase) ||
                                                x.nomCuenta.Equals("PASIVOS TOTALES", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            var ctaTotalPatrimonio = balanceV.Where(x => x.nomCuenta.Contains("TOTAL CAPITAL SOCIAL", StringComparison.OrdinalIgnoreCase) ||
                                                    x.nomCuenta.Contains("TOTAL PATRIMONIO", StringComparison.OrdinalIgnoreCase) || x.nomCuenta.Contains("PATRIMONIO TOTAL", StringComparison.OrdinalIgnoreCase) ||
                                                    x.nomCuenta.Contains("PASIVOS TOTALES", StringComparison.OrdinalIgnoreCase) || x.nomCuenta.Contains("TOTAL CAPITAL CONTABLE", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            if (ctaTotalActivos == null || ctaTotalPasivo == null || ctaTotalPatrimonio == null)
            {
                resultado = COD_FORMATO_INVALIDO; //Si alguna lista esta vacia es porque no se encontró el nombre estándar
            }

            //Almaceno su valor
            double valTotalActivos      = ctaTotalActivos.valor;
            double valTotalPasivo       = ctaTotalPasivo.valor;
            double valTotalPatrimonio   = ctaTotalPatrimonio.valor;
            double valTotalPatMasPasivo = valTotalPasivo + valTotalPatrimonio;

            if (valTotalActivos == valTotalPatMasPasivo) //Comparo que cuadre
            {
                foreach (var filaBV in balanceV)
                {
                    a1 = filaBV.anioFila;
                    //Busco la cuenta en el catalogo para obtener su información
                    var infoCuenta = cuentasCatalogo.Find(z => z.nomCuenta.Equals(filaBV.nomCuenta));
                    if (!(infoCuenta == null))
                    {
                        Valoresdebalance vB = new Valoresdebalance
                        {
                            Idempresa   = IdEmpresa,
                            Idcuenta    = infoCuenta.idCuenta,
                            Valorcuenta = filaBV.valor,
                            Anio        = filaBV.anioFila
                        };
                        //Verifico que no exista este registro en la base
                        var vc = _context.Valoresdebalance.Where(x => x.Idcuenta == vB.Idcuenta && x.Idempresa == vB.Idempresa &&
                                                                 x.Valorcuenta == vB.Valorcuenta && x.Anio == vB.Anio).ToList();
                        if (vc.Count == 0)
                        {
                            _context.Add(vB);
                        }
                    }
                }
                //Busco las cuentas de total que yo agregué
                var ctasTotales = (from cuenta in _context.Catalogodecuenta
                                   where cuenta.Idempresa == IdEmpresa &&
                                   cuenta.Codcuentacatalogo.Equals("0")
                                   select new
                {
                    nomCuenta = cuenta.IdcuentaNavigation.Nomcuenta,
                    tipoCuenta = cuenta.IdcuentaNavigation.IdtipocuentaNavigation.Nomtipocuenta,
                    idCuenta = cuenta.IdcuentaNavigation.Idcuenta,
                    cuentaEstandar = cuenta.nomCuentaE.nomCuentaE,
                    codCuentaCatalogo = cuenta.Codcuentacatalogo
                }).ToList();
                //Lleno las 3 cuentas de total que se que tengo su valor
                foreach (var total in ctasTotales)
                {
                    var vt = _context.Valoresdebalance.Where(x => x.Idcuenta == total.idCuenta && x.Idempresa == IdEmpresa &&
                                                             x.Anio == a1).ToList();
                    if (vt.Count == 0)
                    {
                        string tipo = total.tipoCuenta;
                        switch (tipo)
                        {
                        case "PASIVO":
                            _context.Add(new Valoresdebalance
                            {
                                Idempresa   = IdEmpresa,
                                Idcuenta    = total.idCuenta,
                                Valorcuenta = valTotalPasivo,
                                Anio        = a1
                            });
                            break;

                        case "PATRIMONIO":
                            _context.Add(new Valoresdebalance
                            {
                                Idempresa   = IdEmpresa,
                                Idcuenta    = total.idCuenta,
                                Valorcuenta = valTotalPatrimonio,
                                Anio        = a1
                            });
                            break;

                        case "ACTIVO":
                            _context.Add(new Valoresdebalance
                            {
                                Idempresa   = IdEmpresa,
                                Idcuenta    = total.idCuenta,
                                Valorcuenta = valTotalActivos,
                                Anio        = a1
                            });
                            break;

                        default:
                            break;
                        }
                    }
                }
                await _context.SaveChangesAsync();

                resultado = COD_VALORES_EXITO; //Si todo se inserto, retorno el codigo de éxito
            }
            return(resultado);                 //Si el if de verificar que el balance cuadre da falso, se retorna el valor inicial de resultado (cod descuadrado)
        }
Ejemplo n.º 11
0
 public static void Inicio(ProyAnfContext context)
 {
     context.Database.EnsureCreated();
     if (!context.Razon.Any())
     {
         var razon = new Razon[]
         {
             new Razon {
                 nombreRazon = "RAZON DE CIRCULANTE",
                 numerador   = "ACTIVOS CORRIENTES",
                 denominador = "PASIVOS CORRIENTES",
                 tipo        = "FINANCIERA"
             },
             new Razon {
                 nombreRazon = "PRUEBA ACIDA",
                 numerador   = "ACTIVOS CORRIENTES-INVENTARIO",
                 denominador = "PASIVOS CORRIENTES",
                 tipo        = "FINANCIERA"
             },
             new Razon {
                 nombreRazon = "RAZON DE CAPITAL DE TRABAJO",
                 numerador   = "ACTIVOS CORRIENTES-PASIVOS CORRIENTES",
                 denominador = "ACTIVOS TOTALES",
                 tipo        = "FINANCIERA"
             },
             new Razon {
                 nombreRazon = "RAZON DE EFECTIVO",
                 numerador   = "EFECTIVO + VALORES DE CORTO PLAZO",
                 denominador = "PASIVOS CORRIENTES",
                 tipo        = "FINANCIERA"
             },
             new Razon {
                 nombreRazon = "RAZON DE ROTACION DE INVENTARIO",
                 numerador   = "COSTO DE LAS VENTAS",
                 denominador = "INVENTARIO PROMEDIO",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "RAZON DE DIAS DE INVENTARIO",
                 numerador   = "INVENTARIO PROMEDIO",
                 denominador = "COSTO DE LAS VENTAS/365",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "RAZON DE ROTACION DE CUENTAS POR COBRAR",
                 numerador   = "VENTAS NETAS",
                 denominador = "PROMEDIO CUENTAS POR COBRAR COMERCIALES",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "RAZON DE PERIODO MEDIO DE COBRANZA",
                 numerador   = "PROMEDIO CUENTAS POR COBRAR COMERCIALES*365",
                 denominador = "VENTAS NETAS",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "RAZON DE ROTACION DE CUENTAS POR PAGAR",
                 numerador   = "COMPRAS",
                 denominador = "PROMEDIO CUENTAS POR COBRAR COMERCIALES",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "PERIODO MEDIO DE PAGO",
                 numerador   = "PROMEDIO CUENTAS POR COBRAR COMERCIALES*365",
                 denominador = "COMPRAS",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "INDICE DE ROTACION DE ACTIVOS TOTALES",
                 numerador   = "VENTAS NETAS",
                 denominador = "ACTIVO TOTAL PROMEDIO",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "INDICE DE ROTACION DE ACTIVOS FIJOS",
                 numerador   = "VENTAS NETAS",
                 denominador = "ACTIVO FIJO NETO PROMEDIO",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "INDICE DE MARGEN BRUTO",
                 numerador   = "UTILIDAD BRUTA",
                 denominador = "VENTAS NETAS",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "INDICE DE MARGEN OPERATIVO",
                 numerador   = "UTILIDAD OPERATIVA",
                 denominador = "VENTAS NETAS",
                 tipo        = "EFICIENCIA O ACTIVIDAD"
             },
             new Razon {
                 nombreRazon = "GRADO DE ENDEUDAMIENTO",
                 numerador   = "PASIVO TOTAL",
                 denominador = "ACTIVO TOTAL",
                 tipo        = "APALANCAMIENTO"
             },
             new Razon {
                 nombreRazon = "GRADO DE PROPIEDAD",
                 numerador   = "PATRIMONIO",
                 denominador = "ACTIVO TOTAL",
                 tipo        = "APALANCAMIENTO"
             },
             new Razon {
                 nombreRazon = "RAZON DE ENDEUDAMIENTO PATRIMONIAL",
                 numerador   = "PASIVO TOTAL",
                 denominador = "PATRIMONIO TOTAL",
                 tipo        = "APALANCAMIENTO"
             },
             new Razon {
                 nombreRazon = "RAZON DE COBERTURA DE GASTOS FINANCIEROS",
                 numerador   = "UTILIDAD ANTES DE IMPUESTO",
                 denominador = "GASTOS FINANCIEROS",
                 tipo        = "APALANCAMIENTO"
             },
             new Razon {
                 nombreRazon = "RENTABILIDAD NETA DEL PATRIMONIO",
                 numerador   = "UTILIDAD NETA",
                 denominador = "PATRIMONIO PROMEDIO",
                 tipo        = "RENTABILIDAD"
             },
             new Razon {
                 nombreRazon = "RENTABILIDAD POR ACCION",
                 numerador   = "UTILIDAD NETA",
                 denominador = "NUMERO DE ACCIONES",
                 tipo        = "RENTABILIDAD"
             },
             new Razon {
                 nombreRazon = "RENTABILIDAD DEL ACTIVO",
                 numerador   = "UTILIDAD NETA",
                 denominador = "ACTIVO TOTAL PROMEDIO",
                 tipo        = "RENTABILIDAD"
             },
             new Razon {
                 nombreRazon = "RENTABILIDAD SOBRE VENTAS",
                 numerador   = "UTILIDAD NETA",
                 denominador = "VENTAS NETAS",
                 tipo        = "RENTABILIDAD"
             },
             new Razon {
                 nombreRazon = "RENTABILIDAD SOBRE INVERSION",
                 numerador   = "INGRESOS-INVERSION",
                 denominador = "INVERSION",
                 tipo        = "RENTABILIDAD"
             }
         };
         foreach (Razon r in razon)
         {
             context.Add(r);
         }
     }
     if (!context.Ratio.Any())
     {
         var ratio = new Ratio[]
         {
             new Ratio
             {
                 Nombreratiob = "RAZON DE CIRCULANTE"
             },
             new Ratio
             {
                 Nombreratiob = "RENTABILIDAD DEL ACTIVO"
             },
             new Ratio
             {
                 Nombreratiob = "RENTABILIDAD POR ACCION"
             },
             new Ratio
             {
                 Nombreratiob = "RENTABILIDAD NETA DEL PATRIMONIO"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE COBERTURA DE GASTOS FINANCIEROS"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE ENDEUDAMIENTO PATRIMONIAL"
             },
             new Ratio
             {
                 Nombreratiob = "GRADO DE PROPIEDAD"
             },
             new Ratio
             {
                 Nombreratiob = "GRADO DE ENDEUDAMIENTO"
             },
             new Ratio
             {
                 Nombreratiob = "INDICE DE MARGEN OPERATIVO"
             },
             new Ratio
             {
                 Nombreratiob = "INDICE DE MARGEN BRUTO"
             },
             new Ratio
             {
                 Nombreratiob = "RENTABILIDAD SOBRE VENTAS"
             },
             new Ratio
             {
                 Nombreratiob = "INDICE DE ROTACION DE ACTIVOS FIJOS"
             },
             new Ratio
             {
                 Nombreratiob = "PERIODO MEDIO DE PAGO"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE ROTACION DE CUENTAS POR PAGAR"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE PERIODO MEDIO DE COBRANZA"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE ROTACION DE CUENTAS POR COBRAR"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE DIAS DE INVENTARIO"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE ROTACION DE INVENTARIO"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE EFECTIVO"
             },
             new Ratio
             {
                 Nombreratiob = "RAZON DE CAPITAL DE TRABAJO"
             },
             new Ratio
             {
                 Nombreratiob = "PRUEBA ACIDA"
             },
             new Ratio
             {
                 Nombreratiob = "INDICE DE ROTACION DE ACTIVOS TOTALES"
             },
             new Ratio
             {
                 Nombreratiob = "RENTABILIDAD SOBRE INVERSION"
             },
         };
         foreach (Ratio r in ratio)
         {
             context.Add(r);
         }
     }
     context.SaveChanges();
 }