Update UI y API Vendedores y Mapeo de Quote
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 10m52s

This commit is contained in:
Leandro Hernan Rojas 2025-04-28 14:38:00 -03:00
parent 2014218ad0
commit bba48a7e28
36 changed files with 2024 additions and 170 deletions

View File

@ -0,0 +1,16 @@
using Domain.Entities;
using Domain.Generics;
namespace Models.Interfaces
{
public interface IPeopleDom
{
Task<PagedResult<EPerson>> GetAllAsync(int page = 1, int pageSize = 50);
Task<PagedResult<EPerson>> SearchAsync(string? name, string? email, int page = 1, int pageSize = 50);
Task<EPerson?> GetByIdAsync(int id);
Task<EPerson> CreateAsync(EPerson person);
Task<bool> UpdateAsync(EPerson person);
Task<bool> DeleteAsync(int id);
Task<byte[]> ExportFilteredCustomersToExcelAsync(PeopleSearchParams searchParams);
}
}

View File

@ -66,7 +66,6 @@ public class PatientService : IPatientDom
return await _repository.UpdateAsync(entity);
}
public async Task<PagedResult<EPatient>> SearchAsync(string? name, string? document, int page = 1, int pageSize = 50)
{
try
@ -79,7 +78,6 @@ public class PatientService : IPatientDom
throw new Exception($"{methodName} Message: {ex.Message}", ex);
}
}
public Task<bool> DeleteAsync(int id)
{
// Implementar según políticas del sistema (soft delete, etc.)
@ -125,6 +123,5 @@ public class PatientService : IPatientDom
throw new Exception($"{methodName} - Error al exportar pacientes: {ex.Message}", ex);
}
}
#endregion
}

View File

@ -0,0 +1,98 @@
using Domain.Entities;
using Domain.Generics;
using Models.Interfaces;
using System.Reflection;
using Transversal.Services;
namespace Core.Services
{
public class PeopleService : IPeopleDom
{
#region Declaraciones
private readonly IPhSPeopleRepository _peopleRepository ;
#endregion
public PeopleService(IPhSPeopleRepository peopleRepository)
{
_peopleRepository = peopleRepository ?? throw new ArgumentNullException(nameof(peopleRepository));
}
#region Métodos
public async Task<PagedResult<EPerson>> GetAllAsync(int page = 1, int pageSize = 50)
{
return await _peopleRepository.GetAllAsync(page, pageSize);
}
public async Task<PagedResult<EPerson>> SearchAsync(string? name, string? email,
int page = 1, int pageSize = 50)
{
return await _peopleRepository.SearchAsync(name,email,page,pageSize);
}
public async Task<EPerson?> GetByIdAsync(int id)
{
return await _peopleRepository.GetByIdAsync(id);
}
public async Task<EPerson> CreateAsync(EPerson person)
{
return await _peopleRepository.AddAsync(person);
}
public async Task<bool> UpdateAsync(EPerson person)
{
var existing = await _peopleRepository.GetByIdAsync(person.Id);
if (existing == null)
return false;
await _peopleRepository.UpdateAsync(person);
return true;
}
public async Task<bool> DeleteAsync(int id)
{
var existing = await _peopleRepository.GetByIdAsync(id);
if (existing == null)
return false;
await _peopleRepository.DeleteAsync(id);
return true;
}
public async Task<byte[]> ExportFilteredCustomersToExcelAsync(PeopleSearchParams searchParams)
{
try
{
// Realiza la búsqueda de clientes con los parámetros proporcionados
var searchResult = await SearchAsync(
searchParams.Name,
searchParams.Email,
searchParams.Page,
searchParams.PageSize
);
// Verifica que se hayan encontrado resultados
if (searchResult?.Items is null || !searchResult.Items.Any())
{
throw new Exception("No se encontraron clientes para exportar.");
}
// Llamamos a un método que exporta los datos a Excel
var stream = new XLSXExportBase();
// Convertimos los resultados de la búsqueda a un formato adecuado para el exportador
var customersData = searchResult.Items.Select(c => new
{
c.Id,
c.Name,
c.Email,
c.Phone,
c.DefaultCommissionPercent,
c.Active
}).ToList();
// Genera el archivo Excel
var excelFile = stream.ExportExcel(customersData);
// Devuelve el archivo Excel como un array de bytes
return excelFile;
}
catch (Exception ex)
{
var methodName = MethodBase.GetCurrentMethod()?.Name ?? "UnknownMethod";
throw new Exception($"{ex.Message}", ex);
}
}
#endregion
}
}

View File

@ -62,9 +62,9 @@ namespace PhronCare.Core.Services.Sales
var newQuote = await _quoteHeaderRepository.AddAsync(quote);
// Crear los detalles asociados
if (quote.Details != null)
if (quote.PhSQuoteDetails != null)
{
foreach (var detail in quote.Details)
foreach (var detail in quote.PhSQuoteDetails)
{
detail.QuoteheaderId = newQuote.Id;
await _quoteDetailRepository.AddAsync(detail);
@ -72,9 +72,9 @@ namespace PhronCare.Core.Services.Sales
}
// Crear los roles asociados
if (quote.Roles != null)
if (quote.PhSQuoteRoles != null)
{
foreach (var role in quote.Roles)
foreach (var role in quote.PhSQuoteRoles)
{
role.QuoteheaderId = newQuote.Id;
await _quoteRoleRepository.AddAsync(role);
@ -130,9 +130,9 @@ namespace PhronCare.Core.Services.Sales
FechaTentativa = q.Estimateddate?.ToString("yyyy-MM-dd"),
ImporteEstimado = q.Estimatedamount,
ImporteAprobado = q.Approvedamount,
Profesional = q.Roles.FirstOrDefault(r => r.Entitytype == "PhS_Professionals")?.Entitytype,
Institución = q.Roles.FirstOrDefault(r => r.Entitytype == "PhS_Institutions")?.Entitytype,
Paciente = q.Roles.FirstOrDefault(r => r.Entitytype == "PhS_Patients")?.Entitytype
Profesional = q.PhSQuoteRoles.FirstOrDefault(r => r.Entitytype == "PhS_Professionals")?.Entitytype,
Institución = q.PhSQuoteRoles.FirstOrDefault(r => r.Entitytype == "PhS_Institutions")?.Entitytype,
Paciente = q.PhSQuoteRoles.FirstOrDefault(r => r.Entitytype == "PhS_Patients")?.Entitytype
}).ToList();
// Generar archivo Excel

View File

@ -0,0 +1,40 @@
namespace Domain.Entities
{
public class EPeopleGroup
{
/// <summary>
/// Identificador único del grupo de personas
/// </summary>
public int Id { get; set; }
/// <summary>
/// Nombre del grupo de vendedores
/// </summary>
public string Name { get; set; } = null!;
/// <summary>
/// Descripción adicional del grupo
/// </summary>
public string? Description { get; set; }
/// <summary>
/// Unidad de negocio relacionada (opcional)
/// </summary>
public int? BusinessunitsId { get; set; }
/// <summary>
/// Estado activo o inactivo del grupo
/// </summary>
public bool Active { get; set; }
/// <summary>
/// Fecha de creación del grupo
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// Fecha de última modificación
/// </summary>
public DateTime? ModifiedAt { get; set; }
}
}

View File

@ -0,0 +1,59 @@
namespace Domain.Entities
{
public class EPerson
{
/// <summary>
/// Identificador único de la persona (vendedor/agente)
/// </summary>
public int Id { get; set; }
/// <summary>
/// Nombre de la persona
/// </summary>
public string Name { get; set; } = null!;
/// <summary>
/// Teléfono de contacto de la persona
/// </summary>
public string? Phone { get; set; }
/// <summary>
/// Correo electrónico de la persona
/// </summary>
public string? Email { get; set; }
/// <summary>
/// Unidad de negocio asignada
/// </summary>
public int BusinessunitsId { get; set; }
/// <summary>
/// Grupo comercial opcional
/// </summary>
public int? PeoplegroupsId { get; set; }
/// <summary>
/// Porcentaje de comisión por defecto
/// </summary>
public decimal? DefaultCommissionPercent { get; set; }
/// <summary>
/// Activo/Inactivo
/// </summary>
public bool Active { get; set; }
/// <summary>
/// Fecha de creación
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// Fecha de última modificación
/// </summary>
public DateTime? ModifiedAt { get; set; }
public virtual EBusinessUnit Businessunits { get; set; } = null!;
public virtual EPeopleGroup? Peoplegroups { get; set; }
}
}

View File

@ -1,14 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Domain.Entities
namespace Domain.Entities
{
/// <summary>
/// Tabla de detalles de presupuestos
/// </summary>
public class EQuoteDetail
{
/// <summary>
@ -61,6 +52,8 @@ namespace Domain.Entities
/// </summary>
public DateTime? Modifiedat { get; set; }
public virtual EQuoteHeader Quoteheader { get; set; } = null!;
public virtual EProduct Product { get; set; } = null!;
public virtual EQuoteHeader PhSQuoteheader { get; set; } = null!;
}
}

View File

@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Domain.Entities
namespace Domain.Entities
{
/// <summary>
/// Tabla de cabeceras de presupuestos
@ -31,6 +25,11 @@ namespace Domain.Entities
/// </summary>
public int BusinessunitId { get; set; }
/// <summary>
/// Identificador único del vendedor
/// </summary>
public int PeopleId { get; set; }
/// <summary>
/// Estado: E (Emitido), A (Aprobado), AC (Aprobado para cirugia), etc.
/// </summary>
@ -86,8 +85,9 @@ namespace Domain.Entities
/// </summary>
public DateTime? Modifiedat { get; set; }
public virtual ICollection<EQuoteDetail> Details { get; set; } = new List<EQuoteDetail>();
public virtual ICollection<EQuoteDetail> PhSQuoteDetails { get; set; } = new List<EQuoteDetail>();
public virtual ICollection<EQuoteRole> PhSQuoteRoles { get; set; } = new List<EQuoteRole>();
public virtual ICollection<EQuoteRole> Roles { get; set; } = new List<EQuoteRole>();
}
}

