Add user reservation form feature

- Created new user-friendly reservation form component (prenotazione-form-user)
- Added getCurrentUser() method to UtenteAppService
- Added route /prenotazione/nuova for user reservation form
- Added Italian translations for new UI elements
- Form includes booking details and auto-populated user data
- Radio button toggle for private/company data display
- Form validation with required facility selection
- Created comprehensive documentation in frontend-changes.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-11 19:23:01 +01:00
parent 9ad99bd05f
commit e0816bab45
50 changed files with 992 additions and 104 deletions

View File

@@ -0,0 +1,129 @@
import { type Ref, type ComputedRef, computed, defineComponent, inject, ref, onMounted } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRouter } from 'vue-router';
import { useVuelidate } from '@vuelidate/core';
import { required } from '@vuelidate/validators';
import StrutturaService from '@/entities/struttura/struttura.service';
import UtenteAppService from '@/entities/utente-app/utente-app.service';
import { useAlertService } from '@/shared/alert/alert.service';
import { useDateFormat } from '@/shared/composables';
import { type IPrenotazione, Prenotazione } from '@/shared/model/prenotazione.model';
import { type IStruttura } from '@/shared/model/struttura.model';
import { type IUtenteApp } from '@/shared/model/utente-app.model';
import { StatoPrenotazione } from '@/shared/model/enumerations/stato-prenotazione.model';
import PrenotazioneService from './prenotazione.service';
export default defineComponent({
name: 'PrenotazioneFormUser',
setup() {
const authenticated = inject<ComputedRef<boolean>>('authenticated');
const prenotazioneService = inject('prenotazioneService', () => new PrenotazioneService());
const alertService = inject('alertService', () => useAlertService(), true);
const prenotazione: Ref<IPrenotazione> = ref(new Prenotazione());
const utenteAppService = inject('utenteAppService', () => new UtenteAppService());
const currentUser: Ref<IUtenteApp | null> = ref(null);
const userType: Ref<'privato' | 'societa'> = ref('privato');
const strutturaService = inject('strutturaService', () => new StrutturaService());
const strutturas: Ref<IStruttura[]> = ref([]);
const isSaving = ref(false);
const isLoading = ref(true);
const currentLanguage = inject('currentLanguage', () => computed(() => navigator.language ?? 'it'), true);
const router = useRouter();
const { t: t$ } = useI18n();
// Initialize prenotazione with RICHIESTA status
prenotazione.value.stato = 'RICHIESTA';
const validationRules = {
oraInizio: {},
oraFine: {},
stato: {},
motivoEvento: {},
numeroPartecipanti: {},
noteUtente: {},
struttura: { required },
};
const v$ = useVuelidate(validationRules, prenotazione as any);
const initData = async () => {
try {
isLoading.value = true;
// Fetch current user
const userData = await utenteAppService().getCurrentUser();
currentUser.value = userData;
prenotazione.value.utente = userData;
// Fetch struttura list
const res = await strutturaService().retrieve();
strutturas.value = res.data;
isLoading.value = false;
} catch (error) {
isLoading.value = false;
alertService.showHttpError(error.response);
}
};
onMounted(() => {
initData();
});
const resetForm = () => {
prenotazione.value = new Prenotazione();
prenotazione.value.stato = 'RICHIESTA';
prenotazione.value.utente = currentUser.value;
v$.value.$reset();
};
return {
authenticated,
prenotazioneService,
alertService,
prenotazione,
currentUser,
userType,
strutturas,
isSaving,
isLoading,
currentLanguage,
v$,
resetForm,
...useDateFormat({ entityRef: prenotazione }),
t$,
};
},
methods: {
save(): void {
this.isSaving = true;
this.v$.$validate();
if (this.v$.$invalid) {
this.isSaving = false;
return;
}
this.prenotazioneService()
.create(this.prenotazione)
.then(param => {
this.isSaving = false;
this.alertService.showSuccess(this.t$('smartbookingApp.prenotazione.created', { param: param.id }).toString());
this.$router.push({ name: 'Prenotazione' });
})
.catch(error => {
this.isSaving = false;
this.alertService.showHttpError(error.response);
});
},
},
});

View File

