Added saved filters

pull/6/head
Alvaro Puente Mella 2024-08-01 23:25:46 +02:00
parent 4016f00f78
commit 18ff06afb2
9 changed files with 473 additions and 321 deletions

View File

@ -139,4 +139,21 @@ export class DataService {
}) })
); );
} }
getFilters(): Observable<any> {
return this.http.get<any>('http://127.0.0.1:8080/views?page=1&itemsPerPage=30').pipe(
map(response => {
if (response['hydra:member'] && Array.isArray(response['hydra:member'])) {
return response['hydra:member'];
} else {
throw new Error('Unexpected response format');
}
}),
catchError(error => {
console.error('Error fetching filters', error);
return throwError(error);
})
);
}
} }

View File

@ -122,17 +122,15 @@ mat-spinner {
align-self: center; align-self: center;
} }
.container {
.container { /* Asegúrate de que esta clase sea la del contenedor del botón */
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
width: 200px;
} }
.classroomBtn-container { .classroomBtn-container {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
width: 100%; /* Asegura que el contenedor ocupe todo el ancho disponible */ width: 100%;
padding-right: 20px; /* Opcional: ajusta el espacio a la derecha */ padding-right: 20px;
} }
.classroomBtn { .classroomBtn {

View File

@ -1,27 +1,27 @@
<mat-tab-group> <mat-tab-group>
<mat-tab label="General" i18n-label="@@tabGeneralLabel"> <mat-tab label="General">
<div class="header-container"> <div class="header-container">
<h2 class="title" i18n="@@headerAdminGroups">Administrar grupos</h2> <h2 class="title" i18n="@@adminGroupsTitle">Administrar grupos</h2>
<div class="groups-button-row"> <div class="groups-button-row">
<button mat-flat-button color="primary" (click)="addOU($event)" i18n="@@buttonNewOU">Nueva Unidad Organizativa</button> <button mat-flat-button color="primary" (click)="addOU($event)" i18n="@@newOrganizationalUnitButton">Nueva Unidad Organizativa</button>
<button mat-flat-button color="primary" (click)="addClient($event)" i18n="@@buttonNewClient">Nuevo Cliente</button> <button mat-flat-button color="primary" (click)="addClient($event)" i18n="@@newClientButton">Nuevo Cliente</button>
<button mat-raised-button (click)="openBottomSheet()" i18n="@@buttonLegend">Leyenda</button> <button mat-raised-button (click)="openBottomSheet()" i18n="@@legendButton">Leyenda</button>
</div> </div>
<div class="classroomBtn-container"> <div class="container">
<button mat-flat-button class="classroomBtn" color="accent" (click)="roomMap()" *ngIf="selectedDetail && selectedDetail.type === 'classroom'" i18n="@@buttonRoomMap">Plano de aula</button> <button mat-flat-button class="roomMap-btn" color="accent" (click)="roomMap()" *ngIf="selectedDetail && selectedDetail.type === 'classroom'" i18n="@@classroomMapButton">Plano de aula</button>
</div> </div>
</div> </div>
<div class="search-container"> <div class="search-container">
<mat-form-field appearance="fill"> <mat-form-field appearance="fill">
<mat-label i18n="@@labelSearch">Búsqueda</mat-label> <mat-label i18n="@@searchLabel">Búsqueda</mat-label>
<input matInput placeholder="Búsqueda" [(ngModel)]="searchTerm" (keyup.enter)="search()" i18n-placeholder="@@placeholderSearch"> <input matInput placeholder="Búsqueda" [(ngModel)]="searchTerm" (keyup.enter)="search()" i18n-placeholder="@@searchPlaceholder">
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
<mat-hint i18n="@@hintSearch">Pulsar 'enter' para buscar entre las unidades organizativas</mat-hint> <mat-hint i18n="@@searchHint">Pulsar 'enter' para buscar entre las unidades organizativas</mat-hint>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="groupLists-container"> <div class="groupLists-container">
<mat-card class="card unidad-card"> <mat-card class="card unidad-card">
<mat-card-title i18n="@@cardTitleOU">Unidad organizativa</mat-card-title> <mat-card-title i18n="@@organizationalUnitTitle">Unidad organizativa</mat-card-title>
<mat-card-content> <mat-card-content>
<mat-spinner *ngIf="loading"></mat-spinner> <mat-spinner *ngIf="loading"></mat-spinner>
<mat-list *ngIf="!loading"> <mat-list *ngIf="!loading">
@ -38,45 +38,50 @@
class="edit-icon" class="edit-icon"
#tooltip="matTooltip" #tooltip="matTooltip"
matTooltip="Visualizar en forma de arbol" matTooltip="Visualizar en forma de arbol"
matTooltipHideDelay="0" i18n-matTooltip="@@tooltipViewTree">account_tree matTooltipHideDelay="0"
i18n="@@viewTreeTooltip">account_tree
</mat-icon> </mat-icon>
<span i18n="@@menuItemViewTree">Ver organigrama</span> <span i18n="@@viewTreeMenu">Ver organigrama</span>
</button> </button>
<button mat-menu-item (click)="onEditClick($event, unidad.type, unidad.uuid)"> <button mat-menu-item (click)="onEditClick($event, unidad.type, unidad.uuid)">
<mat-icon <mat-icon
class="edit-icon" class="edit-icon"
#tooltip="matTooltip" #tooltip="matTooltip"
matTooltip="Editar unidad organizativa" matTooltip="Editar unidad organizativa"
matTooltipHideDelay="0" i18n-matTooltip="@@tooltipEditOU">edit matTooltipHideDelay="0"
i18n="@@editUnitTooltip">edit
</mat-icon> </mat-icon>
<span i18n="@@menuItemEditOU">Editar</span> <span i18n="@@editUnitMenu">Editar</span>
</button> </button>
<button mat-menu-item (click)="onShowClick($event, unidad)"> <button mat-menu-item (click)="onShowClick($event, unidad)">
<mat-icon <mat-icon
class="edit-icon" class="edit-icon"
#tooltip="matTooltip" #tooltip="matTooltip"
matTooltip="Visualizar unidad organizativa" matTooltip="Visualizar unidad organizativa"
matTooltipHideDelay="0" i18n-matTooltip="@@tooltipViewOU">visibility matTooltipHideDelay="0"
i18n="@@viewUnitTool">visibility
</mat-icon> </mat-icon>
<span i18n="@@menuItemViewOU">Visualizar datos</span> <span i18n="@@viewUnitMenu">Visualizar datos</span>
</button> </button>
<button mat-menu-item (click)="addOU($event, unidad)"> <button mat-menu-item (click)="addOU($event, unidad)">
<mat-icon <mat-icon
class="edit-icon" class="edit-icon"
#tooltip="matTooltip" #tooltip="matTooltip"
matTooltip="Crear unidad organizativa interna" matTooltip="Crear unidad organizativa interna"
matTooltipHideDelay="0" i18n-matTooltip="@@tooltipAddOU">add_home_work matTooltipHideDelay="0"
i18n="@@addInternalUnitTool">add_home_work
</mat-icon> </mat-icon>
<span i18n="@@menuItemAddOU">Añadir unidad organizativa</span> <span i18n="@@addInternalUnitMenu">Añadir unidad organizativa</span>
</button> </button>
<button mat-menu-item (click)="addClient($event, unidad)"> <button mat-menu-item (click)="addClient($event, unidad)">
<mat-icon <mat-icon
class="edit-icon" class="edit-icon"
#tooltip="matTooltip" #tooltip="matTooltip"
matTooltip="Crear cliente en esta unidad organizativa" matTooltip="Crear cliente en esta unidad organizativa"
matTooltipHideDelay="0" i18n-matTooltip="@@tooltipAddClient">devices matTooltipHideDelay="0"
i18n="@@addClientDevice">devices
</mat-icon> </mat-icon>
<span i18n="@@menuItemAddClient">Crear cliente</span> <span i18n="@@addClientMenu">Crear cliente</span>
</button> </button>
</mat-menu> </mat-menu>
</span> </span>
@ -88,7 +93,7 @@
<mat-card class="card elements-card"> <mat-card class="card elements-card">
<mat-card-title> <mat-card-title>
<div class="title-with-breadcrumb"> <div class="title-with-breadcrumb">
<span i18n="@@cardTitleInternalElements">Elementos internos</span> <span i18n="@@internalElementsTitle">Elementos internos</span>
<mat-card-subtitle> <mat-card-subtitle>
<ng-container *ngFor="let crumb of breadcrumb; let i = index"> <ng-container *ngFor="let crumb of breadcrumb; let i = index">
<a (click)="navigateToBreadcrumb(i)">{{ crumb }}</a> <a (click)="navigateToBreadcrumb(i)">{{ crumb }}</a>
@ -102,7 +107,7 @@
<mat-list *ngIf="!loadingChildren"> <mat-list *ngIf="!loadingChildren">
<div *ngIf="children.length === 0" class="empty-list"> <div *ngIf="children.length === 0" class="empty-list">
<mat-icon>info</mat-icon> <mat-icon>info</mat-icon>
<span i18n="@@emptyListNoInternalElements">No hay elementos internos</span> <span i18n="@@noInternalElementsMessage">No hay elementos internos</span>
</div> </div>
<mat-list-item *ngFor="let child of children" [ngClass]="{'selected-item': child === selectedUnidad, 'clickable-item': true}" (click)="onSelectChild(child)"> <mat-list-item *ngFor="let child of children" [ngClass]="{'selected-item': child === selectedUnidad, 'clickable-item': true}" (click)="onSelectChild(child)">
<div class="item-content"> <div class="item-content">
@ -119,24 +124,24 @@
<mat-icon mat-button [matMenuTriggerFor]="menu" (click)="$event.stopPropagation()">menu</mat-icon> <mat-icon mat-button [matMenuTriggerFor]="menu" (click)="$event.stopPropagation()">menu</mat-icon>
<mat-menu #menu="matMenu"> <mat-menu #menu="matMenu">
<button mat-menu-item (click)="onEditClick($event, child.type, child.uuid)"> <button mat-menu-item (click)="onEditClick($event, child.type, child.uuid)">
<mat-icon class="edit-icon" #tooltip="matTooltip" matTooltip="Editar elemento" matTooltipHideDelay="0" i18n-matTooltip="@@tooltipEditElement">edit</mat-icon> <mat-icon class="edit-icon" #tooltip="matTooltip" matTooltip="Editar elemento" matTooltipHideDelay="0" i18n="@@editElementTooltip">edit</mat-icon>
<span i18n="@@menuItemEditElement">Editar</span> <span i18n="@@editElementMenu">Editar</span>
</button> </button>
<button *ngIf="child.type !== 'client'" mat-menu-item (click)="onShowClick($event, child)"> <button *ngIf="child.type !== 'client'" mat-menu-item (click)="onShowClick($event, child)">
<mat-icon class="edit-icon" #tooltip="matTooltip" matTooltip="Visualizar unidad organizativa" matTooltipHideDelay="0" i18n-matTooltip="@@tooltipViewOUElement">visibility</mat-icon> <mat-icon class="edit-icon" #tooltip="matTooltip" matTooltip="Visualizar unidad organizativa" matTooltipHideDelay="0" i18n="@@viewUnitTooltip">visibility</mat-icon>
<span i18n="@@menuItemViewOUElement">Visualizar datos</span> <span i18n="@@viewUnitMenu">Visualizar datos</span>
</button> </button>
<button *ngIf="child.type !== 'client'" mat-menu-item (click)="addOU($event, child)"> <button *ngIf="child.type !== 'client'" mat-menu-item (click)="addOU($event, child)">
<mat-icon class="edit-icon" #tooltip="matTooltip" matTooltip="Crear unidad organizativa interna" matTooltipHideDelay="0" i18n-matTooltip="@@tooltipAddOUElement">add_home_work</mat-icon> <mat-icon class="edit-icon" #tooltip="matTooltip" matTooltip="Crear unidad organizativa interna" matTooltipHideDelay="0" i18n="@@addInternalUnitTooltip">add_home_work</mat-icon>
<span i18n="@@menuItemAddOUElement">Añadir unidad organizativa</span> <span i18n="@@addInternalUnitMenu">Añadir unidad organizativa</span>
</button> </button>
<button *ngIf="child.type !== 'client'" mat-menu-item (click)="addClient($event, child)"> <button *ngIf="child.type !== 'client'" mat-menu-item (click)="addClient($event, child)">
<mat-icon class="edit-icon" #tooltip="matTooltip" matTooltip="Crear cliente en esta unidad organizativa" matTooltipHideDelay="0" i18n-matTooltip="@@tooltipAddClientElement">devices</mat-icon> <mat-icon class="edit-icon" #tooltip="matTooltip" matTooltip="Crear cliente en esta unidad organizativa" matTooltipHideDelay="0" i18n="@@addClientTooltip">devices</mat-icon>
<span i18n="@@menuItemAddClientElement">Crear cliente</span> <span i18n="@@addClientMenu">Crear cliente</span>
</button> </button>
<button mat-menu-item (click)="onDeleteClick($event, child.uuid, child.name, child.type)"> <button mat-menu-item (click)="onDeleteClick($event, child.uuid, child.name, child.type)">
<mat-icon class="delete-icon" #tooltip="matTooltip" matTooltip="Borrar elemento" matTooltipHideDelay="0" i18n-matTooltip="@@tooltipDeleteElement">delete</mat-icon> <mat-icon class="delete-icon" #tooltip="matTooltip" matTooltip="Borrar elemento" matTooltipHideDelay="0" i18n="@@deleteElementTooltip">delete</mat-icon>
<span i18n="@@menuItemDeleteElement">Borrar elemento</span> <span i18n="@@deleteElementMenu">Borrar elemento</span>
</button> </button>
</mat-menu> </mat-menu>
</span> </span>
@ -145,19 +150,83 @@
</mat-list> </mat-list>
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
<!-- <app-classroom-view class="card classroom-view" [clients]="clientsData" [pcInTable]="5"></app-classroom-view> -->
</div> </div>
</mat-tab> </mat-tab>
<mat-tab label="Búsqueda avanzada" i18n-label="@@tabAdvancedSearchLabel"> <mat-tab label="Búsqueda avanzada">
<h2 class="title" i18n="@@headerSearch">Búsqueda</h2> <h2 class="title" i18n="@@searchTitle">Búsqueda</h2>
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<mat-form-field> <mat-form-field>
<mat-label i18n="@@labelSelectFilter">Seleccione filtro</mat-label> <mat-label i18n="@@selectFilterLabel">Seleccione filtro</mat-label>
<mat-select (selectionChange)="loadSelectedFilter($event.value)"> <mat-select (selectionChange)="loadSelectedFilter($event.value)">
<mat-option *ngFor="let savedFilter of savedFilters" [value]="savedFilter"> <mat-option *ngFor="let savedFilter of savedFilterNames" [value]="savedFilter">
{{ savedFilter.name }} {{ savedFilter }}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<mat-divider class="divider"></mat-divider>
<div class="main-content">
<div class="filters">
<mat-form-field>
<mat-label i18n="@@selectOptionLabel">Selecciona una opción</mat-label>
<mat-select [(value)]="selectedFilter1" (selectionChange)="applyFilter()">
<mat-option value="ou" i18n="@@organizationalUnitsOption">Unidades organizativas</mat-option>
<mat-option value="client" i18n="@@clientsOption">Clientes</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field class="example-full-width">
<mat-label i18n="@@nameLabel">Nombre</mat-label>
<input matInput placeholder="Unidad organizativa" (input)="applyFilter()" [(ngModel)]="filterName" i18n-placeholder="@@namePlaceholder">
</mat-form-field>
<mat-form-field [disabled]="selectedFilter1 === 'ou'">
<mat-label i18n="@@unitTypeLabel">Tipo de unidad</mat-label>
<mat-select [(value)]="selectedFilter2" (selectionChange)="applyFilter()">
<mat-option value="organizational-unit" i18n="@@organizationalUnitOption">Unidad organizativa</mat-option>
<mat-option value="classroom-group" i18n="@@classroomsGroupOption">Grupos de aulas</mat-option>
<mat-option value="classroom" i18n="@@classroomOption">Aulas</mat-option>
<mat-option value="client-group" i18n="@@clientGroupOption">Grupos de clientes</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-label i18n="@@selectAnotherOptionLabel">Selecciona otra opción</mat-label>
<mat-select [(value)]="selectedFilter1" (selectionChange)="applyFilter()">
<mat-option value="none" i18n="@@noneOption">Ninguno</mat-option>
<mat-option value="option1" i18n="@@option1">Opción 1</mat-option>
<mat-option value="option2" i18n="@@option2">Opción 2</mat-option>
<mat-option value="option3" i18n="@@option3">Opción 3</mat-option>
</mat-select>
</mat-form-field>
<button mat-raised-button color="primary" (click)="saveFilters()" i18n="@@saveFiltersButton">Guardar Filtros</button>
</div>
<div class="results">
<ng-container *ngIf="filteredResults && filteredResults.length > 0; else noResults">
<mat-grid-list cols="4" rowHeight="1:1">
<mat-grid-tile *ngFor="let result of filteredResults">
<mat-card class="result-card">
<mat-card-title>{{ result.name }}</mat-card-title>
<mat-card-content>
<p>{{ result.type }}</p>
<p *ngIf="result.type !== 'client'" i18n="@@internalUnits">Unidades internas: {{ result.type !== 'client' ? result.children.length : 0}}</p>
<p *ngIf="result.type !== 'client'" i18n="@@clients">Clientes: {{ result.type !== 'client' ? result.clients.length : 0}}</p>
</mat-card-content>
</mat-card>
</mat-grid-tile>
</mat-grid-list>
<div class="paginator-container">
<mat-paginator [length]="length"
[pageSize]="itemsPerPage"
[pageIndex]="page"
[pageSizeOptions]="pageSizeOptions"
(page)="onPageChange($event)">
</mat-paginator>
</div>
</ng-container>
<ng-template #noResults>
<p i18n="@@noResultsMessage">No hay resultados para mostrar.</p>
</ng-template>
</div>
</div>
</div>
</mat-tab>
</mat-tab-group>

View File

@ -39,7 +39,7 @@ export class GroupsComponent implements OnInit {
selectedFilter2: string = 'none'; selectedFilter2: string = 'none';
filterName: string = ''; filterName: string = '';
filteredResults: any[] = []; filteredResults: any[] = [];
savedFilters: any[] = []; savedFilterNames: any[] = [];
length: number = 0; length: number = 0;
itemsPerPage: number = 10; itemsPerPage: number = 10;
page: number = 1; page: number = 1;
@ -55,6 +55,20 @@ export class GroupsComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
this.search(); this.search();
this.getFilters();
}
getFilters(): void {
this.dataService.getFilters().subscribe(
data => {
this.savedFilterNames = data.map((filter: any) => filter.name);
console.log('data:', data);
console.log('Saved filters:', this.savedFilterNames);
},
error => {
console.error('Error fetching filters:', error);
}
);
} }
search(): void { search(): void {
@ -303,10 +317,21 @@ export class GroupsComponent implements OnInit {
} }
saveFilters() { saveFilters() {
const filters = { const filters = {
name: `Filter ${new Date().toISOString()}`, name: this.filterName || `Filter ${new Date().toISOString()}`,
favourite: true,
filters: {
filter1: this.selectedFilter1, filter1: this.selectedFilter1,
filter2: this.selectedFilter2 filter2: this.selectedFilter2
}
}; };
console.log('Filters:', filters);
this.http.post('http://127.0.0.1:8080/views', filters).subscribe(response => {
console.log('Response from server:', response);
}, error => {
console.error('Error:', error);
});
} }
loadSelectedFilter(savedFilter: any) { loadSelectedFilter(savedFilter: any) {

View File

@ -30,7 +30,6 @@ export class HeaderComponent implements OnInit {
this.decodedToken = jwtDecode(token); this.decodedToken = jwtDecode(token);
this.isSuperAdmin = this.decodedToken.roles.includes('ROLE_SUPER_ADMIN'); this.isSuperAdmin = this.decodedToken.roles.includes('ROLE_SUPER_ADMIN');
localStorage.setItem('isSuperAdmin', String(this.isSuperAdmin)); localStorage.setItem('isSuperAdmin', String(this.isSuperAdmin));
console.log('isSuperAdmin:', this.isSuperAdmin);
this.username = this.decodedToken.username; this.username = this.decodedToken.username;
} catch (error) { } catch (error) {
console.error('Error decoding JWT:', error); console.error('Error decoding JWT:', error);

View File

@ -37,3 +37,8 @@ mat-icon {
margin-top: auto; margin-top: auto;
} }
@media (max-width: 680px) {
mat-nav-list {
width: 0px;
}
}

View File

@ -23,7 +23,6 @@ export class SidebarComponent {
this.decodedToken = jwtDecode(token); this.decodedToken = jwtDecode(token);
this.isSuperAdmin = this.decodedToken.roles.includes('ROLE_SUPER_ADMIN'); this.isSuperAdmin = this.decodedToken.roles.includes('ROLE_SUPER_ADMIN');
localStorage.setItem('isSuperAdmin', String(this.isSuperAdmin)); localStorage.setItem('isSuperAdmin', String(this.isSuperAdmin));
console.log('isSuperAdmin:', this.isSuperAdmin);
this.username = this.decodedToken.username; this.username = this.decodedToken.username;
} catch (error) { } catch (error) {
console.error('Error decoding JWT:', error); console.error('Error decoding JWT:', error);

View File

@ -1,19 +1,19 @@
{ {
"locale": "en", "locale": "en",
"translations": { "translations": {
"digital-board": "Digital Board", "digital-board": "Digital board",
"projector-alt": "Projector", "projector-alt": "Projector",
"client-image-alt": "Client", "client-image-alt": "Client",
"save-disposition-button": "Save Layout", "save-disposition-button": "Save layout",
"client-properties-title": "Client Properties", "client-properties-title": "Client Properties",
"property-header": "Property", "property-header": "Property",
"value-header": "Value", "value-header": "Value",
"power-on-button": "Power On", "power-on-button": "Power On",
"power-off-button": "Power Off", "power-off-button": "Power Off",
"reset-button": "Reset", "reset-button": "Reset",
"other-actions-1": "Other Actions 1", "other-actions-1": "Other actions 1",
"other-actions-2": "Other Actions 2", "other-actions-2": "Other actions 2",
"other-actions-3": "Other Actions 3", "other-actions-3": "Other actions 3",
"close-button": "Close", "close-button": "Close",
"add-client-dialog-title": "Add Client", "add-client-dialog-title": "Add Client",
"organizational-unit-label": "Parent", "organizational-unit-label": "Parent",
@ -35,34 +35,62 @@
"add-button": "Add", "add-button": "Add",
"edit-client-dialog-title": "Edit Client", "edit-client-dialog-title": "Edit Client",
"delete-dialog-title": "Delete", "delete-dialog-title": "Delete",
"delete-dialog-content": "Do you want to delete the clients located at {$INTERPOLATION} or relocate them to the top level?", "delete-dialog-content": "Do you want to delete the clients located in {$INTERPOLATION} or move them to the top level?",
"delete-all-clients-button": "Delete All Clients", "delete-all-clients-button": "Delete all clients",
"reposition-clients-button": "Reposition", "reposition-clients-button": "Reposition",
"deleteDialogTitle": "Delete", "deleteDialogTitle": "Delete",
"deleteConfirmationMessage": "Are you sure you want to delete {$INTERPOLATION}?", "deleteConfirmationMessage": "Are you sure you want to delete {$INTERPOLATION}?",
"cancelButton": "Cancel", "cancelButton": "Cancel",
"confirmButton": "Delete", "confirmButton": "Delete",
"titleAdminGroups": "Manage Groups", "adminGroupsTitle": "Manage Groups",
"btnNewOrgUnit": "New Organizational Unit", "newOrganizationalUnitButton": "New Organizational Unit",
"btnNewClient": "New Client", "newClientButton": "New Client",
"btnLegend": "Legend", "legendButton": "Legend",
"btnClassroomMap": "Classroom Layout", "classroomMapButton": "Classroom Layout",
"lblSearch": "Search", "searchLabel": "Search",
"phSearch": "Search", "searchPlaceholder": "Search",
"hintSearch": "Press 'enter' to search among organizational units", "searchHint": "Press 'enter' to search among organizational units",
"cardTitleOrgUnit": "Organizational Unit", "organizationalUnitTitle": "Organizational Unit",
"menuItemTreeView": "View Org Chart", "viewTreeTooltip": "account_tree",
"menuItemEdit": "Edit", "viewTreeMenu": "View Organization Chart",
"menuItemViewData": "View Data", "editUnitTooltip": "edit",
"menuItemAddOrgUnit": "Add Organizational Unit", "editUnitMenu": "Edit",
"menuItemAddClient": "Create Client", "viewUnitTool": "visibility",
"cardTitleElements": "Internal Elements", "viewUnitMenu": "View Details",
"noElements": "No internal elements", "addInternalUnitTool": "add_home_work",
"menuItemEditElement": "Edit", "addInternalUnitMenu": "Add Organizational Unit",
"menuItemViewOrgUnit": "View Data", "addClientDevice": "devices",
"menuItemAddInternalOrgUnit": "Add Organizational Unit", "addClientMenu": "Create Client",
"menuItemAddClientToOrgUnit": "Create Client", "internalElementsTitle": "Internal Elements",
"menuItemDeleteElement": "Delete Element", "noInternalElementsMessage": "No internal elements",
"editElementTooltip": "edit",
"editElementMenu": "Edit",
"viewUnitTooltip": "visibility",
"addInternalUnitTooltip": "add_home_work",
"addClientTooltip": "devices",
"deleteElementTooltip": "delete",
"deleteElementMenu": "Delete Element",
"searchTitle": "Search",
"selectFilterLabel": "Select filter",
"selectOptionLabel": "Select an option",
"organizationalUnitsOption": "Organizational Units",
"clientsOption": "Clients",
"nameLabel": "Name",
"namePlaceholder": "Organizational Unit",
"unitTypeLabel": "Unit Type",
"organizationalUnitOption": "Organizational Unit",
"classroomsGroupOption": "Classroom Groups",
"classroomOption": "Classrooms",
"clientGroupOption": "Client Groups",
"selectAnotherOptionLabel": "Select another option",
"noneOption": "None",
"option1": "Option 1",
"option2": "Option 2",
"option3": "Option 3",
"saveFiltersButton": "Save Filters",
"internalUnits": "Internal Units: {$INTERPOLATION}",
"clients": "Clients: {$INTERPOLATION}",
"noResultsMessage": "No results to display.",
"orgUnitTitle": "Organizational Unit", "orgUnitTitle": "Organizational Unit",
"classroomGroupsTitle": "Classroom Groups", "classroomGroupsTitle": "Classroom Groups",
"classroomTitle": "Classroom", "classroomTitle": "Classroom",
@ -71,7 +99,6 @@
"addOrgUnitTitle": "Add Organizational Unit", "addOrgUnitTitle": "Add Organizational Unit",
"generalStepLabel": "General", "generalStepLabel": "General",
"typeLabel": "Type", "typeLabel": "Type",
"nameLabel": "Name",
"createOrgUnitparentLabel": "Parent Organizational Unit", "createOrgUnitparentLabel": "Parent Organizational Unit",
"noParentOption": "--", "noParentOption": "--",
"descriptionLabel": "Description", "descriptionLabel": "Description",
@ -110,9 +137,9 @@
"2366056895545879062": "Power On", "2366056895545879062": "Power On",
"7368908909686115507": "Power Off", "7368908909686115507": "Power Off",
"7760171369336053154": "Reset", "7760171369336053154": "Reset",
"6799187990933478083": "Other Actions 1", "6799187990933478083": "Other actions 1",
"8971534271481971645": "Other Actions 2", "8971534271481971645": "Other actions 2",
"3300614831699539964": "Other Actions 3", "3300614831699539964": "Other actions 3",
"viewTreeTitle": "View Organizational Unit Tree", "viewTreeTitle": "View Organizational Unit Tree",
"closeButton": "Close", "closeButton": "Close",
"webConsoleTitle": "Opengnsys Web Console", "webConsoleTitle": "Opengnsys Web Console",
@ -139,12 +166,12 @@
"dialogTitleAddRole": "Add Role (TBD)", "dialogTitleAddRole": "Add Role (TBD)",
"labelRoleName": "Name", "labelRoleName": "Name",
"sectionTitlePermissions": "Permissions:", "sectionTitlePermissions": "Permissions:",
"checkboxManageUsers": "Manage Users", "checkboxManageUsers": "Manage users",
"checkboxPXEConfig": "PXE Configuration", "checkboxPXEConfig": "PXE Configuration",
"checkboxConsoleImages": "Web Console Images", "checkboxConsoleImages": "Web Console Images",
"checkboxManageComponents": "Manage Components", "checkboxManageComponents": "Manage various components",
"checkboxCreateImages": "Create Images", "checkboxCreateImages": "Create images",
"checkboxServerConfigScript": "Server Configuration Script", "checkboxServerConfigScript": "Server configuration script",
"checkboxOther": "...", "checkboxOther": "...",
"buttonCancel": "Cancel", "buttonCancel": "Cancel",
"buttonAdd": "Add", "buttonAdd": "Add",

View File

@ -1,194 +1,207 @@
{ {
"locale": "en", "locale": "es",
"translations": { "translations": {
"digital-board": "Digital board", "digital-board": "Pizarra digital",
"projector-alt": "Projector", "projector-alt": "Proyector",
"client-image-alt": "Client", "client-image-alt": "Client",
"save-disposition-button": "Save disposition", "save-disposition-button": "Guardar disposición",
"client-properties-title": "Client properties", "client-properties-title": "Propiedades cliente",
"property-header": "Property", "property-header": "Propiedad",
"value-header": "Value", "value-header": "Valor",
"power-on-button": "Power on", "power-on-button": "Encender",
"power-off-button": "Power off", "power-off-button": "Apagar",
"reset-button": "Reset", "reset-button": "Resetear",
"other-actions-1": "Other actions 1", "other-actions-1": "Otras acciones 1",
"other-actions-2": "Other actions 2", "other-actions-2": "Otras acciones 2",
"other-actions-3": "Other actions 3", "other-actions-3": "Otras acciones 3",
"close-button": "Close", "close-button": "Cerrar",
"add-client-dialog-title": "Add Client", "add-client-dialog-title": "Añadir Cliente",
"organizational-unit-label": "Parent", "organizational-unit-label": "Padre",
"name-label": "Name", "name-label": "Nombre",
"serial-number-label": "Serial Number", "serial-number-label": "Número de Serie",
"netiface-label": "Network Interface", "netiface-label": "Interfaz de red",
"net-driver-label": "Network Driver", "net-driver-label": "Controlador de red",
"mac-label": "MAC", "mac-label": "MAC",
"mac-hint": "Example: 00:11:22:33:44:55", "mac-hint": "Ejemplo: 00:11:22:33:44:55",
"mac-error": "Invalid MAC format. Valid example: 00:11:22:33:44:55", "mac-error": "Formato de MAC inválido. Ejemplo válido: 00:11:22:33:44:55",
"ip-label": "IP Address", "ip-label": "Dirección IP",
"ip-hint": "Example: 127.0.0.1", "ip-hint": "Ejemplo: 127.0.0.1",
"ip-error": "Invalid IP address format. Valid example: 127.0.0.1", "ip-error": "Formato de dirección IP inválido. Ejemplo válido: 127.0.0.1",
"menu-url-label": "Menu URL", "menu-url-label": "Menú URL",
"menu-url-error": "Invalid URL format.", "menu-url-error": "Formato de URL inválido.",
"hardware-profile-label": "Hardware Profile", "hardware-profile-label": "Perfil de Hardware",
"hardware-profile-error": "Invalid URL format.", "hardware-profile-error": "Formato de URL inválido.",
"cancel-button": "Cancel", "cancel-button": "Cancelar",
"add-button": "Add", "add-button": "Añadir",
"edit-client-dialog-title": "Edit Client", "edit-client-dialog-title": "Editar Cliente",
"delete-dialog-title": "Delete", "delete-dialog-title": "Eliminar",
"delete-dialog-content": "Do you want to delete the clients located at {$INTERPOLATION} or reposition them at the upper level?", "delete-dialog-content": "¿Quiere borrar los clientes situados en {$INTERPOLATION} o quiere resituarlos en el nivel superior?",
"delete-all-clients-button": "Delete all clients", "delete-all-clients-button": "Borrar todos los clientes",
"reposition-clients-button": "Reposition", "reposition-clients-button": "Resituar",
"deleteDialogTitle": "Delete", "deleteDialogTitle": "Eliminar",
"deleteConfirmationMessage": "Are you sure you want to delete {$INTERPOLATION}?", "deleteConfirmationMessage": "¿Estás seguro que deseas eliminar {$INTERPOLATION}?",
"cancelButton": "Cancel", "cancelButton": "Cancelar",
"confirmButton": "Delete", "confirmButton": "Eliminar",
"tabGeneralLabel": "General", "adminGroupsTitle": "Administrar grupos",
"headerAdminGroups": "Manage groups", "newOrganizationalUnitButton": "Nueva Unidad Organizativa",
"buttonNewOU": "New Organizational Unit", "newClientButton": "Nuevo Cliente",
"buttonNewClient": "New Client", "legendButton": "Leyenda",
"buttonLegend": "Legend", "classroomMapButton": "Plano de aula",
"buttonRoomMap": "Classroom layout", "searchLabel": "Búsqueda",
"labelSearch": "Search", "searchPlaceholder": "Búsqueda",
"placeholderSearch": "Search", "searchHint": "Pulsar 'enter' para buscar entre las unidades organizativas",
"hintSearch": "Press 'enter' to search among organizational units", "organizationalUnitTitle": "Unidad organizativa",
"cardTitleOU": "Organizational Unit", "viewTreeTooltip": "account_tree ",
"tooltipViewTree": "View as tree", "viewTreeMenu": "Ver organigrama",
"menuItemViewTree": "View organizational chart", "editUnitTooltip": "edit ",
"tooltipEditOU": "Edit organizational unit", "editUnitMenu": "Editar",
"menuItemEditOU": "Edit", "viewUnitTool": "visibility ",
"tooltipViewOU": "View organizational unit", "viewUnitMenu": "Visualizar datos",
"menuItemViewOU": "View data", "addInternalUnitTool": "add_home_work ",
"tooltipAddOU": "Create internal organizational unit", "addInternalUnitMenu": "Añadir unidad organizativa",
"menuItemAddOU": "Add organizational unit", "addClientDevice": "devices ",
"tooltipAddClient": "Create client in this organizational unit", "addClientMenu": "Crear cliente",
"menuItemAddClient": "Create client", "internalElementsTitle": "Elementos internos",
"cardTitleInternalElements": "Internal Elements", "noInternalElementsMessage": "No hay elementos internos",
"emptyListNoInternalElements": "No internal elements", "editElementTooltip": "edit",
"tooltipEditElement": "Edit element", "editElementMenu": "Editar",
"menuItemEditElement": "Edit", "viewUnitTooltip": "visibility",
"tooltipViewOUElement": "View organizational unit", "addInternalUnitTooltip": "add_home_work",
"menuItemViewOUElement": "View data", "addClientTooltip": "devices",
"tooltipAddOUElement": "Create internal organizational unit", "deleteElementTooltip": "delete",
"menuItemAddOUElement": "Add organizational unit", "deleteElementMenu": "Borrar elemento",
"tooltipAddClientElement": "Create client in this organizational unit", "searchTitle": "Búsqueda",
"menuItemAddClientElement": "Create client", "selectFilterLabel": "Seleccione filtro",
"tooltipDeleteElement": "Delete element", "selectOptionLabel": "Selecciona una opción",
"menuItemDeleteElement": "Delete element", "organizationalUnitsOption": "Unidades organizativas",
"tabAdvancedSearchLabel": "Advanced Search", "clientsOption": "Clientes",
"headerSearch": "Search", "nameLabel": "Nombre",
"labelSelectFilter": "Select filter", "namePlaceholder": "Unidad organizativa",
"orgUnitTitle": "Organizational Unit", "unitTypeLabel": "Tipo de unidad",
"classroomGroupsTitle": "Classroom Groups", "organizationalUnitOption": "Unidad organizativa",
"classroomTitle": "Classroom", "classroomsGroupOption": "Grupos de aulas",
"clientGroupsTitle": "Client Groups", "classroomOption": "Aulas",
"clientTitle": "Client", "clientGroupOption": "Grupos de clientes",
"addOrgUnitTitle": "Add Organizational Unit", "selectAnotherOptionLabel": "Selecciona otra opción",
"noneOption": "Ninguno",
"option1": "Opción 1",
"option2": "Opción 2",
"option3": "Opción 3",
"saveFiltersButton": "Guardar Filtros",
"internalUnits": "Unidades internas: {$INTERPOLATION}",
"clients": "Clientes: {$INTERPOLATION}",
"noResultsMessage": "No hay resultados para mostrar.",
"orgUnitTitle": "Unidad organizativa",
"classroomGroupsTitle": "Grupos de aula",
"classroomTitle": "Aula",
"clientGroupsTitle": "Grupos de clientes",
"clientTitle": "Cliente",
"addOrgUnitTitle": "Añadir Unidad Organizativa",
"generalStepLabel": "General", "generalStepLabel": "General",
"typeLabel": "Type", "typeLabel": "Tipo",
"nameLabel": "Name", "createOrgUnitparentLabel": "Unidad organizativa padre",
"createOrgUnitparentLabel": "Parent Organizational Unit",
"noParentOption": "--", "noParentOption": "--",
"descriptionLabel": "Description", "descriptionLabel": "Descripción",
"nextButton": "Next", "nextButton": "Siguiente",
"classroomInfoStepLabel": "Classroom Information", "classroomInfoStepLabel": "Información del Aula",
"locationLabel": "Location", "locationLabel": "Ubicación",
"projectorToggle": "Projector", "projectorToggle": "Proyector",
"boardToggle": "Board", "boardToggle": "Pizarra",
"capacityLabel": "Capacity", "capacityLabel": "Aforo",
"backButton": "Back", "backButton": "Atrás",
"additionalInfoStepLabel": "Additional Information", "additionalInfoStepLabel": "Información Adicional",
"commentsLabel": "Comments", "commentsLabel": "Comentarios",
"networkSettingsStepLabel": "Network Settings", "networkSettingsStepLabel": "Configuración de Red",
"proxyUrlLabel": "Proxy Server URL", "proxyUrlLabel": "Url servidor Proxy",
"dnsIpLabel": "DNS Server IP", "dnsIpLabel": "IP servidor DNS",
"netmaskLabel": "Netmask", "netmaskLabel": "Máscara de Red",
"routerLabel": "Router", "routerLabel": "Router",
"ntpIpLabel": "NTP Server IP", "ntpIpLabel": "IP servidor NTP",
"p2pModeLabel": "P2P Mode", "p2pModeLabel": "Modo P2P",
"p2pTimeLabel": "P2P Time", "p2pTimeLabel": "Tiempo P2P",
"mcastIpLabel": "Multicast IP", "mcastIpLabel": "IP Multicast",
"mcastSpeedLabel": "Multicast Speed", "mcastSpeedLabel": "Velocidad Multicast",
"mcastPortLabel": "Multicast Port", "mcastPortLabel": "Puerto Multicast",
"mcastModeLabel": "Multicast Mode", "mcastModeLabel": "Modo Multicast",
"menuUrlLabel": "Menu URL", "menuUrlLabel": "Menú URL",
"hardwareProfileLabel": "Hardware Profile", "hardwareProfileLabel": "Perfil de Hardware",
"urlFormatError": "Invalid URL format.", "urlFormatError": "Formato de URL inválido.",
"submitButton": "Add", "submitButton": "Añadir",
"editOrgUnitTitle": "Edit Organizational Unit", "editOrgUnitTitle": "Editar Unidad Organizativa",
"editOrgUnitParentLabel": "Parent", "editOrgUnitParentLabel": "Padre",
"validationToggle": "Validation", "validationToggle": "Validación",
"orgUnitPropertiesTitle": "Organizational Unit Properties", "orgUnitPropertiesTitle": "Propiedades unidad organizativa",
"generalDataTab": "General Data", "generalDataTab": "Datos generales",
"classroomNetworkPropertiesTab": "Classroom and Network Properties", "classroomNetworkPropertiesTab": "Propiedades aula y de red",
"actionsTab": "Actions", "actionsTab": "Acciones",
"2366056895545879062": "Power on", "2366056895545879062": "Encender",
"7368908909686115507": "Power off", "7368908909686115507": "Apagar",
"7760171369336053154": "Reset", "7760171369336053154": "Resetear",
"6799187990933478083": "Other actions 1", "6799187990933478083": "Otras acciones 1",
"8971534271481971645": "Other actions 2", "8971534271481971645": "Otras acciones 2",
"3300614831699539964": "Other actions 3", "3300614831699539964": "Otras acciones 3",
"viewTreeTitle": "View Organizational Unit Tree", "viewTreeTitle": "Visualizar árbol unidad Organizativa",
"closeButton": "Close", "closeButton": "Cerrar",
"webConsoleTitle": "Opengnsys webconsole", "webConsoleTitle": "Opengnsys webconsole",
"admin": "Administration", "admin": "Administración",
"editUser": "Edit user", "editUser": "Editar usuario",
"usersMenuItem": "Users", "usersMenuItem": "Usuarios",
"rolesMenuItem": "Roles", "rolesMenuItem": "Roles",
"logout": "Logout", "logout": "Salir",
"welcomeUser": "Welcome {$INTERPOLATION}", "welcomeUser": "Bienvenido {$INTERPOLATION}",
"groups": "Groups", "groups": "Grupos",
"actions": "Actions", "actions": "Acciones",
"images": "Images", "images": "Imágenes",
"components": "Components", "components": "Componentes",
"repositories": "Repositories", "repositories": "Repositorios",
"menus": "Menus", "menus": "Menús",
"search": "Search", "search": "Buscar",
"calendars": "Calendars", "calendars": "Calendarios",
"headerOpengnsys": "Opengnsys", "headerOpengnsys": "Opengnsys",
"loginlabelUsername": "Enter your username", "loginlabelUsername": "Introduce tu usuario",
"loginlabelPassword": "Enter your password", "loginlabelPassword": "Introduce tu contraseña",
"buttonLogin": "Log in", "buttonLogin": "Iniciar sesión",
"labelUsers": "Users", "labelUsers": "Usuarios",
"labelRoles": "Roles", "labelRoles": "Roles",
"dialogTitleAddRole": "Add Role (TBD)", "dialogTitleAddRole": "Añadir Rol (TBD)",
"labelRoleName": "Name", "labelRoleName": "Nombre",
"sectionTitlePermissions": "Permissions:", "sectionTitlePermissions": "Permisos:",
"checkboxManageUsers": "Manage users", "checkboxManageUsers": "Gestionar los usuarios",
"checkboxPXEConfig": "PXE Configuration", "checkboxPXEConfig": "Configuración PXE",
"checkboxConsoleImages": "Web console images", "checkboxConsoleImages": "Imágenes de la consola web",
"checkboxManageComponents": "Manage components", "checkboxManageComponents": "Gestionar los distintos componentes",
"checkboxCreateImages": "Create images", "checkboxCreateImages": "Crear imágenes",
"checkboxServerConfigScript": "Server configuration script", "checkboxServerConfigScript": "script de configuración del servidor",
"checkboxOther": "...", "checkboxOther": "...",
"buttonCancel": "Cancel", "buttonCancel": "Cancelar",
"buttonAdd": "Add", "buttonAdd": "Añadir",
"dialogTitleDeleteRole": "Delete Role", "dialogTitleDeleteRole": "Eliminar Rol",
"dialogContentDeleteRole": "Are you sure you want to delete the role {$INTERPOLATION}?", "dialogContentDeleteRole": "¿Estás seguro que deseas eliminar el rol {$INTERPOLATION}?",
"buttonDelete": "Delete", "buttonDelete": "Eliminar",
"headerRoleManagement": "Role management", "headerRoleManagement": "Gestión de roles",
"buttonAddRole": "+ Add", "buttonAddRole": "+ Añadir",
"headerActions": "Actions", "headerActions": "Acciones",
"dialogTitleAddUser": "Add User", "dialogTitleAddUser": "Añadir Usuario",
"addUserlabelUsername": "Username", "addUserlabelUsername": "Nombre de usuario",
"addUserlabelPassword": "Password", "addUserlabelPassword": "Contraseña",
"labelRole": "Role", "labelRole": "Rol",
"labelOrganizationalUnit": "Organizational Unit", "labelOrganizationalUnit": "Unidad organiativa",
"dialogTitleEditUser": "Edit User", "dialogTitleEditUser": "Editar Usuario",
"labelCurrentPassword": "Current password", "labelCurrentPassword": "Contraseña actual",
"labelNewPassword": "New password", "labelNewPassword": "Nueva contraseña",
"labelRepeatPassword": "Repeat password", "labelRepeatPassword": "Repite la contraseña",
"errorPasswordMismatch": " Passwords do not match ", "errorPasswordMismatch": " Las contraseñas no coinciden ",
"errorUpdate": " {$INTERPOLATION} ", "errorUpdate": " {$INTERPOLATION} ",
"buttonEdit": "Edit", "buttonEdit": "Editar",
"dialogTitleDeleteUser": "Delete User", "dialogTitleDeleteUser": "Eliminar Usuario",
"dialogContentDeleteUser": "Are you sure you want to delete {$INTERPOLATION}?", "dialogContentDeleteUser": "¿Estás seguro que deseas eliminar a {$INTERPOLATION}?",
"editUserlabelUsername": "Username", "editUserlabelUsername": "Nombre de usuario",
"editUserlabelPassword": "Password", "editUserlabelPassword": "Contraseña",
"labelOrgUnit": "Organizational Unit", "labelOrgUnit": "Unidad organizativa",
"headerUserManagement": "User management", "headerUserManagement": "Gestión de usuarios",
"buttonAddUser": "+ Add", "buttonAddUser": "+ Añadir",
"columnActions": "Actions", "columnActions": "Acciones",
"buttonEditUser": "Edit", "buttonEditUser": "Editar",
"buttonDeleteUser": "Delete" "buttonDeleteUser": "Eliminar"
} }
} }