You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by dg...@apache.org on 2020/09/24 06:29:22 UTC

[incubator-dlab] branch DLAB-1778 created (now 0ce159e)

This is an automated email from the ASF dual-hosted git repository.

dgnatyshyn pushed a change to branch DLAB-1778
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git.


      at 0ce159e  Merge localization backend

This branch includes the following new commits:

     new 47db7c7  [DLAB-1778]: Implemented localization
     new 0ce159e  Merge localization backend

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 02/02: Merge localization backend

Posted by dg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dgnatyshyn pushed a commit to branch DLAB-1778
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 0ce159e13be8a23831f8565b90643f1968a13784
Merge: 47db7c7 457de16
Author: Dmytro_Gnatyshyn <di...@ukr.net>
AuthorDate: Wed Sep 23 22:02:31 2020 +0300

    Merge localization backend

 CONTRIBUTING.md                                              |  2 +-
 .../src/main/java/com/epam/dlab/dto/bucket/BucketDTO.java    |  2 +-
 .../java/com/epam/dlab/backendapi/service/BucketService.java |  1 -
 .../backendapi/service/impl/aws/BucketServiceAwsImpl.java    | 12 ++++--------
 .../service/impl/azure/BucketServiceAzureImpl.java           |  5 ++---
 .../backendapi/service/impl/gcp/BucketServiceGcpImpl.java    |  6 +-----
 .../epam/dlab/backendapi/resources/dto/UserResourceInfo.java |  2 ++
 .../dlab/backendapi/service/impl/EnvironmentServiceImpl.java |  2 ++
 .../backendapi/service/impl/SchedulerJobServiceImpl.java     | 11 ++++++-----
 .../cluster-details/cluster-details.component.html           |  2 +-
 .../dlab/backendapi/service/impl/BucketServiceImplTest.java  |  4 +++-
 .../backendapi/service/impl/EnvironmentServiceImplTest.java  | 10 ++++++----
 12 files changed, 29 insertions(+), 30 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 01/02: [DLAB-1778]: Implemented localization

Posted by dg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dgnatyshyn pushed a commit to branch DLAB-1778
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 47db7c787bccfdc2a2446b1179713e97a1e6a46b
Author: Dmytro_Gnatyshyn <di...@ukr.net>
AuthorDate: Wed Sep 23 21:58:06 2020 +0300

    [DLAB-1778]: Implemented localization
---
 .../ssn-monitor/ssn-monitor.component.ts           |  1 -
 .../main/resources/webapp/src/app/app.module.ts    | 10 +++-
 .../pipes/local-currency-pipe/index.ts}            | 31 ++++-------
 .../local-currency-pipe/local-currency.pipe.ts}    | 27 +++-------
 .../pipes/local-date-pipe/index.ts}                | 31 ++++-------
 .../pipes/local-date-pipe/local-date.pipe.ts}      | 32 +++++-------
 .../src/app/core/services/localization.service.ts  | 58 ++++++++++++++++++++
 .../audit/audit-grid/audit-grid.component.html     |  2 +-
 .../src/app/reports/audit/audit.component.ts       | 14 +----
 .../webapp/src/app/reports/audit/audit.module.ts   | 22 ++++----
 .../reporting-grid/reporting-grid.component.html   | 18 +------
 .../bucket-browser/bucket-browser.component.html   |  3 +-
 .../bucket-browser/bucket-browser.component.ts     | 15 ++----
 .../bucket-browser/bucket-data.service.ts          | 61 +++++++++++++++++++---
 .../cost-details-dialog.component.html             | 10 ++--
 .../resources/scheduler/scheduler.calculations.ts  |  8 +++
 .../resources/scheduler/scheduler.component.html   |  8 +--
 .../app/resources/scheduler/scheduler.component.ts | 32 ++++++++----
 .../shared/time-picker/time-picker.component.ts    | 16 +++---
 .../main/resources/webapp/src/assets/svg/logo.svg  |  3 --
 .../src/main/resources/webapp/src/polyfills.ts     |  4 ++
 21 files changed, 234 insertions(+), 172 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/ssn-monitor/ssn-monitor.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/management/ssn-monitor/ssn-monitor.component.ts
index 2791353..b371013 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/management/ssn-monitor/ssn-monitor.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/ssn-monitor/ssn-monitor.component.ts
@@ -20,7 +20,6 @@
 import { Component, OnInit, ViewEncapsulation } from '@angular/core';
 import { MatDialogRef } from '@angular/material/dialog';
 import { ToastrService } from 'ngx-toastr';
-
 import { DICTIONARY } from '../../../../dictionary/global.dictionary';
 import { HealthStatusService } from '../../../core/services';
 
diff --git a/services/self-service/src/main/resources/webapp/src/app/app.module.ts b/services/self-service/src/main/resources/webapp/src/app/app.module.ts
index 91ec87d..bc2e14a 100644
--- a/services/self-service/src/main/resources/webapp/src/app/app.module.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/app.module.ts
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import { NgModule } from '@angular/core';
+import {LOCALE_ID, NgModule} from '@angular/core';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { RouterModule } from '@angular/router';
 import { LocationStrategy, HashLocationStrategy } from '@angular/common';