@@ -0,0 +1,238 @@
<template>
<div class="d-flex justify-content-center">
<div class="col-10">
<h2 id="page-heading" data-cy="PrenotazioneFormUserHeading">
<span>{{ t$('smartbookingApp.prenotazione.userForm.title') }}</span>
</h2>
<div v-if="isLoading" class="text-center my-5">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<form v-else name="userBookingForm" novalidate @submit.prevent="save()">
<!-- Booking Details Section -->
<div class="card mb-4">
<div class="card-header">
<h4>{{ t$('smartbookingApp.prenotazione.userForm.bookingDetails') }}</h4>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label" for="prenotazione-oraInizio">
{{ t$('smartbookingApp.prenotazione.oraInizio') }}
</label>
<input
id="prenotazione-oraInizio"
data-cy="oraInizio"
type="datetime-local"
class="form-control"
name="oraInizio"
:class="{ valid: !v$.oraInizio.$invalid, invalid: v$.oraInizio.$invalid }"
:value="convertDateTimeFromServer(v$.oraInizio.$model)"
@change="updateInstantField('oraInizio', $event)"
/>
</div>
<div class="col-md-6 mb-3">
<label class="form-label" for="prenotazione-oraFine">
{{ t$('smartbookingApp.prenotazione.oraFine') }}
</label>
<input
id="prenotazione-oraFine"
data-cy="oraFine"
type="datetime-local"
class="form-control"
name="oraFine"
:class="{ valid: !v$.oraFine.$invalid, invalid: v$.oraFine.$invalid }"
:value="convertDateTimeFromServer(v$.oraFine.$model)"
@change="updateInstantField('oraFine', $event)"
/>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label" for="prenotazione-struttura">
{{ t$('smartbookingApp.prenotazione.struttura') }} <span class="text-danger">*</span>
</label>
<select
class="form-control"
id="prenotazione-struttura"
data-cy="struttura"
name="struttura"
v-model="prenotazione.struttura"
:class="{ valid: !v$.struttura.$invalid, invalid: v$.struttura.$invalid }"
>
<option :value="null">{{ t$('global.item.select') }}</option>
<option :value="strutturaOption" v-for="strutturaOption in strutturas" :key="strutturaOption.id">
{{ strutturaOption.nome }}
</option>
</select>
<div v-if="v$.struttura.$invalid && v$.struttura.$dirty" class="invalid-feedback d-block">
{{ t$('entity.validation.required') }}
</div>
</div>
<div class="col-md-6 mb-3">
<label class="form-label" for="prenotazione-stato">
{{ t$('smartbookingApp.prenotazione.stato') }}
</label>
<select class="form-control" name="stato" id="prenotazione-stato" data-cy="stato" v-model="v$.stato.$model" disabled>
<option value="RICHIESTA">
{{ t$('smartbookingApp.StatoPrenotazione.RICHIESTA') }}
</option>
</select>
</div>
</div>
<div class="mb-3">
<label class="form-label" for="prenotazione-motivoEvento">
{{ t$('smartbookingApp.prenotazione.motivoEvento') }}
</label>
<input
type="text"
class="form-control"
name="motivoEvento"
id="prenotazione-motivoEvento"
data-cy="motivoEvento"
v-model="v$.motivoEvento.$model"
/>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label" for="prenotazione-numeroPartecipanti">
{{ t$('smartbookingApp.prenotazione.numeroPartecipanti') }}
</label>
<input
type="number"
class="form-control"
name="numeroPartecipanti"
id="prenotazione-numeroPartecipanti"
data-cy="numeroPartecipanti"
v-model.number="v$.numeroPartecipanti.$model"
/>
</div>
</div>
<div class="mb-3">
<label class="form-label" for="prenotazione-noteUtente">
{{ t$('smartbookingApp.prenotazione.noteUtente') }}
</label>
<textarea
class="form-control"
name="noteUtente"
id="prenotazione-noteUtente"
data-cy="noteUtente"
rows="3"
v-model="v$.noteUtente.$model"
></textarea>
</div>
</div>
</div>
<!-- User Data Section -->
<div class="card mb-4" v-if="currentUser">
<div class="card-header">
<h4>{{ t$('smartbookingApp.prenotazione.userForm.userData') }}</h4>
</div>
<div class="card-body">
<!-- Personal Data -->
<div class="mb-4">
<h5 class="mb-3">{{ t$('smartbookingApp.prenotazione.userForm.personalData') }}</h5>
<div class="row">
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.nome') }}:</strong>
{{ currentUser.nome || '-' }}
</div>
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.cognome') }}:</strong>
{{ currentUser.cognome || '-' }}
</div>
</div>
<div class="row">
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.luogoNascita') }}:</strong>
{{ currentUser.luogoNascita || '-' }}
</div>
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.dataNascita') }}:</strong>
{{ currentUser.dataNascita || '-' }}
</div>
</div>
<div class="row">
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.residente') }}:</strong>
{{ currentUser.residente || '-' }}
</div>
</div>
</div>
<!-- User Type Radio Buttons -->
<div class="mb-3">
<label class="form-label">{{ t$('smartbookingApp.prenotazione.userForm.userType') }}</label>
<div class="form-check">
<input class="form-check-input" type="radio" name="userType" id="userTypePrivato" value="privato" v-model="userType" />
<label class="form-check-label" for="userTypePrivato">
{{ t$('smartbookingApp.prenotazione.userForm.privato') }}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="userType" id="userTypeSocieta" value="societa" v-model="userType" />
<label class="form-check-label" for="userTypeSocieta">
{{ t$('smartbookingApp.prenotazione.userForm.societa') }}
</label>
</div>
</div>
<!-- Company Data (conditional) -->
<div v-if="userType === 'societa'" class="mt-4">
<h5 class="mb-3">{{ t$('smartbookingApp.prenotazione.userForm.companyData') }}</h5>
<div class="row">
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.societa') }}:</strong>
{{ currentUser.societa || '-' }}
</div>
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.sede') }}:</strong>
{{ currentUser.sede || '-' }}
</div>
</div>
<div class="row">
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.codfiscale') }}:</strong>
{{ currentUser.codfiscale || '-' }}
</div>
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.telefonoSoc') }}:</strong>
{{ currentUser.telefonoSoc || '-' }}
</div>
</div>
<div class="row">
<div class="col-md-6 mb-2">
<strong>{{ t$('smartbookingApp.utenteApp.emailSoc') }}:</strong>
{{ currentUser.emailSoc || '-' }}
</div>
</div>
</div>
</div>
</div>
<!-- Action Buttons -->
<div class="d-flex justify-content-between">
<button type="button" class="btn btn-secondary" @click="resetForm()" :disabled="isSaving">
<font-awesome-icon icon="undo"></font-awesome-icon>&nbsp;
<span>{{ t$('smartbookingApp.prenotazione.userForm.reset') }}</span>
</button>
<button type="submit" class="btn btn-primary" :disabled="v$.$invalid || isSaving">
<font-awesome-icon icon="save"></font-awesome-icon>&nbsp;
<span>{{ t$('smartbookingApp.prenotazione.userForm.submit') }}</span>
</button>
</div>
</form>
</div>
</div>
</template>
<script lang="ts" src="./prenotazione-form-user.component.ts"></script>

