Skip to content

Commit 42c733f

Browse files
committed
Add option to import fields after the element is created
1 parent e056757 commit 42c733f

File tree

4 files changed

+44
-7
lines changed

4 files changed

+44
-7
lines changed

src/Commons/Localization/MasterDataResources.pt.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3515,6 +3515,9 @@
35153515
<data name="FormElement" xml:space="preserve">
35163516
<value>Formulário do Elemento</value>
35173517
</data>
3518+
<data name="Import Fields From Table" xml:space="preserve">
3519+
<value>Importar Campos da Tabela</value>
3520+
</data>
35183521
<data name="Auto Reload" xml:space="preserve">
35193522
<value>Recarregar Valores</value>
35203523
</data>

src/Core/DataDictionary/Services/FieldService.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Linq;
33
using System.Threading.Tasks;
44
using JJMasterData.Commons.Data.Entity.Models;
5+
using JJMasterData.Commons.Data.Entity.Repository.Abstractions;
56
using JJMasterData.Commons.Localization;
67
using JJMasterData.Core.DataDictionary.Models;
78
using JJMasterData.Core.DataDictionary.Repository.Abstractions;
@@ -12,8 +13,10 @@
1213

1314
namespace JJMasterData.Core.DataDictionary.Services;
1415

15-
public class FieldService(IValidationDictionary validationDictionary,
16+
public class FieldService(
17+
IValidationDictionary validationDictionary,
1618
IDataDictionaryRepository dataDictionaryRepository,
19+
IEntityRepository entityRepository,
1720
IEnumerable<IExpressionProvider> expressionProviders,
1821
IStringLocalizer<MasterDataResources> stringLocalizer)
1922
: DataDictionaryServiceBase(validationDictionary, dataDictionaryRepository,stringLocalizer)
@@ -514,4 +517,21 @@ public Task SetFormElementAsync(FormElement formElement)
514517
{
515518
return DataDictionaryRepository.InsertOrReplaceAsync(formElement);
516519
}
520+
521+
public async Task ImportFieldsFromTable(string elementName)
522+
{
523+
var existingElement = await DataDictionaryRepository.GetFormElementAsync(elementName);
524+
var elementFromDb = await entityRepository.GetElementFromTableAsync(existingElement.Schema ?? "dbo", existingElement.TableName);
525+
526+
var fields = elementFromDb.Fields;
527+
foreach (var field in fields)
528+
{
529+
if (!existingElement.Fields.Contains(field.Name))
530+
{
531+
existingElement.Fields.Add(new(field));
532+
}
533+
}
534+
535+
await DataDictionaryRepository.InsertOrReplaceAsync(existingElement);
536+
}
517537
}

src/Web/Areas/DataDictionary/Controllers/FieldController.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,4 +368,10 @@ public async Task<RedirectToActionResult> CopyFrom(string elementName, string co
368368

369369
return RedirectToIndex(elementName, field);
370370
}
371+
372+
public async Task<IActionResult> ImportFields(string elementName)
373+
{
374+
await fieldService.ImportFieldsFromTable(elementName);
375+
return RedirectToAction("Index", new {elementName});
376+
}
371377
}

src/Web/Areas/DataDictionary/Views/Field/Index.cshtml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
ViewData["Title"] = $"{ViewData["ElementName"]} - {StringLocalizer["Fields"]}";
1313
var isForm = ViewData["IsForm"] is true;
1414
var elementName = ViewData["ElementName"]!.ToString();
15+
var fields = (FormElementFieldList)ViewData["Fields"]!;
1516
Layout = !isForm ? Options.Value.ModalLayoutPath : "_FormElementMenuLayout";
1617
}
1718

@@ -145,30 +146,37 @@
145146

146147
@if (isForm)
147148
{
149+
<button class="input-group-text" style="cursor:pointer" data-bs-toggle="tooltip"
150+
title="@StringLocalizer["Import Fields From Table"]"
151+
asp-route-elementName="@elementName"
152+
asp-action="ImportFields"
153+
type="submit">
154+
<i class="fa-solid fa-upload"></i>
155+
</button>
148156
<div class="input-group-text" style="cursor:pointer" data-bs-toggle="tooltip"
149157
title="@StringLocalizer["Copy From..."]"
150158
onclick="showCopyFromModal()">
151-
<span class="fa-solid fa-copy"></span>
159+
<i class="fa-solid fa-copy"></i>
152160
</div>
153161
}
154162

155163
<div class="input-group-text" style="cursor:pointer" data-bs-toggle="tooltip"
156164
title="@StringLocalizer["Add"]"
157-
onclick="loadFieldDetails('@Url.Action("Add", new { elementName = elementName })', '');">
158-
<span class="fa fa-plus"></span>
165+
onclick="loadFieldDetails('@Url.Action("Add", new { elementName })', '');">
166+
<i class="fa fa-plus"></i>
159167
</div>
160168
</div>
161169
<br/>
162170
<div class="jjrelative">
163171
<div id="field-list">
164172
<div class="list-group jj-list-group jjsortable" id="sortable-grid">
165-
@if (ViewBag.Fields.Count == 0)
173+
@if (fields.Count == 0)
166174
{
167175
<div>@StringLocalizer["No record found"]</div>
168176
}
169-
@for (int i = 0; i < ViewBag.Fields.Count; i++)
177+
@for (var i = 0; i < fields.Count; i++)
170178
{
171-
FormElementField field = ViewBag.Fields[i];
179+
var field = fields[i];
172180
var fieldName = field.Name;
173181

174182
<a href="javascript:loadFieldDetails('@Url.Action("Detail", new { elementName = elementName, fieldName })', '@fieldName' );"

0 commit comments

Comments
 (0)