diff --git a/SqlSchemaCompare_Dev_to_DevRelease.scmp b/SqlSchemaCompare_Dev_to_DevRelease.scmp
index aa6eec8c..28697846 100644
--- a/SqlSchemaCompare_Dev_to_DevRelease.scmp
+++ b/SqlSchemaCompare_Dev_to_DevRelease.scmp
@@ -303,6 +303,10 @@
RegisterDataTierApplication
False
+
+ PerformIndexOperationsOnline
+ False
+
RebuildIndexesOfflineForDataPhase
False
diff --git a/TIAM.Database.Test/AdminDalTest.cs b/TIAM.Database.Test/AdminDalTest.cs
index 1e50a671..b7e08208 100644
--- a/TIAM.Database.Test/AdminDalTest.cs
+++ b/TIAM.Database.Test/AdminDalTest.cs
@@ -201,8 +201,7 @@ namespace TIAM.Database.Test
userProductMapping = await Dal.GetUserProductMappingByIdAsync(userProductMappingId, true);
Assert.IsNotNull(userProductMapping);
-
- //userProductMapping.Permissions = 1;
+
Assert.IsNotNull(await Dal.UpdateUserProductMappingAsync(userProductMappingId, 1));
userProductMapping = await Dal.GetUserProductMappingByIdAsync(userProductMappingId, true);
@@ -224,8 +223,8 @@ namespace TIAM.Database.Test
#endregion UserProductMapping
#region Product
- //[DataTestMethod]
- //[DataRow(["e24f6942-2210-47d7-8660-ace0ef302bae", "8e6a4170-0e15-4f8a-bdd2-46f9dbc63b93", "540271F6-C604-4C16-8160-D5A7CAFEDF00", "49c7805b-d8cd-4308-b1c5-7a54e5ee6287"])]
+ [DataTestMethod]
+ [DataRow(["e24f6942-2210-47d7-8660-ace0ef302bae", "88b12e3d-bfec-462b-b1dc-1f4243ee7a00", "540271F6-C604-4C16-8160-D5A7CAFEDF00", "49c7805b-d8cd-4308-b1c5-7a54e5ee6287"])]
public async Task ProductCrudTest(string[] productIdCompanyIdUserIdUserToCompanyIdStrings)
{
var productId = Guid.Parse(productIdCompanyIdUserIdUserToCompanyIdStrings[0]);
@@ -235,33 +234,42 @@ namespace TIAM.Database.Test
await Dal.RemoveProductAsync(productId); //kitöröljük a szemetet, ha korábbról bentmaradt - J.
- var company = new Company(companyId, "Test unit product...", null);
+ var product = new Product(productId, companyId, ProductType.Hotel, "Test unit product...", "Test unit product description...", 25000, null);
+ product.AddUser(userId, 1);
- Assert.IsTrue(await Dal.AddCompanyAsync(company));
- Assert.IsNotNull(company);
+ Assert.IsTrue(await Dal.AddProductAsync(product));
+ Assert.IsNotNull(product);
- company = await Dal.GetCompanyByIdAsync(companyId);
+ product = await Dal.GetProductByIdAsync(productId);
- Assert.IsNotNull(company);
- Assert.IsTrue(company.UserToServiceProviders.Count == 0);
- Assert.IsTrue(company.Id == companyId);
+ Assert.IsNotNull(product);
+ Assert.IsNotNull(product.Profile);
+ Assert.IsNotNull(product.Profile.Address);
- company.OwnerId = userId;
- Assert.IsTrue(await Dal.UpdateCompanyAsync(company));
+ Assert.IsTrue(product.UserProductMappings.Any(x=>x.UserId == userId && x.ProductId == productId));
+ Assert.IsTrue(product.Id == productId);
- company = await Dal.GetCompanyByIdAsync(companyId);
+ product.Price = 30000;
+ product.UserProductMappings[0].Permissions = 2;
+ Assert.IsTrue(await Dal.UpdateProductAsync(product));
- Assert.IsNotNull(company);
- Assert.IsNotNull(company.UserToServiceProviders);
- Assert.IsTrue(company.UserToServiceProviders.Any(x=>x.UserId == userId && x.ServiceProviderId == companyId));
+ product = await Dal.GetProductByIdAsync(productId);
+
+ Assert.IsNotNull(product);
+ Assert.IsNotNull(product.UserProductMappings);
+ Assert.IsTrue((int)product.Price == 30000);
+ Assert.IsTrue(product.UserProductMappings[0].Permissions == 2);
- company.CommissionPercent = 5;
- Assert.IsTrue(await Dal.UpdateCompanyAsync(company));
+ var addressId = product.Profile.AddressId;
+ Assert.IsTrue(await Dal.RemoveProductAsync(product)); //mielőbb kitöröljük, h ne maradjon szemét a db-ben - J.
- Assert.IsTrue(await Dal.RemoveCompanyAsync(company)); //mielőbb kitöröljük, h ne maradjon szemét a db-ben - J.
+ Assert.IsNull(await Dal.GetProfileByIdAsync(product.ProfileId));
+ Assert.IsNull(await Dal.GetAddressByIdAsync(addressId));
+
+ Assert.IsTrue((await Dal.GetUserProductMappingsByProductIdAsync(productId)).Count == 0);
- company = await Dal.GetCompanyByIdAsync(companyId);
- Assert.IsNull(company); //a korábbi törlés miatt NULL kell legyen - J.
+ product = await Dal.GetProductByIdAsync(productId);
+ Assert.IsNull(product); //a korábbi törlés miatt NULL kell legyen - J.
}
#endregion Product
@@ -374,8 +382,14 @@ namespace TIAM.Database.Test
company.CommissionPercent = 5;
Assert.IsTrue(await Dal.UpdateCompanyAsync(company));
+ var addressId = company.Profile.AddressId;
Assert.IsTrue(await Dal.RemoveCompanyAsync(company)); //mielőbb kitöröljük, h ne maradjon szemét a db-ben - J.
+ Assert.IsNull(await Dal.GetProfileByIdAsync(company.ProfileId));
+ Assert.IsNull(await Dal.GetAddressByIdAsync(addressId));
+
+ Assert.IsTrue(Dal.GetProductsByServiceProviderId(companyId).Count == 0);
+
company = await Dal.GetCompanyByIdAsync(companyId);
Assert.IsNull(company); //a korábbi törlés miatt NULL kell legyen - J.
}
diff --git a/TIAM.Database/DbSets/Products/ProductDbSetExtensions.cs b/TIAM.Database/DbSets/Products/ProductDbSetExtensions.cs
index 07bd8104..29ab551e 100644
--- a/TIAM.Database/DbSets/Products/ProductDbSetExtensions.cs
+++ b/TIAM.Database/DbSets/Products/ProductDbSetExtensions.cs
@@ -1,11 +1,15 @@
using AyCode.Core.Extensions;
using AyCode.Database.DbSets.Profiles;
using AyCode.Interfaces.Addresses;
+using AyCode.Interfaces.Entities;
using AyCode.Interfaces.Profiles;
using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.ChangeTracking;
+using TIAM.Database.DbSets.Users;
using TIAM.Entities.Addresses;
using TIAM.Entities.Products;
using TIAM.Entities.Profiles;
+using TIAM.Entities.Users;
namespace TIAM.Database.DbSets.Products;
@@ -16,19 +20,27 @@ public static class ProductDbSetExtensions
public static bool AddProduct(this IProductDbSet ctx, Product product)
{
if (product.Id.IsNullOrEmpty()) product.Id = Guid.NewGuid();
+
+ if (product.Profile == null!)
+ product.SetProfile((Activator.CreateInstance(typeof(Profile), product.ProfileId, product.Name) as Profile)!);
+
+ if (product.Profile!.Address == null!)
+ product.Profile.SetAddress((Activator.CreateInstance(typeof(Address), product.Profile.AddressId, product.Name) as Address)!);
return ctx.Products.Add(product).State == EntityState.Added;
}
public static bool UpdateProduct(this IProductDbSet ctx, Product product)
- => ctx.Products.Update(product).State == EntityState.Modified;
+ {
+ return ctx.Products.Update(product).State == EntityState.Modified;
+ }
public static bool RemoveProduct(this IProductDbSet ctx, Product product)
{
ctx.RemoveProfile(product.ProfileId);
- ctx.UserProductMappings.RemoveRange(ctx.UserProductMappings.Where(x => x.ProductId == product.Id));
- //TODO: Transfer, etc... - J.
+ ctx.RemoveUserProductMappingsByProductId(product.Id);
+ //TODO: Transfer, etc... - J.
return ctx.Products.Remove(product).State == EntityState.Deleted;
}
diff --git a/TIAM.Database/DbSets/Users/UserProductMappingDbSetExtensions.cs b/TIAM.Database/DbSets/Users/UserProductMappingDbSetExtensions.cs
index 70d4a72d..25be5147 100644
--- a/TIAM.Database/DbSets/Users/UserProductMappingDbSetExtensions.cs
+++ b/TIAM.Database/DbSets/Users/UserProductMappingDbSetExtensions.cs
@@ -86,4 +86,10 @@ public static class UserProductMappingDbSetExtensions
return userProductMapping == null || ctx.RemoveUserProductMapping(userProductMapping);
}
+
+ public static bool RemoveUserProductMappingsByProductId(this IUserProductMappingDbSet ctx, Guid productId)
+ {
+ ctx.UserProductMappings.RemoveRange(ctx.UserProductMappings.Where(x=>x.ProductId == productId));
+ return true;
+ }
}
\ No newline at end of file
diff --git a/TIAM.Entities/Products/Product.cs b/TIAM.Entities/Products/Product.cs
index ca821ca6..1bb680bc 100644
--- a/TIAM.Entities/Products/Product.cs
+++ b/TIAM.Entities/Products/Product.cs
@@ -1,6 +1,8 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
+using AyCode.Core.Extensions;
using TIAM.Core.Enums;
+using TIAM.Entities.Profiles;
using TIAM.Entities.ServiceProviders;
using TIAM.Entities.Users;
@@ -30,4 +32,23 @@ public class Product : ProductBase
ServiceProviderId = serviceProviderId;
ServiceProvider = serviceProvider;
}
+
+ public void SetProfile(Profile profile)
+ {
+ if (profile.Id.IsNullOrEmpty()) profile.Id = Guid.NewGuid();
+
+ Profile = profile;
+ ProfileId = profile.Id;
+ }
+
+ public bool HasUser(Guid userId)
+ => UserProductMappings.Any(x => x.UserId == userId);
+
+ public void AddUser(Guid userId, int permissions)
+ {
+ if (UserProductMappings.Any(x => x.UserId == userId))
+ return;
+
+ UserProductMappings.Add(new UserProductMapping(Guid.NewGuid(), userId, Id) { Permissions = permissions });
+ }
}
\ No newline at end of file
diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor
index 3e6a20cb..e1517cbf 100644
--- a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor
+++ b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor
@@ -137,13 +137,13 @@
{
_logger.Debug($"DataItemSaving");
- var profileId = Guid.NewGuid();
- product.Profile = new Profile(profileId, product.Name);
- product.ProfileId = profileId;
+ // var profileId = Guid.NewGuid();
+ // product.Profile = new Profile(profileId, product.Name);
+ // product.ProfileId = profileId;
- var addressId = Guid.NewGuid();
- product.Profile.Address = new Address(addressId);
- product.Profile.AddressId = addressId;
+ // var addressId = Guid.NewGuid();
+ // product.Profile.Address = new Address(addressId);
+ // product.Profile.AddressId = addressId;
//((Product)e.EditModel).UserProductMappings.Add(new UserProductMapping(Guid.NewGuid, ParentData.));
}