View File

@@ -96,6 +96,12 @@
<dd>
<span>{{ utenteApp.emailSoc }}</span>
</dd>
<dt>
<span>{{ t$('smartbookingApp.utenteApp.internalUser') }}</span>
</dt>
<dd>
{{ utenteApp.internalUser ? utenteApp.internalUser.login : '' }}
</dd>
</dl>
<button type="submit" @click.prevent="previousState()" class="btn btn-info" data-cy="entityDetailsBackButton">
<font-awesome-icon icon="arrow-left"></font-awesome-icon>&nbsp;<span>{{ t$('entity.action.back') }}</span>

View File

@@ -4,6 +4,7 @@ import { type RouteLocation } from 'vue-router';
import { type MountingOptions, shallowMount } from '@vue/test-utils';
import sinon, { type SinonStubbedInstance } from 'sinon';
import UserService from '@/entities/user/user.service';
import AlertService from '@/shared/alert/alert.service';
import UtenteAppUpdate from './utente-app-update.vue';
@@ -52,6 +53,11 @@ describe('Component Tests', () => {
provide: {
alertService,
utenteAppService: () => utenteAppServiceStub,
userService: () =>
sinon.createStubInstance<UserService>(UserService, {
retrieve: sinon.stub().resolves({}),
} as any),
},
};
});

