Compare commits
2 Commits
v6.2.0
...
ca281b70c9
Author | SHA1 | Date | |
---|---|---|---|
ca281b70c9 | |||
e056ece223 |
@ -96,9 +96,8 @@ jobs:
|
||||
- name: Release Typedoc
|
||||
run: |
|
||||
cd client
|
||||
npm -g install cloudron-surfer
|
||||
npm run typedoc
|
||||
surfer put --token ${{ secrets.TSDOC_TOKEN }} --server tsdoc.datacontroller.io ../tsdoc /
|
||||
npm run compodoc:build
|
||||
surfer put --token ${{ secrets.TSDOC_TOKEN }} --server tsdoc.datacontroller.io documentation/* /
|
||||
|
||||
- name: Upload assets to release
|
||||
run: |
|
||||
|
38
CHANGELOG.md
38
CHANGELOG.md
@ -1,41 +1,3 @@
|
||||
# [6.2.0](https://git.datacontroller.io/dc/dc/compare/v6.1.0...v6.2.0) (2023-08-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* re-enabling full REPLACE uploads ([08e39c4](https://git.datacontroller.io/dc/dc/commit/08e39c4fca570406f9aad3d907cb04596421d074))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* support for European numeric formats ([e48e47b](https://git.datacontroller.io/dc/dc/commit/e48e47bc635452b59e107b235e597c26e748875e))
|
||||
|
||||
# [6.2.0](https://git.datacontroller.io/dc/dc/compare/v6.1.0...v6.2.0) (2023-08-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* re-enabling full REPLACE uploads ([08e39c4](https://git.datacontroller.io/dc/dc/commit/08e39c4fca570406f9aad3d907cb04596421d074))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* support for European numeric formats ([e48e47b](https://git.datacontroller.io/dc/dc/commit/e48e47bc635452b59e107b235e597c26e748875e))
|
||||
|
||||
# [6.1.0](https://git.datacontroller.io/dc/dc/compare/v6.0.0...v6.1.0) (2023-07-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* missing mf_existds dependency in bitemporal_dataloader ([5ce1701](https://git.datacontroller.io/dc/dc/commit/5ce1701657136f2cf792441412230513ff52e7e8))
|
||||
* reducing audit data volumes. Closes [#4](https://git.datacontroller.io/dc/dc/issues/4) ([54fe701](https://git.datacontroller.io/dc/dc/commit/54fe7013b1a25be228eeb2aba3553f6219952de6))
|
||||
* release script, excel upload duplicate primary keys, cypress fix ([2f79487](https://git.datacontroller.io/dc/dc/commit/2f79487aeaf6268b027a8fa52fcdaae2b449de3d))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* full format deletion, closes [#2](https://git.datacontroller.io/dc/dc/issues/2) ([8dc40bd](https://git.datacontroller.io/dc/dc/commit/8dc40bdd4e3a7ad5c1e6582b4130f24bc445eb77))
|
||||
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
||||
|
4161
client/package-lock.json
generated
4161
client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "dc-client",
|
||||
"description": "dc-client",
|
||||
"name": "data_controller-client",
|
||||
"description": "DataController Client",
|
||||
"angular-cli": {},
|
||||
"scripts": {
|
||||
"start": "node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng serve",
|
||||
@ -29,7 +29,9 @@
|
||||
"cy:run": "cypress run",
|
||||
"audit:prod": "npm audit --omit=dev",
|
||||
"sasdocs": "sasjs doc && ./sasjs/utils/deploydocs.sh",
|
||||
"typedoc": "typedoc --options typedoc.json && cd ../tsdoc"
|
||||
"compodoc:build": "compodoc -p tsconfig.doc.json --name 'Data Controller Client'",
|
||||
"compodoc:build-and-serve": "compodoc -p tsconfig.doc.json -s --name 'Data Controller Client'",
|
||||
"compodoc:serve": "compodoc -s --name 'Data Controller Client'"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
@ -69,6 +71,7 @@
|
||||
"ngx-clipboard": "^16.0.0",
|
||||
"ngx-json-viewer": "file:libraries/ngx-json-viewer-3.2.1.tgz",
|
||||
"nodejs": "0.0.0",
|
||||
"numbro": "^2.1.1",
|
||||
"os-browserify": "0.3.0",
|
||||
"rxjs": "^7.8.0",
|
||||
"save-svg-as-png": "^1.4.17",
|
||||
@ -87,6 +90,8 @@
|
||||
"@angular-eslint/template-parser": "16.0.3",
|
||||
"@angular/cli": "^16.1.0",
|
||||
"@angular/compiler-cli": "^16.1.2",
|
||||
"@babel/plugin-proposal-private-methods": "^7.18.6",
|
||||
"@compodoc/compodoc": "^1.1.21",
|
||||
"@cypress/webpack-preprocessor": "^5.17.1",
|
||||
"@types/core-js": "^2.5.5",
|
||||
"@types/crypto-js": "^4.0.1",
|
||||
@ -119,9 +124,10 @@
|
||||
"rimraf": "3.0.2",
|
||||
"ts-loader": "^9.2.8",
|
||||
"ts-node": "^3.3.0",
|
||||
"typedoc": "^0.23.24",
|
||||
"typedoc": "^0.24.8",
|
||||
"typedoc-plugin-external-module-name": "^4.0.6",
|
||||
"typescript": "~4.9.4",
|
||||
"wait-on": "^6.0.1",
|
||||
"watch": "^1.0.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,40 +0,0 @@
|
||||
<div class="content-area">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex flex-column justify-content-center">
|
||||
<h3 class="text-center">
|
||||
You succesfully edited table
|
||||
<span class="color-blue font-weight-700">{{ libds }}</span>
|
||||
</h3>
|
||||
<p class="text-center">
|
||||
<b>Please choose from the following actions</b>
|
||||
</p>
|
||||
<div class="row d-flex justify-content-center mt-20">
|
||||
<button
|
||||
class="btn btn-sm btn-outline text-center"
|
||||
(click)="submittedTableScreen()"
|
||||
>
|
||||
Go to submitted table screen
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-sm btn-outline text-center"
|
||||
(click)="viewerTableScreen()"
|
||||
>
|
||||
Go to base table screen
|
||||
</button>
|
||||
<button
|
||||
id="approvalBtn"
|
||||
class="btn btn-sm btn-success-outline text-center"
|
||||
(click)="approveTableScreen()"
|
||||
>
|
||||
Go to approvals screen
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-sm btn-info-outline text-center"
|
||||
(click)="goBack()"
|
||||
>
|
||||
Go back to editor
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,50 +0,0 @@
|
||||
import { AfterViewInit, Component, OnInit } from '@angular/core'
|
||||
import { ActivatedRoute, Router } from '@angular/router'
|
||||
|
||||
@Component({
|
||||
selector: 'app-actions',
|
||||
templateUrl: './actions.component.html',
|
||||
styleUrls: ['./actions.component.scss'],
|
||||
host: {
|
||||
class: 'content-container'
|
||||
}
|
||||
})
|
||||
export class ActionsComponent implements OnInit, AfterViewInit {
|
||||
public dsid: any
|
||||
public libds: string | undefined
|
||||
|
||||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private router: Router
|
||||
) {}
|
||||
|
||||
public submittedTableScreen() {
|
||||
this.router.navigateByUrl('/stage/' + this.dsid)
|
||||
}
|
||||
|
||||
public approveTableScreen() {
|
||||
this.router.navigateByUrl('/approve/approveDet/' + this.dsid)
|
||||
}
|
||||
|
||||
public viewerTableScreen() {
|
||||
this.router.navigateByUrl('/view/data/' + this.libds)
|
||||
}
|
||||
|
||||
public goBack() {
|
||||
this.router.navigateByUrl('/editor/' + this.libds)
|
||||
}
|
||||
|
||||
async ngOnInit() {
|
||||
this.dsid = this.route.snapshot.params['dsid']
|
||||
this.libds = this.route.snapshot.params['libds']
|
||||
}
|
||||
|
||||
ngAfterViewInit() {
|
||||
setTimeout(() => {
|
||||
let approvalBtn: any = window.document.getElementById('approvalBtn')
|
||||
if (!!approvalBtn) {
|
||||
approvalBtn.focus()
|
||||
}
|
||||
}, 700)
|
||||
}
|
||||
}
|
@ -169,7 +169,7 @@
|
||||
<clr-dropdown-menu *clrIfOpen clrPosition="bottom-left">
|
||||
<a [routerLink]="['/view']" clrDropdownItem>VIEW</a>
|
||||
<a [routerLink]="['/home']" clrDropdownItem>EDIT</a>
|
||||
<a [routerLink]="['/submitted']" clrDropdownItem>REVIEW</a>
|
||||
<a [routerLink]="['/review/submitted']" clrDropdownItem>REVIEW</a>
|
||||
</clr-dropdown-menu>
|
||||
</clr-dropdown>
|
||||
</div>
|
||||
@ -192,7 +192,7 @@
|
||||
>EDIT</a
|
||||
>
|
||||
<a
|
||||
[routerLink]="['/submitted']"
|
||||
[routerLink]="['/review/submitted']"
|
||||
[class.active]="
|
||||
router.url.includes('submitted') ||
|
||||
router.url.includes('approve') ||
|
||||
@ -224,7 +224,7 @@
|
||||
<ul class="nav">
|
||||
<li class="nav-item">
|
||||
<a
|
||||
[routerLink]="['/submitted']"
|
||||
[routerLink]="['/review/submitted']"
|
||||
class="nav-link nav-text"
|
||||
routerLinkActive="active"
|
||||
>SUBMIT</a
|
||||
@ -232,15 +232,16 @@
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a
|
||||
[routerLink]="['/approve']"
|
||||
[routerLink]="['/review/approve']"
|
||||
class="nav-link nav-text"
|
||||
[class.active]="router.url.includes('approve')"
|
||||
routerLinkActive="active"
|
||||
>APPROVE</a
|
||||
>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a
|
||||
[routerLink]="['/history']"
|
||||
[routerLink]="['/review/history']"
|
||||
class="nav-link nav-text"
|
||||
routerLinkActive="active"
|
||||
>HISTORY</a
|
||||
|
2
client/src/app/app.d.ts
vendored
2
client/src/app/app.d.ts
vendored
@ -1,5 +1,5 @@
|
||||
declare module 'save-svg-as-png'
|
||||
declare module 'numbro/dist/languages.min'
|
||||
|
||||
declare interface Navigator {
|
||||
msSaveBlob: (blob: any, defaultName?: string) => boolean
|
||||
}
|
||||
|
@ -12,29 +12,23 @@ import { NotFoundComponent } from './not-found/not-found.component'
|
||||
import { SasStoreService } from './services/sas-store.service'
|
||||
import { SharedModule } from './shared/shared.module'
|
||||
// import { EditorComponent } from './editor/editor.component'
|
||||
import { ActionsComponent } from './actions/actions.component'
|
||||
import { AppSharedModule } from './app-shared.module'
|
||||
import { ApproveDetailsComponent } from './approve-details/approve-details.component'
|
||||
import { ApproveComponent } from './approve/approve.component'
|
||||
import { DeployComponent } from './deploy/deploy.component'
|
||||
import { AutomaticComponent } from './deploy/sections/automatic/automatic.component'
|
||||
import { ManualComponent } from './deploy/sections/manual/manual.component'
|
||||
import { SasjsConfiguratorComponent } from './deploy/sections/sasjs-configurator/sasjs-configurator.component'
|
||||
import { GroupComponent } from './group/group.component'
|
||||
import { HistoryComponent } from './history/history.component'
|
||||
import { LicensingComponent } from './licensing/licensing.component'
|
||||
import { LineageComponent } from './lineage/lineage.component'
|
||||
import { MetadataComponent } from './metadata/metadata.component'
|
||||
import { PipesModule } from './pipes/pipes.module'
|
||||
import { RoleComponent } from './role/role.component'
|
||||
import { ApproveRouteComponent } from './routes/approve-route/approve-route.component'
|
||||
import { HistoryRouteComponent } from './routes/history-route/history-route.component'
|
||||
import { ReviewRouteComponent } from './routes/review-route/review-route.component'
|
||||
import { LicensingGuard } from './routes/licensing.guard'
|
||||
import { UsernavRouteComponent } from './routes/usernav-route/usernav-route.component'
|
||||
import { AppService } from './services/app.service'
|
||||
import { InfoModalComponent } from './shared/abort-modal/info-modal.component'
|
||||
import { RequestsModalComponent } from './shared/requests-modal/requests-modal.component'
|
||||
import { SubmitterComponent } from './submitter/submitter.component'
|
||||
import { UserComponent } from './user/user.component'
|
||||
import { HomeModule } from './home/home.module'
|
||||
import { SystemComponent } from './system/system.component'
|
||||
@ -46,14 +40,9 @@ import { NgxJsonViewerModule } from 'ngx-json-viewer'
|
||||
declarations: [
|
||||
AppComponent,
|
||||
NotFoundComponent,
|
||||
ApproveComponent,
|
||||
ApproveDetailsComponent,
|
||||
ActionsComponent,
|
||||
HistoryComponent,
|
||||
LineageComponent,
|
||||
SubmitterComponent,
|
||||
ApproveRouteComponent,
|
||||
HistoryRouteComponent,
|
||||
ReviewRouteComponent,
|
||||
ReviewRouteComponent,
|
||||
MetadataComponent,
|
||||
UsernavRouteComponent,
|
||||
UserComponent,
|
||||
@ -84,7 +73,7 @@ import { NgxJsonViewerModule } from 'ngx-json-viewer'
|
||||
DirectivesModule,
|
||||
NgxJsonViewerModule
|
||||
],
|
||||
providers: [AppService, SasStoreService, ApproveComponent, LicensingGuard],
|
||||
providers: [AppService, SasStoreService, LicensingGuard],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
export class AppModule {}
|
||||
|
@ -7,14 +7,9 @@ import { ModuleWithProviders } from '@angular/core'
|
||||
import { Routes, RouterModule } from '@angular/router'
|
||||
|
||||
import { HomeComponent } from './home/home.component'
|
||||
import { ApproveComponent } from './approve/approve.component'
|
||||
import { ApproveDetailsComponent } from './approve-details/approve-details.component'
|
||||
import { ActionsComponent } from './actions/actions.component'
|
||||
import { HistoryComponent } from './history/history.component'
|
||||
import { NotFoundComponent } from './not-found/not-found.component'
|
||||
import { SubmitterComponent } from './submitter/submitter.component'
|
||||
|
||||
import { ApproveRouteComponent } from './routes/approve-route/approve-route.component'
|
||||
import { ReviewRouteComponent } from './routes/review-route/review-route.component'
|
||||
import { DeployComponent } from './deploy/deploy.component'
|
||||
import { LicensingComponent } from './licensing/licensing.component'
|
||||
import { LicensingGuard } from './routes/licensing.guard'
|
||||
@ -22,6 +17,7 @@ import { StageModule } from './stage/stage.module'
|
||||
import { EditorModule } from './editor/editor.module'
|
||||
import { ViewerModule } from './viewer/viewer.module'
|
||||
import { SystemComponent } from './system/system.component'
|
||||
import { ReviewModule } from './review/review.module'
|
||||
|
||||
export const ROUTES: Routes = [
|
||||
{ path: '', redirectTo: 'home', pathMatch: 'full' },
|
||||
@ -30,13 +26,14 @@ export const ROUTES: Routes = [
|
||||
loadChildren: () => ViewerModule
|
||||
},
|
||||
{
|
||||
path: 'approve',
|
||||
component: ApproveRouteComponent,
|
||||
path: 'review',
|
||||
component: ReviewRouteComponent,
|
||||
children: [
|
||||
{ path: '', pathMatch: 'full', redirectTo: 'toapprove' },
|
||||
{ path: 'toapprove', component: ApproveComponent },
|
||||
{ path: 'approveDet/:tableId', component: ApproveDetailsComponent },
|
||||
{ path: 'submitted', component: SubmitterComponent }
|
||||
{
|
||||
path: '',
|
||||
loadChildren: () => ReviewModule
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -55,10 +52,6 @@ export const ROUTES: Routes = [
|
||||
loadChildren: () => StageModule
|
||||
},
|
||||
{ path: 'system', component: SystemComponent },
|
||||
{ path: 'actions/:libds/:dsid', component: ActionsComponent },
|
||||
{ path: 'history', component: HistoryComponent },
|
||||
{ path: 'submitted', component: SubmitterComponent },
|
||||
{ path: 'submitted/:tableId', component: SubmitterComponent },
|
||||
{ path: 'deploy', component: DeployComponent },
|
||||
{ path: 'deploy/manualdeploy', component: DeployComponent },
|
||||
{ path: '**', component: NotFoundComponent }
|
||||
|
@ -385,6 +385,7 @@
|
||||
[class.hidden]="hotTable.hidden"
|
||||
[licenseKey]="hotTable.licenseKey"
|
||||
>
|
||||
<!--[licenseKey]=""-->
|
||||
</hot-table>
|
||||
</div>
|
||||
|
||||
|
@ -63,8 +63,6 @@ import {
|
||||
} from './utils/renderers.utils'
|
||||
import { isStringDecimal, isStringNumber } from './utils/types.utils'
|
||||
import { LicenceService } from '../services/licence.service'
|
||||
import * as numbro from 'numbro'
|
||||
import * as languages from 'numbro/dist/languages.min'
|
||||
|
||||
@Component({
|
||||
selector: 'app-editor',
|
||||
@ -364,10 +362,6 @@ export class EditorComponent implements OnInit, AfterViewInit {
|
||||
private cdf: ChangeDetectorRef,
|
||||
private hotRegisterer: HotTableRegisterer
|
||||
) {
|
||||
const lang = languages[window.navigator.language]
|
||||
if (lang)
|
||||
numbro.default.registerLanguage(languages[window.navigator.language])
|
||||
|
||||
this.hotRegisterer = new HotTableRegisterer()
|
||||
|
||||
this.parseRestrictions()
|
||||
|
@ -1,13 +1,13 @@
|
||||
import { ActivatedRoute } from '@angular/router'
|
||||
import { SasStoreService } from '../services/sas-store.service'
|
||||
import { SasStoreService } from '../../services/sas-store.service'
|
||||
import { Component, AfterViewInit, OnDestroy } from '@angular/core'
|
||||
import { Subscription } from 'rxjs'
|
||||
import { Router } from '@angular/router'
|
||||
import { EventService } from '../services/event.service'
|
||||
import { EventService } from '../../services/event.service'
|
||||
import {
|
||||
AuditorsPostdataSASResponse,
|
||||
Param
|
||||
} from '../models/sas/auditors-postdata.model'
|
||||
} from '../../models/sas/auditors-postdata.model'
|
||||
|
||||
interface ChangesObj {
|
||||
ind: any
|
||||
@ -89,7 +89,7 @@ export class ApproveDetailsComponent implements AfterViewInit, OnDestroy {
|
||||
}
|
||||
|
||||
public goToApprovalsList() {
|
||||
this.route.navigateByUrl('/approve')
|
||||
this.route.navigateByUrl('/review/approve')
|
||||
}
|
||||
|
||||
public getTable(tableId: any) {
|
||||
@ -136,7 +136,7 @@ export class ApproveDetailsComponent implements AfterViewInit, OnDestroy {
|
||||
await this.sasStoreService
|
||||
.rejecting(rejParams, 'BrowserParams', 'approvers/rejection')
|
||||
.then((res: any) => {
|
||||
this.route.navigateByUrl('/history')
|
||||
this.route.navigateByUrl('/review/history')
|
||||
})
|
||||
.catch((err: any) => {
|
||||
this.acceptLoading = false
|
||||
@ -156,7 +156,7 @@ export class ApproveDetailsComponent implements AfterViewInit, OnDestroy {
|
||||
await this.sasStoreService
|
||||
.approveTable(approveParams, 'SASControlTable', 'auditors/postdata')
|
||||
.then((res: any) => {
|
||||
this.route.navigateByUrl('/history')
|
||||
this.route.navigateByUrl('/review/history')
|
||||
})
|
||||
.catch((err: any) => {
|
||||
this.acceptLoading = false
|
||||
@ -164,7 +164,7 @@ export class ApproveDetailsComponent implements AfterViewInit, OnDestroy {
|
||||
}
|
||||
|
||||
public goToSubmitList() {
|
||||
this.route.navigateByUrl('/submitted')
|
||||
this.route.navigateByUrl('/review/submitted')
|
||||
}
|
||||
|
||||
public async callChangesInfo(tableId: any) {
|
@ -1,8 +1,8 @@
|
||||
import { Component, OnInit, ChangeDetectorRef } from '@angular/core'
|
||||
import { SasStoreService } from '../services/sas-store.service'
|
||||
import { SasStoreService } from '../../services/sas-store.service'
|
||||
import { Router } from '@angular/router'
|
||||
import { SasService } from '../services/sas.service'
|
||||
import { EventService } from '../services/event.service'
|
||||
import { SasService } from '../../services/sas.service'
|
||||
import { EventService } from '../../services/event.service'
|
||||
|
||||
interface ApproveData {
|
||||
tableId: string
|
||||
@ -45,7 +45,7 @@ export class ApproveComponent implements OnInit {
|
||||
if (this.approveList !== undefined) {
|
||||
this.tableId = this.approveList[ind].tableId
|
||||
this.route.navigateByUrl(
|
||||
'approve/approveDet/' + this.approveList[ind].tableId
|
||||
'review/approveDet/' + this.approveList[ind].tableId
|
||||
)
|
||||
}
|
||||
}
|
@ -1,11 +1,8 @@
|
||||
import { Component, OnInit } from '@angular/core'
|
||||
|
||||
import { SasStoreService } from '../services/sas-store.service'
|
||||
import { Router } from '@angular/router'
|
||||
import { SasService } from '../services/sas.service'
|
||||
import { EventService } from '../services/event.service'
|
||||
import { SASjsConfig } from '@sasjs/adapter'
|
||||
import { LicenceService } from '../services/licence.service'
|
||||
import { LicenceService, SasStoreService, EventService, SasService } from 'src/app/services'
|
||||
|
||||
@Component({
|
||||
selector: 'app-history',
|
22
client/src/app/review/review-routing.module.ts
Normal file
22
client/src/app/review/review-routing.module.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { CommonModule } from '@angular/common'
|
||||
import { NgModule } from '@angular/core'
|
||||
import { RouterModule, Routes } from '@angular/router'
|
||||
import { ApproveDetailsComponent } from './approve-details/approve-details.component'
|
||||
import { ApproveComponent } from './approve/approve.component'
|
||||
import { SubmitterComponent } from './submitter/submitter.component'
|
||||
import { HistoryComponent } from './history/history.component'
|
||||
|
||||
const ROUTES: Routes = [
|
||||
{ path: 'approve', component: ApproveComponent },
|
||||
{ path: 'approveDet/:tableId', component: ApproveDetailsComponent },
|
||||
{ path: 'submitted', component: SubmitterComponent },
|
||||
{ path: 'submitted/:tableId', component: SubmitterComponent },
|
||||
{ path: 'history', component: HistoryComponent },
|
||||
]
|
||||
|
||||
@NgModule({
|
||||
declarations: [],
|
||||
imports: [CommonModule, RouterModule.forChild(ROUTES)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class ReviewRoutingModule {}
|
31
client/src/app/review/review.module.ts
Normal file
31
client/src/app/review/review.module.ts
Normal file
@ -0,0 +1,31 @@
|
||||
import { CommonModule } from "@angular/common";
|
||||
import { NgModule } from "@angular/core";
|
||||
import { FormsModule } from "@angular/forms";
|
||||
import { ClarityModule } from "@clr/angular";
|
||||
import { HotTableModule } from "@handsontable/angular";
|
||||
import { DirectivesModule } from "../directives/directives.module";
|
||||
import { SharedModule } from "../shared/shared.module";
|
||||
import { ApproveDetailsComponent } from "./approve-details/approve-details.component";
|
||||
import { ApproveComponent } from "./approve/approve.component";
|
||||
import { ReviewRoutingModule } from "./review-routing.module";
|
||||
import { SubmitterComponent } from "./submitter/submitter.component";
|
||||
import { HistoryComponent } from "./history/history.component";
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
ApproveComponent,
|
||||
ApproveDetailsComponent,
|
||||
SubmitterComponent,
|
||||
HistoryComponent
|
||||
],
|
||||
imports: [
|
||||
CommonModule,
|
||||
FormsModule,
|
||||
ReviewRoutingModule,
|
||||
ClarityModule,
|
||||
HotTableModule.forRoot(),
|
||||
DirectivesModule,
|
||||
SharedModule
|
||||
]
|
||||
})
|
||||
export class ReviewModule {}
|
@ -1,9 +1,7 @@
|
||||
import { Component, AfterViewInit, OnInit } from '@angular/core'
|
||||
import { Subscription } from 'rxjs'
|
||||
import { SasStoreService } from '../services/sas-store.service'
|
||||
import { ActivatedRoute, Router } from '@angular/router'
|
||||
import { SasService } from '../services/sas.service'
|
||||
import { EventService } from '../services/event.service'
|
||||
import { SasStoreService, EventService, SasService } from '../../services'
|
||||
|
||||
interface SubmitterData {
|
||||
tableId: string
|
||||
@ -46,7 +44,7 @@ export class SubmitterComponent implements OnInit, AfterViewInit {
|
||||
}
|
||||
|
||||
public goToDetails(table_id: any) {
|
||||
this.router.navigateByUrl('/submitted/' + table_id)
|
||||
this.router.navigateByUrl('/review/submitted/' + table_id)
|
||||
}
|
||||
|
||||
public getDetails(sub: any, index: any) {
|
@ -1,15 +0,0 @@
|
||||
import { Component, OnInit } from '@angular/core'
|
||||
|
||||
@Component({
|
||||
selector: 'app-approve-route',
|
||||
templateUrl: './approve-route.component.html',
|
||||
styleUrls: ['./approve-route.component.scss'],
|
||||
host: {
|
||||
class: 'content-container'
|
||||
}
|
||||
})
|
||||
export class ApproveRouteComponent implements OnInit {
|
||||
constructor() {}
|
||||
|
||||
ngOnInit() {}
|
||||
}
|
@ -1 +0,0 @@
|
||||
<router-outlet></router-outlet>
|
@ -1,12 +0,0 @@
|
||||
import { Component, OnInit } from '@angular/core'
|
||||
|
||||
@Component({
|
||||
selector: 'app-history-route',
|
||||
templateUrl: './history-route.component.html',
|
||||
styleUrls: ['./history-route.component.scss']
|
||||
})
|
||||
export class HistoryRouteComponent implements OnInit {
|
||||
constructor() {}
|
||||
|
||||
ngOnInit() {}
|
||||
}
|
15
client/src/app/routes/review-route/review-route.component.ts
Normal file
15
client/src/app/routes/review-route/review-route.component.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { Component, OnInit } from '@angular/core'
|
||||
|
||||
@Component({
|
||||
selector: 'app-review-route',
|
||||
templateUrl: './review-route.component.html',
|
||||
styleUrls: ['./review-route.component.scss'],
|
||||
host: {
|
||||
class: 'content-container'
|
||||
}
|
||||
})
|
||||
export class ReviewRouteComponent implements OnInit {
|
||||
constructor() {}
|
||||
|
||||
ngOnInit() {}
|
||||
}
|
@ -19,7 +19,6 @@ import { mergeColsRules } from './utils/mergeColsRules'
|
||||
import { parseColType } from './utils/parseColType'
|
||||
import { dqValidate } from './validations/dq-validation'
|
||||
import { specialMissingNumericValidator } from './validations/hot-custom-validators'
|
||||
import { applyNumericFormats } from './utils/applyNumericFormats'
|
||||
|
||||
export class DcValidator {
|
||||
private rules: DcValidation[] = []
|
||||
@ -42,7 +41,6 @@ export class DcValidator {
|
||||
this.hotInstance = hotInstance
|
||||
this.rules = parseColType(sasparams.COLTYPE)
|
||||
this.rules = mergeColsRules(cols, this.rules, $dataFormats)
|
||||
this.rules = applyNumericFormats(this.rules)
|
||||
this.dqrules = dqRules
|
||||
this.dqdata = dqData
|
||||
this.primaryKeys = sasparams.PK.split(' ')
|
||||
|
@ -1,26 +0,0 @@
|
||||
import { DcValidation } from '../models/dc-validation.model'
|
||||
import * as languages from 'numbro/dist/languages.min'
|
||||
/**
|
||||
* Applying the numeric formats based on the browser locale/language
|
||||
* So that correct decimal separators are applied.
|
||||
* For example european format (thousand dot, decimal comma): 1.000,00
|
||||
*
|
||||
* @param rules Cell Validation rules to be updated
|
||||
* Those rules are passed in the `columns` property Of handsontable settings.
|
||||
*/
|
||||
export const applyNumericFormats = (rules: DcValidation[]): DcValidation[] => {
|
||||
const lang = languages[window.navigator.language]
|
||||
|
||||
if (!lang) return rules
|
||||
|
||||
for (let rule of rules) {
|
||||
if (rule.type === 'numeric')
|
||||
rule.numericFormat = {
|
||||
pattern: '0,0',
|
||||
culture: window.navigator.language // use this for EUR (German),
|
||||
// more cultures available on http://numbrojs.com/languages.html
|
||||
}
|
||||
}
|
||||
|
||||
return rules
|
||||
}
|
@ -6,8 +6,7 @@ import { DcValidation } from '../models/dc-validation.model'
|
||||
* Merging old validation params from sasparams with cols params
|
||||
* @param sasparams sasparams coming from SAS
|
||||
* @param cols cols coming from SAS
|
||||
* @param rules Cell Validation rules to be updated
|
||||
* Those rules are passed in the `columns` property Of handsontable settings.
|
||||
* @param rules rules to be updated
|
||||
* @returns
|
||||
*/
|
||||
export const mergeColsRules = (
|
||||
|
@ -55,14 +55,14 @@
|
||||
<a
|
||||
*ngIf="isMainRoute('approve')"
|
||||
clrVerticalNavLink
|
||||
routerLink="/approve/submitted"
|
||||
routerLink="/review/approve/submitted"
|
||||
routerLinkActive="active"
|
||||
>Submitted</a
|
||||
>
|
||||
<a
|
||||
*ngIf="isMainRoute('approve')"
|
||||
clrVerticalNavLink
|
||||
routerLink="/approve/toapprove"
|
||||
routerLink="/review/approve/toapprove"
|
||||
routerLinkActive="active"
|
||||
>To Approve</a
|
||||
>
|
||||
|
@ -47,7 +47,7 @@ export class StageComponent implements OnInit {
|
||||
}
|
||||
|
||||
public approveTableScreen() {
|
||||
this.route.navigateByUrl('/approve/approveDet/' + this.table_id)
|
||||
this.route.navigateByUrl('/review/approveDet/' + this.table_id)
|
||||
}
|
||||
|
||||
public viewerTableScreen() {
|
||||
|
@ -18,4 +18,4 @@ In any case, you must not make any such use of this software as to develop softw
|
||||
UNLESS EXPRESSLY AGREED OTHERWISE, 4GL APPS PROVIDES THIS SOFTWARE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, AND IN NO EVENT AND UNDER NO LEGAL THEORY, SHALL 4GL APPS BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM USE OR INABILITY TO USE THIS SOFTWARE.
|
||||
|
||||
|
||||
`
|
||||
`
|
1
client/tsconfig.doc.json
Normal file
1
client/tsconfig.doc.json
Normal file
@ -0,0 +1 @@
|
||||
{"include":["src/**/*.ts"],"exclude":["src/**/*.spec.ts"]}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"out": "../tsdoc",
|
||||
"tsconfig": "./tsconfig.app.json",
|
||||
"entryPointStrategy": "expand",
|
||||
"entryPoints": [
|
||||
"./src"
|
||||
],
|
||||
"exclude": "**/*+(index|.spec|.e2e).ts",
|
||||
"externalPattern": "**/node_modules/**",
|
||||
"excludeExternals": true,
|
||||
"excludePrivate": true
|
||||
}
|
@ -141,13 +141,6 @@ run;
|
||||
|
||||
%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)
|
||||
%end;
|
||||
%else %do;
|
||||
/* is full replace so treat everything as a mod in diff screen */
|
||||
data work.outds_mod work.outds_add work.outds_del;
|
||||
set work.&staging_ds;
|
||||
output work.outds_mod; /* _add and _del will be empty */
|
||||
run;
|
||||
%end;
|
||||
%end;
|
||||
%else %if &loadtype=UPDATE %then %do;
|
||||
%bitemporal_dataloader(bus_from=,bus_to=
|
||||
|
@ -597,7 +597,6 @@ run;
|
||||
%if &LOADTYPE=REPLACE %then %do;
|
||||
data work.outds_add; run;
|
||||
data work.outds_mod; run;
|
||||
data work.outds_del; run;
|
||||
%end;
|
||||
libname approve "&mpelocapprovals/&TABLE";
|
||||
data; set &libds;stop;run;
|
||||
|
Reference in New Issue
Block a user