diff --git a/api/src/Kurs.Platform.Domain.Shared/Enums/TableNameEnum.cs b/api/src/Kurs.Platform.Domain.Shared/Enums/TableNameEnum.cs index 0caee860..db8d46b8 100644 --- a/api/src/Kurs.Platform.Domain.Shared/Enums/TableNameEnum.cs +++ b/api/src/Kurs.Platform.Domain.Shared/Enums/TableNameEnum.cs @@ -146,5 +146,7 @@ public enum TableNameEnum PartnerBank, PartnerCertificate, PartnerContact, - DynamicService + DynamicService, + Material, + MaterialSpecification, } \ No newline at end of file diff --git a/api/src/Kurs.Platform.Domain.Shared/TableNameResolver.cs b/api/src/Kurs.Platform.Domain.Shared/TableNameResolver.cs index 582e0e61..a1de312c 100644 --- a/api/src/Kurs.Platform.Domain.Shared/TableNameResolver.cs +++ b/api/src/Kurs.Platform.Domain.Shared/TableNameResolver.cs @@ -166,6 +166,8 @@ public static class TableNameResolver //Supply Chain { nameof(TableNameEnum.MaterialType), (TablePrefix.TenantByName, MenuPrefix.SupplyChain) }, { nameof(TableNameEnum.MaterialGroup), (TablePrefix.TenantByName, MenuPrefix.SupplyChain) }, + { nameof(TableNameEnum.Material), (TablePrefix.TenantByName, MenuPrefix.SupplyChain) }, + { nameof(TableNameEnum.MaterialSpecification), (TablePrefix.TenantByName, MenuPrefix.SupplyChain) }, { nameof(TableNameEnum.PaymentTerm), (TablePrefix.TenantByName, MenuPrefix.SupplyChain) }, { nameof(TableNameEnum.SupplyType), (TablePrefix.TenantByName, MenuPrefix.SupplyChain) }, { nameof(TableNameEnum.SupplyCardType), (TablePrefix.TenantByName, MenuPrefix.SupplyChain) }, diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/Administration/Uom.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/Administration/Uom.cs index f87a5725..95f0ed6a 100644 --- a/api/src/Kurs.Platform.Domain/Entities/Tenant/Administration/Uom.cs +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/Administration/Uom.cs @@ -1,4 +1,6 @@ using System; +using System.Collections; +using System.Collections.Generic; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; @@ -8,6 +10,7 @@ public class Uom : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } public Guid UomCategoryId { get; set; } + public UomCategory UomCategory { get; set; } public string Name { get; set; } public string Type { get; set; } @@ -17,6 +20,7 @@ public class Uom : FullAuditedEntity, IMultiTenant Guid? IMultiTenant.TenantId => TenantId; - public UomCategory UomCategory { get; set; } + public ICollection Materials { get; set; } + public ICollection MaterialSpecifications { get; set; } } diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/Material.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/Material.cs new file mode 100644 index 00000000..a8d6cf5b --- /dev/null +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/Material.cs @@ -0,0 +1,35 @@ +// Domain/Entities/MmMaterial.cs +using System; +using System.Collections.Generic; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Kurs.Platform.Entities; + +public class Material : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + public string Code { get; set; } + public string Name { get; set; } + public string Barcode { get; set; } + public string Description { get; set; } + public Guid? MaterialTypeId { get; set; } + public MaterialType? MaterialType { get; set; } + public Guid? MaterialGroupId { get; set; } + public MaterialGroup? MaterialGroup { get; set; } + public Guid? UomId { get; set; } + public Uom? Uom { get; set; } + public decimal CostPrice { get; set; } + public decimal SalesPrice { get; set; } + public Guid? CurrencyId { get; set; } + public Currency? Currency { get; set; } + public bool IsActive { get; set; } + public decimal TotalStock { get; set; } + public string TrackingType { get; set; } //'Quantity' | 'Lot' | 'Serial' + + // Relations + public List AlternativeUoms { get; set; } + public List Specifications { get; set; } + public List Suppliers { get; set; } + // public List StockLevels { get; set; } +} diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialGroup.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialGroup.cs index 2edff216..90b8b07f 100644 --- a/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialGroup.cs +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialGroup.cs @@ -18,4 +18,6 @@ public class MaterialGroup : FullAuditedEntity, IMultiTenant public string Description { get; set; } public bool IsActive { get; set; } + + public ICollection Materials { get; set; } } diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialSpecification.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialSpecification.cs new file mode 100644 index 00000000..ff4c5ead --- /dev/null +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialSpecification.cs @@ -0,0 +1,19 @@ +// Domain/Entities/MmMaterialSpecification.cs +using System; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Kurs.Platform.Entities; + +public class MaterialSpecification : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public Guid MaterialId { get; set; } + public Material Material { get; set; } + public string SpecificationName { get; set; } + public string SpecificationValue { get; set; } + public Guid UnitId { get; set; } + public Uom Unit { get; set; } + public bool IsRequired { get; set; } +} diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialType.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialType.cs index 32579a73..563c27a8 100644 --- a/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialType.cs +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/SupplyChain/MaterialType.cs @@ -1,4 +1,6 @@ using System; +using System.Collections; +using System.Collections.Generic; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; @@ -12,4 +14,6 @@ public class MaterialType : FullAuditedEntity, IMultiTenant public string Name { get; set; } public string Description { get; set; } public bool IsActive { get; set; } + + public ICollection Materials { get; set; } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index 348359cc..f43ade00 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -102,7 +102,7 @@ public class PlatformDbContext : public DbSet Contacts { get; set; } public DbSet Sectors { get; set; } public DbSet SkillTypes { get; set; } - + // Dynamic Services public DbSet Skills { get; set; } public DbSet SkillLevels { get; set; } @@ -198,6 +198,8 @@ public class PlatformDbContext : #region Supply Chain public DbSet MaterialTypes { get; set; } public DbSet MaterialGroups { get; set; } + public DbSet Materials { get; set; } + public DbSet MaterialSpecifications { get; set; } public DbSet PaymentTerms { get; set; } public DbSet Partners { get; set; } @@ -251,9 +253,7 @@ public class PlatformDbContext : builder.ConfigureSettings(); builder.ConfigureMailQueue(); builder.ConfigureNotification(); - - /* Configure your own tables/entities inside here */ - + //Saas builder.Entity(b => { @@ -2467,5 +2467,56 @@ public class PlatformDbContext : b.Property(x => x.PrimaryEntityType).HasMaxLength(256); b.Property(x => x.ControllerName).HasMaxLength(256); }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Material)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.Code).IsRequired().HasMaxLength(50); + b.Property(x => x.Name).IsRequired().HasMaxLength(200); + b.Property(x => x.Barcode).HasMaxLength(50); + b.Property(x => x.Description).HasMaxLength(500); + b.Property(x => x.TrackingType).HasMaxLength(50); + b.Property(x => x.CostPrice).HasPrecision(18, 2).HasDefaultValue(0); + b.Property(x => x.SalesPrice).HasPrecision(18, 2).HasDefaultValue(0); + b.Property(x => x.TotalStock).HasPrecision(18, 2).HasDefaultValue(0); + b.Property(x => x.IsActive).HasDefaultValue(true); + + b.HasOne(x => x.MaterialType) + .WithMany(x => x.Materials) + .HasForeignKey(x => x.MaterialTypeId) + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne(x => x.MaterialGroup) + .WithMany(x => x.Materials) + .HasForeignKey(x => x.MaterialGroupId) + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne(x => x.Uom) + .WithMany(x => x.Materials) + .HasForeignKey(x => x.UomId) + .OnDelete(DeleteBehavior.Restrict); + }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.MaterialSpecification)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.SpecificationName).IsRequired().HasMaxLength(100); + b.Property(x => x.SpecificationValue).IsRequired().HasMaxLength(200); + b.Property(x => x.IsRequired).HasDefaultValue(false); + + b.HasOne(x => x.Material) + .WithMany(x => x.Specifications) + .HasForeignKey(x => x.MaterialId) + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne(x => x.Unit) + .WithMany(x => x.MaterialSpecifications) + .HasForeignKey(x => x.UnitId) + .OnDelete(DeleteBehavior.Restrict); + }); } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106171552_Initial.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106192916_Initial.Designer.cs similarity index 98% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106171552_Initial.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106192916_Initial.Designer.cs index 42b51a3c..e5c5886d 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106171552_Initial.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106192916_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20251106171552_Initial")] + [Migration("20251106192916_Initial")] partial class Initial { /// @@ -5631,6 +5631,115 @@ namespace Kurs.Platform.Migrations b.ToTable("Plat_H_LogEntry", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.Material", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Barcode") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CostPrice") + .ValueGeneratedOnAdd() + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasDefaultValue(0m); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("CurrencyId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MaterialGroupId") + .HasColumnType("uniqueidentifier"); + + b.Property("MaterialTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("SalesPrice") + .ValueGeneratedOnAdd() + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasDefaultValue(0m); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TotalStock") + .ValueGeneratedOnAdd() + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasDefaultValue(0m); + + b.Property("TrackingType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("UomId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CurrencyId"); + + b.HasIndex("MaterialGroupId"); + + b.HasIndex("MaterialTypeId"); + + b.HasIndex("UomId"); + + b.ToTable("Scp_T_Material", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialGroup", b => { b.Property("Id") @@ -5699,6 +5808,75 @@ namespace Kurs.Platform.Migrations b.ToTable("Scp_T_MaterialGroup", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialSpecification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsRequired") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MaterialId") + .HasColumnType("uniqueidentifier"); + + b.Property("SpecificationName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("SpecificationValue") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UnitId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("MaterialId"); + + b.HasIndex("UnitId"); + + b.ToTable("Scp_T_MaterialSpecification", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialType", b => { b.Property("Id") @@ -6493,6 +6671,9 @@ namespace Kurs.Platform.Migrations .HasColumnType("decimal(18,2)") .HasDefaultValue(0m); + b.Property("MaterialId") + .HasColumnType("uniqueidentifier"); + b.Property("MobileNumber") .HasMaxLength(32) .HasColumnType("bigint"); @@ -6576,6 +6757,8 @@ namespace Kurs.Platform.Migrations b.HasIndex("CustomerTypeId"); + b.HasIndex("MaterialId"); + b.HasIndex("PaymentTermId"); b.HasIndex("SectorId"); @@ -9840,6 +10023,9 @@ namespace Kurs.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); + b.Property("MaterialId") + .HasColumnType("uniqueidentifier"); + b.Property("Name") .IsRequired() .HasMaxLength(64) @@ -9867,6 +10053,8 @@ namespace Kurs.Platform.Migrations b.HasKey("Id"); + b.HasIndex("MaterialId"); + b.HasIndex("UomCategoryId"); b.ToTable("Adm_T_Uom", (string)null); @@ -12894,6 +13082,36 @@ namespace Kurs.Platform.Migrations .IsRequired(); }); + modelBuilder.Entity("Kurs.Platform.Entities.Material", b => + { + b.HasOne("Kurs.Platform.Entities.Currency", "Currency") + .WithMany() + .HasForeignKey("CurrencyId"); + + b.HasOne("Kurs.Platform.Entities.MaterialGroup", "MaterialGroup") + .WithMany("Materials") + .HasForeignKey("MaterialGroupId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("Kurs.Platform.Entities.MaterialType", "MaterialType") + .WithMany("Materials") + .HasForeignKey("MaterialTypeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("Kurs.Platform.Entities.Uom", "Uom") + .WithMany("Materials") + .HasForeignKey("UomId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Currency"); + + b.Navigation("MaterialGroup"); + + b.Navigation("MaterialType"); + + b.Navigation("Uom"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialGroup", b => { b.HasOne("Kurs.Platform.Entities.MaterialGroup", "ParentGroup") @@ -12904,6 +13122,25 @@ namespace Kurs.Platform.Migrations b.Navigation("ParentGroup"); }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialSpecification", b => + { + b.HasOne("Kurs.Platform.Entities.Material", "Material") + .WithMany("Specifications") + .HasForeignKey("MaterialId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Kurs.Platform.Entities.Uom", "Unit") + .WithMany("MaterialSpecifications") + .HasForeignKey("UnitId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Material"); + + b.Navigation("Unit"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.Meal", b => { b.HasOne("Kurs.Platform.Entities.Branch", "Branch") @@ -12957,6 +13194,10 @@ namespace Kurs.Platform.Migrations .HasForeignKey("CustomerTypeId") .OnDelete(DeleteBehavior.Restrict); + b.HasOne("Kurs.Platform.Entities.Material", null) + .WithMany("Suppliers") + .HasForeignKey("MaterialId"); + b.HasOne("Kurs.Platform.Entities.PaymentTerm", "PaymentTerm") .WithMany() .HasForeignKey("PaymentTermId"); @@ -13332,6 +13573,10 @@ namespace Kurs.Platform.Migrations modelBuilder.Entity("Kurs.Platform.Entities.Uom", b => { + b.HasOne("Kurs.Platform.Entities.Material", null) + .WithMany("AlternativeUoms") + .HasForeignKey("MaterialId"); + b.HasOne("Kurs.Platform.Entities.UomCategory", "UomCategory") .WithMany("Uoms") .HasForeignKey("UomCategoryId") @@ -13661,11 +13906,27 @@ namespace Kurs.Platform.Migrations b.Navigation("Events"); }); + modelBuilder.Entity("Kurs.Platform.Entities.Material", b => + { + b.Navigation("AlternativeUoms"); + + b.Navigation("Specifications"); + + b.Navigation("Suppliers"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialGroup", b => { + b.Navigation("Materials"); + b.Navigation("SubGroups"); }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialType", b => + { + b.Navigation("Materials"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.Order", b => { b.Navigation("Items"); @@ -13779,6 +14040,13 @@ namespace Kurs.Platform.Migrations b.Navigation("Certificates"); }); + modelBuilder.Entity("Kurs.Platform.Entities.Uom", b => + { + b.Navigation("MaterialSpecifications"); + + b.Navigation("Materials"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.UomCategory", b => { b.Navigation("Uoms"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106171552_Initial.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106192916_Initial.cs similarity index 97% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106171552_Initial.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106192916_Initial.cs index fd8ce1cf..94e5520d 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106171552_Initial.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251106192916_Initial.cs @@ -2736,37 +2736,6 @@ namespace Kurs.Platform.Migrations onDelete: ReferentialAction.Cascade); }); - migrationBuilder.CreateTable( - name: "Adm_T_Uom", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - UomCategoryId = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Type = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: false), - Ratio = table.Column(type: "decimal(18,6)", precision: 18, scale: 6, nullable: false), - IsActive = table.Column(type: "bit", nullable: false), - Rounding = table.Column(type: "decimal(18,6)", precision: 18, scale: 6, nullable: false), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Adm_T_Uom", x => x.Id); - table.ForeignKey( - name: "FK_Adm_T_Uom_Adm_T_UomCategory_UomCategoryId", - column: x => x.UomCategoryId, - principalTable: "Adm_T_UomCategory", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - migrationBuilder.CreateTable( name: "Crd_T_ClassroomAttandance", columns: table => new @@ -4156,6 +4125,7 @@ namespace Kurs.Platform.Migrations CurrentBalance = table.Column(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false, defaultValue: 0m), DiscountRate = table.Column(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false, defaultValue: 0m), PerformanceMetricsJson = table.Column(type: "text", nullable: true), + MaterialId = table.Column(type: "uniqueidentifier", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), @@ -4316,6 +4286,129 @@ namespace Kurs.Platform.Migrations onDelete: ReferentialAction.Restrict); }); + migrationBuilder.CreateTable( + name: "Adm_T_Uom", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + UomCategoryId = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Type = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: false), + Ratio = table.Column(type: "decimal(18,6)", precision: 18, scale: 6, nullable: false), + IsActive = table.Column(type: "bit", nullable: false), + Rounding = table.Column(type: "decimal(18,6)", precision: 18, scale: 6, nullable: false), + MaterialId = table.Column(type: "uniqueidentifier", nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Adm_T_Uom", x => x.Id); + table.ForeignKey( + name: "FK_Adm_T_Uom_Adm_T_UomCategory_UomCategoryId", + column: x => x.UomCategoryId, + principalTable: "Adm_T_UomCategory", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "Scp_T_Material", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Code = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Name = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + Barcode = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: true), + Description = table.Column(type: "nvarchar(500)", maxLength: 500, nullable: true), + MaterialTypeId = table.Column(type: "uniqueidentifier", nullable: true), + MaterialGroupId = table.Column(type: "uniqueidentifier", nullable: true), + UomId = table.Column(type: "uniqueidentifier", nullable: true), + CostPrice = table.Column(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false, defaultValue: 0m), + SalesPrice = table.Column(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false, defaultValue: 0m), + CurrencyId = table.Column(type: "uniqueidentifier", nullable: true), + IsActive = table.Column(type: "bit", nullable: false, defaultValue: true), + TotalStock = table.Column(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false, defaultValue: 0m), + TrackingType = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Scp_T_Material", x => x.Id); + table.ForeignKey( + name: "FK_Scp_T_Material_Adm_T_Uom_UomId", + column: x => x.UomId, + principalTable: "Adm_T_Uom", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Scp_T_Material_Sas_H_Currency_CurrencyId", + column: x => x.CurrencyId, + principalTable: "Sas_H_Currency", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Scp_T_Material_Scp_T_MaterialGroup_MaterialGroupId", + column: x => x.MaterialGroupId, + principalTable: "Scp_T_MaterialGroup", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Scp_T_Material_Scp_T_MaterialType_MaterialTypeId", + column: x => x.MaterialTypeId, + principalTable: "Scp_T_MaterialType", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "Scp_T_MaterialSpecification", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + MaterialId = table.Column(type: "uniqueidentifier", nullable: false), + SpecificationName = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false), + SpecificationValue = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + UnitId = table.Column(type: "uniqueidentifier", nullable: false), + IsRequired = table.Column(type: "bit", nullable: false, defaultValue: false), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Scp_T_MaterialSpecification", x => x.Id); + table.ForeignKey( + name: "FK_Scp_T_MaterialSpecification_Adm_T_Uom_UnitId", + column: x => x.UnitId, + principalTable: "Adm_T_Uom", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Scp_T_MaterialSpecification_Scp_T_Material_MaterialId", + column: x => x.MaterialId, + principalTable: "Scp_T_Material", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + migrationBuilder.CreateTable( name: "Hr_T_CostCenter", columns: table => new @@ -5448,6 +5541,11 @@ namespace Kurs.Platform.Migrations table: "Adm_T_Partner", column: "CustomerTypeId"); + migrationBuilder.CreateIndex( + name: "IX_Adm_T_Partner_MaterialId", + table: "Adm_T_Partner", + column: "MaterialId"); + migrationBuilder.CreateIndex( name: "IX_Adm_T_Partner_PaymentTermId", table: "Adm_T_Partner", @@ -5498,6 +5596,11 @@ namespace Kurs.Platform.Migrations table: "Adm_T_SkillLevel", column: "SkillTypeId"); + migrationBuilder.CreateIndex( + name: "IX_Adm_T_Uom_MaterialId", + table: "Adm_T_Uom", + column: "MaterialId"); + migrationBuilder.CreateIndex( name: "IX_Adm_T_Uom_UomCategoryId", table: "Adm_T_Uom", @@ -6056,11 +6159,41 @@ namespace Kurs.Platform.Migrations table: "Sas_T_ReportTemplate", column: "CategoryId"); + migrationBuilder.CreateIndex( + name: "IX_Scp_T_Material_CurrencyId", + table: "Scp_T_Material", + column: "CurrencyId"); + + migrationBuilder.CreateIndex( + name: "IX_Scp_T_Material_MaterialGroupId", + table: "Scp_T_Material", + column: "MaterialGroupId"); + + migrationBuilder.CreateIndex( + name: "IX_Scp_T_Material_MaterialTypeId", + table: "Scp_T_Material", + column: "MaterialTypeId"); + + migrationBuilder.CreateIndex( + name: "IX_Scp_T_Material_UomId", + table: "Scp_T_Material", + column: "UomId"); + migrationBuilder.CreateIndex( name: "IX_Scp_T_MaterialGroup_ParentGroupId", table: "Scp_T_MaterialGroup", column: "ParentGroupId"); + migrationBuilder.CreateIndex( + name: "IX_Scp_T_MaterialSpecification_MaterialId", + table: "Scp_T_MaterialSpecification", + column: "MaterialId"); + + migrationBuilder.CreateIndex( + name: "IX_Scp_T_MaterialSpecification_UnitId", + table: "Scp_T_MaterialSpecification", + column: "UnitId"); + migrationBuilder.AddForeignKey( name: "FK_Adm_T_BlogPost_Hr_T_Employee_EmployeeId", table: "Adm_T_BlogPost", @@ -6077,6 +6210,20 @@ namespace Kurs.Platform.Migrations principalColumn: "Id", onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_Adm_T_Partner_Scp_T_Material_MaterialId", + table: "Adm_T_Partner", + column: "MaterialId", + principalTable: "Scp_T_Material", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Adm_T_Uom_Scp_T_Material_MaterialId", + table: "Adm_T_Uom", + column: "MaterialId", + principalTable: "Scp_T_Material", + principalColumn: "Id"); + migrationBuilder.AddForeignKey( name: "FK_Hr_T_CostCenter_Hr_T_Department_DepartmentId", table: "Hr_T_CostCenter", @@ -6115,6 +6262,14 @@ namespace Kurs.Platform.Migrations name: "FK_Hr_T_Department_Hr_T_Employee_ManagerId", table: "Hr_T_Department"); + migrationBuilder.DropForeignKey( + name: "FK_Scp_T_Material_Sas_H_Currency_CurrencyId", + table: "Scp_T_Material"); + + migrationBuilder.DropForeignKey( + name: "FK_Adm_T_Uom_Scp_T_Material_MaterialId", + table: "Adm_T_Uom"); + migrationBuilder.DropForeignKey( name: "FK_Hr_T_CostCenter_Hr_T_Department_DepartmentId", table: "Hr_T_CostCenter"); @@ -6251,9 +6406,6 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "Adm_T_SkillLevel"); - migrationBuilder.DropTable( - name: "Adm_T_Uom"); - migrationBuilder.DropTable( name: "Adm_T_Vaccine"); @@ -6468,10 +6620,7 @@ namespace Kurs.Platform.Migrations name: "Sas_T_ReportParameter"); migrationBuilder.DropTable( - name: "Scp_T_MaterialGroup"); - - migrationBuilder.DropTable( - name: "Scp_T_MaterialType"); + name: "Scp_T_MaterialSpecification"); migrationBuilder.DropTable( name: "AbpEntityChanges"); @@ -6500,9 +6649,6 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "Adm_T_SkillType"); - migrationBuilder.DropTable( - name: "Adm_T_UomCategory"); - migrationBuilder.DropTable( name: "Crd_B_ClassType"); @@ -6575,9 +6721,6 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "Crm_T_CustomerType"); - migrationBuilder.DropTable( - name: "Sas_H_Currency"); - migrationBuilder.DropTable( name: "Sas_T_Sector"); @@ -6650,6 +6793,24 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "Hr_T_JobPosition"); + migrationBuilder.DropTable( + name: "Sas_H_Currency"); + + migrationBuilder.DropTable( + name: "Scp_T_Material"); + + migrationBuilder.DropTable( + name: "Adm_T_Uom"); + + migrationBuilder.DropTable( + name: "Scp_T_MaterialGroup"); + + migrationBuilder.DropTable( + name: "Scp_T_MaterialType"); + + migrationBuilder.DropTable( + name: "Adm_T_UomCategory"); + migrationBuilder.DropTable( name: "Hr_T_Department"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 257ff9e0..50b4b636 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -5628,6 +5628,115 @@ namespace Kurs.Platform.Migrations b.ToTable("Plat_H_LogEntry", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.Material", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Barcode") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CostPrice") + .ValueGeneratedOnAdd() + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasDefaultValue(0m); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("CurrencyId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MaterialGroupId") + .HasColumnType("uniqueidentifier"); + + b.Property("MaterialTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("SalesPrice") + .ValueGeneratedOnAdd() + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasDefaultValue(0m); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TotalStock") + .ValueGeneratedOnAdd() + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasDefaultValue(0m); + + b.Property("TrackingType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("UomId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CurrencyId"); + + b.HasIndex("MaterialGroupId"); + + b.HasIndex("MaterialTypeId"); + + b.HasIndex("UomId"); + + b.ToTable("Scp_T_Material", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialGroup", b => { b.Property("Id") @@ -5696,6 +5805,75 @@ namespace Kurs.Platform.Migrations b.ToTable("Scp_T_MaterialGroup", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialSpecification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsRequired") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MaterialId") + .HasColumnType("uniqueidentifier"); + + b.Property("SpecificationName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("SpecificationValue") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UnitId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("MaterialId"); + + b.HasIndex("UnitId"); + + b.ToTable("Scp_T_MaterialSpecification", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialType", b => { b.Property("Id") @@ -6490,6 +6668,9 @@ namespace Kurs.Platform.Migrations .HasColumnType("decimal(18,2)") .HasDefaultValue(0m); + b.Property("MaterialId") + .HasColumnType("uniqueidentifier"); + b.Property("MobileNumber") .HasMaxLength(32) .HasColumnType("bigint"); @@ -6573,6 +6754,8 @@ namespace Kurs.Platform.Migrations b.HasIndex("CustomerTypeId"); + b.HasIndex("MaterialId"); + b.HasIndex("PaymentTermId"); b.HasIndex("SectorId"); @@ -9837,6 +10020,9 @@ namespace Kurs.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); + b.Property("MaterialId") + .HasColumnType("uniqueidentifier"); + b.Property("Name") .IsRequired() .HasMaxLength(64) @@ -9864,6 +10050,8 @@ namespace Kurs.Platform.Migrations b.HasKey("Id"); + b.HasIndex("MaterialId"); + b.HasIndex("UomCategoryId"); b.ToTable("Adm_T_Uom", (string)null); @@ -12891,6 +13079,36 @@ namespace Kurs.Platform.Migrations .IsRequired(); }); + modelBuilder.Entity("Kurs.Platform.Entities.Material", b => + { + b.HasOne("Kurs.Platform.Entities.Currency", "Currency") + .WithMany() + .HasForeignKey("CurrencyId"); + + b.HasOne("Kurs.Platform.Entities.MaterialGroup", "MaterialGroup") + .WithMany("Materials") + .HasForeignKey("MaterialGroupId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("Kurs.Platform.Entities.MaterialType", "MaterialType") + .WithMany("Materials") + .HasForeignKey("MaterialTypeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("Kurs.Platform.Entities.Uom", "Uom") + .WithMany("Materials") + .HasForeignKey("UomId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Currency"); + + b.Navigation("MaterialGroup"); + + b.Navigation("MaterialType"); + + b.Navigation("Uom"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialGroup", b => { b.HasOne("Kurs.Platform.Entities.MaterialGroup", "ParentGroup") @@ -12901,6 +13119,25 @@ namespace Kurs.Platform.Migrations b.Navigation("ParentGroup"); }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialSpecification", b => + { + b.HasOne("Kurs.Platform.Entities.Material", "Material") + .WithMany("Specifications") + .HasForeignKey("MaterialId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Kurs.Platform.Entities.Uom", "Unit") + .WithMany("MaterialSpecifications") + .HasForeignKey("UnitId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Material"); + + b.Navigation("Unit"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.Meal", b => { b.HasOne("Kurs.Platform.Entities.Branch", "Branch") @@ -12954,6 +13191,10 @@ namespace Kurs.Platform.Migrations .HasForeignKey("CustomerTypeId") .OnDelete(DeleteBehavior.Restrict); + b.HasOne("Kurs.Platform.Entities.Material", null) + .WithMany("Suppliers") + .HasForeignKey("MaterialId"); + b.HasOne("Kurs.Platform.Entities.PaymentTerm", "PaymentTerm") .WithMany() .HasForeignKey("PaymentTermId"); @@ -13329,6 +13570,10 @@ namespace Kurs.Platform.Migrations modelBuilder.Entity("Kurs.Platform.Entities.Uom", b => { + b.HasOne("Kurs.Platform.Entities.Material", null) + .WithMany("AlternativeUoms") + .HasForeignKey("MaterialId"); + b.HasOne("Kurs.Platform.Entities.UomCategory", "UomCategory") .WithMany("Uoms") .HasForeignKey("UomCategoryId") @@ -13658,11 +13903,27 @@ namespace Kurs.Platform.Migrations b.Navigation("Events"); }); + modelBuilder.Entity("Kurs.Platform.Entities.Material", b => + { + b.Navigation("AlternativeUoms"); + + b.Navigation("Specifications"); + + b.Navigation("Suppliers"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialGroup", b => { + b.Navigation("Materials"); + b.Navigation("SubGroups"); }); + modelBuilder.Entity("Kurs.Platform.Entities.MaterialType", b => + { + b.Navigation("Materials"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.Order", b => { b.Navigation("Items"); @@ -13776,6 +14037,13 @@ namespace Kurs.Platform.Migrations b.Navigation("Certificates"); }); + modelBuilder.Entity("Kurs.Platform.Entities.Uom", b => + { + b.Navigation("MaterialSpecifications"); + + b.Navigation("Materials"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.UomCategory", b => { b.Navigation("Uoms");