Advertisement
Ousterfort

CategoriasController

Feb 6th, 2025
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.37 KB | Source Code | 0 0
  1. using System.Data;
  2. using ejemplo_crud_MVC_sqlServer.Models;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.Data.SqlClient;
  5.  
  6. namespace ejemplo_crud_MVC_sqlServer.Controllers
  7. {
  8.     public class CategoriasController : Controller
  9.     {
  10.         private readonly string _connectionString;
  11.  
  12.         public CategoriasController(IConfiguration configuration)
  13.         {
  14.             _connectionString = configuration.GetConnectionString("DefaultConnection");
  15.         }
  16.  
  17.         public IActionResult Index(int pagina = 1, int tamañoPagina = 10)
  18.         {
  19.             var categorias = ObtenerCategorias(pagina, tamañoPagina);
  20.  
  21.             var totalCategorias = ObtenerTotalCategorias();
  22.  
  23.             ViewBag.TotalPaginas = (int)Math.Ceiling((double)totalCategorias / tamañoPagina);
  24.  
  25.             ViewBag.PaginaActual = pagina;
  26.  
  27.             return View(categorias);
  28.         }
  29.  
  30.         private int ObtenerTotalCategorias()
  31.         {
  32.             int totalCategorias = 0;
  33.  
  34.             using (var connection = new SqlConnection(_connectionString))
  35.             {
  36.                 connection.Open();
  37.                 var command = new SqlCommand("sp_CRUD_General", connection)
  38.                 {
  39.                     CommandType = CommandType.StoredProcedure
  40.                 };
  41.                 command.Parameters.AddWithValue("@accion", "count");
  42.                 command.Parameters.AddWithValue("@tabla", "categoria");
  43.                 command.Parameters.AddWithValue("@id", DBNull.Value);
  44.                 command.Parameters.AddWithValue("@pagina", DBNull.Value);
  45.                 command.Parameters.AddWithValue("@tamañoPagina", DBNull.Value);
  46.  
  47.                 using (var reader = command.ExecuteReader())
  48.                 {
  49.                     if (reader.Read())
  50.                     {
  51.                         totalCategorias = (int)reader["TotalCategorias"];
  52.                     }
  53.                 }
  54.             }
  55.  
  56.             return totalCategorias;
  57.         }
  58.  
  59.         private List<Categoria> ObtenerCategorias(int pagina, int tamañoPagina)
  60.         {
  61.             var categorias = new List<Categoria>();
  62.  
  63.             using (var connection = new SqlConnection(_connectionString))
  64.             {
  65.                 connection.Open();
  66.                 var command = new SqlCommand("sp_CRUD_General", connection)
  67.                 {
  68.                     CommandType = CommandType.StoredProcedure
  69.                 };
  70.                 command.Parameters.AddWithValue("@accion", "select");
  71.                 command.Parameters.AddWithValue("@tabla", "categoria");
  72.                 command.Parameters.AddWithValue("@id", DBNull.Value);
  73.                 command.Parameters.AddWithValue("@pagina", pagina);
  74.                 command.Parameters.AddWithValue("@tamañoPagina", tamañoPagina);
  75.  
  76.                 using (var reader = command.ExecuteReader())
  77.                 {
  78.                     while (reader.Read())
  79.                     {
  80.                         categorias.Add(new Categoria
  81.                         {
  82.                             idCategoria = (int)reader["IdCategoria"],
  83.                             nombreCategoria = reader["NombreCategoria"].ToString()
  84.                         });
  85.                     }
  86.                 }
  87.             }
  88.  
  89.             return categorias;
  90.         }
  91.  
  92.         public IActionResult CrearOEditar(int? id)
  93.         {
  94.             if (!id.HasValue)
  95.             {
  96.                 return View(new Categoria());
  97.             }
  98.  
  99.             var categoria = ObtenerCategoriaPorId(id.Value);
  100.             if (categoria == null)
  101.             {
  102.                 return NotFound();
  103.             }
  104.  
  105.             return View(categoria);
  106.         }
  107.  
  108.         private Categoria ObtenerCategoriaPorId(int idCategoria)
  109.         {
  110.             Categoria categoria = null;
  111.  
  112.             using (var connection = new SqlConnection(_connectionString))
  113.             {
  114.                 connection.Open();
  115.                 var command = new SqlCommand("sp_CRUD_General", connection)
  116.                 {
  117.                     CommandType = CommandType.StoredProcedure
  118.                 };
  119.                 command.Parameters.AddWithValue("@accion", "select");
  120.                 command.Parameters.AddWithValue("@tabla", "categoria");
  121.                 command.Parameters.AddWithValue("@id", idCategoria);
  122.  
  123.                 using (var reader = command.ExecuteReader())
  124.                 {
  125.                     if (reader.Read())
  126.                     {
  127.                         categoria = new Categoria
  128.                         {
  129.                             idCategoria = (int)reader["IdCategoria"],
  130.                             nombreCategoria = reader["NombreCategoria"].ToString()
  131.                         };
  132.                     }
  133.                 }
  134.             }
  135.  
  136.             return categoria;
  137.         }
  138.  
  139.         [HttpPost]
  140.         public IActionResult CrearOEditar(Categoria categoria)
  141.         {
  142.             int filasAfectadas = 0;
  143.             try
  144.             {
  145.                 using (var connection = new SqlConnection(_connectionString))
  146.                 {
  147.                     connection.Open();
  148.                     using (var command = new SqlCommand("sp_CRUD_General", connection))
  149.                     {
  150.                         command.CommandType = CommandType.StoredProcedure;
  151.  
  152.                         var accion = categoria.idCategoria == 0 ? "insert" : "update";
  153.  
  154.                         command.Parameters.AddWithValue("@accion", accion);
  155.                         command.Parameters.AddWithValue("@tabla", "categoria");
  156.                         command.Parameters.AddWithValue("@id", categoria.idCategoria == 0 ? (object)DBNull.Value : categoria.idCategoria);
  157.                         command.Parameters.AddWithValue("@nombre", categoria.nombreCategoria);
  158.                         command.Parameters.AddWithValue("@descripcion", DBNull.Value);
  159.                         command.Parameters.AddWithValue("@idCategoria", DBNull.Value);
  160.                         command.Parameters.AddWithValue("@pagina", DBNull.Value);
  161.                         command.Parameters.AddWithValue("@tamañoPagina", DBNull.Value);
  162.  
  163.                         var returnParam = new SqlParameter
  164.                         {
  165.                             Direction = ParameterDirection.ReturnValue,
  166.                             SqlDbType = SqlDbType.Int
  167.                         };
  168.                         command.Parameters.Add(returnParam);
  169.  
  170.                         command.ExecuteNonQuery();
  171.  
  172.                         filasAfectadas = (int)returnParam.Value;
  173.                     }
  174.                 }
  175.  
  176.                 if (filasAfectadas > 0)
  177.                 {
  178.                     TempData["SuccessMessage"] = "Categoría guardada exitosamente.";
  179.                 }
  180.                 else if (filasAfectadas == 0)
  181.                 {
  182.                     TempData["ErrorMessage"] = "No se realizó ningún cambio en la categoría.";
  183.                 }
  184.                 else
  185.                 {
  186.                     TempData["ErrorMessage"] = "Ocurrió un error al guardar la categoría.";
  187.                 }
  188.             }
  189.             catch (Exception ex)
  190.             {
  191.                 TempData["ErrorMessage"] = "Ocurrió un error inesperado: " + ex.Message;
  192.             }
  193.  
  194.             return RedirectToAction("Index");
  195.         }
  196.  
  197.         public IActionResult Eliminar(int id)
  198.         {
  199.             try
  200.             {
  201.                 using (var connection = new SqlConnection(_connectionString))
  202.                 {
  203.                     connection.Open();
  204.  
  205.                     using (var command = new SqlCommand("sp_CRUD_General", connection))
  206.                     {
  207.                         command.CommandType = CommandType.StoredProcedure;
  208.  
  209.                         command.Parameters.AddWithValue("@accion", "delete");
  210.                         command.Parameters.AddWithValue("@tabla", "categoria");
  211.                         command.Parameters.AddWithValue("@id", id);
  212.  
  213.                         var returnParam = new SqlParameter
  214.                         {
  215.                             Direction = ParameterDirection.ReturnValue,
  216.                             SqlDbType = SqlDbType.Int
  217.                         };
  218.                         command.Parameters.Add(returnParam);
  219.  
  220.                         command.ExecuteNonQuery();
  221.  
  222.                         int filasAfectadas = (int)returnParam.Value;
  223.  
  224.                         if (filasAfectadas > 0)
  225.                         {
  226.                             TempData["SuccessMessage"] = "Categoría eliminada exitosamente.";
  227.                         }
  228.                         else if (filasAfectadas == 0)
  229.                         {
  230.                             TempData["ErrorMessage"] = "No se encontró la categoría a eliminar.";
  231.                         }
  232.                         else
  233.                         {
  234.                             TempData["ErrorMessage"] = "Ocurrió un error al eliminar la categoría.";
  235.                         }
  236.                     }
  237.                 }
  238.             }
  239.             catch (SqlException ex) when (ex.Number == 547)
  240.             {
  241.                 TempData["ErrorMessage"] = "No se puede eliminar la categoría porque está siendo utilizada por uno o más productos.";
  242.             }
  243.             catch (Exception ex)
  244.             {
  245.                 TempData["ErrorMessage"] = "Ocurrió un error inesperado: " + ex.Message;
  246.             }
  247.  
  248.             return RedirectToAction("Index");
  249.         }
  250.     }
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement