Agregada rama DEV-REC-HUMA de TPAtesa

This commit is contained in:
acruz 2026-06-26 10:14:39 -06:00
parent 98367944ee
commit 7095ebe60e
2310 changed files with 871986 additions and 0 deletions

View file

@ -0,0 +1,34 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.1.31911.260
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PruebaAzureAD", "PruebaAzureAD\PruebaAzureAD.csproj", "{0B44D687-AD22-4638-A0F3-EBD5A770E1AD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0B44D687-AD22-4638-A0F3-EBD5A770E1AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0B44D687-AD22-4638-A0F3-EBD5A770E1AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B44D687-AD22-4638-A0F3-EBD5A770E1AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B44D687-AD22-4638-A0F3-EBD5A770E1AD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {85A8CD79-767C-499A-BBF7-2A33F91968A3}
EndGlobalSection
GlobalSection(TeamFoundationVersionControl) = preSolution
SccNumberOfProjects = 2
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer = http://192.168.1.10:8080/tfs/tpatesa
SccLocalPath0 = .
SccProjectUniqueName1 = PruebaAzureAD\\PruebaAzureAD.csproj
SccProjectName1 = PruebaAzureAD
SccLocalPath1 = PruebaAzureAD
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"microsoft.dotnet-msidentity": {
"version": "1.0.0",
"commands": [
"dotnet-msidentity"
]
}
}
}

View file

@ -0,0 +1,81 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using PruebaAzureAD.Models;
using PruebaAzureAD.Servicios;
using System.Diagnostics;
namespace PruebaAzureAD.Controllers
{
[Authorize]
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
readonly Persona persona = new Persona();
readonly Estado estado = new Estado();
readonly TipoIdentificacion tipoIdentificacion = new TipoIdentificacion();
readonly Pais pais = new Pais();
readonly EstadoCivil estadoCivil = new EstadoCivil();
readonly Universidad universidad = new Universidad();
readonly GradoAcademico gradoAcademico = new GradoAcademico();
readonly Empresa empresa = new Empresa();
readonly Puesto puesto = new Puesto();
readonly TipoNombramiento tipoNombramiento = new TipoNombramiento();
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public async Task<IActionResult> Index()
{
var data = await persona.ObtenerPersonas();
return View(data);
}
public async Task<IActionResult> Agregar()
{
ViewBag.Estados = await estado.ObtenerEstados();
ViewBag.Tipos = await tipoIdentificacion.ObtenerTipoIdentificaciones();
ViewBag.Paises = await pais.ObtenerPaises();
ViewBag.EstadosCiviles = await estadoCivil.ObtenerEstadosCiviles();
//ViewBag.Provincias = await persona.ObtenerProvincias();
//ViewBag.Cantones = await persona.ObtenerCantones();
//ViewBag.Distritos = await persona.ObtenerDistritos();
ViewBag.Universidades = await universidad.ObtenerUniversidades();
ViewBag.GradosAcademicos = await gradoAcademico.ObtenerGradosAcademicos();
ViewBag.Empresas = await empresa.ObtenerEmpresas();
ViewBag.Puestos = await puesto.ObtenerPuestos();
ViewBag.TipoNombramiento = await tipoNombramiento.ObtenerNombramientos();
return View();
}
[HttpPost]
public async Task<IActionResult> Agregar(PersonaViewModel funcionario)
{
try
{
await persona.AgregarPersona(funcionario);
}
catch (Exception)
{
throw;
}
return RedirectToAction(nameof(Index));
}
public IActionResult Privacy()
{
return View();
}
[AllowAnonymous]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class CantonViewModel
{
public int IdProvincia { get; set; }
public int IdCanton { get; set; }
public string Descripcion { get; set; }
}
}

View file

