Documentation Index
Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/proyecto-dise-o/llms.txt
Use this file to discover all available pages before exploring further.
ProveedorController gestiona el mantenimiento del catálogo de proveedores de Tienda MiCholo. El controller está decorado con [Authorize(Roles = "Admin")] a nivel de clase, lo que significa que todas sus acciones están restringidas exclusivamente al rol Admin — ningún usuario con rol distinto puede acceder a ninguna ruta de este controller. Recibe AppDbContext vía inyección de dependencias. El modelo Proveedor requiere RazonSocial (sin números), Ruc (11 dígitos) y Telefono (9 dígitos comenzando en 9, sin repeticiones).
GET /Proveedor/Listar
Devuelve la lista completa de proveedores registrados, ordenada alfabéticamente. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
Comportamiento:
- Consulta
_context.Proveedoresy ordena porRazonSocialascendente. Usa?? string.Emptycomo valor de ordenación cuandoRazonSocialesnull.
View(List<Proveedor>).
GET /Proveedor/Nuevo
Muestra el formulario vacío para registrar un nuevo proveedor. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
Retorno: View().
POST /Proveedor/Nuevo
Procesa el alta de un nuevo proveedor, validando el modelo y la unicidad del RUC. Autorización:[Authorize(Roles = "Admin")] (heredado de clase). Incluye [ValidateAntiForgeryToken].
Objeto
Proveedor enlazado desde el formulario. Debe incluir RazonSocial, Ruc y opcionalmente Telefono.Validación del ModelState
Si
ModelState no es válido (p. ej. RUC con formato incorrecto, razón social con números), devuelve View(proveedor) con los errores de anotaciones de datos.Unicidad de RUC
Ejecuta
AnyAsync(p => p.Ruc == proveedor.Ruc). Si ya existe un proveedor con ese RUC, añade un error de modelo en el campo Ruc: “El RUC ingresado ya se encuentra registrado.” y devuelve el formulario.RedirectToAction("Listar") en éxito · View(Proveedor) en error.
GET /Proveedor/Editar/
Muestra el formulario de edición para el proveedor indicado. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
Identificador del proveedor (
IdProveedor).- Busca el proveedor con
FirstOrDefaultAsync(p => p.IdProveedor == id). - Si no existe, devuelve
NotFound()(HTTP 404).
View(Proveedor) · NotFound() si no se encuentra.
POST /Proveedor/Editar
Procesa la actualización de un proveedor existente, con la misma validación de unicidad de RUC pero excluyendo el registro actual. Autorización:[Authorize(Roles = "Admin")] (heredado de clase). Incluye [ValidateAntiForgeryToken].
Objeto
Proveedor con los datos actualizados, incluyendo IdProveedor para identificar el registro.Unicidad de RUC (excluyendo el registro actual)
Ejecuta
AnyAsync(p => p.Ruc == proveedor.Ruc && p.IdProveedor != proveedor.IdProveedor). Si otro proveedor tiene ese RUC, añade error en campo Ruc: “El RUC ingresado ya se encuentra registrado en otro proveedor.”RedirectToAction("Listar") en éxito · View(Proveedor) en error.
GET /Proveedor/Eliminar/
Elimina definitivamente un proveedor del sistema, siempre que no tenga productos asociados en el inventario. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
Identificador del proveedor (
IdProveedor).- Llama a
_context.Proveedores.Remove(proveedor)+SaveChangesAsync. - Establece
TempData["Success"].
RedirectToAction("Listar") en todos los casos (bloqueado o eliminado).