View File

@@ -4,6 +4,7 @@ import { useRoute, useRouter } from 'vue-router';
import { useVuelidate } from '@vuelidate/core';
import UserService from '@/entities/user/user.service';
import { useAlertService } from '@/shared/alert/alert.service';
import { useValidation } from '@/shared/composables';
import { Ruolo } from '@/shared/model/enumerations/ruolo.model';
@@ -18,6 +19,8 @@ export default defineComponent({
const alertService = inject('alertService', () => useAlertService(), true);
const utenteApp: Ref<IUtenteApp> = ref(new UtenteApp());
const userService = inject('userService', () => new UserService());
const users: Ref<Array<any>> = ref([]);
const ruoloValues: Ref<string[]> = ref(Object.keys(Ruolo));
const isSaving = ref(false);
const currentLanguage = inject('currentLanguage', () => computed(() => navigator.language ?? 'it'), true);
@@ -40,7 +43,13 @@ export default defineComponent({
retrieveUtenteApp(route.params.utenteAppId);
}
const initRelationships = () => {};
const initRelationships = () => {
userService()
.retrieve()
.then(res => {
users.value = res.data;
});
};
initRelationships();
@@ -70,6 +79,7 @@ export default defineComponent({
codfiscale: {},
telefonoSoc: {},
emailSoc: {},
internalUser: {},
liberatories: {},
};
const v$ = useVuelidate(validationRules, utenteApp as any);
@@ -83,6 +93,7 @@ export default defineComponent({
ruoloValues,
isSaving,
currentLanguage,
users,
v$,
t$,
};

View File

@@ -209,6 +209,25 @@
v-model="v$.emailSoc.$model"
/>
</div>
<div class="mb-3">
<label class="form-control-label" for="utente-app">{{ t$('smartbookingApp.utenteApp.internalUser') }}</label>
<select
class="form-control"
id="utente-app-internalUser"
data-cy="internalUser"
name="internalUser"
v-model="utenteApp.internalUser"
>
<option :value="null"></option>
<option
:value="utenteApp.internalUser && userOption.id === utenteApp.internalUser.id ? utenteApp.internalUser : userOption"
v-for="userOption in users"
:key="userOption.id"
>
{{ userOption.login }}
</option>
</select>
</div>
</div>
<div>
<button type="button" id="cancel-save" data-cy="entityCreateCancelButton" class="btn btn-secondary" @click="previousState()">

View File

@@ -18,6 +18,19 @@ export default class UtenteAppService {
});
}
getCurrentUser(): Promise<IUtenteApp> {
return new Promise<IUtenteApp>((resolve, reject) => {
axios
.get(`${baseApiUrl}/current`)
.then(res => {
resolve(res.data);
})
.catch(err => {
reject(err);
});
});
}
retrieve(): Promise<any> {
return new Promise<any>((resolve, reject) => {
axios

View File

@@ -76,6 +76,9 @@
<th scope="col">
<span>{{ t$('smartbookingApp.utenteApp.emailSoc') }}</span>
</th>
<th scope="col">
<span>{{ t$('smartbookingApp.utenteApp.internalUser') }}</span>
</th>
<th scope="col"></th>
</tr>
</thead>
@@ -99,6 +102,9 @@
<td>{{ utenteApp.codfiscale }}</td>
<td>{{ utenteApp.telefonoSoc }}</td>
<td>{{ utenteApp.emailSoc }}</td>
<td>
{{ utenteApp.internalUser ? utenteApp.internalUser.login : '' }}
</td>
<td class="text-end">
<div class="btn-group">
<router-link

View File

@@ -16,6 +16,7 @@ const NotificaDetails = () => import('@/entities/notifica/notifica-details.vue')
const Prenotazione = () => import('@/entities/prenotazione/prenotazione.vue');
const PrenotazioneUpdate = () => import('@/entities/prenotazione/prenotazione-update.vue');
const PrenotazioneDetails = () => import('@/entities/prenotazione/prenotazione-details.vue');
const PrenotazioneNuova = () => import('@/entities/prenotazione/prenotazione-form-user.vue');
const Conferma = () => import('@/entities/conferma/conferma.vue');
const ConfermaUpdate = () => import('@/entities/conferma/conferma-update.vue');
@@ -143,6 +144,12 @@ export default {
component: PrenotazioneDetails,
meta: { authorities: [Authority.USER] },
},
{
path: 'prenotazione/nuova',
name: 'PrenotazioneNuova',
component: PrenotazioneNuova,
meta: { authorities: [Authority.USER] },
},
{
path: 'conferma',
name: 'Conferma',

View File

@@ -1,4 +1,6 @@
import { type Ruolo } from '@/shared/model/enumerations/ruolo.model';
import { type IUser } from '@/shared/model/user.model';
export interface IUtenteApp {
id?: number;
username?: string;
@@ -16,6 +18,7 @@ export interface IUtenteApp {
codfiscale?: string | null;
telefonoSoc?: string | null;
emailSoc?: string | null;
internalUser?: IUser | null;
}
export class UtenteApp implements IUtenteApp {
@@ -36,6 +39,7 @@ export class UtenteApp implements IUtenteApp {
public codfiscale?: string | null,
public telefonoSoc?: string | null,
public emailSoc?: string | null,
public internalUser?: IUser | null,
) {
this.attivo = this.attivo ?? false;
}

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Audit Log",
"notFound": "No Audit Logs found"
},
"created": "&Egrave; stato generato un nuovo Audit Log con identificatore { param }",
"updated": "&Egrave; stato aggiornato Audit Log identificato da { param }",
"deleted": "&Egrave; stato eliminato Audit Log con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Audit Log con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Audit Log identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Audit Log con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Audit Log { id }?"
"question": "Sei sicuro di volere eliminare Audit Log {{ id }}?"
},
"detail": {
"title": "Audit Log"

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Conferma",
"notFound": "No Confermas found"
},
"created": "&Egrave; stato generato un nuovo Conferma con identificatore { param }",
"updated": "&Egrave; stato aggiornato Conferma identificato da { param }",
"deleted": "&Egrave; stato eliminato Conferma con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Conferma con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Conferma identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Conferma con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Conferma { id }?"
"question": "Sei sicuro di volere eliminare Conferma {{ id }}?"
},
"detail": {
"title": "Conferma"

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Disponibilita",
"notFound": "No Disponibilitas found"
},
"created": "&Egrave; stato generato un nuovo Disponibilita con identificatore { param }",
"updated": "&Egrave; stato aggiornato Disponibilita identificato da { param }",
"deleted": "&Egrave; stato eliminato Disponibilita con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Disponibilita con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Disponibilita identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Disponibilita con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Disponibilita { id }?"
"question": "Sei sicuro di volere eliminare Disponibilita {{ id }}?"
},
"detail": {
"title": "Disponibilita"

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Liberatoria",
"notFound": "No Liberatorias found"
},
"created": "&Egrave; stato generato un nuovo Liberatoria con identificatore { param }",
"updated": "&Egrave; stato aggiornato Liberatoria identificato da { param }",
"deleted": "&Egrave; stato eliminato Liberatoria con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Liberatoria con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Liberatoria identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Liberatoria con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Liberatoria { id }?"
"question": "Sei sicuro di volere eliminare Liberatoria {{ id }}?"
},
"detail": {
"title": "Liberatoria"

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Messaggio",
"notFound": "No Messaggios found"
},
"created": "&Egrave; stato generato un nuovo Messaggio con identificatore { param }",
"updated": "&Egrave; stato aggiornato Messaggio identificato da { param }",
"deleted": "&Egrave; stato eliminato Messaggio con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Messaggio con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Messaggio identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Messaggio con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Messaggio { id }?"
"question": "Sei sicuro di volere eliminare Messaggio {{ id }}?"
},
"detail": {
"title": "Messaggio"

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Modello Liberatoria",
"notFound": "No Modello Liberatorias found"
},
"created": "&Egrave; stato generato un nuovo Modello Liberatoria con identificatore { param }",
"updated": "&Egrave; stato aggiornato Modello Liberatoria identificato da { param }",
"deleted": "&Egrave; stato eliminato Modello Liberatoria con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Modello Liberatoria con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Modello Liberatoria identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Modello Liberatoria con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Modello Liberatoria { id }?"
"question": "Sei sicuro di volere eliminare Modello Liberatoria {{ id }}?"
},
"detail": {
"title": "Modello Liberatoria"

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Notifica",
"notFound": "No Notificas found"
},
"created": "&Egrave; stato generato un nuovo Notifica con identificatore { param }",
"updated": "&Egrave; stato aggiornato Notifica identificato da { param }",
"deleted": "&Egrave; stato eliminato Notifica con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Notifica con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Notifica identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Notifica con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Notifica { id }?"
"question": "Sei sicuro di volere eliminare Notifica {{ id }}?"
},
"detail": {
"title": "Notifica"

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Prenotazione",
"notFound": "No Prenotaziones found"
},
"created": "&Egrave; stato generato un nuovo Prenotazione con identificatore { param }",
"updated": "&Egrave; stato aggiornato Prenotazione identificato da { param }",
"deleted": "&Egrave; stato eliminato Prenotazione con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Prenotazione con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Prenotazione identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Prenotazione con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Prenotazione { id }?"
"question": "Sei sicuro di volere eliminare Prenotazione {{ id }}?"
},
"detail": {
"title": "Prenotazione"
@@ -26,7 +26,22 @@
"noteUtente": "Note Utente",
"conferma": "Conferma",
"utente": "Utente",
"struttura": "Struttura"
"struttura": "Struttura",
"userForm": {
"title": "Nuova Prenotazione",
"bookingDetails": "Dettagli",
"userData": "Chi prenota",
"personalData": "Persona incaricata",
"userType": "richiede di usufruire come",
"privato": "privato",
"societa": "società/associazione",
"companyData": "Dati della società/associazione",
"reset": "Annulla",
"submit": "Invia richiesta"
},
"StatoPrenotazione": {
"RICHIESTA": ""
}
}
}
}

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Struttura",
"notFound": "No Strutturas found"
},
"created": "&Egrave; stato generato un nuovo Struttura con identificatore { param }",
"updated": "&Egrave; stato aggiornato Struttura identificato da { param }",
"deleted": "&Egrave; stato eliminato Struttura con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Struttura con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Struttura identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Struttura con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Struttura { id }?"
"question": "Sei sicuro di volere eliminare Struttura {{ id }}?"
},
"detail": {
"title": "Struttura"

View File

@@ -6,11 +6,11 @@
"createLabel": "Crea un nuovo utente",
"createOrEditLabel": "Crea o modifica un utente"
},
"created": "È stato creato un nuovo utente con identificativo { param }",
"updated": "Sono stato aggiornati i dati dell'utente identificato da { param }",
"deleted": "È stato eliminato l'utente identificato da { param }",
"created": "È stato creato un nuovo utente con identificativo {{ param }}",
"updated": "Sono stato aggiornati i dati dell'utente identificato da {{ param }}",
"deleted": "È stato eliminato l'utente identificato da {{ param }}",
"delete": {
"question": "Si è sicuri di volere eliminare l'utente { login }?"
"question": "Si è sicuri di volere eliminare l'utente {{ login }}?"
},
"detail": {
"title": "Utente"

View File

@@ -8,11 +8,11 @@
"createOrEditLabel": "Genera o modifica un Utente App",
"notFound": "No Utente Apps found"
},
"created": "&Egrave; stato generato un nuovo Utente App con identificatore { param }",
"updated": "&Egrave; stato aggiornato Utente App identificato da { param }",
"deleted": "&Egrave; stato eliminato Utente App con identificatore { param }",
"created": "&Egrave; stato generato un nuovo Utente App con identificatore {{ param }}",
"updated": "&Egrave; stato aggiornato Utente App identificato da {{ param }}",
"deleted": "&Egrave; stato eliminato Utente App con identificatore {{ param }}",
"delete": {
"question": "Sei sicuro di volere eliminare Utente App { id }?"
"question": "Sei sicuro di volere eliminare Utente App {{ id }}?"
},
"detail": {
"title": "Utente App"
@@ -33,6 +33,7 @@
"codfiscale": "Codfiscale",
"telefonoSoc": "Telefono Soc",
"emailSoc": "Email Soc",
"internalUser": "Internal User",
"liberatorie": "Liberatorie"
}
}