@ -0,0 +1,10 @@
namespace PruebaAzureAD.Models
{
public class DistritoViewModel
{
public int IdProvincia { get; set; }
public int IdCanton { get; set; }
public int IdDistrito { get; set; }
public string Descripcion { get; set; }
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class EmpresaViewModel
{
public int IdEmpresa { get; set; }
public string Nombre { get; set; }
public bool? Estado { get; set; }
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class ErrorViewModel
{
public string? RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class EstadoCivilViewModel
{
public int IdEstadoCivil { get; set; }
public string Descripcion { get; set; }
public bool Estado { get; set; }
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class EstadoViewModel
{
public int IdEstado { get; set; }
public string Descripcion { get; set; }
public bool Estado { get; set; }
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class GradoAcademicoViewModel
{
public int IdGradoAcademico { get; set; }
public string Descripcion { get; set; }
public bool? Estado { get; set; }
}
}

View file

@ -0,0 +1,10 @@
namespace PruebaAzureAD.Models
{
public class PaisViewModel
{
public int IdPais { get; set; }
public string Descripcion { get; set; }
public string Nacionalidad { get; set; }
public bool? Estado { get; set; }
}
}

View file

@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PruebaAzureAD.Models
{
public class PersonaViewModel
{
//public int IdPersona { get; set; }
[Required]
public int IdTipoIdentificacion { get; set; }
[Required]
public string NoIdentificacion { get; set; }
[Required]
public string Nombre { get; set; }
[Required]
public string PrimerApellido { get; set; }
[Required]
public string SegundoApellido { get; set; }
[Required]
public DateTime FechaNacimiento { get; set; }
[Required]
public int IdPaisNacionalidad { get; set; }
[Required]
public int IdEstadoCivil { get; set; }
[Required]
public string Direccion { get; set; }
[Required]
public string Correo { get; set; }
[Required]
public int IdUniversidad { get; set; }
[Required]
public int IdGradoAcademico { get; set; }
[Required]
public string Titulo { get; set; }
[Required]
public int IdEmpresa { get; set; }
[Required]
public int IdPuesto { get; set; }
[Required]
public int IdTipoNombramiento { get; set; }
[Required]
public DateTime FechaIngreso { get; set; }
public DateTime? FechaAscenso { get; set; }
public DateTime? FechaSalida { get; set; }
[Required]
public decimal SalarioBruto { get; set; }
[Required]
public string TelefonoPrincipal { get; set; }
public string? TelefonoSecundario { get; set; }
[Required]
public int IdEstado { get; set; }
}
}

View file

@ -0,0 +1,8 @@
namespace PruebaAzureAD.Models
{
public class ProvinciaViewModel
{
public int IdProvincia { get; set; }
public string Descripcion { get; set; }
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class PuestoViewModel
{
public int IdPuesto { get; set; }
public string Descripcion { get; set; }
public bool? Estado { get; set; }
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class TipoIdentificacionViewModel
{
public int IdTipoIdentificacion { get; set; }
public string Descripcion { get; set; }
public bool? Estado { get; set; }
}
}

View file

@ -0,0 +1,9 @@
namespace PruebaAzureAD.Models
{
public class TipoNombramientoViewModel
{
public int IdTipoNombramiento { get; set; }
public string Descripcion { get; set; }
public bool? Estado { get; set; }
}
}

View file

@ -0,0 +1,10 @@
namespace PruebaAzureAD.Models
{
public class UniversidadViewModel
{
public int IdUniversidad { get; set; }
public string Abreviatura { get; set; }
public string Descripcion { get; set; }
public bool Estado { get; set; }
}
}

View file

@ -0,0 +1,47 @@
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));
builder.Services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
builder.Services.AddRazorPages()
.AddMicrosoftIdentityUI();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();

View file

@ -0,0 +1,28 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:37528",
"sslPort": 44356
}
},
"profiles": {
"PruebaAzureAD": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7169;http://localhost:5169",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View file

@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup Label="Globals">
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>aspnet-PruebaAzureAD-694CF912-FE9E-4452-A6B4-7A027B953A1D</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.0" NoWarn="NU1605" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.0" NoWarn="NU1605" />
<PackageReference Include="Microsoft.Identity.Web" Version="1.16.0" />
<PackageReference Include="Microsoft.Identity.Web.UI" Version="1.16.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\adminlte\" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class Canton
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<CantonViewModel>?> ObtenerCantones()
{
List<CantonViewModel>? cantones = new List<CantonViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Canton");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
cantones = JsonSerializer.Deserialize<List<CantonViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return cantones;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class Distrito
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<DistritoViewModel>?> ObtenerDistritos()
{
List<DistritoViewModel>? distritos = new List<DistritoViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Distrito");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
distritos = JsonSerializer.Deserialize<List<DistritoViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return distritos;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class Empresa
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<EmpresaViewModel>?> ObtenerEmpresas()
{
List<EmpresaViewModel>? empresas = new List<EmpresaViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Empresa");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
empresas = JsonSerializer.Deserialize<List<EmpresaViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return empresas;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class Estado
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<EstadoViewModel>?> ObtenerEstados()
{
List<EstadoViewModel>? estados = new List<EstadoViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Estado");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
estados = JsonSerializer.Deserialize<List<EstadoViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return estados;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class EstadoCivil
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<EstadoCivilViewModel>?> ObtenerEstadosCiviles()
{
List<EstadoCivilViewModel>? estadosCiviles = new List<EstadoCivilViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "EstadoCivil");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
estadosCiviles = JsonSerializer.Deserialize<List<EstadoCivilViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return estadosCiviles;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class GradoAcademico
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<GradoAcademicoViewModel>?> ObtenerGradosAcademicos()
{
List<GradoAcademicoViewModel>? gradosAcademicos = new List<GradoAcademicoViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "GradoAcademico");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
gradosAcademicos = JsonSerializer.Deserialize<List<GradoAcademicoViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return gradosAcademicos;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class Pais
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<PaisViewModel>?> ObtenerPaises()
{
List<PaisViewModel>? paises = new List<PaisViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Pais");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
paises = JsonSerializer.Deserialize<List<PaisViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return paises;
}
}
}

View file

@ -0,0 +1,77 @@
using PruebaAzureAD.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace PruebaAzureAD.Servicios
{
public class Persona
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<PersonaViewModel>?> ObtenerPersonas()
{
List<PersonaViewModel>? personas = new List<PersonaViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Persona");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
personas = JsonSerializer.Deserialize<List<PersonaViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return personas;
}
public async Task<HttpResponseMessage> AgregarPersona(PersonaViewModel funcionario)
{
try
{
if (funcionario != null)
{
using (var httpClient = new HttpClient())
{
var data = JsonSerializer.Serialize(funcionario);
var content = new StringContent(data, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync(url + "Persona", content);
return response;
}
}
else
{
var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new StringContent("Bad Request")
};
return await Task.FromResult(response);
}
}
catch (Exception ex)
{
throw;
}
}
//MODIFICAR
//ELIMINAR
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class Provincia
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<ProvinciaViewModel>?> ObtenerProvincias()
{
List<ProvinciaViewModel>? provincias = new List<ProvinciaViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Provincia");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
provincias = JsonSerializer.Deserialize<List<ProvinciaViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return provincias;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class Puesto
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<PuestoViewModel>?> ObtenerPuestos()
{
List<PuestoViewModel>? puestos = new List<PuestoViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Puesto");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
puestos = JsonSerializer.Deserialize<List<PuestoViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return puestos;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class TipoIdentificacion
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<TipoIdentificacionViewModel>?> ObtenerTipoIdentificaciones()
{
List<TipoIdentificacionViewModel>? identificaciones = new List<TipoIdentificacionViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "TipoIdentificacion");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
identificaciones = JsonSerializer.Deserialize<List<TipoIdentificacionViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return identificaciones;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class TipoNombramiento
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<TipoNombramientoViewModel>?> ObtenerNombramientos()
{
List<TipoNombramientoViewModel>? nombramientos = new List<TipoNombramientoViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "TipoNombramiento");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
nombramientos = JsonSerializer.Deserialize<List<TipoNombramientoViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return nombramientos;
}
}
}

View file

@ -0,0 +1,34 @@
using PruebaAzureAD.Models;
using System.Text.Json;
using System;
namespace PruebaAzureAD.Servicios
{
public class Universidad
{
readonly string url = "http://localhost:46647/api/";
public async Task<List<UniversidadViewModel>?> ObtenerUniversidades()
{
List<UniversidadViewModel>? universidades = new List<UniversidadViewModel>();
try
{
using (var httpClient = new HttpClient())
{
var respuesta = await httpClient.GetAsync(url + "Universidad");
var respuestaString = await respuesta.Content.ReadAsStringAsync();
universidades = JsonSerializer.Deserialize<List<UniversidadViewModel>>(respuestaString,
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
}
catch (Exception)
{
throw;
}
return universidades;
}
}
}

View file

@ -0,0 +1,227 @@
@model PruebaAzureAD.Models.PersonaViewModel
@{
List<EstadoViewModel> estados = ViewBag.Estados;
List<TipoIdentificacionViewModel> tipos = ViewBag.Tipos;
List<PaisViewModel> paises = ViewBag.Paises;
List<EstadoCivilViewModel> estadosCiviles = ViewBag.EstadosCiviles;
//List<ProvinciaViewModel> provincias = ViewBag.Provincias;
//List<CantonViewModel> cantones = ViewBag.Cantones;
//List<DistritoViewModel> distritos = ViewBag.Distritos;
List<UniversidadViewModel> universidades = ViewBag.Universidades;
List<GradoAcademicoViewModel> gradosAcademicos = ViewBag.GradosAcademicos;
List<EmpresaViewModel> empresas = ViewBag.Empresas;
List<PuestoViewModel> puestos = ViewBag.Puestos;
List<TipoNombramientoViewModel> nombramientos = ViewBag.TipoNombramiento;
}
<div class="wrapper">
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0">Empleados</h1>
</div><!-- /.col -->
<div class="col-sm-6">
<ol class="breadcrumb float-right">
<li class="breadcrumb-item"><a href="#">Home</a></li>
<li class="breadcrumb-item active">Agregar Empleado</li>
</ol>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
<!-- Main content -->
<section class="content">
<div class="container-fluid">
<!-- SELECT2 EXAMPLE -->
<div class="card card-default">
<div class="card-body">
<h5>PERSONA</h5>
<form method="post">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="idTipoIdentificacion">Tipo de Identificación</label>
<select asp-for="IdTipoIdentificacion" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in tipos)
{
<option value="@item.IdTipoIdentificacion">@item.Descripcion</option>
}
</select>
</div>
<div class="form-group">
<label for="Identificacion">Nº Identificación</label>
<input asp-for="NoIdentificacion" type="text" class="form-control" id="Identificacion" placeholder="Ingrese la Identificación" />
</div>
<div class="form-group">
<label for="Nombre">Nombre</label>
<input asp-for="Nombre" type="text" class="form-control" id="Nombre" placeholder="Ingrese el Nombre" />
</div>
<div class="form-group">
<label for="PrimerApellido">Primer Apellido</label>
<input asp-for="PrimerApellido" type="text" class="form-control" id="PrimerApellido" placeholder="Ingrese el Primer Apellido" />
</div>
<div class="form-group">
<label for="SegundoApelldio">Segundo Apellido</label>
<input asp-for="SegundoApellido" type="text" class="form-control" id="SegundoApelldio" placeholder="Ingrese el Segundo Apelldio" />
</div>
<div class="form-group">
<label for="FechaNacimiento">Fecha de Nacimiento</label>
<input asp-for="FechaNacimiento" id="FechaNacimiento" class="form-control" type="date" />
</div>
<div class="form-group">
<label for="Nacionalidad">País Nacionalidad</label>
<select asp-for="IdPaisNacionalidad" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in paises)
{
<option value="@item.IdPais">@item.Descripcion</option>
}
</select>
</div>
<div class="form-group">
<label for="EstadoCivil">Estado Civil</label>
<select asp-for="IdEstadoCivil" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in estadosCiviles)
{
<option value="@item.IdEstadoCivil">@item.Descripcion</option>
}
</select>
</div>
<div class="form-group">
<label for="Direccion">Dirección Exacta</label>
<textarea asp-for="Direccion" id="Direccion" class="form-control" placeholder="Ingrese la Dirección" style="resize:none"></textarea>
</div>
<div class="form-group">
<label for="Correo">Correo</label>
<input asp-for="Correo" type="text" class="form-control" id="Correo" placeholder="Ingrese el Correo" />
</div>
<div class="form-group">
<label for="IdUniversidad">Universidad</label>
<select asp-for="IdUniversidad" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in universidades)
{
<option value="@item.IdUniversidad">@item.Descripcion</option>
}
</select>
</div>
<div class="form-group">
<label for="IdGradoAcademico">Grado Academico</label>
<select asp-for="IdGradoAcademico" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in gradosAcademicos)
{
<option value="@item.IdGradoAcademico">@item.Descripcion</option>
}
</select>
</div>
</div>
<!-- /.col -->
<div class="col-md-6">
<div class="form-group">
<label for="Titulo">Titulo</label>
<input asp-for="Titulo" type="text" class="form-control" id="Titulo" placeholder="Ingrese el Titulo" />
</div>
<div class="form-group">
<label for="IdEmpresa">Empresa</label>
<select asp-for="IdEmpresa" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in empresas)
{
<option value="@item.IdEmpresa">@item.Nombre</option>
}
</select>
</div>
<div class="form-group">
<label for="IdPuesto">Puesto</label>
<select asp-for="IdPuesto" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in puestos)
{
<option value="@item.IdPuesto">@item.Descripcion</option>
}
</select>
</div>
<div class="form-group">
<label for="IdTipoNombramiento">Tipo Nombramiento</label>
<select asp-for="IdTipoNombramiento" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in nombramientos)
{
<option value="@item.IdTipoNombramiento">@item.Descripcion</option>
}
</select>
</div>
<div class="form-group">
<label for="FechaIngreso">Fecha de Ingreso</label>
<input asp-for="FechaIngreso" id="FechaIngreso" class="form-control" type="date" />
</div>
<div class="form-group">
<label for="FechaAscenso">Fecha de Ascenso</label>
<input asp-for="FechaAscenso" id="FechaAscenso" class="form-control" type="date" />
</div>
<div class="form-group">
<label for="FechaSalida">Fecha de Salida</label>
<input asp-for="FechaSalida" id="FechaSalida" class="form-control" type="date" />
</div>
<div class="form-group">
<label for="SalarioBruto">Salario Bruto</label>
<input asp-for="SalarioBruto" type="text" class="form-control" id="SalarioBruto" placeholder="Ingrese el Salario Bruto" />
</div>
<div class="form-group">
<label for="TelefonoPrincipal">Telefono Principal</label>
<input asp-for="TelefonoPrincipal" type="text" class="form-control" id="TelefonoPrincipal" placeholder="Ingrese el Telefono Principal" />
</div>
<div class="form-group">
<label for="TelefonoSecundario">Telefono Secundario</label>
<input asp-for="TelefonoSecundario" type="text" class="form-control" id="TelefonoSecundario" placeholder="Ingrese el Telefono Secundario" />
</div>
<div class="form-group">
<label for="IdEstado">Estado</label>
<select asp-for="IdEstado" class="custom-select">
<option>-- SELECCIONE --</option>
@foreach (var item in estados)
{
<option value="@item.IdEstado">@item.Descripcion</option>
}
</select>
</div>
<!-- /.form-group -->
</div>
<!-- /.col -->
</div>
<!-- /.row -->
<div class="row">
<div class="col-12 col-sm-6">
<!-- /.form-group -->
</div>
<!-- /.col -->
<div class="col-12 col-sm-6">
<!-- /.form-group -->
</div>
<!-- /.col -->
</div>
<button type="submit" class="btn btn-success" asp-action="Agregar">Guardar</button>
</form>
<!-- /.row -->
</div>
<!-- /.card-body -->
</div>
<!-- /.card -->
</div>
<!-- /.container-fluid -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
</div>
<!-- ./wrapper -->

