RED-3765: add license module

This commit is contained in:
Dan Percic 2022-05-06 11:56:43 +03:00
parent 60d27f4dff
commit 4e51e402a7
23 changed files with 168 additions and 148 deletions

View File

@ -7,7 +7,6 @@ import { PendingChangesGuard } from '@guards/can-deactivate.guard';
import { FileAttributesListingScreenComponent } from './screens/file-attributes-listing/file-attributes-listing-screen.component';
import { DefaultColorsScreenComponent } from './screens/default-colors/default-colors-screen.component';
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
import { LicenseInformationScreenComponent } from './screens/license-information/license-information-screen.component';
import { DigitalSignatureScreenComponent } from './screens/digital-signature/digital-signature-screen.component';
import { AuditScreenComponent } from './screens/audit/audit-screen.component';
import { RouterModule, Routes } from '@angular/router';
@ -26,125 +25,127 @@ import { ACTIVE_DOSSIERS_SERVICE } from '../../tokens';
import { BaseEntityScreenComponent } from './base-entity-screen/base-entity-screen.component';
import { PermissionsGuard } from '../../guards/permissions-guard';
const routes: Routes = [
{ path: '', redirectTo: 'dossier-templates', pathMatch: 'full' },
const dossierTemplateIdRoutes = [
{
path: 'dossier-templates',
path: 'info',
canActivate: [CompositeRouteGuard],
component: BaseDossierTemplateScreenComponent,
loadChildren: () => import('./screens/info/dossier-template-info.module').then(m => m.DossierTemplateInfoModule),
},
{
path: 'entities',
children: [
{
path: '',
component: BaseAdminScreenComponent,
component: EntitiesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
loadChildren: () =>
import('./screens/dossier-templates-listing/dossier-templates-listing.module').then(
m => m.DossierTemplatesListingModule,
),
},
{
path: `:${DOSSIER_TEMPLATE_ID}`,
children: [
{
path: 'info',
canActivate: [CompositeRouteGuard],
component: BaseDossierTemplateScreenComponent,
loadChildren: () => import('./screens/info/dossier-template-info.module').then(m => m.DossierTemplateInfoModule),
},
{
path: 'entities',
children: [
{
path: '',
component: EntitiesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: `:${ENTITY_TYPE}`,
component: BaseEntityScreenComponent,
canActivate: [CompositeRouteGuard],
loadChildren: () => import('./screens/entities/entities.module').then(m => m.EntitiesModule),
data: {
routeGuards: [AuthGuard, RedRoleGuard, EntityExistsGuard],
},
},
],
},
{
path: 'rules',
component: BaseDossierTemplateScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
loadChildren: () => import('./screens/rules/rules.module').then(m => m.RulesModule),
},
{
path: 'file-attributes',
component: FileAttributesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: 'watermark',
component: BaseDossierTemplateScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
loadChildren: () => import('./screens/watermark/watermark.module').then(m => m.WatermarkModule),
},
{
path: 'reports',
component: BaseDossierTemplateScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
loadChildren: () => import('./screens/reports/reports.module').then(m => m.ReportsModule),
},
{
path: 'dossier-attributes',
component: DossierAttributesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: 'dossier-states',
component: DossierStatesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: 'default-colors',
component: DefaultColorsScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: 'justifications',
component: BaseDossierTemplateScreenComponent,
canActivate: [CompositeRouteGuard],
loadChildren: () => import('./screens/justifications/justifications.module').then(m => m.JustificationsModule),
},
{ path: '', redirectTo: 'info', pathMatch: 'full' },
],
path: `:${ENTITY_TYPE}`,
component: BaseEntityScreenComponent,
canActivate: [CompositeRouteGuard],
data: { routeGuards: [DossierTemplateExistsGuard] },
loadChildren: () => import('./screens/entities/entities.module').then(m => m.EntitiesModule),
data: {
routeGuards: [AuthGuard, RedRoleGuard, EntityExistsGuard],
},
},
],
},
{
path: 'rules',
component: BaseDossierTemplateScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
loadChildren: () => import('./screens/rules/rules.module').then(m => m.RulesModule),
},
{
path: 'file-attributes',
component: FileAttributesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: 'watermark',
component: BaseDossierTemplateScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
loadChildren: () => import('./screens/watermark/watermark.module').then(m => m.WatermarkModule),
},
{
path: 'reports',
component: BaseDossierTemplateScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
loadChildren: () => import('./screens/reports/reports.module').then(m => m.ReportsModule),
},
{
path: 'dossier-attributes',
component: DossierAttributesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: 'dossier-states',
component: DossierStatesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: 'default-colors',
component: DefaultColorsScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
},
{
path: 'justifications',
component: BaseDossierTemplateScreenComponent,
canActivate: [CompositeRouteGuard],
loadChildren: () => import('./screens/justifications/justifications.module').then(m => m.JustificationsModule),
},
{ path: '', redirectTo: 'info', pathMatch: 'full' },
];
const dossierTemplatesRoutes: Routes = [
{
path: '',
component: BaseAdminScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
},
loadChildren: () =>
import('./screens/dossier-templates-listing/dossier-templates-listing.module').then(m => m.DossierTemplatesListingModule),
},
{
path: `:${DOSSIER_TEMPLATE_ID}`,
children: dossierTemplateIdRoutes,
canActivate: [CompositeRouteGuard],
data: { routeGuards: [DossierTemplateExistsGuard] },
},
];
const routes: Routes = [
{ path: '', redirectTo: 'dossier-templates', pathMatch: 'full' },
{
path: 'dossier-templates',
children: dossierTemplatesRoutes,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, DossierTemplatesGuard],
@ -173,12 +174,13 @@ const routes: Routes = [
},
{
path: 'license-info',
component: LicenseInformationScreenComponent,
component: BaseAdminScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard],
requiredRoles: ['RED_ADMIN'],
},
loadChildren: () => import('./screens/license/license.module').then(m => m.LicenseModule),
},
{
path: 'digital-signature',

View File

@ -7,7 +7,6 @@ import { DefaultColorsScreenComponent } from './screens/default-colors/default-c
import { EntitiesListingScreenComponent } from './screens/entities-listing/entities-listing-screen.component';
import { DigitalSignatureScreenComponent } from './screens/digital-signature/digital-signature-screen.component';
import { FileAttributesListingScreenComponent } from './screens/file-attributes-listing/file-attributes-listing-screen.component';
import { LicenseInformationScreenComponent } from './screens/license-information/license-information-screen.component';
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
import { DossierTemplateBreadcrumbsComponent } from './components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component';
import { ColorPickerModule } from 'ngx-color-picker';
@ -15,8 +14,6 @@ import { AddEditFileAttributeDialogComponent } from './dialogs/add-edit-file-att
import { AddEditDossierTemplateDialogComponent } from './dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component';
import { AddEntityDialogComponent } from './dialogs/add-entity-dialog/add-entity-dialog.component';
import { EditColorDialogComponent } from './dialogs/edit-color-dialog/edit-color-dialog.component';
import { ComboChartComponent, ComboSeriesVerticalComponent } from './components/combo-chart';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import { AdminDialogService } from './services/admin-dialog.service';
import { GeneralConfigScreenComponent } from './screens/general-config/general-config-screen.component';
import { SmtpAuthDialogComponent } from './dialogs/smtp-auth-dialog/smtp-auth-dialog.component';
@ -24,7 +21,6 @@ import { AddEditUserDialogComponent } from './dialogs/add-edit-user-dialog/add-e
import { UsersStatsComponent } from './components/users-stats/users-stats.component';
import { FileAttributesCsvImportDialogComponent } from './dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component';
import { ActiveFieldsListingComponent } from './dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component';
import { AdminSideNavComponent } from './admin-side-nav/admin-side-nav.component';
import { ResetPasswordComponent } from './dialogs/add-edit-user-dialog/reset-password/reset-password.component';
import { UserDetailsComponent } from './dialogs/add-edit-user-dialog/user-details/user-details.component';
import { AddEditDossierAttributeDialogComponent } from './dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component';
@ -48,8 +44,7 @@ import { ConfirmDeleteDossierStateDialogComponent } from './dialogs/confirm-dele
import { TrashTableItemComponent } from './screens/trash/trash-table-item/trash-table-item.component';
import { BaseEntityScreenComponent } from './base-entity-screen/base-entity-screen.component';
import { CloneDossierTemplateDialogComponent } from './dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component';
import { SelectLicenseComponent } from './screens/license-information/select-licence/select-license.component';
import { LicenseChartComponent } from './screens/license-information/license-chart/license-chart.component';
import { AdminSideNavComponent } from './admin-side-nav/admin-side-nav.component';
const dialogs = [
AddEditDossierTemplateDialogComponent,
@ -71,7 +66,6 @@ const screens = [
EntitiesListingScreenComponent,
DigitalSignatureScreenComponent,
FileAttributesListingScreenComponent,
LicenseInformationScreenComponent,
UserListingScreenComponent,
GeneralConfigScreenComponent,
DossierAttributesListingScreenComponent,
@ -80,11 +74,9 @@ const screens = [
const components = [
DossierTemplateBreadcrumbsComponent,
ComboChartComponent,
ComboSeriesVerticalComponent,
UsersStatsComponent,
ActiveFieldsListingComponent,
AdminSideNavComponent,
ActiveFieldsListingComponent,
ResetPasswordComponent,
UserDetailsComponent,
BaseAdminScreenComponent,
@ -104,10 +96,8 @@ const components = [
AddEditDossierStateDialogComponent,
ConfirmDeleteDossierStateDialogComponent,
TrashTableItemComponent,
SelectLicenseComponent,
LicenseChartComponent,
],
providers: [AdminDialogService, AuditService, DigitalSignatureService, RulesService, SmtpConfigService],
imports: [CommonModule, SharedModule, AdminRoutingModule, SharedAdminModule, NgxChartsModule, ColorPickerModule, A11yModule],
imports: [CommonModule, SharedModule, AdminRoutingModule, SharedAdminModule, ColorPickerModule, A11yModule],
})
export class AdminModule {}

View File

@ -1,13 +1,13 @@
import { Component } from '@angular/core';
import { ComboBarScheme, LineChartScheme } from '../constants';
import { ComboBarScheme, LineChartScheme } from '../utils/constants';
import dayjs from 'dayjs';
import { TranslateService } from '@ngx-translate/core';
import { ILicenseReport } from '@red/domain';
import { LicenseService } from '../../../services/licence-report.service';
import { IDateRange } from '../date-range';
import { ILicense } from '../licence';
import { LicenseService } from '../services/license.service';
import { IDateRange } from '../utils/date-range';
import { ILicense } from '../utils/license';
import { switchMap } from 'rxjs/operators';
import { ILineChartSeries } from '../../../components/combo-chart/models';
import { ILineChartSeries } from '../combo-chart/models';
import { ConfigService } from '../../../../../services/config.service';
const monthNames = dayjs.monthsShort();

View File

@ -1,8 +1,4 @@
<section class="settings">
<div class="overlay-shadow"></div>
<redaction-admin-side-nav type="settings"></redaction-admin-side-nav>
<div>
<iqser-page-header
(closeAction)="routerHistoryService.navigateToLastDossiersScreen()"
@ -41,7 +37,7 @@
<div class="row">
<div class="flex align-center" translate="license-info-screen.license-title"></div>
<div>
<redaction-select-license (valueChanges)="licenceChanged($event)"></redaction-select-license>
<redaction-license-select (valueChanges)="licenceChanged($event)"></redaction-license-select>
</div>
</div>

View File

@ -5,18 +5,16 @@ import { ButtonConfig, IconButtonTypes, LoadingService } from '@iqser/common-ui'
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { UserService } from '@services/user.service';
import { RouterHistoryService } from '@services/router-history.service';
import { LicenseService } from '../../services/licence-report.service';
import { LicenseService } from '../services/license.service';
import { ILicenseReport } from '@red/domain';
import dayjs from 'dayjs';
import { ILicense } from './licence';
import { ILicense } from '../utils/license';
@Component({
selector: 'redaction-license-information-screen',
templateUrl: './license-information-screen.component.html',
styleUrls: ['./license-information-screen.component.scss'],
providers: [LicenseService],
templateUrl: './license-screen.component.html',
styleUrls: ['./license-screen.component.scss'],
})
export class LicenseInformationScreenComponent implements OnInit {
export class LicenseScreenComponent implements OnInit {
readonly currentYear = new Date().getFullYear();
readonly currentUser = this._userService.currentUser;
readonly buttonConfigs: readonly ButtonConfig[] = [

View File

@ -1,6 +1,6 @@
import { Component, EventEmitter, Output } from '@angular/core';
import { LicenseService } from '../../../services/licence-report.service';
import { ILicense } from '../licence';
import { LicenseService } from '../services/license.service';
import { ILicense } from '../utils/license';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
const translations = {
@ -9,11 +9,11 @@ const translations = {
} as const;
@Component({
selector: 'redaction-select-license',
templateUrl: './select-license.component.html',
styleUrls: ['./select-license.component.scss'],
selector: 'redaction-license-select',
templateUrl: './license-select.component.html',
styleUrls: ['./license-select.component.scss'],
})
export class SelectLicenseComponent {
export class LicenseSelectComponent {
@Output() readonly valueChanges = new EventEmitter<ILicense>();
value = this.licenseService.getActiveLicense();

View File

@ -0,0 +1,32 @@
import { NgModule } from '@angular/core';
import { LicenseScreenComponent } from './license-screen/license-screen.component';
import { LicenseSelectComponent } from './license-select/license-select.component';
import { LicenseChartComponent } from './license-chart/license-chart.component';
import { LicenseService } from './services/license.service';
import { RouterModule, Routes } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { MatSelectModule } from '@angular/material/select';
import { IqserListingModule } from '@iqser/common-ui';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import { ComboChartComponent, ComboSeriesVerticalComponent } from './combo-chart';
import { FormsModule } from '@angular/forms';
const routes: Routes = [
{
path: '',
component: LicenseScreenComponent,
},
];
@NgModule({
declarations: [
LicenseScreenComponent,
LicenseSelectComponent,
LicenseChartComponent,
ComboChartComponent,
ComboSeriesVerticalComponent,
],
imports: [RouterModule.forChild(routes), TranslateModule, MatSelectModule, FormsModule, NgxChartsModule, IqserListingModule],
providers: [LicenseService],
})
export class LicenseModule {}

View File

@ -2,7 +2,7 @@ import { Injectable, Injector } from '@angular/core';
import { GenericService, QueryParam, RequiredParam, Validate } from '@iqser/common-ui';
import { ILicenseReport, ILicenseReportRequest } from '@red/domain';
import { BehaviorSubject, firstValueFrom } from 'rxjs';
import { ILicense, LICENSE_DATA } from '../screens/license-information/licence';
import { ILicense, LICENSE_DATA } from '../utils/license';
@Injectable()
export class LicenseService extends GenericService<ILicenseReport> {

View File

@ -4,13 +4,15 @@ import { SharedModule } from '@shared/shared.module';
import { DossierTemplateActionsComponent } from './components/dossier-template-actions/dossier-template-actions.component';
import { AddEditEntityComponent } from './components/add-edit-entity/add-edit-entity.component';
import { ColorPickerModule } from 'ngx-color-picker';
import { RouterModule } from '@angular/router';
const components = [DossierTemplateActionsComponent, AddEditEntityComponent];
const modules = [CommonModule, SharedModule];
@NgModule({
declarations: [...components],
exports: [...components],
providers: [],
imports: [CommonModule, SharedModule, ColorPickerModule],
exports: [...components, ...modules],
imports: [...modules, RouterModule, ColorPickerModule],
})
export class SharedAdminModule {}