diff --git a/api/src/Erp.Platform.Application.Contracts/ListForms/GridOptionsDto/CommandColumnDto.cs b/api/src/Erp.Platform.Application.Contracts/ListForms/GridOptionsDto/CommandColumnDto.cs index aab4295b..cbdb8e46 100644 --- a/api/src/Erp.Platform.Application.Contracts/ListForms/GridOptionsDto/CommandColumnDto.cs +++ b/api/src/Erp.Platform.Application.Contracts/ListForms/GridOptionsDto/CommandColumnDto.cs @@ -52,5 +52,14 @@ public class CommandColumnDto /// Url boş ise calisacak 'eval' icerisinde calisacak olan kod /// public string OnClick { get; set; } + /// Görünür durumu + /// + public bool IsVisible { get; set; } = true; + /// Dinamik görünürlük kontrolü için JavaScript fonksiyonu + /// Örnek: "(e) => !e.row.isEditing" veya "(e) => e.row.data.Status === 'Active'" + /// Fonksiyon parametre olarak DevExtreme button event objesini alır (e.row, e.row.data, e.row.isEditing vb.) + /// true/false döndürmelidir + /// + public string VisibleExpression { get; set; } } diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json b/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json index dad83cb8..fd886bdd 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json +++ b/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json @@ -4141,6 +4141,12 @@ "en": "Authorization Type", "tr": "Yetkilendirme Türü" }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.CommandUrl", + "en": "Url", + "tr": "Url" + }, { "resourceName": "Platform", "key": "ListForms.ListFormEdit.CommandUrlOptions", @@ -4153,6 +4159,18 @@ "en": "Url Target", "tr": "Url Türü" }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.CommandVisible", + "en": "Visible", + "tr": "Görünür" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.CommandVisibleExpression", + "en": "Visible Expression", + "tr": "Görünür İfade" + }, { "resourceName": "Platform", "key": "ListForms.ListFormEdit.WidgetsDescription", @@ -9472,7 +9490,7 @@ "resourceName": "Platform", "key": "App.Maintenance.Workorders", "tr": "Bakım İş Emirleri", - "en": "Maintenance Workorders" + "en": "Workorders" }, { "resourceName": "Platform", diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Accounting.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Accounting.cs index 223c102b..38405f3d 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Accounting.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Accounting.cs @@ -105,7 +105,8 @@ public class ListFormSeeder_Accounting : IDataSeedContributor, ITransientDepende Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.Accounting.BankAccount, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Bank)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Bank)}/@Id", + IsVisible = true }, }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs index 0c540a41..304c8da0 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs @@ -641,9 +641,8 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep Text = "Permission", AuthName = PlatformConsts.IdentityPermissions.Roles.ManagePermissions, DialogName = "RolesPermission", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Name", - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Name" }), + IsVisible = true, }, }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { @@ -769,22 +768,21 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep InsertServiceAddress = "list-form-dynamic-api/user-insert", UpdateServiceAddress = "list-form-dynamic-api/user-update", CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { - new CommandColumnDto() { + new() { Hint = "Detail", Text ="Detail", UrlTarget="_blank", AuthName=PlatformConsts.IdentityPermissions.Users.Update, - Url="/admin/users/detail/@Id" + Url="/admin/users/detail/@Id", + IsVisible = true, }, - new CommandColumnDto() { + new() { Hint = "Permission", Text = "Permission", AuthName = PlatformConsts.IdentityPermissions.Users.ManagePermissions, DialogName = "UsersPermission", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Email", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Email", id = "@Id" }), + IsVisible = true, }, }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { @@ -1102,9 +1100,8 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep Text = "Details", AuthName = AppCodes.AuditLogs, DialogName = "AuditLogDetail", - DialogParameters = JsonSerializer.Serialize(new { - id = "@Id", - }) + DialogParameters = JsonSerializer.Serialize(new { id = "@Id" }), + IsVisible = true }, }), } @@ -1308,6 +1305,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep Text = "Swagger", AuthName=AppCodes.DeveloperKits.CustomEndpoints, Url= swaggerRootUrl + "/swagger/index.html", + IsVisible = true }, }), } @@ -4092,7 +4090,8 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.Definitions.Skill, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.SkillType)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.SkillType)}/@Id", + IsVisible = true, }, }), }, autoSave: true); @@ -4428,7 +4427,8 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.Definitions.Uom, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.UomCategory)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.UomCategory)}/@Id", + IsVisible = true, }, }), }, autoSave: true); diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Coordinator.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Coordinator.cs index ecfa7ee1..8349e9c5 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Coordinator.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Coordinator.cs @@ -2050,6 +2050,7 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend UrlTarget="_blank", AuthName = AppCodes.Definitions.Question, Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.QuestionPool)}/@Id", + IsVisible = true, }, }), }, autoSave: true @@ -2170,9 +2171,8 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend Text = "Answers", AuthName = AppCodes.Definitions.Question, DialogName = "QuestionAnswers", - DialogParameters = JsonSerializer.Serialize(new { - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { id = "@Id" }), + IsVisible = true }, }), EditingFormJson = JsonSerializer.Serialize(new List() { diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Crm.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Crm.cs index aaf5bcfa..3a66cf3d 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Crm.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Crm.cs @@ -388,7 +388,8 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.Crm.Customer, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Customer)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Customer)}/@Id", + IsVisible = true, }, }), }, autoSave: true); @@ -1179,7 +1180,8 @@ public class ListFormSeeder_Crm : IDataSeedContributor, ITransientDependency Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.Crm.Opportunity, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Opportunity)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Opportunity)}/@Id", + IsVisible = true, }, }), }, autoSave: true diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs index 36e2365b..0faaab02 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs @@ -2052,25 +2052,26 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Text ="Toplu İzin", AuthName = AppCodes.Hr.Leave + ".Update", DialogName = "CollectiveLeave", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Name", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Name", id = "@Id" }), + IsVisible=true, }, new() { Hint = "Accept", Text ="Accept", UrlTarget="_blank", AuthName = AppCodes.Hr.Leave + ".Update", - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, + VisibleExpression="(e) => e.row.data.Status === 'Askıda'" }, new() { Hint = "Reject", Text ="Reject", UrlTarget="_blank", AuthName = AppCodes.Hr.Leave + ".Update", - Url="/admin/list/list-employees/@Id" - }, + Url="/admin/list/list-employees/@Id", + IsVisible=true, + VisibleExpression="(e) => e.row.data.Status === 'Askıda'" }, }), } ); @@ -2378,24 +2379,26 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Text ="Toplu Mesai", AuthName = AppCodes.Hr.Overtime + ".Update", DialogName = "CollectiveOvertime", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Name", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Name", id = "@Id" }), + IsVisible=true, }, new() { Hint = "Accept", Text ="Accept", UrlTarget="_blank", AuthName = AppCodes.Hr.Overtime + ".Update", - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, + VisibleExpression="(e) => e.row.data.Status === 'Askıda'" }, new() { Hint = "Reject", Text ="Reject", UrlTarget="_blank", AuthName = AppCodes.Hr.Overtime + ".Update", - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, + VisibleExpression="(e) => e.row.data.Status === 'Askıda'" }, }), } @@ -2703,14 +2706,18 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Text ="Accept", UrlTarget="_blank", AuthName = AppCodes.Hr.Expense + ".Update", - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, + VisibleExpression="(e) => e.row.data.Status === 'Askıda'" }, new() { Hint = "Reject", Text ="Reject", UrlTarget="_blank", AuthName = AppCodes.Hr.Expense + ".Update", - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, + VisibleExpression="(e) => e.row.data.Status === 'Askıda'" }, }), } @@ -2996,31 +3003,34 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Text ="Toplu Bordro", AuthName = AppCodes.Hr.Payroll + ".Update", DialogName = "CollectivePayroll", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Name", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Name", id = "@Id" }), + IsVisible=true, }, new() { Hint = "Ödeme & Kesinti", Text ="Ödeme & Kesinti", UrlTarget="_blank", AuthName = AppCodes.Hr.Payroll + ".Update", - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, }, new() { Hint = "Accept", Text ="Accept", UrlTarget="_blank", AuthName = AppCodes.Hr.Payroll + ".Update", - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, + VisibleExpression="(e) => e.row.data.Status === 'Taslak'" }, new() { Hint = "Reject", Text ="Reject", UrlTarget="_blank", AuthName = AppCodes.Hr.Payroll + ".Update", - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, + VisibleExpression="(e) => e.row.data.Status === 'Taslak'" }, }), } @@ -3339,10 +3349,8 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Text = "Questions", AuthName = TenantManagementPermissions.Tenants.ManageConnectionStrings, DialogName = "Template360Questions", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Name", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Name", id = "@Id"}), + IsVisible=true }, }), } @@ -3494,10 +3502,8 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Text = "Evaluations", AuthName = TenantManagementPermissions.Tenants.ManageConnectionStrings, DialogName = "Evaluation360", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Name", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Name", id = "@Id" }), + IsVisible=true, }, }), } @@ -3728,15 +3734,13 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new() { FieldName = "MaxParticipants", FieldDbType = DbType.Int32, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value } }), CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { - new CommandColumnDto() { + new() { Hint = "Sertifikalar", Text = "Sertifikalar", AuthName = AppCodes.Hr.Training + ".Update", DialogName = "TrainingCertificates", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Email", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Email", id = "@Id" }), + IsVisible=true }, }), } @@ -4061,6 +4065,7 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency UrlTarget="_blank", AuthName = AppCodes.Hr.Survey, Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Survey)}/@Id", + IsVisible=true, } }), }, autoSave: true @@ -4235,7 +4240,8 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Text ="Options", UrlTarget="_blank", AuthName = AppCodes.Hr.Survey, - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true, }, }), }, autoSave: true @@ -4391,7 +4397,8 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency Text ="Answers", UrlTarget="_blank", AuthName = AppCodes.Hr.SurveyResponse, - Url="/admin/list/list-employees/@Id" + Url="/admin/list/list-employees/@Id", + IsVisible=true }, }), }, autoSave: true diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Intranet.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Intranet.cs index 220f10bf..00287902 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Intranet.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Intranet.cs @@ -1706,6 +1706,7 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc UrlTarget="_blank", AuthName = AppCodes.Intranet.SocialComment, Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.SocialComment)}/@Id", + IsVisible = true, }, }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Maintenance.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Maintenance.cs index 1d05785b..11788a7f 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Maintenance.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Maintenance.cs @@ -374,7 +374,7 @@ public class ListFormSeeder_Maintenance : IDataSeedContributor, ITransientDepend new EditingFormItemDto { Order = 9, DataField = "WarrantyExpiry", ColSpan = 1, EditorType2=EditorTypes.dxDateBox, EditorOptions = EditorOptionValues.DateFormat }, new EditingFormItemDto { Order = 10, DataField = "Location", ColSpan = 1, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 11, DataField = "DepartmentId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 12, DataField = "StatusId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 12, DataField = "Status", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, new EditingFormItemDto { Order = 13, DataField = "Criticality", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, new EditingFormItemDto { Order = 14, DataField = "Capacity", ColSpan = 1, EditorType2=EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 15, DataField = "CostPerHour", ColSpan = 1, EditorType2=EditorTypes.dxNumberBox }, @@ -585,15 +585,15 @@ public class ListFormSeeder_Maintenance : IDataSeedContributor, ITransientDepend new() { ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, - SourceDbType = DbType.Guid, - FieldName = "StatusId", + SourceDbType = DbType.String, + FieldName = "Status", Width = 150, ListOrderNo = 13, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, - LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.WorkcenterStatus), "Id", "Name"), + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.WorkcenterStatus), "Name", "Name"), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -768,14 +768,16 @@ public class ListFormSeeder_Maintenance : IDataSeedContributor, ITransientDepend Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.Maintenance.Plan, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Plan)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Plan)}/@Id", + IsVisible = true, }, new() { Hint = "Work Order", Text ="Work Order", UrlTarget="_blank", AuthName = AppCodes.Maintenance.Plan, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Plan)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Plan)}/@Id", + IsVisible = true, }, }), }, autoSave: true @@ -1350,7 +1352,7 @@ public class ListFormSeeder_Maintenance : IDataSeedContributor, ITransientDepend DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, PagerOptionJson = DefaultPagerOptionJson, InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, - EditingOptionJson = DefaultEditingOptionJson(AppCodes.Maintenance.Fault, 500, 250, true, true, true, true, false), + EditingOptionJson = DefaultEditingOptionJson(AppCodes.Maintenance.Fault, 500, 500, true, true, true, true, false), EditingFormJson = JsonSerializer.Serialize(new List() { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items= [ @@ -1362,15 +1364,18 @@ public class ListFormSeeder_Maintenance : IDataSeedContributor, ITransientDepend new EditingFormItemDto { Order = 6, DataField = "FaultTypeId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, new EditingFormItemDto { Order = 7, DataField = "Priority", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, new EditingFormItemDto { Order = 8, DataField = "Severity", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 9, DataField = "AssignedTo", ColSpan = 1, EditorType2=EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 10, DataField = "EstimatedRepairTime", ColSpan = 1, EditorType2=EditorTypes.dxNumberBox }, - new EditingFormItemDto { Order = 11, DataField = "FollowUpRequired", ColSpan = 1, EditorType2=EditorTypes.dxCheckBox }, - new EditingFormItemDto { Order = 12, DataField = "IsActive", ColSpan = 1, EditorType2=EditorTypes.dxCheckBox }, - new EditingFormItemDto { Order = 13, DataField = "FaultStatusId", ColSpan = 1, EditorType2=EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 9, DataField = "EstimatedRepairTime", ColSpan = 1, EditorType2=EditorTypes.dxNumberBox }, + new EditingFormItemDto { Order = 10, DataField = "FollowUpRequired", ColSpan = 1, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 11, DataField = "IsActive", ColSpan = 1, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 12, DataField = "Status", ColSpan = 1, EditorType2=EditorTypes.dxSelectBox }, ]} }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } + new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "FollowUpRequired", FieldDbType = DbType.Boolean, Value = "false", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Priority", FieldDbType = DbType.String, Value = "Low", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Severity", FieldDbType = DbType.String, Value = "Low", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Status", FieldDbType = DbType.String, Value = "Açık", CustomValueType = FieldCustomValueTypeEnum.Value }, }), } ); @@ -1576,15 +1581,30 @@ public class ListFormSeeder_Maintenance : IDataSeedContributor, ITransientDepend new() { ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, - SourceDbType = DbType.Guid, - FieldName = "FaultStatusId", + SourceDbType = DbType.String, + FieldName = "Status", Width = 100, ListOrderNo = 11, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, - LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.FaultStatus), "Id", "Name"), + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.FaultStatus), "Name", "Name"), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Boolean, + FieldName = "IsActive", + Width = 100, + ListOrderNo = 12, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), PivotSettingsJson = DefaultPivotSettingsJson diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs index b6dda46a..bec4145f 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs @@ -117,16 +117,15 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency Text = "Seed", AuthName = TenantManagementPermissions.Tenants.ManageConnectionStrings, DialogName = "TenantsConnectionString", - DialogParameters = JsonSerializer.Serialize(new { - name = "@Name", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "@Name", id = "@Id" }), + IsVisible = true, }, new() { Hint = "Branches", Text = "Branches", AuthName = AppCodes.Branches, Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Tenant)}/@Id", + IsVisible = true, }, }), InsertServiceAddress = "list-form-dynamic-api/tenant-insert", @@ -597,9 +596,8 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency Text = "Seed", AuthName = AppCodes.Branches + ".Update", DialogName = "BranchSeed", - DialogParameters = JsonSerializer.Serialize( - new { id = "@Id", name = "@Name"} - ) + DialogParameters = JsonSerializer.Serialize( new { id = "@Id", name = "@Name"} ), + IsVisible = true, }, }), }, autoSave: true @@ -1561,7 +1559,8 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.Languages.LanguageText, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Language)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Language)}/@Id", + IsVisible = true, }, }), }, autoSave: true @@ -2490,14 +2489,16 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency Text ="Manage", UrlTarget="_blank", AuthName=AppCodes.Listforms.Listform + ".Update", - Url="/admin/listform/edit/@ListFormCode" + Url="/admin/listform/edit/@ListFormCode", + IsVisible = true, }, new() { Hint = "Göster", Text ="Göster", UrlTarget="_blank", AuthName=AppCodes.Listforms.Listform, - Url="/admin/list/@ListFormCode" + Url="/admin/list/@ListFormCode", + IsVisible = true, } }), StateStoringJson = JsonSerializer.Serialize(new StateStoringDto { Enabled = true, StorageKey = "listFormGridStorage", Type = "custom" }), @@ -2945,10 +2946,8 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency Text = "Create", AuthName = AppCodes.Notifications.NotificationRules, DialogName = "CreateNotification", - DialogParameters = JsonSerializer.Serialize(new { - name = "id", - id = "@Id" - }) + DialogParameters = JsonSerializer.Serialize(new { name = "id", id = "@Id" }), + IsVisible = true, }, }), } @@ -3346,6 +3345,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency Text = "Hangfire Login", AuthName=AppCodes.BackgroundWorkers, Url= swaggerRootUrl + "/Account/Login", + IsVisible = true, }, new() { ButtonPosition= UiCommandButtonPositionTypeEnum.Toolbar, @@ -3353,13 +3353,15 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency Text = "Hangfire Aç", AuthName=AppCodes.BackgroundWorkers, Url= swaggerRootUrl + "/hangfire", + IsVisible = true, }, new() { ButtonPosition= UiCommandButtonPositionTypeEnum.Toolbar, Hint = "Hangfire Tazele", Text = "Hangfire Tazele", AuthName=AppCodes.BackgroundWorkers, - OnClick="UiEvalService.ApiGenerateBackgroundWorkers();" + OnClick="UiEvalService.ApiGenerateBackgroundWorkers();", + IsVisible = true, }, }), PermissionJson = DefaultPermissionJson(AppCodes.BackgroundWorkers), diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_SupplyChain.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_SupplyChain.cs index 93d63b10..4dc1aa7e 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_SupplyChain.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_SupplyChain.cs @@ -1145,7 +1145,8 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.SupplyChain.Supply, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Supply)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Supply)}/@Id", + IsVisible=true, }, }), }, autoSave: true @@ -2491,7 +2492,8 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.SupplyChain.Approval, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Approval)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Approval)}/@Id", + IsVisible=true, }, }), }, autoSave: true @@ -2971,7 +2973,8 @@ public class ListFormSeeder_SupplyChain : IDataSeedContributor, ITransientDepend Text ="Manage", UrlTarget="_blank", AuthName = AppCodes.SupplyChain.Request, - Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Request)}/@Id" + Url=$"/admin/form/{utils.GetDefaultFormCodes(ListFormCodes.Lists.Request)}/@Id", + IsVisible=true, }, }), }, autoSave: true diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/Fault.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/Fault.cs index db245f00..9e249b56 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/Fault.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/Fault.cs @@ -20,8 +20,7 @@ public class Fault : FullAuditedEntity, IMultiTenant public string Severity { get; set; } public int? EstimatedRepairTime { get; set; } public bool FollowUpRequired { get; set; } - public Guid? FaultStatusId { get; set; } - public FaultStatus? FaultStatus { get; set; } + public string Status { get; set; } public bool IsActive { get; set; } public string AssignedTo { get; set; } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/Workcenter.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/Workcenter.cs index a4420de2..a8733334 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/Workcenter.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/Workcenter.cs @@ -27,9 +27,7 @@ public class Workcenter : FullAuditedEntity, IMultiTenant public Guid? DepartmentId { get; set; } public Department? Department { get; set; } - public Guid? StatusId { get; set; } - public WorkcenterStatus? Status { get; set; } - + public string Status { get; set; } public string Criticality { get; set; } public int Capacity { get; set; } public decimal CostPerHour { get; set; } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/WorkcenterStatus.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/WorkcenterStatus.cs index 03324d97..694396d0 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/WorkcenterStatus.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Maintenance/WorkcenterStatus.cs @@ -9,7 +9,6 @@ public class WorkcenterStatus : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } - public string Code { get; set; } public string Name { get; set; } public string Description { get; set; } public bool IsActive { get; set; } diff --git a/api/src/Erp.Platform.Domain/Queries/CommandColumn.cs b/api/src/Erp.Platform.Domain/Queries/CommandColumn.cs index f4e4cc19..8717415b 100644 --- a/api/src/Erp.Platform.Domain/Queries/CommandColumn.cs +++ b/api/src/Erp.Platform.Domain/Queries/CommandColumn.cs @@ -54,6 +54,15 @@ public class CommandColumn : ValueObject /// Url boş ise calisacak 'eval' icerisinde calisacak olan kod /// public string OnClick { get; set; } + /// Görünür durumu + /// + public bool IsVisible { get; set; } = true; + /// Dinamik görünürlük kontrolü için JavaScript fonksiyonu + /// Örnek: "(e) => !e.row.isEditing" veya "(e) => e.row.data.Status === 'Active'" + /// Fonksiyon parametre olarak DevExtreme button event objesini alır (e.row, e.row.data, e.row.isEditing vb.) + /// true/false döndürmelidir + /// + public string VisibleExpression { get; set; } protected override IEnumerable GetAtomicValues() { @@ -67,6 +76,8 @@ public class CommandColumn : ValueObject yield return DialogName; yield return DialogParameters; yield return OnClick; + yield return IsVisible; + yield return VisibleExpression; } } diff --git a/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index 10dafb58..5e49476c 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -2717,7 +2717,7 @@ public class PlatformDbContext : b.Property(x => x.Location).HasMaxLength(250); b.Property(x => x.DepartmentId).IsRequired(); - b.Property(x => x.StatusId).IsRequired(); + b.Property(x => x.Status).IsRequired().HasMaxLength(20); b.Property(x => x.Criticality).HasMaxLength(10); b.Property(x => x.Capacity).HasDefaultValue(0); @@ -2729,11 +2729,6 @@ public class PlatformDbContext : .WithMany(x => x.Workcenters) .HasForeignKey(x => x.WorkcenterTypeId) .OnDelete(DeleteBehavior.Restrict); - - b.HasOne(x => x.Status) - .WithMany(x => x.Workcenters) - .HasForeignKey(x => x.StatusId) - .OnDelete(DeleteBehavior.Restrict); }); builder.Entity(b => @@ -2815,7 +2810,7 @@ public class PlatformDbContext : b.Property(x => x.Title).HasMaxLength(200); b.Property(x => x.Description); b.Property(x => x.AssignedTo).HasMaxLength(150); - b.Property(x => x.FaultStatusId).IsRequired(); + b.Property(x => x.Status).IsRequired().HasMaxLength(20); b.Property(x => x.ResolutionNotes); b.Property(x => x.ClosedBy).HasMaxLength(150); b.Property(x => x.WorkOrderId).HasMaxLength(100); diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121074401_Initial.Designer.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121142619_Initial.Designer.cs similarity index 99% rename from api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121074401_Initial.Designer.cs rename to api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121142619_Initial.Designer.cs index 4ef373be..cf3a6f83 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121074401_Initial.Designer.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121142619_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Erp.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20251121074401_Initial")] + [Migration("20251121142619_Initial")] partial class Initial { /// @@ -4586,7 +4586,7 @@ namespace Erp.Platform.Migrations b.Property("EstimatedRepairTime") .HasColumnType("int"); - b.Property("FaultStatusId") + b.Property("FaultStatusId") .HasColumnType("uniqueidentifier"); b.Property("FaultTypeId") @@ -4627,6 +4627,11 @@ namespace Erp.Platform.Migrations .HasMaxLength(50) .HasColumnType("nvarchar(50)"); + b.Property("Status") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); @@ -11668,8 +11673,10 @@ namespace Erp.Platform.Migrations .HasColumnType("int") .HasDefaultValue(0); - b.Property("StatusId") - .HasColumnType("uniqueidentifier"); + b.Property("Status") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); b.Property("TenantId") .HasColumnType("uniqueidentifier") @@ -11678,6 +11685,9 @@ namespace Erp.Platform.Migrations b.Property("WarrantyExpiry") .HasColumnType("datetime2"); + b.Property("WorkcenterStatusId") + .HasColumnType("uniqueidentifier"); + b.Property("WorkcenterTypeId") .HasColumnType("uniqueidentifier"); @@ -11685,7 +11695,7 @@ namespace Erp.Platform.Migrations b.HasIndex("DepartmentId"); - b.HasIndex("StatusId"); + b.HasIndex("WorkcenterStatusId"); b.HasIndex("WorkcenterTypeId"); @@ -11766,9 +11776,6 @@ namespace Erp.Platform.Migrations b.Property("Id") .HasColumnType("uniqueidentifier"); - b.Property("Code") - .HasColumnType("nvarchar(max)"); - b.Property("CreationTime") .HasColumnType("datetime2") .HasColumnName("CreationTime"); @@ -14515,11 +14522,9 @@ namespace Erp.Platform.Migrations modelBuilder.Entity("Erp.Platform.Entities.Fault", b => { - b.HasOne("Erp.Platform.Entities.FaultStatus", "FaultStatus") + b.HasOne("Erp.Platform.Entities.FaultStatus", null) .WithMany("Faults") - .HasForeignKey("FaultStatusId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("FaultStatusId"); b.HasOne("Erp.Platform.Entities.FaultType", "FaultType") .WithMany("Faults") @@ -14533,8 +14538,6 @@ namespace Erp.Platform.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.Navigation("FaultStatus"); - b.Navigation("FaultType"); b.Navigation("WorkCenter"); @@ -15271,11 +15274,9 @@ namespace Erp.Platform.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("Erp.Platform.Entities.WorkcenterStatus", "Status") + b.HasOne("Erp.Platform.Entities.WorkcenterStatus", null) .WithMany("Workcenters") - .HasForeignKey("StatusId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); + .HasForeignKey("WorkcenterStatusId"); b.HasOne("Erp.Platform.Entities.WorkcenterType", "WorkcenterType") .WithMany("Workcenters") @@ -15285,8 +15286,6 @@ namespace Erp.Platform.Migrations b.Navigation("Department"); - b.Navigation("Status"); - b.Navigation("WorkcenterType"); }); diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121074401_Initial.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121142619_Initial.cs similarity index 99% rename from api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121074401_Initial.cs rename to api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121142619_Initial.cs index a1c17a2f..526b7e3a 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121074401_Initial.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251121142619_Initial.cs @@ -1326,7 +1326,6 @@ namespace Erp.Platform.Migrations { Id = table.Column(type: "uniqueidentifier", nullable: false), TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Code = table.Column(type: "nvarchar(max)", nullable: true), Name = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), Description = table.Column(type: "nvarchar(500)", maxLength: 500, nullable: true), IsActive = table.Column(type: "bit", nullable: false, defaultValue: true), @@ -4823,12 +4822,13 @@ namespace Erp.Platform.Migrations WarrantyExpiry = table.Column(type: "datetime2", nullable: true), Location = table.Column(type: "nvarchar(250)", maxLength: 250, nullable: true), DepartmentId = table.Column(type: "uniqueidentifier", nullable: false), - StatusId = table.Column(type: "uniqueidentifier", nullable: false), + Status = table.Column(type: "nvarchar(20)", maxLength: 20, nullable: false), Criticality = table.Column(type: "nvarchar(10)", maxLength: 10, nullable: true), Capacity = table.Column(type: "int", nullable: false, defaultValue: 0), CostPerHour = table.Column(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false, defaultValue: 0m), SetupTime = table.Column(type: "int", nullable: false, defaultValue: 0), IsActive = table.Column(type: "bit", nullable: false, defaultValue: true), + WorkcenterStatusId = table.Column(type: "uniqueidentifier", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), @@ -4847,11 +4847,10 @@ namespace Erp.Platform.Migrations principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_Mnt_T_Workcenter_Mnt_T_WorkcenterStatus_StatusId", - column: x => x.StatusId, + name: "FK_Mnt_T_Workcenter_Mnt_T_WorkcenterStatus_WorkcenterStatusId", + column: x => x.WorkcenterStatusId, principalTable: "Mnt_T_WorkcenterStatus", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); + principalColumn: "Id"); table.ForeignKey( name: "FK_Mnt_T_Workcenter_Mnt_T_WorkcenterType_WorkcenterTypeId", column: x => x.WorkcenterTypeId, @@ -4996,7 +4995,7 @@ namespace Erp.Platform.Migrations Severity = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: true), EstimatedRepairTime = table.Column(type: "int", nullable: true), FollowUpRequired = table.Column(type: "bit", nullable: false), - FaultStatusId = table.Column(type: "uniqueidentifier", nullable: false), + Status = table.Column(type: "nvarchar(20)", maxLength: 20, nullable: false), IsActive = table.Column(type: "bit", nullable: false), AssignedTo = table.Column(type: "nvarchar(150)", maxLength: 150, nullable: true), ActualRepairTime = table.Column(type: "int", nullable: true), @@ -5004,6 +5003,7 @@ namespace Erp.Platform.Migrations ResolutionNotes = table.Column(type: "nvarchar(max)", nullable: true), ClosedBy = table.Column(type: "nvarchar(150)", maxLength: 150, nullable: true), ClosedAt = table.Column(type: "datetime2", nullable: true), + FaultStatusId = table.Column(type: "uniqueidentifier", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), @@ -5019,8 +5019,7 @@ namespace Erp.Platform.Migrations name: "FK_Mnt_T_Fault_Mnt_T_FaultStatus_FaultStatusId", column: x => x.FaultStatusId, principalTable: "Mnt_T_FaultStatus", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + principalColumn: "Id"); table.ForeignKey( name: "FK_Mnt_T_Fault_Mnt_T_FaultType_FaultTypeId", column: x => x.FaultTypeId, @@ -6575,9 +6574,9 @@ namespace Erp.Platform.Migrations column: "DepartmentId"); migrationBuilder.CreateIndex( - name: "IX_Mnt_T_Workcenter_StatusId", + name: "IX_Mnt_T_Workcenter_WorkcenterStatusId", table: "Mnt_T_Workcenter", - column: "StatusId"); + column: "WorkcenterStatusId"); migrationBuilder.CreateIndex( name: "IX_Mnt_T_Workcenter_WorkcenterTypeId", diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 155f02c5..306fed38 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -4583,7 +4583,7 @@ namespace Erp.Platform.Migrations b.Property("EstimatedRepairTime") .HasColumnType("int"); - b.Property("FaultStatusId") + b.Property("FaultStatusId") .HasColumnType("uniqueidentifier"); b.Property("FaultTypeId") @@ -4624,6 +4624,11 @@ namespace Erp.Platform.Migrations .HasMaxLength(50) .HasColumnType("nvarchar(50)"); + b.Property("Status") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); @@ -11665,8 +11670,10 @@ namespace Erp.Platform.Migrations .HasColumnType("int") .HasDefaultValue(0); - b.Property("StatusId") - .HasColumnType("uniqueidentifier"); + b.Property("Status") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); b.Property("TenantId") .HasColumnType("uniqueidentifier") @@ -11675,6 +11682,9 @@ namespace Erp.Platform.Migrations b.Property("WarrantyExpiry") .HasColumnType("datetime2"); + b.Property("WorkcenterStatusId") + .HasColumnType("uniqueidentifier"); + b.Property("WorkcenterTypeId") .HasColumnType("uniqueidentifier"); @@ -11682,7 +11692,7 @@ namespace Erp.Platform.Migrations b.HasIndex("DepartmentId"); - b.HasIndex("StatusId"); + b.HasIndex("WorkcenterStatusId"); b.HasIndex("WorkcenterTypeId"); @@ -11763,9 +11773,6 @@ namespace Erp.Platform.Migrations b.Property("Id") .HasColumnType("uniqueidentifier"); - b.Property("Code") - .HasColumnType("nvarchar(max)"); - b.Property("CreationTime") .HasColumnType("datetime2") .HasColumnName("CreationTime"); @@ -14512,11 +14519,9 @@ namespace Erp.Platform.Migrations modelBuilder.Entity("Erp.Platform.Entities.Fault", b => { - b.HasOne("Erp.Platform.Entities.FaultStatus", "FaultStatus") + b.HasOne("Erp.Platform.Entities.FaultStatus", null) .WithMany("Faults") - .HasForeignKey("FaultStatusId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("FaultStatusId"); b.HasOne("Erp.Platform.Entities.FaultType", "FaultType") .WithMany("Faults") @@ -14530,8 +14535,6 @@ namespace Erp.Platform.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.Navigation("FaultStatus"); - b.Navigation("FaultType"); b.Navigation("WorkCenter"); @@ -15268,11 +15271,9 @@ namespace Erp.Platform.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("Erp.Platform.Entities.WorkcenterStatus", "Status") + b.HasOne("Erp.Platform.Entities.WorkcenterStatus", null) .WithMany("Workcenters") - .HasForeignKey("StatusId") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); + .HasForeignKey("WorkcenterStatusId"); b.HasOne("Erp.Platform.Entities.WorkcenterType", "WorkcenterType") .WithMany("Workcenters") @@ -15282,8 +15283,6 @@ namespace Erp.Platform.Migrations b.Navigation("Department"); - b.Navigation("Status"); - b.Navigation("WorkcenterType"); }); diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json index be1ea144..2d67267f 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json @@ -3301,7 +3301,7 @@ "endDate": "01-12-2024", "totalDays": 0.5, "reason": "Kişisel işler", - "status": "Rejected", + "status": "Reddedildi", "appliedDate": "02-11-2024", "rejectionReason": "Proje teslim tarihi nedeniyle uygun değil", "isHalfDay": true @@ -4857,25 +4857,21 @@ ], "WorkcenterStatuses": [ { - "code": "OP", "name": "Operational", "description": "İş Merkezi Operatif Durumda", "isActive": true }, { - "code": "UM", "name": "Under Maintenance", "description": "İş Merkezi Bakımda", "isActive": true }, { - "code": "OO", "name": "Out of Order", "description": "İş Merkezi Arızalı", "isActive": true }, { - "code": "RT", "name": "Retired", "description": "İş Merkezi Kullanımdan Kaldırıldı", "isActive": true @@ -4894,7 +4890,7 @@ "warrantyExpiry": "2025-03-15T00:00:00", "location": "Atölye A - Hat 1", "departmentCode": "ÜRT", - "statusCode": "OP", + "status": "Operational", "criticality": "High", "capacity": 8, "costPerHour": 75, @@ -4913,7 +4909,7 @@ "warrantyExpiry": "2024-08-20T00:00:00", "location": "Kompresör Odası", "departmentCode": "BAK", - "statusCode": "UM", + "status": "Under Maintenance", "criticality": "Critical", "capacity": 8, "costPerHour": 85, @@ -4931,7 +4927,7 @@ "installationDate": "2020-11-10T00:00:00", "location": "Ana Üretim Hattı", "departmentCode": "KAL", - "statusCode": "OO", + "status": "Out of Order", "criticality": "Medium", "capacity": 8, "costPerHour": 85, diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs index e460729c..fc3b08bd 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs @@ -1950,13 +1950,12 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency foreach (var item in items.WorkcenterStatuses) { - var exists = await _workcenterStatusRepository.AnyAsync(x => x.Code == item.Code); + var exists = await _workcenterStatusRepository.AnyAsync(x => x.Name == item.Name); if (exists) continue; await _workcenterStatusRepository.InsertAsync(new WorkcenterStatus { - Code = item.Code, Name = item.Name, Description = item.Description, IsActive = item.IsActive @@ -1971,7 +1970,6 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency var department = await _departmentRepository.FirstOrDefaultAsync(x => x.Code == item.DepartmentCode); var workcenterType = await _workcenterTypeRepository.FirstOrDefaultAsync(x => x.Code == item.WorkcenterTypeCode); - var status = await _workcenterStatusRepository.FirstOrDefaultAsync(x => x.Code == item.StatusCode); await _workcenterRepository.InsertAsync(new Workcenter { @@ -1986,7 +1984,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency WarrantyExpiry = item.WarrantyExpiry, Location = item.Location, DepartmentId = department?.Id, - StatusId = status?.Id, + Status = item.Status, Criticality = item.Criticality, Capacity = item.Capacity, CostPerHour = item.CostPerHour, @@ -2069,7 +2067,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency Severity = item.Severity, Title = item.Title, Description = item.Description, - FaultStatusId = faultStatus?.Id, + Status = item.Status, EstimatedRepairTime = item.EstimatedRepairTime, ActualRepairTime = item.ActualRepairTime, ResolutionNotes = item.ResolutionNotes, diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs index 6a0cebab..f575cabb 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs @@ -170,7 +170,7 @@ public class WorkcenterSeedDto public string Location { get; set; } public string DepartmentCode { get; set; } - public string StatusCode { get; set; } + public string Status { get; set; } public string Criticality { get; set; } public int Capacity { get; set; } @@ -189,7 +189,6 @@ public class WorkcenterTypeSeedDto public class WorkcenterStatusSeedDto { - public string Code { get; set; } public string Name { get; set; } public string Description { get; set; } public bool IsActive { get; set; } diff --git a/ui/src/proxy/form/models.ts b/ui/src/proxy/form/models.ts index 6d9bcc29..25c12ca0 100644 --- a/ui/src/proxy/form/models.ts +++ b/ui/src/proxy/form/models.ts @@ -303,6 +303,8 @@ export interface CommandColumnDto { dialogName?: string dialogParameters?: string onClick?: string + isVisible: boolean + visibleExpression?: string } export interface GridBoxOptionsDto { diff --git a/ui/src/views/admin/listForm/edit/FormTabCommands.tsx b/ui/src/views/admin/listForm/edit/FormTabCommands.tsx index 1c0eabff..6e9412c0 100644 --- a/ui/src/views/admin/listForm/edit/FormTabCommands.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabCommands.tsx @@ -62,6 +62,8 @@ function FormTabCommands() { {translate('::ListForms.ListFormEdit.CommandAuthorizationType')} {translate('::ListForms.ListFormEdit.CommandUrlTarget')} {translate('::ListForms.ListFormEdit.CommandUrl')} + {translate('::ListForms.ListFormEdit.CommandVisible')} + {translate('::ListForms.ListFormEdit.CommandVisibleExpression')} @@ -113,6 +115,8 @@ function FormTabCommands() { {row.authName} {row.urlTarget} {row.url} + {row.isVisible ? 'Yes' : 'No'} + {row.visibleExpression} ))} diff --git a/ui/src/views/admin/listForm/edit/json-row-operations/JsonRowOpDialogCommand.tsx b/ui/src/views/admin/listForm/edit/json-row-operations/JsonRowOpDialogCommand.tsx index e306c789..8c71a7cb 100644 --- a/ui/src/views/admin/listForm/edit/json-row-operations/JsonRowOpDialogCommand.tsx +++ b/ui/src/views/admin/listForm/edit/json-row-operations/JsonRowOpDialogCommand.tsx @@ -1,5 +1,6 @@ import { Button, + Checkbox, Dialog, FormContainer, FormItem, @@ -98,6 +99,7 @@ function JsonRowOpDialogCommand({ id="commandOperation" isOpen={isOpen} preventScroll={true} + width={900} onClose={handleClose} onRequestClose={handleClose} > @@ -117,6 +119,8 @@ function JsonRowOpDialogCommand({ dialogName: '', dialogParameters: '', onClick: '', + isVisible: true, + visibleExpression: '', } } validationSchema={schema} @@ -157,96 +161,124 @@ function JsonRowOpDialogCommand({
- - + - {({ field, form }: FieldProps) => ( - option.value === values.buttonPosition, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + - {({ field, form }: FieldProps) => ( - option.value === values.authName, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + +
- - - - - - + Url Options diff --git a/ui/src/views/list/useListFormColumns.ts b/ui/src/views/list/useListFormColumns.ts index b24ebbe3..4bc5c357 100644 --- a/ui/src/views/list/useListFormColumns.ts +++ b/ui/src/views/list/useListFormColumns.ts @@ -323,8 +323,21 @@ const useListFormColumns = ({ if (action.buttonPosition !== UiCommandButtonPositionTypeEnum.CommandColumn) return if (!checkPermission(action.authName)) return + // visibleExpression varsa dinamik fonksiyon oluştur, yoksa statik değer kullan + let visibleFunc: ((e: any) => boolean) | boolean = action.isVisible + if (action.visibleExpression) { + try { + // visibleExpression string'ini fonksiyona çevir + // Örnek: "(e) => !e.row.isEditing" veya "(e) => e.row.data.Status === 'Active'" + visibleFunc = eval(action.visibleExpression) + } catch (error) { + console.error('VisibleExpression evaluation error:', error, action.visibleExpression) + visibleFunc = action.isVisible // Hata durumunda varsayılan değeri kullan + } + } + const item = { - visible: true, + visible: visibleFunc, hint: action.hint, icon: action.icon, text: translate('::' + action.text),