View File

@ -0,0 +1,8 @@
namespace Domain.Generics
{
public class PeopleSearchParams: PagedRequest
{
public string? Name { get; set; }
public string? Email { get; set; }
}
}

View File

@ -7,7 +7,7 @@
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\maski\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.13.2</NuGetToolVersion>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.13.1</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\maski\.nuget\packages\" />

View File

@ -0,0 +1,17 @@
using Domain.Entities;
using Domain.Generics;
namespace Models.Interfaces
{
public interface IPhSPeopleRepository
{
Task<PagedResult<EPerson>> GetAllAsync(int page = 1, int pageSize = 50);
Task<PagedResult<EPerson>> SearchAsync(string? name, string? email,
int page = 1, int pageSize = 50);
Task<EPerson?> GetByIdAsync(int id);
Task<EPerson> AddAsync(EPerson person);
Task UpdateAsync(EPerson person);
Task DeleteAsync(int id);
}
}

View File

@ -13,5 +13,7 @@ public partial class PhSBusinessUnit
public string? Manager { get; set; }
public virtual ICollection<PhSPerson> PhSPeople { get; set; } = new List<PhSPerson>();
public virtual ICollection<PhSProduct> PhSProducts { get; set; } = new List<PhSProduct>();
}

View File

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
namespace Models.Models;
public partial class PhSPeopleGroup
{
/// <summary>
/// Identificador único del grupo de personas
/// </summary>
public int Id { get; set; }
/// <summary>
/// Nombre del grupo de vendedores
/// </summary>
public string Name { get; set; } = null!;
/// <summary>
/// Descripción adicional del grupo
/// </summary>
public string? Description { get; set; }
/// <summary>
/// Unidad de negocio relacionada (opcional)
/// </summary>
public int? BusinessunitsId { get; set; }
/// <summary>
/// Estado activo o inactivo del grupo
/// </summary>
public bool Active { get; set; }
/// <summary>
/// Fecha de creación del grupo
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// Fecha de última modificación
/// </summary>
public DateTime? ModifiedAt { get; set; }
public virtual ICollection<PhSPerson> PhSPeople { get; set; } = new List<PhSPerson>();
}

View File

@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
namespace Models.Models;
public partial class PhSPerson
{
/// <summary>
/// Identificador único de la persona (vendedor/agente)
/// </summary>
public int Id { get; set; }
/// <summary>
/// Nombre de la persona
/// </summary>
public string Name { get; set; } = null!;
/// <summary>
/// Teléfono de contacto de la persona
/// </summary>
public string? Phone { get; set; }
/// <summary>
/// Correo electrónico de la persona
/// </summary>
public string? Email { get; set; }
/// <summary>
/// Unidad de negocio asignada
/// </summary>
public int BusinessunitsId { get; set; }
/// <summary>
/// Grupo comercial opcional
/// </summary>
public int? PeoplegroupsId { get; set; }
/// <summary>
/// Porcentaje de comisión por defecto
/// </summary>
public decimal? DefaultCommissionPercent { get; set; }
/// <summary>
/// Activo/Inactivo
/// </summary>
public bool Active { get; set; }
/// <summary>
/// Fecha de creación
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// Fecha de última modificación
/// </summary>
public DateTime? ModifiedAt { get; set; }
public virtual PhSBusinessUnit Businessunits { get; set; } = null!;
public virtual PhSPeopleGroup? Peoplegroups { get; set; }
}

View File

@ -26,4 +26,6 @@ public partial class PhSProduct
public virtual PhSBusinessUnit? Businessunits { get; set; }
public virtual PhSProductCategory? Category { get; set; }
public virtual ICollection<PhSQuoteDetail> PhSQuoteDetails { get; set; } = new List<PhSQuoteDetail>();
}

View File

@ -58,5 +58,7 @@ public partial class PhSQuoteDetail
/// </summary>
public DateTime? Modifiedat { get; set; }
public virtual PhSProduct Product { get; set; } = null!;
public virtual PhSQuoteHeader Quoteheader { get; set; } = null!;
}

View File

@ -28,6 +28,11 @@ public partial class PhSQuoteHeader
/// </summary>
public int BusinessunitId { get; set; }
/// <summary>
/// Identificador único del vendedor
/// </summary>
public int PeopleId { get; set; }
/// <summary>
/// Estado: E (Emitido), A (Aprobado), AC (Aprobado para cirugia), etc.
/// </summary>

View File

