Commit c2344250 by Matteo

Modifiche fino a rilascio 16/7

parent e2508ec5
......@@ -853,6 +853,22 @@
}
}
},
"@ngx-translate/core": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-11.0.1.tgz",
"integrity": "sha512-nBCa1ZD9fAUY/3eskP3Lql2fNg8OMrYIej1/5GRsfcutx9tG/5fZLCv9m6UCw1aS+u4uK/vXjv1ctG/FdMvaWg==",
"requires": {
"tslib": "^1.9.0"
}
},
"@ngx-translate/http-loader": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-4.0.0.tgz",
"integrity": "sha512-x8LumqydWD7eX9yQTAVeoCM9gFUIGVTUjZqbxdAUavAA3qVnk9wCQux7iHLPXpydl8vyQmLoPQR+fFU+DUDOMA==",
"requires": {
"tslib": "^1.9.0"
}
},
"@schematics/angular": {
"version": "7.3.9",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.9.tgz",
......
......@@ -35,6 +35,8 @@
"@ionic/angular": "^4.1.0",
"@ionic/pro": "2.0.4",
"@ionic/storage": "^2.2.0",
"@ngx-translate/core": "^11.0.1",
"@ngx-translate/http-loader": "^4.0.0",
"cordova-android": "8.0.0",
"cordova-browser": "6.0.0",
"cordova-plugin-android-permissions": "1.0.0",
......
......@@ -28,6 +28,7 @@ export class AppComponent {
}
async initializeApp() {
this.utilService.loadLingua();
var state = await this.authService.syncIsLoggedIn();
if (!state) {
this.router.navigate(['login']);
......
......@@ -18,6 +18,13 @@ import { AndroidPermissions } from '@ionic-native/android-permissions/ngx';
import { EmailComposer } from '@ionic-native/email-composer/ngx';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
import { SocialSharing } from '@ionic-native/social-sharing/ngx';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { HttpClient } from '@angular/common/http';
export function createTranslateLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({
declarations: [AppComponent],
......@@ -28,7 +35,14 @@ import { SocialSharing } from '@ionic-native/social-sharing/ngx';
AppRoutingModule,
IonicStorageModule.forRoot(),
FormsModule,
HttpClientModule
HttpClientModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: createTranslateLoader,
deps: [HttpClient]
}
})
],
providers: [
StatusBar,
......
......@@ -7,6 +7,8 @@ import { IonicModule } from '@ionic/angular';
import { ChangePwdPage } from './change-pwd.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -20,7 +22,8 @@ const routes: Routes = [
FormsModule,
IonicModule,
RouterModule.forChild(routes),
ReactiveFormsModule
ReactiveFormsModule,
TranslateModule
],
declarations: [ChangePwdPage]
})
......
<ion-header class="header-subpage" no-border>
<ion-toolbar>
<ion-title class="titolo-sezione-head">cambia password</ion-title>
<ion-title class="titolo-sezione-head">{{ 'change_password' | translate }}</ion-title>
</ion-toolbar>
</ion-header>
......@@ -14,17 +14,17 @@
<ion-col>
<div padding>
<ion-item>
<ion-input formControlName="oldpassword" type="password" placeholder="vecchia password" ngModel required></ion-input>
<ion-input formControlName="oldpassword" type="password" placeholder="{{ 'old_pwd' | translate }}" ngModel required></ion-input>
</ion-item>
<ion-item>
<ion-input formControlName="newpassword" type="password" placeholder="nuova password" ngModel required></ion-input>
<ion-input formControlName="newpassword" type="password" placeholder="{{ 'new_pwd' | translate }}" ngModel required></ion-input>
</ion-item>
<ion-item>
<ion-input formControlName="newpasswordbis" type="password" placeholder="ripeti nuova password" ngModel required></ion-input>
<ion-input formControlName="newpasswordbis" type="password" placeholder="{{ 'repeat_new_pwd' | translate }}" ngModel required></ion-input>
</ion-item>
</div>
<div padding>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">cambia Password</ion-button>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">{{ 'change_password' | translate }}</ion-button>
</div>
</ion-col>
</ion-row>
......
......@@ -5,6 +5,8 @@ import { Router } from "@angular/router";
import { AuthService } from '../../service/auth.service';
import { ErrorResponse } from '../../interface/error-response';
import { UtilService } from '../../../service/util.service';
import { TranslateService } from '@ngx-translate/core';
import { Events } from '@ionic/angular';
@Component({
selector: 'app-change-pwd',
......@@ -13,7 +15,19 @@ import { UtilService } from '../../../service/util.service';
})
export class ChangePwdPage implements OnInit {
constructor(private authService: AuthService, private router: Router, private utilService: UtilService) { }
constructor(
private authService: AuthService,
private router: Router,
private utilService: UtilService,
public translate: TranslateService,
public events: Events) {
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
translate = utilService.translate;
}
change(form){
this.utilService.showLoading();
......
......@@ -7,6 +7,8 @@ import { IonicModule } from '@ionic/angular';
import { LoginPage } from './login.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,7 +21,8 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
RouterModule.forChild(routes),
TranslateModule
],
declarations: [LoginPage]
})
......
......@@ -17,41 +17,51 @@
<div>
<ion-item class="login-field">
<ion-icon class="field-icon" item-left name="person" color="light"></ion-icon>
<ion-input name="username" type="text" placeholder="Inserisci il tuo username" ngModel required></ion-input>
<ion-input name="username" type="text" placeholder="{{ 'username' | translate }}" ngModel required></ion-input>
</ion-item>
<ion-item class="login-field">
<ion-icon class="field-icon" item-left name="lock" color="light"></ion-icon>
<ion-input name="password" type="password" placeholder="Password" ngModel required></ion-input>
<ion-input name="password" type="password" placeholder="{{ 'password' | translate }}" ngModel required></ion-input>
</ion-item>
</div>
<div class="accedi" >
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block" tappable>ACCEDI</ion-button>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block" tappable>{{ 'accedi' | translate }}</ion-button>
</div>
</ion-col>
</ion-row>
<ion-row color="primary" justify-content-center>
<div text-center class="forgot">
<a (click)='reset()' tappable>Hai perso la password?</a>
<a (click)='reset()' tappable>{{ 'lost_password' | translate }}</a>
</div>
</ion-row>
<ion-row color="primary" justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12">
<div class="business-call">
<div class="non-account">
Non hai ancora un account?
{{ 'hai_account' | translate }}
</div>
<div class="title-call">
Prenota subito<br />la tua <span class="giallo">Business Call</span>
{{ 'prenota_subito' | translate }}<br />{{ 'tua' | translate }} <span class="giallo">{{ 'business_call' | translate }}</span>
</div>
<div class="descr-call">
I nostro consulenti pianificheranno una Business Call <strong>gratuita</strong> su misura per te e la tua azienda
{{ 'consulenti' | translate }} <strong>{{ 'gratuita' | translate }}</strong> {{ 'su_misura' | translate }}
</div>
<div class="appuntamento">
<a (click)='redirectBusiness()' tappable>PRENOTA IL TUO APPUNTAMENTO!</a>
<a (click)='redirectBusiness()' tappable>{{ 'prenota_app' | translate }}</a>
</div>
</div>
</ion-col>
</ion-row>
<ion-row justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12" style="color: white">
<ion-row>
<ion-label class="label-border" style="margin-top: 8px;">{{ 'lingua_selezionata' | translate }}</ion-label>
<ion-select value="clienteSel" [(ngModel)]="linguaSel" (ionChange)="cambiaLingua()" placeholder="{{linguaSel}}" interface="popover" title="{{ 'seleziona_lingua' | translate }}">
<ion-select-option *ngFor="let lingua of lingue; let i=index;" value="{{lingua.key}}">{{lingua.value}}</ion-select-option>
</ion-select>
</ion-row>
</ion-col>
</ion-row>
</ion-grid>
</form>
</div>
......
......@@ -4,6 +4,8 @@ import { Router } from "@angular/router";
import { AuthService } from '../../service/auth.service';
import { UtilService } from '../../../service/util.service';
import { Platform, Events } from '@ionic/angular';
import { Pair } from 'src/app/interface/pair';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-login',
......@@ -13,7 +15,40 @@ import { Platform, Events } from '@ionic/angular';
})
export class LoginPage implements OnInit {
constructor(private authService: AuthService, private router: Router, private utilService: UtilService, public events: Events,public platform: Platform) { }
constructor(
private authService: AuthService,
private router: Router,
private utilService: UtilService,
public events: Events,
public platform: Platform,
public translate: TranslateService
)
{
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
this.lingue = utilService.getLanguageList();
if(utilService.getLingua() == "") {
this.linguaSel = this.lingue[0].key;
utilService.setLingua(this.linguaSel);
utilService.translate.setDefaultLang(this.linguaSel);
utilService.translate.use(this.linguaSel);
}
else this.linguaSel = utilService.getLingua();
translate = utilService.translate;
this.events.publish('functionCall:linguaCambiata', null);
}
linguaSel: string;
lingue : Array<Pair>;
cambiaLingua()
{
this.utilService.setLingua(this.linguaSel);
this.utilService.translate.setDefaultLang(this.linguaSel);
this.utilService.translate.use(this.linguaSel);
this.events.publish('functionCall:linguaCambiata', null);
}
async login(form){
await this.utilService.showLoading();
......@@ -26,6 +61,7 @@ export class LoginPage implements OnInit {
else
{
this.router.navigateByUrl('');
this.events.publish('functionCall:startup', null);
}
},
(error: ErrorResponse) => {
......
......@@ -7,6 +7,8 @@ import { IonicModule } from '@ionic/angular';
import { ResetPage } from './reset.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -20,7 +22,8 @@ const routes: Routes = [
FormsModule,
IonicModule,
RouterModule.forChild(routes),
ReactiveFormsModule
ReactiveFormsModule,
TranslateModule
],
declarations: [ResetPage]
})
......
......@@ -3,7 +3,7 @@
<ion-row color="primary" justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12">
<ion-toolbar class="business-toolbar">
<ion-buttons (click)="back()" slot="start" title="Torna alla login">
<ion-buttons (click)="back()" slot="start" title="{{ 'back_login' | translate }}">
<ion-icon name="arrow-round-back" color="#2b94d1" class="back" tappable></ion-icon>
<!--<ion-icon name="arrow-dropleft-circle" color="#2b94d1" class="back"></ion-icon>-->
</ion-buttons>
......@@ -22,15 +22,15 @@
<ion-row color="primary" justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12">
<div text-center>
<h3>Reset Password</h3>
<h3>{{ 'reset_pwd' | translate }}</h3>
</div>
<div padding>
<ion-item>
<ion-input formControlName="email" type="email" placeholder="email" ngModel required></ion-input>
<ion-input formControlName="email" type="email" placeholder="{{ 'email' | translate }}" ngModel required></ion-input>
</ion-item>
</div>
<div padding>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">Reset Password</ion-button>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">{{ 'reset_pwd' | translate }}</ion-button>
</div>
</ion-col>
</ion-row>
......
......@@ -4,6 +4,8 @@ import { Router } from "@angular/router";
import { AuthService } from '../../service/auth.service';
import { ErrorResponse } from './../../interface/error-response';
import { UtilService } from '../../../service/util.service';
import { Events } from '@ionic/angular';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-reset',
......@@ -12,7 +14,14 @@ import { UtilService } from '../../../service/util.service';
})
export class ResetPage implements OnInit {
constructor(private authService: AuthService, private router: Router, private utilService: UtilService) { }
constructor(private authService: AuthService, private router: Router, public events: Events, private utilService: UtilService, public translate: TranslateService) {
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
translate = utilService.translate;
}
reset(form){
this.utilService.showLoading();
......
......@@ -9,7 +9,8 @@ import { Storage } from '@ionic/storage';
import { AuthResponse } from '../interface/auth-response';
import { UtilService } from '../../service/util.service';
import { HttpClientDataService } from '../../service/http-client-data.service';
import { Platform, Events } from '@ionic/angular';
import { Events } from '@ionic/angular';
import { environment } from '../../../environments/environment';
@Injectable({
providedIn: 'root'
......@@ -21,9 +22,7 @@ export class AuthService {
constructor(
private httpClient: HttpClient,
private storage: Storage,
private utilService: UtilService,
private httpClientDataService: HttpClientDataService,
private platform: Platform,
private events: Events
)
{
......@@ -66,9 +65,14 @@ export class AuthService {
static clienti:Cliente[];
static clienteSelezionato: Cliente;
private idClienteSelezionato;
private tipoStruttura: string;
loadClienti()
{
AuthService.clienteSelezionato = {
denominazione: null,
id: null
};
return this.storage.get("clienti").then((data)=>{
AuthService.clienti = data;
AuthService.clienteSelezionato = AuthService.clienti[0];
......@@ -131,7 +135,8 @@ export class AuthService {
}
login(value) : Observable<ErrorResponse>{
var param = UtilService.encodeBody({utente: value.username, password: value.password});
this.tipoStruttura = environment.struttura;
var param = UtilService.encodeBody({utente: value.username, password: value.password, tipostruttura: this.tipoStruttura});
this.clientiSalvati = false;
return this.httpClient.post<ErrorResponse>(this.httpClientDataService.BASE_ADDRESS+'/autenticazione/login.do', param, this.httpClientDataService.httpOptions)
.pipe(
......
......@@ -7,6 +7,8 @@ import { IonicModule } from '@ionic/angular';
import { BusinesscallPage } from './businesscall.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,7 +21,8 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
RouterModule.forChild(routes),
TranslateModule
],
declarations: [BusinesscallPage]
})
......
......@@ -9,7 +9,7 @@
<ion-row color="primary" justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5">
<ion-toolbar class="business-toolbar">
<ion-buttons (click)="back()" slot="start" title="Torna alla login">
<ion-buttons (click)="back()" slot="start" title="{{ 'back_login' | translate }}">
<ion-icon name="arrow-round-back" color="#2b94d1" class="back" tappable></ion-icon>
<!--<ion-icon name="arrow-dropleft-circle" color="#2b94d1" class="back"></ion-icon>-->
</ion-buttons>
......@@ -21,7 +21,7 @@
</ion-row>
</ion-grid>
<div class="messaggio">
Prenota subito la tua<br /><span class="blu">Business Call</span>
{{ 'prenota' | translate }}<br /><span class="blu">{{ 'business_call' | translate }}</span>
</div>
<form #form="ngForm" (ngSubmit)="sendMail(form)">
<ion-grid>
......@@ -29,49 +29,49 @@
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12">
<div class="form">
<ion-item class="input-business">
<ion-input name="nome" type="text" placeholder="Nome*" [(ngModel)]="nome" required></ion-input>
<ion-input name="nome" type="text" placeholder="{{ 'nome' | translate }} *" [(ngModel)]="nome" required></ion-input>
</ion-item>
<ion-item class="input-business">
<ion-input name="cognome" type="text" placeholder="Cognome*" [(ngModel)]="cognome" required></ion-input>
<ion-input name="cognome" type="text" placeholder="{{ 'cognome' | translate }} *" [(ngModel)]="cognome" required></ion-input>
</ion-item>
<ion-item class="input-business">
<ion-input name="cellulare" type="text" placeholder="cellulare*" [(ngModel)]="cellulare" required></ion-input>
<ion-input name="cellulare" type="text" placeholder="{{ 'cellulare' | translate }} *" [(ngModel)]="cellulare" required></ion-input>
</ion-item>
<ion-item class="input-business">
<ion-input name="email" type="text" placeholder="Indirizzo email *" [(ngModel)]="email" required></ion-input>
<ion-input name="email" type="text" placeholder="{{ 'indirizzo_email' | translate }} *" [(ngModel)]="email" required></ion-input>
</ion-item>
<ion-item class="input-business">
<ion-input name="lingua" type="text" placeholder="Seleziona lingua" [(ngModel)]="lingua"></ion-input>
<ion-input name="lingua" type="text" placeholder="{{ 'lingua' | translate }}" [(ngModel)]="lingua"></ion-input>
</ion-item>
<ion-item class="item-no-border testo-form">
<ion-label class="testo-form" text-wrap>
Aggiungi, se desideri, del testo libero
{{ 'testo_libero' | translate }}
</ion-label>
</ion-item>
<ion-textarea name="testo" placeholder="" [(ngModel)]="testo" (ionInput)="autosize()" id="textarea"></ion-textarea>
<ion-item class="input-check item-no-border" text-wrap>
<ion-row>
<ion-row style="width: 100%">
<ion-col size="2" no-padding no-margin>
<ion-item no-padding no-margin no-lines class="item-no-border">
<ion-checkbox name="privacy" [(ngModel)]="privacy" class="check"> </ion-checkbox>
</ion-item>
</ion-col>
<ion-col size="10" no-padding no-margin>
<ion-item no-padding no-margin no-lines class="item-no-border">
<ion-label class="text-check" text-wrap>Ho preso visione del documento sulla <a (click)="gotoPrivacy();" tappable>privacy policy</a></ion-label>
</ion-item>
</ion-col>
</ion-row>
<ion-checkbox name="privacy" [(ngModel)]="privacy" class="check"> </ion-checkbox>
</ion-item>
</ion-col>
<ion-col size="10" no-padding no-margin>
<ion-item no-padding no-margin no-lines class="item-no-border">
<ion-label class="text-check" text-wrap>{{ 'preso_visione' | translate }} <a (click)="gotoPrivacy();" tappable>{{ 'privacy' | translate }}</a></ion-label>
</ion-item>
</ion-col>
</ion-row>
</ion-item>
</div>
<div class="accedi">
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">INVIA</ion-button>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">{{ 'inviaM' | translate }}</ion-button>
</div>
</ion-col>
</ion-row>
<ion-row color="primary" justify-content-center>
<div class="require">
Tutti i campi seguiti da * sono obbligatori
{{ 'campi_obbligatori' | translate }}
</div>
<!--<div text-center>
<a (click)='reset()'>Pulisci Form</a>
......
......@@ -2,6 +2,8 @@ import { Component, OnInit, ElementRef } from '@angular/core';
import { EmailComposer } from '@ionic-native/email-composer/ngx';
import { UtilService } from '../../service/util.service';
import { Router } from "@angular/router";
import { Events } from '@ionic/angular';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-businesscall',
......@@ -10,7 +12,20 @@ import { Router } from "@angular/router";
})
export class BusinesscallPage implements OnInit {
constructor(private emailComposer: EmailComposer, private router: Router, private utilService: UtilService, public element:ElementRef) { }
constructor(
private emailComposer: EmailComposer,
private router: Router,
private utilService: UtilService,
public element:ElementRef,
public events: Events,
public translate: TranslateService) {
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
translate = utilService.translate;
}
ngOnInit() {
}
......
......@@ -7,6 +7,8 @@ import { IonicModule } from '@ionic/angular';
import { DocumentiPage } from './documenti.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,7 +21,8 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
RouterModule.forChild(routes),
TranslateModule
],
declarations: [DocumentiPage]
})
......
<ion-header class="header-subpage" no-border>
<ion-toolbar>
<ion-title class="titolo-sezione-head">i miei documenti</ion-title>
<ion-title class="titolo-sezione-head">{{ 'titolo_documenti' | translate }}</ion-title>
</ion-toolbar>
</ion-header>
......@@ -10,15 +10,15 @@
<ion-grid>
<ion-row class="search-date">
<div *ngIf="platform.is('desktop')">
<strong>Cerca</strong> da <input type="date" name="calendar" [(ngModel)]="date1" title="Seleziona una data"> a <input type="date" name="calendar" [(ngModel)]="date2" title="Seleziona la data">
<strong>{{ 'cerca' | translate }}</strong> {{ 'da' | translate }} <input type="date" name="calendar" [(ngModel)]="date1" title="{{ 'seleziona_data' | translate }}"> {{ 'a' | translate }} <input type="date" name="calendar" [(ngModel)]="date2" title="{{ 'seleziona_data' | translate }}">
</div>
<div class="float-date" *ngIf="!platform.is('desktop')">
<span class="date-text"><strong>Cerca</strong> da </span>
<span class="date-text"><strong>{{ 'cerca' | translate }}</strong> {{ 'da' | translate }} </span>
<ion-icon class="element-date date-icon" name="calendar" (click)="setDateDa()"></ion-icon>
<div class="element-date item-no-border date-text">
{{date1}}
</div>
<span class="date-text">a</span>
<span class="date-text">{{ 'a' | translate }}</span>
<ion-icon floating class="element-date date-icon" name="calendar" (click)="setDateA()"></ion-icon>
<div floating class="element-date item-no-border date-text">
{{date2}}
......@@ -26,12 +26,12 @@
</div>
</ion-row>
<ion-row class="search-date">
<div><strong>Cerca</strong> titolo <input type="text" name="calendar" [(ngModel)]="titolo" title="Seleziona una data">
<ion-button (click)="cercaDocumenti()" class="search-arrow" title="Cerca documenti"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward" title="Cerca documenti"></ion-icon></ion-button></div>
<span class="riga"><strong>{{ 'cerca' | translate }}</strong> {{ 'titolo' | translate }} <input type="text" name="calendar" [(ngModel)]="titolo" title="{{ 'ricerca_titolo' | translate }}">
<ion-button (click)="cercaDocumenti()" class="search-arrow" title="{{ 'cerca_documenti' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward" title="{{ 'cerca_documenti' | translate }}"></ion-icon></ion-button></span>
</ion-row>
<ion-row class="search-date" id="buttonsDoc" style="display:none">
<div><span class="condividi-text">Condividi documenti</span>
<ion-button (click)="condividiDocumenti()" class="search-arrow" title="Condividi documenti"><ion-icon class="button-icon" slot="icon-only" name="share-alt" title="Condividi documenti"></ion-icon></ion-button></div>
<div><span class="condividi-text">{{ 'condividi' | translate }}</span>
<ion-button (click)="condividiDocumenti()" class="search-arrow" title="{{ 'condividi_doc' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="share" title="{{ 'condividi_doc' | translate }}"></ion-icon></ion-button></div>
</ion-row>
<ion-row class="search-date-border">
</ion-row>
......@@ -90,13 +90,13 @@
{{documento.data}}
</div>
</div>
<ion-item class="row-download item-no-border">
<a *ngIf="platform.is('desktop')" href="{{documento.url}}" target="_blank" download tappable title="Scarica Documento">
<ion-icon name="cloud-download" title="Scarica documento"></ion-icon>
<div class="row-download item-no-border">
<a *ngIf="platform.is('desktop')" href="{{documento.url}}" target="_blank" download tappable title="{{ 'scarica_doc' | translate }}">
<ion-icon name="cloud-download" title="{{ 'scarica_doc' | translate }}"></ion-icon>
</a>
<!--<a *ngIf="platform.is('desktop')" href="{{documento.url}}" target="_blank" download>Clicca per scaricare il documento</a>-->
<ion-icon name="share-alt" *ngIf="!platform.is('desktop')" (click)="getDocumento(documento.idDocumento, documento.nomeFile);" target="_blank" download tappable title="Condividi Documento">Clicca per condividere il documento</ion-icon>
</ion-item>
<ion-icon name="share-alt" *ngIf="!platform.is('desktop')" (click)="getDocumento(documento.idDocumento, documento.nomeFile);" target="_blank" download tappable title="{{ 'condividi_documento' | translate }}"></ion-icon>
</div>
</div>
<div class="clr"></div>
</ion-list>
......
......@@ -10,6 +10,7 @@ import { ErrorResponse } from '../../auth/interface/error-response';
import { DocumentiRequest } from '../../interface/documenti-request';
import { DatePicker } from '@ionic-native/date-picker/ngx';
import { Platform, Events } from '@ionic/angular';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-documenti',
......@@ -26,7 +27,8 @@ export class DocumentiPage implements OnInit {
private datePicker: DatePicker,
public platform: Platform,
public events: Events,
public httpClientDataService: HttpClientDataService
public httpClientDataService: HttpClientDataService,
public translate: TranslateService
) {
this.documenti = {
cliente: null,
......@@ -41,6 +43,10 @@ export class DocumentiPage implements OnInit {
this.events.subscribe('functionCall:clienteCambiato', eventData => {
this.chiediDocumenti("initial");
});
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
translate = utilService.translate;
}
setDateDa()
......
......@@ -7,12 +7,15 @@ import { HomePageRoutingModule } from './home.router.module';
import { HomePage } from './home.page';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
imports: [
IonicModule,
CommonModule,
FormsModule,
HomePageRoutingModule
HomePageRoutingModule,
TranslateModule
],
declarations: [HomePage]
})
......
......@@ -3,13 +3,13 @@
<ion-row justify-content-center>
<ion-col align-self-center size-lg="7">
<ion-toolbar class="header">
<ion-buttons (click)="openSideBar()" slot="start" title="Apri il menu">
<ion-buttons (click)="openSideBar()" slot="start" title="{{'apri_menu' | translate}}">
<ion-icon name="menu" color="light" class="menu-show" tappable></ion-icon>
</ion-buttons>
<ion-title class="logo-piccolo">
<img src="assets/icon/2p2-logo-medium.svg">
</ion-title>
<ion-buttons (click)="logout()" slot="end" title="Logout">
<ion-buttons (click)="logout()" slot="end" title="{{'uscita' | translate}}">
<ion-icon name="exit" color="light" class="exit" tappable></ion-icon>
</ion-buttons>
</ion-toolbar>
......@@ -69,7 +69,7 @@
<ion-menu side="start" menu-id="mainmenu" content-id="content" class="menu">
<ion-header no-border class="header">
<ion-toolbar class="menu-toolbar">
<ion-item class="menu-title item-no-border">Main Menu</ion-item>
<ion-item class="menu-title item-no-border">{{ 'menu_principale' | translate }}</ion-item>
<ion-buttons (click)="closeSideMenu()" slot="end" title="Chiudi Menu">
<ion-icon name="close-circle-outline" color="light" class="exit" tappable></ion-icon>
</ion-buttons>
......@@ -77,29 +77,35 @@
</ion-header>
<ion-content class="menu-content">
<ion-item class="item-border-grey">
<ion-label class="label-border">Azienda Selezionata:</ion-label>
<ion-label class="label-border">{{ 'azienda_selezionata' | translate }}</ion-label>
<ion-select value="clienteSel" [(ngModel)]="clienteSel" (ionChange)="cambiaCliente()" interface="popover" [placeholder]="clienteSelezionato ? clienteSelezionato.denominazione : 'Tap to select..'" title="Seleziona un cliente">
<ion-select-option *ngFor="let cliente of clienti; let i=index;" value="{{cliente.id}}">{{cliente.denominazione}}</ion-select-option>
</ion-select>
</ion-item>
<ion-item class="item-border-grey">
<ion-label class="label-border">{{ 'lingua_selezionata' | translate }}</ion-label>
<ion-select value="linguaSel" [(ngModel)]="linguaSel" (ionChange)="cambiaLingua()" interface="popover" title="{{ 'seleziona_lingua' | translate }}">
<ion-select-option *ngFor="let lingua of lingue; let i=index;" value="{{lingua.key}}">{{lingua.value}}</ion-select-option>
</ion-select>
</ion-item>
<ion-list>
<div>
<ion-item (click)="apriPagina('home')" tappable class="menu-item">SCHERMATA INIZIALE</ion-item>
<ion-item (click)="apriPagina('home')" tappable class="menu-item">{{ 'main_page' | translate }}</ion-item>
</div>
<div>
<ion-item (click)="apriPagina('documenti')" tappable class="menu-item">I MIEI DOCUMENTI</ion-item>
<ion-item (click)="apriPagina('documenti')" tappable class="menu-item">{{ 'menu_documenti' | translate }}</ion-item>
</div>
<div>
<ion-item (click)="apriPagina('interviste')" tappable class="menu-item">DOMANDA / RISPOSTA</ion-item>
<ion-item (click)="apriPagina('interviste')" tappable class="menu-item">{{ 'menu_interviste' | translate }}</ion-item>
</div>
<div>
<ion-item (click)="apriPagina('pareri')" tappable class="menu-item">VOGLIO UN PARERE</ion-item>
<ion-item (click)="apriPagina('pareri')" tappable class="menu-item">{{ 'menu_pareri' | translate }}</ion-item>
</div>
<div>
<ion-item (click)="apriPagina('segreteria')" tappable class="menu-item">LA SEGRETERIA</ion-item>
<ion-item (click)="apriPagina('segreteria')" tappable class="menu-item">{{ 'menu_segreteria' | translate }}</ion-item>
</div>
<div>
<ion-item (click)="apriPagina('change-password')" tappable class="menu-item">CAMBIO PASSWORD</ion-item>
<ion-item (click)="apriPagina('change-password')" tappable class="menu-item">{{ 'menu_change' | translate }}</ion-item>
</div>
</ion-list>
</ion-content>
......
......@@ -4,6 +4,8 @@ import { Router } from "@angular/router";
import { Events, MenuController } from '@ionic/angular';
import { AuthService } from '../../auth/service/auth.service';
import { UtilService } from '../../service/util.service';
import { Pair } from 'src/app/interface/pair';
import { TranslateService } from '@ngx-translate/core';
......@@ -13,7 +15,7 @@ import { UtilService } from '../../service/util.service';
styleUrls: ['home.page.scss']
})
export class HomePage {
constructor(private authService: AuthService, private router: Router, public events: Events, public menuCtrl: MenuController, private utilService: UtilService) {
constructor(private authService: AuthService, private router: Router, public events: Events, public menuCtrl: MenuController, private utilService: UtilService, public translate: TranslateService) {
this.clienti = [];
this.clienteSelezionato = {
denominazione: null,
......@@ -35,11 +37,25 @@ export class HomePage {
else this.loadClienti();
}
});
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
this.lingue = utilService.getLanguageList();
if(utilService.getLingua() == "") {
this.linguaSel = this.lingue[0].key;
utilService.setLingua(this.linguaSel);
utilService.translate.setDefaultLang(this.linguaSel);
utilService.translate.use(this.linguaSel);
}
else this.linguaSel = utilService.getLingua();
translate = utilService.translate;
}
clienti: Cliente[];
clienteSel;
clienteSelezionato: Cliente;
linguaSel: string;
lingue : Array<Pair>;
async loadClienti()
{
......@@ -58,6 +74,14 @@ export class HomePage {
this.events.publish('functionCall:clienteCambiato', null);
}
cambiaLingua()
{
this.utilService.setLingua(this.linguaSel);
this.utilService.translate.setDefaultLang(this.linguaSel);
this.utilService.translate.use(this.linguaSel);
this.events.publish('functionCall:linguaCambiata', null);
}
logout(){
this.authService.logout();
this.router.navigateByUrl('login');
......
......@@ -7,6 +7,8 @@ import { IonicModule } from '@ionic/angular';
import { IndexPage } from './index.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,7 +21,8 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
RouterModule.forChild(routes),
TranslateModule
],
declarations: [IndexPage]
})
......
......@@ -6,7 +6,7 @@
<img src="assets/img/consulto-documenti.svg" (click)="apriPagina('documenti')" tappable/>
</div>
<div tappable class="section-title" (click)="apriPagina('documenti')">
I miei documenti
{{ 'documenti' | translate }}
</div>
</div>
<div class="box" tappable>
......@@ -14,7 +14,7 @@
<img src="assets/img/chiedo-parere.svg" (click)="apriPagina('pareri')" tappable/>
</div>
<div class="section-title" (click)="apriPagina('pareri')" tappable>
Voglio un parere
{{ 'pareri' | translate }}
</div>
</div>
<div class="box" tappable>
......@@ -22,7 +22,7 @@
<img src="assets/img/domande-risposte.svg" (click)="apriPagina('interviste')" tappable/>
</div>
<div class="section-title" (click)="apriPagina('interviste')" tappable>
Domanda / Risposta
{{ 'interviste' | translate }}
</div>
</div>
<div class="box" tappable>
......@@ -30,7 +30,7 @@
<img src="assets/img/segreteria.svg" (click)="apriPagina('segreteria')" tappable/>
</div>
<div class="section-title" (click)="apriPagina('segreteria')" tappable>
La segreteria
{{ 'segreteria' | translate }}
</div>
</div>
<!--
......
......@@ -2,6 +2,7 @@ import { Component, OnInit } from '@angular/core';
import { Router } from "@angular/router";
import { Events } from '@ionic/angular';
import { UtilService } from '../../service/util.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-index',
......@@ -10,8 +11,12 @@ import { UtilService } from '../../service/util.service';
})
export class IndexPage implements OnInit {
constructor(private router: Router, public events: Events, private utilService: UtilService) {
constructor(private router: Router, public events: Events, private utilService: UtilService, public translate: TranslateService) {
this.events.publish('functionCall:startup', null);
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
translate = utilService.translate;
}
apriPagina(pagina:string)
......
......@@ -7,6 +7,7 @@ import { IonicModule } from '@ionic/angular';
import { IntervistePage } from './interviste.page';
import {ModalQuestionComponent} from '../../components/modal-question/modal-question.component';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
......@@ -20,7 +21,8 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
RouterModule.forChild(routes),
TranslateModule
],
declarations: [IntervistePage, ModalQuestionComponent],
entryComponents: [ModalQuestionComponent]
......
<ion-header class="header-subpage" no-border>
<ion-toolbar>
<ion-title class="titolo-sezione-head">domanda / risposta</ion-title>
<ion-title class="titolo-sezione-head">{{ 'interviste_titolo' | translate }}</ion-title>
</ion-toolbar>
</ion-header>
......@@ -28,61 +28,79 @@
<ion-grid>
<ion-row class="search-date">
<div *ngIf="platform.is('desktop')">
<strong>Cerca</strong> da <input type="date" name="calendar" [(ngModel)]="date1" title="Seleziona una data"> a <input type="date" name="calendar" [(ngModel)]="date2" title="Seleziona una data">
<strong>{{ 'cerca' | translate }}</strong> {{ 'da' | translate }} <input type="date" name="calendar" [(ngModel)]="date1" title="{{ 'seleziona_data' | translate }}"> {{ 'a' | translate }} <input type="date" name="calendar" [(ngModel)]="date2" title="{{ 'seleziona_data' | translate }}">
</div>
<div class="float-date" *ngIf="!platform.is('desktop')">
<span class="date-text"><strong>Cerca</strong> da </span>
<span class="date-text"><strong>{{ 'cerca' | translate }}</strong> {{ 'da' | translate }} </span>
<ion-icon class="element-date date-icon" name="calendar" (click)="setDateDa()"></ion-icon>
<div class="element-date item-no-border date-text">
{{date1}}
</div>
<span class="date-text">a</span>
<span class="date-text">{{ 'a' | translate }}</span>
<ion-icon floating class="element-date date-icon" name="calendar" (click)="setDateA()"></ion-icon>
<div floating class="element-date item-no-border date-text">
{{date2}}
</div>
</div>
<div><input type="text" name="calendar" [(ngModel)]="titolo" placeholder="Cerca titolo" title="{{ 'cerca' | translate }}" class="cerca-titolo"></div>
</ion-row>
<ion-row class="date-div">
<div class="search-date ">
<div class="float-date">
<ion-item class="item-no-border">
<ion-checkbox name="privacy" [(ngModel)]="archiviati" class="check"> </ion-checkbox>
<ion-label>Visualizza Archiviati</ion-label>
</ion-item>
<ion-item class="item-no-border">
<ion-button (click)="caricaRichieste()" class="search-arrow"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward"></ion-icon></ion-button>
</ion-item>
</div>
<div class="search-date float-date riga">
<ion-checkbox name="privacy" [(ngModel)]="archiviati" class="check"> </ion-checkbox>
<ion-label><span class="text">{{ 'visualizza_archiviati' | translate }}</span></ion-label>
<ion-button (click)="caricaRichieste()" class="search-arrow" title="{{ 'cerca' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward" title="{{ 'cerca' | translate }}"></ion-icon></ion-button>
<div class="clr"></div>
<ion-item class="item-no-border" id="buttonsInterviste" style="display:none">
<div *ngIf="!archiviati">
Archivia Domande/Risposte
<ion-button (click)="archiviaInterviste(true)" class="search-arrow" title="Archivia Pareri"><ion-icon class="button-icon" slot="icon-only" name="archive" title="Archivia Pareri"></ion-icon></ion-button>
</div>
<div *ngIf="archiviati">
Togli Domande/Risposte dall'archivio
<ion-button (click)="archiviaInterviste(false)" class="search-arrow" title="Riattiva Pareri"><ion-icon class="button-icon" slot="icon-only" name="undo" title="Riattiva documenti"></ion-icon></ion-button>
</div>
</ion-item>
<span class="item-no-border riga" id="buttonsInterviste" style="display:none">
<div *ngIf="!archiviati" class="text">
{{ 'archivia_interviste' | translate }}
<ion-button (click)="archiviaInterviste(true)" class="search-arrow" title="{{ 'archivia_interviste' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="archive" title="{{ 'archivia_interviste' | translate }}"></ion-icon></ion-button>
</div>
<div *ngIf="archiviati" class="text">
{{ 'undo_archivio_interviste' | translate }}
<ion-button (click)="archiviaInterviste(false)" class="search-arrow" title="{{ 'riattiva_interviste' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="undo" title="{{ 'riattiva_interviste' | translate }}"></ion-icon></ion-button>
</div>
</span>
</div>
</ion-row>
<ion-list *ngFor="let topic of topics; trackBy: trackByDoc" class="chat-list">
<ion-checkbox name="privacy" [(ngModel)]="topic.checked" class="check" (click)="checkSelected(topic.idRichiesta)"> </ion-checkbox>
<span class="row-results">
<ion-list *ngFor="let topic of topics; trackBy: trackByDoc" class="chat-list table-row">
<!--<ion-checkbox name="privacy" [(ngModel)]="topic.checked" class="check" (click)="checkSelected(topic.idRichiesta)"> </ion-checkbox>
<div class="row-chat-list">
<div class="data" text-wrap>
{{topic.data}}
<a class="select" (click)="apriTopic(topic.idRichiesta)" tappable title="Visualizza Dettagli">
<a class="select" (click)="apriTopic(topic.idRichiesta)" tappable title="{{ 'visualizza_dettagli' | translate }}">
<ion-icon name="arrow-round-forward"></ion-icon>
</a>
<a class="select" (click)="loadTopics('after')" tappable title="Aggiorna domande/risposte">
<a class="select" (click)="loadTopics('after')" tappable title="{{ 'aggiorna' | translate }}">
<ion-icon name="refresh-circle"></ion-icon>
</a>
<div text-wrap>{{topic.titolo}}</div>
</div>
</div>-->
<div class="row-download-special">
<div class="richieste-button group-icon2">
<a class="select" (click)="loadTopics('after')" tappable title="{{ 'aggiorna' | translate }}">
<ion-icon name="refresh-circle"></ion-icon>
</a>
<ion-label>{{ 'refresh' | translate }}</ion-label>
</div>
<div class="richieste-button group-icon2">
<a class="select" (click)="apriTopic(topic.idRichiesta)" tappable title="{{ 'visualizza_dettagli' | translate }}">
<ion-icon name="arrow-round-forward"></ion-icon>
</a>
<ion-label>{{ 'apri' | translate }}</ion-label>
</div>
</div>
<ion-checkbox name="privacy" [(ngModel)]="topic.checked" class="check" (click)="checkSelected(topic.idRichiesta)"> </ion-checkbox>
<div class="row-chat-list">
<div class="data" text-wrap>
{{topic.data}}
<div text-wrap>{{topic.titolo}}</div>
</div>
</div>
</ion-list>
</span>
<!--<div class="foo-button" center>
<div class="round-btn">
<a (click)="createNuovoParere()" tappable>
......@@ -97,15 +115,15 @@
<ion-grid>
<ion-row class="search-date">
<div *ngIf="platform.is('desktop')">
<strong>Cerca</strong> da <input type="date" name="calendar" [(ngModel)]="date1" title="Seleziona una data"> a <input type="date" name="calendar" [(ngModel)]="date2" title="Seleziona una data"> <ion-button (click)="caricaTopic()" class="search-arrow" title="Cerca interventi"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward"></ion-icon></ion-button>
<strong>{{ 'cerca' | translate }}</strong> {{ 'da' | translate }} <input type="date" name="calendar" [(ngModel)]="date1" title="{{ 'seleziona_data' | translate }}"> {{ 'a' | translate }} <input type="date" name="calendar" [(ngModel)]="date2" title="{{ 'seleziona_data' | translate }}"> <ion-button (click)="caricaTopic()" class="search-arrow" title="Cerca interventi"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward"></ion-icon></ion-button>
</div>
<div class="float-date" *ngIf="!platform.is('desktop')">
<span class="date-text"><strong>Cerca</strong> da </span>
<span class="date-text"><strong>{{ 'cerca' | translate }}</strong> {{ 'da' | translate }} </span>
<ion-icon class="element-date date-icon" name="calendar" (click)="setDateDa()"></ion-icon>
<div class="element-date item-no-border date-text">
{{date1}}
</div>
<span class="date-text">a</span>
<span class="date-text">{{ 'a' | translate }}</span>
<ion-icon floating class="element-date date-icon" name="calendar" (click)="setDateA()"></ion-icon>
<div floating class="element-date item-no-border date-text">
{{date2}}
......@@ -115,7 +133,7 @@
</ion-row>
<div class="back">
<a (click)="apriLista()" tappable>
<ion-icon name="arrow-round-back" [style.color]="'#2b94d1'" title="Torna alla lista di domande/risposte"></ion-icon>
<ion-icon name="arrow-round-back" [style.color]="'#2b94d1'" title="{{ 'back_interviste' | translate }}"></ion-icon>
</a>
</div>
<div class="quesito">
......@@ -128,7 +146,7 @@
<div class="clr"></div>
<div *ngFor="let intervento of topicAttivo.interventi;">
<div class="from-me" *ngIf="intervento.utente == null">
<div class="io">io - {{intervento.data}}</div>
<div class="io">{{ 'io' | translate }} - {{intervento.data}}</div>
<p>{{intervento.testo}}</p>
</div>
<div class="from-them" *ngIf="intervento.utente != null">
......@@ -143,26 +161,26 @@
<div *ngSwitchCase="'new'">
<div class="back">
<a (click)="apriLista()" tappable>
<ion-icon name="arrow-round-back" [style.color]="'#2b94d1'" title="Torna alla lista di domande/risposte"></ion-icon>
<ion-icon name="arrow-round-back" [style.color]="'#2b94d1'" title="{{ 'back_interviste' | translate }}"></ion-icon>
</a>
</div>
<div class="clr"></div>
<form #form="ngForm" (ngSubmit)="saveNewTopic(form)">
<div>
<ion-item class="title-question">
<ion-input class="item-no-border" name="title" type="text" placeholder="inserire qui il titolo" ngModel required></ion-input>
<ion-input class="item-no-border" name="title" type="text" placeholder="{{ 'inserire_titolo' | translate }}" ngModel required></ion-input>
</ion-item>
</div>
<div>
<ion-item class="question-extended item-no-border">
<ion-textarea name="question" placeholder="inserire qui la domanda" ngModel required></ion-textarea>
<ion-textarea name="question" placeholder="{{ 'inserire_domanda' | translate }}" ngModel required></ion-textarea>
</ion-item>
</div>
<div class="send">
<ion-button type="submit" size="large" [disabled]="form.invalid" expand="block" color="#fcc73d">invia</ion-button>
<ion-button type="submit" size="large" [disabled]="form.invalid" expand="block" color="#fcc73d">{{ 'invia' | translate }}</ion-button>
</div>
<div class="undo">
<ion-button size="large" expand="block" (click)="apriLista()">annulla</ion-button>
<ion-button size="large" expand="block" (click)="apriLista()">{{ 'annulla' | translate }}</ion-button>
</div>
</form>
</div>
......@@ -178,10 +196,10 @@
<ion-row>
<ion-col col-10>
<ion-input class="input-intervento" id= "message" type="text" placeholder="Digita un messaggio" name="message" [(ngModel)]="message"></ion-input>
<ion-input class="input-intervento" id= "message" type="text" placeholder="{{ 'digita_msg' | translate }}" name="message" [(ngModel)]="message"></ion-input>
</ion-col>
<ion-col col-2>
<ion-icon name="paper-plane" (click)="aggiungiIntervento(form)" tappable title="Inserisci intervento"></ion-icon>
<ion-icon name="paper-plane" (click)="aggiungiIntervento(form)" tappable title="{{ 'inserisci_intervento' | translate }}"></ion-icon>
</ion-col>
</ion-row>
......@@ -189,7 +207,7 @@
</form>
<div class="foo-button" center>
<div class="round-btn">
<a (click)="apriEdit()" tappable title="Aggiungi argomento/intervento">
<a (click)="apriEdit()" tappable title="{{ 'inserisci_argomento' | translate }}">
<ion-icon name="add" [style.color]="'#FFFFFF'"></ion-icon>
</a>
</div>
......
......@@ -11,6 +11,7 @@ import { DatePicker } from '@ionic-native/date-picker/ngx';
import { Platform, Events } from '@ionic/angular';
import { ParereService } from 'src/app/service/parere.service';
import { ArchiviaRichiestaResponse } from 'src/app/interface/archivia-richiesta-response';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-interviste',
......@@ -30,7 +31,8 @@ export class IntervistePage implements OnInit {
private intervisteService: IntervisteService,
public platform: Platform,
public events: Events,
public parereService: ParereService
public parereService: ParereService,
public translate: TranslateService
) {
this.events.publish('functionCall:startup', null);
this.initPage();
......@@ -38,6 +40,10 @@ export class IntervistePage implements OnInit {
this.events.subscribe('functionCall:clienteCambiato', eventData => {
this.loadTopics("initial");
});
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
translate = utilService.translate;
}
topicAttivo: Richiesta;
......@@ -51,6 +57,7 @@ export class IntervistePage implements OnInit {
bottoneVisibile: boolean;
formInserisciIntervento: boolean;
archiviati: boolean;
titolo: string;
initPage()
{
......@@ -78,6 +85,7 @@ export class IntervistePage implements OnInit {
this.archiviati = false;
this.intervisteSelezionate = new Array();
this.error = "";
this.titolo = "";
}
intervisteSelezionate: Array<number>;
......@@ -157,6 +165,7 @@ export class IntervistePage implements OnInit {
{
this.intervista = "lista";
this.mostraBottone();
this.hideInputIntervento();
}
nascondiBottone()
......@@ -239,11 +248,13 @@ export class IntervistePage implements OnInit {
{
var dataA = null;
var dataDa = null;
var titolo = null;
if(this.titolo != null && this.titolo != "") titolo = this.titolo;
if(this.date1 != null && this.date1 != "") dataDa = this.utilService.dateFormatConvert(this.date1);
if(this.date2 != null && this.date1 != "") dataA = this.utilService.dateFormatConvert(this.date2);
this.utilService.showLoading();
this.idCliente = AuthService.clienteSelezionato.id;
this.intervisteService.getListaTopics(AuthService.clienteSelezionato.id, dataDa, dataA, this.archiviati).subscribe((res: RichiesteResponse)=>{
this.intervisteService.getListaTopics(AuthService.clienteSelezionato.id, dataDa, dataA, this.archiviati, titolo).subscribe((res: RichiesteResponse)=>{
this.utilService.closeLoading();
if(res.error){
this.utilService.presentAlert("Errore", "", res.error, ["OK"]);
......@@ -267,7 +278,7 @@ export class IntervistePage implements OnInit {
{
//this.utilService.showLoading();
this.idCliente = AuthService.clienteSelezionato.id;
if(fase == "initial") this.intervisteService.getListaTopics(AuthService.clienteSelezionato.id, null, null, false).subscribe((res: RichiesteResponse)=>{
if(fase == "initial") this.intervisteService.getListaTopics(AuthService.clienteSelezionato.id, null, null, false, null).subscribe((res: RichiesteResponse)=>{
if(res.error){
this.utilService.presentAlert("Errore", "", res.error, ["OK"]);
}
......@@ -285,7 +296,7 @@ export class IntervistePage implements OnInit {
else if(error!=null) this.utilService.presentAlert("Errore", "", error, ["OK"]);
else this.utilService.presentAlert("Errore", "", "Errore durante la procedura di apertura del Topic", ["OK"]);
});
if(fase == "after") this.intervisteService.getListaTopics(AuthService.clienteSelezionato.id, null, null, this.archiviati).subscribe((res: RichiesteResponse)=>{
if(fase == "after") this.intervisteService.getListaTopics(AuthService.clienteSelezionato.id, null, null, this.archiviati, null).subscribe((res: RichiesteResponse)=>{
//this.utilService.closeLoading();
if(res.error){
this.utilService.presentAlert("Errore", "", res.error, ["OK"]);
......
......@@ -7,6 +7,7 @@ import { IonicModule } from '@ionic/angular';
import { ParerePage } from './parere.page';
import {ParereModalComponent} from '../../components/parere-modal/parere-modal.component';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
......@@ -20,7 +21,8 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
RouterModule.forChild(routes),
TranslateModule
],
declarations: [ParerePage, ParereModalComponent],
entryComponents: [ParereModalComponent]
......
<ion-header class="header-subpage" no-border>
<ion-toolbar>
<ion-title class="titolo-sezione-head">voglio un parere</ion-title>
<ion-title class="titolo-sezione-head">{{ 'parere_titolo' | translate }}</ion-title>
</ion-toolbar>
</ion-header>
......@@ -12,42 +12,69 @@
<div *ngSwitchCase="'lista'">
<div class="search-date date-div">
<div class="float-date">
<ion-item class="item-no-border">
<span class="search-date item-no-border">
<div><strong>{{ 'cerca' | translate }}</strong> {{ 'titolo' | translate }} <input type="text" name="calendar" [(ngModel)]="titolo" title="{{ 'ricerca_titolo' | translate }}"></div>
</span>
<div class="clr"></div>
<span class="search-date item-no-border">
<ion-checkbox name="privacy" [(ngModel)]="archiviati" class="check"> </ion-checkbox>
<ion-label>Visualizza Archiviati</ion-label>
</ion-item>
<ion-item class="item-no-border">
<ion-button (click)="cercaPareri()" class="search-arrow" title="Cerca pareri"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward" title="Cerca documenti"></ion-icon></ion-button>
</ion-item>
<ion-label class="text">{{ 'visualizza_archiviati' | translate }}</ion-label>
<ion-button (click)="cercaPareri()" class="search-arrow" title="{{ 'cerca' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward" title="{{ 'cerca' | translate }}"></ion-icon></ion-button>
</span>
</div>
<div class="clr"></div>
<ion-item class="item-no-border" id="buttonsPareri" style="display:none">
<div *ngIf="!archiviati">
Archivia Pareri
<ion-button (click)="archiviaPareri(true)" class="search-arrow" title="Archivia Pareri"><ion-icon class="button-icon" slot="icon-only" name="archive" title="Archivia Pareri"></ion-icon></ion-button>
</div>
<div *ngIf="archiviati">
Togli pareri dall'archivio
<ion-button (click)="archiviaPareri(false)" class="search-arrow" title="Riattiva Pareri"><ion-icon class="button-icon" slot="icon-only" name="undo" title="Riattiva documenti"></ion-icon></ion-button>
</div>
</ion-item>
<span class="item-no-border" id="buttonsPareri" style="display:none">
<div *ngIf="!archiviati" class="text">
{{ 'archivia_pareri' | translate }}
<ion-button (click)="archiviaPareri(true)" class="search-arrow" title="{{ 'archivia_pareri' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="archive" title="{{ 'archivia_pareri' | translate }}"></ion-icon></ion-button>
</div>
<div *ngIf="archiviati" class="text">
{{ 'undo_archivio_pareri' | translate }}
<ion-button (click)="archiviaPareri(false)" class="search-arrow" title="{{ 'riattiva_pareri' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="undo" title="{{ 'riattiva_pareri' | translate }}"></ion-icon></ion-button>
</div>
</span>
</div>
<div *ngFor="let parere of pareri; trackBy: trackByDoc" class="chat-list">
<!--<div *ngFor="let parere of pareri; trackBy: trackByDoc" class="chat-list">
<ion-checkbox name="privacy" [(ngModel)]="parere.checked" class="check" (click)="checkSelected(parere.idRichiesta)"> </ion-checkbox>
<div class="row-chat-list">
<div class="data" text-wrap>
{{parere.data}}
<a class="select" (click)="apriParere(parere.idRichiesta)" tappable title="Visualizza dettaglio">
<a class="select" (click)="apriParere(parere.idRichiesta)" tappable title="{{ 'visualizza_dettagli' | translate }}">
<ion-icon name="arrow-round-forward"></ion-icon>
</a>
<a class="select" (click)="loadPareri('initial')" tappable title="Aggiorna pareri">
<a class="select" (click)="loadPareri('initial')" tappable title="{{ 'aggiorna' | translate }}">
<ion-icon name="refresh-circle"></ion-icon>
</a>
<div text-wrap>{{parere.titolo}}</div>
</div>
</div>
</div>
</div>-->
<span class="row-results">
<div *ngFor="let parere of pareri; trackBy: trackByDoc" class="chat-list table-row">
<div class="row-download-special">
<div class="richieste-button group-icon2">
<a class="select" (click)="loadPareri('initial')" tappable title="{{ 'aggiorna' | translate }}">
<ion-icon name="refresh-circle"></ion-icon>
</a>
<ion-label>{{ 'refresh' | translate }}</ion-label>
</div>
<div class="richieste-button group-icon2">
<a class="select" (click)="apriParere(parere.idRichiesta)" tappable title="{{ 'visualizza_dettagli' | translate }}">
<ion-icon name="arrow-round-forward"></ion-icon>
</a>
<ion-label>{{ 'apri' | translate }}</ion-label>
</div>
</div>
<ion-checkbox name="privacy" [(ngModel)]="parere.checked" class="check" (click)="checkSelected(parere.idRichiesta)"> </ion-checkbox>
<div class="row-chat-list">
<div class="data" text-wrap>
{{parere.data}}
<div text-wrap>{{parere.titolo}}</div>
</div>
</div>
</div>
</span>
<!--<div class="foo-button" center>
<div class="round-btn">
<a (click)="createNuovoParere()" tappable>
......@@ -60,17 +87,17 @@
<div *ngSwitchCase="'dettaglio'">
<div class="back">
<a (click)="apriLista()" tappable>
<ion-icon name="arrow-round-back" [style.color]="'#2b94d1'" title="Torna alla lista dei pareri"></ion-icon>
<ion-icon name="arrow-round-back" [style.color]="'#2b94d1'" title="{{ 'back_pareri' | translate }}"></ion-icon>
</a>
</div>
<div class="quesito">
{{parereAttivo.titolo}}
</div>
<div class="from-me">
<div class="io">io - {{parereAttivo.data}}</div>
<div class="io">{{ 'io' | translate }} - {{parereAttivo.data}}</div>
<p>{{parereAttivo.testo}}</p>
<div class="download-doc" *ngIf="parereAttivo.nomeFile != null">
<div class="image" title="Scarica allegato">
<div class="image" title="{{ 'scarica_allegato' | translate }}">
<a *ngIf="!platform.is('desktop')" (click)="getFile(parereAttivo.idRichiesta, parereAttivo.nomeFile, true);" target="_blank" download><ion-icon name="share-alt" [style.color]="'#e5e5ea'"></ion-icon></a>
<a *ngIf="platform.is('desktop')" href="{{parereAttivo.url}}" target="_blank" download><ion-icon name="cloud-download" [style.color]="'#e5e5ea'"></ion-icon></a>
</div>
......@@ -82,7 +109,7 @@
<div class="operatore">{{parereAttivo.interventi[0].utente}} - {{parereAttivo.interventi[0].data}}</div>
<p>{{parereAttivo.interventi[0].testo}}</p>
<div *ngIf="parereAttivo.interventi[0].nomeFile != null" class="download-doc">
<div class="image" title="Scarica allegato">
<div class="image" title="{{ 'scarica_allegato' | translate }}">
<a *ngIf="!platform.is('desktop')" (click)="getFile(parereAttivo.interventi[0].idIntervento, parereAttivo.interventi[0].nomeFile, false);" target="_blank" download><ion-icon name="share-alt" [style.color]="'#2b94d1'"></ion-icon></a>
<a *ngIf="platform.is('desktop')" href="{{parereAttivo.interventi[0].url}}" target="_blank" download><ion-icon name="cloud-download" [style.color]="'#2b94d1'"></ion-icon></a>
</div>
......@@ -94,7 +121,7 @@
<div *ngSwitchCase="'new'">
<div class="back">
<a (click)="apriLista()" tappable title="Torna alla lista dei pareri">
<a (click)="apriLista()" tappable title="{{ 'back_pareri' | translate }}">
<ion-icon name="arrow-round-back" [style.color]="'#2b94d1'"></ion-icon>
</a>
</div>
......@@ -102,24 +129,24 @@
<form #form="ngForm" (ngSubmit)="creaParere(form)">
<div>
<ion-item class="title-question">
<ion-input class="item-no-border" name="title" type="text" placeholder="inserire qui il titolo" ngModel required></ion-input>
<ion-input class="item-no-border" name="title" type="text" placeholder="{{ 'inserire_titolo' | translate }}" ngModel required></ion-input>
</ion-item>
</div>
<div>
<ion-item class="question-extended item-no-border">
<ion-textarea name="question" placeholder="inserire qui la richiesta" ngModel required></ion-textarea>
<ion-textarea name="question" placeholder="{{ 'inserire_richiesta' | translate }}" ngModel required></ion-textarea>
</ion-item>
</div>
<ion-item class="item-no-border"><h4>Aggiungi Allegato</h4></ion-item>
<ion-item class="item-no-border"><h4>{{ 'aggiungi_allegato' | translate }}</h4></ion-item>
<div class="clr"></div>
<ion-item class="item-no-border">
<ion-input id="file" type="file" name="file" ngModel (ionChange)="loadFile();"></ion-input>
</ion-item>
<div class="send">
<ion-button type="submit" size="large" [disabled]="form.invalid" expand="block" color="#fcc73d">invia</ion-button>
<ion-button type="submit" size="large" [disabled]="form.invalid" expand="block" color="#fcc73d">{{ 'invia' | translate }}</ion-button>
</div>
<div class="undo">
<ion-button size="large" expand="block" (click)="apriLista()">annulla</ion-button>
<ion-button size="large" expand="block" (click)="apriLista()">{{ 'annulla' | translate }}</ion-button>
</div>
</form>
</div>
......@@ -181,7 +208,7 @@
<ion-footer class="footer-parere" no-border *ngIf="bottoneVisibile">
<div class="foo-button" center>
<div class="round-btn">
<a (click)="createNuovoParere()" tappable title="Richiedi un nuovo parere">
<a (click)="createNuovoParere()" tappable title="{{ 'aggiungi_richiesta' | translate }}">
<ion-icon name="add" [style.color]="'#FFFFFF'"></ion-icon>
</a>
</div>
......
......@@ -13,6 +13,7 @@ import { ErrorResponse } from '../../auth/interface/error-response';
import { NewRichiestaResponse } from 'src/app/interface/new-richiesta-response';
import { Platform, Events, MenuController } from '@ionic/angular';
import { DataWithFileUploaded } from './../../interface/data-with-file-uploaded';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-parere',
......@@ -29,6 +30,7 @@ export class ParerePage implements OnInit {
public platform: Platform,
public events: Events,
public httpClientDataService: HttpClientDataService,
public translate: TranslateService
) {
this.events.publish('functionCall:startup', null);
this.initPage();
......@@ -36,6 +38,10 @@ export class ParerePage implements OnInit {
this.events.subscribe('functionCall:clienteCambiato', eventData => {
this.loadPareri("initial");
});
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
translate = utilService.translate;
}
initPage()
......@@ -60,6 +66,7 @@ export class ParerePage implements OnInit {
result = {dati: null, file: null};
this.pareriSelezionati = new Array();
this.error = "";
this.titolo = "";
}
pareri: Richiesta[];
......@@ -69,6 +76,7 @@ export class ParerePage implements OnInit {
parere: string;
bottoneVisibile: boolean;
archiviati: boolean;
titolo: string;
cercaPareri()
{
......@@ -83,9 +91,11 @@ export class ParerePage implements OnInit {
async loadPareri(fase)
{
var titolo = null;
this.utilService.showLoading();
this.idCliente = AuthService.clienteSelezionato.id;
if(fase == "initial") this.parereService.getListaPareri(this.idCliente, this.archiviati).subscribe((res: RichiesteResponse)=>{
if(this.titolo != null && this.titolo != "") titolo = this.titolo;
if(fase == "initial") this.parereService.getListaPareri(this.idCliente, this.archiviati, titolo).subscribe((res: RichiesteResponse)=>{
this.utilService.closeLoading();
if(res.error){
this.utilService.presentAlert("Errore", "", res.error, ["OK"]);
......
......@@ -7,6 +7,8 @@ import { IonicModule } from '@ionic/angular';
import { SegreteriaPage } from './segreteria.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,7 +21,8 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
RouterModule.forChild(routes),
TranslateModule
],
declarations: [SegreteriaPage]
})
......
<ion-header class="header-subpage" no-border>
<ion-toolbar>
<ion-title class="titolo-sezione-head">la segreteria</ion-title>
<ion-title class="titolo-sezione-head">{{ 'segreteria_titolo' | translate }}</ion-title>
</ion-toolbar>
</ion-header>
......@@ -26,31 +26,32 @@
</div>-->
<div [ngSwitch]="segreteria" ngDefaultControl>
<ion-item class="selection item-no-border" no-margin no-padding>
<ion-label>Seleziona la struttura</ion-label>
<ion-select value="clienteSel" [(ngModel)]="idStrutturaSel" (ionChange)="cambiaStruttura()" no-scroll title="Seleziona una struttura">
<ion-item class="selection item-no-border" no-margin style="padding-left: 5px;">
<ion-label>{{ 'seleziona_struttura' | translate }}</ion-label>
<ion-select value="clienteSel" [(ngModel)]="idStrutturaSel" (ionChange)="cambiaStruttura()" no-scroll title="{{ 'seleziona_struttura' | translate }}">
<ion-icon name="arrow-forward"></ion-icon>
<ion-select-option *ngFor="let struttura of strutture;" value="{{struttura.id}}">{{struttura.denominazione}}</ion-select-option>
</ion-select>
</ion-item>
<ion-text class="selection-done margin-top">
La struttura che hai selezionato è </ion-text>
<ion-text class="grigio selection-done" text-wrap> <br/><strong>{{strutturaSel.denominazione}}</strong>
<ion-text class="selection-done margin-top" style="padding-left: 5px;">
{{ 'struttura_sel' | translate }} </ion-text>
<div class="clr"></div>
<ion-text class="grigio selection-done" style="padding-left: 5px;"><strong>{{strutturaSel.denominazione}}</strong>
</ion-text>
<ion-list *ngSwitchCase="'fatture'" ngDefaultControl>
<ion-grid>
<ion-row class="search-date">
<div *ngIf="platform.is('desktop')">
<strong>Cerca</strong> da <input type="date" name="calendar" [(ngModel)]="date1" title="Seleziona una data"> a <input type="date" name="calendar" [(ngModel)]="date2" title="Seleziona una data">
<strong>{{ 'cerca' | translate }}</strong> {{ 'da' | translate }} <input type="date" name="calendar" [(ngModel)]="date1" title="{{ 'seleziona_data' | translate }}"> {{ 'a' | translate }} <input type="date" name="calendar" [(ngModel)]="date2" title="{{ 'seleziona_data' | translate }}">
</div>
<div class="float-date" *ngIf="!platform.is('desktop')">
<span class="date-text"><strong>Cerca</strong> da </span>
<span class="date-text"><strong>{{ 'cerca' | translate }}</strong> {{ 'da' | translate }} </span>
<ion-icon class="element-date date-icon" name="calendar" (click)="setDateDa()"></ion-icon>
<div class="element-date item-no-border date-text">
{{date1}}
</div>
<span class="date-text">a</span>
<span class="date-text">{{ 'a' | translate }}</span>
<ion-icon floating class="element-date date-icon" name="calendar" (click)="setDateA()"></ion-icon>
<div floating class="element-date item-no-border date-text">
{{date2}}
......@@ -58,15 +59,12 @@
</div>
</ion-row>
<ion-row class="search-date">
<div><strong>Cerca</strong> n° prog. not. <input type="text" name="calendar" [(ngModel)]="nProgNotula" title="Seleziona una data"></div>
</ion-row>
<ion-row class="search-date">
<div><strong>Cerca</strong> n° not. <input type="text" name="calendar" [(ngModel)]="nNotula" title="Seleziona una data">
<ion-button (click)="cercaFatture()" class="search-arrow"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward" title="Cerca fatture"></ion-icon></ion-button></div>
<div class="riga"><input placeholder="{{ 'cerca_progetto' | translate }}" type="text" name="calendar" [(ngModel)]="nProgNotula" title="{{ 'cerca_progetto' | translate }}" class="cerca-notula"><input placeholder="{{ 'cerca_notula' | translate }}" type="text" name="calendar" [(ngModel)]="nNotula" title="{{ 'cerca_notula' | translate }}" class="cerca-notula">
<ion-button (click)="cercaFatture()" class="search-arrow" title="{{ 'cerca' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="arrow-round-forward" title="{{ 'cerca' | translate }}"></ion-icon></ion-button></div>
</ion-row>
<ion-row class="search-date" id="buttons" style="display:none">
<div><span class="condividi-text">Condividi documenti</span>
<ion-button (click)="condividiFatture()" class="search-arrow" title="Condividi documenti"><ion-icon class="button-icon" slot="icon-only" name="share-alt" title="Condividi documenti"></ion-icon></ion-button></div>
<div><span class="condividi-text">{{ 'condividi' | translate }}</span>
<ion-button (click)="condividiFatture()" class="search-arrow" title="{{ 'condividi_fatture' | translate }}"><ion-icon class="button-icon" slot="icon-only" name="share" title="{{ 'condividi_fatture' | translate }}"></ion-icon></ion-button></div>
</ion-row>
<ion-row class="search-date-border">
</ion-row>
......@@ -87,25 +85,31 @@
<div class="row-download-special">
<div class="group-icon">
<a *ngIf="platform.is('desktop')" href="{{fattura.urlProgNotula}}" target="_blank" download tappable>
<ion-icon name="cloud-download">Progetto</ion-icon>
<ion-icon name="cloud-download"></ion-icon>
</a>
<ion-icon name="share-alt" *ngIf="!platform.is('desktop')" (click)="getNotula(fattura.id, fattura.nrProgNotula, true);" target="_blank" download tappable>Progetto</ion-icon>
<ion-label>Progetto</ion-label>
<ion-icon name="share-alt" *ngIf="!platform.is('desktop')" (click)="getNotula(fattura.id, fattura.nrProgNotula, true);" target="_blank" download tappable></ion-icon>
<ion-label>{{ 'progetto' | translate }}</ion-label>
</div>
<div class="group-icon">
<a *ngIf="platform.is('desktop') && fattura.nrNotula != null" href="{{fattura.urlNotula}}" target="_blank" download tappable>
<ion-icon name="cloud-download">Notula</ion-icon>
<ion-icon name="cloud-download"></ion-icon>
</a>
<ion-icon name="share-alt" *ngIf="!platform.is('desktop') && fattura.nrNotula != null" (click)="getNotula(fattura.id, fattura.nrNotula, false);" target="_blank" download tappable>Notula</ion-icon>
<ion-label *ngIf="fattura.nrNotula != null">Notula</ion-label>
<ion-icon name="share-alt" *ngIf="!platform.is('desktop') && fattura.nrNotula != null" (click)="getNotula(fattura.id, fattura.nrNotula, false);" target="_blank" download tappable></ion-icon>
<ion-label *ngIf="fattura.nrNotula != null">{{ 'notula' | translate }}</ion-label>
</div>
</div>
<ion-checkbox *ngIf="!platform.is('desktop')" name="privacy" [(ngModel)]="fattura.checked" class="check" (click)="checkSelected(fattura.id)"> </ion-checkbox>
<div class="row-text-special">
Progetto Notula n. {{fattura.nrProgNotula}}
{{ 'text_progetto' | translate }} {{fattura.nrProgNotula}}
<div class="detail">
Data Notula: {{fattura.dataNotula}} - Notula n. {{fattura.nrNotula}}
{{ 'text_data_notula' | translate }} {{fattura.dataNotula}}
</div>
<div *ngIf="!platform.is('desktop')" class="detail detail-margin">
{{ 'text_notula' | translate }} {{fattura.nrNotula}}
</div>
<div *ngIf="platform.is('desktop')" class="detail">
{{ 'text_notula' | translate }} {{fattura.nrNotula}}
</div>
</div>
</div>
</ion-list>
......@@ -114,14 +118,14 @@
<ion-list *ngSwitchCase="'estratto'" ngDefaultControl>
<div class="title-infra">
Estratto conto
{{ 'estratto_conto' | translate }}
</div>
</ion-list>
<ion-list *ngSwitchCase="'solleciti'" ngDefaultControl>
<ion-item>
<h2>Solleciti</h2>
<h2>{{ 'solleciti' | translate }}</h2>
</ion-item>
</ion-list>
......@@ -137,19 +141,19 @@
<ion-tab-bar class="footer-tabbar" [(ngModel)]="segreteria" ngDefaultControl>
<ion-tab-button value="preventivi" (click)="redirectTo2p2()">
<ion-icon src="assets/icon/prev-pagam-grigio.svg" class="icon-footer"></ion-icon>
<ion-label>Prev./Pagam.</ion-label>
<ion-label>{{ 'preventivi' | translate }}</ion-label>
</ion-tab-button>
<ion-tab-button value="fatture" (click)="changeSel('fatture')">
<ion-icon src="assets/icon/fatture-progetti-bianco.svg" id="icon-fatture" class="icon-footer"></ion-icon>
<ion-label id="label-fatture" style="color: white;">Fatture e Progetti</ion-label>
<ion-label id="label-fatture" style="color: white;">{{ 'fatture' | translate }}</ion-label>
</ion-tab-button>
<ion-tab-button value="estratto" (click)="downloadEstrattoConto('estratto')">
<ion-icon src="assets/icon/estratto-conto-grigio.svg" id="icon-estratto" class="icon-footer"></ion-icon>
<ion-label id="label-estratto">Estratto Conto</ion-label>
<ion-label id="label-estratto">{{ 'estratto_conto' | translate }}</ion-label>
</ion-tab-button>
<ion-tab-button value="solleciti" (click)="changeSel('solleciti')">
<ion-icon src="assets/icon/solleciti-grigio.svg" id="icon-solleciti" class="icon-footer"></ion-icon>
<ion-label id="label-solleciti">Solleciti</ion-label>
<ion-label id="label-solleciti">{{ 'solleciti' | translate }}</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
......
.header .col {
background-color:lightgrey;
}
.col {
border: solid 1px grey;
border-bottom-style: none;
border-right-style: none;
}
.col:last-child {
border-right: solid 1px grey;
}
.row:last-child .col {
border-bottom: solid 1px grey;
}
.row:nth-child(odd){
background-color: #99ff99;
}
\ No newline at end of file
......@@ -12,7 +12,8 @@ import { SegreteriaService } from './../../service/segreteria.service';
import { ErrorResponse } from '../../auth/interface/error-response';
import { Platform, Events } from '@ionic/angular';
import { DatePicker } from '@ionic-native/date-picker/ngx';
import { BrowserStack } from 'protractor/built/driverProviders';
import { TranslateService } from '@ngx-translate/core';
import { environment } from '../../../environments/environment';
@Component({
selector: 'app-segreteria',
......@@ -28,7 +29,8 @@ export class SegreteriaPage implements OnInit {
public platform: Platform,
private datePicker: DatePicker,
public httpClientDataService: HttpClientDataService,
public events: Events
public events: Events,
public translate: TranslateService
)
{
this.events.publish('functionCall:startup', null);
......@@ -40,6 +42,10 @@ export class SegreteriaPage implements OnInit {
this.events.subscribe('functionCall:clienteCambiato', eventData => {
this.loadData();
});
this.events.subscribe('functionCall:linguaCambiata', eventData => {
translate = utilService.translate;
});
translate = utilService.translate;
}
loadData()
......@@ -58,6 +64,7 @@ export class SegreteriaPage implements OnInit {
nProgNotula: string;
nNotula: string;
fattureSel: Array<Pair>;
tipoStruttura: string;
initPage()
{
......@@ -73,6 +80,7 @@ export class SegreteriaPage implements OnInit {
this.nProgNotula = "";
this.nNotula = "";
this.fattureSel = new Array();
this.tipoStruttura = environment.struttura;
}
......@@ -264,7 +272,7 @@ export class SegreteriaPage implements OnInit {
loadStrutture()
{
//this.utilService.showLoading();
this.segreteriaService.getStrutture(AuthService.clienteSelezionato.id).subscribe((res: StruttureResponse)=>{
this.segreteriaService.getStrutture(AuthService.clienteSelezionato.id, this.tipoStruttura).subscribe((res: StruttureResponse)=>{
//this.utilService.closeLoading();
this.strutture = res.strutture;
if(this.strutture.length > 0)
......
......@@ -34,7 +34,7 @@ export class IntervisteService {
getTopic(idCliente, idRichiesta, dataDa, dataA): Observable<RichiesteResponse>
{
var richiesta = this.creaGetListaRichiesta(idCliente, idRichiesta, null, dataDa, dataA, null);
var richiesta = this.creaGetListaRichiesta(idCliente, idRichiesta, null, dataDa, dataA, null, null);
var param = this.encodeBody(richiesta);
return this.httpClient.post<RichiesteResponse>(this.httpClientDataService.BASE_ADDRESS+'/intranet/topic.do', param, this.httpClientDataService.httpOptionsJson)
.pipe(
......@@ -53,11 +53,11 @@ export class IntervisteService {
);
}
getListaTopics(idCliente: number, dataDa, dataA, archiviati: boolean): Observable<RichiesteResponse>
getListaTopics(idCliente: number, dataDa, dataA, archiviati: boolean, titolo: string): Observable<RichiesteResponse>
{
var limite = null;
if(dataDa == null && dataA == null) limite = 10;
var richiesta = this.creaGetListaRichiesta(idCliente, null, limite, dataDa, dataA, archiviati);
var richiesta = this.creaGetListaRichiesta(idCliente, null, limite, dataDa, dataA, archiviati, titolo);
var param = this.encodeBody(richiesta);
return this.httpClient.post<RichiesteResponse>(this.httpClientDataService.BASE_ADDRESS+'/intranet/richieste.do', param, this.httpClientDataService.httpOptionsJson)
.pipe(
......@@ -76,7 +76,7 @@ export class IntervisteService {
);
}
creaGetListaRichiesta(id, idRichiesta, limite, dataDa, dataA, archiviati): RichiesteRequest
creaGetListaRichiesta(id, idRichiesta, limite, dataDa, dataA, archiviati, titolo): RichiesteRequest
{
var request:RichiesteRequest;
var pair:Pair;
......@@ -111,6 +111,16 @@ export class IntervisteService {
pairs.push(pair);
}
if(titolo != null)
{
pair = {
key: "titolo",
value: titolo,
type: "string"
}
pairs.push(pair);
}
pair = {
key: "tipo",
value: "DOMANDA",
......
......@@ -34,7 +34,7 @@ export class ParereService {
};
}
creaRichiesta(id, limite, dataDa, dataA, archiviati): RichiesteRequest
creaRichiesta(id, limite, dataDa, dataA, archiviati, titolo): RichiesteRequest
{
var request:RichiesteRequest;
var pair:Pair;
......@@ -69,6 +69,16 @@ export class ParereService {
pairs.push(pair);
}
if(titolo != null)
{
pair = {
key: "titolo",
value: titolo,
type: "string"
}
pairs.push(pair);
}
pair = {
key: "tipo",
value: "PARERE",
......@@ -182,9 +192,9 @@ export class ParereService {
);
}
getListaPareri(idCliente: string, archiviati: boolean): Observable<RichiesteResponse>
getListaPareri(idCliente: string, archiviati: boolean, titolo: string): Observable<RichiesteResponse>
{
var richiesta = this.creaRichiesta(idCliente, 10, null, null, archiviati);
var richiesta = this.creaRichiesta(idCliente, 10, null, null, archiviati, titolo);
var param = this.encodeBody(richiesta);
return this.httpClient.post<RichiesteResponse>(this.httpClientDataService.BASE_ADDRESS+'/intranet/richieste.do', param, this.httpClientDataService.httpOptionsJson)
.pipe(
......
......@@ -126,9 +126,9 @@ export class SegreteriaService {
);
}
getStrutture(idUser)
getStrutture(idUser, tipoStruttura)
{
var param = UtilService.encodeBody({idcliente: idUser});
var param = UtilService.encodeBody({idcliente: idUser, tipostruttura: tipoStruttura});
return this.httpClient.post<StruttureResponse>(this.httpClientDataService.BASE_ADDRESS+'/intranet/strutture.do', param, this.httpClientDataService.httpOptions)
.pipe(
catchError(this.handleError),
......
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { Pair } from './../interface/pair';
import { Injectable } from '@angular/core';
import { LoadingController, AlertController, Platform } from '@ionic/angular';
import { LoadingController, AlertController, Platform, Events } from '@ionic/angular';
import { HttpClient } from '@angular/common/http';
import { File} from '@ionic-native/file/ngx';
import { FileOpener } from '@ionic-native/file-opener/ngx';
import { Router } from "@angular/router";
import { SocialSharing } from '@ionic-native/social-sharing/ngx';
import { TranslateService } from '@ngx-translate/core';
import { Storage } from '@ionic/storage';
const delay = ms => new Promise(res => setTimeout(res, ms));
......@@ -28,13 +29,17 @@ export class UtilService {
private fileOpener: FileOpener,
private router: Router,
public platform: Platform,
private socialSharing: SocialSharing
private socialSharing: SocialSharing,
private storage: Storage,
public translate: TranslateService,
public events: Events
) {
this.loaders = new Array();
this.loader = this.loadingCtrl.create({
message: "Please wait...",
});
this.loaders.push(this.loader);
this.languageSelected = "";
}
async presentAlert(headerPar, subtitlePar, messagePar, buttonsPar) {
......@@ -50,6 +55,33 @@ export class UtilService {
loader;
loaders: Array<any>;
private languageSelected:string;
loadLingua()
{
this.storage.get("lingua").then((data)=>{
if(data != null)
{
this.languageSelected = data;
this.translate.setDefaultLang(data);
this.translate.use(data);
this.events.publish('functionCall:linguaCambiata', null);
}
});
}
setLingua(lingua: string)
{
this.languageSelected = lingua;
this.storage.set("lingua",lingua).then((successData)=>{
console.log("Salvata lingua: "+lingua);
});
}
getLingua():string
{
return this.languageSelected;
}
async showLoading() {
this.loader = await this.loadingCtrl.create({
......@@ -109,6 +141,18 @@ export class UtilService {
return date;
}
getLanguageList() : Array<Pair>
{
var langs = new Array<Pair>();
let lang : Pair = {
'key' :'it',
'value': 'italiano',
'type': ''
}
langs.push(lang);
return langs;
}
static getMIMEtype(extn){
let ext=extn.toLowerCase();
let MIMETypes={
......
{
"azienda_selezionata":"Azienda Selezionata:",
"menu_principale":"Main Menu",
"lingua_selezionata":"Lingua Selezionata:",
"seleziona_lingua":"Seleziona una lingua",
"main_page":"SCHERMATA INIZIALE",
"menu_documenti":"I MIEI DOCUMENTI",
"menu_interviste":"DOMANDA / RISPOSTA",
"menu_pareri":"VOGLIO UN PARERE",
"menu_segreteria":"LA SEGRETERIA",
"menu_change":"CAMBIO PASSWORD",
"documenti":"I miei documenti",
"pareri":"Voglio un parere",
"interviste":"Domanda / Risposta",
"segreteria":"La segreteria",
"uscita":"Uscita",
"apri_menu":"Apri il menu",
"titolo_documenti":"i miei documenti",
"cerca":"Cerca",
"da":"da",
"a":"a",
"seleziona_data":"Seleziona una data",
"titolo":"titolo",
"ricerca_titolo":"Ricerca per titolo",
"cerca_documenti":"Cerca documenti",
"condividi":"Condividi",
"condividi_doc":"Condividi documenti",
"condividi_fatture":"Condividi fatture",
"scarica_doc":"Scarica documento",
"condividi_documento":"Condividi documento",
"interviste_titolo":"domanda / risposta",
"visualizza_archiviati":"Visualizza archiviati",
"archivia_interviste":"Archivia Domande/Risposte",
"undo_archivio_interviste":"Togli Domande/Risposte dall'archivio",
"riattiva_interviste":"Riattiva Domande/Risposte",
"visualizza_dettagli":"Visualizza dettagli",
"aggiorna":"Aggiorna",
"back_interviste":"Torna alla lista di domande/risposte",
"io":"io",
"inserire_titolo":"inserire qui il titolo",
"inserire_domanda":"inserire qui la domanda",
"inserire_richiesta":"inserire qui la richiesta",
"aggiungi_allegato":"Aggiungi Allegato",
"invia":"invia",
"annulla":"annulla",
"digita_msg":"Digita un messaggio",
"inserisci_intervento":"Inserisci intervento",
"inserisci_argomento":"Aggiungi argomento/intervento",
"parere_titolo":"voglio un parere",
"archivia_pareri":"Archivia Pareri",
"undo_archivio_pareri":"Togli Pareri dall'archivio",
"riattiva_pareri":"Riattiva Pareri",
"back_pareri":"Torna alla lista dei pareri",
"scarica_allegato":"Scarica allegato",
"aggiungi_richiesta":"Richiedi un nuovo parere",
"segreteria_titolo":"la segreteria",
"seleziona_struttura":"Seleziona una struttura",
"struttura_sel":"La struttura che hai selezionato è",
"cerca_progetto":"Cerca n° progetto notula",
"cerca_notula":"Cerca n° notula",
"progetto":"Progetto",
"notula":"Notula",
"text_progetto":"Progetto Notula n.",
"text_notula":"Notula n.",
"text_data_notula":"Data Notula:",
"estratto_conto":"Estratto conto",
"solleciti":"Solleciti",
"preventivi":"Prev./Pagam.",
"fatture":"Fatture e Progetti",
"change_password":"Cambia Password",
"old_pwd":"vecchia password",
"new_pwd":"nuova password",
"repeat_new_pwd":"ripeti nuova password",
"back_login":"Torna alla login",
"reset_pwd":"Reset Password",
"email":"email",
"prenota":"Prenota subito la tua",
"business_call":"Business Call",
"nome":"Nome",
"cognome":"Cognome",
"cellulare":"Cellulare",
"indirizzo_email":"Indirizzo email",
"lingua":"Lingua",
"testo_libero":"Aggiungi, se desideri, del testo libero",
"preso_visione":"Ho preso visione del documento sulla",
"privacy":"privacy policy",
"inviaM":"INVIA",
"campi_obbligatori":"Tutti i campi seguiti da * sono obbligatori",
"username":"Inserisci il tuo username",
"password":"Password",
"accedi":"ACCEDI",
"lost_password":"Hai perso la password?",
"hai_account":"Non hai ancora un account?",
"prenota_subito":"Prenota subito",
"tua":"la tua",
"consulenti":"I nostro consulenti pianificheranno una Business Call",
"gratuita":"gratuita",
"su_misura":"su misura per te e la tua azienda",
"prenota_app":"PRENOTA IL TUO APPUNTAMENTO!",
"refresh":"Aggiorna",
"apri":"Apri"
}
\ No newline at end of file
......@@ -2,5 +2,6 @@ export const environment = {
production: true,
BASE_ADDRESS: 'http://5.8.104.230:8080/stman',
P2PTokenUrl: "https://www.2p2.it/auth-request",
P2PSingleSignOnUrl: "https://www.2p2.it/?token="
P2PSingleSignOnUrl: "https://www.2p2.it/?token=",
struttura:'2p2'
};
......@@ -7,7 +7,8 @@ export const environment = {
BASE_ADDRESS: 'http://aimsviluppo.aimconsulting.it:8085/stman',
//BASE_ADDRESS: 'http://localhost:8080/stman',
P2PTokenUrl: "https://www.2p2.it/auth-request",
P2PSingleSignOnUrl: "https://www.2p2.it/?token="
P2PSingleSignOnUrl: "https://www.2p2.it/?token=",
struttura:'2p2'
};
......
......@@ -362,6 +362,8 @@ strong {
.button-icon
{
color: #000000;
width: 24px;
height: 24px;
}
.button-date
......@@ -483,6 +485,7 @@ strong {
}
.contenitore-home {
font-family: 'futura-pt', sans-serif;
@media (max-width: 991px) {
max-width: 95%;
}
......@@ -505,13 +508,16 @@ strong {
margin-left: 20px;
}
.box {
@media (min-width: 360px) {
width: 140px;
@media (min-width: 380px) {
width: 148px;
}
@media (max-width: 360px) {
@media (max-width: 349px) {
width: 120px;
}
margin: 5px 10px 5px 5px;
@media (max-width: 379px) and (min-width: 350px) {
width: 134px;
}
margin: 5px 17px 5px 5px;
border: 1px solid $grigio-lite;
-webkit-box-shadow: 0px 3px 4px 0px rgba(184,184,184,1);
-moz-box-shadow: 0px 3px 4px 0px rgba(184,184,184,1);
......@@ -541,6 +547,8 @@ strong {
padding: 15px 5px;
min-height: 42px;
height: 84px;
font-family: 'futura-pt', sans-serif;
color: $grigio;
}
}
}
......@@ -555,6 +563,7 @@ strong {
{
--border-color: transparent!important;
color: $bianco;
font-family: 'futura-pt', sans-serif;
}
.item-border-grey
......@@ -562,6 +571,7 @@ strong {
//height: 50px;
//font-size: 12px;
color: $bianco;
font-family: 'futura-pt', sans-serif;
//margin-right: auto;
}
......@@ -600,12 +610,20 @@ ion-menu{
font-weight: bold;
text-align:left;
color: $bianco;
font-family: 'futura-pt', sans-serif;
}
.label-border
{
font-family: 'futura-pt', sans-serif;
--ion-font-family: 'futura-pt', sans-serif;
}
.row-results {
padding: 10px 0px;
margin: 5px 0px;
border-bottom: 1px solid $grigio-lite;
font-family: 'futura-pt', sans-serif;
//overflow: hidden;
.check {
float: left;
......@@ -626,12 +644,32 @@ ion-menu{
ion-icon {
color: #2b94d1;
width: 30px;
height: 30px;
}
}
.row-download-special {
float: right;
overflow: hidden;
font-family: 'futura-pt', sans-serif;
.group-icon2
{
text-align: center;
display: inline-block;
margin-right: 5px;
ion-label {
font-size: 14px;
}
ion-icon {
margin-top: 7px;
height: 25px;
color:#515151;
--color: #515151;
width: 45px;
display: block;
}
}
.group-icon {
text-align: center;
display: inline-block;
......@@ -652,6 +690,9 @@ ion-menu{
.detail {
font-size: 12px;
}
.detail-margin {
margin-left: 33px;
}
}
}
}
......@@ -1000,18 +1041,40 @@ ion-menu{
.search-date {
font-size: 13px;
padding-bottom: 15px;
padding-bottom: 10px;
margin-bottom: 5px;
width: 100%;
font-family: 'futura-pt', sans-serif;
.riga{
width: 100%;
}
.text{
font-size: 15px;
}
.check {
float: left;
margin-right: 10px;
}
.cerca-notula
{
margin-right: 10px;
width: 150px;
}
.cerca-titolo
{
margin-left: 10px;
width: 150px;
@media (max-width: 500px)
{
margin-left: 0px;
}
}
input[type=input] {
font-size: 15px;
display: inline-block;
border: none;
border-bottom: 1px solid $grigio-superlite;
width: 87px;
width: 50px;
}
.search-arrow {
margin-left: 10px;
......@@ -1021,6 +1084,9 @@ ion-menu{
border: 0px;
height: 24px;
width: 41px;
float: right;
font-size: 0px;
--border-radius:0px;
}
.condividi-text{
font-size: 18px;
......@@ -1034,6 +1100,10 @@ ion-menu{
{
margin-block-start: 7px;
}
.float-date
{
margin-bottom: 5px;
}
}
.input-intervento
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment