From 9940189a938fa942e329cc70cca4d0a1dc45cc0a Mon Sep 17 00:00:00 2001 From: Leandro Hernan Rojas Date: Sat, 26 Apr 2025 18:15:25 -0300 Subject: [PATCH] Upgrade de DbContext y Patch Customers --- Domain/obj/Domain.csproj.nuget.g.props | 2 +- Models/Models/PhOhArcadocumentType.cs | 20 ++ Models/Models/PhSBusinessUnit.cs | 2 - Models/Models/PhSCustomer.cs | 2 - Models/Models/PhSFormSeries.cs | 47 +++ Models/Models/PhSFormSeriesNextNumber.cs | 24 ++ Models/Models/PhSFormType.cs | 18 ++ Models/Models/PhSProduct.cs | 2 - Models/Models/PhSQuoteDetail.cs | 53 +++- Models/Models/PhSQuoteHeader.cs | 78 ++++- Models/Models/PhSQuoteRole.cs | 37 +++ .../Models/PhronCareOperationsHubContext.cs | 283 ++++++++++++++++-- Models/Repositories/PhSCustomerRepository.cs | 1 - Models/obj/Models.csproj.nuget.g.props | 2 +- 14 files changed, 531 insertions(+), 40 deletions(-) create mode 100644 Models/Models/PhOhArcadocumentType.cs create mode 100644 Models/Models/PhSFormSeries.cs create mode 100644 Models/Models/PhSFormSeriesNextNumber.cs create mode 100644 Models/Models/PhSFormType.cs create mode 100644 Models/Models/PhSQuoteRole.cs diff --git a/Domain/obj/Domain.csproj.nuget.g.props b/Domain/obj/Domain.csproj.nuget.g.props index 3efed38..8b4eb7e 100644 --- a/Domain/obj/Domain.csproj.nuget.g.props +++ b/Domain/obj/Domain.csproj.nuget.g.props @@ -7,7 +7,7 @@ $(UserProfile)\.nuget\packages\ C:\Users\maski\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.13.1 + 6.13.2 diff --git a/Models/Models/PhOhArcadocumentType.cs b/Models/Models/PhOhArcadocumentType.cs new file mode 100644 index 0000000..b5ad844 --- /dev/null +++ b/Models/Models/PhOhArcadocumentType.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; + +namespace Models.Models; + +/// +/// Catálogo oficial de tipos de comprobantes AFIP. +/// +public partial class PhOhArcadocumentType +{ + public int Id { get; set; } + + public string Code { get; set; } = null!; + + public string Description { get; set; } = null!; + + public string? Letter { get; set; } + + public bool Isactive { get; set; } +} diff --git a/Models/Models/PhSBusinessUnit.cs b/Models/Models/PhSBusinessUnit.cs index 64f5e0f..bd75a63 100644 --- a/Models/Models/PhSBusinessUnit.cs +++ b/Models/Models/PhSBusinessUnit.cs @@ -14,6 +14,4 @@ public partial class PhSBusinessUnit public string? Manager { get; set; } public virtual ICollection PhSProducts { get; set; } = new List(); - - public virtual ICollection PhSQuoteHeaders { get; set; } = new List(); } diff --git a/Models/Models/PhSCustomer.cs b/Models/Models/PhSCustomer.cs index 4dbea6a..2ed7d8e 100644 --- a/Models/Models/PhSCustomer.cs +++ b/Models/Models/PhSCustomer.cs @@ -31,7 +31,5 @@ public partial class PhSCustomer public virtual ICollection PhSPatients { get; set; } = new List(); - public virtual ICollection PhSQuoteHeaders { get; set; } = new List(); - public virtual PhOhTaxCondition? TaxCondition { get; set; } } diff --git a/Models/Models/PhSFormSeries.cs b/Models/Models/PhSFormSeries.cs new file mode 100644 index 0000000..6283025 --- /dev/null +++ b/Models/Models/PhSFormSeries.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; + +namespace Models.Models; + +/// +/// FormSeries: talonarios/series por tipo de formulario, letra y punto de venta. +/// +public partial class PhSFormSeries +{ + public int Id { get; set; } + + /// + /// FK a tipo de formulario (PhS_FormTypes). + /// + public int FormtypeId { get; set; } + + /// + /// Punto de venta asignado. + /// + public short Pointofsale { get; set; } + + /// + /// Letra de serie (A,B,C...). + /// + public string Letter { get; set; } = null!; + + /// + /// Marca esta serie como predeterminada. + /// + public bool Isdefault { get; set; } + + /// + /// Indica si está habilitada. + /// + public bool Isactive { get; set; } + + public DateTime Createdat { get; set; } + + public DateTime? Modifiedat { get; set; } + + public string NumberingSource { get; set; } = null!; + + public virtual PhSFormType Formtype { get; set; } = null!; + + public virtual PhSFormSeriesNextNumber? PhSFormSeriesNextNumber { get; set; } +} diff --git a/Models/Models/PhSFormSeriesNextNumber.cs b/Models/Models/PhSFormSeriesNextNumber.cs new file mode 100644 index 0000000..c7d104d --- /dev/null +++ b/Models/Models/PhSFormSeriesNextNumber.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; + +namespace Models.Models; + +/// +/// Mantiene el siguiente número correlativo para cada FormSeries. +/// +public partial class PhSFormSeriesNextNumber +{ + public int Id { get; set; } + + /// + /// FK a PhS_FormSeries. + /// + public int FormseriesId { get; set; } + + /// + /// Próximo número correlativo. + /// + public int Nextnumber { get; set; } + + public virtual PhSFormSeries Formseries { get; set; } = null!; +} diff --git a/Models/Models/PhSFormType.cs b/Models/Models/PhSFormType.cs new file mode 100644 index 0000000..19408b6 --- /dev/null +++ b/Models/Models/PhSFormType.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace Models.Models; + +/// +/// Tipos genéricos de formularios del sistema (presupuesto, factura, recibo, etc.) +/// +public partial class PhSFormType +{ + public int Id { get; set; } + + public string Code { get; set; } = null!; + + public string Name { get; set; } = null!; + + public virtual ICollection PhSFormSeries { get; set; } = new List(); +} diff --git a/Models/Models/PhSProduct.cs b/Models/Models/PhSProduct.cs index 68dd941..55c07ff 100644 --- a/Models/Models/PhSProduct.cs +++ b/Models/Models/PhSProduct.cs @@ -26,6 +26,4 @@ public partial class PhSProduct public virtual PhSBusinessUnit? Businessunits { get; set; } public virtual PhSProductCategory? Category { get; set; } - - public virtual ICollection PhSQuoteDetails { get; set; } = new List(); } diff --git a/Models/Models/PhSQuoteDetail.cs b/Models/Models/PhSQuoteDetail.cs index 5a5acb1..43d2f3d 100644 --- a/Models/Models/PhSQuoteDetail.cs +++ b/Models/Models/PhSQuoteDetail.cs @@ -3,15 +3,60 @@ using System.Collections.Generic; namespace Models.Models; +/// +/// Tabla de detalles de presupuestos +/// public partial class PhSQuoteDetail { + /// + /// ID interno + /// public int Id { get; set; } - public int? QuoteheadersId { get; set; } + /// + /// FK a encabezado de presupuesto + /// + public int QuoteheaderId { get; set; } - public int? ProductsId { get; set; } + /// + /// ID del producto original + /// + public int ProductId { get; set; } - public virtual PhSProduct? Products { get; set; } + /// + /// Descripción modificable del producto (puede diferir del original) + /// + public string? ProductDescription { get; set; } - public virtual PhSQuoteHeader? Quoteheaders { get; set; } + /// + /// Cantidad + /// + public int Quantity { get; set; } + + /// + /// Precio unitario original + /// + public decimal Unitprice { get; set; } + + /// + /// ¿Aprobado? (0=No, 1=Si) + /// + public bool Approved { get; set; } + + /// + /// Importe aprobado final + /// + public decimal? Approvedamount { get; set; } + + /// + /// Fecha de creación del registro + /// + public DateTime Createdat { get; set; } + + /// + /// Fecha de última modificación + /// + public DateTime? Modifiedat { get; set; } + + public virtual PhSQuoteHeader Quoteheader { get; set; } = null!; } diff --git a/Models/Models/PhSQuoteHeader.cs b/Models/Models/PhSQuoteHeader.cs index 0f26cbb..1676202 100644 --- a/Models/Models/PhSQuoteHeader.cs +++ b/Models/Models/PhSQuoteHeader.cs @@ -3,19 +3,87 @@ using System.Collections.Generic; namespace Models.Models; +/// +/// Tabla de cabeceras de presupuestos +/// public partial class PhSQuoteHeader { + /// + /// ID interno + /// public int Id { get; set; } - public string? TicketId { get; set; } + /// + /// Relación con Tickets + /// + public Guid TicketId { get; set; } - public int? BusinessunitsId { get; set; } + /// + /// Cliente asociado + /// + public int CustomerId { get; set; } - public int? CustomersId { get; set; } + /// + /// Unidad de negocio + /// + public int BusinessunitId { get; set; } - public virtual PhSBusinessUnit? Businessunits { get; set; } + /// + /// Estado: E (Emitido), A (Aprobado), AC (Aprobado para cirugia), etc. + /// + public string Status { get; set; } = null!; - public virtual PhSCustomer? Customers { get; set; } + /// + /// Fecha de emisión + /// + public DateTime Issuedate { get; set; } + + /// + /// Fecha de aprobación + /// + public DateOnly? Approvaldate { get; set; } + + /// + /// Fecha tentativa (de cirugía por ej.) + /// + public DateTime? Estimateddate { get; set; } + + /// + /// Importe estimado total + /// + public decimal? Estimatedamount { get; set; } + + /// + /// Importe aprobado + /// + public decimal? Approvedamount { get; set; } + + /// + /// Número visible del presupuesto + /// + public string Quotenumber { get; set; } = null!; + + /// + /// Cantidad de impresiones + /// + public int Printcount { get; set; } + + /// + /// Observaciones internas + /// + public string? Observations { get; set; } + + /// + /// Fecha de creación + /// + public DateTime Createdat { get; set; } + + /// + /// Fecha de modificación + /// + public DateTime? Modifiedat { get; set; } public virtual ICollection PhSQuoteDetails { get; set; } = new List(); + + public virtual ICollection PhSQuoteRoles { get; set; } = new List(); } diff --git a/Models/Models/PhSQuoteRole.cs b/Models/Models/PhSQuoteRole.cs new file mode 100644 index 0000000..f5acf91 --- /dev/null +++ b/Models/Models/PhSQuoteRole.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; + +namespace Models.Models; + +/// +/// Tabla de roles asociados a presupuestos +/// +public partial class PhSQuoteRole +{ + /// + /// ID interno + /// + public int Id { get; set; } + + /// + /// FK a encabezado de presupuesto (PhS_QuoteHeaders) + /// + public int QuoteheaderId { get; set; } + + /// + /// Tipo de entidad asociada (Ej: PhS_Professionals, PhS_Institutions, PhS_Patients) + /// + public string Entitytype { get; set; } = null!; + + /// + /// ID de la entidad asociada + /// + public int EntityId { get; set; } + + /// + /// Rol que cumple la entidad en el presupuesto (Ej: Medico, Hospital, Paciente) + /// + public string Role { get; set; } = null!; + + public virtual PhSQuoteHeader Quoteheader { get; set; } = null!; +} diff --git a/Models/Models/PhronCareOperationsHubContext.cs b/Models/Models/PhronCareOperationsHubContext.cs index 130f8bc..7ab03db 100644 --- a/Models/Models/PhronCareOperationsHubContext.cs +++ b/Models/Models/PhronCareOperationsHubContext.cs @@ -15,6 +15,8 @@ public partial class PhronCareOperationsHubContext : DbContext { } + public virtual DbSet PhOhArcadocumentTypes { get; set; } + public virtual DbSet PhOhTaxConditions { get; set; } public virtual DbSet PhOhTickets { get; set; } @@ -31,6 +33,12 @@ public partial class PhronCareOperationsHubContext : DbContext public virtual DbSet PhSDocumentTypes { get; set; } + public virtual DbSet PhSFormSeries { get; set; } + + public virtual DbSet PhSFormSeriesNextNumbers { get; set; } + + public virtual DbSet PhSFormTypes { get; set; } + public virtual DbSet PhSInstitutions { get; set; } public virtual DbSet PhSPatients { get; set; } @@ -47,6 +55,8 @@ public partial class PhronCareOperationsHubContext : DbContext public virtual DbSet PhSQuoteHeaders { get; set; } + public virtual DbSet PhSQuoteRoles { get; set; } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) #region VERSION DOCKER { @@ -56,12 +66,39 @@ public partial class PhronCareOperationsHubContext : DbContext } } #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"); + //=> 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) { modelBuilder.UseCollation("Modern_Spanish_CI_AS"); + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__PhOH_ARC__3213E83FF8940395"); + + entity.ToTable("PhOH_ARCADocumentTypes", tb => tb.HasComment("Catálogo oficial de tipos de comprobantes AFIP.")); + + entity.Property(e => e.Id) + .ValueGeneratedNever() + .HasColumnName("id"); + entity.Property(e => e.Code) + .HasMaxLength(3) + .IsUnicode(false) + .IsFixedLength() + .HasColumnName("code"); + entity.Property(e => e.Description) + .HasMaxLength(255) + .HasColumnName("description"); + entity.Property(e => e.Isactive) + .HasDefaultValue(true) + .HasColumnName("isactive"); + entity.Property(e => e.Letter) + .HasMaxLength(1) + .IsUnicode(false) + .IsFixedLength() + .HasColumnName("letter"); + }); + modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK__PhOH_Tax__3213E83F26F7EAEF"); @@ -267,6 +304,91 @@ public partial class PhronCareOperationsHubContext : DbContext .HasColumnName("name"); }); + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__PhS_Form__3213E83F7D86A419"); + + entity.ToTable("PhS_FormSeries", tb => tb.HasComment("FormSeries: talonarios/series por tipo de formulario, letra y punto de venta.")); + + entity.HasIndex(e => e.FormtypeId, "IX_PhS_FormSeries_FormType"); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.Createdat) + .HasDefaultValueSql("(getdate())") + .HasColumnType("datetime") + .HasColumnName("createdat"); + entity.Property(e => e.FormtypeId) + .HasComment("FK a tipo de formulario (PhS_FormTypes).") + .HasColumnName("formtype_id"); + entity.Property(e => e.Isactive) + .HasDefaultValue(true) + .HasComment("Indica si está habilitada.") + .HasColumnName("isactive"); + entity.Property(e => e.Isdefault) + .HasComment("Marca esta serie como predeterminada.") + .HasColumnName("isdefault"); + entity.Property(e => e.Letter) + .HasMaxLength(1) + .IsUnicode(false) + .IsFixedLength() + .HasComment("Letra de serie (A,B,C...).") + .HasColumnName("letter"); + entity.Property(e => e.Modifiedat) + .HasColumnType("datetime") + .HasColumnName("modifiedat"); + entity.Property(e => e.NumberingSource) + .HasMaxLength(20) + .IsUnicode(false) + .HasDefaultValue("INTERNAL") + .HasColumnName("numbering_source"); + entity.Property(e => e.Pointofsale) + .HasComment("Punto de venta asignado.") + .HasColumnName("pointofsale"); + + entity.HasOne(d => d.Formtype).WithMany(p => p.PhSFormSeries) + .HasForeignKey(d => d.FormtypeId) + .OnDelete(DeleteBehavior.ClientSetNull) + .HasConstraintName("FK_PhS_FormSeries_FormTypes"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__PhS_Form__3213E83F60B7AAE4"); + + entity.ToTable("PhS_FormSeriesNextNumber", tb => tb.HasComment("Mantiene el siguiente número correlativo para cada FormSeries.")); + + entity.HasIndex(e => e.FormseriesId, "IX_PhS_NextNumber_FormSeriesId").IsUnique(); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.FormseriesId) + .HasComment("FK a PhS_FormSeries.") + .HasColumnName("formseries_id"); + entity.Property(e => e.Nextnumber) + .HasComment("Próximo número correlativo.") + .HasColumnName("nextnumber"); + + entity.HasOne(d => d.Formseries).WithOne(p => p.PhSFormSeriesNextNumber) + .HasForeignKey(d => d.FormseriesId) + .OnDelete(DeleteBehavior.ClientSetNull) + .HasConstraintName("FK_PhS_NextNumber_FormSeries"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__PhS_Form__3213E83FF7278F22"); + + entity.ToTable("PhS_FormTypes", tb => tb.HasComment("Tipos genéricos de formularios del sistema (presupuesto, factura, recibo, etc.)")); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.Code) + .HasMaxLength(20) + .IsUnicode(false) + .HasColumnName("code"); + entity.Property(e => e.Name) + .HasMaxLength(100) + .HasColumnName("name"); + }); + modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK__PhS_Inst__3213E83F7645655B"); @@ -488,39 +610,156 @@ public partial class PhronCareOperationsHubContext : DbContext modelBuilder.Entity(entity => { - entity.ToTable("PhS_QuoteDetails"); + entity.HasKey(e => e.Id).HasName("PK__PhS_Quot__3213E83F94207114"); - entity.Property(e => e.Id).HasColumnName("id"); - entity.Property(e => e.ProductsId).HasColumnName("products_id"); - entity.Property(e => e.QuoteheadersId).HasColumnName("quoteheaders_id"); + entity.ToTable("PhS_QuoteDetails", tb => tb.HasComment("Tabla de detalles de presupuestos")); - entity.HasOne(d => d.Products).WithMany(p => p.PhSQuoteDetails) - .HasForeignKey(d => d.ProductsId) - .HasConstraintName("FK_PhS_QuoteDetails_PhS_Products"); + entity.Property(e => e.Id) + .HasComment("ID interno") + .HasColumnName("id"); + entity.Property(e => e.Approved) + .HasComment("¿Aprobado? (0=No, 1=Si)") + .HasColumnName("approved"); + entity.Property(e => e.Approvedamount) + .HasComment("Importe aprobado final") + .HasColumnType("decimal(18, 2)") + .HasColumnName("approvedamount"); + entity.Property(e => e.Createdat) + .HasDefaultValueSql("(getdate())") + .HasComment("Fecha de creación del registro") + .HasColumnType("datetime") + .HasColumnName("createdat"); + entity.Property(e => e.Modifiedat) + .HasComment("Fecha de última modificación") + .HasColumnType("datetime") + .HasColumnName("modifiedat"); + entity.Property(e => e.ProductDescription) + .HasComment("Descripción modificable del producto (puede diferir del original)") + .HasColumnName("product_description"); + entity.Property(e => e.ProductId) + .HasComment("ID del producto original") + .HasColumnName("product_id"); + entity.Property(e => e.Quantity) + .HasDefaultValue(1) + .HasComment("Cantidad") + .HasColumnName("quantity"); + entity.Property(e => e.QuoteheaderId) + .HasComment("FK a encabezado de presupuesto") + .HasColumnName("quoteheader_id"); + entity.Property(e => e.Unitprice) + .HasComment("Precio unitario original") + .HasColumnType("decimal(18, 2)") + .HasColumnName("unitprice"); - entity.HasOne(d => d.Quoteheaders).WithMany(p => p.PhSQuoteDetails) - .HasForeignKey(d => d.QuoteheadersId) - .HasConstraintName("FK_PhS_QuoteDetails_PhS_QuoteHeaders"); + entity.HasOne(d => d.Quoteheader).WithMany(p => p.PhSQuoteDetails) + .HasForeignKey(d => d.QuoteheaderId) + .OnDelete(DeleteBehavior.ClientSetNull) + .HasConstraintName("FK_QuoteDetails_Header"); }); modelBuilder.Entity(entity => { - entity.ToTable("PhS_QuoteHeaders"); + entity.HasKey(e => e.Id).HasName("PK__PhS_Quot__3213E83FA0B43134"); - entity.Property(e => e.Id).HasColumnName("id"); - entity.Property(e => e.BusinessunitsId).HasColumnName("businessunits_id"); - entity.Property(e => e.CustomersId).HasColumnName("customers_id"); + entity.ToTable("PhS_QuoteHeaders", tb => tb.HasComment("Tabla de cabeceras de presupuestos")); + + entity.Property(e => e.Id) + .HasComment("ID interno") + .HasColumnName("id"); + entity.Property(e => e.Approvaldate) + .HasComment("Fecha de aprobación") + .HasColumnName("approvaldate"); + entity.Property(e => e.Approvedamount) + .HasComment("Importe aprobado") + .HasColumnType("decimal(18, 2)") + .HasColumnName("approvedamount"); + entity.Property(e => e.BusinessunitId) + .HasComment("Unidad de negocio") + .HasColumnName("businessunit_id"); + entity.Property(e => e.Createdat) + .HasDefaultValueSql("(getdate())") + .HasComment("Fecha de creación") + .HasColumnType("datetime") + .HasColumnName("createdat"); + entity.Property(e => e.CustomerId) + .HasComment("Cliente asociado") + .HasColumnName("customer_id"); + entity.Property(e => e.Estimatedamount) + .HasComment("Importe estimado total") + .HasColumnType("decimal(18, 2)") + .HasColumnName("estimatedamount"); + entity.Property(e => e.Estimateddate) + .HasComment("Fecha tentativa (de cirugía por ej.)") + .HasColumnType("datetime") + .HasColumnName("estimateddate"); + entity.Property(e => e.Issuedate) + .HasDefaultValueSql("(getdate())") + .HasComment("Fecha de emisión") + .HasColumnType("datetime") + .HasColumnName("issuedate"); + entity.Property(e => e.Modifiedat) + .HasComment("Fecha de modificación") + .HasColumnType("datetime") + .HasColumnName("modifiedat"); + entity.Property(e => e.Observations) + .HasComment("Observaciones internas") + .HasColumnName("observations"); + entity.Property(e => e.Printcount) + .HasComment("Cantidad de impresiones") + .HasColumnName("printcount"); + entity.Property(e => e.Quotenumber) + .HasMaxLength(20) + .IsUnicode(false) + .HasComment("Número visible del presupuesto") + .HasColumnName("quotenumber"); + entity.Property(e => e.Status) + .HasMaxLength(2) + .IsUnicode(false) + .HasDefaultValue("E") + .IsFixedLength() + .HasComment("Estado: E (Emitido), A (Aprobado), AC (Aprobado para cirugia), etc.") + .HasColumnName("status"); entity.Property(e => e.TicketId) - .HasMaxLength(50) + .HasComment("Relación con Tickets") .HasColumnName("ticket_id"); + }); - entity.HasOne(d => d.Businessunits).WithMany(p => p.PhSQuoteHeaders) - .HasForeignKey(d => d.BusinessunitsId) - .HasConstraintName("FK_PhS_QuoteHeaders_PhS_BusinessUnits"); + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__PhS_Quot__3213E83F7BBCA6FF"); - entity.HasOne(d => d.Customers).WithMany(p => p.PhSQuoteHeaders) - .HasForeignKey(d => d.CustomersId) - .HasConstraintName("FK_PhS_QuoteHeaders_PhS_Customers"); + entity.ToTable("PhS_QuoteRoles", tb => tb.HasComment("Tabla de roles asociados a presupuestos")); + + entity.HasIndex(e => new { e.Entitytype, e.EntityId }, "IX_QuoteRoles_Entity"); + + entity.HasIndex(e => e.QuoteheaderId, "IX_QuoteRoles_HeaderId"); + + entity.HasIndex(e => e.Role, "IX_QuoteRoles_Role"); + + entity.Property(e => e.Id) + .HasComment("ID interno") + .HasColumnName("id"); + entity.Property(e => e.EntityId) + .HasComment("ID de la entidad asociada") + .HasColumnName("entity_id"); + entity.Property(e => e.Entitytype) + .HasMaxLength(50) + .IsUnicode(false) + .HasComment("Tipo de entidad asociada (Ej: PhS_Professionals, PhS_Institutions, PhS_Patients)") + .HasColumnName("entitytype"); + entity.Property(e => e.QuoteheaderId) + .HasComment("FK a encabezado de presupuesto (PhS_QuoteHeaders)") + .HasColumnName("quoteheader_id"); + entity.Property(e => e.Role) + .HasMaxLength(50) + .IsUnicode(false) + .HasComment("Rol que cumple la entidad en el presupuesto (Ej: Medico, Hospital, Paciente)") + .HasColumnName("role"); + + entity.HasOne(d => d.Quoteheader).WithMany(p => p.PhSQuoteRoles) + .HasForeignKey(d => d.QuoteheaderId) + .OnDelete(DeleteBehavior.ClientSetNull) + .HasConstraintName("FK_QuoteRoles_Header"); }); OnModelCreatingPartial(modelBuilder); diff --git a/Models/Repositories/PhSCustomerRepository.cs b/Models/Repositories/PhSCustomerRepository.cs index dc6198c..0a1ba78 100644 --- a/Models/Repositories/PhSCustomerRepository.cs +++ b/Models/Repositories/PhSCustomerRepository.cs @@ -38,7 +38,6 @@ namespace Models.Repositories .Include(c => c.Accounttypes) .Include(c => c.PhSCustomerAddresses) .Include(c => c.PhSCustomerDocuments) - .Include(c => c.PhSQuoteHeaders) .FirstOrDefaultAsync(c => c.Id == id); return customer != null ? EntityMapper.MapEntity(customer) : null; diff --git a/Models/obj/Models.csproj.nuget.g.props b/Models/obj/Models.csproj.nuget.g.props index d21a6b0..57bd42c 100644 --- a/Models/obj/Models.csproj.nuget.g.props +++ b/Models/obj/Models.csproj.nuget.g.props @@ -7,7 +7,7 @@ $(UserProfile)\.nuget\packages\ C:\Users\maski\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.13.1 + 6.13.2