mirror of
https://github.com/LD-Reborn/Berufsschule_HAM.git
synced 2025-12-20 06:51:55 +00:00
Merge pull request #121 from LD-Reborn/120-feature-add-localization-to-assets-frontend
120 feature add localization to assets frontend
This commit is contained in:
@@ -66,6 +66,7 @@ public class AssetsController : Controller
|
||||
[HttpPost("Create")]
|
||||
public async Task<AssetsCreateResponseModel> Create([FromBody]AssetsCreateRequestModel assetModel)
|
||||
{
|
||||
string? assetId;
|
||||
AssetsCreateResponseModel result;
|
||||
if (assetModel is null)
|
||||
{
|
||||
@@ -82,8 +83,8 @@ public class AssetsController : Controller
|
||||
[
|
||||
new LdapAttribute("objectClass", ["top", "device", "extensibleObject"]),
|
||||
];
|
||||
|
||||
attributeSet.Add(new LdapAttribute("cn", await _ldap.GetAssetCounterAndIncrementAsync()));
|
||||
assetId = await _ldap.GetAssetCounterAndIncrementAsync();
|
||||
attributeSet.Add(new LdapAttribute("cn", assetId));
|
||||
if (assetModel.SerialNumber != null)
|
||||
{
|
||||
attributeSet.Add(new LdapAttribute("serialNumber", assetModel.SerialNumber));
|
||||
@@ -107,7 +108,7 @@ public class AssetsController : Controller
|
||||
}
|
||||
|
||||
await _ldap.CreateAsset(attributeSet);
|
||||
result = new AssetsCreateResponseModel(successful: true);
|
||||
result = new AssetsCreateResponseModel(successful: true, assetId);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
using Berufsschule_HAM.Models;
|
||||
|
||||
public class AssetsCreateResponseModel(bool successful, string exception = "None")
|
||||
public class AssetsCreateResponseModel(bool successful, string? assetId = null, string exception = "None")
|
||||
{
|
||||
public bool Success { get; set; } = successful;
|
||||
public string? AssetId { get; set; } = assetId;
|
||||
|
||||
public string? Exception { get; set; } = exception;
|
||||
}
|
||||
|
||||
@@ -13,8 +13,26 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value>
|
||||
</resheader>
|
||||
|
||||
<data name="Assets" xml:space="preserve">
|
||||
<value>Assets</value>
|
||||
</data>
|
||||
<data name="Create asset" xml:space="preserve">
|
||||
<value>Asset anlegen</value>
|
||||
<value>Asset erstellen</value>
|
||||
</data>
|
||||
<data name="Owner" xml:space="preserve">
|
||||
<value>Besitzer</value>
|
||||
</data>
|
||||
<data name="Asset ID" xml:space="preserve">
|
||||
<value>Asset ID</value>
|
||||
</data>
|
||||
<data name="Asset Name" xml:space="preserve">
|
||||
<value>Asset Name</value>
|
||||
</data>
|
||||
<data name="Location" xml:space="preserve">
|
||||
<value>Ort</value>
|
||||
</data>
|
||||
<data name="Action" xml:space="preserve">
|
||||
<value>Aktion</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>Anpassen</value>
|
||||
@@ -22,4 +40,103 @@
|
||||
<data name="Delete" xml:space="preserve">
|
||||
<value>Löschen</value>
|
||||
</data>
|
||||
<data name="Create Asset" xml:space="preserve">
|
||||
<value>Asset erstellen</value>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>Name</value>
|
||||
</data>
|
||||
<data name="Serial Number" xml:space="preserve">
|
||||
<value>Seriennummer</value>
|
||||
</data>
|
||||
<data name="Description" xml:space="preserve">
|
||||
<value>Beschreibung</value>
|
||||
</data>
|
||||
<data name="Type" xml:space="preserve">
|
||||
<value>Art</value>
|
||||
</data>
|
||||
<data name="Make" xml:space="preserve">
|
||||
<value>Marke</value>
|
||||
</data>
|
||||
<data name="Model" xml:space="preserve">
|
||||
<value>Modell</value>
|
||||
</data>
|
||||
<data name="Attributes" xml:space="preserve">
|
||||
<value>Attribute</value>
|
||||
</data>
|
||||
<data name="Add Attribute" xml:space="preserve">
|
||||
<value>Attribut hinzufügen</value>
|
||||
</data>
|
||||
<data name="Purchase Information" xml:space="preserve">
|
||||
<value>Kaufinformationen</value>
|
||||
</data>
|
||||
<data name="Purchase Value" xml:space="preserve">
|
||||
<value>Kaufwert</value>
|
||||
</data>
|
||||
<data name="Purchased At" xml:space="preserve">
|
||||
<value>Gekauft bei</value>
|
||||
</data>
|
||||
<data name="Purchased By" xml:space="preserve">
|
||||
<value>Gekauft von</value>
|
||||
</data>
|
||||
<data name="Cancel" xml:space="preserve">
|
||||
<value>Abbrechen</value>
|
||||
</data>
|
||||
<data name="Create" xml:space="preserve">
|
||||
<value>Erstellen</value>
|
||||
</data>
|
||||
<data name="Update Asset" xml:space="preserve">
|
||||
<value>Asset anpassen</value>
|
||||
</data>
|
||||
<data name="Purchase Date" xml:space="preserve">
|
||||
<value>Kaufdatum</value>
|
||||
</data>
|
||||
<data name="Save Changes" xml:space="preserve">
|
||||
<value>Änderungen anwenden</value>
|
||||
</data>
|
||||
<data name="Attribute name" xml:space="preserve">
|
||||
<value>Attribut Name</value>
|
||||
</data>
|
||||
<data name="Attribute value" xml:space="preserve">
|
||||
<value>Attribut Wert</value>
|
||||
</data>
|
||||
<data name="Remove" xml:space="preserve">
|
||||
<value>Entfernen</value>
|
||||
</data>
|
||||
<data name="Confirm Delete" xml:space="preserve">
|
||||
<value>Asset löschen</value>
|
||||
</data>
|
||||
<data name="AssetDeleteConfirmation1" xml:space="preserve">
|
||||
<value>Sind Sie sicher, dass Sie das Asset</value>
|
||||
</data>
|
||||
<data name="AssetDeleteConfirmation2" xml:space="preserve">
|
||||
<value> löschen wollen?</value>
|
||||
</data>
|
||||
<data name="Yes, Delete" xml:space="preserve">
|
||||
<value>Ja, löschen</value>
|
||||
</data>
|
||||
<data name="Asset deleted successfully" xml:space="preserve">
|
||||
<value>Asset wurde erfolgreich gelöscht</value>
|
||||
</data>
|
||||
<data name="Error contacting server" xml:space="preserve">
|
||||
<value>Server konnte nicht erreicht werden</value>
|
||||
</data>
|
||||
<data name="Unknown error" xml:space="preserve">
|
||||
<value>Unbekannter Fehler</value>
|
||||
</data>
|
||||
<data name="Asset created successfully" xml:space="preserve">
|
||||
<value>Asset wurde erfolgreich erstellt</value>
|
||||
</data>
|
||||
<data name="Error creating asset" xml:space="preserve">
|
||||
<value>Fehler beim Erstellen des Asset</value>
|
||||
</data>
|
||||
<data name="Error loading asset data" xml:space="preserve">
|
||||
<value>Fehler beim Laden der Asset Daten</value>
|
||||
</data>
|
||||
<data name="Asset updated successfully" xml:space="preserve">
|
||||
<value>Asset wurde erfolgreich angepasst</value>
|
||||
</data>
|
||||
<data name="Error updating asset" xml:space="preserve">
|
||||
<value>Fehler beim Anpassen des Assets</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
21
src/Resources/Views.Home.Assets.en.resx
Normal file
21
src/Resources/Views.Home.Assets.en.resx
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, ...</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value>
|
||||
</resheader>
|
||||
<data name="AssetDeleteConfirmation1" xml:space="preserve">
|
||||
<value>Are you sure you want to delete the asset</value>
|
||||
</data>
|
||||
<data name="AssetDeleteConfirmation2" xml:space="preserve">
|
||||
<value>?</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -67,16 +67,16 @@
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header bg-danger text-white">
|
||||
<h5 class="modal-title" id="deleteModalLabel">Confirm Delete</h5>
|
||||
<h5 class="modal-title" id="deleteModalLabel">@T["Confirm Delete"]</h5>
|
||||
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>Are you sure you want to delete the asset <strong id="assetName"></strong> (ID: <span id="assetId"></span>)?</p>
|
||||
<p>@T["AssetDeleteConfirmation1"] <strong id="assetName"></strong> (ID: <span id="assetId"></span>)@T["AssetDeleteConfirmation2"]</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">@T["Cancel"]</button>
|
||||
<form id="deleteForm" method="post" action="">
|
||||
<button type="submit" class="btn btn-danger">Yes, Delete</button>
|
||||
<button type="submit" class="btn btn-danger">@T["Yes, Delete"]</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -157,13 +157,13 @@
|
||||
row.classList.add('table-danger');
|
||||
setTimeout(() => row.remove(), 300);
|
||||
|
||||
showToast('Asset deleted successfully', 'success');
|
||||
showToast('@T["Asset deleted successfully"]', 'success');
|
||||
} else {
|
||||
showToast(`${result.reason}: ${result.exception || 'Unknown error'}`, 'danger');
|
||||
showToast(`${result.reason}: ${result.exception || '@T["Unknown error"]'}`, 'danger');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
showToast('Error contacting server', 'danger');
|
||||
showToast('@T["Error contacting server"]', 'danger');
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -274,9 +274,9 @@
|
||||
const row = document.createElement('div');
|
||||
row.className = 'd-flex gap-2 align-items-center attribute-row';
|
||||
row.innerHTML = `
|
||||
<input type="text" class="form-control" placeholder="Attribute name" data-attr-name />
|
||||
<input type="text" class="form-control" placeholder="Attribute value" data-attr-value />
|
||||
<button type="button" class="btn btn-danger btn-sm btn-remove-attribute">✖</button>
|
||||
<input type="text" class="form-control" placeholder="@T["Attribute name"]" data-attr-name />
|
||||
<input type="text" class="form-control" placeholder="@T["Attribute value"]" data-attr-value />
|
||||
<button type="button" class="btn btn-danger btn-sm btn-remove-attribute">@T["Remove"]</button>
|
||||
`;
|
||||
attributesContainer.appendChild(row);
|
||||
});
|
||||
@@ -333,14 +333,47 @@
|
||||
bootstrap.Modal.getInstance(createModalEl).hide();
|
||||
createForm.reset();
|
||||
attributesContainer.innerHTML = '';
|
||||
showToast('Asset created successfully', 'success');
|
||||
const tableBody = document.querySelector('table tbody');
|
||||
if (tableBody) {
|
||||
const newRow = document.createElement('tr');
|
||||
newRow.innerHTML = `
|
||||
<td>${jsonData.Owner || ''}</td>
|
||||
<td>${result.assetId || ''}</td>
|
||||
<td>${jsonData.Name || ''}</td>
|
||||
<td>${jsonData.Location || ''}</td>
|
||||
<td>
|
||||
<div class="d-flex gap-2">
|
||||
<button class="btn btn-sm btn-warning btn-update"
|
||||
data-asset-id="${result.assetId}"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#updateAssetModal">
|
||||
@T["Update"]
|
||||
</button>
|
||||
<button class="btn btn-sm btn-danger btn-delete"
|
||||
data-asset-id="${result.assetId}"
|
||||
data-asset-name="${jsonData.Name || ''}"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#deleteModal">
|
||||
@T["Delete"]
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
|
||||
newRow.classList.add('table-success');
|
||||
setTimeout(() => {
|
||||
newRow.classList.toggle('table-success');
|
||||
}, 500);
|
||||
tableBody.append(newRow);
|
||||
}
|
||||
showToast('@T["Asset created successfully"]', 'success');
|
||||
} else {
|
||||
showToast(`${result.reason || 'Error creating asset'}`, 'danger');
|
||||
showToast(`${result.reason || '@T["Error creating asset"]'}`, 'danger');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
showToast('Error contacting server', 'danger');
|
||||
showToast('@T["Error contacting server"]', 'danger');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -448,9 +481,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
const row = document.createElement('div');
|
||||
row.className = 'd-flex gap-2 align-items-center attribute-row';
|
||||
row.innerHTML = `
|
||||
<input type="text" class="form-control" placeholder="Attribute name" data-attr-name />
|
||||
<input type="text" class="form-control" placeholder="Attribute value" data-attr-value />
|
||||
<button type="button" class="btn btn-danger btn-sm btn-remove-attribute">✖</button>
|
||||
<input type="text" class="form-control" placeholder="@T["Attribute name"]" data-attr-name />
|
||||
<input type="text" class="form-control" placeholder="@T["Attribute value"]" data-attr-value />
|
||||
<button type="button" class="btn btn-danger btn-sm btn-remove-attribute">@T["Remove"]</button>
|
||||
`;
|
||||
updateAttributesContainer.appendChild(row);
|
||||
});
|
||||
@@ -493,7 +526,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
row.innerHTML = `
|
||||
<input type="text" class="form-control" value="${attrName}" data-attr-name />
|
||||
<input type="text" class="form-control" value="${attrValue}" data-attr-value />
|
||||
<button type="button" class="btn btn-danger btn-sm btn-remove-attribute">✖</button>
|
||||
<button type="button" class="btn btn-danger btn-sm btn-remove-attribute">@T["Remove"]</button>
|
||||
`;
|
||||
updateAttributesContainer.appendChild(row);
|
||||
}
|
||||
@@ -509,7 +542,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
showToast('Error loading asset data', 'danger');
|
||||
showToast('@T["Error loading asset data"]', 'danger');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -551,7 +584,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
if (result.success) {
|
||||
bootstrap.Modal.getInstance(updateModal).hide();
|
||||
showToast('Asset updated successfully', 'success');
|
||||
showToast('@T["Asset updated successfully"]', 'success');
|
||||
|
||||
// Optionally refresh the row
|
||||
const row = [...document.querySelectorAll('tr')]
|
||||
@@ -563,11 +596,11 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
row.children[3].textContent = jsonData.Location || '';
|
||||
}
|
||||
} else {
|
||||
showToast(result.reason || 'Error updating asset', 'danger');
|
||||
showToast(result.reason || '@T["Error updating asset"]', 'danger');
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
showToast('Error contacting server', 'danger');
|
||||
showToast('@T["Error contacting server"]', 'danger');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user