View file

@ -0,0 +1,113 @@
@{
ViewData["Title"] = "Home Page";
}
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<div class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0">Starter Page</h1>
</div><!-- /.col -->
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="#">Home</a></li>
<li class="breadcrumb-item active">Starter Page</li>
</ol>
</div><!-- /.col -->
</div><!-- /.row -->
</div><!-- /.container-fluid -->
</div>
<!-- /.content-header -->
<!-- Main content -->
<div class="content">
<div class="container-fluid">
<div class="row">
<!-- /.col-md-6 -->
<div class="col-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">Empleados</h3>
</div>
<!-- /.card-header -->
<div class="card-body">
<div id="example1_wrapper" class="dataTables_wrapper dt-bootstrap4">
<div class="row">
<a class="btn btn-sm btn-success float-left" asp-action="Agregar"><i class="fas fa-plus"></i> Agregar Empleado</a>
<div class="col-sm-12">
<table id="example1" class="table table-bordered table-striped dataTable dtr-inline" aria-describedby="example1_info">
<thead>
<tr>
@* <th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">IdPersona</th>
<th class="sorting sorting_desc" tabindex="0" aria-controls="example1" rowspan="1" colspan="1" aria-sort="descending">IdTipoIdentificacion</th>*@
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">NoIdentificacion</th>
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">Nombre</th>
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">PrimerApellido</th>
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">SegundoApellido</th>
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">FechaNacimiento</th>
@* <th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">IdPaisNacionalidad</th>
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">IdEstadoCivil</th>
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">IdEstado</th>*@
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1">Acciones</th>
</tr>
</thead>
<tbody>
@foreach (var funcionario in Model)
{
<tr class="odd">
@*<td class="dtr-control" tabindex="0">@funcionario.IdPersona</td>
<td class="sorting_1">@funcionario.IdTipoIdentificacion</td>*@
<td class="">@funcionario.NoIdentificacion</td>
<td class="">@funcionario.Nombre</td>
<td class="">@funcionario.PrimerApellido</td>
<td class="">@funcionario.SegundoApellido</td>
<td class="">@funcionario.FechaNacimiento</td>
@*<td class="">@funcionario.IdPaisNacionalidad</td>
<td class="">@funcionario.IdEstadoCivil</td>
<td class="">@funcionario.IdEstado</td>*@
<td>
<a class="btn btn-sm bg-danger">
<i class="fas fa-trash"></i>
</a>
<a class="btn btn-sm bg-info">
<i class="fas fa-pen"></i>
</a>
</td>
</tr>
}
</tbody>
<tfoot>
<tr>
@*<th rowspan="1" colspan="1">IdPersona</th>
<th rowspan="1" colspan="1">IdTipoIdentificacion</th>*@
<th rowspan="1" colspan="1">NoIdentificacion</th>
<th rowspan="1" colspan="1">Nombre</th>
<th rowspan="1" colspan="1">PrimerApellido</th>
<th rowspan="1" colspan="1">SegundoApellido</th>
<th rowspan="1" colspan="1">FechaNacimiento</th>
@*<th rowspan="1" colspan="1">IdPaisNacionalidad</th>
<th rowspan="1" colspan="1">IdEstadoCivil</th>
<th rowspan="1" colspan="1">IdEstado</th>*@
<th rowspan="1" colspan="1">Acciones</th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
<!-- /.card-body -->
</div>
</div>
<!-- /.col-md-6 -->
</div>
<!-- /.row -->
</div><!-- /.container-fluid -->
</div>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->

View file

@ -0,0 +1,6 @@
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p>Use this page to detail your site's privacy policy.</p>

View file

@ -0,0 +1,25 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model?.ShowRequestId ?? false)
{
<p>
<strong>Request ID:</strong> <code>@Model?.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>

View file

@ -0,0 +1,8 @@
<footer class="main-footer">
<!-- To the right -->
<div class="float-right d-none d-sm-inline">
Anything you want
</div>
<!-- Default to the left -->
<strong>Copyright &copy; 2014-2021 <a href="https://adminlte.io">AdminLTE.io</a>.</strong> All rights reserved.
</footer>

View file

@ -0,0 +1,79 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - PruebaAzureAD</title>
<!-- Google Font: Source Sans Pro -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<!-- Font Awesome Icons -->
<link rel="stylesheet" href="~/adminlte/plugins/fontawesome-free/css/all.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="~/adminlte/dist/css/adminlte.min.css">
<!-- DataTables -->
<link rel="stylesheet" href="~/adminlte/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css">
<link rel="stylesheet" href="~/adminlte/plugins/datatables-responsive/css/responsive.bootstrap4.min.css">
<link rel="stylesheet" href="~/adminlte/plugins/datatables-buttons/css/buttons.bootstrap4.min.css">
<!-- daterange picker -->
<link rel="stylesheet" href="~/adminlte/plugins/daterangepicker/daterangepicker.css">
@await RenderSectionAsync("Styles", required: false)
</head>
<body class="hold-transition sidebar-mini">
<div class="wrapper">
<partial name="_Navbar" />
<partial name="_Sidebar" />
@RenderBody()
<partial name="_Footer" />
</div>
<!-- REQUIRED SCRIPTS -->
<!-- jQuery -->
<script src="~/adminlte/plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap 4 -->
<script src="~/adminlte/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- AdminLTE App -->
<script src="~/adminlte/dist/js/adminlte.min.js"></script>
<!-- DataTables & Plugins -->
<script src="~/adminlte/plugins/datatables/jquery.dataTables.min.js"></script>
<script src="~/adminlte/plugins/datatables-bs4/js/dataTables.bootstrap4.min.js"></script>
<script src="~/adminlte/plugins/datatables-responsive/js/dataTables.responsive.min.js"></script>
<script src="~/adminlte/plugins/datatables-responsive/js/responsive.bootstrap4.min.js"></script>
<script src="~/adminlte/plugins/datatables-buttons/js/dataTables.buttons.min.js"></script>
<script src="~/adminlte/plugins/datatables-buttons/js/buttons.bootstrap4.min.js"></script>
<script src="~/adminlte/plugins/datatables-buttons/js/buttons.html5.min.js"></script>
<script src="~/adminlte/plugins/datatables-buttons/js/buttons.print.min.js"></script>
<script src="~/adminlte/plugins/datatables-buttons/js/buttons.colVis.min.js"></script>
<script src="~/adminlte/plugins/daterangepicker/daterangepicker.js"></script>
<script>
$(function () {
$("#example1").DataTable({
"responsive": true, "lengthChange": false, "autoWidth": false
//"buttons": ["copy", "csv", "excel", "pdf", "print", "colvis"]
}).buttons().container().appendTo('#example1_wrapper .col-md-6:eq(0)');
$('#example2').DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
"responsive": true,
});
});
</script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>