@ -43,6 +43,10 @@ public partial class PhronCareOperationsHubContext : DbContext
public virtual DbSet<PhSPatient> PhSPatients { get; set; }
public virtual DbSet<PhSPeopleGroup> PhSPeopleGroups { get; set; }
public virtual DbSet<PhSPerson> PhSPeople { get; set; }
public virtual DbSet<PhSProduct> PhSProducts { get; set; }
public virtual DbSet<PhSProductCategory> PhSProductCategories { get; set; }
@ -58,15 +62,8 @@ public partial class PhronCareOperationsHubContext : DbContext
public virtual DbSet<PhSQuoteRole> PhSQuoteRoles { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#region VERSION DOCKER
{
if (!optionsBuilder.IsConfigured)
{
// Dejarlo vacío para usar la configuración externa desde Program.cs o Startup.cs
}
}
#endregion
//=> optionsBuilder.UseSqlServer("data source=srv01.saludlab.com.ar,39458;initial catalog=phronCare_OperationsHub;User ID=sa;Password=HS|s[~xxQzTo/n>9jO;encrypt=False;trustServerCertificate=True;MultipleActiveResultSets=True");
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
=> optionsBuilder.UseSqlServer("data source=srv01.saludlab.com.ar,39458;initial catalog=phronCare_OperationsHub;User ID=sa;Password=HS|s[~xxQzTo/n>9jO;encrypt=False;trustServerCertificate=True;MultipleActiveResultSets=True");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
@ -481,6 +478,96 @@ public partial class PhronCareOperationsHubContext : DbContext
.HasConstraintName("FK_Patients_DocumentTypes");
});
modelBuilder.Entity<PhSPeopleGroup>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Peop__3213E83F8005BEA1");
entity.ToTable("PhS_PeopleGroups");
entity.Property(e => e.Id)
.HasComment("Identificador único del grupo de personas")
.HasColumnName("id");
entity.Property(e => e.Active)
.HasDefaultValue(true)
.HasComment("Estado activo o inactivo del grupo")
.HasColumnName("active");
entity.Property(e => e.BusinessunitsId)
.HasComment("Unidad de negocio relacionada (opcional)")
.HasColumnName("businessunits_id");
entity.Property(e => e.CreatedAt)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de creación del grupo")
.HasColumnType("datetime")
.HasColumnName("created_at");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasComment("Descripción adicional del grupo")
.HasColumnName("description");
entity.Property(e => e.ModifiedAt)
.HasComment("Fecha de última modificación")
.HasColumnType("datetime")
.HasColumnName("modified_at");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasComment("Nombre del grupo de vendedores")
.HasColumnName("name");
});
modelBuilder.Entity<PhSPerson>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Peop__3213E83F52F7C072");
entity.ToTable("PhS_People");
entity.Property(e => e.Id)
.HasComment("Identificador único de la persona (vendedor/agente)")
.HasColumnName("id");
entity.Property(e => e.Active)
.HasDefaultValue(true)
.HasComment("Activo/Inactivo")
.HasColumnName("active");
entity.Property(e => e.BusinessunitsId)
.HasComment("Unidad de negocio asignada")
.HasColumnName("businessunits_id");
entity.Property(e => e.CreatedAt)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de creación")
.HasColumnType("datetime")
.HasColumnName("created_at");
entity.Property(e => e.DefaultCommissionPercent)
.HasComment("Porcentaje de comisión por defecto")
.HasColumnType("decimal(5, 2)")
.HasColumnName("default_commission_percent");
entity.Property(e => e.Email)
.HasMaxLength(100)
.HasComment("Correo electrónico de la persona")
.HasColumnName("email");
entity.Property(e => e.ModifiedAt)
.HasComment("Fecha de última modificación")
.HasColumnType("datetime")
.HasColumnName("modified_at");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasComment("Nombre de la persona")
.HasColumnName("name");
entity.Property(e => e.PeoplegroupsId)
.HasComment("Grupo comercial opcional")
.HasColumnName("peoplegroups_id");
entity.Property(e => e.Phone)
.HasMaxLength(50)
.HasComment("Teléfono de contacto de la persona")
.HasColumnName("phone");
entity.HasOne(d => d.Businessunits).WithMany(p => p.PhSPeople)
.HasForeignKey(d => d.BusinessunitsId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_people_businessunits");
entity.HasOne(d => d.Peoplegroups).WithMany(p => p.PhSPeople)
.HasForeignKey(d => d.PeoplegroupsId)
.HasConstraintName("FK_people_peoplegroups");
});
modelBuilder.Entity<PhSProduct>(entity =>
{
entity.ToTable("PhS_Products");
@ -651,6 +738,11 @@ public partial class PhronCareOperationsHubContext : DbContext
.HasColumnType("decimal(18, 2)")
.HasColumnName("unitprice");
entity.HasOne(d => d.Product).WithMany(p => p.PhSQuoteDetails)
.HasForeignKey(d => d.ProductId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhS_QuoteDetails_PhS_Products");
entity.HasOne(d => d.Quoteheader).WithMany(p => p.PhSQuoteDetails)
.HasForeignKey(d => d.QuoteheaderId)
.OnDelete(DeleteBehavior.ClientSetNull)
@ -704,6 +796,10 @@ public partial class PhronCareOperationsHubContext : DbContext
entity.Property(e => e.Observations)
.HasComment("Observaciones internas")
.HasColumnName("observations");
entity.Property(e => e.PeopleId)
.HasDefaultValue(1)
.HasComment("Identificador único del vendedor")
.HasColumnName("people_id");
entity.Property(e => e.Printcount)
.HasComment("Cantidad de impresiones")
.HasColumnName("printcount");

View File

@ -0,0 +1,92 @@
using Azure;
using Domain.Entities;
using Domain.Generics;
using Microsoft.EntityFrameworkCore;
using Models.Helpers;
using Models.Interfaces;
using Models.Models;
namespace PhronCare.Core.Data.Repositories.Sales
{
public class PhSPeopleRepository(PhronCareOperationsHubContext context) : IPhSPeopleRepository
{
#region Declaraciones
private readonly PhronCareOperationsHubContext _context = context;
#endregion
#region Métodos
public async Task<PagedResult<EPerson>> GetAllAsync(int page = 1, int pageSize = 50)
{
var query = _context.PhSPeople
.Include(p => p.Businessunits)
.Include(p => p.Peoplegroups)
.AsQueryable();
var pagedEntities = await query.ToPagedResultAsync(page, pageSize);
return new PagedResult<EPerson>
{
Items = pagedEntities.Items.Select(EntityMapper.MapEntity<PhSPerson, EPerson>),
TotalItems = pagedEntities.TotalItems,
Page = pagedEntities.Page,
PageSize = pagedEntities.PageSize
};
}
public async Task<PagedResult<EPerson>> SearchAsync(string? name, string? email,
int page = 1, int pageSize = 50)
{
var query = _context.PhSPeople.AsQueryable();
if (!string.IsNullOrEmpty(name))
{
query = query.Where(p => (p.Name).Contains(name));
}
if (!string.IsNullOrEmpty(email))
{
query = query.Where(p => p.Email != null && p.Email.Contains(email));
}
var pagedEntities = await query.ToPagedResultAsync(page, pageSize);
return new PagedResult<EPerson>
{
Items = pagedEntities.Items.Select(EntityMapper.MapEntity<PhSPerson, EPerson>),
TotalItems = pagedEntities.TotalItems,
Page = pagedEntities.Page,
PageSize = pagedEntities.PageSize
};
}
public async Task<EPerson?> GetByIdAsync(int id)
{
var entity = await _context.PhSPeople
.Include(p => p.Businessunits)
.Include(p => p.Peoplegroups)
.AsNoTracking()
.FirstOrDefaultAsync(p => p.Id == id);
return entity != null ? EntityMapper.MapEntity<PhSPerson, EPerson>(entity) : null;
}
public async Task<EPerson> AddAsync(EPerson person)
{
var dbEntity = EntityMapper.MapEntity<EPerson, PhSPerson>(person);
_context.PhSPeople.Add(dbEntity);
await _context.SaveChangesAsync();
return EntityMapper.MapEntity<PhSPerson, EPerson>(dbEntity);
}
public async Task UpdateAsync(EPerson person)
{
var dbEntity = EntityMapper.MapEntity<EPerson, PhSPerson>(person);
_context.PhSPeople.Update(dbEntity);
await _context.SaveChangesAsync();
}
public async Task DeleteAsync(int id)
{
var entity = await _context.PhSPeople.FindAsync(id);
if (entity != null)
{
_context.PhSPeople.Remove(entity);
await _context.SaveChangesAsync();
}
}
#endregion
}
}

View File

@ -7,7 +7,7 @@
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\maski\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.13.2</NuGetToolVersion>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.13.1</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\maski\.nuget\packages\" />

View File

@ -0,0 +1,144 @@
using Domain.Entities;
using Domain.Generics;
using Microsoft.AspNetCore.Mvc;
using Models.Interfaces;
using System.Reflection;
namespace phronCare.API.Controllers.Sales
{
[Route("api/[controller]")]
[ApiController]
public class PeopleController : ControllerBase
{
private readonly IPeopleDom _peopleService;
public PeopleController(IPeopleDom peopleService)
{
_peopleService = peopleService ?? throw new ArgumentNullException(nameof(peopleService));
}
#region Get Methods
[HttpGet("all")]
public async Task<IActionResult> GetAll([FromQuery] int page = 1, [FromQuery] int pageSize = 50)
{
try
{
var result = await _peopleService.GetAllAsync(page, pageSize);
return Ok(result);
}
catch (Exception ex)
{
return InternalError(ex);
}
}
[HttpGet("{id:int}")]
public async Task<IActionResult> GetById(int id)
{
try
{
var person = await _peopleService.GetByIdAsync(id);
return person == null ? NotFound() : Ok(person);
}
catch (Exception ex)
{
return InternalError(ex);
}
}
[HttpGet("search")]
public async Task<IActionResult> SearchAsync([FromQuery] string? name, [FromQuery] string? email, [FromQuery] int page = 1, [FromQuery] int pageSize = 10)
{
try
{
var result = await _peopleService.SearchAsync(name, email, page, pageSize);
return Ok(result);
}
catch (Exception ex)
{
return InternalError(ex);
}
}
#endregion
#region Post/Put/Delete Methods
[HttpPost("create")]
public async Task<IActionResult> Create([FromBody] EPerson person)
{
try
{
if (person == null)
return BadRequest("La persona no puede ser nula.");
var result = await _peopleService.CreateAsync(person);
return Ok(result);
}
catch (Exception ex)
{
return InternalError(ex);
}
}
[HttpPut("update")]
public async Task<IActionResult> Update([FromBody] EPerson person)
{
try
{
if (person == null || person.Id <= 0)
return BadRequest("La persona es inválida o no tiene un ID válido.");
var success = await _peopleService.UpdateAsync(person);
return success ? Ok("Persona actualizada correctamente.") : NotFound($"No se encontró la persona con ID {person.Id}.");
}
catch (Exception ex)
{
return InternalError(ex);
}
}
[HttpDelete("delete/{id:int}")]
public async Task<IActionResult> Delete(int id)
{
try
{
var success = await _peopleService.DeleteAsync(id);
return success ? Ok("Persona eliminada correctamente.") : NotFound($"No se encontró la persona con ID {id}.");
}
catch (Exception ex)
{
return InternalError(ex);
}
}
[HttpPost("exportfiltered")]
public async Task<IActionResult> ExportFilteredPeople([FromBody] PeopleSearchParams searchParams)
{
try
{
var file = await _peopleService.ExportFilteredCustomersToExcelAsync(searchParams);
return File(file,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"Vendedores.xlsx");
}
catch (Exception ex)
{
return InternalError(ex);
}
}
#endregion
#region Helpers
private IActionResult InternalError(Exception ex)
{
var methodName = MethodBase.GetCurrentMethod()?.Name ?? "UnknownMethod";
return StatusCode(500, $"{methodName} Message: {ex.Message}");
}
#endregion
}
}

View File

@ -72,7 +72,12 @@ builder.Services.AddScoped<IPhSProfessionalRepository, PhSProfessionalRepository
builder.Services.AddScoped<IInstitutionDom, InstitutionService>();
builder.Services.AddScoped<IPhSInstitutionRepository, PhSInstitutionRepository>();
builder.Services.AddScoped<IPeopleDom, PeopleService>();
builder.Services.AddScoped<IPhSPeopleRepository, PhSPeopleRepository>();
builder.Services.AddScoped<IQuoteDom, QuoteService>();
builder.Services.AddScoped<IPhSQuoteHeaderRepository, PhSQuoteHeaderRepository>();
builder.Services.AddScoped<IPhSQuoteDetailRepository, PhSQuoteDetailRepository>();
builder.Services.AddScoped<IPhSQuoteRoleRepository, PhSQuoteRoleRepository>();

View File

@ -828,6 +828,138 @@
],
"ReturnTypes": []
},
{
"ContainingType": "phronCare.API.Controllers.Sales.PeopleController",
"Method": "GetById",
"RelativePath": "api/People/{id}",
"HttpMethod": "GET",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.Int32",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "phronCare.API.Controllers.Sales.PeopleController",
"Method": "GetAll",
"RelativePath": "api/People/all",
"HttpMethod": "GET",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "page",
"Type": "System.Int32",
"IsRequired": false
},
{
"Name": "pageSize",
"Type": "System.Int32",
"IsRequired": false
}
],
"ReturnTypes": []
},
{
"ContainingType": "phronCare.API.Controllers.Sales.PeopleController",
"Method": "Create",
"RelativePath": "api/People/create",
"HttpMethod": "POST",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "person",
"Type": "Domain.Entities.EPerson",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "phronCare.API.Controllers.Sales.PeopleController",
"Method": "Delete",
"RelativePath": "api/People/delete/{id}",
"HttpMethod": "DELETE",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.Int32",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "phronCare.API.Controllers.Sales.PeopleController",
"Method": "ExportFilteredPeople",
"RelativePath": "api/People/exportfiltered",
"HttpMethod": "POST",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "searchParams",
"Type": "Domain.Generics.PeopleSearchParams",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "phronCare.API.Controllers.Sales.PeopleController",
"Method": "SearchAsync",
"RelativePath": "api/People/search",
"HttpMethod": "GET",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "name",
"Type": "System.String",
"IsRequired": false
},
{
"Name": "email",
"Type": "System.String",
"IsRequired": false
},
{
"Name": "page",
"Type": "System.Int32",
"IsRequired": false
},
{
"Name": "pageSize",
"Type": "System.Int32",
"IsRequired": false
}
],
"ReturnTypes": []
},
{
"ContainingType": "phronCare.API.Controllers.Sales.PeopleController",
"Method": "Update",
"RelativePath": "api/People/update",
"HttpMethod": "PUT",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "person",
"Type": "Domain.Entities.EPerson",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "phronCare.API.Controllers.Sales.ProductController",
"Method": "GetById",

View File

@ -0,0 +1,208 @@
@page "/sales/people"
@using Domain.Entities
@using Domain.Generics
@using phronCare.UIBlazor.Services.Sales
@inject IToastService toastService
@inject NavigationManager Navigation
@inject PeopleService peopleService
<div class="card">
<div class="card-header d-flex justify-content-center align-items-center" style="zoom:80%;">
<h3 class="card-title m-0">Búsqueda de Vendedores</h3>
</div>
<div class="card-body" style="zoom:80%;">
<div class="mb-4 space-y-2">
<input @bind="SearchParams.Name" placeholder="Nombre" class="border rounded p-1 w-full" />
<input @bind="SearchParams.Email" placeholder="Email" class="border rounded p-1 w-full" />
<button class="btn btn-primary rounded-pill" @onclick="BuscarPersonas">
<i class="fas fa-binoculars me-1"></i> Buscar
</button>
<button class="btn btn-success rounded-pill" @onclick="NuevaPersona">
<i class="fas fa-plus me-1"></i> Nueva
</button>
<button class="btn btn-success rounded-pill" @onclick="ExportarExcel">
<i class="fas fa-file-excel me-1"></i> Excel
</button>
<button class="btn btn-secondary rounded-pill" @onclick="Cancelar">
<i class="fas fa-arrow-left me-1"></i> Volver
</button>
</div>
<hr />
<div>
@if (TablaPersonas != null && TablaPersonas.Any())
{
<PhTable Columns="TableColumns"
Data="TablaPersonas"
SelectionField="Id"
RowsPerPage="SearchParams.PageSize"
RenderButtons="true" Buttons="botones"
ShowPageButtons="false"
ShowQuickSearch="false"
RenderSelect="false" />
}
else
{
<p>No hay resultados.</p>
}
</div>
</div>
<div class="card-footer d-flex justify-content-center align-items-center" style="zoom:80%;">
<div class="d-flex align-items-center gap-3">
<button class="btn btn-secondary rounded-pill" @onclick="PrimeraPagina" disabled="@(SearchParams.Page == 1)">
<i class="fas fa-angle-double-left me-1"></i> Primera
</button>
<button class="btn btn-secondary rounded-pill" @onclick="AnteriorPagina" disabled="@(!PuedeRetroceder)">
<i class="fas fa-chevron-left me-1"></i> Anterior
</button>
<span class="mx-2">
Página <strong>@SearchParams.Page</strong> de <strong>@TotalPaginas</strong>
</span>
<button class="btn btn-secondary rounded-pill" @onclick="SiguientePagina" disabled="@(!PuedeAvanzar)">
Siguiente <i class="fas fa-chevron-right ms-1"></i>
</button>
<button class="btn btn-secondary rounded-pill" @onclick="UltimaPagina" disabled="@(SearchParams.Page == TotalPaginas)">
Última <i class="fas fa-angle-double-right ms-1"></i>
</button>
<div class="d-flex align-items-center ms-3">
<input type="number" class="form-control form-control-sm rounded" style="width: 80px;" min="1" max="@TotalPaginas" @bind="PaginaDeseada" />
<button class="btn btn-outline-primary btn-sm ms-2 rounded-pill" @onclick="IrAPagina">
<i class="fas fa-arrow-right-to-bracket me-1"></i> Ir
</button>
</div>
</div>
</div>
</div>
@code {
protected override void OnInitialized()
{
botones = new List<PhTable.ButtonOptions>
{
new PhTable.ButtonOptions
{
Caption = "Editar",
ElementClass = "btn btn-dark btn-sm rounded-pill",
UrlAction = "/sales/personform/",
OnClickAction = async (id) =>
{
if (int.TryParse(id, out var personId))
{
Navigation.NavigateTo($"/sales/personform/{personId}");
}
}
}
};
}
private PeopleSearchParams SearchParams = new();
private PagedResult<EPerson>? PagedResult;
private List<Dictionary<string, object>> TablaPersonas = new();
private List<string> TableColumns = new()
{
"Id", "Nombre", "Email", "Teléfono", "Comision", "Activo"
};
private int PaginaDeseada = 1;
private async Task BuscarPersonas()
{
await CargarPersonas();
}
private async Task CargarPersonas()
{
PagedResult = await peopleService.SearchPeopleAsync(SearchParams);
if (PagedResult?.Items is not null)
{
TablaPersonas = PagedResult.Items.Select(p => new Dictionary<string, object>
{
{ "Id", p.Id },
{ "Nombre", $"{p.Name}" },
{ "Email", p.Email ?? string.Empty },
{ "Teléfono", p.Phone ?? string.Empty },
{ "Comision", p.DefaultCommissionPercent ?? 0 },
{ "Activo", p.Active ? "Sí" : "No" }
}).ToList();
}
}
private async Task ExportarExcel()
{
var searchParams = new PeopleSearchParams
{
Name = SearchParams.Name, // Aquí podés obtener los filtros de los campos en el formulario
Email = SearchParams.Email,
Page = 1,
PageSize = int.MaxValue // Puedes ajustar el tamaño de la página para exportar todos los registros
};
try
{
await peopleService.ExportFilteredAsync(searchParams);
toastService.ShowSuccess("Exportación completada exitosamente.");
}
catch (Exception ex)
{
toastService.ShowError($"{ex.Message}");
}
}
private async Task PrimeraPagina()
{
SearchParams.Page = 1;
await BuscarPersonas();
}
private async Task UltimaPagina()
{
SearchParams.Page = TotalPaginas;
await BuscarPersonas();
}
private async Task IrAPagina()
{
if (PaginaDeseada >= 1 && PaginaDeseada <= TotalPaginas)
{
SearchParams.Page = PaginaDeseada;
await BuscarPersonas();
}
else
{
toastService.ShowWarning("Número de página fuera de rango.");
}
}
private async Task SiguientePagina() => await CambiarPagina(1);
private async Task AnteriorPagina() => await CambiarPagina(-1);
private async Task CambiarPagina(int delta)
{
var nuevaPagina = SearchParams.Page + delta;
if (nuevaPagina >= 1 && nuevaPagina <= TotalPaginas)
{
SearchParams.Page = nuevaPagina;
await CargarPersonas();
}
}
private void NuevaPersona()
{
Navigation.NavigateTo("/sales/personform/");
}
private void Cancelar()
{
Navigation.NavigateTo("/DashboardPanel");
}
private bool PuedeRetroceder => PagedResult != null && SearchParams.Page > 1;
private bool PuedeAvanzar => PagedResult != null && SearchParams.Page < TotalPaginas;
private int TotalPaginas => PagedResult is null ? 1 :
(int)Math.Ceiling((double)(PagedResult.TotalItems) / SearchParams.PageSize);
List<PhTable.ButtonOptions> botones = new();
}

View File

@ -0,0 +1,167 @@
@page "/sales/personform"
@page "/sales/personform/{PersonId:int}"
@using System.ComponentModel.DataAnnotations
@using phronCare.UIBlazor.Pages.Shared.Modals
@using phronCare.UIBlazor.Services.Sales
@inject IModalService Modal
@inject IToastService toastService
@inject PeopleService peopleService
@inject NavigationManager Navigation
@inject BusinessUnitService businessUnitService
<div class="card" style="zoom:80%">
<div class="card-header d-flex justify-content-center align-items-center">
<h3 class="card-title m-0">Información de la Persona</h3>
</div>
<div class="card-body">
<EditForm Model="@person" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="row">
<div class="col-md-6">
<label for="Name">Nombre completo:</label>
<InputText id="Name" @bind-Value="person.Name" class="form-control" />
</div>
<div class="col-md-6">
<label for="Phone">Teléfono:</label>
<InputText id="Phone" @bind-Value="person.Phone" class="form-control" />
</div>
</div>
<div class="row">
<div class="col-md-6">
<label for="Email">Email:</label>
<InputText id="Email" @bind-Value="person.Email" class="form-control" />
</div>
<div class="col-md-6">
<label for="DefaultCommissionPercent">Porcentaje Comisión (%):</label>
<InputNumber id="DefaultCommissionPercent" @bind-Value="person.DefaultCommissionPercent" class="form-control" step="0.01" />
</div>
</div>
<div class="row">
<div class="col-md-6">
<label for="BusinessunitsId">Unidad de Negocio:</label>
<InputSelect id="BusinessunitsId" @bind-Value="person.BusinessunitsId" class="form-control">
<option value="">-- Seleccionar --</option>
@foreach (var unit in businessUnits)
{
<option value="@unit.Id">@unit.Description</option>
}
</InputSelect>
</div>
<div class="col-md-6">
<label for="PeoplegroupsId">Grupo Comercial (opcional):</label>
<InputSelect id="PeoplegroupsId" @bind-Value="person.PeoplegroupsId" class="form-control">
<option value="">-- Seleccionar --</option>
@foreach (var group in peopleGroups)
{
<option value="@group.Id">@group.Name</option>
}
</InputSelect>
</div>
</div>
<div class="row mt-3">
<div class="col-md-6 d-flex align-items-center justify-content-start">
<div class="form-check form-switch">
<InputCheckbox id="Active" @bind-Value="person.Active" class="form-check-input" />
<label class="form-check-label ms-2" for="Active">Activo</label>
</div>
</div>
</div>
</EditForm>
</div>
<div class="card-footer">
<div class="d-flex justify-content-end align-items-center py-3">
<button class="btn btn-primary me-2" type="button" @onclick="HandleValidSubmit" disabled="@isSaving">
@(isSaving ? "Guardando..." : "Guardar Persona")
</button>
<button type="button" class="btn btn-secondary" @onclick="Cancel">Cancelar</button>
</div>
</div>
</div>
@code {
[Parameter]
public int? PersonId { get; set; }
private EPerson person { get; set; } = new();
private bool isSaving = false;
private string returnUrl = "/sales/people";
private List<EBusinessUnit> businessUnits = new();
private List<EPeopleGroup> peopleGroups = new();
protected override async Task OnInitializedAsync()
{
await LoadBusinessUnits();
await LoadPeopleGroups();
if (PersonId.HasValue)
{
person = await peopleService.GetPersonByIdAsync(PersonId.Value) ?? new();
}
}
private async Task HandleValidSubmit()
{
var parameters = new ModalParameters();
parameters.Add("Message", "¿Desea guardar los cambios de la persona?");
var modal = Modal.Show<ConfirmModal>("Confirmación", parameters);
var result = await modal.Result;
if (result.Cancelled)
return;
try
{
isSaving = true;
if (PersonId.HasValue)
{
await peopleService.UpdatePersonAsync(person);
}
else
{
await peopleService.CreatePersonAsync(person);
}
toastService.ShowSuccess("Persona guardada exitosamente.");
Navigation.NavigateTo(returnUrl);
}
catch (Exception ex)
{
toastService.ShowError($"Error: {ex.Message}");
}
finally
{
isSaving = false;
}
}
private void Cancel()
{
Navigation.NavigateTo(returnUrl);
}
private async Task LoadBusinessUnits()
{
businessUnits = await businessUnitService.GetAllAsync();
}
private async Task LoadPeopleGroups()
{
// Simulamos carga de Grupos Comerciales. Debería venir de un servicio real.
peopleGroups = new List<EPeopleGroup>
{
new EPeopleGroup { Id = 1, Name = "Grupo 1" },
new EPeopleGroup { Id = 2, Name = "Grupo 2" },
};
}
}

View File

@ -7,7 +7,6 @@ using phronCare.UIBlazor.Services.UI;
using Blazored.Modal;
using Blazored.Toast;
using phronCare.UIBlazor.Services.Tickets;
using phronCare.UIBlazor.Shared;
using phronCare.UIBlazor.Services.Sales;
var builder = WebAssemblyHostBuilder.CreateDefault(args);
@ -48,6 +47,7 @@ builder.Services.AddScoped<InstitutionService>();
builder.Services.AddScoped<ProductService>();
builder.Services.AddScoped<BusinessUnitService>();
builder.Services.AddScoped<ProfessionalService>();
builder.Services.AddScoped<PeopleService>();
builder.Services.AddScoped<ProfessionalSpecialtyService>();
builder.Services.AddScoped<ProductCategoryService>();
#endregion

View File

@ -0,0 +1,21 @@
using System.Net.Http.Json;
using Domain.Entities;
namespace phronCare.UIBlazor.Services.People
{
public class PeopleGroupService
{
private readonly HttpClient _http;
public PeopleGroupService(HttpClient http)
{
_http = http;
}
public async Task<List<EPeopleGroup>> GetAllAsync()
{
var result = await _http.GetFromJsonAsync<List<EPeopleGroup>>("/api/PeopleGroup/All");
return result ?? new List<EPeopleGroup>();
}
}
}

View File

@ -0,0 +1,94 @@
using Domain.Entities;
using Domain.Generics;
using System.Net.Http.Json;
using System.Text.Json;
using System.Text;
using Microsoft.JSInterop;
using System.Reflection;
namespace phronCare.UIBlazor.Services.Sales
{
public class PeopleService
{
private readonly HttpClient _http;
private readonly IJSRuntime _js;
public PeopleService(HttpClient http, IJSRuntime js)
{
_http = http;
_js = js;
}
// Buscar personas
public async Task<PagedResult<EPerson>?> SearchPeopleAsync(PeopleSearchParams searchParams)
{
var url = $"api/People/search?" +
$"name={searchParams.Name}&" +
$"email={searchParams.Email}&" +
$"page={searchParams.Page}&" +
$"pageSize={searchParams.PageSize}";
return await _http.GetFromJsonAsync<PagedResult<EPerson>>(url);
}
public async Task ExportFilteredAsync(PeopleSearchParams searchParams)
{
try
{
var content = new StringContent(JsonSerializer.Serialize(searchParams), Encoding.UTF8, "application/json");
var response = await _http.PostAsync("api/People/exportfiltered", content);
if (!response.IsSuccessStatusCode)
{
var errorContent = await response.Content.ReadAsStringAsync();
throw new Exception(errorContent);
}
var bytes = await response.Content.ReadAsByteArrayAsync();
var base64 = Convert.ToBase64String(bytes);
var timestamp = DateTime.Now.ToString("yyyyMMddHHmm");
var fileName = $"{timestamp}_vendedores.xlsx";
await _js.InvokeVoidAsync("saveAsFile", fileName, base64);
}
catch (Exception ex)
{
var methodName = MethodBase.GetCurrentMethod()?.Name ?? "UnknownMethod";
var message = ex.Message ?? "No message provided";
throw new Exception($"{message}", ex);
}
}
// Obtener una persona por Id (para formulario)
public async Task<EPerson?> GetPersonByIdAsync(int id)
{
return await _http.GetFromJsonAsync<EPerson>($"api/People/{id}");
}
// Crear nueva persona
public async Task CreatePersonAsync(EPerson person)
{
var content = new StringContent(JsonSerializer.Serialize(person), Encoding.UTF8, "application/json");
var response = await _http.PostAsync("api/People/create", content); // CAMBIADO
if (!response.IsSuccessStatusCode)
{
var errorContent = await response.Content.ReadAsStringAsync();
throw new Exception(errorContent);
}
}
// Actualizar persona existente
public async Task UpdatePersonAsync(EPerson person)
{
var content = new StringContent(JsonSerializer.Serialize(person), Encoding.UTF8, "application/json");
var response = await _http.PutAsync("api/People/update", content); // CAMBIADO
if (!response.IsSuccessStatusCode)
{
var errorContent = await response.Content.ReadAsStringAsync();
throw new Exception(errorContent);
}
}
}
}

View File

@ -86,6 +86,11 @@
<li aria-hidden="true"></li> Profesionales
</NavLink>
</div>
<div class="nav-item px-1">
<NavLink class="nav-link" href="sales/people/">
<li aria-hidden="true"></li> Vendedores
</NavLink>
</div>
<div class="nav-item px-1">
<NavLink class="nav-link" href="sales/institutions/">
<li aria-hidden="true"></li> Instituciones

View File

@ -99,6 +99,9 @@
"projectReferences": {
"C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Domain\\Domain.csproj": {
"projectPath": "C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Domain\\Domain.csproj"
},
"C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Transversal\\Transversal.csproj": {
"projectPath": "C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Transversal\\Transversal.csproj"
}
}
}
@ -183,6 +186,77 @@
"#import": []
}
}
},
"C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Transversal\\Transversal.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Transversal\\Transversal.csproj",
"projectName": "Transversal",
"projectPath": "C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Transversal\\Transversal.csproj",
"packagesPath": "C:\\Users\\maski\\.nuget\\packages\\",
"outputPath": "C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Transversal\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\maski\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.200"
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"EPPlus": {
"target": "Package",
"version": "[7.5.2, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.201/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)system.text.json\8.0.0\buildTransitive\net6.0\System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json\8.0.0\buildTransitive\net6.0\System.Text.Json.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.3\build\Microsoft.NET.Sdk.WebAssembly.Pack.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.3\build\Microsoft.NET.Sdk.WebAssembly.Pack.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.1\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.1\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets')" />

View File

@ -43,6 +43,49 @@
"buildMultiTargeting/Blazored.Toast.props": {}
}
},
"EPPlus/7.5.2": {
"type": "package",
"dependencies": {
"EPPlus.System.Drawing": "7.5.0",
"Microsoft.Extensions.Configuration.Json": "8.0.1",
"Microsoft.IO.RecyclableMemoryStream": "3.0.1",
"System.ComponentModel.Annotations": "5.0.0",
"System.Security.Cryptography.Pkcs": "8.0.1",
"System.Text.Encoding.CodePages": "8.0.0"
},
"compile": {
"lib/net8.0/EPPlus.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/EPPlus.dll": {
"related": ".xml"
}
}
},
"EPPlus.Interfaces/7.5.0": {
"type": "package",
"compile": {
"lib/net8.0/EPPlus.Interfaces.dll": {}
},
"runtime": {
"lib/net8.0/EPPlus.Interfaces.dll": {}
}
},
"EPPlus.System.Drawing/7.5.0": {
"type": "package",
"dependencies": {
"EPPlus.Interfaces": "7.5.0",
"System.Drawing.Common": "8.0.4"
},
"compile": {
"lib/net8.0/EPPlus.System.Drawing.dll": {}
},
"runtime": {
"lib/net8.0/EPPlus.System.Drawing.dll": {}
}
},
"Microsoft.AspNetCore.Authorization/8.0.6": {
"type": "package",
"dependencies": {
@ -238,7 +281,7 @@
"buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets": {}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/8.0.0": {
"Microsoft.Extensions.Configuration.FileExtensions/8.0.1": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
@ -261,14 +304,13 @@
"buildTransitive/net6.0/_._": {}
}
},
"Microsoft.Extensions.Configuration.Json/8.0.0": {
"Microsoft.Extensions.Configuration.Json/8.0.1": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"System.Text.Json": "8.0.0"
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.1",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0"
},
"compile": {
"lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": {
@ -451,6 +493,19 @@
"buildTransitive/net6.0/_._": {}
}
},
"Microsoft.IO.RecyclableMemoryStream/3.0.1": {
"type": "package",
"compile": {
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll": {
"related": ".xml"
}
}
},
"Microsoft.JSInterop/8.0.6": {
"type": "package",
"compile": {
@ -493,6 +548,60 @@
"build/Microsoft.NET.Sdk.WebAssembly.Pack.targets": {}
}
},
"Microsoft.Win32.SystemEvents/8.0.0": {
"type": "package",
"compile": {
"lib/net8.0/Microsoft.Win32.SystemEvents.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/Microsoft.Win32.SystemEvents.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
},
"runtimeTargets": {
"runtimes/win/lib/net8.0/Microsoft.Win32.SystemEvents.dll": {
"assetType": "runtime",
"rid": "win"
}
}
},
"System.ComponentModel.Annotations/5.0.0": {
"type": "package",
"compile": {
"ref/netstandard2.1/System.ComponentModel.Annotations.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.1/System.ComponentModel.Annotations.dll": {
"related": ".xml"
}
}
},
"System.Drawing.Common/8.0.4": {
"type": "package",
"dependencies": {
"Microsoft.Win32.SystemEvents": "8.0.0"
},
"compile": {
"lib/net8.0/System.Drawing.Common.dll": {
"related": ".pdb;.xml"
}
},
"runtime": {
"lib/net8.0/System.Drawing.Common.dll": {
"related": ".pdb;.xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"System.IO.Pipelines/8.0.0": {
"type": "package",
"compile": {
@ -509,15 +618,15 @@
"buildTransitive/net6.0/_._": {}
}
},
"System.Text.Encodings.Web/8.0.0": {
"System.Security.Cryptography.Pkcs/8.0.1": {
"type": "package",
"compile": {
"lib/net8.0/System.Text.Encodings.Web.dll": {
"lib/net8.0/System.Security.Cryptography.Pkcs.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/System.Text.Encodings.Web.dll": {
"lib/net8.0/System.Security.Cryptography.Pkcs.dll": {
"related": ".xml"
}
},
@ -525,29 +634,32 @@
"buildTransitive/net6.0/_._": {}
},
"runtimeTargets": {
"runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll": {
"runtimes/win/lib/net8.0/System.Security.Cryptography.Pkcs.dll": {
"assetType": "runtime",
"rid": "browser"
"rid": "win"
}
}
},
"System.Text.Json/8.0.0": {
"System.Text.Encoding.CodePages/8.0.0": {
"type": "package",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
},
"compile": {
"lib/net8.0/System.Text.Json.dll": {
"lib/net8.0/System.Text.Encoding.CodePages.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/System.Text.Json.dll": {
"lib/net8.0/System.Text.Encoding.CodePages.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/System.Text.Json.targets": {}
"buildTransitive/net6.0/_._": {}
},
"runtimeTargets": {
"runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll": {
"assetType": "runtime",
"rid": "win"
}
}
},
"Domain/1.0.0": {
@ -559,6 +671,19 @@
"runtime": {
"bin/placeholder/Domain.dll": {}
}
},
"Transversal/1.0.0": {
"type": "project",
"framework": ".NETCoreApp,Version=v8.0",
"dependencies": {
"EPPlus": "7.5.2"
},
"compile": {
"bin/placeholder/Transversal.dll": {}
},
"runtime": {
"bin/placeholder/Transversal.dll": {}
}
}
},
"net8.0/browser-wasm": {
@ -603,6 +728,49 @@
"buildMultiTargeting/Blazored.Toast.props": {}
}
},
"EPPlus/7.5.2": {
"type": "package",
"dependencies": {
"EPPlus.System.Drawing": "7.5.0",
"Microsoft.Extensions.Configuration.Json": "8.0.1",
"Microsoft.IO.RecyclableMemoryStream": "3.0.1",
"System.ComponentModel.Annotations": "5.0.0",
"System.Security.Cryptography.Pkcs": "8.0.1",
"System.Text.Encoding.CodePages": "8.0.0"
},
"compile": {
"lib/net8.0/EPPlus.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/EPPlus.dll": {
"related": ".xml"
}
}
},
"EPPlus.Interfaces/7.5.0": {
"type": "package",
"compile": {
"lib/net8.0/EPPlus.Interfaces.dll": {}
},
"runtime": {
"lib/net8.0/EPPlus.Interfaces.dll": {}
}
},
"EPPlus.System.Drawing/7.5.0": {
"type": "package",
"dependencies": {
"EPPlus.Interfaces": "7.5.0",
"System.Drawing.Common": "8.0.4"
},
"compile": {
"lib/net8.0/EPPlus.System.Drawing.dll": {}
},
"runtime": {
"lib/net8.0/EPPlus.System.Drawing.dll": {}
}
},
"Microsoft.AspNetCore.Authorization/8.0.6": {
"type": "package",
"dependencies": {
@ -798,7 +966,7 @@
"buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets": {}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/8.0.0": {
"Microsoft.Extensions.Configuration.FileExtensions/8.0.1": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
@ -821,14 +989,13 @@
"buildTransitive/net6.0/_._": {}
}
},
"Microsoft.Extensions.Configuration.Json/8.0.0": {
"Microsoft.Extensions.Configuration.Json/8.0.1": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"System.Text.Json": "8.0.0"
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.1",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0"
},
"compile": {
"lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": {
@ -1011,6 +1178,19 @@
"buildTransitive/net6.0/_._": {}
}
},
"Microsoft.IO.RecyclableMemoryStream/3.0.1": {
"type": "package",
"compile": {
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll": {
"related": ".xml"
}
}
},
"Microsoft.JSInterop/8.0.6": {
"type": "package",
"compile": {
@ -1053,6 +1233,54 @@
"build/Microsoft.NET.Sdk.WebAssembly.Pack.targets": {}
}
},
"Microsoft.Win32.SystemEvents/8.0.0": {
"type": "package",
"compile": {
"lib/net8.0/Microsoft.Win32.SystemEvents.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/Microsoft.Win32.SystemEvents.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"System.ComponentModel.Annotations/5.0.0": {
"type": "package",
"compile": {
"ref/netstandard2.1/System.ComponentModel.Annotations.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.1/System.ComponentModel.Annotations.dll": {
"related": ".xml"
}
}
},
"System.Drawing.Common/8.0.4": {
"type": "package",
"dependencies": {
"Microsoft.Win32.SystemEvents": "8.0.0"
},
"compile": {
"lib/net8.0/System.Drawing.Common.dll": {
"related": ".pdb;.xml"
}
},
"runtime": {
"lib/net8.0/System.Drawing.Common.dll": {
"related": ".pdb;.xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"System.IO.Pipelines/8.0.0": {
"type": "package",
"compile": {
@ -1069,15 +1297,15 @@
"buildTransitive/net6.0/_._": {}
}
},
"System.Text.Encodings.Web/8.0.0": {
"System.Security.Cryptography.Pkcs/8.0.1": {
"type": "package",
"compile": {
"lib/net8.0/System.Text.Encodings.Web.dll": {
"lib/net8.0/System.Security.Cryptography.Pkcs.dll": {
"related": ".xml"
}
},
"runtime": {
"runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll": {
"lib/net8.0/System.Security.Cryptography.Pkcs.dll": {
"related": ".xml"
}
},
@ -1085,23 +1313,20 @@
"buildTransitive/net6.0/_._": {}
}
},
"System.Text.Json/8.0.0": {
"System.Text.Encoding.CodePages/8.0.0": {
"type": "package",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
},
"compile": {
"lib/net8.0/System.Text.Json.dll": {
"lib/net8.0/System.Text.Encoding.CodePages.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/System.Text.Json.dll": {
"lib/net8.0/System.Text.Encoding.CodePages.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/System.Text.Json.targets": {}
"buildTransitive/net6.0/_._": {}
}
},
"Domain/1.0.0": {
@ -1113,6 +1338,19 @@
"runtime": {
"bin/placeholder/Domain.dll": {}
}
},
"Transversal/1.0.0": {
"type": "project",
"framework": ".NETCoreApp,Version=v8.0",
"dependencies": {
"EPPlus": "7.5.2"
},
"compile": {
"bin/placeholder/Transversal.dll": {}
},
"runtime": {
"bin/placeholder/Transversal.dll": {}
}
}
}
},
@ -1158,6 +1396,77 @@
"staticwebassets/Blazored.Toast.bundle.scp.css"
]
},
"EPPlus/7.5.2": {
"sha512": "qHJurPvgWoheHyyam53NV8d2CiOO2q88Rg/Lk0wSYwi/aoGDtzYihTMCHeTwGM9zHZnnI3aVLu482SODN+HB4g==",
"type": "package",
"path": "epplus/7.5.2",
"files": [
".nupkg.metadata",
".signature.p7s",
"EPPlusLogo.png",
"epplus.7.5.2.nupkg.sha512",
"epplus.nuspec",
"lib/net35/EPPlus.dll",
"lib/net35/EPPlus.xml",
"lib/net462/EPPlus.dll",
"lib/net462/EPPlus.xml",
"lib/net6.0/EPPlus.dll",
"lib/net6.0/EPPlus.xml",
"lib/net7.0/EPPlus.dll",
"lib/net7.0/EPPlus.xml",
"lib/net8.0/EPPlus.dll",
"lib/net8.0/EPPlus.xml",
"lib/netstandard2.0/EPPlus.dll",
"lib/netstandard2.0/EPPlus.xml",
"lib/netstandard2.1/EPPlus.dll",
"lib/netstandard2.1/EPPlus.xml",
"license.md",
"readme.md",
"readme.txt"
]
},
"EPPlus.Interfaces/7.5.0": {
"sha512": "mGLKgdIKkXRYIu+HIGmZUngVAAlPzIQgI/KqG10m6P5P2112l6p/5dDa35UHu4GV4Qevw0Pq9PxAymrrrl4tzA==",
"type": "package",
"path": "epplus.interfaces/7.5.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"EPPlusLogo.png",
"epplus.interfaces.7.5.0.nupkg.sha512",
"epplus.interfaces.nuspec",
"lib/net35/EPPlus.Interfaces.dll",
"lib/net462/EPPlus.Interfaces.dll",
"lib/net6.0/EPPlus.Interfaces.dll",
"lib/net7.0/EPPlus.Interfaces.dll",
"lib/net8.0/EPPlus.Interfaces.dll",
"lib/netstandard2.0/EPPlus.Interfaces.dll",
"lib/netstandard2.1/EPPlus.Interfaces.dll",
"license.md",
"readme.md"
]
},
"EPPlus.System.Drawing/7.5.0": {
"sha512": "cgwstM12foFisisURUyxwJOWHMD/rZxPSyBXFsCOFayaKq0oKlOs1mCTueKNNIlpPDG1no9vcaQiJgZXFM4KPA==",
"type": "package",
"path": "epplus.system.drawing/7.5.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"EPPlusLogo.png",
"epplus.system.drawing.7.5.0.nupkg.sha512",
"epplus.system.drawing.nuspec",
"lib/net35/EPPlus.System.Drawing.dll",
"lib/net462/EPPlus.System.Drawing.dll",
"lib/net6.0/EPPlus.System.Drawing.dll",
"lib/net7.0/EPPlus.System.Drawing.dll",
"lib/net8.0/EPPlus.System.Drawing.dll",
"lib/netstandard2.0/EPPlus.System.Drawing.dll",
"lib/netstandard2.1/EPPlus.System.Drawing.dll",
"license.md",
"readme.md"
]
},
"Microsoft.AspNetCore.Authorization/8.0.6": {
"sha512": "H1CSbD7UeSPsrJSUpvbms6SqWMa5y8ch4Rw+gyHh2uztOEb20fTP2r0AUnStn1Q9WYghikiDO5wzkgV+n6KC2Q==",
"type": "package",
@ -1557,10 +1866,10 @@
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Configuration.FileExtensions/8.0.0": {
"sha512": "McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==",
"Microsoft.Extensions.Configuration.FileExtensions/8.0.1": {
"sha512": "EJzSNO9oaAXnTdtdNO6npPRsIIeZCBSNmdQ091VDO7fBiOtJAAeEq6dtrVXIi3ZyjC5XRSAtVvF8SzcneRHqKQ==",
"type": "package",
"path": "microsoft.extensions.configuration.fileextensions/8.0.0",
"path": "microsoft.extensions.configuration.fileextensions/8.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
@ -1582,15 +1891,15 @@
"lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.xml",
"lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.xml",
"microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512",
"microsoft.extensions.configuration.fileextensions.8.0.1.nupkg.sha512",
"microsoft.extensions.configuration.fileextensions.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Configuration.Json/8.0.0": {
"sha512": "C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==",
"Microsoft.Extensions.Configuration.Json/8.0.1": {
"sha512": "L89DLNuimOghjV3tLx0ArFDwVEJD6+uGB3BMCMX01kaLzXkaXHb2021xOMl2QOxUxbdePKUZsUY7n2UUkycjRg==",
"type": "package",
"path": "microsoft.extensions.configuration.json/8.0.0",
"path": "microsoft.extensions.configuration.json/8.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
@ -1614,7 +1923,7 @@
"lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.xml",
"lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll",
"lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.xml",
"microsoft.extensions.configuration.json.8.0.0.nupkg.sha512",
"microsoft.extensions.configuration.json.8.0.1.nupkg.sha512",
"microsoft.extensions.configuration.json.nuspec",
"useSharedDesignerContext.txt"
]
@ -1953,6 +2262,24 @@
"useSharedDesignerContext.txt"
]
},
"Microsoft.IO.RecyclableMemoryStream/3.0.1": {
"sha512": "s/s20YTVY9r9TPfTrN5g8zPF1YhwxyqO6PxUkrYTGI2B+OGPe9AdajWZrLhFqXIvqIW23fnUE4+ztrUWNU1+9g==",
"type": "package",
"path": "microsoft.io.recyclablememorystream/3.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll",
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.xml",
"lib/netstandard2.0/Microsoft.IO.RecyclableMemoryStream.dll",
"lib/netstandard2.0/Microsoft.IO.RecyclableMemoryStream.xml",
"lib/netstandard2.1/Microsoft.IO.RecyclableMemoryStream.dll",
"lib/netstandard2.1/Microsoft.IO.RecyclableMemoryStream.xml",
"microsoft.io.recyclablememorystream.3.0.1.nupkg.sha512",
"microsoft.io.recyclablememorystream.nuspec"
]
},
"Microsoft.JSInterop/8.0.6": {
"sha512": "E1djWS3d41fcd++7sGlbYhOHde5Pb0oBpOcNvUbn+1ga/yCvsjzUfbd/tDRg1qacNKS0iwKWYOIqTZxJnh99dQ==",
"type": "package",
@ -2076,6 +2403,171 @@
"tools/net9.0/Microsoft.NET.WebAssembly.Webcil.dll"
]
},
"Microsoft.Win32.SystemEvents/8.0.0": {
"sha512": "9opKRyOKMCi2xJ7Bj7kxtZ1r9vbzosMvRrdEhVhDz8j8MoBGgB+WmC94yH839NPH+BclAjtQ/pyagvi/8gDLkw==",
"type": "package",
"path": "microsoft.win32.systemevents/8.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/Microsoft.Win32.SystemEvents.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/Microsoft.Win32.SystemEvents.targets",
"lib/net462/Microsoft.Win32.SystemEvents.dll",
"lib/net462/Microsoft.Win32.SystemEvents.xml",
"lib/net6.0/Microsoft.Win32.SystemEvents.dll",
"lib/net6.0/Microsoft.Win32.SystemEvents.xml",
"lib/net7.0/Microsoft.Win32.SystemEvents.dll",
"lib/net7.0/Microsoft.Win32.SystemEvents.xml",
"lib/net8.0/Microsoft.Win32.SystemEvents.dll",
"lib/net8.0/Microsoft.Win32.SystemEvents.xml",
"lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll",
"lib/netstandard2.0/Microsoft.Win32.SystemEvents.xml",
"microsoft.win32.systemevents.8.0.0.nupkg.sha512",
"microsoft.win32.systemevents.nuspec",
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll",
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.xml",
"runtimes/win/lib/net7.0/Microsoft.Win32.SystemEvents.dll",
"runtimes/win/lib/net7.0/Microsoft.Win32.SystemEvents.xml",
"runtimes/win/lib/net8.0/Microsoft.Win32.SystemEvents.dll",
"runtimes/win/lib/net8.0/Microsoft.Win32.SystemEvents.xml",
"useSharedDesignerContext.txt"
]
},
"System.ComponentModel.Annotations/5.0.0": {
"sha512": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==",
"type": "package",
"path": "system.componentmodel.annotations/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/MonoAndroid10/_._",
"lib/MonoTouch10/_._",
"lib/net45/_._",
"lib/net461/System.ComponentModel.Annotations.dll",
"lib/netcore50/System.ComponentModel.Annotations.dll",
"lib/netstandard1.4/System.ComponentModel.Annotations.dll",
"lib/netstandard2.0/System.ComponentModel.Annotations.dll",
"lib/netstandard2.1/System.ComponentModel.Annotations.dll",
"lib/netstandard2.1/System.ComponentModel.Annotations.xml",
"lib/portable-net45+win8/_._",
"lib/win8/_._",
"lib/xamarinios10/_._",
"lib/xamarinmac20/_._",
"lib/xamarintvos10/_._",
"lib/xamarinwatchos10/_._",
"ref/MonoAndroid10/_._",
"ref/MonoTouch10/_._",
"ref/net45/_._",
"ref/net461/System.ComponentModel.Annotations.dll",
"ref/net461/System.ComponentModel.Annotations.xml",
"ref/netcore50/System.ComponentModel.Annotations.dll",
"ref/netcore50/System.ComponentModel.Annotations.xml",
"ref/netcore50/de/System.ComponentModel.Annotations.xml",
"ref/netcore50/es/System.ComponentModel.Annotations.xml",
"ref/netcore50/fr/System.ComponentModel.Annotations.xml",
"ref/netcore50/it/System.ComponentModel.Annotations.xml",
"ref/netcore50/ja/System.ComponentModel.Annotations.xml",
"ref/netcore50/ko/System.ComponentModel.Annotations.xml",
"ref/netcore50/ru/System.ComponentModel.Annotations.xml",
"ref/netcore50/zh-hans/System.ComponentModel.Annotations.xml",
"ref/netcore50/zh-hant/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/System.ComponentModel.Annotations.dll",
"ref/netstandard1.1/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/de/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/es/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/fr/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/it/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/ja/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/ko/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/ru/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/zh-hans/System.ComponentModel.Annotations.xml",
"ref/netstandard1.1/zh-hant/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/System.ComponentModel.Annotations.dll",
"ref/netstandard1.3/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/de/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/es/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/fr/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/it/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/ja/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/ko/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/ru/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/zh-hans/System.ComponentModel.Annotations.xml",
"ref/netstandard1.3/zh-hant/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/System.ComponentModel.Annotations.dll",
"ref/netstandard1.4/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/de/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/es/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/fr/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/it/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/ja/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/ko/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/ru/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/zh-hans/System.ComponentModel.Annotations.xml",
"ref/netstandard1.4/zh-hant/System.ComponentModel.Annotations.xml",
"ref/netstandard2.0/System.ComponentModel.Annotations.dll",
"ref/netstandard2.0/System.ComponentModel.Annotations.xml",
"ref/netstandard2.1/System.ComponentModel.Annotations.dll",
"ref/netstandard2.1/System.ComponentModel.Annotations.xml",
"ref/portable-net45+win8/_._",
"ref/win8/_._",
"ref/xamarinios10/_._",
"ref/xamarinmac20/_._",
"ref/xamarintvos10/_._",
"ref/xamarinwatchos10/_._",
"system.componentmodel.annotations.5.0.0.nupkg.sha512",
"system.componentmodel.annotations.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Drawing.Common/8.0.4": {
"sha512": "3G4xpa8mUYGzEF0HlswlBArAFywHJIzsZoB5hU4yMlnYHaabj/lg019BwbyyYBxj0aoM7Cz+jdlgUemeno9LOQ==",
"type": "package",
"path": "system.drawing.common/8.0.4",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.Drawing.Common.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.Drawing.Common.targets",
"lib/MonoAndroid10/_._",
"lib/MonoTouch10/_._",
"lib/net462/System.Drawing.Common.dll",
"lib/net462/System.Drawing.Common.pdb",
"lib/net462/System.Drawing.Common.xml",
"lib/net6.0/System.Drawing.Common.dll",
"lib/net6.0/System.Drawing.Common.pdb",
"lib/net6.0/System.Drawing.Common.xml",
"lib/net7.0/System.Drawing.Common.dll",
"lib/net7.0/System.Drawing.Common.pdb",
"lib/net7.0/System.Drawing.Common.xml",
"lib/net8.0/System.Drawing.Common.dll",
"lib/net8.0/System.Drawing.Common.pdb",
"lib/net8.0/System.Drawing.Common.xml",
"lib/netstandard2.0/System.Drawing.Common.dll",
"lib/netstandard2.0/System.Drawing.Common.pdb",
"lib/netstandard2.0/System.Drawing.Common.xml",
"lib/xamarinios10/_._",
"lib/xamarinmac20/_._",
"lib/xamarintvos10/_._",
"lib/xamarinwatchos10/_._",
"system.drawing.common.8.0.4.nupkg.sha512",
"system.drawing.common.nuspec",
"useSharedDesignerContext.txt"
]
},
"System.IO.Pipelines/8.0.0": {
"sha512": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
"type": "package",
@ -2105,45 +2597,47 @@
"useSharedDesignerContext.txt"
]
},
"System.Text.Encodings.Web/8.0.0": {
"sha512": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
"System.Security.Cryptography.Pkcs/8.0.1": {
"sha512": "CoCRHFym33aUSf/NtWSVSZa99dkd0Hm7OCZUxORBjRB16LNhIEOf8THPqzIYlvKM0nNDAPTRBa1FxEECrgaxxA==",
"type": "package",
"path": "system.text.encodings.web/8.0.0",
"path": "system.security.cryptography.pkcs/8.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.Text.Encodings.Web.targets",
"buildTransitive/net461/System.Security.Cryptography.Pkcs.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets",
"lib/net462/System.Text.Encodings.Web.dll",
"lib/net462/System.Text.Encodings.Web.xml",
"lib/net6.0/System.Text.Encodings.Web.dll",
"lib/net6.0/System.Text.Encodings.Web.xml",
"lib/net7.0/System.Text.Encodings.Web.dll",
"lib/net7.0/System.Text.Encodings.Web.xml",
"lib/net8.0/System.Text.Encodings.Web.dll",
"lib/net8.0/System.Text.Encodings.Web.xml",
"lib/netstandard2.0/System.Text.Encodings.Web.dll",
"lib/netstandard2.0/System.Text.Encodings.Web.xml",
"runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll",
"runtimes/browser/lib/net6.0/System.Text.Encodings.Web.xml",
"runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll",
"runtimes/browser/lib/net7.0/System.Text.Encodings.Web.xml",
"runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll",
"runtimes/browser/lib/net8.0/System.Text.Encodings.Web.xml",
"system.text.encodings.web.8.0.0.nupkg.sha512",
"system.text.encodings.web.nuspec",
"buildTransitive/netcoreapp2.0/System.Security.Cryptography.Pkcs.targets",
"lib/net462/System.Security.Cryptography.Pkcs.dll",
"lib/net462/System.Security.Cryptography.Pkcs.xml",
"lib/net6.0/System.Security.Cryptography.Pkcs.dll",
"lib/net6.0/System.Security.Cryptography.Pkcs.xml",
"lib/net7.0/System.Security.Cryptography.Pkcs.dll",
"lib/net7.0/System.Security.Cryptography.Pkcs.xml",
"lib/net8.0/System.Security.Cryptography.Pkcs.dll",
"lib/net8.0/System.Security.Cryptography.Pkcs.xml",
"lib/netstandard2.0/System.Security.Cryptography.Pkcs.dll",
"lib/netstandard2.0/System.Security.Cryptography.Pkcs.xml",
"lib/netstandard2.1/System.Security.Cryptography.Pkcs.dll",
"lib/netstandard2.1/System.Security.Cryptography.Pkcs.xml",
"runtimes/win/lib/net6.0/System.Security.Cryptography.Pkcs.dll",
"runtimes/win/lib/net6.0/System.Security.Cryptography.Pkcs.xml",
"runtimes/win/lib/net7.0/System.Security.Cryptography.Pkcs.dll",
"runtimes/win/lib/net7.0/System.Security.Cryptography.Pkcs.xml",
"runtimes/win/lib/net8.0/System.Security.Cryptography.Pkcs.dll",
"runtimes/win/lib/net8.0/System.Security.Cryptography.Pkcs.xml",
"system.security.cryptography.pkcs.8.0.1.nupkg.sha512",
"system.security.cryptography.pkcs.nuspec",
"useSharedDesignerContext.txt"
]
},
"System.Text.Json/8.0.0": {
"sha512": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==",
"System.Text.Encoding.CodePages/8.0.0": {
"sha512": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==",
"type": "package",
"path": "system.text.json/8.0.0",
"path": "system.text.encoding.codepages/8.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
@ -2151,65 +2645,34 @@
"LICENSE.TXT",
"PACKAGE.md",
"THIRD-PARTY-NOTICES.TXT",
"analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll",
"analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll",
"analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll",
"analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll",
"analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll",
"buildTransitive/net461/System.Text.Json.targets",
"buildTransitive/net462/System.Text.Json.targets",
"buildTransitive/net6.0/System.Text.Json.targets",
"buildTransitive/netcoreapp2.0/System.Text.Json.targets",
"buildTransitive/netstandard2.0/System.Text.Json.targets",
"lib/net462/System.Text.Json.dll",
"lib/net462/System.Text.Json.xml",
"lib/net6.0/System.Text.Json.dll",
"lib/net6.0/System.Text.Json.xml",
"lib/net7.0/System.Text.Json.dll",
"lib/net7.0/System.Text.Json.xml",
"lib/net8.0/System.Text.Json.dll",
"lib/net8.0/System.Text.Json.xml",
"lib/netstandard2.0/System.Text.Json.dll",
"lib/netstandard2.0/System.Text.Json.xml",
"system.text.json.8.0.0.nupkg.sha512",
"system.text.json.nuspec",
"buildTransitive/net461/System.Text.Encoding.CodePages.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.Text.Encoding.CodePages.targets",
"lib/MonoAndroid10/_._",
"lib/MonoTouch10/_._",
"lib/net462/System.Text.Encoding.CodePages.dll",
"lib/net462/System.Text.Encoding.CodePages.xml",
"lib/net6.0/System.Text.Encoding.CodePages.dll",
"lib/net6.0/System.Text.Encoding.CodePages.xml",
"lib/net7.0/System.Text.Encoding.CodePages.dll",
"lib/net7.0/System.Text.Encoding.CodePages.xml",
"lib/net8.0/System.Text.Encoding.CodePages.dll",
"lib/net8.0/System.Text.Encoding.CodePages.xml",
"lib/netstandard2.0/System.Text.Encoding.CodePages.dll",
"lib/netstandard2.0/System.Text.Encoding.CodePages.xml",
"lib/xamarinios10/_._",
"lib/xamarinmac20/_._",
"lib/xamarintvos10/_._",
"lib/xamarinwatchos10/_._",
"runtimes/win/lib/net6.0/System.Text.Encoding.CodePages.dll",
"runtimes/win/lib/net6.0/System.Text.Encoding.CodePages.xml",
"runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.dll",
"runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.xml",
"runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll",
"runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.xml",
"system.text.encoding.codepages.8.0.0.nupkg.sha512",
"system.text.encoding.codepages.nuspec",
"useSharedDesignerContext.txt"
]
},
@ -2217,6 +2680,11 @@
"type": "project",
"path": "../Domain/Domain.csproj",
"msbuildProject": "../Domain/Domain.csproj"
},
"Transversal/1.0.0": {
"type": "project",
"path": "../Transversal/Transversal.csproj",
"msbuildProject": "../Transversal/Transversal.csproj"
}
},
"projectFileDependencyGroups": {
@ -2228,7 +2696,8 @@
"Microsoft.AspNetCore.Components.WebAssembly >= 8.0.6",
"Microsoft.AspNetCore.Components.WebAssembly.DevServer >= 8.0.6",
"Microsoft.NET.ILLink.Tasks >= 8.0.14",
"Microsoft.NET.Sdk.WebAssembly.Pack >= 9.0.3"
"Microsoft.NET.Sdk.WebAssembly.Pack >= 9.0.3",
"Transversal >= 1.0.0"
]
},
"packageFolders": {
@ -2265,6 +2734,9 @@
"projectReferences": {
"C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Domain\\Domain.csproj": {
"projectPath": "C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Domain\\Domain.csproj"
},
"C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Transversal\\Transversal.csproj": {
"projectPath": "C:\\Users\\maski\\source\\repos\\SaludLAB\\phronCare\\Transversal\\Transversal.csproj"
}
}
}

View File

@ -23,6 +23,7 @@
<ItemGroup>
<ProjectReference Include="..\Domain\Domain.csproj" />
<ProjectReference Include="..\Transversal\Transversal.csproj" />
</ItemGroup>
<ItemGroup>