@@ -40,7 +40,9 @@ import { WebterminalModule } from './webterminal';
 import { CoreModule } from './core/core.module';
 import { SwaggerAPIModule } from './swagger';
 import {ReportsModule} from './reports/reports.module';
+import {LocalizationService} from './core/services/localization.service';
 
+LocalizationService.registerCulture(window.navigator.language);
 
 @NgModule({
   declarations: [AppComponent],
@@ -70,7 +72,11 @@ import {ReportsModule} from './reports/reports.module';
     provide: LocationStrategy,
     useClass: HashLocationStrategy,
     useValue: '/'
-  }],
+  },
+    { provide: LOCALE_ID,
+      deps: [LocalizationService],
+      useFactory: (localizationService) => localizationService.getLocale() }
+  ],
   bootstrap: [AppComponent]
 })
 export class AppModule { }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts b/services/self-service/src/main/resources/webapp/src/app/core/pipes/local-currency-pipe/index.ts
similarity index 52%
copy from services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
copy to services/self-service/src/main/resources/webapp/src/app/core/pipes/local-currency-pipe/index.ts
index 1174e74..d6373bc 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/pipes/local-currency-pipe/index.ts
@@ -17,27 +17,14 @@
  * under the License.
  */
 
-export class SchedulerCalculations {
-  public static convertTimeFormat(time24: any) {
-    let result;
-    if (typeof time24 === 'string') {
-      const spl = time24.split(':');
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { LocalCurrencyPipe } from './local-currency.pipe';
 
-      result = {
-        hour: +spl[0] % 12 || 12,
-        minute: +spl[1],
-        meridiem: +spl[0] < 12 || +spl[0] === 24 ? 'AM' : 'PM'
-      };
-    } else {
-      let hours = time24.hour;
-      const minutes = (time24.minute < 10) ? '0' + time24.minute : time24.minute;
+@NgModule({
+  imports: [CommonModule],
+  declarations: [LocalCurrencyPipe],
+  exports: [LocalCurrencyPipe]
+})
 
-      if (time24.meridiem === 'PM' && time24.hour < 12) hours = time24.hour + 12;
-      if (time24.meridiem === 'AM' &&  time24.hour === 12) hours = time24.hour - 12;
-      hours = hours < 10 ? '0' + hours : hours;
-
-      result = `${hours}:${minutes}`;
-    }
-    return result;
-  }
-}
+export class KeysPipeModule { }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts b/services/self-service/src/main/resources/webapp/src/app/core/pipes/local-currency-pipe/local-currency.pipe.ts
similarity index 53%
copy from services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
copy to services/self-service/src/main/resources/webapp/src/app/core/pipes/local-currency-pipe/local-currency.pipe.ts
index 1174e74..4dde21f 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/pipes/local-currency-pipe/local-currency.pipe.ts
@@ -17,27 +17,16 @@
  * under the License.
  */
 
