@if (appointment) {
{{ 'Dettaglio Appuntamento' | translate }} #{{ appointment.apt_id }}
@if (appointment.apt_status === 'IN_ATTESA' && canManage) { @if (isQuoteMode) { } @else { } } @if (appointment.apt_status === 'PREVENTIVO_INVIATO') { @if (!canManage) { } @if (!canManage) { } @if (canManage) { } } @if (appointment.apt_status === 'PREVENTIVO_ACCETTATO' && canManage) { } @if (appointment.apt_status === 'ATTENDE_CONFERMA' && !canManage) { } @if (appointment.apt_status === 'CONFERMATO') { }
{{ 'Informazioni' | translate }}
{{ appointment.service_type_name }}
{{ appointment.apt_duration_minutes }}
{{ appointment.client_lastname }} {{ appointment.client_firstname }}
@if (appointment.operator_firstname) { {{ appointment.operator_lastname }} {{ appointment.operator_firstname }} } @else { {{ 'Non assegnato' | translate }} }
{{ appointment.client_email || '-' }}
{{ appointment.client_phone || '-' }}
{{ appointment.apt_requested_date || '-' }} {{ trimTime(appointment.apt_requested_time) }}
@if (appointment.apt_confirmed_date) { {{ appointment.apt_confirmed_date }} {{ trimTime(appointment.apt_confirmed_time) }} } @else if (appointment.apt_proposed_date) { {{ appointment.apt_proposed_date }} {{ trimTime(appointment.apt_proposed_time) }} ({{ 'proposta' | translate }}) } @else { - }
@if (appointment.apt_client_notes) {
{{ appointment.apt_client_notes }}
} @if (appointment.apt_rejection_reason) {
{{ appointment.apt_rejection_reason }}
} @if (appointment.apt_cancellation_reason) {
{{ appointment.apt_cancellation_reason }}
} @if (appointment.apt_quote_amount != null) {
{{ 'Preventivo' | translate }}
{{ appointment.apt_quote_amount | number:'1.2-2' }} €
{{ appointment.apt_quote_valid_until || '-' }}
@if (appointment.apt_quote_description) {
{{ appointment.apt_quote_description }}
}
} @if (canSetProgrammatic) {
{{ 'Manutenzione ricorrente' | translate }}
@if (appointment.apt_programmatic_due_date) { }
{{ 'Alla scadenza il cliente e l\'azienda ricevono un promemoria (con l\'anticipo indicato). Con la ricorrenza la prossima scadenza viene calcolata automaticamente.' | translate }} } @if (appointment.status_history && appointment.status_history.length > 0) {
{{ 'Cronologia Stati' | translate }}
@for (change of appointment.status_history; track change.asc_id) {
{{ change.asc_changed_at | date:'dd/MM/yyyy HH:mm' }}
{{ change.changed_by_lastname }} {{ change.changed_by_firstname }} @if (change.asc_notes) {
{{ change.asc_notes }}
}
}
}
{{ 'Allegati' | translate }}
@if (attachments.length > 0) {
@for (att of attachments; track att.att_id) {
{{ att.att_filename }} {{ (att.att_size_bytes / 1024).toFixed(1) }} KB
}
} @else {

{{ 'Nessun allegato' | translate }}

}
@if (pendingFiles.length > 0) { }
} @else if (loading) {
}
{{ item.em_lastname }} {{ item.em_firstname }} {{ item.em_lastname }} {{ item.em_firstname }}
@if (slotsLoading) {
{{ 'Caricamento slot...' | translate }}
} @if (!slotsLoading && groupedSlots.length === 0) {

{{ 'Nessuno slot disponibile nel periodo selezionato' | translate }}

} @if (!slotsLoading && groupedSlots.length > 0) {
@for (group of groupedSlots; track group.date) {
{{ group.dateLabel }} {{ getAvailableCount(group) }}
}
@for (group of groupedSlots; track group.date) { @if (selectedDate === group.date) { @if (group.morning.length > 0) {
@for (slot of group.morning; track slot.start_time + slot.operator_em_id) {
{{ slot.start_time.substring(0, 5) }}
}
} @if (group.afternoon.length > 0) {
@for (slot of group.afternoon; track slot.start_time + slot.operator_em_id) {
{{ slot.start_time.substring(0, 5) }}
}
} } }
}