View file

@ -0,0 +1,48 @@
/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
for details on configuring this project to bundle and minify static web assets. */
a.navbar-brand {
white-space: normal;
text-align: center;
word-break: break-all;
}
a {
color: #0077cc;
}
.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.border-top {
border-top: 1px solid #e5e5e5;
}
.border-bottom {
border-bottom: 1px solid #e5e5e5;
}
.box-shadow {
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
}
button.accept-policy {
font-size: 1rem;
line-height: inherit;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
white-space: nowrap;
line-height: 60px;
}

View file

@ -0,0 +1,17 @@
@using System.Security.Principal
<ul class="navbar-nav">
@if (User.Identity?.IsAuthenticated == true)
{
<span class="navbar-text text-dark">Bienvenido <b>@User.Identity?.Name!</b></span>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Cerrar sesión</a>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Iniciar sesión</a>
</li>
}
</ul>

View file

@ -0,0 +1,136 @@
<nav class="main-header navbar navbar-expand navbar-white navbar-light">
<!-- Left navbar links -->
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
</li>
<li class="nav-item d-none d-sm-inline-block">
<a asp-action="Index" class="nav-link">Home</a>
</li>
@* <li class="nav-item d-none d-sm-inline-block">
<a href="#" class="nav-link">Contact</a>
</li>*@
</ul>
<!-- Right navbar links -->
<ul class="navbar-nav ml-auto">
<partial name = "_LoginPartial" />
<!-- Navbar Search -->
@* <li class="nav-item">
<a class="nav-link" data-widget="navbar-search" href="#" role="button">
<i class="fas fa-search"></i>
</a>
<div class="navbar-search-block">
<form class="form-inline">
<div class="input-group input-group-sm">
<input class="form-control form-control-navbar" type="search" placeholder="Search" aria-label="Search">
<div class="input-group-append">
<button class="btn btn-navbar" type="submit">
<i class="fas fa-search"></i>
</button>
<button class="btn btn-navbar" type="button" data-widget="navbar-search">
<i class="fas fa-times"></i>
</button>
</div>
</div>
</form>
</div>
</li>*@
<!-- Messages Dropdown Menu -->
@* <li class="nav-item dropdown">
<a class="nav-link" data-toggle="dropdown" href="#">
<i class="far fa-comments"></i>
<span class="badge badge-danger navbar-badge">3</span>
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
<a href="#" class="dropdown-item">
<!-- Message Start -->
<div class="media">
<img src="~/adminlte/dist/img/user1-128x128.jpg" alt="User Avatar" class="img-size-50 mr-3 img-circle">
<div class="media-body">
<h3 class="dropdown-item-title">
Brad Diesel
<span class="float-right text-sm text-danger"><i class="fas fa-star"></i></span>
</h3>
<p class="text-sm">Call me whenever you can...</p>
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
</div>
</div>
<!-- Message End -->
</a>
<div class="dropdown-divider"></div>
<a href="#" class="dropdown-item">
<!-- Message Start -->
<div class="media">
<img src="~/adminlte/dist/img/user8-128x128.jpg" alt="User Avatar" class="img-size-50 img-circle mr-3">
<div class="media-body">
<h3 class="dropdown-item-title">
John Pierce
<span class="float-right text-sm text-muted"><i class="fas fa-star"></i></span>
</h3>
<p class="text-sm">I got your message bro</p>
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
</div>
</div>
<!-- Message End -->
</a>
<div class="dropdown-divider"></div>
<a href="#" class="dropdown-item">
<!-- Message Start -->
<div class="media">
<img src="~/adminlte/dist/img/user3-128x128.jpg" alt="User Avatar" class="img-size-50 img-circle mr-3">
<div class="media-body">
<h3 class="dropdown-item-title">
Nora Silvester
<span class="float-right text-sm text-warning"><i class="fas fa-star"></i></span>
</h3>
<p class="text-sm">The subject goes here</p>
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
</div>
</div>
<!-- Message End -->
</a>
<div class="dropdown-divider"></div>
<a href="#" class="dropdown-item dropdown-footer">See All Messages</a>
</div>
</li>*@
<!-- Notifications Dropdown Menu -->
@* <li class="nav-item dropdown">
<a class="nav-link" data-toggle="dropdown" href="#">
<i class="far fa-bell"></i>
<span class="badge badge-warning navbar-badge">15</span>
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
<span class="dropdown-header">15 Notifications</span>
<div class="dropdown-divider"></div>
<a href="#" class="dropdown-item">
<i class="fas fa-envelope mr-2"></i> 4 new messages
<span class="float-right text-muted text-sm">3 mins</span>
</a>
<div class="dropdown-divider"></div>
<a href="#" class="dropdown-item">
<i class="fas fa-users mr-2"></i> 8 friend requests
<span class="float-right text-muted text-sm">12 hours</span>
</a>
<div class="dropdown-divider"></div>
<a href="#" class="dropdown-item">
<i class="fas fa-file mr-2"></i> 3 new reports
<span class="float-right text-muted text-sm">2 days</span>
</a>
<div class="dropdown-divider"></div>
<a href="#" class="dropdown-item dropdown-footer">See All Notifications</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" data-widget="fullscreen" href="#" role="button">
<i class="fas fa-expand-arrows-alt"></i>
</a>
</li>
<li class="nav-item">
<a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" role="button">
<i class="fas fa-th-large"></i>
</a>
</li>*@
</ul>
</nav>

View file

@ -0,0 +1,59 @@
<aside class="main-sidebar sidebar-dark-primary elevation-4" style="background-color: #B0302F">
<!-- Brand Logo -->
<a href="index3.html" class="brand-link">
<img src="~/adminlte/dist/img/AdminLTELogo.png" alt="AdminLTE Logo" class="brand-image img-circle elevation-3" style="opacity: .8">
<span class="brand-text font-weight-light">RECHUMA</span>
</a>
<!-- Sidebar -->
<div class="sidebar">
<!-- Sidebar user panel (optional) -->
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
<div class="image">
<img src="~/adminlte/dist/img/user2-160x160.jpg" class="img-circle elevation-2" alt="User Image">
</div>
<div class="info">
<a href="#" class="d-block">Alexander Pierce</a>
</div>
</div>
<!-- SidebarSearch Form -->
<div class="form-inline">
<div class="input-group" data-widget="sidebar-search">
<input class="form-control form-control-sidebar" type="search" placeholder="Search" aria-label="Search">
<div class="input-group-append">
<button class="btn btn-sidebar">
<i class="fas fa-search fa-fw"></i>
</button>
</div>
</div>
</div>
<!-- Sidebar Menu -->
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item">
<a asp-action="Index" class="nav-link active">
<i class="nav-icon fas fa-tachometer-alt"></i>
<p>
Dashboard
</p>
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link active">
<i class="nav-icon far fa-calendar-alt"></i>
<p>
Vacaciones
<span class="badge badge-info right">2</span>
</p>
</a>
</li>
</ul>
</nav>
<!-- /.sidebar-menu -->
</div>
<!-- /.sidebar -->
</aside>

