From d2c5956b3ec1f0d13cd8180c272e4ebcad593b18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Fri, 14 Nov 2025 15:44:59 +0300 Subject: [PATCH] Crm Oppurtinities --- .../DeveloperKit/CrudMigrationDto.cs | 4 +- .../DeveloperKit/CustomEntityDto.cs | 4 +- .../LookUpQueryValues.cs | 70 +- .../CrudEndpointGenerateAppService.cs | 2 +- .../DeveloperKit/CrudMigrationAppService.cs | 8 +- .../DeveloperKit/CustomEntityAppService.cs | 4 +- .../Seeds/LanguagesData.json | 12 + .../Seeds/ListFormSeeder_Coordinator.cs | 8 +- .../Seeds/ListFormSeeder_Crm.cs | 899 +++++++++++++++++- .../Seeds/ListFormSeeder_Hr.cs | 154 +-- .../Seeds/ListFormSeeder_Intranet.cs | 32 +- .../Seeds/ListFormSeeder_Participant.cs | 4 +- .../Seeds/ListFormSeeder_Saas.cs | 2 +- .../Seeds/ListFormSeeder_SupplyChain.cs | 40 +- .../Seeds/MenusData.json | 93 +- .../Seeds/PermissionsData.json | 131 ++- .../Enums/TableNameEnum.cs | 5 +- .../PlatformConsts.cs | 3 + .../TableNameResolver.cs | 3 + .../Erp.Platform.Domain/Data/SeedConsts.cs | 3 + .../Entities/Host/Currency.cs | 3 + .../Tenant/Administration/CrudMigration.cs | 2 +- .../Tenant/Administration/CustomEntity.cs | 4 +- .../Entities/Tenant/Crm/Action.cs | 29 + .../Entities/Tenant/Crm/Competitor.cs | 19 + .../Entities/Tenant/Crm/LossReason.cs | 3 + .../Entities/Tenant/Crm/Opportunity.cs | 50 + .../Entities/Tenant/Hr/Employee.cs | 1 + .../Entities/Tenant/Participant/Source.cs | 3 + .../EntityFrameworkCore/PlatformDbContext.cs | 57 +- ....cs => 20251114120401_Initial.Designer.cs} | 345 ++++++- ...1_Initial.cs => 20251114120401_Initial.cs} | 178 +++- .../PlatformDbContextModelSnapshot.cs | 343 +++++++ .../Tenants/Seeds/TenantData.json | 132 ++- .../Tenants/TenantDataSeeder.cs | 20 +- .../Tenants/TenantSeederDto.cs | 6 + ui/src/mocks/mockOpportunities.ts | 2 - ui/src/proxy/intranet/models.ts | 2 +- ui/src/views/form/FormDevExpress.tsx | 38 + ui/src/views/intranet/widgets/Visitors.tsx | 18 +- ui/src/views/list/Grid.tsx | 203 ++-- ui/src/views/list/Tree.tsx | 137 +++ 42 files changed, 2650 insertions(+), 426 deletions(-) create mode 100644 api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Action.cs create mode 100644 api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Competitor.cs create mode 100644 api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Opportunity.cs rename api/src/Erp.Platform.EntityFrameworkCore/Migrations/{20251113203111_Initial.Designer.cs => 20251114120401_Initial.Designer.cs} (97%) rename api/src/Erp.Platform.EntityFrameworkCore/Migrations/{20251113203111_Initial.cs => 20251114120401_Initial.cs} (97%) diff --git a/api/src/Erp.Platform.Application.Contracts/DeveloperKit/CrudMigrationDto.cs b/api/src/Erp.Platform.Application.Contracts/DeveloperKit/CrudMigrationDto.cs index ca719b43..7c08d485 100644 --- a/api/src/Erp.Platform.Application.Contracts/DeveloperKit/CrudMigrationDto.cs +++ b/api/src/Erp.Platform.Application.Contracts/DeveloperKit/CrudMigrationDto.cs @@ -10,7 +10,7 @@ public class CrudMigrationDto : AuditedEntityDto public string EntityName { get; set; } = string.Empty; public string FileName { get; set; } = string.Empty; public string SqlScript { get; set; } = string.Empty; - public string Status { get; set; } = "pending"; // "pending" | "applied" | "failed" + public string Status { get; set; } = "Askıda"; // "pending" | "applied" | "failed" public DateTime? AppliedAt { get; set; } public string? ErrorMessage { get; set; } } @@ -21,7 +21,7 @@ public class CreateUpdateCrudMigrationDto public string EntityName { get; set; } = string.Empty; public string FileName { get; set; } = string.Empty; public string SqlScript { get; set; } = string.Empty; - public string Status { get; set; } = "pending"; + public string Status { get; set; } = "Askıda"; public DateTime? AppliedAt { get; set; } public string? ErrorMessage { get; set; } } diff --git a/api/src/Erp.Platform.Application.Contracts/DeveloperKit/CustomEntityDto.cs b/api/src/Erp.Platform.Application.Contracts/DeveloperKit/CustomEntityDto.cs index ef7b720c..3b2c3c5b 100644 --- a/api/src/Erp.Platform.Application.Contracts/DeveloperKit/CustomEntityDto.cs +++ b/api/src/Erp.Platform.Application.Contracts/DeveloperKit/CustomEntityDto.cs @@ -14,9 +14,9 @@ public class CustomEntityDto : FullAuditedEntityDto public bool IsActive { get; set; } = true; public bool IsFullAuditedEntity { get; set; } = true; public bool IsMultiTenant { get; set; } = false; - public string MigrationStatus { get; set; } = "pending"; + public string MigrationStatus { get; set; } = "Askıda"; public Guid? MigrationId { get; set; } - public string EndpointStatus { get; set; } = "pending"; + public string EndpointStatus { get; set; } = "Askıda"; public List Fields { get; set; } = []; } diff --git a/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs b/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs index 604fb3ec..6270a6c4 100644 --- a/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs +++ b/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs @@ -9,6 +9,50 @@ public static class LookupQueryValues { private const string defaultDomain = "Erp"; + public static string DefaultLookupQueryJson( + string TableName, + string ValueExpr, + string DisplayExpr, + bool isTable = true, + bool isDeleted = false) => JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + ValueExpr = "Key", + DisplayExpr = "Name", + LookupQuery = $"SELECT " + + $"\"{ValueExpr}\" AS \"Key\", " + + $"\"{DisplayExpr}\" AS \"Name\" " + + $"FROM \"{(isTable ? TableNameResolver.GetFullTableName($"{TableName}") : TableNameResolver.GetFullViewName($"{TableName}"))}\" " + + (!isDeleted ? "" : $"WHERE \"IsDeleted\" = 'false'") + + $"ORDER BY \"{DisplayExpr}\";" + }); + + public static string CustomerValues = + $"SELECT " + + $"\"Id\" AS \"Key\", " + + $"\"Name\" AS \"Name\" " + + $"FROM \"{FullNameTable(TableNameEnum.Partner)}\" " + + $"WHERE \"PartyType\" = 'Customer' " + + $"ORDER BY \"Name\""; + + public static string SupplierValues = + $"SELECT " + + $"\"Id\" AS \"Key\", " + + $"\"Name\" AS \"Name\" " + + $"FROM \"{FullNameTable(TableNameEnum.Partner)}\" " + + $"WHERE \"PartyType\" = 'Supplier' " + + $"ORDER BY \"Name\""; + + public static string PartnerContactValues = + $"SELECT " + + $"\"Id\" AS \"Key\", " + + $"\"FullName\" AS \"Name\" " + + $"FROM \"{FullNameTable(TableNameEnum.PartnerContact)}\" " + + $"WHERE " + + $"(\"PartnerId\" = @param0 OR @param0 IS NULL) " + + $"AND \"IsActive\" = 'true' " + + $"ORDER BY \"FullName\";"; + public static string TenantValues = $"SELECT * FROM (" + $"SELECT NULL AS \"Key\", 'Host' AS \"Name\" " + @@ -47,24 +91,6 @@ public static class LookupQueryValues $"WHERE \"IsDeleted\" = 'false' " + $"ORDER BY \"Name\";"; - public static string DefaultLookupQueryJson( - string TableName, - string ValueExpr, - string DisplayExpr, - bool isTable = true, - bool isDeleted = false) => JsonSerializer.Serialize(new LookupDto - { - DataSourceType = UiLookupDataSourceTypeEnum.Query, - ValueExpr = "Key", - DisplayExpr = "Name", - LookupQuery = $"SELECT " + - $"\"{ValueExpr}\" AS \"Key\", " + - $"\"{DisplayExpr}\" AS \"Name\" " + - $"FROM \"{(isTable ? TableNameResolver.GetFullTableName($"{TableName}") : TableNameResolver.GetFullViewName($"{TableName}"))}\" " + - (!isDeleted ? "" : $"WHERE \"IsDeleted\" = 'false'") + - $"ORDER BY \"{DisplayExpr}\";" - }); - public static string CityValues = $"SELECT " + $"\"Code\" AS \"Key\", " + @@ -169,4 +195,12 @@ public static class LookupQueryValues $"WHERE \"IsDeleted\" = 'false' " + "AND \"IsDisabled\" = 'false' " + $"ORDER BY \"ParentCode\", \"Order\";"; + + public static string OrganizationUnitSalesTeamValues = + $"SELECT " + + $"\"Code\" AS \"Key\", " + + $"\"DisplayName\" AS \"Name\" " + + $"FROM \"AbpOrganizationUnits\"" + + $"WHERE \"Code\" LIKE '00001%' " + + $"ORDER BY \"DisplayName\""; } diff --git a/api/src/Erp.Platform.Application/DeveloperKit/CrudEndpointGenerateAppService.cs b/api/src/Erp.Platform.Application/DeveloperKit/CrudEndpointGenerateAppService.cs index 2f0b5ede..7bf4767b 100644 --- a/api/src/Erp.Platform.Application/DeveloperKit/CrudEndpointGenerateAppService.cs +++ b/api/src/Erp.Platform.Application/DeveloperKit/CrudEndpointGenerateAppService.cs @@ -140,7 +140,7 @@ public class CrudEndpointGenerateAppService : CrudAppService< await _endpointRepository.InsertManyAsync(endpoints, autoSave: true); // Entity endpoint durumu güncelle - entity.EndpointStatus = "applied"; + entity.EndpointStatus = "Uygulandı"; await _entityRepository.UpdateAsync(entity, autoSave: true); var result = ObjectMapper.Map, List>(endpoints); diff --git a/api/src/Erp.Platform.Application/DeveloperKit/CrudMigrationAppService.cs b/api/src/Erp.Platform.Application/DeveloperKit/CrudMigrationAppService.cs index c8b367a2..1bde891e 100644 --- a/api/src/Erp.Platform.Application/DeveloperKit/CrudMigrationAppService.cs +++ b/api/src/Erp.Platform.Application/DeveloperKit/CrudMigrationAppService.cs @@ -47,14 +47,14 @@ public class CrudMigrationAppService : CrudAppService< { await _customSqlExecutor.ExecuteSqlAsync(migration.SqlScript); - migration.Status = "applied"; + migration.Status = "Uygulandı"; migration.AppliedAt = DateTime.UtcNow; migration.ErrorMessage = null; await _migrationRepository.UpdateAsync(migration, autoSave: true); var entity = await _entityRepository.GetAsync(migration.EntityId); - entity.MigrationStatus = "applied"; + entity.MigrationStatus = "Uygulandı"; await _entityRepository.UpdateAsync(entity, autoSave: true); return ObjectMapper.Map(migration); @@ -117,13 +117,13 @@ public class CrudMigrationAppService : CrudAppService< EntityName = entity.Name, FileName = fileName, SqlScript = sqlScript, - Status = "pending" + Status = "Askıda" }; migration = await _migrationRepository.InsertAsync(migration, autoSave: true); entity.MigrationId = migration.Id; - entity.MigrationStatus = "pending"; + entity.MigrationStatus = "Askıda"; await _entityRepository.UpdateAsync(entity, autoSave: true); return ObjectMapper.Map(migration); diff --git a/api/src/Erp.Platform.Application/DeveloperKit/CustomEntityAppService.cs b/api/src/Erp.Platform.Application/DeveloperKit/CustomEntityAppService.cs index 5ac89f46..f2f1ccf4 100644 --- a/api/src/Erp.Platform.Application/DeveloperKit/CustomEntityAppService.cs +++ b/api/src/Erp.Platform.Application/DeveloperKit/CustomEntityAppService.cs @@ -114,7 +114,7 @@ public class CustomEntityAppService : CrudAppService< if (structureChanged && entity.MigrationStatus == "applied") { - entity.MigrationStatus = "pending"; + entity.MigrationStatus = "Askıda"; entity.MigrationId = null; } @@ -200,7 +200,7 @@ public class CustomEntityAppService : CrudAppService< IsActive = input.IsActive, IsFullAuditedEntity = input.IsFullAuditedEntity, IsMultiTenant = input.IsMultiTenant, - MigrationStatus = "pending" + MigrationStatus = "Askıda" }; // Fields ekle - sıralama ile diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json b/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json index 51221dba..0795f078 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json +++ b/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json @@ -9523,6 +9523,18 @@ "tr": "Fırsatlar", "en": "Opportunities" }, + { + "resourceName": "Platform", + "key": "App.Crm.OpportunityAction", + "tr": "Eylemler", + "en": "Actions" + }, + { + "resourceName": "Platform", + "key": "App.Crm.OpportunityCompetitor", + "tr": "Rakipler", + "en": "Competitors" + }, { "resourceName": "Platform", "key": "App.Crm.Activities", diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Coordinator.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Coordinator.cs index 5a0a9162..c45af3f3 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Coordinator.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Coordinator.cs @@ -2185,13 +2185,13 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend }), EditingFormJson = JsonSerializer.Serialize(new List() { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items= [ - new EditingFormItemDto { Order = 1, DataField = "QuestionPoolId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 2, DataField = "QuestionType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 1, DataField = "QuestionPoolId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 2, DataField = "QuestionType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "Points", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 4, DataField = "Title", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 5, DataField = "Content", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 6, DataField = "Difficulty", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 7, DataField = "MediaType", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 6, DataField = "Difficulty", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 7, DataField = "MediaType", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 8, DataField = "MediaUrl", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 9, DataField = "CorrectAnswer", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox, EditorOptions="{\"disabled\": true}" }, new EditingFormItemDto { Order = 10, DataField = "TimeLimit", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Crm.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Crm.cs index 248bc72b..e3c8136b 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Crm.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Crm.cs @@ -328,11 +328,11 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField = "Code", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField = "PartyType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions = EditorOptionValues.Disabled }, - new EditingFormItemDto { Order = 4, DataField = "SectorId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField = "SectorId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField = "TaxNumber", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 6, DataField = "TaxOffice", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 7, DataField = "CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 8, DataField = "PaymentTermId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 7, DataField = "CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 8, DataField = "PaymentTermId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 9, DataField = "CreditLimit", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, ] }, @@ -340,10 +340,10 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency { Order = 2, Caption = "Address", ColCount = 3, ColSpan = 2, ItemType = "group", Items = [ - new EditingFormItemDto { Order = 10, DataField = "Country", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 11, DataField = "City", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 12, DataField = "District", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 13, DataField = "Street", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 10, DataField = "Country", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 11, DataField = "City", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 12, DataField = "District", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 13, DataField = "Street", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 14, DataField = "Address1", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 15, DataField = "Address2", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 16, DataField = "PostalCode", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, @@ -358,10 +358,10 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency { Order = 3, Caption="Supply Card", ColCount = 3, ColSpan = 2, ItemType = "group", Items = [ - new EditingFormItemDto { Order = 22, DataField = "CustomerTypeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 23, DataField = "CustomerSegmentId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 24, DataField = "EmployeeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 25, DataField = "TeamCode", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 22, DataField = "CustomerTypeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 23, DataField = "CustomerSegmentId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 24, DataField = "EmployeeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 25, DataField = "TeamCode", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 26, DataField = "TotalRevenue", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 27, DataField = "AverageOrderValue", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 28, DataField = "LifetimeValue", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, @@ -376,7 +376,7 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency new() { FieldName = "TotalRevenue", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "AverageOrderValue", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "LifetimeValue", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Active", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Aktif", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "Country", FieldDbType = DbType.String, Value = "TR", CustomValueType = FieldCustomValueTypeEnum.Value }, }), CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { @@ -840,10 +840,10 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new() { Key="Active", Name="Active" }, - new() { Key="Inactive", Name="Inactive" }, - new() { Key="Prospect", Name="Prospect" }, - new() { Key="Blocked", Name="Blocked" }, + new() { Key="Aktif", Name="Aktif" }, + new() { Key="Pasif", Name="Pasif" }, + new() { Key="Olasılık", Name="Olasılık" }, + new() { Key="Engellendi", Name="Engellendi" }, }), }), ColumnCustomizationJson = DefaultColumnCustomizationJson, @@ -978,7 +978,7 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency } #endregion - #region Lost Reason + #region Loss Reason if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == ListFormCodes.Lists.LossReason)) { var listForm = await _listFormRepository.InsertAsync( @@ -1021,7 +1021,7 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField="Code", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 4, DataField="Category", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField="Category", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, ]} }), @@ -1146,6 +1146,867 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency } #endregion + #region Opportunity + if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == ListFormCodes.Lists.Opportunity)) + { + var listForm = await _listFormRepository.InsertAsync( + new ListForm() + { + ListFormType = ListFormTypeEnum.List, + IsSubForm = true, + LayoutJson = DefaultLayoutJson, + CultureName = LanguageCodes.En, + ListFormCode = ListFormCodes.Lists.Opportunity, + Name = AppCodes.Crm.Opportunity, + Title = AppCodes.Crm.Opportunity, + DataSourceCode = SeedConsts.DataSources.DefaultCode, + IsTenant = true, + IsBranch = false, + IsOrganizationUnit = false, + Description = AppCodes.Crm.Opportunity, + SelectCommandType = SelectCommandTypeEnum.Table, + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Opportunity)), + KeyFieldName = "Id", + KeyFieldDbSourceType = DbType.Guid, + DefaultFilter = DefaultFilterJson, + SortMode = GridOptions.SortModeSingle, + FilterRowJson = JsonSerializer.Serialize(new GridFilterRowDto { Visible = true }), + HeaderFilterJson = JsonSerializer.Serialize(new { Visible = true }), + SearchPanelJson = JsonSerializer.Serialize(new { Visible = true }), + GroupPanelJson = JsonSerializer.Serialize(new { Visible = true }), + SelectionJson = DefaultSelectionSingleJson, + ColumnOptionJson = DefaultColumnOptionJson, + PermissionJson = DefaultPermissionJson(AppCodes.Crm.Opportunity), + DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Opportunity)), + DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, + PagerOptionJson = DefaultPagerOptionJson, + EditingOptionJson = DefaultEditingOptionJson(AppCodes.Crm.Opportunity, 500, 600, true, true, true, true, false), + InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, + EditingFormJson = JsonSerializer.Serialize(new List() + { + new() { + Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ + new EditingFormItemDto { Order = 1, DataField="Title", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 2, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 3, DataField="PartnerId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 4, DataField="ContactId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 5, DataField="Stage", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 6, DataField="Probability", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, + new EditingFormItemDto { Order = 7, DataField="EstimatedValue", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = EditorOptionValues.NumberStandartFormat }, + new EditingFormItemDto { Order = 8, DataField="CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 9, DataField="ExpectedCloseDate", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 10, DataField="ActualCloseDate", ColSpan = 1, EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 11, DataField="EmployeeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 12, DataField="TeamCode", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 13, DataField="SourceId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 14, DataField="LossReasonId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 15, DataField="Status", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + ]} + }), + FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "Probability", FieldDbType = DbType.Int32, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "EstimatedValue", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "ExpectedCloseDate", FieldDbType = DbType.Date, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Aktif", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Stage", FieldDbType = DbType.String, Value = "Qualification", CustomValueType = FieldCustomValueTypeEnum.Value } + }), + CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { + new() { + Hint = "Manage", + Text ="Manage", + UrlTarget="_blank", + AuthName = AppCodes.Crm.Opportunity + ".Update", + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Opportunity)}/@Id" + }, + }), + }, autoSave: true + ); + + #region Opportunity Fields + await _listFormFieldRepository.InsertManyAsync([ + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "Id", + Width = 100, + ListOrderNo = 1, + Visible = false, + IsActive = true, + IsDeleted = false, + SortIndex = 0, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Title", + Width = 100, + ListOrderNo = 2, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Description", + Width = 250, + ListOrderNo = 3, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "PartnerId", + Width = 250, + ListOrderNo = 4, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "Name", + ValueExpr = "Key", + LookupQuery = LookupQueryValues.CustomerValues, + CascadeEmptyFields = "ContactId" + }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "ContactId", + Width = 100, + ListOrderNo = 5, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "Name", + ValueExpr = "Key", + LookupQuery = LookupQueryValues.PartnerContactValues, + CascadeRelationField = "PartnerId", + CascadeFilterOperator="=", + CascadeParentFields = "PartnerId", + }), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Stage", + Width = 100, + ListOrderNo = 6, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.StaticData, + DisplayExpr = "name", + ValueExpr = "key", + LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { + new() { Key="Qualification", Name="Qualification" }, + new() { Key="NeedsAnalysis", Name="NeedsAnalysis" }, + new() { Key="Proposal", Name="Proposal" }, + new() { Key="Negotiation", Name="Negotiation" }, + new() { Key="ClosedWon", Name="ClosedWon" }, + new() { Key="ClosedLost", Name="ClosedLost" }, + }), + }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Int32, + FieldName = "Probability", + Width = 100, + ListOrderNo = 7, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Decimal, + FieldName = "EstimatedValue", + Format = "fixedPoint", + Alignment = "right", + Width = 100, + ListOrderNo = 8, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "CurrencyId", + Width = 100, + ListOrderNo = 9, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Currency), "Id", "Code"), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "ExpectedCloseDate", + Width = 100, + ListOrderNo = 10, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "ActualCloseDate", + Width = 100, + ListOrderNo = 11, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "EmployeeId", + Width = 100, + ListOrderNo = 12, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Employee), "Id", "FullName"), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "TeamCode", + Width = 100, + ListOrderNo = 13, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "Name", + ValueExpr = "Key", + LookupQuery = LookupQueryValues.OrganizationUnitSalesTeamValues, + }), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "SourceId", + Width = 100, + ListOrderNo = 14, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Source), "Id", "Name"), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "LossReasonId", + Width = 100, + ListOrderNo = 15, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.LossReason), "Id", "Name"), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Status", + Width = 100, + ListOrderNo = 16, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto { + DataSourceType = UiLookupDataSourceTypeEnum.StaticData, + DisplayExpr = "name", + ValueExpr = "key", + LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { + new () { Key="Aktif",Name="Aktif" }, + new () { Key="Pasif",Name="Pasif" }, + }), + }), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + ], autoSave: true); + #endregion + + // Sub Forms for Opportunity + await utils.CloneListFormWithFieldsAsync( + _listFormRepository, + _listFormFieldRepository, + listForm.ListFormCode, + JsonSerializer.Serialize(new List() { + new { + TabTitle = "Actions", + TabType = ListFormTabTypeEnum.List, + Code = ListFormCodes.Lists.OpportunityAction, + Relation = new List() { + new { + ParentFieldName = "Id", + ChildFieldName = "OpportunityId" + } + } + }, + new { + TabTitle = "Competitors", + TabType = ListFormTabTypeEnum.List, + Code = ListFormCodes.Lists.OpportunityCompetitor, + Relation = new List() { + new { + ParentFieldName = "Id", + ChildFieldName = "OpportunityId" + } + } + }, + }) + ); + } + #endregion + + #region Action + if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == ListFormCodes.Lists.OpportunityAction)) + { + var listForm = await _listFormRepository.InsertAsync( + new ListForm() + { + ListFormType = ListFormTypeEnum.List, + IsSubForm = true, + LayoutJson = DefaultLayoutJson, + CultureName = LanguageCodes.En, + ListFormCode = ListFormCodes.Lists.OpportunityAction, + Name = AppCodes.Crm.OpportunityAction, + Title = AppCodes.Crm.OpportunityAction, + DataSourceCode = SeedConsts.DataSources.DefaultCode, + IsTenant = true, + IsBranch = false, + IsOrganizationUnit = false, + Description = AppCodes.Crm.OpportunityAction, + SelectCommandType = SelectCommandTypeEnum.Table, + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Action)), + KeyFieldName = "Id", + KeyFieldDbSourceType = DbType.Guid, + DefaultFilter = DefaultFilterJson, + SortMode = GridOptions.SortModeSingle, + FilterRowJson = JsonSerializer.Serialize(new GridFilterRowDto { Visible = true }), + HeaderFilterJson = JsonSerializer.Serialize(new { Visible = true }), + SearchPanelJson = JsonSerializer.Serialize(new { Visible = true }), + GroupPanelJson = JsonSerializer.Serialize(new { Visible = true }), + SelectionJson = DefaultSelectionSingleJson, + ColumnOptionJson = DefaultColumnOptionJson, + PermissionJson = DefaultPermissionJson(AppCodes.Crm.OpportunityAction), + DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Action)), + DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, + PagerOptionJson = DefaultPagerOptionJson, + EditingOptionJson = DefaultEditingOptionJson(AppCodes.Crm.OpportunityAction, 500, 600, true, true, true, true, false), + InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, + EditingFormJson = JsonSerializer.Serialize(new List() + { + new() { + Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ + new EditingFormItemDto { Order = 1, DataField="ActionType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 2, DataField="Subject", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 3, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 4, DataField="EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 5, DataField="ActionDate", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 6, DataField="StartTime", ColSpan = 1, EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 7, DataField="EndTime", ColSpan = 1, EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 8, DataField="Duration", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, + new EditingFormItemDto { Order = 9, DataField="FollowUpDate", ColSpan = 1, EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 10, DataField="FollowUpActivity", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 11, DataField="Outcome", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 12, DataField="NextSteps", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 13, DataField="OpportunityId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + ]} + }), + FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "ActionDate", FieldDbType = DbType.DateTime, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.Value } + }), + } + ); + + #region Action Fields + await _listFormFieldRepository.InsertManyAsync([ + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "Id", + Width = 100, + ListOrderNo = 1, + Visible = false, + IsActive = true, + IsDeleted = false, + SortIndex = 0, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "ActionType", + Width = 100, + ListOrderNo = 2, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.StaticData, + DisplayExpr = "name", + ValueExpr = "key", + LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { + new() { Key="Call", Name="Call" }, + new() { Key="Email", Name="Email" }, + new() { Key="Meeting", Name="Meeting" }, + new() { Key="Task", Name="Task" }, + new() { Key="Note", Name="Note" }, + new() { Key="Demo", Name="Demo" }, + new() { Key="Proposal", Name="Proposal" }, + }), + }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Subject", + Width = 500, + ListOrderNo = 3, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Description", + Width = 100, + ListOrderNo = 4, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "EmployeeId", + Width = 100, + ListOrderNo = 5, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Employee), "Id", "FullName"), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Date, + FieldName = "ActionDate", + Width = 100, + ListOrderNo = 6, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "StartTime", + Width = 100, + ListOrderNo = 7, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "EndTime", + Width = 100, + ListOrderNo = 8, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Int32, + FieldName = "Duration", + Width = 100, + ListOrderNo = 9, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "FollowUpDate", + Width = 100, + ListOrderNo = 10, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "FollowUpActivity", + Width = 200, + ListOrderNo = 11, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Outcome", + Width = 200, + ListOrderNo = 12, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "NextSteps", + Width = 200, + ListOrderNo = 13, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "OpportunityId", + Width = 200, + ListOrderNo = 14, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Opportunity), "Id", "Title"), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + ]); + #endregion + } + #endregion + + #region Competitor + if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == ListFormCodes.Lists.OpportunityCompetitor)) + { + var listForm = await _listFormRepository.InsertAsync( + new ListForm() + { + ListFormType = ListFormTypeEnum.List, + IsSubForm = true, + LayoutJson = DefaultLayoutJson, + CultureName = LanguageCodes.En, + ListFormCode = ListFormCodes.Lists.OpportunityCompetitor, + Name = AppCodes.Crm.OpportunityCompetitor, + Title = AppCodes.Crm.OpportunityCompetitor, + DataSourceCode = SeedConsts.DataSources.DefaultCode, + IsTenant = true, + IsBranch = false, + IsOrganizationUnit = false, + Description = AppCodes.Crm.OpportunityCompetitor, + SelectCommandType = SelectCommandTypeEnum.Table, + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Competitor)), + KeyFieldName = "Id", + KeyFieldDbSourceType = DbType.Guid, + DefaultFilter = DefaultFilterJson, + SortMode = GridOptions.SortModeSingle, + FilterRowJson = JsonSerializer.Serialize(new GridFilterRowDto { Visible = true }), + HeaderFilterJson = JsonSerializer.Serialize(new { Visible = true }), + SearchPanelJson = JsonSerializer.Serialize(new { Visible = true }), + GroupPanelJson = JsonSerializer.Serialize(new { Visible = true }), + SelectionJson = DefaultSelectionSingleJson, + ColumnOptionJson = DefaultColumnOptionJson, + PermissionJson = DefaultPermissionJson(AppCodes.Crm.OpportunityCompetitor), + DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Competitor)), + DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, + PagerOptionJson = DefaultPagerOptionJson, + EditingOptionJson = DefaultEditingOptionJson(AppCodes.Crm.OpportunityCompetitor, 500, 400, true, true, true, true, false), + InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, + EditingFormJson = JsonSerializer.Serialize(new List() + { + new() { + Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ + new EditingFormItemDto { Order = 1, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 2, DataField="Website", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 3, DataField="Strengths", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 4, DataField="Weaknesses", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 5, DataField="MarketShare", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, + ]} + }), + } + ); + + #region Competitor Fields + await _listFormFieldRepository.InsertManyAsync([ + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "Id", + Width = 100, + ListOrderNo = 1, + Visible = false, + IsActive = true, + IsDeleted = false, + SortIndex = 0, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Name", + Width = 300, + ListOrderNo = 2, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Website", + Width = 200, + ListOrderNo = 3, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Strengths", + Width = 300, + ListOrderNo = 4, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Weaknesses", + Width = 300, + ListOrderNo = 5, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Int32, + FieldName = "MarketShare", + Width = 100, + ListOrderNo = 6, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + ]); + #endregion + } + #endregion } } - diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs index fb53a349..f0a451fa 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs @@ -186,11 +186,11 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField="Code", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 4, DataField="DepartmentId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 5, DataField="Level", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField="DepartmentId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 5, DataField="Level", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 6, DataField="MinSalary", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, new EditingFormItemDto { Order = 7, DataField="MaxSalary", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, - new EditingFormItemDto { Order = 8, DataField="CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 8, DataField="CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 9, DataField="RequiredSkills", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, new EditingFormItemDto { Order = 10, DataField="Responsibilities", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, new EditingFormItemDto { Order = 11, DataField="Qualifications", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, @@ -483,9 +483,9 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField="Code", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 4, DataField="ParentDepartmentId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 5, DataField="ManagerId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 6, DataField="CostCenterId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField="ParentDepartmentId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 5, DataField="ManagerId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 6, DataField="CostCenterId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 7, DataField="Budget", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, new EditingFormItemDto { Order = 8, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox} ]} @@ -699,13 +699,13 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField="Code", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 4, DataField="Icon", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField="Icon", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField="Color", ColSpan = 1, EditorType2 = EditorTypes.dxColorBox }, new EditingFormItemDto { Order = 6, DataField="BackgroundColor", ColSpan = 1, EditorType2 = EditorTypes.dxColorBox }, - new EditingFormItemDto { Order = 7, DataField="Category", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 7, DataField="Category", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 8, DataField="Criteria", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, new EditingFormItemDto { Order = 9, DataField="Points", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, - new EditingFormItemDto { Order = 10, DataField="Rarity", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 10, DataField="Rarity", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 11, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, ]} }), @@ -1005,13 +1005,13 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField="Code", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 4, DataField="ParentCostCenterId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 5, DataField="ResponsibleEmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 6, DataField="DepartmentId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 7, DataField="CostCenterType", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField="ParentCostCenterId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 5, DataField="ResponsibleEmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 6, DataField="DepartmentId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 7, DataField="CostCenterType", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 8, DataField="BudgetedAmount", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, new EditingFormItemDto { Order = 9, DataField="ActualAmount", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, - new EditingFormItemDto { Order = 10, DataField="CurrencyId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 10, DataField="CurrencyId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 11, DataField="FiscalYear", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 12, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox} ]} @@ -1306,10 +1306,10 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency ]}, new() { Order=2, Caption="Contact", ColCount=2, ColSpan=1, ItemType="group", Items =[ - new EditingFormItemDto { Order = 1, DataField = "Country", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 2, DataField = "City", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 3, DataField = "District", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 4, DataField = "Street", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 1, DataField = "Country", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 2, DataField = "City", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 3, DataField = "District", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 4, DataField = "Street", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField = "PostalCode", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 6, DataField = "PhoneNumber", ColSpan = 1, EditorType2=EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions }, new EditingFormItemDto { Order = 7, DataField = "MobileNumber", ColSpan = 1, EditorType2=EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions }, @@ -1321,16 +1321,16 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Order=3, Caption="Job", ColCount=2, ColSpan=1, ItemType="group", Items =[ new EditingFormItemDto { Order = 1, DataField = "HireDate", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 2, DataField = "TerminationDate", ColSpan = 1, EditorType2 = EditorTypes.dxDateBox }, - new EditingFormItemDto { Order = 3, DataField = "EmploymentTypeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 4, DataField = "JobPositionId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 5, DataField = "DepartmentId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 3, DataField = "EmploymentTypeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 4, DataField = "JobPositionId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 5, DataField = "DepartmentId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 6, DataField = "WorkLocation", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 7, DataField = "ManagerId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 7, DataField = "ManagerId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 8, DataField = "BaseSalary", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = EditorOptionValues.NumberStandartFormat }, - new EditingFormItemDto { Order = 9, DataField = "CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 10, DataField = "PayrollGroup", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 11, DataField = "BankAccountId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 12, DataField = "BadgeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 9, DataField = "CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 10, DataField = "PayrollGroup", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 11, DataField = "BankAccountId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 12, DataField = "BadgeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, ]}, new() { Order=4, Caption="Emergency", ColCount=1, ColSpan=1, ItemType="group", Items =[ @@ -1340,6 +1340,7 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency ]}, }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "Country", FieldDbType = DbType.String, Value = "TR", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } }), } @@ -2010,8 +2011,8 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ new EditingFormItemDto { Order = 1, DataField = "AppliedDate", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox}, - new EditingFormItemDto { Order = 2, DataField = "EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 3, DataField = "LeaveType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField = "EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 3, DataField = "LeaveType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 4, DataField = "StartDate", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox, EditorScript = EditorScriptValues.CalcTotalDaysFromDates}, new EditingFormItemDto { Order = 5, DataField = "EndDate", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox, EditorScript = EditorScriptValues.CalcTotalDaysFromDates}, new EditingFormItemDto { Order = 6, DataField = "TotalDays", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = EditorOptionValues.Disabled}, @@ -2021,7 +2022,7 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency ]} }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Pending", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Askıda", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "AppliedDate", FieldDbType = DbType.Date, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, new() { FieldName = "IsHalfDay", FieldDbType = DbType.Boolean, Value = "false", CustomValueType = FieldCustomValueTypeEnum.Value } }), @@ -2220,10 +2221,10 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key= "Pending", Name= "Pending" }, - new () { Key= "Approved", Name= "Approved" }, - new () { Key= "Rejected", Name= "Rejected"}, - new () { Key= "Cancelled", Name= "Cancelled" }, + new () { Key= "Askıda", Name= "Askıda" }, + new () { Key= "Onaylı", Name= "Onaylı" }, + new () { Key= "Reddedildi", Name= "Reddedildi"}, + new () { Key= "İptal", Name= "İptal" }, }), }), PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -2336,18 +2337,18 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ new EditingFormItemDto { Order = 1, DataField = "Date", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox}, - new EditingFormItemDto { Order = 2, DataField = "EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField = "EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 4, DataField = "StartTime", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox, EditorOptions = EditorOptionValues.TimeSpanOptions, EditorScript = EditorScriptValues.CalcTotalHoursFromTimes}, new EditingFormItemDto { Order = 5, DataField = "EndTime", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox, EditorOptions = EditorOptionValues.TimeSpanOptions, EditorScript = EditorScriptValues.CalcTotalHoursFromTimes}, new EditingFormItemDto { Order = 6, DataField = "TotalHours", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = EditorOptionValues.Disabled}, new EditingFormItemDto { Order = 7, DataField = "Reason", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextArea}, - new EditingFormItemDto { Order = 8, DataField = "Rate", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox}, + new EditingFormItemDto { Order = 8, DataField = "Rate", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton}, new EditingFormItemDto { Order = 9, DataField = "Amount", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = "{ \"disabled\" : true, \"format\" : { \"type\" : \"fixedPoint\", \"precision\" : 2 } }"}, - new EditingFormItemDto { Order = 10, DataField = "Status", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox}, + new EditingFormItemDto { Order = 10, DataField = "Status", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, ]} }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Pending", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Askıda", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "Date", FieldDbType = DbType.Date, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.CustomKey } }), CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { @@ -2544,10 +2545,10 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key= "Pending", Name= "Pending" }, - new () { Key= "Approved", Name= "Approved" }, - new () { Key= "Rejected", Name= "Rejected"}, - new () { Key= "Cancelled", Name= "Cancelled" }, + new () { Key= "Askıda", Name= "Askıda" }, + new () { Key= "Onaylı", Name= "Onaylı" }, + new () { Key= "Reddedildi", Name= "Reddedildi"}, + new () { Key= "İptal", Name= "İptal" }, }), }), PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -2659,10 +2660,10 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ - new EditingFormItemDto { Order = 1, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 2, DataField = "Category", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 1, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 2, DataField = "Category", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "Amount", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, - new EditingFormItemDto { Order = 4, DataField = "CurrencyId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField = "CurrencyId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField = "RequestDate", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 6, DataField = "Description", ColSpan=1, EditorType2 = EditorTypes.dxTextArea }, new EditingFormItemDto { Order = 7, DataField = "Project", ColSpan=1, EditorType2 = EditorTypes.dxTextBox }, @@ -2672,6 +2673,7 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Askıda", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "RequestDate", FieldDbType = DbType.Date, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.CustomKey } }), CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { @@ -2854,9 +2856,9 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key= "pending", Name= "Pending" }, - new () { Key= "approved", Name= "Approved" }, - new () { Key= "rejected", Name= "Rejected" }, + new () { Key= "Askıda", Name= "Askıda" }, + new () { Key= "Onaylı", Name= "Onaylı" }, + new () { Key= "Reddedildi", Name= "Reddedildi" }, }), }), ColumnCustomizationJson = DefaultColumnCustomizationJson, @@ -2938,9 +2940,9 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items = [ - new EditingFormItemDto { Order = 1, DataField = "EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 1, DataField = "EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 2, DataField = "PeriodYear", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxNumberBox }, - new EditingFormItemDto { Order = 3, DataField = "PeriodMonth", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 3, DataField = "PeriodMonth", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 4, DataField = "PaymentDate", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 5, DataField = "BaseSalary", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = EditorOptionValues.NumberStandartFormat }, new EditingFormItemDto { Order = 6, DataField = "Overtime", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = EditorOptionValues.NumberStandartFormat }, @@ -2953,7 +2955,7 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency ]} }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Draft", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Taslak", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "PeriodYear", FieldDbType = DbType.Int32, Value = "@YEAR", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, new() { FieldName = "PeriodMonth", FieldDbType = DbType.Int32, Value = "@MONTH", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, new() { FieldName = "PaymentDate", FieldDbType = DbType.Date, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, @@ -3244,11 +3246,11 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key= "Draft", Name= "Draft" }, - new () { Key= "Calculated", Name= "Calculated" }, - new () { Key= "Approved", Name= "Approved"}, - new () { Key= "Paid", Name= "Paid" }, - new () { Key= "Cancelled", Name= "Cancelled" }, + new () { Key= "Taslak", Name= "Taslak" }, + new () { Key= "Hesaplandı", Name= "Hesaplandı" }, + new () { Key= "Onaylı", Name= "Onaylı"}, + new () { Key= "Ödendi", Name= "Ödendi" }, + new () { Key= "İptal", Name= "İptal" }, }), }), PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -3451,16 +3453,16 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField = "Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 3, DataField = "TemplateId", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 3, DataField = "TemplateId", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 4, DataField = "StartDate", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 5, DataField = "EndDate", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 6, DataField = "Status", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 7, DataField = "DepartmentId", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 7, DataField = "DepartmentId", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 8, DataField = "TargetEmployees", ColSpan = 1, IsRequired=true, EditorType2 = EditorTypes.dxTagBox }, ]} }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Draft", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Taslak", CustomValueType = FieldCustomValueTypeEnum.Value }, }), CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { new() { @@ -3592,10 +3594,10 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key= "Draft", Name= "Draft" }, - new () { Key= "Active", Name= "Active" }, - new () { Key= "Completed", Name= "Completed"}, - new () { Key= "Cancelled", Name= "Cancelled" }, + new () { Key= "Taslak", Name= "Taslak" }, + new () { Key= "Aktif", Name= "Aktif" }, + new () { Key= "Tamamlandı", Name= "Tamamlandı"}, + new () { Key= "İptal", Name= "İptal" }, }), }), ColumnCustomizationJson = DefaultColumnCustomizationJson, @@ -3684,8 +3686,8 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField = "Title", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField = "Description", ColSpan=1, EditorType2 = EditorTypes.dxTextArea }, new EditingFormItemDto { Order = 3, DataField = "Instructor", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 4, DataField = "Category", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 5, DataField = "Type", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField = "Category", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 5, DataField = "Type", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 6, DataField = "Location", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 7, DataField = "Thumbnail", ColSpan=1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 8, DataField = "Duration", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, @@ -3697,7 +3699,7 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "upcoming", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Yaklaşan", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "MaxParticipants", FieldDbType = DbType.Int32, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value } }), CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { @@ -3960,9 +3962,9 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key= "upcoming", Name= "Upcoming" }, - new () { Key= "ongoing", Name= "Ongoing" }, - new () { Key= "completed", Name="Completed" }, + new () { Key= "Yaklaşan", Name= "Yaklaşan" }, + new () { Key= "Devam eden", Name= "Devam eden" }, + new () { Key= "Tamamlandı", Name="Tamamlandı" }, }), }), ColumnCustomizationJson = DefaultColumnCustomizationJson, @@ -4024,7 +4026,7 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { new() { FieldName = "IsAnonymous", FieldDbType = DbType.Boolean, Value = "false", CustomValueType = FieldCustomValueTypeEnum.Value }, - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "draft", CustomValueType = FieldCustomValueTypeEnum.Value } + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Taslak", CustomValueType = FieldCustomValueTypeEnum.Value } }), CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { new() { @@ -4120,9 +4122,9 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key= "draft", Name= "Draft" }, - new () { Key= "active", Name= "Active" }, - new () { Key= "closed", Name= "Closed" }, + new () { Key= "Taslak", Name= "Taslak" }, + new () { Key= "Aktif", Name= "Aktif" }, + new () { Key= "Kapalı", Name= "Kapalı" }, }), }), ValidationRuleJson = DefaultValidationRuleRequiredJson, @@ -4221,9 +4223,9 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ - new EditingFormItemDto { Order = 1, DataField = "SurveyId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 1, DataField = "SurveyId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 2, DataField = "QuestionText", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 3, DataField = "Type", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 3, DataField = "Type", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 4, DataField = "IsRequired", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxCheckBox } ]} }), @@ -4398,8 +4400,8 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ - new EditingFormItemDto { Order = 1, DataField = "SurveyId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 2, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 1, DataField = "SurveyId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 2, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "SubmissionTime", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 4, DataField = "CreationTime", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox } ]} diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Intranet.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Intranet.cs index dad52ae2..1234f68d 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Intranet.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Intranet.cs @@ -255,7 +255,7 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc new EditingFormItemDto { Order = 2, DataField = "TypeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 4, DataField = "Place", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 5, DataField = "EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 5, DataField = "EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 6, DataField = "Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, new EditingFormItemDto { Order = 7, DataField = "Status", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, new EditingFormItemDto { Order = 8, DataField = "ParticipantsCount", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, @@ -444,9 +444,9 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key="Published",Name="Published" }, - new () { Key="Draft",Name="Draft" }, - new () { Key="Cancelled",Name="Cancelled" }, + new () { Key="Yayımlandı",Name="Yayımlandı" }, + new () { Key="Taslak",Name="Taslak" }, + new () { Key="İptal",Name="İptal" }, }), }), ColumnCustomizationJson = DefaultColumnCustomizationJson, @@ -686,9 +686,9 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ - new EditingFormItemDto {Order=1,DataField="Type", IsRequired = true, ColSpan=1, EditorType2 = EditorTypes.dxSelectBox}, + new EditingFormItemDto {Order=1,DataField="Type", IsRequired = true, ColSpan=1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton}, new EditingFormItemDto {Order=2,DataField="ResourceName", IsRequired = true, ColSpan=1, EditorType2 = EditorTypes.dxTextBox}, - new EditingFormItemDto {Order=3,DataField="EmployeeId", IsRequired = true, ColSpan=1, EditorType2 = EditorTypes.dxSelectBox}, + new EditingFormItemDto {Order=3,DataField="EmployeeId", IsRequired = true, ColSpan=1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton}, new EditingFormItemDto {Order=4,DataField="StartDate", IsRequired = true, ColSpan=1, EditorType2 = EditorTypes.dxDateBox}, new EditingFormItemDto {Order=5,DataField="EndDate", IsRequired = true, ColSpan=1, EditorType2 = EditorTypes.dxDateBox}, new EditingFormItemDto {Order=6,DataField="Purpose", IsRequired = true, ColSpan=1, EditorType2 = EditorTypes.dxTextBox}, @@ -699,7 +699,7 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Pending", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Askıda", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "Participants", FieldDbType = DbType.Int32, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value } }) } @@ -936,7 +936,7 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc Order=1, ColCount=1, ColSpan=1, ItemType="group", Items = [ new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan=1, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField = "Type", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField = "Type", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "DepartureTime", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox, EditorOptions = EditorOptionValues.TimeSpanOptions }, new EditingFormItemDto { Order = 4, DataField = "ArrivalTime", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox, EditorOptions = EditorOptionValues.TimeSpanOptions }, new EditingFormItemDto { Order = 5, DataField = "Capacity", ColSpan=1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, @@ -1163,8 +1163,8 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc new EditingFormItemDto { Order = 2, DataField = "Excerpt", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField = "Content", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxHtmlEditor, EditorOptions = EditorOptionValues.HtmlEditorOptions }, new EditingFormItemDto { Order = 4, DataField = "ImageUrl", ColSpan=1, EditorType2 = EditorTypes.dxTagBox }, - new EditingFormItemDto { Order = 5, DataField = "Category", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 6, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 5, DataField = "Category", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 6, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 7, DataField = "PublishDate", ColSpan=1, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 8, DataField = "ExpiryDate", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 9, DataField = "IsPinned", ColSpan=1, EditorType2 = EditorTypes.dxCheckBox }, @@ -1436,7 +1436,7 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc new EditingFormItemDto { Order = 6, DataField = "VisitDate", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 7, DataField = "CheckIn", ColSpan=1, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 8, DataField = "CheckOut", ColSpan=1, EditorType2 = EditorTypes.dxDateBox }, - new EditingFormItemDto { Order = 9, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 9, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 10, DataField = "Status", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, ]} }), @@ -1444,7 +1444,7 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc { new() { FieldName = "VisitDate", FieldDbType = DbType.Date, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, new() { FieldName = "CheckIn", FieldDbType = DbType.Date, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "checked-in", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Giriş", CustomValueType = FieldCustomValueTypeEnum.Value }, }) } ); @@ -1627,9 +1627,9 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc DisplayExpr = "name", ValueExpr = "key", LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { - new () { Key= "checked-in", Name= "Checked-in" }, - new () { Key= "checked-out", Name= "Checked-out" }, - new () { Key= "scheduled", Name= "Scheduled" }, + new () { Key= "Giriş", Name= "Giriş" }, + new () { Key= "Çıkış", Name= "Çıkış" }, + new () { Key= "Planlandı", Name= "Planlandı" }, }), }), ColumnCustomizationJson = DefaultColumnCustomizationJson, @@ -1681,7 +1681,7 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items = [ - new EditingFormItemDto { Order = 1, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 1, DataField = "EmployeeId", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 2, DataField = "Content", ColSpan=1, IsRequired = true, EditorType2 = EditorTypes.dxHtmlEditor, EditorOptions = EditorOptionValues.HtmlEditorOptions }, new EditingFormItemDto { Order = 3, DataField = "LikeCount", ColSpan=1, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 4, DataField = "IsLiked", ColSpan=1, EditorType2 = EditorTypes.dxCheckBox }, diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Participant.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Participant.cs index b3de71e4..2e19fe64 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Participant.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Participant.cs @@ -81,7 +81,7 @@ public class ListFormSeeder_Participant : IDataSeedContributor, ITransientDepend EditingFormJson = JsonSerializer.Serialize(new List() { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items=[ new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField = "Type", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField = "Type", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "Status", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, ]} }), @@ -580,7 +580,7 @@ public class ListFormSeeder_Participant : IDataSeedContributor, ITransientDepend EditingFormJson = JsonSerializer.Serialize(new List() { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items=[ new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField = "Category", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField = "Category", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "Status", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, ]} }), diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs index 637fd729..ca435098 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs @@ -4009,7 +4009,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField = "Code", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField = "GroupName", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 4, DataField = "CurrencyId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField = "CurrencyId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField = "PhoneCode", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 6, DataField = "TaxLabel", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 7, DataField = "ZipRequired", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_SupplyChain.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_SupplyChain.cs index 9215b053..69e9819d 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_SupplyChain.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_SupplyChain.cs @@ -224,7 +224,7 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend new EditingFormItemDto { Order = 2, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField = "Description", ColSpan = 1, EditorType2=EditorTypes.dxTextArea }, new EditingFormItemDto { Order = 4, DataField = "IsActive", ColSpan = 1, EditorType2=EditorTypes.dxCheckBox }, - new EditingFormItemDto { Order = 5, DataField = "ParentGroupId", ColSpan = 1, EditorType2=EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 5, DataField = "ParentGroupId", ColSpan = 1, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, ]} }), InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, @@ -405,12 +405,12 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend new EditingFormItemDto { Order = 4, DataField = "CostPrice", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 5, DataField = "SalesPrice", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, - new EditingFormItemDto { Order = 6, DataField = "CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 7, DataField = "MaterialTypeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 8, DataField = "MaterialGroupId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 9, DataField = "TrackingType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 6, DataField = "CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 7, DataField = "MaterialTypeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 8, DataField = "MaterialGroupId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 9, DataField = "TrackingType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 10, DataField = "TotalStock", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = EditorOptionValues.Disabled }, - new EditingFormItemDto { Order = 11, DataField = "UomId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 11, DataField = "UomId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 12, DataField = "Barcode", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 13, DataField = "IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, @@ -1080,11 +1080,11 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend new EditingFormItemDto { Order = 1, DataField = "Code", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField = "PartyType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions = EditorOptionValues.Disabled }, - new EditingFormItemDto { Order = 4, DataField = "SectorId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 4, DataField = "SectorId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField = "TaxNumber", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 6, DataField = "TaxOffice", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 7, DataField = "CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 8, DataField = "PaymentTermId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 7, DataField = "CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 8, DataField = "PaymentTermId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 9, DataField = "CreditLimit", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, ] }, @@ -1092,10 +1092,10 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend { Order = 2, Caption = "Address", ColCount = 3, ColSpan = 2, ItemType = "group", Items = [ - new EditingFormItemDto { Order = 10, DataField = "Country", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 11, DataField = "City", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 12, DataField = "District", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 13, DataField = "Street", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 10, DataField = "Country", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 11, DataField = "City", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 12, DataField = "District", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 13, DataField = "Street", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 14, DataField = "Address1", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 15, DataField = "Address2", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 16, DataField = "PostalCode", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, @@ -1110,8 +1110,8 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend { Order = 3, Caption="Supply Card", ColCount = 3, ColSpan = 2, ItemType = "group", Items = [ - new EditingFormItemDto { Order = 22, DataField = "SupplierTypeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 23, DataField = "SupplyCardTypeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 22, DataField = "SupplierTypeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 23, DataField = "SupplyCardTypeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 24, DataField = "CardNumber", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 25, DataField = "ValidFrom", ColSpan = 1, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 26, DataField = "ValidTo", ColSpan = 1, EditorType2 = EditorTypes.dxDateBox }, @@ -1128,7 +1128,7 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend new() { FieldName = "CreditLimit", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "CurrentBalance", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "DiscountRate", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, - new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Active", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Aktif", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "Country", FieldDbType = DbType.String, Value = "TR", CustomValueType = FieldCustomValueTypeEnum.Value }, }), CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { @@ -1773,8 +1773,8 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend new EditingFormItemDto { Order = 4, DataField="SwiftCode", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 5, DataField="AccountOwner", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 6, DataField="BranchName", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 7, DataField="AccountType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 8, DataField="CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 7, DataField="AccountType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 8, DataField="CurrencyId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 9, DataField="Balance", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 10, DataField="OverdraftLimit", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 11, DataField="DailyTransferLimit", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, @@ -2467,8 +2467,8 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items= [ new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField = "DepartmentId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 3, DataField = "MaterialTypeId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField = "DepartmentId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 3, DataField = "MaterialTypeId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 4, DataField = "AmountThreshold", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, new EditingFormItemDto { Order = 5, DataField = "IsActive", ColSpan = 1, EditorType2=EditorTypes.dxCheckBox }, ]} diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/MenusData.json b/api/src/Erp.Platform.DbMigrator/Seeds/MenusData.json index 14097004..dda3e4db 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/MenusData.json +++ b/api/src/Erp.Platform.DbMigrator/Seeds/MenusData.json @@ -791,97 +791,6 @@ "routeType": "protected", "authority": null }, - { - "key": "admin.crm.customers", - "path": "/admin/crm/customers", - "componentPath": "@/views/crm/components/CustomerListWithToggle", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.customersNew", - "path": "/admin/crm/customers/new", - "componentPath": "@/views/crm/components/CustomerForm", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.customersEdit", - "path": "/admin/crm/customers/edit/:id", - "componentPath": "@/views/crm/components/CustomerEdit", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.customersDetail", - "path": "/admin/crm/customers/:id", - "componentPath": "@/views/crm/components/CustomerView", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.salesTeams", - "path": "/admin/crm/sales-teams", - "componentPath": "@/views/crm/components/SalesTeams", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.salesTeamsNew", - "path": "/admin/crm/sales-teams/new", - "componentPath": "@/views/crm/components/SalesTeamCreate", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.salesTeamsEdit", - "path": "/admin/crm/sales-teams/edit/:id", - "componentPath": "@/views/crm/components/SalesTeamEdit", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.salesTeamsDetail", - "path": "/admin/crm/sales-teams/:id", - "componentPath": "@/views/crm/components/SalesTeamView", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.lossReasons", - "path": "/admin/crm/loss-reasons", - "componentPath": "@/views/crm/components/LossReasons", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.opportunities", - "path": "/admin/crm/opportunities", - "componentPath": "@/views/crm/components/OpportunityManagement", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.opportunitiesNew", - "path": "/admin/crm/opportunities/new", - "componentPath": "@/views/crm/components/OpportunityManagement", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.opportunitiesEdit", - "path": "/admin/crm/opportunities/edit/:id", - "componentPath": "@/views/crm/components/OpportunityManagement", - "routeType": "protected", - "authority": null - }, - { - "key": "admin.crm.opportunitiesDetail", - "path": "/admin/crm/opportunities/:id", - "componentPath": "@/views/crm/components/OpportunityManagement", - "routeType": "protected", - "authority": null - }, { "key": "admin.crm.activities", "path": "/admin/crm/activities", @@ -2257,7 +2166,7 @@ "Code": "App.Crm.Opportunity", "DisplayName": "App.Crm.Opportunity", "Order": 6, - "Url": "/admin/crm/opportunities", + "Url": "/admin/list/list-opportunity", "Icon": "FcIdea", "RequiredPermissionName": "App.Crm.Opportunity", "IsDisabled": false diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/PermissionsData.json b/api/src/Erp.Platform.DbMigrator/Seeds/PermissionsData.json index 2f40b51e..db548e43 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/PermissionsData.json +++ b/api/src/Erp.Platform.DbMigrator/Seeds/PermissionsData.json @@ -9967,6 +9967,135 @@ "MultiTenancySide": 3, "MenuGroup": "Erp" }, + + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityAction", + "ParentName": null, + "DisplayName": "App.Crm.OpportunityAction", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityAction.Create", + "ParentName": "App.Crm.OpportunityAction", + "DisplayName": "Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityAction.Update", + "ParentName": "App.Crm.OpportunityAction", + "DisplayName": "Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityAction.Delete", + "ParentName": "App.Crm.OpportunityAction", + "DisplayName": "Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityAction.Export", + "ParentName": "App.Crm.OpportunityAction", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityAction.Import", + "ParentName": "App.Crm.OpportunityAction", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityAction.Activity", + "ParentName": "App.Crm.OpportunityAction", + "DisplayName": "Activity", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityCompetitor", + "ParentName": null, + "DisplayName": "App.Crm.OpportunityCompetitor", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityCompetitor.Create", + "ParentName": "App.Crm.OpportunityCompetitor", + "DisplayName": "Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityCompetitor.Update", + "ParentName": "App.Crm.OpportunityCompetitor", + "DisplayName": "Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityCompetitor.Delete", + "ParentName": "App.Crm.OpportunityCompetitor", + "DisplayName": "Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityCompetitor.Export", + "ParentName": "App.Crm.OpportunityCompetitor", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityCompetitor.Import", + "ParentName": "App.Crm.OpportunityCompetitor", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Crm", + "Name": "App.Crm.OpportunityCompetitor.Activity", + "ParentName": "App.Crm.OpportunityCompetitor", + "DisplayName": "Activity", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { "GroupName": "App.Crm", "Name": "App.Crm.Activities", @@ -11039,4 +11168,4 @@ "MenuGroup": "Erp" } ] -} \ No newline at end of file +} diff --git a/api/src/Erp.Platform.Domain.Shared/Enums/TableNameEnum.cs b/api/src/Erp.Platform.Domain.Shared/Enums/TableNameEnum.cs index 255d33bb..ef9735cb 100644 --- a/api/src/Erp.Platform.Domain.Shared/Enums/TableNameEnum.cs +++ b/api/src/Erp.Platform.Domain.Shared/Enums/TableNameEnum.cs @@ -151,5 +151,8 @@ public enum TableNameEnum MaterialSpecification, Approval, ApprovalStep, - LossReason + LossReason, + Opportunity, + Action, + Competitor } diff --git a/api/src/Erp.Platform.Domain.Shared/PlatformConsts.cs b/api/src/Erp.Platform.Domain.Shared/PlatformConsts.cs index 5bae27a9..368319da 100644 --- a/api/src/Erp.Platform.Domain.Shared/PlatformConsts.cs +++ b/api/src/Erp.Platform.Domain.Shared/PlatformConsts.cs @@ -524,6 +524,9 @@ public static class PlatformConsts public const string CustomerSegment = "list-customersegment"; public const string Customer = "list-customer"; public const string LossReason = "list-lossreason"; + public const string Opportunity = "list-opportunity"; + public const string OpportunityAction = "list-opportunityaction"; + public const string OpportunityCompetitor = "list-opportunitycompetitor"; } } diff --git a/api/src/Erp.Platform.Domain.Shared/TableNameResolver.cs b/api/src/Erp.Platform.Domain.Shared/TableNameResolver.cs index 6f189be1..1faff570 100644 --- a/api/src/Erp.Platform.Domain.Shared/TableNameResolver.cs +++ b/api/src/Erp.Platform.Domain.Shared/TableNameResolver.cs @@ -178,6 +178,9 @@ public static class TableNameResolver { nameof(TableNameEnum.CustomerSegment), (TablePrefix.TenantByName, MenuPrefix.Crm) }, { nameof(TableNameEnum.CustomerType), (TablePrefix.TenantByName, MenuPrefix.Crm) }, { nameof(TableNameEnum.LossReason), (TablePrefix.TenantByName, MenuPrefix.Crm) }, + { nameof(TableNameEnum.Opportunity), (TablePrefix.TenantByName, MenuPrefix.Crm) }, + { nameof(TableNameEnum.Action), (TablePrefix.TenantByName, MenuPrefix.Crm) }, + { nameof(TableNameEnum.Competitor), (TablePrefix.TenantByName, MenuPrefix.Crm) }, // 🔹 ACCOUNTING { nameof(TableNameEnum.Bank), (TablePrefix.TenantByName, MenuPrefix.Accounting) }, diff --git a/api/src/Erp.Platform.Domain/Data/SeedConsts.cs b/api/src/Erp.Platform.Domain/Data/SeedConsts.cs index 500953cb..108333cc 100644 --- a/api/src/Erp.Platform.Domain/Data/SeedConsts.cs +++ b/api/src/Erp.Platform.Domain/Data/SeedConsts.cs @@ -494,6 +494,9 @@ public static class SeedConsts public const string CustomerSegment = Default + ".CustomerSegment"; public const string Customer = Default + ".Customer"; public const string LossReason = Default + ".LossReason"; + public const string Opportunity = Default + ".Opportunity"; + public const string OpportunityAction = Default + ".OpportunityAction"; + public const string OpportunityCompetitor = Default + ".OpportunityCompetitor"; } public static class SupplyChain diff --git a/api/src/Erp.Platform.Domain/Entities/Host/Currency.cs b/api/src/Erp.Platform.Domain/Entities/Host/Currency.cs index 0286cbc8..6ab7e7b5 100644 --- a/api/src/Erp.Platform.Domain/Entities/Host/Currency.cs +++ b/api/src/Erp.Platform.Domain/Entities/Host/Currency.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Volo.Abp.Domain.Entities.Auditing; namespace Erp.Platform.Entities; @@ -11,5 +12,7 @@ public class Currency : FullAuditedEntity public decimal Rate { get; set; } // TRY başına değer public bool IsActive { get; set; } public DateTime? LastUpdated { get; set; } + + public ICollection Opportunities { get; set; } } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Administration/CrudMigration.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Administration/CrudMigration.cs index da9ed369..f9335f5c 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Administration/CrudMigration.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Administration/CrudMigration.cs @@ -12,7 +12,7 @@ public class CrudMigration : AuditedEntity, IMultiTenant public string EntityName { get; set; } = string.Empty; public string FileName { get; set; } = string.Empty; public string SqlScript { get; set; } = string.Empty; - public string Status { get; set; } = "pending"; // "pending" | "applied" | "failed" + public string Status { get; set; } = "Askıda"; // "pending" | "applied" | "failed" public DateTime? AppliedAt { get; set; } public string? ErrorMessage { get; set; } public virtual CustomEntity Entity { get; set; } = null!; diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Administration/CustomEntity.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Administration/CustomEntity.cs index da9241a1..6941ac2f 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Administration/CustomEntity.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Administration/CustomEntity.cs @@ -17,9 +17,9 @@ public class CustomEntity : FullAuditedEntity, IMultiTenant public bool IsActive { get; set; } = true; public bool IsFullAuditedEntity { get; set; } = true; public bool IsMultiTenant { get; set; } = false; - public string MigrationStatus { get; set; } = "pending"; + public string MigrationStatus { get; set; } = "Askıda"; public Guid? MigrationId { get; set; } - public string EndpointStatus { get; set; } = "pending"; // "pending" | "applied" | "failed" + public string EndpointStatus { get; set; } = "Askıda"; // "pending" | "applied" | "failed" public virtual ICollection Fields { get; set; } = []; diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Action.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Action.cs new file mode 100644 index 00000000..b78e85fc --- /dev/null +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Action.cs @@ -0,0 +1,29 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Erp.Platform.Entities; + +public class Action : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public Guid? OpportunityId { get; set; } + public Opportunity? Opportunity { get; set; } + + public string ActionType { get; set; } //Call, Email, Meeting, Task, Note, Demo, Proposal + public string Subject { get; set; } + public string Description { get; set; } + + public Guid EmployeeId { get; set; } + + public DateTime ActionDate { get; set; } + public DateTime? StartTime { get; set; } + public DateTime? EndTime { get; set; } + public int? Duration { get; set; } + + public DateTime? FollowUpDate { get; set; } + public string FollowUpActivity { get; set; } // Takip Aktivitesi + public string Outcome { get; set; } // Sonuç + public string NextSteps { get; set; } // Sonraki Adımlar +} diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Competitor.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Competitor.cs new file mode 100644 index 00000000..ce242ab7 --- /dev/null +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Competitor.cs @@ -0,0 +1,19 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Erp.Platform.Entities; + +public class Competitor : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public Guid? OpportunityId { get; set; } + public Opportunity? Opportunity { get; set; } + + public string Name { get; set; } + public string Website { get; set; } // Web Sitesi + public string Strengths { get; set; } // Güçlü Yönler + public string Weaknesses { get; set; } // Zayıf Yönler + public int? MarketShare { get; set; } // Pazar Payı Yüzdesi +} diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/LossReason.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/LossReason.cs index 0ec15838..aac2ea47 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/LossReason.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/LossReason.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; @@ -13,4 +14,6 @@ public class LossReason : FullAuditedEntity, IMultiTenant public string Description { get; set; } public string Category { get; set; } public bool IsActive { get; set; } + + public ICollection Opportunities { get; set; } } \ No newline at end of file diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Opportunity.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Opportunity.cs new file mode 100644 index 00000000..f89d8f3c --- /dev/null +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Crm/Opportunity.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Erp.Platform.Entities; + +public class Opportunity : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public string Title { get; set; } + public string Description { get; set; } + + public Guid PartnerId { get; set; } + public Guid? ContactId { get; set; } + + // Fırsat Aşaması + public string Stage { get; set; } //Qualification, NeedsAnalysis, Proposal, Negotiation, ClosedWon, ClosedLost + + public int Probability { get; set; } // Başarı Olasılığı Yüzdesi + public decimal EstimatedValue { get; set; } // Tahmini Değer + + public Guid? CurrencyId { get; set; } + public Currency? Currency { get; set; } + + public DateTime ExpectedCloseDate { get; set; } // Beklenen Kapanış Tarihi + public DateTime? ActualCloseDate { get; set; } // Gerçekleşen Kapanış Tarihi + + public Guid? EmployeeId { get; set; } + public Employee? Employee { get; set; } + public string TeamCode { get; set; } + + public Guid SourceId { get; set; } + public Source Source { get; set; } + + public Guid? LossReasonId { get; set; } // Kaybetme Nedeni + public LossReason LossReason { get; set; } + + public string Status { get; set; } // Durum + + public ICollection Actions { get; set; } //Aktiviteler + public ICollection Competitors { get; set; } //Rakipler + + public Opportunity() + { + Actions = []; + Competitors = []; + } +} diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Hr/Employee.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Hr/Employee.cs index 2e86b0fa..0622ecf2 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Hr/Employee.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Hr/Employee.cs @@ -75,6 +75,7 @@ public class Employee : FullAuditedEntity, IMultiTenant public ICollection SurveyResponses { get; set; } public ICollection Partners { get; set; } public ICollection BlogPosts { get; set; } + public ICollection Opportunities { get; set; } } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Participant/Source.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Participant/Source.cs index 7941aaad..e51f075f 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Participant/Source.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Participant/Source.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; @@ -12,5 +13,7 @@ public class Source : FullAuditedEntity, IMultiTenant public string Status { get; set; } // Durum Guid? IMultiTenant.TenantId => TenantId; + + public ICollection Opportunities { get; set; } } diff --git a/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index d9459f61..916b8920 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -218,6 +218,9 @@ public class PlatformDbContext : #region Crm public DbSet LostReasons { get; set; } + public DbSet Opportunities { get; set; } + public DbSet Actions { get; set; } + public DbSet Competitors { get; set; } #endregion #region Accounting @@ -259,7 +262,7 @@ public class PlatformDbContext : builder.ConfigureSettings(); builder.ConfigureMailQueue(); builder.ConfigureNotification(); - + //Saas builder.Entity(b => { @@ -2546,7 +2549,7 @@ public class PlatformDbContext : b.HasOne(x => x.MaterialType) .WithMany(x => x.ApprovalWorkflows) .HasForeignKey(x => x.MaterialTypeId) - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.Restrict); }); builder.Entity(b => @@ -2574,6 +2577,56 @@ public class PlatformDbContext : b.Property(x => x.Description).HasMaxLength(500); b.Property(x => x.Category).HasMaxLength(50).IsRequired(); }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Opportunity)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.Title).IsRequired().HasMaxLength(200); + b.Property(x => x.Description).HasMaxLength(1000); + b.Property(x => x.PartnerId).IsRequired(); + b.Property(x => x.Stage).IsRequired().HasMaxLength(50); + b.Property(x => x.Probability).HasDefaultValue(0); + b.Property(x => x.EstimatedValue).HasPrecision(18, 2).HasDefaultValue(0); + b.Property(x => x.ExpectedCloseDate).IsRequired(); + b.Property(x => x.CurrencyId).IsRequired(); + b.Property(x => x.SourceId).IsRequired(); + b.Property(x => x.Status).IsRequired().HasMaxLength(50); + }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Action)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.ActionType).IsRequired().HasMaxLength(50); + b.Property(x => x.Subject).IsRequired().HasMaxLength(200); + b.Property(x => x.Description).HasMaxLength(1000); + b.Property(x => x.EmployeeId).IsRequired(); + b.Property(x => x.ActionDate).IsRequired(); + + b.HasOne(x => x.Opportunity) + .WithMany(x => x.Actions) + .HasForeignKey(x => x.OpportunityId) + .OnDelete(DeleteBehavior.Cascade); + }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Competitor)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.Name).IsRequired().HasMaxLength(200); + b.Property(x => x.Website).HasMaxLength(300); + b.Property(x => x.Strengths).HasMaxLength(2000); + b.Property(x => x.Weaknesses).HasMaxLength(2000); + + b.HasOne(x => x.Opportunity) + .WithMany(x => x.Competitors) + .HasForeignKey(x => x.OpportunityId) + .OnDelete(DeleteBehavior.Cascade); + }); } } diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251113203111_Initial.Designer.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251114120401_Initial.Designer.cs similarity index 97% rename from api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251113203111_Initial.Designer.cs rename to api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251114120401_Initial.Designer.cs index b3e3237a..b0412def 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251113203111_Initial.Designer.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251114120401_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Erp.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20251113203111_Initial")] + [Migration("20251114120401_Initial")] partial class Initial { /// @@ -625,6 +625,96 @@ namespace Erp.Platform.Migrations b.ToTable("Adm_T_About", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Action", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActionDate") + .HasColumnType("datetime2"); + + b.Property("ActionType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + 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("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Duration") + .HasColumnType("int"); + + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("FollowUpActivity") + .HasColumnType("nvarchar(max)"); + + b.Property("FollowUpDate") + .HasColumnType("datetime2"); + + 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("NextSteps") + .HasColumnType("nvarchar(max)"); + + b.Property("OpportunityId") + .HasColumnType("uniqueidentifier"); + + b.Property("Outcome") + .HasColumnType("nvarchar(max)"); + + b.Property("StartTime") + .HasColumnType("datetime2"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("OpportunityId"); + + b.ToTable("Crm_T_Action", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Activity", b => { b.Property("Id") @@ -2291,6 +2381,75 @@ namespace Erp.Platform.Migrations b.ToTable("Crd_T_ClassroomParticipant", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Competitor", 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("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MarketShare") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("OpportunityId") + .HasColumnType("uniqueidentifier"); + + b.Property("Strengths") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Weaknesses") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("Website") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.HasKey("Id"); + + b.HasIndex("OpportunityId"); + + b.ToTable("Crm_T_Competitor", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Contact", b => { b.Property("Id") @@ -6475,6 +6634,115 @@ namespace Erp.Platform.Migrations b.ToTable("Prt_T_NoteType", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Opportunity", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActualCloseDate") + .HasColumnType("datetime2"); + + b.Property("ContactId") + .HasColumnType("uniqueidentifier"); + + 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(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("EstimatedValue") + .ValueGeneratedOnAdd() + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasDefaultValue(0m); + + b.Property("ExpectedCloseDate") + .HasColumnType("datetime2"); + + 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("LossReasonId") + .HasColumnType("uniqueidentifier"); + + b.Property("PartnerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Probability") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("SourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Stage") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TeamCode") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("Id"); + + b.HasIndex("CurrencyId"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("LossReasonId"); + + b.HasIndex("SourceId"); + + b.ToTable("Crm_T_Opportunity", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Order", b => { b.Property("Id") @@ -12882,6 +13150,16 @@ namespace Erp.Platform.Migrations b.Navigation("NotificationRule"); }); + modelBuilder.Entity("Erp.Platform.Entities.Action", b => + { + b.HasOne("Erp.Platform.Entities.Opportunity", "Opportunity") + .WithMany("Actions") + .HasForeignKey("OpportunityId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Opportunity"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Announcement", b => { b.HasOne("Erp.Platform.Entities.Employee", "Employee") @@ -13058,6 +13336,16 @@ namespace Erp.Platform.Migrations b.Navigation("Session"); }); + modelBuilder.Entity("Erp.Platform.Entities.Competitor", b => + { + b.HasOne("Erp.Platform.Entities.Opportunity", "Opportunity") + .WithMany("Competitors") + .HasForeignKey("OpportunityId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Opportunity"); + }); + modelBuilder.Entity("Erp.Platform.Entities.CostCenter", b => { b.HasOne("Erp.Platform.Entities.Department", "Department") @@ -13414,6 +13702,37 @@ namespace Erp.Platform.Migrations b.Navigation("Branch"); }); + modelBuilder.Entity("Erp.Platform.Entities.Opportunity", b => + { + b.HasOne("Erp.Platform.Entities.Currency", "Currency") + .WithMany("Opportunities") + .HasForeignKey("CurrencyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Employee", "Employee") + .WithMany("Opportunities") + .HasForeignKey("EmployeeId"); + + b.HasOne("Erp.Platform.Entities.LossReason", "LossReason") + .WithMany("Opportunities") + .HasForeignKey("LossReasonId"); + + b.HasOne("Erp.Platform.Entities.Source", "Source") + .WithMany("Opportunities") + .HasForeignKey("SourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Currency"); + + b.Navigation("Employee"); + + b.Navigation("LossReason"); + + b.Navigation("Source"); + }); + modelBuilder.Entity("Erp.Platform.Entities.OrderItem", b => { b.HasOne("Erp.Platform.Entities.Order", "Order") @@ -14116,6 +14435,11 @@ namespace Erp.Platform.Migrations b.Navigation("Cities"); }); + modelBuilder.Entity("Erp.Platform.Entities.Currency", b => + { + b.Navigation("Opportunities"); + }); + modelBuilder.Entity("Erp.Platform.Entities.CustomEntity", b => { b.Navigation("Fields"); @@ -14150,6 +14474,8 @@ namespace Erp.Platform.Migrations b.Navigation("Leaves"); + b.Navigation("Opportunities"); + b.Navigation("Overtimes"); b.Navigation("Partners"); @@ -14178,6 +14504,11 @@ namespace Erp.Platform.Migrations b.Navigation("Events"); }); + modelBuilder.Entity("Erp.Platform.Entities.LossReason", b => + { + b.Navigation("Opportunities"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Material", b => { b.Navigation("AlternativeUoms"); @@ -14201,6 +14532,13 @@ namespace Erp.Platform.Migrations b.Navigation("Materials"); }); + modelBuilder.Entity("Erp.Platform.Entities.Opportunity", b => + { + b.Navigation("Actions"); + + b.Navigation("Competitors"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Order", b => { b.Navigation("Items"); @@ -14277,6 +14615,11 @@ namespace Erp.Platform.Migrations b.Navigation("Media"); }); + modelBuilder.Entity("Erp.Platform.Entities.Source", b => + { + b.Navigation("Opportunities"); + }); + modelBuilder.Entity("Erp.Platform.Entities.SupplyCardType", b => { b.Navigation("Partners"); diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251113203111_Initial.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251114120401_Initial.cs similarity index 97% rename from api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251113203111_Initial.cs rename to api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251114120401_Initial.cs index e22e4abd..8239a34a 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251113203111_Initial.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251114120401_Initial.cs @@ -4439,6 +4439,114 @@ namespace Erp.Platform.Migrations onDelete: ReferentialAction.Restrict); }); + migrationBuilder.CreateTable( + name: "Crm_T_Action", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + OpportunityId = table.Column(type: "uniqueidentifier", nullable: true), + ActionType = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Subject = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + Description = table.Column(type: "nvarchar(1000)", maxLength: 1000, nullable: true), + EmployeeId = table.Column(type: "uniqueidentifier", nullable: false), + ActionDate = table.Column(type: "datetime2", nullable: false), + StartTime = table.Column(type: "datetime2", nullable: true), + EndTime = table.Column(type: "datetime2", nullable: true), + Duration = table.Column(type: "int", nullable: true), + FollowUpDate = table.Column(type: "datetime2", nullable: true), + FollowUpActivity = table.Column(type: "nvarchar(max)", nullable: true), + Outcome = table.Column(type: "nvarchar(max)", nullable: true), + NextSteps = table.Column(type: "nvarchar(max)", 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_Crm_T_Action", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Crm_T_Competitor", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + OpportunityId = table.Column(type: "uniqueidentifier", nullable: true), + Name = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + Website = table.Column(type: "nvarchar(300)", maxLength: 300, nullable: true), + Strengths = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), + Weaknesses = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), + MarketShare = table.Column(type: "int", 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_Crm_T_Competitor", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Crm_T_Opportunity", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Title = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + Description = table.Column(type: "nvarchar(1000)", maxLength: 1000, nullable: true), + PartnerId = table.Column(type: "uniqueidentifier", nullable: false), + ContactId = table.Column(type: "uniqueidentifier", nullable: true), + Stage = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Probability = table.Column(type: "int", nullable: false, defaultValue: 0), + EstimatedValue = table.Column(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false, defaultValue: 0m), + CurrencyId = table.Column(type: "uniqueidentifier", nullable: false), + ExpectedCloseDate = table.Column(type: "datetime2", nullable: false), + ActualCloseDate = table.Column(type: "datetime2", nullable: true), + EmployeeId = table.Column(type: "uniqueidentifier", nullable: true), + TeamCode = table.Column(type: "nvarchar(max)", nullable: true), + SourceId = table.Column(type: "uniqueidentifier", nullable: false), + LossReasonId = table.Column(type: "uniqueidentifier", nullable: true), + Status = table.Column(type: "nvarchar(50)", maxLength: 50, 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_Crm_T_Opportunity", x => x.Id); + table.ForeignKey( + name: "FK_Crm_T_Opportunity_Crm_T_LossReason_LossReasonId", + column: x => x.LossReasonId, + principalTable: "Crm_T_LossReason", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Crm_T_Opportunity_Prt_T_Source_SourceId", + column: x => x.SourceId, + principalTable: "Prt_T_Source", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Crm_T_Opportunity_Sas_H_Currency_CurrencyId", + column: x => x.CurrencyId, + principalTable: "Sas_H_Currency", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "Hr_T_CostCenter", columns: table => new @@ -5830,6 +5938,36 @@ namespace Erp.Platform.Migrations table: "Crd_T_QuestionOption", column: "QuestionId"); + migrationBuilder.CreateIndex( + name: "IX_Crm_T_Action_OpportunityId", + table: "Crm_T_Action", + column: "OpportunityId"); + + migrationBuilder.CreateIndex( + name: "IX_Crm_T_Competitor_OpportunityId", + table: "Crm_T_Competitor", + column: "OpportunityId"); + + migrationBuilder.CreateIndex( + name: "IX_Crm_T_Opportunity_CurrencyId", + table: "Crm_T_Opportunity", + column: "CurrencyId"); + + migrationBuilder.CreateIndex( + name: "IX_Crm_T_Opportunity_EmployeeId", + table: "Crm_T_Opportunity", + column: "EmployeeId"); + + migrationBuilder.CreateIndex( + name: "IX_Crm_T_Opportunity_LossReasonId", + table: "Crm_T_Opportunity", + column: "LossReasonId"); + + migrationBuilder.CreateIndex( + name: "IX_Crm_T_Opportunity_SourceId", + table: "Crm_T_Opportunity", + column: "SourceId"); + migrationBuilder.CreateIndex( name: "IX_Hr_T_CostCenter_DepartmentId", table: "Hr_T_CostCenter", @@ -6336,6 +6474,29 @@ namespace Erp.Platform.Migrations principalTable: "Scp_T_Material", principalColumn: "Id"); + migrationBuilder.AddForeignKey( + name: "FK_Crm_T_Action_Crm_T_Opportunity_OpportunityId", + table: "Crm_T_Action", + column: "OpportunityId", + principalTable: "Crm_T_Opportunity", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Crm_T_Competitor_Crm_T_Opportunity_OpportunityId", + table: "Crm_T_Competitor", + column: "OpportunityId", + principalTable: "Crm_T_Opportunity", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Crm_T_Opportunity_Hr_T_Employee_EmployeeId", + table: "Crm_T_Opportunity", + column: "EmployeeId", + principalTable: "Hr_T_Employee", + principalColumn: "Id"); + migrationBuilder.AddForeignKey( name: "FK_Hr_T_CostCenter_Hr_T_Department_DepartmentId", table: "Hr_T_CostCenter", @@ -6564,7 +6725,10 @@ namespace Erp.Platform.Migrations name: "Crd_T_QuestionTag"); migrationBuilder.DropTable( - name: "Crm_T_LossReason"); + name: "Crm_T_Action"); + + migrationBuilder.DropTable( + name: "Crm_T_Competitor"); migrationBuilder.DropTable( name: "Hr_T_Expense"); @@ -6665,9 +6829,6 @@ namespace Erp.Platform.Migrations migrationBuilder.DropTable( name: "Prt_T_SalesRejectionReason"); - migrationBuilder.DropTable( - name: "Prt_T_Source"); - migrationBuilder.DropTable( name: "Sas_H_ContactTag"); @@ -6779,6 +6940,9 @@ namespace Erp.Platform.Migrations migrationBuilder.DropTable( name: "Crd_T_Question"); + migrationBuilder.DropTable( + name: "Crm_T_Opportunity"); + migrationBuilder.DropTable( name: "Hr_T_Payroll"); @@ -6860,6 +7024,12 @@ namespace Erp.Platform.Migrations migrationBuilder.DropTable( name: "Crd_T_QuestionPool"); + migrationBuilder.DropTable( + name: "Crm_T_LossReason"); + + migrationBuilder.DropTable( + name: "Prt_T_Source"); + migrationBuilder.DropTable( name: "Hr_T_Survey"); diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 06569cfb..5a338019 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -622,6 +622,96 @@ namespace Erp.Platform.Migrations b.ToTable("Adm_T_About", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Action", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActionDate") + .HasColumnType("datetime2"); + + b.Property("ActionType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + 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("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Duration") + .HasColumnType("int"); + + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("FollowUpActivity") + .HasColumnType("nvarchar(max)"); + + b.Property("FollowUpDate") + .HasColumnType("datetime2"); + + 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("NextSteps") + .HasColumnType("nvarchar(max)"); + + b.Property("OpportunityId") + .HasColumnType("uniqueidentifier"); + + b.Property("Outcome") + .HasColumnType("nvarchar(max)"); + + b.Property("StartTime") + .HasColumnType("datetime2"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("OpportunityId"); + + b.ToTable("Crm_T_Action", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Activity", b => { b.Property("Id") @@ -2288,6 +2378,75 @@ namespace Erp.Platform.Migrations b.ToTable("Crd_T_ClassroomParticipant", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Competitor", 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("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MarketShare") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("OpportunityId") + .HasColumnType("uniqueidentifier"); + + b.Property("Strengths") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Weaknesses") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("Website") + .HasMaxLength(300) + .HasColumnType("nvarchar(300)"); + + b.HasKey("Id"); + + b.HasIndex("OpportunityId"); + + b.ToTable("Crm_T_Competitor", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Contact", b => { b.Property("Id") @@ -6472,6 +6631,115 @@ namespace Erp.Platform.Migrations b.ToTable("Prt_T_NoteType", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Opportunity", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActualCloseDate") + .HasColumnType("datetime2"); + + b.Property("ContactId") + .HasColumnType("uniqueidentifier"); + + 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(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("EstimatedValue") + .ValueGeneratedOnAdd() + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasDefaultValue(0m); + + b.Property("ExpectedCloseDate") + .HasColumnType("datetime2"); + + 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("LossReasonId") + .HasColumnType("uniqueidentifier"); + + b.Property("PartnerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Probability") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("SourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Stage") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TeamCode") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("Id"); + + b.HasIndex("CurrencyId"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("LossReasonId"); + + b.HasIndex("SourceId"); + + b.ToTable("Crm_T_Opportunity", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Order", b => { b.Property("Id") @@ -12879,6 +13147,16 @@ namespace Erp.Platform.Migrations b.Navigation("NotificationRule"); }); + modelBuilder.Entity("Erp.Platform.Entities.Action", b => + { + b.HasOne("Erp.Platform.Entities.Opportunity", "Opportunity") + .WithMany("Actions") + .HasForeignKey("OpportunityId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Opportunity"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Announcement", b => { b.HasOne("Erp.Platform.Entities.Employee", "Employee") @@ -13055,6 +13333,16 @@ namespace Erp.Platform.Migrations b.Navigation("Session"); }); + modelBuilder.Entity("Erp.Platform.Entities.Competitor", b => + { + b.HasOne("Erp.Platform.Entities.Opportunity", "Opportunity") + .WithMany("Competitors") + .HasForeignKey("OpportunityId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Opportunity"); + }); + modelBuilder.Entity("Erp.Platform.Entities.CostCenter", b => { b.HasOne("Erp.Platform.Entities.Department", "Department") @@ -13411,6 +13699,37 @@ namespace Erp.Platform.Migrations b.Navigation("Branch"); }); + modelBuilder.Entity("Erp.Platform.Entities.Opportunity", b => + { + b.HasOne("Erp.Platform.Entities.Currency", "Currency") + .WithMany("Opportunities") + .HasForeignKey("CurrencyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Employee", "Employee") + .WithMany("Opportunities") + .HasForeignKey("EmployeeId"); + + b.HasOne("Erp.Platform.Entities.LossReason", "LossReason") + .WithMany("Opportunities") + .HasForeignKey("LossReasonId"); + + b.HasOne("Erp.Platform.Entities.Source", "Source") + .WithMany("Opportunities") + .HasForeignKey("SourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Currency"); + + b.Navigation("Employee"); + + b.Navigation("LossReason"); + + b.Navigation("Source"); + }); + modelBuilder.Entity("Erp.Platform.Entities.OrderItem", b => { b.HasOne("Erp.Platform.Entities.Order", "Order") @@ -14113,6 +14432,11 @@ namespace Erp.Platform.Migrations b.Navigation("Cities"); }); + modelBuilder.Entity("Erp.Platform.Entities.Currency", b => + { + b.Navigation("Opportunities"); + }); + modelBuilder.Entity("Erp.Platform.Entities.CustomEntity", b => { b.Navigation("Fields"); @@ -14147,6 +14471,8 @@ namespace Erp.Platform.Migrations b.Navigation("Leaves"); + b.Navigation("Opportunities"); + b.Navigation("Overtimes"); b.Navigation("Partners"); @@ -14175,6 +14501,11 @@ namespace Erp.Platform.Migrations b.Navigation("Events"); }); + modelBuilder.Entity("Erp.Platform.Entities.LossReason", b => + { + b.Navigation("Opportunities"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Material", b => { b.Navigation("AlternativeUoms"); @@ -14198,6 +14529,13 @@ namespace Erp.Platform.Migrations b.Navigation("Materials"); }); + modelBuilder.Entity("Erp.Platform.Entities.Opportunity", b => + { + b.Navigation("Actions"); + + b.Navigation("Competitors"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Order", b => { b.Navigation("Items"); @@ -14274,6 +14612,11 @@ namespace Erp.Platform.Migrations b.Navigation("Media"); }); + modelBuilder.Entity("Erp.Platform.Entities.Source", b => + { + b.Navigation("Opportunities"); + }); + modelBuilder.Entity("Erp.Platform.Entities.SupplyCardType", b => { b.Navigation("Partners"); diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json index da2afed9..3c28ca75 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json @@ -100,9 +100,7 @@ "props": null, "description": null, "isActive": true, - "dependencies": [ - "DynamicEntityComponent" - ] + "dependencies": ["DynamicEntityComponent"] } ], "ReportCategories": [ @@ -2408,12 +2406,7 @@ "minSalary": 80000, "maxSalary": 120000, "currencyCode": "USD", - "requiredSkills": [ - "JavaScript", - "TypeScript", - "React", - "Node.js" - ], + "requiredSkills": ["JavaScript", "TypeScript", "React", "Node.js"], "responsibilities": [ "Develop frontend and backend applications", "Write clean and maintainable code", @@ -2886,7 +2879,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "1", "badgeCode": "B001", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -2926,7 +2919,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "2", "badgeCode": "B002", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -2966,7 +2959,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "2", "badgeCode": "B003", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -3006,7 +2999,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "3", "badgeCode": "B004", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -3046,7 +3039,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "4", "badgeCode": "B005", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -3086,7 +3079,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "1", "badgeCode": "B006", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -3126,7 +3119,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "3", "badgeCode": "B007", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -3166,7 +3159,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "2", "badgeCode": "B008", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -3206,7 +3199,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "1", "badgeCode": "B009", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -3246,7 +3239,7 @@ "payrollGroup": "Monthly", "bankAccountNumber": "4", "badgeCode": "B010", - "employeeStatus": "Active", + "employeeStatus": "Aktif", "isActive": true, "leaves": [], "evaluations": [], @@ -3262,7 +3255,7 @@ "endDate": "12-04-2024", "totalDays": 5, "reason": "Yıllık izin talebi", - "status": "Pending", + "status": "Askıda", "appliedDate": "11-15-2024", "isHalfDay": false }, @@ -3273,9 +3266,9 @@ "endDate": "11-12-2024", "totalDays": 3, "reason": "Sağlık kontrolü", - "status": "Approved", + "status": "Onaylı", "appliedDate": "11-08-2024", - "approvedDate": "11-09-2024", + "OnaylıDate": "11-09-2024", "isHalfDay": false }, { @@ -3297,7 +3290,7 @@ "endDate": "06-11-2024", "totalDays": 2, "reason": "Acil aile durumu", - "status": "Pending", + "status": "Askıda", "appliedDate": "04-11-2024", "isHalfDay": false } @@ -3310,7 +3303,7 @@ "endTime": "1970-01-01T21:00", "totalHours": 3, "reason": "Proje deadline'ı nedeniyle acil çalışma", - "status": "Approved", + "status": "Onaylı", "rate": 1.5, "amount": 450 }, @@ -3321,7 +3314,7 @@ "endTime": "1970-01-01T20:00", "totalHours": 2.5, "reason": "Müşteri talep değişikliği nedeniyle ek çalışma", - "status": "Pending", + "status": "Askıda", "rate": 1.5, "amount": 375 }, @@ -3332,7 +3325,7 @@ "endTime": "1970-01-01T22:30", "totalHours": 3.5, "reason": "Sistem bakımı ve güncelleme çalışmaları", - "status": "Approved", + "status": "Onaylı", "rate": 1.5, "amount": 525 }, @@ -3354,8 +3347,8 @@ "endTime": "1970-01-01T21:00", "totalHours": 2.5, "reason": "Acil hata düzeltme ve test çalışmaları", - "status": "Approved", - "approvedBy": "emp_001", + "status": "Onaylı", + "OnaylıBy": "emp_001", "rate": 2.0, "amount": 500 }, @@ -3366,7 +3359,7 @@ "endTime": "1970-01-01T20:00", "totalHours": 4, "reason": "Yeni müşteri onboarding süreci", - "status": "Pending", + "status": "Askıda", "rate": 1.5, "amount": 600 }, @@ -3377,8 +3370,8 @@ "endTime": "1970-01-01T21:15", "totalHours": 3.5, "reason": "Veri analizi ve raporlama çalışmaları", - "status": "Approved", - "approvedBy": "emp_002", + "status": "Onaylı", + "OnaylıBy": "emp_002", "rate": 1.5, "amount": 525 }, @@ -3389,7 +3382,7 @@ "endTime": "1970-01-01T20:30", "totalHours": 2.5, "reason": "Eğitim materyali hazırlama", - "status": "Pending", + "status": "Askıda", "rate": 1.5, "amount": 375 }, @@ -3400,7 +3393,7 @@ "endTime": "1970-01-01T23:00", "totalHours": 3.5, "reason": "Kritik sistem güvenlik yaması uygulaması", - "status": "Approved", + "status": "Onaylı", "rate": 1.5, "amount": 525 }, @@ -3428,7 +3421,7 @@ "netSalary": 0, "tax": 0, "socialSecurity": 0, - "status": "Cancelled" + "status": "İptal" }, { "employeeCode": "EMP-002", @@ -3454,7 +3447,7 @@ "netSalary": 0, "tax": 0, "socialSecurity": 0, - "status": "Approved" + "status": "Onaylı" }, { "employeeCode": "EMP-004", @@ -3480,7 +3473,7 @@ "netSalary": 0, "tax": 0, "socialSecurity": 0, - "status": "Draft" + "status": "Taslak" } ], "Template360s": [ @@ -3498,7 +3491,7 @@ "templateName": "Genel Yetkinlik Değerlendirmesi", "startDate": "01-11-2024", "endDate": "15-12-2024", - "status": "Active", + "status": "Aktif", "departmentCode": "ÜRT", "targetEmployees": "EMP-001|EMP-002|EMP-003|EMP-004|EMP-005" }, @@ -3508,7 +3501,7 @@ "templateName": "Genel Yetkinlik Değerlendirmesi", "startDate": "01-01-2025", "endDate": "08-02-2025", - "status": "Active", + "status": "Aktif", "departmentCode": "ÜRT", "targetEmployees": "EMP-007|EMP-008|EMP-009" }, @@ -3518,7 +3511,7 @@ "templateName": "Genel Yetkinlik Değerlendirmesi", "startDate": "01-10-2023", "endDate": "10-11-2023", - "status": "Active", + "status": "Aktif", "departmentCode": "ÜRT", "targetEmployees": "EMP-005|EMP-006" }, @@ -3528,7 +3521,7 @@ "templateName": "Genel Yetkinlik Değerlendirmesi", "startDate": "01-10-2022", "endDate": "08-11-2024", - "status": "Cancelled", + "status": "İptal", "departmentCode": "BAK", "targetEmployees": "EMP-005|EMP-006" }, @@ -3538,7 +3531,7 @@ "templateName": "Genel Yetkinlik Değerlendirmesi", "startDate": "01-10-2021", "endDate": "10-11-2021", - "status": "Draft", + "status": "Taslak", "departmentCode": "KAL", "targetEmployees": "EMP-005|EMP-006" }, @@ -3548,7 +3541,7 @@ "templateName": "Genel Yetkinlik Değerlendirmesi", "startDate": "01-10-2020", "endDate": "05-11-2020", - "status": "Completed", + "status": "Tamamlandı", "departmentCode": "KAL", "targetEmployees": "EMP-005|EMP-006" } @@ -3565,7 +3558,7 @@ "endDate": "2025-11-08", "maxParticipants": 20, "enrolled": 15, - "status": "upcoming", + "status": "Yaklaşan", "location": "Eğitim Salonu B", "thumbnail": "https://images.unsplash.com/photo-1633356122544-f134324a6cee?w=400&h=300&fit=crop" }, @@ -3595,7 +3588,7 @@ "endDate": "2025-11-03", "maxParticipants": 25, "enrolled": 25, - "status": "completed", + "status": "Tamamlandı", "location": "Eğitim Salonu C", "thumbnail": "https://images.unsplash.com/photo-1552664730-d307ca884978?w=400&h=300&fit=crop" }, @@ -3610,7 +3603,7 @@ "endDate": "2024-11-30", "maxParticipants": 50, "enrolled": 8, - "status": "upcoming", + "status": "Yaklaşan", "location": "Eğitim Salonu D", "thumbnail": "https://images.unsplash.com/photo-1550751827-4bd374c3f58b?w=400&h=300&fit=crop" } @@ -3623,7 +3616,7 @@ "startDate": "10-10-2025 09:00:00", "endDate": "10-10-2025 11:00:00", "purpose": "Sprint Planning Toplantısı", - "status": "approved", + "status": "Onaylı", "participants": 8, "notes": "Projeksiyon cihazı gerekli" }, @@ -3634,7 +3627,7 @@ "startDate": "11-10-2025 08:00:00", "endDate": "11-10-2025 18:00:00", "purpose": "Müşteri Ziyareti", - "status": "pending", + "status": "Askıda", "notes": "Ankara çıkışı" }, { @@ -3644,7 +3637,7 @@ "startDate": "09-10-2025 14:00:00", "endDate": "09-10-2025 17:00:00", "purpose": "Ürün Tanıtım Videosu Çekimi", - "status": "approved" + "status": "Onaylı" }, { "type": "room", @@ -3653,7 +3646,7 @@ "startDate": "05-10-2025 09:00:00", "endDate": "05-10-2025 17:00:00", "purpose": "Etkili İletişim Eğitimi", - "status": "approved", + "status": "Onaylı", "participants": 15, "notes": "Tüm gün rezervasyon, öğle yemeği dahil" } @@ -3787,7 +3780,7 @@ "checkIn": "2025-10-29T09:15:00", "employeeCode": "EMP-001", "purpose": "İş Ortaklığı Görüşmesi", - "status": "checked-in", + "status": "Giriş", "photo": "https://i.pravatar.cc/150?img=12" }, { @@ -3798,7 +3791,7 @@ "visitDate": "2025-10-30T10:30:00", "employeeCode": "EMP-002", "purpose": "Eğitim Danışmanlığı", - "status": "scheduled", + "status": "Planlandı", "photo": "https://i.pravatar.cc/150?img=13" }, { @@ -3811,7 +3804,7 @@ "checkOut": "2025-10-31T16:00:00", "employeeCode": "EMP-003", "purpose": "Teknik Sunum", - "status": "checked-out", + "status": "Çıkış", "photo": "https://i.pravatar.cc/150?img=14" } ], @@ -3824,7 +3817,7 @@ "requestDate": "2025-10-04", "description": "Ankara ofis ziyareti - uçak bileti", "project": "Intranet v2", - "status": "approved", + "status": "Onaylı", "approverCode": "EMP-004", "approvalDate": "2025-10-10" }, @@ -3836,7 +3829,7 @@ "requestDate": "2025-10-07", "description": "Müşteri toplantısı - öğle yemeği", "project": null, - "status": "pending", + "status": "Askıda", "approverCode": null, "approvalDate": null }, @@ -3848,7 +3841,7 @@ "requestDate": "2025-10-04", "description": "İzmir workshop - otel konaklaması (2 gece)", "project": "UX Workshop", - "status": "approved", + "status": "Onaylı", "approverCode": "EMP-005", "approvalDate": "2025-10-05" } @@ -3859,7 +3852,7 @@ "Description": "Yıllık çalışan memnuniyeti ve bağlılık araştırması", "Deadline": "2024-10-31T00:00:00", "Responses": 45, - "Status": "active", + "Status": "Aktif", "IsAnonymous": true }, { @@ -3867,7 +3860,7 @@ "Description": "2025 yılı eğitim planlaması için ihtiyaç tespiti", "Deadline": "2024-11-15T00:00:00", "Responses": 28, - "Status": "active", + "Status": "Aktif", "IsAnonymous": false }, { @@ -3875,7 +3868,7 @@ "Description": "Yemek kalitesi ve servis değerlendirmesi", "Deadline": "2024-09-30T00:00:00", "Responses": 62, - "Status": "closed", + "Status": "Kapalı", "IsAnonymous": true } ], @@ -4108,9 +4101,7 @@ { "postContent": "CI/CD pipeline güncellememiz tamamlandı! Deployment süremiz %40 azaldı. Otomasyonun gücü 💪", "type": "video", - "urls": [ - "https://www.w3schools.com/html/mov_bbb.mp4" - ] + "urls": ["https://www.w3schools.com/html/mov_bbb.mp4"] } ], "SocialPollOptions": [ @@ -4518,7 +4509,7 @@ "CurrencyCode": "TRY", "PaymentTermName": "Net30", "CreditLimit": 500000, - "Status": "Active", + "Status": "Aktif", "CustomerTypeName": null, "CustomerSegmentName": null, "EmployeeCode": null, @@ -4556,7 +4547,7 @@ "CurrencyCode": "TRY", "PaymentTermName": "Net15", "CreditLimit": 250000, - "Status": "Active", + "Status": "Aktif", "CustomerTypeName": null, "CustomerSegmentName": null, "EmployeeCode": null, @@ -4594,7 +4585,7 @@ "CurrencyCode": "TRY", "PaymentTermName": "Net45", "CreditLimit": 150000, - "Status": "Active", + "Status": "Aktif", "CustomerTypeName": null, "CustomerSegmentName": null, "EmployeeCode": null, @@ -4632,7 +4623,7 @@ "CurrencyCode": "TRY", "PaymentTermName": "Net30", "CreditLimit": 100000, - "Status": "Inactive", + "Status": "Pasif", "CustomerTypeName": null, "CustomerSegmentName": null, "EmployeeCode": null, @@ -4670,7 +4661,7 @@ "CurrencyCode": "TRY", "PaymentTermName": "Net60", "CreditLimit": 500000, - "Status": "Active", + "Status": "Aktif", "CustomerTypeName": "Company", "CustomerSegmentName": "SMB", "EmployeeCode": "REP-002", @@ -4708,7 +4699,7 @@ "CurrencyCode": "TRY", "PaymentTermName": "Net30", "CreditLimit": 1000000, - "Status": "Active", + "Status": "Aktif", "CustomerTypeName": "Company", "CustomerSegmentName": "Enterprise", "EmployeeCode": "REP-001", @@ -4768,5 +4759,10 @@ "category": "Budget", "isActive": true } + ], + "OrganizationUnits": [ + { + "displayName": "Satış Takımı" + } ] -} \ No newline at end of file +} diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs index 2a122f7e..d8daf79e 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs @@ -102,6 +102,8 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency private readonly IRepository _customerSegmentRepository; private readonly IRepository _partnerRepository; private readonly IRepository _lossReasonRepository; + private readonly IRepository _organizationUnitRepository; + private readonly OrganizationUnitManager _organizationUnitManager; public TenantDataSeeder( IClock clock, @@ -186,7 +188,9 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency IRepository customerTypeRepository, IRepository customerSegmentRepository, IRepository partnerRepository, - IRepository lossReasonRepository + IRepository lossReasonRepository, + IRepository organizationUnitRepository, + OrganizationUnitManager organizationUnitManager ) { _clock = clock; @@ -273,6 +277,8 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency _customerSegmentRepository = customerSegmentRepository; _lossReasonRepository = lossReasonRepository; _partnerRepository = partnerRepository; + _organizationUnitRepository = organizationUnitRepository; + _organizationUnitManager = organizationUnitManager; } private static IConfigurationRoot BuildConfiguration() @@ -1854,6 +1860,18 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency DiscountRate = item.DiscountRate }, autoSave: true); } + + foreach (var item in items.OrganizationUnits) + { + var exists = await _organizationUnitRepository.AnyAsync(x => x.DisplayName == item.DisplayName); + if (exists) + continue; + + await _organizationUnitManager.CreateAsync(new OrganizationUnit + { + DisplayName = item.DisplayName + }); + } } } diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs index 5a795c68..0b5ff1a7 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs @@ -93,6 +93,12 @@ public class TenantSeederDto public List CustomerTypes { get; set; } public List CustomerSegments { get; set; } public List LossReasons { get; set; } + public List OrganizationUnits { get; set; } +} + +public class OrganizationUnitSeedDto +{ + public string DisplayName { get; set; } } public class PartnerSeedDto diff --git a/ui/src/mocks/mockOpportunities.ts b/ui/src/mocks/mockOpportunities.ts index a6e9861c..bdcc155d 100644 --- a/ui/src/mocks/mockOpportunities.ts +++ b/ui/src/mocks/mockOpportunities.ts @@ -26,7 +26,6 @@ export const mockOpportunities: CrmOpportunity[] = [ status: OpportunityStatusEnum.Lost, lostReason: mockLossReasons[0], activities: [], - quotes: [], competitors: [], creationTime: new Date("2024-01-10"), lastModificationTime: new Date("2024-03-15"), @@ -48,7 +47,6 @@ export const mockOpportunities: CrmOpportunity[] = [ status: OpportunityStatusEnum.Lost, lostReason: mockLossReasons[1], activities: [], - quotes: [], competitors: [], creationTime: new Date("2024-02-05"), lastModificationTime: new Date("2024-04-20"), diff --git a/ui/src/proxy/intranet/models.ts b/ui/src/proxy/intranet/models.ts index 637eec65..733ca1f1 100644 --- a/ui/src/proxy/intranet/models.ts +++ b/ui/src/proxy/intranet/models.ts @@ -156,7 +156,7 @@ export interface VisitorDto { checkOut?: Date employeeId: string employee: EmployeeDto - status: 'scheduled' | 'checked-in' | 'checked-out' | 'cancelled' + status: 'Planlandı' | 'Giriş' | 'Çıkış' | 'İptal Edildi' badgeNumber?: string photo?: string } diff --git a/ui/src/views/form/FormDevExpress.tsx b/ui/src/views/form/FormDevExpress.tsx index f309888f..7eb97eb3 100644 --- a/ui/src/views/form/FormDevExpress.tsx +++ b/ui/src/views/form/FormDevExpress.tsx @@ -55,6 +55,39 @@ const FormDevExpress = (props: { }) }, [formItems]) + // Cascade fieldlerin disabled durumunu güncelle + const updateCascadeDisabledStates = () => { + if (!refForm.current?.instance) return + + const allItems = formItemsRef.current.flatMap((group) => (group.items as SimpleItemWithColData[]) || []) + + allItems.forEach((item) => { + const cascadeParentFields = item.colData?.lookupDto?.cascadeParentFields + if (cascadeParentFields) { + const parentFields = cascadeParentFields.split(',').map((f: string) => f.trim()) + + try { + const editor = refForm.current?.instance.getEditor(item.dataField!) + if (editor && mode !== 'view') { + // Parent fieldlerden en az biri boşsa disabled olmalı + const shouldDisable = parentFields.some((parentField: string) => { + return !formDataRef.current || !formDataRef.current[parentField] + }) + + editor.option('disabled', shouldDisable) + } + } catch (err) { + console.debug('Cascade disabled update skipped for', item.dataField, err) + } + } + }) + } + + // formData değiştiğinde cascade disabled durumlarını güncelle + useEffect(() => { + updateCascadeDisabledStates() + }, [formData, mode]) + return (
{ + updateCascadeDisabledStates() + }, 0) + //Dinamik script const changeItem = formItemsRef.current .flatMap((group) => (group.items as SimpleItemWithColData[]) || []) diff --git a/ui/src/views/intranet/widgets/Visitors.tsx b/ui/src/views/intranet/widgets/Visitors.tsx index 188b4aaa..84c1ea32 100644 --- a/ui/src/views/intranet/widgets/Visitors.tsx +++ b/ui/src/views/intranet/widgets/Visitors.tsx @@ -6,11 +6,11 @@ import { VisitorDto } from '@/proxy/intranet/models' const Visitors: React.FC<{ visitors: VisitorDto[] }> = ({ visitors }) => { const getStatusIcon = (status: string) => { switch (status) { - case 'checked-in': + case 'Giriş': return - case 'checked-out': + case 'Çıkış': return - case 'scheduled': + case 'Planlandı': return default: return @@ -19,11 +19,11 @@ const Visitors: React.FC<{ visitors: VisitorDto[] }> = ({ visitors }) => { const getStatusText = (status: string) => { switch (status) { - case 'checked-in': + case 'Giriş': return 'Giriş Yaptı' - case 'checked-out': + case 'Çıkış': return 'Çıkış Yaptı' - case 'scheduled': + case 'Planlandı': return 'Planlandı' default: return 'Bilinmiyor' @@ -32,11 +32,11 @@ const Visitors: React.FC<{ visitors: VisitorDto[] }> = ({ visitors }) => { const getStatusColor = (status: string) => { switch (status) { - case 'checked-in': + case 'Giriş': return 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800' - case 'checked-out': + case 'Çıkış': return 'bg-gray-50 dark:bg-gray-900/20 border-gray-200 dark:border-gray-700' - case 'scheduled': + case 'Planlandı': return 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800' default: return 'bg-gray-50 dark:bg-gray-900/20 border-gray-200 dark:border-gray-700' diff --git a/ui/src/views/list/Grid.tsx b/ui/src/views/list/Grid.tsx index a2fcbc3d..e4f85592 100644 --- a/ui/src/views/list/Grid.tsx +++ b/ui/src/views/list/Grid.tsx @@ -391,6 +391,134 @@ const Grid = (props: GridProps) => { ) } + function onEditorPreparing(editor: DataGridTypes.EditorPreparingEvent) { + if (editor.parentType === 'dataRow' && editor.dataField && gridDto) { + const formItem = gridDto.gridOptions.editingFormDto + .flatMap((group) => group.items || []) + .find((i) => i.dataField === editor.dataField) + + // Cascade disabled mantığı + const colFormat = gridDto.columnFormats.find((c) => c.fieldName === editor.dataField) + if (colFormat?.lookupDto?.cascadeParentFields) { + const parentFields = colFormat.lookupDto.cascadeParentFields + .split(',') + .map((f: string) => f.trim()) + + const prevHandler = editor.editorOptions.onValueChanged + + editor.editorOptions.onValueChanged = (e: any) => { + if (prevHandler) prevHandler(e) + + // Parent field değiştiğinde tüm cascade childları kontrol et + const grid = editor.component + const rowKey = grid.option('editing.editRowKey') + const rowIndex = grid.getRowIndexByKey(rowKey) + const rowData = grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} + + // Bu field bir parent ise, child fieldleri temizle + if (colFormat.lookupDto?.cascadeEmptyFields) { + const childFields = colFormat.lookupDto.cascadeEmptyFields + .split(',') + .map((f: string) => f.trim()) + childFields.forEach((childField: string) => { + if (rowIndex >= 0) { + grid.cellValue(rowIndex, childField, null) + } + }) + } + + // Tüm cascade fieldlerin disabled durumlarını güncelle + setTimeout(() => { + const popup = grid.option('editing.popup') + if (popup) { + const formInstance = grid.option('editing.form') as any + if (formInstance && formInstance.getEditor) { + gridDto.columnFormats.forEach((col) => { + if (col.lookupDto?.cascadeParentFields) { + const colParentFields = col.lookupDto.cascadeParentFields + .split(',') + .map((f: string) => f.trim()) + const shouldDisable = colParentFields.some((pf: string) => !rowData[pf]) + + try { + const editorInstance = formInstance.getEditor(col.fieldName!) + if (editorInstance) { + editorInstance.option('disabled', shouldDisable) + } + } catch (err) { + console.debug('Cascade disabled update skipped for', col.fieldName, err) + } + } + }) + } + } + }, 50) + } + + // İlk açılışta disabled durumunu kontrol et + const grid = editor.component + const rowKey = grid.option('editing.editRowKey') + const rowData = grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} + const shouldDisable = parentFields.some((pf: string) => !rowData[pf]) + + if (shouldDisable) { + editor.editorOptions.disabled = true + } + } + + if (formItem?.editorScript) { + const prevHandler = editor.editorOptions.onValueChanged + + editor.editorOptions.onValueChanged = (e: any) => { + if (prevHandler) prevHandler(e) + + try { + const grid = editor.component + const rowKey = grid.option('editing.editRowKey') + const rowIndex = grid.getRowIndexByKey(rowKey) + + const formData = grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} + + const setFormData = (newData: any) => { + if (rowIndex >= 0) { + Object.keys(newData).forEach((field) => { + grid.cellValue(rowIndex, field, newData[field]) + }) + } + } + + eval(formItem.editorScript!) + } catch (err) { + console.error('Script exec error', formItem.dataField, err) + } + } + } + + if (editor.editorOptions?.buttons) { + editor.editorOptions.buttons = editor.editorOptions.buttons.map((btn: any) => { + if (btn?.options?.onClick && typeof btn.options.onClick === 'function') { + const origClick = btn.options.onClick + btn.options.onClick = (e: any) => { + const grid = editor.component + const rowKey = grid.option('editing.editRowKey') + const rowIndex = grid.getRowIndexByKey(rowKey) + const formData = grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} + + origClick({ + ...e, + formData, + fieldName: editor.dataField, + rowKey, + rowIndex, + }) + } + } + return btn + }) + } + } + } + const customSaveState = useCallback( (state: any) => postListFormCustomization({ @@ -764,80 +892,7 @@ const Grid = (props: GridProps) => { onRowRemoved={() => { props.refreshData?.() }} - onEditorPreparing={(editor) => { - if (editor.parentType === 'dataRow' && editor.dataField) { - const formItem = gridDto.gridOptions.editingFormDto - .flatMap((group) => group.items || []) - .find((i) => i.dataField === editor.dataField) - - if (formItem?.editorScript) { - const prevHandler = editor.editorOptions.onValueChanged // varsa önceki handler'ı sakla - - editor.editorOptions.onValueChanged = (e: any) => { - // yeni handler - if (prevHandler) prevHandler(e) - - try { - const grid = editor.component - const rowKey = grid.option('editing.editRowKey') - const rowIndex = grid.getRowIndexByKey(rowKey) - - // formData → aktif satırın datası - const formData = - grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} - - // setFormData → komple yeni obje vererek güncelleme - const setFormData = (newData: any) => { - if (rowIndex >= 0) { - Object.keys(newData).forEach((field) => { - grid.cellValue(rowIndex, field, newData[field]) - }) - } - } - - eval(formItem.editorScript!) - //setFormData({ ...formData, Path: e.value, Authority: e.value }) - - // editor.component.cellValue( - // editor.component.getRowIndexByKey( - // editor.component.option('editing.editRowKey'), - // ), - // 'Path', - // e.value, - // ) - } catch (err) { - console.error('Script exec error', formItem.dataField, err) - } - } - } - - if (editor.editorOptions?.buttons) { - editor.editorOptions.buttons = editor.editorOptions.buttons.map( - (btn: any) => { - if (btn?.options?.onClick && typeof btn.options.onClick === 'function') { - const origClick = btn.options.onClick - btn.options.onClick = (e: any) => { - const grid = editor.component - const rowKey = grid.option('editing.editRowKey') - const rowIndex = grid.getRowIndexByKey(rowKey) - const formData = - grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} - - origClick({ - ...e, - formData, - fieldName: editor.dataField, - rowKey, - rowIndex, - }) - } - } - return btn - }, - ) - } - } - }} + onEditorPreparing={onEditorPreparing} > { ) } + function onEditorPreparing(editor: TreeListTypes.EditorPreparingEvent) { + if (editor.parentType === 'dataRow' && editor.dataField && gridDto) { + const formItem = gridDto.gridOptions.editingFormDto + .flatMap((group) => group.items || []) + .find((i) => i.dataField === editor.dataField) + + // Cascade disabled mantığı + const colFormat = gridDto.columnFormats.find((c) => c.fieldName === editor.dataField) + if (colFormat?.lookupDto?.cascadeParentFields) { + const parentFields = colFormat.lookupDto.cascadeParentFields + .split(',') + .map((f: string) => f.trim()) + + const prevHandler = editor.editorOptions.onValueChanged + + editor.editorOptions.onValueChanged = (e: any) => { + if (prevHandler) prevHandler(e) + + // Parent field değiştiğinde tüm cascade childları kontrol et + const grid = editor.component + const rowKey = grid.option('editing.editRowKey') + const rowIndex = grid.getRowIndexByKey(rowKey) + const rowData = grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} + + // Bu field bir parent ise, child fieldleri temizle + if (colFormat.lookupDto?.cascadeEmptyFields) { + const childFields = colFormat.lookupDto.cascadeEmptyFields + .split(',') + .map((f: string) => f.trim()) + childFields.forEach((childField: string) => { + if (rowIndex >= 0) { + grid.cellValue(rowIndex, childField, null) + } + }) + } + + // Tüm cascade fieldlerin disabled durumlarını güncelle + setTimeout(() => { + const popup = grid.option('editing.popup') + if (popup) { + const formInstance = grid.option('editing.form') as any + if (formInstance && formInstance.getEditor) { + gridDto.columnFormats.forEach((col) => { + if (col.lookupDto?.cascadeParentFields) { + const colParentFields = col.lookupDto.cascadeParentFields + .split(',') + .map((f: string) => f.trim()) + const shouldDisable = colParentFields.some((pf: string) => !rowData[pf]) + + try { + const editorInstance = formInstance.getEditor(col.fieldName!) + if (editorInstance) { + editorInstance.option('disabled', shouldDisable) + } + } catch (err) { + console.debug('Cascade disabled update skipped for', col.fieldName, err) + } + } + }) + } + } + }, 50) + } + + // İlk açılışta disabled durumunu kontrol et + const grid = editor.component + const rowKey = grid.option('editing.editRowKey') + const rowData = grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} + const shouldDisable = parentFields.some((pf: string) => !rowData[pf]) + + if (shouldDisable) { + editor.editorOptions.disabled = true + } + } + + if (formItem?.editorScript) { + const prevHandler = editor.editorOptions.onValueChanged + + editor.editorOptions.onValueChanged = (e: any) => { + if (prevHandler) prevHandler(e) + + try { + const grid = editor.component + const rowKey = grid.option('editing.editRowKey') + const rowIndex = grid.getRowIndexByKey(rowKey) + + const formData = grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} + + const setFormData = (newData: any) => { + if (rowIndex >= 0) { + Object.keys(newData).forEach((field) => { + grid.cellValue(rowIndex, field, newData[field]) + }) + } + } + + eval(formItem.editorScript!) + } catch (err) { + console.error('Script exec error', formItem.dataField, err) + } + } + } + + if (editor.editorOptions?.buttons) { + editor.editorOptions.buttons = editor.editorOptions.buttons.map((btn: any) => { + if (btn?.options?.onClick && typeof btn.options.onClick === 'function') { + const origClick = btn.options.onClick + btn.options.onClick = (e: any) => { + const grid = editor.component + const rowKey = grid.option('editing.editRowKey') + const rowIndex = grid.getRowIndexByKey(rowKey) + const formData = grid.getVisibleRows().find((r) => r.key === rowKey)?.data || {} + + origClick({ + ...e, + formData, + fieldName: editor.dataField, + rowKey, + rowIndex, + }) + } + } + return btn + }) + } + } + } + const customSaveState = useCallback( (state: any) => postListFormCustomization({ @@ -645,6 +773,14 @@ const Tree = (props: TreeProps) => { columnAutoWidth={gridDto.gridOptions.columnOptionDto?.columnAutoWidth} rtlEnabled={gridDto.gridOptions.columnOptionDto?.rtlEnabled} rowAlternationEnabled={gridDto.gridOptions.columnOptionDto?.rowAlternationEnabled} + onRowPrepared={(e) => { + //header, filter, data, group, summaries + if (e.rowType === 'data') { + e.rowElement.style.height = gridDto.gridOptions?.rowDto.rowHeight + e.rowElement.style.whiteSpace = gridDto.gridOptions?.rowDto.whiteSpace + e.rowElement.style.overflowWrap = gridDto.gridOptions?.rowDto.overflowWrap + } + }} hoverStateEnabled={gridDto.gridOptions.columnOptionDto?.hoverStateEnabled} columnHidingEnabled={gridDto.gridOptions.columnOptionDto?.columnHidingEnabled} focusedRowEnabled={gridDto.gridOptions.columnOptionDto?.focusedRowEnabled} @@ -674,6 +810,7 @@ const Tree = (props: TreeProps) => { onRowRemoved={() => { props.refreshData?.() }} + onEditorPreparing={onEditorPreparing} onContentReady={(e) => { // Restore expanded keys after data refresh (only if autoExpandAll is false) if (