Commit b0367de7 authored by Aaron Gutierrez's avatar Aaron Gutierrez

Initial commit

parents
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
/out-tsc
# Only exists if Bazel was run
/bazel-out
# dependencies
/node_modules
# profiling files
chrome-profiler-events*.json
speed-measure-plugin*.json
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
Thumbs.db
# ByteBot
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.3.24.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"bytebot-html": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "projects/bytebot-html",
"sourceRoot": "projects/bytebot-html/src",
"prefix": "byte",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/bytebot-html",
"index": "projects/bytebot-html/src/index.html",
"main": "projects/bytebot-html/src/main.ts",
"polyfills": "projects/bytebot-html/src/polyfills.ts",
"tsConfig": "projects/bytebot-html/tsconfig.app.json",
"aot": false,
"assets": [
"projects/bytebot-html/src/favicon.ico",
"projects/bytebot-html/src/assets"
],
"styles": [
"./node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
"./node_modules/material-icons/iconfont/material-icons.css",
"projects/bytebot-html/src/styles.scss",
"node_modules/font-awesome/scss/font-awesome.scss",
"node_modules/ngx-toastr/toastr.css",
"node_modules/ngx-bootstrap/datepicker/bs-datepicker.css"
],
"scripts": [
"node_modules/jquery/dist/jquery.min.js",
"vendor/metismenu/metisMenu.js",
"node_modules/bootstrap/dist/js/bootstrap.min.js",
"node_modules/bootstrap/dist/js/bootstrap.bundle.min.js",
"node_modules/jquery-slimscroll/jquery.slimscroll.min.js",
"node_modules/marked/marked.min.js",
"node_modules/ace-builds/src-min/ace.js",
"node_modules/ace-builds/src-min/mode-markdown.js",
"node_modules/ace-builds/src-min/theme-eclipse.js",
"node_modules/ace-builds/src-min/mode-java.js",
"node_modules/peity/jquery.peity.min.js",
"node_modules/pace-js/pace.min.js",
"node_modules/popper.js/dist/umd/popper.js",
"vendor/inspinia/inspinia.js"
]
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "projects/bytebot-html/src/environments/environment.ts",
"with": "projects/bytebot-html/src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "bytebot-html:build"
},
"configurations": {
"production": {
"browserTarget": "bytebot-html:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "bytebot-html:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "projects/bytebot-html/src/test.ts",
"polyfills": "projects/bytebot-html/src/polyfills.ts",
"tsConfig": "projects/bytebot-html/tsconfig.spec.json",
"karmaConfig": "projects/bytebot-html/karma.conf.js",
"assets": [
"projects/bytebot-html/src/favicon.ico",
"projects/bytebot-html/src/assets"
],
"styles": [
"projects/bytebot-html/src/styles.scss"
],
"scripts": []
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"projects/bytebot-html/tsconfig.app.json",
"projects/bytebot-html/tsconfig.spec.json",
"projects/bytebot-html/e2e/tsconfig.json"
],
"exclude": [
"**/node_modules/**"
]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "projects/bytebot-html/e2e/protractor.conf.js",
"devServerTarget": "bytebot-html:serve"
},
"configurations": {
"production": {
"devServerTarget": "bytebot-html:serve:production"
}
}
}
}
}
},
"defaultProject": "bytebot-html"
}
\ No newline at end of file
This diff is collapsed.
{
"name": "bytebot-projects",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@agm/core": "^1.1.0",
"@angular-material-components/datetime-picker": "^2.0.4",
"@angular/animations": "^8.2.14",
"@angular/cdk": "^8.2.3",
"@angular/common": "~8.2.14",
"@angular/compiler": "~8.2.14",
"@angular/core": "~8.2.14",
"@angular/forms": "~8.2.14",
"@angular/material": "^8.2.3",
"@angular/material-moment-adapter": "^9.2.0",
"@angular/platform-browser": "^8.2.14",
"@angular/platform-browser-dynamic": "^8.2.14",
"@angular/router": "~8.2.14",
"@babel/compat-data": "^7.8.0",
"@ng-bootstrap/ng-bootstrap": "^6.0.2",
"@ng-select/ng-select": "^3.7.3",
"@ngx-translate/core": "^12.1.2",
"@ngx-translate/http-loader": "^4.0.0",
"@swimlane/ngx-datatable": "^16.0.3",
"@swimlane/ngx-graph": "^6.2.0",
"@types/jquery": "^3.3.34",
"@xdf/commons": "^1.0.0",
"@xdf/gallery": "^1.0.4",
"@xdf/layouts": "^1.0.0",
"@xdf/security": "^1.0.0",
"@xdf/settings": "^1.0.2",
"ace-builds": "^1.4.8",
"angular-highcharts": "^9.0.2",
"angular-marked": "^1.2.2",
"bootstrap": "^4.4.1",
"chart.js": "^2.9.3",
"dagre": "^0.8.5",
"date-fns": "^2.11.1",
"font-awesome": "^4.7.0",
"hammerjs": "^2.0.8",
"highcharts": "^8.0.4",
"jquery": "^3.4.1",
"jquery-slimscroll": "^1.3.8",
"material-design-icons": "^3.0.1",
"material-icons": "^0.3.1",
"metismenu": "^3.0.6",
"moment": "^2.22.1",
"moment-timezone": "^0.5.31",
"net": "^1.0.2",
"ng-circle-progress": "^1.5.1",
"ng-json-view": "^3.0.0",
"ng2-ace-editor": "^0.3.9",
"ng2-charts": "^2.3.0",
"ng2-data-table": "^1.4.0",
"ngx-bootstrap": "^4.3.0",
"ngx-color": "^4.1.1",
"ngx-echarts": "^4.2.2",
"ngx-moment": "^3.5.0",
"ngx-scrollbar": "^7.1.0",
"ngx-toastr": "^10.0.4",
"ngx-translate-multi-http-loader": "^3.0.0",
"nomnoml": "^0.6.2",
"pace-js": "^1.0.2",
"peity": "^3.3.0",
"popper": "^1.0.1",
"popper.js": "^1.16.1",
"rxjs": "~6.4.0",
"stompjs": "^2.3.3",
"tslib": "^1.10.0",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.803.25",
"@angular/cli": "~8.3.24",
"@angular/compiler-cli": "~8.2.14",
"@angular/language-service": "~8.2.14",
"@types/node": "~8.9.4",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"codelyzer": "^5.0.0",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.15.0",
"typescript": "~3.5.3"
}
}
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
# You can see what browsers were selected by your queries by running:
# npx browserslist
> 0.5%
last 2 versions
Firefox ESR
not dead
not IE 9-11 # For IE 9-11 support, remove 'not'.
\ No newline at end of file
// @ts-check
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts
const { SpecReporter } = require('jasmine-spec-reporter');
/**
* @type { import("protractor").Config }
*/
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./src/**/*.e2e-spec.ts'
],
capabilities: {
browserName: 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
onPrepare() {
require('ts-node').register({
project: require('path').join(__dirname, './tsconfig.json')
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};
\ No newline at end of file
import { AppPage } from './app.po';
import { browser, logging } from 'protractor';
describe('workspace-project App', () => {
let page: AppPage;
beforeEach(() => {
page = new AppPage();
});
it('should display welcome message', () => {
page.navigateTo();
expect(page.getTitleText()).toEqual('bytebot-html app is running!');
});
afterEach(async () => {
// Assert that there are no errors emitted from the browser
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
expect(logs).not.toContain(jasmine.objectContaining({
level: logging.Level.SEVERE,
} as logging.Entry));
});
});
import { browser, by, element } from 'protractor';
export class AppPage {
navigateTo() {
return browser.get(browser.baseUrl) as Promise<any>;
}
getTitleText() {
return element(by.css('app-root .content span')).getText() as Promise<string>;
}
}
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/e2e",
"module": "commonjs",
"target": "es5",
"types": [
"jasmine",
"jasminewd2",
"node"
]
}
}
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/bytebot-html'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { BaseLayoutComponent, NotFoundComponent } from '@xdf/layouts';
import { AuthGuard, LoginComponent } from '@xdf/security';
import { HomeComponent } from './views/home/home.component';
const routes: Routes = [
// Remover para SSO
{ path: 'login', component: LoginComponent },
// Main redirect
{ path: '', redirectTo: 'home', pathMatch: 'full', canActivate: [AuthGuard] },
{
path: '', component: BaseLayoutComponent,
children: [
{ path: 'home', component: HomeComponent, data: { breadcrumb: 'Home' } },
{
path: 'security', canLoad: [AuthGuard],
loadChildren: () => import('./modules/security/security.module').then(m => m.SecurityModule)
},
{
path: 'settings', canLoad: [AuthGuard],
loadChildren: () => import('./modules/settings/settings.module').then(m => m.SettingsModule)
}
],
canActivate: [AuthGuard]
},
{ path: 'notpermitted', component: NotFoundComponent},
// Handle all other routes
{ path: '**', component: NotFoundComponent}
];
@NgModule({
imports: [RouterModule.forRoot(routes, {
scrollPositionRestoration: 'enabled',
anchorScrolling: 'enabled',
onSameUrlNavigation: 'ignore'
})],
exports: [RouterModule]
})
export class AppRoutingModule { }
\ No newline at end of file
<router-outlet></router-outlet>
\ No newline at end of file
import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [
AppComponent
],
}).compileComponents();
}));
it('should create the app', () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
});
it(`should have as title 'bytebot-html'`, () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app.title).toEqual('bytebot-html');
});
it('should render title', () => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('.content span').textContent).toContain('bytebot-html app is running!');
});
});
import { Component } from '@angular/core';
@Component({
selector: 'byte-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'bytebot-html';
}
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { CommonModule, HashLocationStrategy, LocationStrategy, registerLocaleData } from '@angular/common';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';
import { TranslateModule, TranslateLoader, TranslateService } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS, MatPaginatorIntl } from '@angular/material';
// XDF
import { XdfLayoutsModule, SettingsService, ByteSettingsService, SettingsFakeBackendInterceptor } from '@xdf/layouts';
import { XdfSecurityModule, ByteAuthenticationService, AuthGuard, OAuthGuard, OAuthAuthenticationService, ResourceAuthGuard, AuthenticationFakeBackendInterceptor, ProgramsFakeBackendInterceptor } from '@xdf/security';
import { XdfCommonsModule, NotificationService, ToastNotificationService } from '@xdf/commons';
import { AuthenticationService, InitCommonsService } from '@xdf/commons';
import { DATERANGEPICKER_LOCALE, DaterangepickerLocaleService, XdfGalleryModule, CustomMatPaginatorIntl, ConflictErrorDialogService, HttpErrorHandleInterceptor } from '@xdf/gallery';
import localeEs from '@angular/common/locales/es-PE';
import localeEn from '@angular/common/locales/en';
import { MultiTranslateHttpLoader } from 'ngx-translate-multi-http-loader';
import { HomeComponent } from './views/home/home.component';
import {
MAT_MOMENT_DATE_FORMATS,
MomentDateAdapter,
MAT_MOMENT_DATE_ADAPTER_OPTIONS,
} from '@angular/material-moment-adapter';
import { CustomProgramsFakeBackendInterceptor } from './interceptors/custom-programs-fake-backend.interceptor';
const INITIAL_LANGUAGE = 'es';
registerLocaleData(localeEs, 'es');
registerLocaleData(localeEn, 'en');
export function createTranslateLoader(http: HttpClient) {
return new MultiTranslateHttpLoader(http,
[
{ prefix: './assets/i18n/', suffix: '.json' },
{ prefix: './assets/i18n/menu/', suffix: '.json' },
{ prefix: './assets/i18n/layouts/', suffix: '.json' },
{ prefix: './assets/i18n/gallery/', suffix: '.json' },
{ prefix: './assets/i18n/security/', suffix: '.json' },
{ prefix: './assets/i18n/settings/', suffix: '.json' }
]);
}
@NgModule({
declarations: [
AppComponent,
HomeComponent
],
imports: [
BrowserModule,
HttpClientModule,
AppRoutingModule,
CommonModule,
BrowserAnimationsModule,
FormsModule,
ReactiveFormsModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: createTranslateLoader,
deps: [HttpClient]
}
}),
XdfCommonsModule.forRoot({
language: INITIAL_LANGUAGE
}),
XdfLayoutsModule,
XdfSecurityModule,
XdfGalleryModule
],
providers: [
{ provide: MAT_DATE_LOCALE, useValue: INITIAL_LANGUAGE },
{
provide: DateAdapter,
useClass: MomentDateAdapter,
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS]
},
{provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS},
{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl, deps: [TranslateService] },
{ provide: DATERANGEPICKER_LOCALE, useValue: INITIAL_LANGUAGE },
{ provide: DaterangepickerLocaleService, useClass: DaterangepickerLocaleService},
{ provide: LocationStrategy, useClass: HashLocationStrategy },
{ provide: NotificationService, useClass: ToastNotificationService },
{ provide: SettingsService, useClass: ByteSettingsService },
ConflictErrorDialogService,
{ provide: HTTP_INTERCEPTORS, useClass: HttpErrorHandleInterceptor, multi: true},
// { provide: HTTP_INTERCEPTORS, useClass: ErrorsHandler, multi: true},
{ provide: ResourceAuthGuard, useClass: ResourceAuthGuard},
// descomentar estas lineas para OAUTH
{ provide: AuthGuard, useClass: OAuthGuard},
{ provide: AuthenticationService, useClass: OAuthAuthenticationService },
{ provide: APP_INITIALIZER, useFactory: loginLoaderFactory, deps: [AuthenticationService], multi: true },
// Para probar mantenimientos
// comentar estas lineas para OAUTH
// { provide: AuthGuard, useClass: AuthGuard},
// { provide: AuthenticationService, useClass: ByteAuthenticationService },
// { provide: HTTP_INTERCEPTORS, useClass: AuthenticationFakeBackendInterceptor, multi: true},
{ provide: HTTP_INTERCEPTORS, useClass: SettingsFakeBackendInterceptor, multi: true},
{ provide: HTTP_INTERCEPTORS, useClass: CustomProgramsFakeBackendInterceptor, multi: true},
//{ provide: HTTP_INTERCEPTORS, useClass: EntidadFakeFakeBackendInterceptor, multi: true},
{ provide: APP_INITIALIZER, useFactory: init_app, deps: [InitCommonsService, TranslateService], multi: true }
],
bootstrap: [AppComponent]
})
export class AppModule { }
export function init_app(appLoaderService: InitCommonsService) {
return () => appLoaderService.initializeApp();
}
// required for AOT compilation
// export function HttpLoaderFactory(http: HttpClient) {
// return new TranslateHttpLoader(http);
// }
// Para OAUTH
export function loginLoaderFactory(provider: OAuthAuthenticationService) {
return () => provider.login(null, null).toPromise();
}
\ No newline at end of file
import { HttpRequest, HttpResponse, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
import { Observable, of, throwError } from 'rxjs';
import { delay, mergeMap, materialize, dematerialize } from 'rxjs/operators';
import { Injectable } from '@angular/core';
import * as source from '../../assets/fake-data/programs-data.json';
import * as controlsSource from '../../assets/fake-data/controls-data.json';
const basePath = '/service/security/programs';
const basePathCotnrols = '/service/security/controls';
@Injectable()
export class CustomProgramsFakeBackendInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const { url, method, headers, body } = request;
const data = (source as any).default;
const dataControls = (controlsSource as any).default;
return of(null)
.pipe(mergeMap(handleRoute))
.pipe(materialize())
.pipe(delay(50))
.pipe(dematerialize());
function handleRoute() {
switch (true) {
case url.match('.*' + basePath) && method === 'GET':
return getList();
case url.match('.*'+ basePathCotnrols + '.*') && method === 'GET':
return getControls();
default:
// pass through any requests not handled above
return next.handle(request);
}
}
function getList() {
return ok(data);
}
function getControls() {
return ok(dataControls);
}
// helper functions
function ok(bodyContent?) {
return of(new HttpResponse({ status: 200, body: bodyContent }));
}
function error(message: string) {
return throwError({ error: { message } });
}
}
}
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthGuard } from '@xdf/security';
import { TemplateResolver, CrudDetailComponent, DirtyGuard, GridViewComponent, CrudGridComponent, RecordResolver } from '@xdf/gallery';
import { ResourceAuthGuard } from '@xdf/security';
import { UserRoleFormComponent, AccessDetailResolver } from '@xdf/settings';
const routes: Routes = [
{
path: 'user-role', component: GridViewComponent, canActivate: [AuthGuard, ResourceAuthGuard],
resolve: { template: TemplateResolver },
data: {
program: 'user_role',
breadcrumb: 'breadcrumb.user.role'
}
},
{
path: 'user-role/detail/:mode', component: UserRoleFormComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: RecordResolver, accessList: AccessDetailResolver },
data: {
program: 'user_role',
breadcrumb: 'breadcrumb.user.role.detail'
}
},
{
path: 'user', component: CrudGridComponent, canActivate: [AuthGuard, ResourceAuthGuard],
resolve: { template: TemplateResolver },
data: {
innerTemplate: 'none',
program: 'user',
breadcrumb: 'breadcrumb.user'
}
},
{
path: 'user/detail/:mode', component: CrudDetailComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: RecordResolver },
data: {
program: 'user',
breadcrumb: 'breadcrumb.user.detail'
}
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class SecurityRoutingModule { }
import { NgModule } from '@angular/core';
import { DirtyGuard, XdfGalleryModule } from '@xdf/gallery';
import { SecurityRoutingModule } from './security-routing.module';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { TranslateModule } from '@ngx-translate/core';
import { XdfSettingsModule } from '@xdf/settings';
@NgModule({
declarations: [
],
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
TranslateModule,
XdfGalleryModule,
XdfSettingsModule,
SecurityRoutingModule
],
entryComponents:[
],
providers: [
{ provide: DirtyGuard, useClass: DirtyGuard }
]
})
export class SecurityModule { }
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthGuard } from '@xdf/security';
import { DirtyGuard, TemplateResolver, CrudGridComponent, EditableDataTableTemplateResolver, CrudDetailComponent, FormViewComponent, ListResolver, RecordResolver } from '@xdf/gallery';
import { ResourceAuthGuard } from '@xdf/security';
import { ApplicationFormComponent, ValposFormComponent } from '@xdf/settings';
import { TabsLayoutComponent, TabsTemplateResolver } from '@xdf/layouts';
const routes: Routes = [
{
path: "system-settings", component: TabsLayoutComponent,
resolve: { template: TabsTemplateResolver },
data: {
templateName: "system-settings",
},
children: [
{ path: 'information', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver },
data: {
option: 'information',
program: 'system_settings_information',
breadcrumb: 'breadcrumb.settings.information'
}
},
{ path: 'information/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { ecord: ListResolver },
data: {
withoutGrid: true,
option: 'information',
program: 'system_settings_information',
breadcrumb: 'breadcrumb.settings.information'
}
},
{ path: 'password', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver },
data: {
option: 'password',
program: 'system_settings_password',
breadcrumb: 'breadcrumb.settings.password'
}
},
{ path: 'password/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver },
data: {
withoutGrid: true,
option: 'password',
program: 'system_settings_password',
breadcrumb: 'breadcrumb.settings.password'
}
},
{ path: 'userpolicy', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver },
data: {
option: 'userpolicy',
program: 'system_settings_userpolicy',
breadcrumb: 'breadcrumb.settings.userpolicy'
}
},
{ path: 'userpolicy/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver },
data: {
withoutGrid: true,
option: 'userpolicy',
program: 'system_settings_userpolicy',
breadcrumb: 'breadcrumb.settings.userpolicy'
}
}
]
},
{
path: 'application', component: CrudGridComponent, canActivate: [AuthGuard, ResourceAuthGuard],
resolve: { template: TemplateResolver },
data: {
program: 'application',
breadcrumb: 'breadcrumb.application'
}
},
{
path: 'application/detail/:mode', component: ApplicationFormComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: RecordResolver },
data: {
program: 'application',
breadcrumb: 'breadcrumb.application.detail'
}
},
{
path: 'valpos', component: CrudGridComponent, canActivate: [AuthGuard, ResourceAuthGuard],
resolve: { template: TemplateResolver },
data: {
program: 'valpos',
breadcrumb: 'breadcrumb.valpos'
}
},
{
path: 'valpos/detail/:mode', component: ValposFormComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: RecordResolver, editableTableTemplate: EditableDataTableTemplateResolver },
data: {
program: 'valpos',
breadcrumb: 'breadcrumb.valpos.detail',
editableTableTemplate: 'valpos-detail'
}
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class SettingsRoutingModule { }
import { NgModule } from '@angular/core';
import { DirtyGuard, XdfGalleryModule, EditableDataTableTemplateResolver } from '@xdf/gallery';
import { SettingsRoutingModule } from './settings-routing.module';
import { TranslateModule } from '@ngx-translate/core';
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { MatFormFieldModule, MatSelectModule, MatTooltipModule, MatButtonModule } from '@angular/material';
import { XdfSettingsModule } from '@xdf/settings';
import { XdfLayoutsModule } from '@xdf/layouts';
@NgModule({
declarations: [
],
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
TranslateModule,
SettingsRoutingModule,
MatFormFieldModule,
MatSelectModule,
MatTooltipModule,
XdfGalleryModule,
XdfSettingsModule,
XdfLayoutsModule,
MatButtonModule
],
entryComponents: [
],
providers: [
{ provide: DirtyGuard, useClass: DirtyGuard },
EditableDataTableTemplateResolver
]
})
export class SettingsModule { }
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { HomeComponent } from './home.component';
describe('HomeComponent', () => {
let component: HomeComponent;
let fixture: ComponentFixture<HomeComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ HomeComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(HomeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'byte-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
[
{
"view":"(UTC-11:00) Midway, Niue, Pago Pago",
"gmt":"-11:00"
},
{
"view":"(UTC-10:00) Honolulu, Tahiti",
"gmt":"-10:00"
},
{
"view":"(UTC-9:30) Marquesas",
"gmt":"-9:30"
},
{
"view":"(UTC-9:00) Juneau, Nome, Gambier",
"gmt":"-9:00"
},
{
"view":"(UTC-8:00) Dawson, Los Angeles, Tijuana, Vancouver",
"gmt":"-8:00"
},
{
"view":"(UTC-7:00) Boise, Phoenix, Edmonton, Inuvik",
"gmt":"-7:00"
},
{
"view":"(UTC-6:00) Belize, Chicago, Costa Rica, El Salvador, Guatemala, Managua, Mexico City",
"gmt":"-6:00"
},
{
"view":"(UTC-5:00) Bogota, Cancun, Detroit, Lima, New York, Panama, Toronto",
"gmt":"-5:00"
},
{
"view":"(UTC-4:00) Aruba, Barbados, Caracas, Guyana, La Paz, Manaus, Santiago, Puerto Rico",
"gmt":"-4:00"
},
{
"view":"(UTC-3:30) St Johns",
"gmt":"-3:30"
},
{
"view":"(UTC-3:00) Buenos Aires, Bahia, Cayenne, Montevideo",
"gmt":"-3:00"
},
{
"view":"(UTC-2:00) Noronha, South Georgia",
"gmt":"-2:00"
},
{
"view":"(UTC-1:00) Scoresbysund, Azores, Cape Verde",
"gmt":"-1:00"
},
{
"view":"(UTC) Hora universal coordinada",
"gmt":"0:00"
},
{
"view":"(UTC+1:00) Algiers, Madrid, Berlin, Bruselas, Lagos, Túnez, Niamey, Amsterdam",
"gmt":"+1:00"
},
{
"view":"(UTC+2:00) Cairo, Harare, Tripoli, Gaza, Atenas",
"gmt":"+2:00"
},
{
"view":"(UTC+3:00) Qatar, Moscú, Simferopol ",
"gmt":"+3:00"
},
{
"view":"(UTC+3:30) Tehran",
"gmt":"+3:30"
},
{
"view":"(UTC+4:00) Baku, Dubai",
"gmt":"+4:00"
},
{
"view":"(UTC+4:30) Kabul ",
"gmt":"+4:30"
},
{
"view":"(UTC+5:00) Mawson, Aqtobe, Karachi, Maldivas",
"gmt":"+5:00"
},
{
"view":"(UTC+5:30) Colombo, Kolkata ",
"gmt":"+5:30"
},
{
"view":"(UTC+5:45) Kathmandu",
"gmt":"+5:45"
},
{
"view":"(UTC+6:00) Bishkek, Novosibirsk, Qyzylorda",
"gmt":"+6:00"
},
{
"view":"(UTC+7:00) Bangkok, Indonesia, Barnaul ",
"gmt":"+7:00"
},
{
"view":"(UTC+8:00) Macau, Shanghai, Singapore",
"gmt":"+8:00"
},
{
"view":"(UTC+8:30) Pyongyang",
"gmt":"+8:30"
},
{
"view":"(UTC+8:45) Eucla",
"gmt":"+8:45"
},
{
"view":"(UTC+9:00) Chita, Jayapura, Tokyo, Palau",
"gmt":"+9:00"
},
{
"view":"(UTC+9:30) Darwin, Adelaide",
"gmt":"+9:30"
},
{
"view":"(UTC+10:00) Vladivostok, Brisbane, Hobart",
"gmt":"+10:00"
},
{
"view":"(UTC+10:30) Lord Howe",
"gmt":"+10:30"
},
{
"view":"(UTC+11:00) Magadan, Bougainville, Guadalcanal",
"gmt":"+11:00"
},
{
"view":"(UTC+12:00) Kamchatka, Auckland, Majuro",
"gmt":"+12:00"
},
{
"view":"(UTC+12:45) Chatham",
"gmt":"+12:45"
},
{
"view":"(UTC+13:00) Apia, Enderbury, Tongatapu ",
"gmt":"+13:00"
},
{
"view":"(UTC+14:00) Kiritimati ",
"gmt":"+14:00"
}
]
\ No newline at end of file
[
{
"id": 30,
"name": "security",
"label": "menu.security",
"icon": "<i class=\"fa fa-address-book\"></i>",
"fullPath": "/security",
"singlePath": "security",
"isProgram": false,
"children": [
{
"id": 32,
"name": "user",
"label": "menu.security.user",
"icon": null,
"fullPath": "/security/user",
"singlePath": "user",
"isProgram": true,
"children": []
},
{
"id": 32,
"name": "user_role",
"label": "menu.security.user.role",
"icon": null,
"fullPath": "/security/user-role",
"singlePath": "user-role",
"isProgram": true,
"children": []
}
]
},
{
"id": 37,
"name": "piloto",
"label": "menu.piloto",
"icon": "<i class=\"fa fa-cog\"></i>",
"fullPath": "/piloto",
"singlePath": "piloto",
"isProgram": false,
"children": [
{
"id": 33,
"name": "entidades",
"label": "entidades.piloto",
"icon": null,
"fullPath": "/piloto/entidades",
"singlePath": "entidades",
"isProgram": true,
"children": []
},
{
"id": 34,
"name": "estados",
"label": "estados.piloto",
"icon": null,
"fullPath": "/piloto/estados",
"singlePath": "estados",
"isProgram": true,
"children": []
},
{
"id": 35,
"name": "motivos",
"label": "motivos.piloto",
"icon": null,
"fullPath": "/piloto/motivos",
"singlePath": "motivos",
"isProgram": true,
"children": []
},
{
"id": 36,
"name": "categoria_motivo",
"label": "categoria.motivo.piloto",
"icon": null,
"fullPath": "/piloto/categoria-motivo",
"singlePath": "categoria-motivo",
"isProgram": true,
"children": []
}
]
}
]
[
{ "user": "./assets/definitions/security-definitions/user.json" },
{ "user_role": "./assets/definitions/security-definitions/user-role.json" },
{ "system_settings_information": "./assets/definitions/setting-definitions/system-settings-information.json" },
{ "system_settings_password": "./assets/definitions/setting-definitions/system-settings-password.json" },
{ "system_settings_userpolicy": "./assets/definitions/setting-definitions/system-settings-userpolicy.json" },
{ "application": "./assets/definitions/setting-definitions/application.json" },
{ "valpos": "./assets/definitions/setting-definitions/valpos.json"}
]
\ No newline at end of file
{
"label": {
"type": "text",
"required": true
},
"value": {
"type": "text",
"required": true
}
}
\ No newline at end of file
{
"name": "user_role",
"title": "user.role.title",
"fieldToShowInActon": "identifier",
"icon": "<span class=\"material-icons\">supervisor_account</span>",
"service": "./service/user-role",
"recordId": "id",
"showFormIn": "standard",
"definitionReport": "user-role-report-1",
"attributes": [
{
"name": "id",
"type": "number",
"formOptions": {
"options": {
"hideInNew": true,
"readonly": true,
"styleClass": "col-xs-3 col-sm-6 col-md-3"
},
"validators": [
"required"
],
"controlType": "number"
}
},
{
"name": "identifier",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-md-6",
"showLength": true,
"maxLength": 80
},
"validators": [
"required"
]
}
},
{
"name": "description",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-md-6",
"showLength": true,
"maxLength": 120
},
"validators": [
"required"
]
}
}
],
"grid": [
{
"sortColumnDefault": "id",
"sortColumnDirection": "desc",
"pagingSize": 5,
"expandRow": false,
"columns": [
{
"name": "id",
"sortable": true,
"style": {"width": "100px"},
"optional": false,
"filter": true
},
{
"name": "identifier",
"sortable": true,
"style": {"width": "180px"},
"filter": true
},
{
"name": "description",
"sortable": true,
"style": {"width": "180px"},
"filter": true
}
]
}
]
}
\ No newline at end of file
{
"name": "user",
"title": "user.title",
"fieldToShowInActon": "username",
"titleDesc": "user.title.desc",
"icon": "<i class=\"fa fa-user fa-1_5x\"></i>",
"service": "./service/user",
"recordId": "id",
"showFormIn": "standard",
"definitionReport": "user-report-1",
"attributes": [
{
"name": "id",
"type": "number",
"formOptions": {
"options": {
"readonly": true,
"hideInNew": true,
"styleClass": "col-xs-3 col-sm-6 col-md-6"
},
"validators": [
"required"
],
"controlType": "number"
}
},
{
"name": "username",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-3 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 60
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "password",
"type": "string",
"formOptions": {
"controlType": "password",
"options": {
"styleClass": "col-md-6",
"showLength": true,
"maxLength": 80,
"showStrength": false
},
"validators": [
"required"
]
}
},
{
"name": "defaultRole",
"type": "string",
"formOptions": {
"options": {
"sourceService": "./service/user-role",
"sourceValue": "id",
"sourceLabel": "identifier",
"showSuggest": true,
"styleClass": "col-md-6"
},
"validators": [
"required"
],
"controlType": "select"
}
},
{
"name": "roleList",
"type": "string",
"formOptions": {
"options": {
"sourceService": "./service/user-role",
"sourceValue": "id",
"sourceLabel": "identifier",
"styleClass": "col-md-6",
"multiple": true
},
"validators": [
"required"
],
"controlType": "select"
}
},
{
"name": "firstName",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-3 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 80
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "secondName",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-3 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 80
},
"validators": [],
"controlType": "text"
}
},
{
"name": "firstSurname",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-3 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 80
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "secondSurname",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-3 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 80
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "sex",
"type": "string",
"formOptions": {
"values": {
"M": "label.sex.m",
"F": "label.sex.f"
},
"selected": "F",
"options": {
"showInline": true
},
"validators": [],
"controlType": "radio"
}
},
{
"name": "salutationPrefer",
"type": "string",
"formOptions": {
"values": {
"01": "Mr",
"02": "Miss"
},
"options": {
"styleClass": "col-md-3"
},
"validators": [
"required"
],
"controlType": "select"
}
},
{
"name": "birthday",
"type": "date",
"formOptions": {
"controlType": "datepicker",
"validators": [
"required"
],
"options": {
"styleClass": "col-md-6"
}
}
},
{
"name": "phoneNumber",
"type": "string",
"formOptions": {
"options": {
"showSuggest": false,
"maxLength": 20,
"styleClass": "col-md-3"
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "businessEmail",
"type": "string",
"formOptions": {
"options": {
"rightIcon": "mail",
"maxLength": 200,
"styleClass": "col-xl-6"
},
"validators": [
"required",
"email"
],
"controlType": "text"
}
},
{
"name": "status",
"type": "valpos",
"formOptions": {
"values": {
"LO": "user.status.locked",
"AC": "user.status.active",
"IN": "user.status.inactive",
"XP": "user.status.password.expired",
"CR": "user.status.created",
"DE": "user.status.deleted"
},
"controlType": "badge",
"options": {
"hideInNew": true,
"styleClass": "col-md-6",
"styles": {
"LO": "label label-warning",
"AC": "label label-primary",
"IN": "label label-danger",
"XP": "label label-warning",
"CR": "label label-warning",
"DE": "label label-danger"
}
}
}
}
],
"groups": [
{
"name": "user_info",
"title": "user_group_user_info",
"description": "country_group_info_description",
"controls": [
[
"username", "status"
],
[
"defaultRole",
"roleList"
]
]
},
{
"name": "personal_info",
"title": "user_group_personal_info",
"description": "country_group_info_description",
"controls": [
[
"firstName",
"secondName",
"firstSurname",
"secondSurname",
"gender",
"sex",
"birthday"
]
]
},
{
"name": "contact_info",
"title": "user_group_contact_info",
"description": "country_group_info_description",
"controls": [
[
"salutationPrefer", "phoneNumber",
"businessEmail"
]
]
}
],
"grid": [
{
"sortColumnDefault": "username",
"sortColumnDirection": "desc",
"pagingSize": 5,
"columns": [
{
"name": "username",
"sortable": true,
"style": {
"width": "100px"
},
"optional": false,
"filter": true
},
{
"name": "firstName",
"sortable": true,
"style": {
"width": "100px"
},
"optional": false,
"filter": true
},
{
"name": "firstSurname",
"sortable": true,
"style": {
"width": "100px"
},
"optional": false,
"filter": true
},
{
"name": "businessEmail",
"sortable": true,
"style": {
"width": "100px"
},
"optional": false,
"filter": true
},
{
"name": "status",
"sortable": true,
"style": {
"width": "50px"
},
"optional": false,
"filter": true
}
]
}
]
}
\ No newline at end of file
{
"name": "application",
"title": "application.title",
"fieldToShowInActon": "identifier",
"icon": "<i class=\"fa fa-window-restore\"></i>",
"service": "./service/application",
"recordId": "id",
"showFormIn": "standard",
"definitionReport": "application-report-1",
"attributes": [
{
"name": "id",
"type": "number",
"formOptions": {
"options": {
"readonly": true,
"hideInNew": true,
"styleClass": "col-xs-12 col-sm-6 col-md-6"
},
"validators": [
"required"
],
"controlType": "number"
}
},
{
"name": "identifier",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-12 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 60
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "description",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-12 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 200
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "redirectURL",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-12 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 2000
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "clientId",
"type": "string",
"formOptions": {
"options": {
"readonly": true,
"styleClass": "col-xs-12 col-sm-6 col-md-6"
},
"controlType": "text"
}
},
{
"name": "clientSecret",
"type": "string",
"formOptions": {
"options": {
"readonly": true,
"styleClass": "col-xs-12 col-sm-6 col-md-6"
},
"controlType": "text"
}
},
{
"name": "status",
"type": "valpos",
"formOptions": {
"values": {
"A": "user.status.active",
"I": "user.status.inactive"
},
"controlType": "badge",
"options": {
"hideInNew": true,
"styleClass": "col-md-6",
"styles": {
"A": "label label-primary",
"I": "label label-danger"
}
}
}
}
],
"groups": [
{
"name": "info",
"title": "",
"description": "country_group_info_description",
"controls": [
[
"identifier", "status"
],
"description",
"returnPath",
"clientId",
"clientSecret"
]
}
],
"grid": [
{
"sortColumnDefault": "identifier",
"sortColumnDirection": "desc",
"pagingSize": 5,
"expandRow": false,
"columns": [
{
"name": "identifier",
"sortable": true,
"style": {
"width": "100px"
},
"optional": false,
"filter": true
},
{
"name": "description",
"sortable": true,
"style": {
"width": "180px"
},
"filter": true
},
{
"name": "redirectURL",
"sortable": true,
"style": {
"width": "180px"
},
"filter": true
},
{
"name": "status",
"sortable": true,
"style": {
"width": "50px"
},
"optional": false,
"filter": true
}
]
}
]
}
\ No newline at end of file
{
"name": "system_settings_information",
"title": "system_settings_information_title",
"titleDesc": "system_settings_information_title_desc",
"icon": "<i class=\"fa fa-info-circle fa-2x\"></i>",
"service": "./service/system-settings/information",
"attributes": [
{
"name": "name",
"type": "string",
"formOptions": {
"options": {
"max-length": "200",
"styleClass": "col-12"
},
"validators": [
"required"
]
}
},
{
"name": "email",
"type": "string",
"formOptions": {
"options": {
"rightIcon": "mail",
"rightIconLabel": "",
"showLength": true,
"maxLength": 200,
"styleClass": "col-12"
},
"validators": [
"required",
"email"
]
}
},
{
"name": "domain",
"type": "string",
"formOptions": {
"options": {
"rightIcon": "http",
"rightIconLabel": "",
"showLength": true,
"maxLength": 200,
"styleClass": "col-12"
},
"validators": [
"required",
"url"
]
}
},
{
"name": "image",
"type": "file-upload",
"formOptions": {
"options": {
"text": "btn.upload.image",
"param": "file",
"target": "./service/file/upload",
"height": "250px",
"styleClass": "col-6"
},
"controlType": "file-upload"
}
}
],
"groups": [
{
"name": "info",
"title": "",
"description": "settings_information_group_info_description",
"controls": [
"name",
"email",
"domain",
["image"]
]
}
]
}
\ No newline at end of file
{
"name": "system_settings_password",
"title": "system_settings_password_title",
"titleDesc": "system_settings_password_title_desc",
"icon": "<i class=\"fa fa-key fa-2x\"></i>",
"service": "./service/system-settings/password",
"attributes": [
{
"name": "includeUppercase",
"type": "boolean",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"controlType": "checkbox"
}
},
{
"name": "includeNumber",
"type": "boolean",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"controlType": "checkbox"
}
},
{
"name": "notIncludeUserId",
"type": "boolean",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"controlType": "checkbox"
}
},
{
"name": "notIncludeReverseUserId",
"type": "boolean",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"controlType": "checkbox"
}
},
{
"name": "passwordMinLength",
"type": "boolean",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"controlType": "checkbox"
}
}
]
}
\ No newline at end of file
{
"name": "system_settings_userpolicy",
"title": "system_settings_userpolicy_title",
"titleDesc": "system_settings_userpolicy_title_desc",
"icon": "<i class=\"fa fa-user-secret fa-2x\"></i>",
"service": "./service/system-settings/userpolicy",
"attributes": [
{
"name": "maxFailLogin",
"type": "number",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"validators": [
"required",
{
"name": "min",
"value": 0
},
{
"name": "max",
"value": 99
}
],
"controlType": "number"
}
},
{
"name": "historyValidation",
"type": "number",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"validators": [
"required",
{
"name": "min",
"value": 0
},
{
"name": "max",
"value": 99
}
],
"controlType": "number"
}
},
{
"name": "userInactivity",
"type": "number",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"validators": [
"required",
{
"name": "min",
"value": 0
},
{
"name": "max",
"value": 99
}
],
"controlType": "number"
}
},
{
"name": "passwordExpiration",
"type": "number",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"validators": [
"required",
{
"name": "min",
"value": 0
},
{
"name": "max",
"value": 99
}
],
"controlType": "number"
}
},
{
"name": "automaticUnlock",
"type": "number",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"validators": [
"required",
{
"name": "min",
"value": 0
},
{
"name": "max",
"value": 99
}
],
"controlType": "number"
}
},
{
"name": "manageAccountByEmail",
"type": "boolean",
"formOptions": {
"options": {
"showSuggest": true,
"styleClass": "col-12"
},
"controlType": "checkbox"
}
}
]
}
\ No newline at end of file
{
"name": "valpos",
"title": "valpos.title",
"fieldToShowInActon": "identifier",
"icon": "<i class=\"glyphicon glyphicon-list\"></i>",
"service": "./service/possible-value",
"recordId": "id",
"showFormIn": "standard",
"definitionReport": "valpos-report-1",
"attributes": [
{
"name": "id",
"type": "number",
"formOptions": {
"options": {
"readonly": true,
"hideInNew": true,
"styleClass": "col-xs-12 col-sm-6 col-md-6"
},
"validators": [
"required"
],
"controlType": "number"
}
},
{
"name": "identifier",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-12 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 20
},
"validators": [
"required"
],
"controlType": "text"
}
},
{
"name": "description",
"type": "string",
"formOptions": {
"options": {
"styleClass": "col-xs-12 col-sm-6 col-md-6",
"showLength": true,
"maxLength": 200
},
"validators": [
"required"
],
"controlType": "text"
}
}
],
"groups": [
{
"name": "info",
"title": "",
"description": "country_group_info_description",
"controls": [
[
"id"
],
"identifier",
"description"
]
}
],
"grid": [
{
"sortColumnDefault": "id",
"sortColumnDirection": "desc",
"pagingSize": 5,
"expandRow": false,
"columns": [
{
"name": "id",
"sortable": true,
"style": {
"width": "100px"
},
"optional": false,
"filter": true
},
{
"name": "identifier",
"sortable": true,
"style": {
"width": "180px"
},
"filter": true
},
{
"name": "description",
"sortable": true,
"style": {
"width": "180px"
},
"filter": true
}
]
}
]
}
\ No newline at end of file
[
{
"name": "system_settings_information",
"label": "tabs.system.settings.information.title",
"description": "tabs.system.settings.information.title.desc",
"path": "/settings/system-settings/information",
"icon": "<i class=\"fa fa-info-circle fa-1_5x\"></i>"
},
{
"name": "system_settings_password",
"label": "tabs.system.settings.password.title",
"description": "tabs.system.settings.password.title.desc",
"path": "/settings/system-settings/password",
"icon": "<i class=\"fa fa-key fa-1_5x\"></i>"
},
{
"name": "system_settings_userpolicy",
"label": "tabs.system.settings.userpolicy.title",
"description": "tabs.system.settings.userpolicy.title.desc",
"path": "/settings/system-settings/userpolicy",
"icon": "<i class=\"fa fa-user-secret fa-1_5x\"></i>"
}
]
\ No newline at end of file
[
"view",
"edit",
"delete",
"new"
]
\ No newline at end of file
{"itemsPerPage":10,"currentPage":0,"totalItems":2,"totalPages":1,"data":[{"id":1,"name":"ENTIDAD1","description":"ENTIDAD 1"},{"id":2,"name":"ENTIDAD2","description":"ENTIDAD 2"}]}
\ No newline at end of file
[
"system_settings",
"valpos",
"user_role",
"user",
"entidades",
"estados",
"motivos",
"categoria_motivo"
]
\ No newline at end of file
[
{"id": 1, "name": "Perú (+51)", "code": "+51"},
{"id": 2, "name": "Chile (+52)", "code": "+52"},
{"id": 3, "name": "México (+53)", "code": "+53"}
]
\ No newline at end of file
[
{
"id": 1,
"username": "agutierrez",
"firstName": "Aaron",
"secondName": "Junior",
"firstLastName": "Gutiérrez",
"secondLastName": "López",
"email": "agutierrez@bytesw.com",
"gender": "M",
"maritalStatus": "S",
"birthday": "2020-03-10",
"phone": "952226613",
"countryCode": 1,
"principalRole": 1,
"assignedRoles": [1, 2],
"status": "A"
},
{
"id": 2,
"username": "mortiz",
"firstName": "Marco",
"secondName": "Antonio",
"firstLastName": "Ortiz",
"secondLastName": "García",
"email": "mortiz@bytesw.com",
"gender": "M",
"maritalStatus": "C",
"birthday": "2020-03-10",
"phone": "952226613",
"countryCode": 1,
"principalRole": 1,
"assignedRoles": [1, 2],
"status": "I"
}
]
\ No newline at end of file
[
{ "id": 1, "identifier": "ADMIN", "description": "Aministración" },
{ "id": 2, "identifier": "XDFUSER", "description": "XdfUser" }
]
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"title.error": "Error",
"title.http.error": "Http Error",
"title.not.http.error": "Error!"
}
\ No newline at end of file
{
"title.error": "Error",
"title.http.error": "Error Http",
"title.not.http.error": "Error!"
}
\ No newline at end of file
{
"home.subtitle": "Welcome to XDF Project",
"home.comments": "It is an application skeleton for a typical web app. You can use it to quickly bootstrap your webapp projects and dev environment."
}
\ No newline at end of file
{
"home.subtitle": "Bienvenido al proyecto XDF",
"home.comments": "Este proyecto presenta una aplicación web típica. Puede usarlo como un marco de referencia para el desarrollo de sus aplicaciones web."
}
\ No newline at end of file
{
"btn.search": "Search for",
"btn.save": "Save",
"btn.back": "Back",
"btn.new": "New",
"btn.edit": "Edit",
"btn.delete": "Delete",
"btn.close": "Close",
"btn.yes": "Yes",
"btn.no": "No",
"btn.cancel": "Cancel",
"btn.next": "Next",
"btn.reset": "Reset",
"btn.audit": "Audit",
"btn.show.more": "Show more",
"btn.upload.image": "Upload image",
"btn.execute": "Execute",
"paginator.item.per.page": "Items per page: ",
"paginator.next.page": "Next Page",
"paginator.previous.page": "Previous Page",
"paginator.range": "of",
"label.range.today": "Today",
"label.range.yesterday": "Yesterday",
"label.range.last.7.days": "Last 7 days",
"label.range.last.30.days": "last 30 days",
"label.range.this.month": "This month",
"label.range.last.month": "Last month",
"label.range.custom": "Custom range",
"label.boolean.true": "Yes",
"label.boolean.false": "No",
"title.grid.actions": "Actions",
"action.grid.edit": "Click to Edit",
"action.grid.delete": "Click to Delete",
"action.grid.columns": "Columns",
"action.grid.filter": "Filters",
"action.grid.filter.button": "Filter",
"action.grid.filter.help": "Help",
"action.grid.filter.clear": "Clear all filters",
"action.grid.export.excel": "Export to xls",
"action.grid.export.pdf": "Export to pdf",
"action.grid.refresh": "Refresh",
"action.message.edit": "Editing: ",
"action.message.view": "Viewing: ",
"audit.grid.update": "<b>{{ user }}</b> actualizó el registro con id: <b>{{ id }}</b>",
"audit.grid.create": "<b>{{ user }}</b> creó el registro con id: <b>{{ id }}</b>",
"audit.dialog.title": "Audit Info",
"message.error.validateAge": "The age must be over 17 years and less that 100",
"message.error.email": "The email does not comply with the format",
"message.error.required": "The \"{{ label }}\" field is required",
"message.error.min.length": "The \"{{ label }}\" field supports at least \"{{value}}\" characters",
"message.error.max.length": "The \"{{ label }}\" field supports at maximum \"{{value}}\" characters",
"message.error.min": "Value must be greater equal that to \"{{ min }}\"",
"message.error.max": "Value must be less equal that to \"{{ value }}\"",
"message.error.pattern": "The value does not meet the regular expression - \"{{ value }}\"",
"message.error.duplicity.name": "The value entered already exists",
"message.error.matDatepickerParse": "The value input is not valid",
"message.error.resource.authorization": "Don't have access to the program",
"message.error.matDatepickerMin": "The date must be greater than {{ min }}",
"message.error.array.required": "You must select at least one item",
"title.dirty.confirmation": "Confirm",
"title.delete.confirmation": "Delete",
"title.information": "Information",
"message.update.succesful": "Registration updated successfully",
"message.create.succesful": "The record was created successfully",
"message.dirty.confirmation": "You have unsaved changes. Are you sure you want to leave?",
"message.delete.confirmation": "Are you sure you want to delete?",
"title.error.conflict": "Conflict between versions",
"message.error.conflict": "During the registry edition, another user modified the value.",
"label.actual.value": "Current value",
"message.error.unauthorized": "Does not have permissions for this option",
"wizard.title.done": "Confirmation",
"security.message.error.title": "Security Error!",
"security.message.error.parameter": "Route requires 'parameter name'",
"security.message.error.parameter.not.found": "Not Found 'program' Parameter",
"settings.message.error.title": "Settings Error!",
"inner.content.notfound.error": "Have not configured internal content for the rows",
"datatype.filter.error": "The field '{{field}}' does not allow the type of data entered",
"label.autocomplete.search": "Search.."
}
\ No newline at end of file
{
"btn.search": "Buscar",
"btn.save": "Guardar",
"btn.back": "Regresar",
"btn.new": "Nuevo",
"btn.edit": "Editar",
"btn.delete": "Eliminar",
"btn.close": "Cerrar",
"btn.yes": "Si",
"btn.no": "No",
"btn.cancel": "Cancelar",
"btn.next": "Siguiente",
"btn.reset": "Reiniciar",
"btn.audit": "Auditoría",
"btn.show.more": "Ver más",
"btn.upload.image": "Subir imagen",
"btn.execute": "Ejecutar",
"paginator.item.per.page": "Resultados por página: ",
"paginator.next.page": "Siguiente Página",
"paginator.previous.page": "Anterior Página",
"paginator.range": "de",
"label.range.today": "Hoy",
"label.range.yesterday": "Ayer",
"label.range.last.7.days": "Últimos 7 días",
"label.range.last.30.days": "Últimos 30 días",
"label.range.this.month": "Mes actual",
"label.range.last.month": "Mes anterior",
"label.range.custom": "Personalizado",
"label.boolean.true": "Si",
"label.boolean.false": "No",
"title.grid.actions": "Acciones",
"action.grid.edit": "Editar",
"action.grid.delete": "Eliminar",
"action.grid.columns": "Columnas",
"action.grid.filter": "Filtros",
"action.grid.filter.button": "Filtrar",
"action.grid.filter.help": "Ayuda",
"action.grid.filter.clear": "Eliminar todos los filtros",
"action.grid.export.excel": "Exportar a xls",
"action.grid.export.pdf": "Exportar a pdf",
"action.grid.refresh": "Actualizar",
"action.message.edit": "Editando el registro: ",
"action.message.view": "Visualizando el registro: ",
"audit.grid.update": "<b>{{ user }}</b> actualizó el registro con id: <b>{{ id }}</b>",
"audit.grid.create": "<b>{{ user }}</b> creó el registro con id: <b>{{ id }}</b>",
"audit.dialog.title": "Información de Auditoría",
"message.error.validateAge": "La edad debe ser mayor de 17 años y menor de 100",
"message.error.email": "El email no cumple con el formato",
"message.error.required": "El campo \"{{ label }}\" es requerido",
"message.error.min.length": "El campo \"{{ label }}\" admite como mínimo \"{{ value }}\" caracteres",
"message.error.max.length": "El campo \"{{ label }}\" admite como máximo \"{{ value }}\" caracteres",
"message.error.min": "El valor debe ser mayor o igual a \"{{ min }}\"",
"message.error.max": "El valor debe ser menor o igual a \"{{ max }}\"",
"message.error.pattern": "El valor no cumple con la expresión regular - \"{{ requiredPattern }}\"",
"message.error.duplicity.name": "El valor ingresado ya existe",
"message.error.matDatepickerParse": "El valor ingresado no es válido",
"message.error.resource.authorization": "No tiene acceso al programa",
"message.error.matDatepickerMin": "La fecha debe ser mayor a {{ min }}",
"message.error.array.required": "Debe seleccionar al menos un elemento",
"title.dirty.confirmation": "Confirmar",
"title.delete.confirmation": "Eliminar",
"title.error": "Error",
"title.information": "Información",
"message.update.succesful": "El registro se actualizó correctamente",
"message.create.succesful": "El registro se creó correctamente",
"message.dirty.confirmation": "El formulario tiene cambios no guardados. ¿Desea abandonarlo?",
"message.delete.confirmation": "¿Está seguro que desea eliminar el registro?",
"title.error.conflict": "Conflicto entre versiones",
"message.error.conflict": "Durante la edición del registo, otro usuario a modificado el valor",
"label.actual.value": "Valor actual",
"message.error.unauthorized": "No se tiene permiso para esta opción",
"wizard.title.done": "Confirmación",
"security.message.error.title": "Error de seguridad!",
"security.message.error.parameter": "Ruta requiere el parámetro '{{parameter}}'",
"security.message.error.parameter.not.found": "Parámetro '{{parameter}}' no encontrado",
"settings.message.error.title": "Error de configuración!",
"inner.content.notfound.error": "No ha configurado un contenido interno para las filas",
"datatype.filter.error": "El campo '{{field}}' no permite el tipo de dato ingresado",
"label.autocomplete.search": "Buscar.."
}
\ No newline at end of file
{
"language": "Language",
"en": "English",
"es": "Spanish",
"since": "{{now}}",
"back.to.top": "Back to Top",
"logout": "Logout",
"notfound.title": "We are sorry, Page not found!",
"notfound.subtitle": "The page you are looking for might have been removed had its name changed or is temporarily unavailable.",
"notfound.gohome": "Back To Homepage",
"title.chat": "Chat",
"title.application.options": "System Preferences",
"application.options.details": "This option allows users to customize their experience with the application. The settings will be maintained on this device and with this browser",
"application.options.exit": "Exit",
"title.roles.options": "Roles",
"roles.options.select.one": "Select the role you want to use"
}
\ No newline at end of file
{
"language": "Idioma",
"en": "Inglés",
"es": "Español",
"since": "{{now}}",
"back.to.top": "Volver arriba",
"logout": "Salir",
"notfound.title": "Lo sentimos, ¡página no encontrada!",
"notfound.subtitle": "La página que ud busca ha sido removida, ha cambiado de nombre o temporalmente no está disponible.",
"notfound.gohome": "Ir a Inicio",
"title.chat": "Chat",
"title.application.options": "Ajuste de sistema",
"application.options.details": "Está opción permite a los usuarios personalizar su experiencia con el aplicativo. Los ajustes se mantendrán en este dispositivo y con este navegador",
"application.options.exit": "Salir",
"title.roles.options": "Roles",
"roles.options.select.one": "Seleccione el rol que desea utilizar"
}
\ No newline at end of file
{
"menu.system.settings": "System settings",
"menu.cruds": "Configuration",
"menu.cruds.customer": "Customers",
"menu.cruds.country": "Countries",
"menu.security": "Security",
"menu.security.user": "User",
"menu.security.user.role": "User role",
"menu.settings": "System",
"menu.settings.application": "Applications",
"menu.settings.system": "System settings",
"menu.settings.valpos": "Possible values",
"menu.business.config": "Settings",
"menu.ticket.manager": "Ticket manager"
}
\ No newline at end of file
{
"menu.system.settings": "Sistema",
"menu.cruds": "Configuración",
"menu.cruds.customer": "Clientes",
"menu.cruds.country": "Ciudades",
"menu.security": "Seguridad",
"menu.security.user": "Usuario",
"menu.security.user.role": "Rol de usuario",
"menu.settings": "Sistema",
"menu.settings.application": "Aplicaciones",
"menu.settings.system": "Configuración de sistema",
"menu.settings.valpos": "Valores posibles",
"menu.business.config": "Configuración",
"menu.ticket.manager": "Gestor de tickets",
"menu.piloto": "Configuración piloto",
"entidades.piloto": "Entidades",
"estados.piloto": "Estados",
"motivos.piloto": "Motivos",
"categoria.motivo.piloto": "Categorías de motivos"
}
\ No newline at end of file
{
"login.title": "Login Page",
"breadcrumb.user.role": "User role",
"breadcrumb.user.role.detail": "Detail",
"breadcrumb.user": "User",
"breadcrumb.user.detail": "Detail",
"control.new": "New",
"control.view": "View",
"control.edit": "Edit",
"control.delete": "Delete",
"control.export": "Export",
"control.audit": "Audit",
"control.execute": "Execute",
"label.username": "Username",
"label.password": "Password",
"label.sex.m": "Male",
"label.sex.f": "Female",
"user.role.title": "User role",
"user.role.title.desc": "User Role Manager",
"user_role_group_info_header": "General Information",
"user_role_id_header": "ID",
"user_role_identifier_header": "Identifier",
"user_role_description_header": "Description",
"user_role_form_id_placeholder": "ID",
"user_role_form_identifier_placeholder": "Identifier",
"user_role_form_description_placeholder": "Description",
"user.title": "Users",
"user.title.desc": "User Role Manager",
"user_group_info_header": "General Information",
"user_username_header": "Username",
"user_firstName_header": "First name",
"user_firstSurname_header": "Last name",
"user_businessEmail_header": "Email",
"user_status_header": "Status",
"user_group_user_info": "User Data",
"user_group_personal_info": "Personal information",
"user_group_contact_info": "Contact information",
"user_form_username_placeholder": "Username",
"user_form_defaultRole_label": "Main role",
"user_form_defaultRole_suggest": "This role will be used as the default role in the application.",
"user_form_roleList_label": "Assigned roles",
"user_form_firstName_placeholder": "First name",
"user_form_secondName_placeholder": "Second name",
"user_form_firstSurname_placeholder": "Last name",
"user_form_secondSurname_placeholder": "Mother's last name",
"user_form_salutationPrefer_label": "Salutation",
"user_form_sex_label": "Gender",
"user_form_sex_placeholder": "Gender",
"user_form_birthday_placeholder": "Birthday",
"user_form_countryCode_label": "Country code",
"user_form_countryCode_placeholder": "Country code",
"user_form_phoneNumber_placeholder": "Phone",
"user_form_businessEmail_placeholder": "Email",
"user.status.locked": "Locked",
"user.status.active": "Active",
"user.status.inactive": "Inactive",
"user.status.password.expired": "password expired",
"user.status.created": "Created",
"user.status.deleted": "Deleted"
}
\ No newline at end of file
{
"login.title": "Identificación de Usuario",
"breadcrumb.user.role": "Rol de usuario",
"breadcrumb.user.role.detail": "Detalle",
"breadcrumb.user": "Usuario",
"breadcrumb.user.detail": "Detalle",
"control.new": "Creación",
"control.view": "Visualizar",
"control.edit": "Edición",
"control.delete": "Eliminar",
"control.export": "Exportar",
"control.audit": "Ver auditoria",
"control.execute": "Ejecutar",
"label.username": "Usuario",
"label.password": "Contraseña",
"label.sex.m": "Masculino",
"label.sex.f": "Femenino",
"user.role.title": "Rol de usuario",
"user.role.title.desc": "Mantenimiento de roles de usuario",
"user_role_group_info_header": "Información General",
"user_role_id_header": "Id.",
"user_role_identifier_header": "Identificador",
"user_role_description_header": "Descripción",
"user_role_form_id_placeholder": "Id.",
"user_role_form_identifier_placeholder": "Identificador",
"user_role_form_description_placeholder": "Descripción",
"user.title": "Usuarios",
"user.title.desc": "Mantenimiento de usuarios",
"user_group_info_header": "Información General",
"user_username_header": "Código",
"user_firstName_header": "Primer nombre",
"user_firstSurname_header": "Apellido paterno",
"user_businessEmail_header": "Email",
"user_status_header": "Estado",
"user_group_user_info": "Datos de usuario",
"user_group_personal_info": "Datos personales",
"user_group_contact_info": "Datos de contacto",
"user_form_username_placeholder": "Código de usuario",
"user_form_defaultRole_label": "Rol principal",
"user_form_defaultRole_suggest": "Este rol será utilizado como rol por defecto en la aplicación.",
"user_form_roleList_label": "Roles asignados",
"user_form_firstName_placeholder": "Primer nombre",
"user_form_secondName_placeholder": "Segundo nombre",
"user_form_firstSurname_placeholder": "Apellido paterno",
"user_form_secondSurname_placeholder": "Apellido Materno",
"user_form_salutationPrefer_label": "Saludo",
"user_form_sex_label": "Género",
"user_form_sex_placeholder": "Género",
"user_form_birthday_placeholder": "Fecha de nacimiento",
"user_form_countryCode_label": "Código de país",
"user_form_countryCode_placeholder": "Código de país",
"user_form_phoneNumber_placeholder": "Teléfono",
"user_form_businessEmail_placeholder": "Correo electrónico",
"user.status.locked": "Bloqueado",
"user.status.active": "Activo",
"user.status.inactive": "Inactivo",
"user.status.password.expired": "Contraseña expirada",
"user.status.created": "Creado",
"user.status.deleted": "Eliminado"
}
\ No newline at end of file
{
"breadcrumb.application": "Application",
"breadcrumb.application.detail": "Application information",
"breadcrumb.valpos": "Possible value",
"breadcrumb.valpos.detail": "Possible value information",
"breadcrumb.settings.userpolicy": "User policy",
"breadcrumb.settings.information": "General information",
"breadcrumb.settings.password": "Password settings",
"tabs.system.settings.information.title": "Information",
"tabs.system.settings.information.title.desc": "Organization information",
"tabs.system.settings.password.title": "Password settings",
"tabs.system.settings.password.title.desc": "Security policies for the password",
"tabs.system.settings.userpolicy.title": "User policies",
"tabs.system.settings.userpolicy.title.desc": "Security policies for the application",
"security.message.error.title": "Security Error!",
"security.message.error.parameter": "Route requires 'parameter name'",
"security.message.error.parameter.not.found": "Not Found 'program' Parameter",
"settings.message.error.title": "Settings Error!",
"settings.general.header": "General",
"settings.general.information.short": "Information",
"system_settings_information_title": "General Information",
"system_settings_information_title_desc": "Enter company-related information, which can be used in notifications.",
"system_settings_information_form_name_placeholder": "Name",
"system_settings_information_form_name_suggest": "Application name.",
"system_settings_information_form_email_placeholder": "Email",
"system_settings_information_form_email_suggest": "Company email.",
"system_settings_information_form_domain_placeholder": "Application domain",
"system_settings_information_form_domain_suggest": "Application domain",
"system_settings_information_form_image_label": "Application logo",
"settings.security.header": "Security",
"settings.security.password.short": "Password",
"system_settings_password_title": "Passwrod settings",
"system_settings_password_title_desc": "Customize the security policies for the password.",
"system_settings_password_form_includeUppercase_label": "Include capital letters",
"system_settings_password_form_includeUppercase_suggest": "Requires the password to contain at least one capital letter.",
"system_settings_password_form_includeNumber_label": "Incluir números",
"system_settings_password_form_includeNumber_suggest": "Requires the password to contain at least one number.",
"system_settings_password_form_notIncludeUserId_label": "Do not include the user code",
"system_settings_password_form_notIncludeUserId_suggest": "The password must not include the user code.",
"system_settings_password_form_notIncludeReverseUserId_label": "Do not include the user code backwards",
"system_settings_password_form_notIncludeReverseUserId_suggest": "Validate that the password does not include the user's code in reverse.",
"system_settings_password_form_passwordMinLength_label": "Minimum length",
"system_settings_password_form_passwordMinLength_suggest": "Minimum length for the password.",
"settings.security.user.policy.short": "User policies",
"system_settings_userpolicy_title": "User policies",
"system_settings_userpolicy_title_desc": "Customize the following security policies for users using the Byte security platform.",
"system_settings_userpolicy_form_maxFailLogin_placeholder": "Maximum failed attempts",
"system_settings_userpolicy_form_maxFailLogin_suggest": "Specify the number of failed login attempts, before blocking the user.",
"system_settings_userpolicy_form_historyValidation_placeholder": "Validate password history",
"system_settings_userpolicy_form_historyValidation_suggest": "Specify the number of last passwords that cannot be repeated.",
"system_settings_userpolicy_form_userInactivity_placeholder": "Block users for inactivity",
"system_settings_userpolicy_form_userInactivity_suggest": "Specify the number of days that must pass to block the user for inactivity.",
"system_settings_userpolicy_form_passwordExpiration_placeholder": "Password expiration",
"system_settings_userpolicy_form_passwordExpiration_suggest": "Specify the number of days for passwords associated with user accounts to expire.",
"system_settings_userpolicy_form_automaticUnlock_placeholder": "Automatic user unlocking",
"system_settings_userpolicy_form_automaticUnlock_suggest": "Specify the number of minutes it takes for an account to be automatically unlocked.",
"system_settings_userpolicy_form_manageAccountByEmail_label": "Manage user accounts via email",
"system_settings_userpolicy_form_manageAccountByEmail_suggest": "Enable the option if you want to use email sending for user account management",
"settings.notification.header": "Communication",
"settings.notification.mail.short": "Email server",
"system_settings_mail_title": "Email Server Configuration",
"system_settings_mail_title_desc": "Enter the information related to the email service that the application will use",
"notification.mail.from.address": "Outbound account (from)",
"notification.mail.from.address.suggest": "Email address that the application will use to send emails.",
"notification.mail.prefix": "Subject prefix",
"notification.mail.prefix.suggest": "Subject prefix.",
"notification.mail.server": "SMTP server",
"notification.mail.server.suggest": "Name or IP address of the SMTP server.",
"notification.mail.smtp.port": "SMTP port",
"notification.mail.smtp.port.suggest": "SMTP service port.",
"notification.mail.username": "User",
"notification.mail.username.suggest": "Mail account user.",
"notification.mail.password": "Password",
"notification.mail.password.suggest": "Email account password.",
"notification.mail.use.auth": "Use authentication",
"notification.mail.use.tls": "Use TLS",
"notification.mail.test.title": "Mail configuration validation",
"notification.mail.test.suggest": "This section allows you to validate the mail settings before being saved.",
"notification.mail.test.recipients": "Test recipients",
"notification.mail.test.recipients.suggest": "Enter one or more destination emails and press the \"Send email\" button.",
"notification.mail.test.view.logs": "Show logs",
"application_btn_new_secret": "Generate new secret",
"application_btn_show_credentials": "View credentials",
"application.title": "Application maintenance",
"application_group_general_information":"General information",
"application_credentials_title":"Credentials",
"application_identifier_header": "Identifier",
"application_description_header": "Description",
"application_redirectURL_header": "Return url",
"application_status_header": "Status",
"application_form_identifier_placeholder": "Identifier",
"application_form_description_placeholder": "Descripción",
"application_form_redirectURL_placeholder": "Return url",
"application_form_client_id_placeholder": "ClienteId",
"application_form_client_secret_placeholder": "ClientSecret",
"application_form_access_token_validity_placeholder": "AccessTokenValidity",
"application_form_refresh_token_validity_placeholder": "RefreshTokenValidity",
"application_generated_secret_title": "Change secret",
"application_generated_secret_message": "Are you sure you want to generate a new secret?",
"application_new_secret_success": "Another secret was successfully generated",
"application.status.active": "Active",
"application.status.inactive": "Inactive",
"menu.settings.valpos": "Valores posibles",
"valpos.title": "Mantenimiento de valores posibles",
"valpos_id_header": "Id",
"valpos_identifier_header": "Identifier",
"valpos_description_header": "Description",
"valpos_group_values": "Possible values Assigned",
"valpos_group_general_information": "General Information",
"valpos_form_id_placeholder": "Id",
"valpos_form_identifier_placeholder": "Identifier",
"valpos_form_description_placeholder": "Description",
"valpos.label.title": "Label",
"valpos.value.title": "Value"
}
\ No newline at end of file
{
"breadcrumb.application": "Aplicación",
"breadcrumb.application.detail": "Información de aplicación",
"breadcrumb.valpos": "Valor posible",
"breadcrumb.valpos.detail": "Información de valor posible",
"breadcrumb.settings.userpolicy": "Políticas de usuario",
"breadcrumb.settings.information": "Información general",
"breadcrumb.settings.password": "Políticas de contraseña",
"tabs.system.settings.information.title": "Información general",
"tabs.system.settings.information.title.desc": "Datos de la organización.",
"tabs.system.settings.password.title": "Políticas de contraseña",
"tabs.system.settings.password.title.desc": "Reglas que debe cumplir al definir las contraseñas.",
"tabs.system.settings.userpolicy.title": "Políticas de usuario",
"tabs.system.settings.userpolicy.title.desc": "Reglas de seguridad para la aplicación.",
"security.message.error.title": "Error de seguridad!",
"security.message.error.parameter": "Ruta requiere el parámetro '{{parameter}}'",
"security.message.error.parameter.not.found": "Parámetro '{{parameter}}' no encontrado",
"settings.message.error.title": "Error de configuración!",
"settings.general.header": "General",
"settings.general.information.short": "Información",
"system_settings_information_title": "Información General",
"system_settings_information_title_desc": "Ingrese información relacionada a la compañía, que podrá ser usada en las notificaciones.",
"system_settings_information_form_name_placeholder": "Nombre",
"system_settings_information_form_name_suggest": "Nombre de la aplicación.",
"system_settings_information_form_email_placeholder": "Correo electrónico",
"system_settings_information_form_email_suggest": "Correo electrónico de la empresa.",
"system_settings_information_form_domain_placeholder": "Dominio de la aplicación",
"system_settings_information_form_domain_suggest": "Dominio de la aplicación",
"system_settings_information_form_image_label": "Logo de la aplicación",
"settings.security.header": "Seguridad",
"settings.security.password.short": "Contraseña",
"system_settings_password_title": "Configuración de Contraseña",
"system_settings_password_title_desc": "Personalice las políticas de seguridad para la contraseña.",
"system_settings_password_form_includeUppercase_label": "Incluir mayúsculas",
"system_settings_password_form_includeUppercase_suggest": "Requiere que la contraseña contenga al menos una letra mayúscula.",
"system_settings_password_form_includeNumber_label": "Incluir números",
"system_settings_password_form_includeNumber_suggest": "Requiere que la contraseña contenga al menos un número.",
"system_settings_password_form_notIncludeUserId_label": "No incluir el código del usuario",
"system_settings_password_form_notIncludeUserId_suggest": "La contraseña no debe incluir el código de usuario.",
"system_settings_password_form_notIncludeReverseUserId_label": "No incluir el código de usuario al revés",
"system_settings_password_form_notIncludeReverseUserId_suggest": "Validar que la contraseña no incluya el código del usuario al revés.",
"system_settings_password_form_passwordMinLength_label": "Longitud mínima",
"system_settings_password_form_passwordMinLength_suggest": "Longitud mínima para la contraseña.",
"settings.security.user.policy.short": "Políticas de usuario",
"system_settings_userpolicy_title": "Políticas de usuario",
"system_settings_userpolicy_title_desc": "Personalice las siguientes políticas de seguridad para los usuarios que utilicen la plataforma de seguridad Byte.",
"system_settings_userpolicy_form_maxFailLogin_placeholder": "Máximo de intentos fallidos",
"system_settings_userpolicy_form_maxFailLogin_suggest": "Especifique el número de intentos fallidos de ingreso al sistema, antes de bloquear el usuario.",
"system_settings_userpolicy_form_historyValidation_placeholder": "Validar historial de contraseñas",
"system_settings_userpolicy_form_historyValidation_suggest": "Especifique el número de últimas contraseña que no puede repetirse.",
"system_settings_userpolicy_form_userInactivity_placeholder": "Bloquear usuarios por inactividad",
"system_settings_userpolicy_form_userInactivity_suggest": "Especifique el número de días que deben pasar para bloquear al usuario por inactividad.",
"system_settings_userpolicy_form_passwordExpiration_placeholder": "Vencimiento de contraseñas",
"system_settings_userpolicy_form_passwordExpiration_suggest": "Especifique el número de días para que las contraseñas asociadas a las cuentas de usuario expiren.",
"system_settings_userpolicy_form_automaticUnlock_placeholder": "Desbloqueo automático de usuarios",
"system_settings_userpolicy_form_automaticUnlock_suggest": "Especifique el número de minutos que tienen que pasar para que una cuenta se desbloquee de manera automática.",
"system_settings_userpolicy_form_manageAccountByEmail_label": "Administrar cuentas de usuario vía email",
"system_settings_userpolicy_form_manageAccountByEmail_suggest": "Habilite la opción si desea utilizar el envío de correos electrónicos para la administración de cuentas de usuario",
"settings.notification.header": "Comunicación",
"settings.notification.mail.short": "Servidor email",
"system_settings_mail_title": "Configuración de Servidor de Email",
"system_settings_mail_title.desc": "Ingrese la información relacionada al servicio de email que usará la aplicación",
"notification.mail.from.address": "Cuenta de salida (from)",
"notification.mail.from.address.suggest": "Dirección de correo que usará la aplicación para el envio de correos.",
"notification.mail.prefix": "Prefijo de asunto",
"notification.mail.prefix.suggest": "Prefijo de asunto.",
"notification.mail.server": "Servidor SMTP",
"notification.mail.server.suggest": "Nombre o dirección IP del servidor SMTP.",
"notification.mail.smtp.port": "Puerto SMTP",
"notification.mail.smtp.port.suggest": "Puerto del servicio SMTP.",
"notification.mail.username": "Usuario",
"notification.mail.username.suggest": "Usuario de la cuenta de correo.",
"notification.mail.password": "Contraseña",
"notification.mail.password.suggest": "Contraseña de la cuenta de correo.",
"notification.mail.use.auth": "Usa autenticación",
"notification.mail.use.tls": "Usa TLS",
"notification.mail.test.title": "Validación de configuración de correo",
"notification.mail.test.suggest": "Esta sección permite validar la configuración de correo antes de ser grabada.",
"notification.mail.test.recipients": "Destinatarios de prueba",
"notification.mail.test.recipients.suggest": "Ingrese uno o más email de destino y presione el botón \"Enviar email\".",
"notification.mail.test.view.logs": "Ver logs",
"application_btn_new_secret": "Generar nuevas credenciales",
"application_btn_show_credentials": "Ver credenciales",
"application.title": "Mantenimiento de aplicaciones",
"application_group_general_information":"Información general",
"application_credentials_title":"Credenciales",
"application_identifier_header": "Identificador",
"application_description_header": "Descripción",
"application_redirectURL_header": "Url de retorno",
"application_status_header": "Estado",
"application_form_identifier_placeholder": "Identificador",
"application_form_description_placeholder": "Descripción",
"application_form_redirectURL_placeholder": "Url de retorno",
"application_form_client_id_placeholder": "ClienteId",
"application_form_client_secret_placeholder": "ClientSecret",
"application_form_access_token_validity_placeholder": "AccessTokenValidity",
"application_form_refresh_token_validity_placeholder": "RefreshTokenValidity",
"application_generated_secret_title": "Cambiar secret",
"application_generated_secret_message": "¿Está seguro que quiere generar un nuevo secret?",
"application_new_secret_success": "Se generó correctamente otro secret",
"application.status.active": "Activo",
"application.status.inactive": "Inactivo",
"menu.settings.valpos": "Valores posibles",
"valpos.title": "Mantenimiento de valores posibles",
"valpos_id_header": "Código",
"valpos_identifier_header": "Identificador",
"valpos_description_header": "Descripción",
"valpos_group_values": "Valores posibles Asignados",
"valpos_group_general_information": "Información general",
"valpos_form_id_placeholder": "Código",
"valpos_form_identifier_placeholder": "Identificador",
"valpos_form_description_placeholder": "Descripción",
"valpos.label.title": "Clave",
"valpos.value.title": "Valor"
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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