View file

@ -0,0 +1,2 @@
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

View file

@ -0,0 +1,3 @@
@using PruebaAzureAD
@using PruebaAzureAD.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

View file

@ -0,0 +1,3 @@
@{
Layout = "_Layout";
}

View file

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View file

@ -0,0 +1,24 @@
{
/*
The following identity settings need to be configured
before the project can be successfully executed.
For more info see https://aka.ms/dotnet-template-ms-identity-platform
*/
// "UsePkce": true,
// "ResponseType": "code"
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "atesacr.com",
"TenantId": "ea91ca3b-96d0-4a0a-8e68-e99a3c95054d",
"ClientId": "8ea07777-c3e4-4b6e-ae03-aa2a923d3d8e",
"CallbackPath": "/signin-oidc"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Url": "http://localhost:46647/api/",
"AllowedHosts": "*"
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,960 @@
/*!
* AdminLTE v3.2.0
* Only Pages
* Author: Colorlib
* Website: AdminLTE.io <https://adminlte.io>
* License: Open source - MIT <https://opensource.org/licenses/MIT>
*/
.close, .mailbox-attachment-close {
float: right;
font-size: 1.5rem;
font-weight: 700;
line-height: 1;
color: #000;
text-shadow: 0 1px 0 #fff;
opacity: .5;
}
.close:hover, .mailbox-attachment-close:hover {
color: #000;
text-decoration: none;
}
.close:not(:disabled):not(.disabled):hover, .mailbox-attachment-close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus, .mailbox-attachment-close:not(:disabled):not(.disabled):focus {
opacity: .75;
}
button.close, button.mailbox-attachment-close {
padding: 0;
background-color: transparent;
border: 0;
}
a.close.disabled, a.disabled.mailbox-attachment-close {
pointer-events: none;
}
@-webkit-keyframes flipInX {
0% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
transition-timing-function: ease-in;
opacity: 0;
}
40% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
transition-timing-function: ease-in;
}
60% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
opacity: 1;
}
80% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
}
100% {
-webkit-transform: perspective(400px);
transform: perspective(400px);
}
}
@keyframes flipInX {
0% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
transition-timing-function: ease-in;
opacity: 0;
}
40% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
transition-timing-function: ease-in;
}
60% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
opacity: 1;
}
80% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
}
100% {
-webkit-transform: perspective(400px);
transform: perspective(400px);
}
}
@-webkit-keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@-webkit-keyframes shake {
0% {
-webkit-transform: translate(2px, 1px) rotate(0deg);
transform: translate(2px, 1px) rotate(0deg);
}
10% {
-webkit-transform: translate(-1px, -2px) rotate(-2deg);
transform: translate(-1px, -2px) rotate(-2deg);
}
20% {
-webkit-transform: translate(-3px, 0) rotate(3deg);
transform: translate(-3px, 0) rotate(3deg);
}
30% {
-webkit-transform: translate(0, 2px) rotate(0deg);
transform: translate(0, 2px) rotate(0deg);
}
40% {
-webkit-transform: translate(1px, -1px) rotate(1deg);
transform: translate(1px, -1px) rotate(1deg);
}
50% {
-webkit-transform: translate(-1px, 2px) rotate(-1deg);
transform: translate(-1px, 2px) rotate(-1deg);
}
60% {
-webkit-transform: translate(-3px, 1px) rotate(0deg);
transform: translate(-3px, 1px) rotate(0deg);
}
70% {
-webkit-transform: translate(2px, 1px) rotate(-2deg);
transform: translate(2px, 1px) rotate(-2deg);
}
80% {
-webkit-transform: translate(-1px, -1px) rotate(4deg);
transform: translate(-1px, -1px) rotate(4deg);
}
90% {
-webkit-transform: translate(2px, 2px) rotate(0deg);
transform: translate(2px, 2px) rotate(0deg);
}
100% {
-webkit-transform: translate(1px, -2px) rotate(-1deg);
transform: translate(1px, -2px) rotate(-1deg);
}
}
@keyframes shake {
0% {
-webkit-transform: translate(2px, 1px) rotate(0deg);
transform: translate(2px, 1px) rotate(0deg);
}
10% {
-webkit-transform: translate(-1px, -2px) rotate(-2deg);
transform: translate(-1px, -2px) rotate(-2deg);
}
20% {
-webkit-transform: translate(-3px, 0) rotate(3deg);
transform: translate(-3px, 0) rotate(3deg);
}
30% {
-webkit-transform: translate(0, 2px) rotate(0deg);
transform: translate(0, 2px) rotate(0deg);
}
40% {
-webkit-transform: translate(1px, -1px) rotate(1deg);
transform: translate(1px, -1px) rotate(1deg);
}
50% {
-webkit-transform: translate(-1px, 2px) rotate(-1deg);
transform: translate(-1px, 2px) rotate(-1deg);
}
60% {
-webkit-transform: translate(-3px, 1px) rotate(0deg);
transform: translate(-3px, 1px) rotate(0deg);
}
70% {
-webkit-transform: translate(2px, 1px) rotate(-2deg);
transform: translate(2px, 1px) rotate(-2deg);
}
80% {
-webkit-transform: translate(-1px, -1px) rotate(4deg);
transform: translate(-1px, -1px) rotate(4deg);
}
90% {
-webkit-transform: translate(2px, 2px) rotate(0deg);
transform: translate(2px, 2px) rotate(0deg);
}
100% {
-webkit-transform: translate(1px, -2px) rotate(-1deg);
transform: translate(1px, -2px) rotate(-1deg);
}
}
@-webkit-keyframes wobble {
0% {
-webkit-transform: none;
transform: none;
}
15% {
-webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
}
30% {
-webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
}
45% {
-webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
}
60% {
-webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
}
75% {
-webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
}
100% {
-webkit-transform: none;
transform: none;
}
}
@keyframes wobble {
0% {
-webkit-transform: none;
transform: none;
}
15% {
-webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
}
30% {
-webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
}
45% {
-webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
}
60% {
-webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
}
75% {
-webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
}
100% {
-webkit-transform: none;
transform: none;
}
}
.mailbox-messages > .table {
margin: 0;
}
.mailbox-controls {
padding: 5px;
}
.mailbox-controls.with-border {
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
}
.mailbox-read-info {
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
padding: 10px;
}
.mailbox-read-info h3 {
font-size: 20px;
margin: 0;
}
.mailbox-read-info h5 {
margin: 0;
padding: 5px 0 0;
}
.mailbox-read-time {
color: #999;
font-size: 13px;
}
.mailbox-read-message {
padding: 10px;
}
.mailbox-attachments {
padding-left: 0;
list-style: none;
}
.mailbox-attachments li {
border: 1px solid #eee;
float: left;
margin-bottom: 10px;
margin-right: 10px;
width: 200px;
}
.mailbox-attachment-name {
color: #666;
font-weight: 700;
}
.mailbox-attachment-icon,
.mailbox-attachment-info,
.mailbox-attachment-size {
display: block;
}
.mailbox-attachment-info {
background-color: #f8f9fa;
padding: 10px;
}
.mailbox-attachment-size {
color: #999;
font-size: 12px;
}
.mailbox-attachment-size > span {
display: inline-block;
padding-top: .75rem;
}
.mailbox-attachment-icon {
color: #666;
font-size: 65px;
max-height: 132.5px;
padding: 20px 10px;
text-align: center;
}
.mailbox-attachment-icon.has-img {
padding: 0;
}
.mailbox-attachment-icon.has-img > img {
height: auto;
max-width: 100%;
}
.lockscreen {
background-color: #e9ecef;
}
.lockscreen .lockscreen-name {
font-weight: 600;
text-align: center;
}
.lockscreen-logo {
font-size: 35px;
font-weight: 300;
margin-bottom: 25px;
text-align: center;
}
.lockscreen-logo a {
color: #495057;
}
.lockscreen-wrapper {
margin: 0 auto;
margin-top: 10%;
max-width: 400px;
}
.lockscreen-item {
border-radius: 4px;
background-color: #fff;
margin: 10px auto 30px;
padding: 0;
position: relative;
width: 290px;
}
.lockscreen-image {
border-radius: 50%;
background-color: #fff;
left: -10px;
padding: 5px;
position: absolute;
top: -25px;
z-index: 10;
}
.lockscreen-image > img {
border-radius: 50%;
height: 70px;
width: 70px;
}
.lockscreen-credentials {
margin-left: 70px;
}
.lockscreen-credentials .form-control {
border: 0;
}
.lockscreen-credentials .btn {
background-color: #fff;
border: 0;
padding: 0 10px;
}
.lockscreen-footer {
margin-top: 10px;
}
.dark-mode .lockscreen-item {
background-color: #343a40;
}
.dark-mode .lockscreen-logo a {
color: #fff;
}
.dark-mode .lockscreen-credentials .btn {
background-color: #343a40;
}
.dark-mode .lockscreen-image {
background-color: #6c757d;
}
.login-logo,
.register-logo {
font-size: 2.1rem;
font-weight: 300;
margin-bottom: .9rem;
text-align: center;
}
.login-logo a,
.register-logo a {
color: #495057;
}
.login-page,
.register-page {
-ms-flex-align: center;
align-items: center;
background-color: #e9ecef;
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
height: 100vh;
-ms-flex-pack: center;
justify-content: center;
}
.login-box,
.register-box {
width: 360px;
}
@media (max-width: 576px) {
.login-box,
.register-box {
margin-top: .5rem;
width: 90%;
}
}
.login-box .card,
.register-box .card {
margin-bottom: 0;
}
.login-card-body,
.register-card-body {
background-color: #fff;
border-top: 0;
color: #666;
padding: 20px;
}
.login-card-body .input-group .form-control,
.register-card-body .input-group .form-control {
border-right: 0;
}
.login-card-body .input-group .form-control:focus,
.register-card-body .input-group .form-control:focus {
box-shadow: none;
}
.login-card-body .input-group .form-control:focus ~ .input-group-prepend .input-group-text,
.login-card-body .input-group .form-control:focus ~ .input-group-append .input-group-text,
.register-card-body .input-group .form-control:focus ~ .input-group-prepend .input-group-text,
.register-card-body .input-group .form-control:focus ~ .input-group-append .input-group-text {
border-color: #80bdff;
}
.login-card-body .input-group .form-control.is-valid:focus,
.register-card-body .input-group .form-control.is-valid:focus {
box-shadow: none;
}
.login-card-body .input-group .form-control.is-valid ~ .input-group-prepend .input-group-text,
.login-card-body .input-group .form-control.is-valid ~ .input-group-append .input-group-text,
.register-card-body .input-group .form-control.is-valid ~ .input-group-prepend .input-group-text,
.register-card-body .input-group .form-control.is-valid ~ .input-group-append .input-group-text {
border-color: #28a745;
}
.login-card-body .input-group .form-control.is-invalid:focus,
.register-card-body .input-group .form-control.is-invalid:focus {
box-shadow: none;
}
.login-card-body .input-group .form-control.is-invalid ~ .input-group-append .input-group-text,
.register-card-body .input-group .form-control.is-invalid ~ .input-group-append .input-group-text {
border-color: #dc3545;
}
.login-card-body .input-group .input-group-text,
.register-card-body .input-group .input-group-text {
background-color: transparent;
border-bottom-right-radius: 0.25rem;
border-left: 0;
border-top-right-radius: 0.25rem;
color: #777;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.login-box-msg,
.register-box-msg {
margin: 0;
padding: 0 20px 20px;
text-align: center;
}
.social-auth-links {
margin: 10px 0;
}
.dark-mode .login-card-body,
.dark-mode .register-card-body {
background-color: #343a40;
border-color: #6c757d;
color: #fff;
}
.dark-mode .login-logo a,
.dark-mode .register-logo a {
color: #fff;
}
.error-page {
margin: 20px auto 0;
width: 600px;
}
@media (max-width: 767.98px) {
.error-page {
width: 100%;
}
}
.error-page > .headline {
float: left;
font-size: 100px;
font-weight: 300;
}
@media (max-width: 767.98px) {
.error-page > .headline {
float: none;
text-align: center;
}
}
.error-page > .error-content {
display: block;
margin-left: 190px;
}
@media (max-width: 767.98px) {
.error-page > .error-content {
margin-left: 0;
}
}
.error-page > .error-content > h3 {
font-size: 25px;
font-weight: 300;
}
@media (max-width: 767.98px) {
.error-page > .error-content > h3 {
text-align: center;
}
}
.invoice {
background-color: #fff;
border: 1px solid rgba(0, 0, 0, 0.125);
position: relative;
}
.invoice-title {
margin-top: 0;
}
.dark-mode .invoice {
background-color: #343a40;
}
.profile-user-img {
border: 3px solid #adb5bd;
margin: 0 auto;
padding: 3px;
width: 100px;
}
.profile-username {
font-size: 21px;
margin-top: 5px;
}
.post {
border-bottom: 1px solid #adb5bd;
color: #666;
margin-bottom: 15px;
padding-bottom: 15px;
}
.post:last-of-type {
border-bottom: 0;
margin-bottom: 0;
padding-bottom: 0;
}
.post .user-block {
margin-bottom: 15px;
width: 100%;
}
.post .row {
width: 100%;
}
.dark-mode .post {
color: #fff;
border-color: #6c757d;
}
.product-image {
max-width: 100%;
height: auto;
width: 100%;
}
.product-image-thumbs {
-ms-flex-align: stretch;
align-items: stretch;
display: -ms-flexbox;
display: flex;
margin-top: 2rem;
}
.product-image-thumb {
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
border-radius: 0.25rem;
background-color: #fff;
border: 1px solid #dee2e6;
display: -ms-flexbox;
display: flex;
margin-right: 1rem;
max-width: 7rem;
padding: 0.5rem;
}
.product-image-thumb img {
max-width: 100%;
height: auto;
-ms-flex-item-align: center;
align-self: center;
}
.product-image-thumb:hover {
opacity: .5;
}
.product-share a {
margin-right: .5rem;
}
.projects td {
vertical-align: middle;
}
.projects .list-inline {
margin-bottom: 0;
}
.projects img.table-avatar,
.projects .table-avatar img {
border-radius: 50%;
display: inline;
width: 2.5rem;
}
.projects .project-state {
text-align: center;
}
body.iframe-mode .main-sidebar {
display: none;
}
body.iframe-mode .content-wrapper {
margin-left: 0 !important;
margin-top: 0 !important;
padding-bottom: 0 !important;
}
body.iframe-mode .main-header,
body.iframe-mode .main-footer {
display: none;
}
body.iframe-mode-fullscreen {
overflow: hidden;
}
body.iframe-mode-fullscreen.layout-navbar-fixed .wrapper .content-wrapper {
margin-top: 0 !important;
}
.content-wrapper {
height: 100%;
}
.content-wrapper.iframe-mode .btn-iframe-close {
color: #dc3545;
position: absolute;
line-height: 1;
right: .125rem;
top: .125rem;
z-index: 10;
visibility: hidden;
}
.content-wrapper.iframe-mode .btn-iframe-close:hover, .content-wrapper.iframe-mode .btn-iframe-close:focus {
-webkit-animation-name: fadeIn;
animation-name: fadeIn;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
visibility: visible;
}
@media (hover: none) and (pointer: coarse) {
.content-wrapper.iframe-mode .btn-iframe-close {
visibility: visible;
}
}
.content-wrapper.iframe-mode .navbar-nav {
overflow-y: auto;
width: 100%;
}
.content-wrapper.iframe-mode .navbar-nav .nav-link {
white-space: nowrap;
}
.content-wrapper.iframe-mode .navbar-nav .nav-item {
position: relative;
}
.content-wrapper.iframe-mode .navbar-nav .nav-item:hover .btn-iframe-close, .content-wrapper.iframe-mode .navbar-nav .nav-item:focus .btn-iframe-close {
-webkit-animation-name: fadeIn;
animation-name: fadeIn;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
visibility: visible;
}
@media (hover: none) and (pointer: coarse) {
.content-wrapper.iframe-mode .navbar-nav .nav-item:hover .btn-iframe-close, .content-wrapper.iframe-mode .navbar-nav .nav-item:focus .btn-iframe-close {
visibility: visible;
}
}
.content-wrapper.iframe-mode .tab-content {
position: relative;
}
.content-wrapper.iframe-mode .tab-pane + .tab-empty {
display: none;
}
.content-wrapper.iframe-mode .tab-empty {
width: 100%;
display: -ms-flexbox;
display: flex;
-ms-flex-pack: center;
justify-content: center;
-ms-flex-align: center;
align-items: center;
}
.content-wrapper.iframe-mode .tab-loading {
position: absolute;
top: 0;
left: 0;
width: 100%;
display: none;
background-color: #f4f6f9;
}
.content-wrapper.iframe-mode .tab-loading > div {
display: -ms-flexbox;
display: flex;
-ms-flex-pack: center;
justify-content: center;
-ms-flex-align: center;
align-items: center;
width: 100%;
height: 100%;
}
.content-wrapper.iframe-mode iframe {
border: 0;
width: 100%;
height: 100%;
margin-bottom: -8px;
}
.content-wrapper.iframe-mode iframe .content-wrapper {
padding-bottom: 0 !important;
}
body.iframe-mode-fullscreen .content-wrapper.iframe-mode {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin-left: 0 !important;
height: 100%;
min-height: 100%;
z-index: 1048;
}
.permanent-btn-iframe-close .btn-iframe-close {
-webkit-animation: none !important;
animation: none !important;
visibility: visible !important;
opacity: 1;
}
.dark-mode .content-wrapper.iframe-mode .tab-loading {
background-color: #343a40;
}
.content-wrapper.kanban {
height: 1px;
}
.content-wrapper.kanban .content {
height: 100%;
overflow-x: auto;
overflow-y: hidden;
}
.content-wrapper.kanban .content .container,
.content-wrapper.kanban .content .container-fluid {
width: -webkit-max-content;
width: -moz-max-content;
width: max-content;
display: -ms-flexbox;
display: flex;
-ms-flex-align: stretch;
align-items: stretch;
}
.content-wrapper.kanban .content-header + .content {
height: calc(100% - ((2 * 15px) + (1.8rem * 1.2)));
}
.content-wrapper.kanban .card .card-body {
padding: .5rem;
}
.content-wrapper.kanban .card.card-row {
width: 340px;
display: inline-block;
margin: 0 .5rem;
}
.content-wrapper.kanban .card.card-row:first-child {
margin-left: 0;
}
.content-wrapper.kanban .card.card-row .card-body {
height: calc(100% - (12px + (1.8rem * 1.2) + .5rem));
overflow-y: auto;
}
.content-wrapper.kanban .card.card-row .card:last-child {
margin-bottom: 0;
border-bottom-width: 1px;
}
.content-wrapper.kanban .card.card-row .card .card-header {
padding: .5rem .75rem;
}
.content-wrapper.kanban .card.card-row .card .card-body {
padding: .75rem;
}
.content-wrapper.kanban .btn-tool.btn-link {
text-decoration: underline;
padding-left: 0;
padding-right: 0;
}
/*# sourceMappingURL=adminlte.pages.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Some files were not shown because too many files have changed in this diff Show more