-export class SchedulerCalculations {
-  public static convertTimeFormat(time24: any) {
-    let result;
-    if (typeof time24 === 'string') {
-      const spl = time24.split(':');
+import { Pipe, PipeTransform } from '@angular/core';
 
-      result = {
-        hour: +spl[0] % 12 || 12,
-        minute: +spl[1],
-        meridiem: +spl[0] < 12 || +spl[0] === 24 ? 'AM' : 'PM'
-      };
-    } else {
-      let hours = time24.hour;
-      const minutes = (time24.minute < 10) ? '0' + time24.minute : time24.minute;
+@Pipe({ name: 'keys' })
 
-      if (time24.meridiem === 'PM' && time24.hour < 12) hours = time24.hour + 12;
-      if (time24.meridiem === 'AM' &&  time24.hour === 12) hours = time24.hour - 12;
-      hours = hours < 10 ? '0' + hours : hours;
-
-      result = `${hours}:${minutes}`;
+export class LocalCurrencyPipe implements PipeTransform {
+  transform(value): any {
+    const keys = [];
+    for (const key in value) {
+      keys.push({ key: key, value: value[key]});
     }
-    return result;
+    return keys;
   }
 }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts b/services/self-service/src/main/resources/webapp/src/app/core/pipes/local-date-pipe/index.ts
similarity index 52%
copy from services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
copy to services/self-service/src/main/resources/webapp/src/app/core/pipes/local-date-pipe/index.ts
index 1174e74..2f29b6a 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/pipes/local-date-pipe/index.ts
@@ -17,27 +17,14 @@
  * under the License.
  */
 
-export class SchedulerCalculations {
-  public static convertTimeFormat(time24: any) {
-    let result;
-    if (typeof time24 === 'string') {
-      const spl = time24.split(':');
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import {LocalDatePipe} from './local-date.pipe';
 
-      result = {
-        hour: +spl[0] % 12 || 12,
-        minute: +spl[1],
-        meridiem: +spl[0] < 12 || +spl[0] === 24 ? 'AM' : 'PM'
-      };
-    } else {
-      let hours = time24.hour;
-      const minutes = (time24.minute < 10) ? '0' + time24.minute : time24.minute;
+@NgModule({
+  imports: [CommonModule],
+  declarations: [LocalDatePipe],
+  exports: [LocalDatePipe]
+})
 
-      if (time24.meridiem === 'PM' && time24.hour < 12) hours = time24.hour + 12;
-      if (time24.meridiem === 'AM' &&  time24.hour === 12) hours = time24.hour - 12;
-      hours = hours < 10 ? '0' + hours : hours;
-
-      result = `${hours}:${minutes}`;
-    }
-    return result;
-  }
-}
+export class LocalDatePipeModule { }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts b/services/self-service/src/main/resources/webapp/src/app/core/pipes/local-date-pipe/local-date.pipe.ts
similarity index 52%
copy from services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
copy to services/self-service/src/main/resources/webapp/src/app/core/pipes/local-date-pipe/local-date.pipe.ts
index 1174e74..5c623ff 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/pipes/local-date-pipe/local-date.pipe.ts
@@ -17,27 +17,21 @@
  * under the License.
  */
 
-export class SchedulerCalculations {
-  public static convertTimeFormat(time24: any) {
-    let result;
-    if (typeof time24 === 'string') {
-      const spl = time24.split(':');
+import { Pipe, PipeTransform } from '@angular/core';
+import {LocalizationService} from '../../services/localization.service';
+import {formatDate} from '@angular/common';
 
-      result = {
-        hour: +spl[0] % 12 || 12,
-        minute: +spl[1],
-        meridiem: +spl[0] < 12 || +spl[0] === 24 ? 'AM' : 'PM'
-      };
-    } else {
-      let hours = time24.hour;
-      const minutes = (time24.minute < 10) ? '0' + time24.minute : time24.minute;
+@Pipe({ name: 'localDate' })
 
-      if (time24.meridiem === 'PM' && time24.hour < 12) hours = time24.hour + 12;
-      if (time24.meridiem === 'AM' &&  time24.hour === 12) hours = time24.hour - 12;
-      hours = hours < 10 ? '0' + hours : hours;
+export class LocalDatePipe implements PipeTransform {
+  constructor(private localizationService: LocalizationService) { }
 
-      result = `${hours}:${minutes}`;
-    }
-    return result;
+  transform(value: any, format: string) {
+
+
+    if (!value) { return ''; }
+    if (!format) { format = 'shortDate'; }
+
+    return formatDate(value, format, 'en', this.localizationService.getTzOffset());
   }
 }
diff --git a/services/self-service/src/main/resources/webapp/src/app/core/services/localization.service.ts b/services/self-service/src/main/resources/webapp/src/app/core/services/localization.service.ts
new file mode 100644
index 0000000..ca4cafd
--- /dev/null
+++ b/services/self-service/src/main/resources/webapp/src/app/core/services/localization.service.ts
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { Injectable } from '@angular/core';
+import { registerLocaleData } from '@angular/common';
+import * as _moment from 'moment';
+import 'moment-timezone';
+
+
+@Injectable({
+  providedIn: 'root'
+})
+export class LocalizationService {
+  public timezone = _moment().format('Z');
+  private _locale = 'en';
+
+  constructor() { }
+
+  get locale() {
+    this._locale = window.navigator.language;
+    return this._locale;
+  }
+
+  public getTzOffset() {
+    return this.timezone;
+  }
+
+  public static registerCulture(culture: string) {
+    if (culture.indexOf('-') !== -1) {
+      culture = culture.substr(0, culture.indexOf('-'));
+    }
+
+    /* webpackInclude: /(uk|sv)\.js$/ */
+    import(
+      `@angular/common/locales/${culture}.js`
+      ).then(module => registerLocaleData(module.default));
+  }
+
+  public getLocale() {
+    return this.locale;
+  }
+}
diff --git a/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit-grid/audit-grid.component.html b/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit-grid/audit-grid.component.html
index 538fec1..795392f 100644
--- a/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit-grid/audit-grid.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit-grid/audit-grid.component.html
@@ -29,7 +29,7 @@
           </i>
         </button>
       </th>
-      <td mat-cell *matCellDef="let element"> {{element.timestamp | date: 'dd/MM/yyyy hh:mm:ss aa'}} </td>
+      <td mat-cell *matCellDef="let element"> {{element.timestamp | date: 'short'}} </td>
       <td mat-footer-cell *matFooterCellDef class="table-footer">
       </td>
     </ng-container>
diff --git a/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit.component.ts b/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit.component.ts
index 14a99be..c04dd20 100644
--- a/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit.component.ts
@@ -18,27 +18,17 @@
  */
 
 
-import {Component, OnInit, OnDestroy, ViewChild, Inject} from '@angular/core';
+import {Component, OnInit, OnDestroy, ViewChild} from '@angular/core';
 import { ToastrService } from 'ngx-toastr';
 import {HealthStatusService} from '../../core/services';
 import { DICTIONARY} from '../../../dictionary/global.dictionary';
 import {AuditToolbarComponent} from './audit-toolbar/audit-toolbar.component';
 import {AuditGridComponent} from './audit-grid/audit-grid.component';
-import {AuditService} from '../../core/services/audit.service';
-import {Endpoint} from '../../administration/project/project.component';
-import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';
-
 
 @Component({
   selector: 'dlab-reporting',
   template: `
   <div class="base-retreat">
-<!--    <dlab-toolbar (rebuildReport)="rebuildBillingReport()"-->
-<!--                  (exportReport)="exportBillingReport()"-->
-<!--                  (setRangeOption)="setRangeOption($event)">-->
-<!--    </dlab-toolbar>-->
-<!--    <mat-divider></mat-divider>-->
-<!--    <dlab-reporting-grid (filterReport)="filterReport($event)" (resetRangePicker)="resetRangePicker()"></dlab-reporting-grid>-->
     <audit-toolbar (rebuildAudit)="rebuildAuditGrid()" (setRangeOption)="setRangeOption($event)">
     </audit-toolbar>
     <mat-divider></mat-divider>
@@ -67,8 +57,6 @@ export class AuditComponent implements OnInit, OnDestroy {
   @ViewChild(AuditGridComponent, { static: true }) auditGrid: AuditGridComponent;
   @ViewChild(AuditToolbarComponent, { static: true }) auditToolbar: AuditToolbarComponent;
 
-  public availablePeriod: any;
-
   constructor(
     private healthStatusService: HealthStatusService,
     public toastr: ToastrService,
diff --git a/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit.module.ts b/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit.module.ts
index d2887a0..a572922 100644
--- a/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit.module.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/reports/audit/audit.module.ts
@@ -26,18 +26,20 @@ import { KeysPipeModule, LineBreaksPipeModule, ConvertActionPipeModule } from '.
 import {AuditComponent} from './audit.component';
 import {AuditGridComponent, AuditInfoDialogComponent} from './audit-grid/audit-grid.component';
 import {AuditToolbarComponent} from './audit-toolbar/audit-toolbar.component';
+import {LocalDatePipeModule} from '../../core/pipes/local-date-pipe';
 
 @NgModule({
-  imports: [
-    CommonModule,
-    FormsModule,
-    FormControlsModule,
-    ConvertActionPipeModule,
-    KeysPipeModule,
-    LineBreaksPipeModule,
-    NgDateRangePickerModule,
-    MaterialModule
-  ],
+    imports: [
+        CommonModule,
+        FormsModule,
+        FormControlsModule,
+        ConvertActionPipeModule,
+        KeysPipeModule,
+        LineBreaksPipeModule,
+        NgDateRangePickerModule,
+        MaterialModule,
+        LocalDatePipeModule
+    ],
   declarations: [
     AuditGridComponent,
     AuditToolbarComponent,
diff --git a/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.html b/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.html
index 081c711..8fe70df 100644
--- a/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/reports/reporting/reporting-grid/reporting-grid.component.html
@@ -19,19 +19,6 @@
 <div class="billing-page-wrapper scrolling" #pageWrapper [ngClass]="{'scroll': reportData?.length < 5}" (scroll)="scrollTable($event)">
   <div class="wrapper" #wrapper>
     <section class="table-wrapper" id="scrolling" #tableWrapper (scroll)="scrollTable($event)" [ngClass]="{'scroll': reportData?.length > 4, 'shadow-none': reportData?.length < 5}">
-
-      <!--  <div class="navigation-btn">-->
-      <!--    <div class="left">-->
-      <!--      <button mat-fab aria-label="Scroll left">-->
-      <!--        <mat-icon>keyboard_arrow_left</mat-icon>-->
-      <!--      </button>-->
-      <!--    </div>-->
-      <!--    <div class="right">-->
-      <!--      <button mat-fab aria-label="Scroll right">-->
-      <!--        <mat-icon>keyboard_arrow_right</mat-icon>-->
-      <!--      </button>-->
-      <!--    </div>-->
-      <!--  </div>-->
       <table mat-table [dataSource]="reportData" class="data-grid reporting mat-elevation-z6" #table>
 
         <ng-container matColumnDef="name">
@@ -168,8 +155,7 @@
           </td>
           <td mat-footer-cell *matFooterCellDef class="table-footer total-cost" [colSpan]="2" [ngClass]="{'right-sticky': reportData?.length < 5}">
         <span class="strong">
-            Total <span *ngIf="reportData?.length"> {{ fullReport['total_cost'] }}
-          {{ fullReport['currency'] }}</span>
+            Total <span *ngIf="reportData?.length">{{fullReport['total_cost'] | currency: fullReport['currency'] :'symbol'}}</span>
         </span>
           </td>
         </ng-container>
@@ -188,7 +174,7 @@
           </th>
 
           <td mat-cell *matCellDef="let element" [ngClass]="{'right-sticky': reportData?.length < 5}" >
-            {{ element.cost }} {{ element['currency'] }}
+            {{element.cost | currency: element['currency'] :'symbol'}}
           </td >
           <td mat-footer-cell *matFooterCellDef class="table-footer total-cost d-none">
           </td>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.html
index 03c8f03..f0cbf73 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.html
@@ -190,8 +190,7 @@
                 </span>
               </div>
               <div class="size">{{file.object?.size | convertFileSize}}</div>
-              <div class="date" *ngIf="!file.isDownloading">{{convertDate(file.object?.lastModifiedDate) | date: 'dd/MM/yyyy hh:mm:ss aa'  }}</div>
-<!--              <div class="date" *ngIf="!file.isDownloading">{{file.object?.lastModifiedDate}}</div>-->
+              <div class="date" *ngIf="!file.isDownloading">{{file.object?.lastModifiedDate | date: 'short' }}</div>
               <div class="progress-wrapper" *ngIf="file.isDownloading">
                 <div class="progres">
                   <span class="progress-bar-text">{{file.progress || 0}}% Downloading...</span>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts
index d179780..8372e41 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts
@@ -130,11 +130,11 @@ export class BucketBrowserComponent implements OnInit, OnDestroy {
 
 
   public toggleSelectedFile(file, type) {
-  type === 'file' ?  file.isSelected = !file.isSelected : file.isFolderSelected = !file.isFolderSelected;
-  this.selected = this.folderItems.filter(item => item.isSelected);
-  this.selectedFolderForAction = this.folderItems.filter(item => item.isFolderSelected);
-  this.selectedItems = [...this.selected, ...this.selectedFolderForAction];
-  this.isActionsOpen = false;
+    type === 'file' ?  file.isSelected = !file.isSelected : file.isFolderSelected = !file.isFolderSelected;
+    this.selected = this.folderItems.filter(item => item.isSelected);
+    this.selectedFolderForAction = this.folderItems.filter(item => item.isFolderSelected);
+    this.selectedItems = [...this.selected, ...this.selectedFolderForAction];
+    this.isActionsOpen = false;
   }
 
   filesPicked(files) {
@@ -466,11 +466,6 @@ export class BucketBrowserComponent implements OnInit, OnDestroy {
     this.filterObjects();
   }
 
-  public convertDate(date) {
-    const utcDate = new Date(date);
-    return new Date(utcDate.setTime( utcDate.getTime() - utcDate.getTimezoneOffset() * 60 * 1000 ));
-  }
-
 }
 
 
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-data.service.ts b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-data.service.ts
index 2dce58e..8573105 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-data.service.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-data.service.ts
@@ -19,12 +19,61 @@
 
 import { Injectable } from '@angular/core';
 import { BehaviorSubject} from 'rxjs';
-import {BucketBrowserService, TodoItemNode} from '../../core/services/bucket-browser.service';
-
-
-const array = [{'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder11/', 'size': '18 bytes', 'lastModifiedDate': '21-4-2020 11:36:36'}, {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder11/dsafaraorueajkegrgavhsfnvgahsfgsdjfhagsdjfg497frgfhsdajfsgdafjsxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzdvcfdvbgffgsdfgdsafaraorueajkegrgavhsfnvgahsfgsdjfhagsdjfg497frgfhsdajfsgdafjsxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzdvcfdvbgffgsdfgdsfgsdfgggggg', ' [...]
-{'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '<script>alert("hello")' + ' </script>', 'size': '5 bytes', 'lastModifiedDate': '14-4-2020 09:36:16'}, {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '2.jpg', 'size': '52 bytes', 'lastModifiedDate': '17-4-2020 12:13:26'}, {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '1test', 'size': '112 bytes', 'lastModifiedDate': '14-4-2020 04:55:02'}, {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test.pem', 'size': '1 KB', 'las [...]
-{'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '5.jpg', 'size': '52 bytes', 'lastModifiedDate': '17-4-2020 12:13:26'}, {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test', 'size': '12 bytes', 'lastModifiedDate': '14-4-2020 04:55:02'}, {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test.pem', 'size': '1 KB', 'lastModifiedDate': '14-4-2020 04:57:54'}, {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test1', 'size': '52 bytes', 'lastModifiedDate': '17-4-2020 11:22: [...]
+import { BucketBrowserService, TodoItemNode } from '../../core/services/bucket-browser.service';
+
+
+const array = [{'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder11/', 'size': '18', 'lastModifiedDate': '1600846214842'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '51.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'Untitlsed', 'size': '5', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'adassdas', 'size': '1', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'downloadTest.txt', 'size': '16', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder1/', 'size': '11', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder1/2.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder31/3.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder1/folder1/folder1/folder1/folder1/test.pem', 'size': '1', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder12/', 'size': '11', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder3/1.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'objectName', 'size': '5', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'sss.txt', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test', 'size': '12', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test.pem', 'size': '1', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test1', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test2', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'zzz', 'size': '12', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '4.txt/dsafaraorueajkegrgavhsfnvgahsfgsdjfhagsdjfg497frgfhsdajfsgdafj', 'size': '18', 'lastModifiedDate': '1600846214842'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '5.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'Untitled', 'size': '5', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'adasdas', 'size': '1', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'downloadTest.txt', 'size': '16', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder1/', 'size': '11', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder1/2.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder31/3.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+{'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder31/folder1/3.txt', 'size': '5', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '2.jpg', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '1test', 'size': '112', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test.pem', 'size': '1', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test11', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test2', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'zzsz', 'size': '12', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '4.txt/dsafaraorueajkegrgavhsfnvgahsfgsdjfhagsdjfg497frgfhsdajfsgdafj', 'size': '18', 'lastModifiedDate': '1600846214842'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '5.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'Untitled', 'size': '5', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'adasdas', 'size': '1', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'downloadTest.txt', 'size': '16', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder1212/', 'size': '11', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder1/2.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder1/3.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'fol2der1/folder1/folder1/folder1/2folder1/test.pem',
+    'size': '1', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder2/', 'size': '11', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'folder3/1.txt', 'size': '18', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'objectName', 'size': '5', 'lastModifiedDate': '1600846212142'},
+{'bucket': 'ofuks-1304-prj1-local-bucket', 'object': '5.jpg', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test', 'size': '12', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test.pem', 'size': '1', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test1', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'test2', 'size': '52', 'lastModifiedDate': '1600846212142'},
+  {'bucket': 'ofuks-1304-prj1-local-bucket', 'object': 'zzz', 'size': '12', 'lastModifiedDate': '1600846212142'}];
 
 @Injectable()
 export class BucketDataService {
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.html
index d916d94..e830d3c 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.html
@@ -50,16 +50,16 @@
                 </div>
                 <div class="service">{{ item.product }}</div>
 <!--                <div class="resource-type" >{{ item.resourse_type }}</div>-->
-                <div class="usage-date-start">{{ item.from.join('/') | date }}</div>
-                <div class="usage-date-end">{{ item.to.join('/') | date }}</div>
-                <div class="cost-currency">{{ item.cost }} {{ item.currency }}</div>
+                <div class="usage-date-start">{{ item.from.join('/') | date : 'shortDate'}}</div>
+                <div class="usage-date-end">{{ item.to.join('/') | date : 'shortDate'}}</div>
+                <div class="cost-currency">{{ item.cost | currency: item.currency :'code' }}</div>
               </mat-list-item>
             </div>
 
         </mat-list>
         <div class="total">
-          <strong>Total: </strong>{{ notebook.cost }} {{ notebook.currency_code }}</div>
+          <strong>Total: </strong>{{ notebook.cost | currency: notebook.currency_code :'code' }}</div>
       </div>
     </div>
-  </div>
+  </div>:'USD':'code'
 </div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts b/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
index 1174e74..fe8a1ae 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.calculations.ts
@@ -40,4 +40,12 @@ export class SchedulerCalculations {
     }
     return result;
   }
+
+  public static setTimeInMiliseconds(time) {
+    const minutes = (Number(time.minute) < 10) ? ('0' + time.minute) : time.minute;
+    const timeMilisec = new Date().setMinutes(+minutes);
+
+    if (time.meridiem === 'PM' && time.hour < 13) time.hour += 12;
+    return new Date(timeMilisec).setHours(time.hour);
+  }
 }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.component.html
index a983827..c24094e 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.component.html
@@ -101,17 +101,17 @@
 
           <div class="row-wrap" *ngIf="destination.image !== 'docker.dlab-dataengine-service'">
             <div class="control-group col-3 time-range">
-              <dlab-time-picker [(pickTime)]="startTime" [label]="'Choose start time'"
+              <dlab-time-picker [(pickTime)]="startTime" [(milisecTime)]="startTimeMilliseconds" [label]="'Choose start time'"
                 [disable]="destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule">
                 {{destination.type}}
               </dlab-time-picker>
             </div>
             <div class="control-group col-3 time-range">
-              <dlab-time-picker [(pickTime)]="endTime" [label]="'Choose finish time'" [disable]="destination.type === 'СOMPUTATIONAL' && inherit ||!enableSchedule">
+              <dlab-time-picker [(pickTime)]="endTime" [(milisecTime)]="endTimeMilliseconds" [label]="'Choose finish time'" [disable]="destination.type === 'СOMPUTATIONAL' && inherit ||!enableSchedule">
               </dlab-time-picker>
             </div>
             <div class="control-group col-3 time-range" *ngIf="destination.type === 'СOMPUTATIONAL'">
-              <dlab-time-picker [(pickTime)]="terminateTime" [label]="'Choose terminate time'"
+              <dlab-time-picker [(pickTime)]="terminateTime" [(milisecTime)]="terminateTimeMilliseconds" [label]="'Choose terminate time'"
                 [disable]="!enableSchedule"></dlab-time-picker>
             </div>
             <div *ngIf="timeReqiered" class="error term m-bott-10 mt-5"><span>At least one of time range fields
@@ -166,7 +166,7 @@
                 </mat-form-field>
               </div>
               <div class="control-group col-3 time-range" *ngIf="destination.type === 'СOMPUTATIONAL'">
-                <dlab-time-picker [(pickTime)]="terminateTime" [label]="'Choose terminate time'"
+                <dlab-time-picker [(pickTime)]="terminateTime" [(milisecTime)]="terminateTimeMilliseconds" [label]="'Choose terminate time'"
                   [disable]="!enableSchedule"></dlab-time-picker>
               </div>
               <div class="col-3">
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.component.ts
index c923677..7542217 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/scheduler/scheduler.component.ts
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import { Component, OnInit, ViewChild, Output, EventEmitter, ViewEncapsulation, ChangeDetectorRef, Inject } from '@angular/core';
+import {Component, OnInit, ViewChild, ViewEncapsulation, ChangeDetectorRef, Inject, LOCALE_ID} from '@angular/core';
 import { FormGroup, FormBuilder, Validators } from '@angular/forms';
 import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
 import { ToastrService } from 'ngx-toastr';
@@ -31,7 +31,6 @@ import { SchedulerModel, WeekdaysModel } from './scheduler.model';
 import { SchedulerCalculations } from './scheduler.calculations';
 import { HTTP_STATUS_CODES, CheckUtils } from '../../core/util';
 import { ScheduleSchema } from './scheduler.model';
-import { map } from 'rxjs/operators';
 
 @Component({
   selector: 'dlab-scheduler',
@@ -64,9 +63,12 @@ export class SchedulerComponent implements OnInit {
   public destination: any;
   public zones: {};
   public tzOffset: string = _moment().format('Z');
-  public startTime = { hour: 9, minute: 0, meridiem: 'AM' };
-  public endTime = { hour: 8, minute: 0, meridiem: 'PM' };
+  public startTime = SchedulerCalculations.convertTimeFormat('09:00');
+  public startTimeMilliseconds: number = SchedulerCalculations.setTimeInMiliseconds(this.startTime);
+  public endTime = SchedulerCalculations.convertTimeFormat('20:00');
+  public endTimeMilliseconds: number = SchedulerCalculations.setTimeInMiliseconds(this.endTime);
   public terminateTime = null;
+  public terminateTimeMilliseconds: number;
 
   public inactivityLimits = { min: 120, max: 10080 };
   public integerRegex: string = '^[0-9]*$';
@@ -157,8 +159,10 @@ export class SchedulerComponent implements OnInit {
       ? this.schedulerForm.get('startDate').enable()
       : this.schedulerForm.get('startDate').disable();
 
-    this.enableSchedule && this.destination.type !== 'СOMPUTATIONAL' ? this.schedulerForm.get('finishDate').enable() : this.schedulerForm.get('finishDate').disable();
-    this.enableSchedule ? this.schedulerForm.get('terminateDate').enable() : this.schedulerForm.get('terminateDate').disable();
+    this.enableSchedule && this.destination.type !== 'СOMPUTATIONAL' ?
+      this.schedulerForm.get('finishDate').enable() : this.schedulerForm.get('finishDate').disable();
+    this.enableSchedule ?
+      this.schedulerForm.get('terminateDate').enable() : this.schedulerForm.get('terminateDate').disable();
 
     if (this.enableSchedule && $event.source) this.enableIdleTimeView = false;
   }
@@ -257,7 +261,11 @@ export class SchedulerComponent implements OnInit {
   }
 
   private setScheduleByInactivity() {
-    const data = { sync_start_required: this.parentInherit, check_inactivity_required: this.enableIdleTime, max_inactivity: this.schedulerForm.controls.inactivityTime.value };
+    const data = {
+      sync_start_required: this.parentInherit,
+      check_inactivity_required: this.enableIdleTime,
+      max_inactivity: this.schedulerForm.controls.inactivityTime.value
+    };
     (this.destination.type === 'СOMPUTATIONAL')
       ? this.setInactivity(this.notebook.project, this.notebook.name, data, this.destination.computational_name)
       : this.setInactivity(this.notebook.project, this.notebook.name, { ...data, consider_inactivity: this.considerInactivity });
@@ -280,11 +288,12 @@ export class SchedulerComponent implements OnInit {
           params.start_days_repeat.filter(key => (this.selectedStartWeekDays[key.toLowerCase()] = true));
           params.stop_days_repeat.filter(key => (this.selectedStopWeekDays[key.toLowerCase()] = true));
           this.inherit = params.sync_start_required;
-          this.tzOffset = params.timezone_offset;
-          this.startTime = params.start_time ? SchedulerCalculations.convertTimeFormat(params.start_time) : null;
-          this.endTime = params.end_time ? SchedulerCalculations.convertTimeFormat(params.end_time) : null;
+          this.tzOffset = params.timezone_offset ? params.timezone_offset : this.tzOffset;
+          this.startTime = params.start_time ? SchedulerCalculations.convertTimeFormat(params.start_time) : this.startTime;
+          this.startTimeMilliseconds = SchedulerCalculations.setTimeInMiliseconds(this.startTime);
+          this.endTime = params.end_time ? SchedulerCalculations.convertTimeFormat(params.end_time) : this.endTime;
+          this.endTimeMilliseconds = SchedulerCalculations.setTimeInMiliseconds(this.endTime);
           this.formInit(params.begin_date, params.finish_date, params.terminate_datetime);
-          console.log();
           this.schedulerForm.controls.inactivityTime.setValue(params.max_inactivity || this.inactivityLimits.min);
           this.enableIdleTime = params.check_inactivity_required;
           this.considerInactivity = params.consider_inactivity || false;
@@ -293,6 +302,7 @@ export class SchedulerComponent implements OnInit {
             const terminate_datetime = params.terminate_datetime.split(' ');
             this.schedulerForm.controls.terminateDate.setValue(terminate_datetime[0]);
             this.terminateTime = SchedulerCalculations.convertTimeFormat(terminate_datetime[1]);
+            this.terminateTimeMilliseconds = SchedulerCalculations.setTimeInMiliseconds(this.terminateTime);
           }
 
           (this.enableIdleTime && params.max_inactivity)
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/time-picker/time-picker.component.ts b/services/self-service/src/main/resources/webapp/src/app/shared/time-picker/time-picker.component.ts
index 020872e..1abe35f 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/time-picker/time-picker.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/time-picker/time-picker.component.ts
@@ -21,14 +21,15 @@ import { Component, OnInit, Inject, Input, Output, EventEmitter } from '@angular
 import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
 
 import { CLOCK_TYPE, TimeFormat } from './ticker.component';
+import {SchedulerCalculations} from '../../resources/scheduler/scheduler.calculations';
 type TimeFormatAlias = TimeFormat;
-     
+
 @Component({
   selector: 'dlab-time-picker',
   template: `
     <div class="time-picker">
       <mat-form-field class="time-select">
-        <input matInput placeholder="{{ label }}" [value]="selectedTime" (input)="checkEmpty($event.target.value)" [disabled]="disable">
+        <input matInput placeholder="{{ label }}" [value]="selectedTime | date: 'shortTime'" (input)="checkEmpty($event.target['value'])" [disabled]="disable">
         <mat-icon matSuffix [ngClass]="{'not-allowed': disable}" (click)="openDatePickerDialog($event)" disabled="disable">access_time</mat-icon>
       </mat-form-field>
     </div>`,
@@ -38,14 +39,16 @@ export class TimePickerComponent implements OnInit {
   @Input() pickTime: TimeFormatAlias;
   @Input() label: string = 'Select time';
   @Input() disable: boolean = false;
+  @Input() milisecTime: number;
   @Output() pickTimeChange: EventEmitter<TimeFormatAlias> = new EventEmitter();
+  @Output() milisecTimeChange: EventEmitter<TimeFormatAlias> = new EventEmitter();
 
   constructor(private dialog: MatDialog) { }
 
   ngOnInit() { }
 
-  public get selectedTime(): string {
-    return !this.pickTime ? '' : `${this.pickTime.hour}:${this.getFullMinutes()} ${this.pickTime.meridiem}`;
+  public get selectedTime(): string | number {
+    return !this.pickTime ? '' : this.milisecTime;
   }
 
   public getFullMinutes() {
@@ -58,7 +61,7 @@ export class TimePickerComponent implements OnInit {
         time: {
           hour: this.pickTime ? this.pickTime.hour : 0,
           minute: this.pickTime ? this.pickTime.minute : 0,
-          meridiem: this.pickTime ? this.pickTime.meridiem : 'AM' 
+          meridiem: this.pickTime ? this.pickTime.meridiem : 'AM'
         }
       }
     });
@@ -67,13 +70,14 @@ export class TimePickerComponent implements OnInit {
       if (result === undefined) return;
       if (result !== -1) {
         this.pickTime = result;
+        this.milisecTime = SchedulerCalculations.setTimeInMiliseconds(this.pickTime);
         this.emitpickTimeSelection();
       }
     });
     return false;
   }
 
-  checkEmpty(searchValue : string ) {
+  checkEmpty(searchValue: string ) {
     if (!searchValue.length) {
       this.pickTime = null;
       this.emitpickTimeSelection();
diff --git a/services/self-service/src/main/resources/webapp/src/assets/svg/logo.svg b/services/self-service/src/main/resources/webapp/src/assets/svg/logo.svg
deleted file mode 100644
index b0b4da0..0000000
--- a/services/self-service/src/main/resources/webapp/src/assets/svg/logo.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 140.5 47.1" style="enable-background:new 0 0 140.5 47.1;" xml:space="preserve">
-    <path fill="#35AFD5" d="M0.9,46C0.3,45.4,0,44.6,0,43.7V3.1c0-0.8,0.3-1.7,0.9-2.2C1.5,0.3,2.3,0,3.1,0H14c4.2-0.1,8.3,1,12,3 c3.5,1.9,6.3,4.8,8.2,8.3c2,3.7,3,7.9,3,12.1c0.1,4.2-0.9,8.4-2.9,12.1c-1.9,3.5-4.8,6.4-8.3,8.3c-3.7,2-7.8,3.1-12.1,3H3.1 C2.3,46.9,1.5,46.6,0.9,46z M14,41.3c3.1,0.1,6.2-0.7,8.9-2.3c2.6-1.5,4.7-3.7,6.1-6.4c1.5-2.9,2.2-6,2.2-9.3 c0.1-3.2-0.7-6.4-2.2-9.2c-1.4-2.7-3.5-4.9-6.1-6.4c-2.7-1.5-5.8-2.3-8.9-2.3H6.2v35.8H14z M41.8,46.2C41.3,45.6,41,44.8,41,44V3.4 c0-0.8,0.3-1 [...]
-</svg>
\ No newline at end of file
diff --git a/services/self-service/src/main/resources/webapp/src/polyfills.ts b/services/self-service/src/main/resources/webapp/src/polyfills.ts
index 3e45a73..4358780 100644
--- a/services/self-service/src/main/resources/webapp/src/polyfills.ts
+++ b/services/self-service/src/main/resources/webapp/src/polyfills.ts
@@ -1,3 +1,7 @@
+/***************************************************************************************************
+ * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates.
+ */
+import '@angular/localize/init';
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org