Skip to content

Commit

Permalink
Merge pull request #141 from bcgov/document-templates-page
Browse files Browse the repository at this point in the history
Document templates page
  • Loading branch information
mgtennant committed Mar 28, 2024
2 parents f32b305 + ca33ba3 commit b3d7fb3
Show file tree
Hide file tree
Showing 78 changed files with 3,634 additions and 1,976 deletions.
18 changes: 10 additions & 8 deletions backend/db/migrations/V2.0.0__Database_Migration.sql
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,21 @@ ADD CONSTRAINT "FK_76bc71b9b4fbbcdd622bab0ff19" FOREIGN KEY (document_data_id) R
CREATE TABLE public.document_type (
id serial PRIMARY KEY,
name varchar NOT NULL,
created_by character varying,
created_date timestamp NULL DEFAULT now(),
create_userid varchar NOT NULL,
update_userid varchar NOT NULL,
create_timestamp timestamp NOT NULL DEFAULT now(),
update_timestamp timestamp NOT NULL DEFAULT now()
);
INSERT INTO public.document_type (name, create_userid, update_userid)
VALUES ('Land Use Report', 'system', 'system');
VALUES ('Notice of Final Review', 'system', 'system');
VALUES ('Notice of Final Review (Delayed)', 'system', 'system');
VALUES ('Notice of Final Review (No Fees)', 'system', 'system');
VALUES ('Notice of Final Review (Survey Required)', 'system', 'system');
VALUES ('Notice of Final Review (To Obtain Survey)', 'system', 'system');
VALUES ('Grazing Lease', 'system', 'system');
INSERT INTO public.document_type (name, created_by, created_date, create_userid, update_userid)
VALUES ('Land Use Report', 'system', '2024-03-19 00:00:00', 'system', 'system');
VALUES ('Notice of Final Review', 'system', '2024-03-19 00:00:00', 'system', 'system');
VALUES ('Notice of Final Review (Delayed)', 'system', '2024-03-19 00:00:00', 'system', 'system');
VALUES ('Notice of Final Review (No Fees)', 'system', '2024-03-19 00:00:00', 'system', 'system');
VALUES ('Notice of Final Review (Survey Required)', 'system', '2024-03-19 00:00:00', 'system', 'system');
VALUES ('Notice of Final Review (To Obtain Survey)', 'system', '2024-03-19 00:00:00', 'system', 'system');
VALUES ('Grazing Lease', 'system', '2024-03-19 00:00:00', 'system', 'system');

ALTER TABLE public.document_template ADD COLUMN document_type_id int4;
ALTER TABLE public.document_template DROP COLUMN document_type;
Expand Down
97 changes: 15 additions & 82 deletions backend/src/admin/admin.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,8 @@ export class AdminController {
}

@Get('provisions')
getDocumentProvisions(): any {
return this.adminService.getDocumentProvisions();
getProvisions(): any {
return this.adminService.getProvisions();
}

@Get('document-variables')
Expand All @@ -213,88 +213,21 @@ export class AdminController {
return this.adminService.disableProvision(id);
}

@Get('get-group-max')
getGroupMax() {
return this.adminService.getGroupMax();
}

@Post('add-provision')
addProvision(
@Body()
provisionParams: {
type: string;
provision_group: number;
provision_group_text: string;
max: number;
provision: string;
free_text: string;
help_text: string;
category: string;
order_value: number;
variants: number[];
},
@Session() session: { data?: SessionData }
) {
const create_userid = session?.data?.activeAccount.idir_username;
return this.adminService.addProvision(provisionParams, create_userid);
}

@Post('update-provision')
updateProvision(
@Body()
provisionParams: {
id: number;
type: string;
provision_group: number;
provision_group_text: string;
max: number;
provision: string;
free_text: string;
help_text: string;
category: string;
order_value: number;
document_type_ids: number[];
},
@Session() session: { data?: SessionData }
) {
const update_userid = session?.data?.activeAccount.idir_username;
console.log('order_value: ' + provisionParams.order_value);
return this.adminService.updateProvision(provisionParams, update_userid);
}

@Post('add-variable')
addVariable(
@Body()
variableParams: {
variable_name: string;
variable_value: string;
help_text: string;
provision_id: number;
},
@Session() session: { data?: SessionData }
) {
const create_userid = session?.data?.activeAccount.idir_username;
return this.adminService.addVariable(variableParams, create_userid);
}

@Post('update-variable')
updateVariable(
@Body()
variableParams: {
id: number;
variable_name: string;
variable_value: string;
help_text: string;
provision_id: number;
},
@Session() session: { data?: SessionData }
@Post('add-document-type')
addDocumentType(
@Session() session: { data?: SessionData },
@Body() data: { name: string; created_by: string; created_date: string }
) {
const update_userid = session?.data?.activeAccount.idir_username;
return this.adminService.updateVariable({ ...variableParams, update_userid });
const create_userid = session?.data?.activeAccount
? session.data.activeAccount.idir_username
? session.data.activeAccount.idir_username
: ''
: '';
return this.adminService.addDocumentType(data.name, data.created_by, data.created_date, create_userid);
}

@Get('remove-variable/:id')
removeVariable(@Param('id') id: number) {
return this.adminService.removeVariable(id);
@Get('remove-document-type/:id')
removeDocumentType(@Param('id') document_type_id: number) {
return this.adminService.removeDocumentType(document_type_id);
}
}
3 changes: 2 additions & 1 deletion backend/src/admin/admin.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import { AdminController } from './admin.controller';
import { AuthenticationModule } from 'src/authentication/authentication.module';
import { DocumentTemplateModule } from 'src/document_template/document_template.module';
import { ProvisionModule } from 'src/provision/provision.module';
import { DocumentTypeModule } from 'src/document_type/document_type.module';

@Module({
imports: [HttpModule, AuthenticationModule, DocumentTemplateModule, ProvisionModule],
imports: [HttpModule, AuthenticationModule, DocumentTemplateModule, ProvisionModule, DocumentTypeModule],
providers: [AdminGuard, AdminService],
exports: [AdminService],
controllers: [AdminController],
Expand Down
150 changes: 26 additions & 124 deletions backend/src/admin/admin.service.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Injectable } from '@nestjs/common';
import * as dotenv from 'dotenv';
import { HttpService } from '@nestjs/axios';
import { ExportDataObject, SearchResultsItem, UserObject } from 'utils/types';
import { REPORT_TYPES } from 'utils/constants';
import { SearchResultsItem, UserObject } from 'utils/types';
import { DocumentTemplateService } from 'src/document_template/document_template.service';
import { DocumentType } from 'src/document_type/entities/document_type.entity';
import { ProvisionService } from 'src/provision/provision.service';
import { DocumentTypeService } from 'src/document_type/document_type.service';
import { DocumentType } from 'src/document_type/entities/document_type.entity';
const axios = require('axios');
const FormData = require('form-data');

Expand All @@ -18,7 +18,8 @@ export class AdminService {
constructor(
private readonly httpService: HttpService,
private readonly documentTemplateService: DocumentTemplateService,
private readonly provisionService: ProvisionService
private readonly provisionService: ProvisionService,
private readonly documentTypeService: DocumentTypeService
) {
hostname = process.env.backend_url ? process.env.backend_url : `http://localhost`;
// local development backend port is 3001, docker backend port is 3000
Expand Down Expand Up @@ -259,30 +260,6 @@ export class AdminService {
return { message: 'error' };
}

// async getTemplates(document_type_id: number) {
// const data = await this.documentTemplateService.findAll(document_type_id);
// let documents: {
// version: number;
// file_name: string;
// updated_date: string;
// status: string;
// active: boolean;
// template_id: number;
// }[] = [];
// for (let entry of data) {
// const document = {
// version: entry.template_version,
// file_name: entry.file_name,
// updated_date: entry.update_timestamp.toString().split('T')[0],
// status: '???',
// active: entry.active_flag,
// template_id: entry.id,
// };
// documents.push(document);
// }
// return documents;
// }

async getDocumentTemplates(document_type_id: number): Promise<any> {
const documentTemplateObjects = await this.documentTemplateService.findAll(document_type_id);
const formattedDate = (date: Date) => date.toISOString().split('T')[0];
Expand All @@ -297,38 +274,12 @@ export class AdminService {
});
}

async getDocumentProvisions(): Promise<any> {
const documentProvisions = await this.provisionService.findAll();
return documentProvisions.map((provision) => ({
id: provision.id,
type: provision.type,
provision_group: provision.provision_group,
max: provision.max,
provision_name: provision.provision_name,
free_text: provision.free_text,
help_text: provision.help_text,
category: provision.category,
order_value: provision.order_value,
active_flag: provision.active_flag,
// transform document_types to an array of ids
document_type_ids: provision.document_types.map((dt) => dt.id),
}));
async getProvisions(): Promise<any> {
return this.provisionService.findAll();
}

async getDocumentVariables(): Promise<any> {
const returnItems = ['variable_name', 'variable_value', 'help_text', 'id', 'provision_id'];
const documentVariables = await this.provisionService.findAllVariables();
return documentVariables.map((obj) =>
Object.keys(obj)
.filter((key) => returnItems.includes(key))
.reduce(
(acc, key) => {
acc[key] = obj[key];
return acc;
},
{ edit: 'edit', remove: 'remove' }
)
);
return this.provisionService.findAllVariables();
}

enableProvision(id: number): Promise<any> {
Expand All @@ -339,75 +290,26 @@ export class AdminService {
return this.provisionService.disable(id);
}

getGroupMax(): Promise<any> {
return this.provisionService.getGroupMax();
}

addProvision(
provisionParams: {
type: string;
provision_group: number;
provision_group_text: string;
max: number;
provision: string;
free_text: string;
help_text: string;
category: string;
order_value: number;
variants: number[];
},
create_userid: string
) {
return this.provisionService.create({ ...provisionParams, create_userid });
}

updateProvision(
provisionParams: {
id: number;
type: string;
provision_group: number;
provision_group_text: string;
max: number;
provision: string;
free_text: string;
help_text: string;
category: string;
order_value: number;
document_type_ids: number[];
},
update_userid: string
) {
return this.provisionService.update(provisionParams.id, provisionParams.document_type_ids, {
...provisionParams,
update_userid,
});
}

addVariable(
variableParams: {
variable_name: string;
variable_value: string;
help_text: string;
provision_id: number;
},
create_userid: string
) {
return this.provisionService.addVariable({ ...variableParams, create_userid });
}

async updateVariable(variableParams: {
id: number;
variable_name: string;
variable_value: string;
help_text: string;
provision_id: number;
update_userid: string;
}) {
return this.provisionService.updateVariable(variableParams);
async addDocumentType(name: string, created_by: string, created_date: string, create_userid: string) {
const documentType: DocumentType = await this.documentTypeService.add(
name,
created_by,
created_date,
create_userid
);
await this.provisionService.generateDocTypeProvisions(documentType);
}

removeVariable(id: number) {
return this.provisionService.removeVariable(id);
async removeDocumentType(document_type_id: number) {
try {
// remove the related doc type provisions
await this.provisionService.removeDocTypeProvisions(document_type_id);
// remove the doc type
await this.documentTypeService.remove(document_type_id);
} catch (err) {
console.log(err);
throw new Error('Error in removeDocumentType');
}
}

/**
Expand Down
5 changes: 1 addition & 4 deletions backend/src/document_data/document_data.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ export class DocumentDataService {
const documentDataProvision = new DocumentDataProvision();
documentDataProvision.document_data = updatedDocumentData;
documentDataProvision.document_provision = documentProvision;
documentDataProvision.provision_free_text = documentProvision.free_text; // quick fix to not use the free_text from the document page
return documentDataProvision;
});
const documentDataVariables = variableArray.map(({ variable_id, variable_value }) => {
Expand Down Expand Up @@ -128,9 +127,8 @@ export class DocumentDataService {
);
const documentProvision = documentProvisions.find((p) => p.id === provision.provision_id);

if (documentDataProvision && documentDataProvision.provision_free_text != documentProvision.free_text) {
if (documentDataProvision) {
// Update an existing DocumentDataProvision entry
documentDataProvision.provision_free_text = documentProvision.free_text;
await this.documentDataProvisionRepository.save(documentDataProvision);
} else if (!documentDataProvision) {
// No data found for this specific provision so create a new entry in DocumentDataProvision
Expand All @@ -140,7 +138,6 @@ export class DocumentDataService {
const newDocumentDataProvision: DocumentDataProvision = this.documentDataProvisionRepository.create({
document_provision: documentProvisionToAdd,
document_data: updatedDocumentData,
provision_free_text: documentProvisionToAdd.free_text, // quick fix
});
await this.documentDataProvisionRepository.save(newDocumentDataProvision);
}
Expand Down
Loading

0 comments on commit b3d7fb3

Please sign in to comment.