modifications

main
josh 3 years ago
parent cc89fa869e
commit f30d800269

@ -1,7 +1,6 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfig } from './config/typeorm.config'; import { typeOrmConfig } from './config/typeorm.config';
import { AuthModule } from './auth/auth.module'; import { AuthModule } from './auth/auth.module';
import { FileUploadModule } from './file-upload/file-upload.module'; import { FileUploadModule } from './file-upload/file-upload.module';
import { ScheduleModule } from '@nestjs/schedule'; import { ScheduleModule } from '@nestjs/schedule';
@ -20,9 +19,6 @@ import { FileFormatLovModule } from './tables/file-format-lov/file-format-lov.mo
import { CoversMasterModule } from './tables/covers-master/covers-master.module'; import { CoversMasterModule } from './tables/covers-master/covers-master.module';
@Module({ @Module({
imports: [ imports: [
ScheduleModule.forRoot(), ScheduleModule.forRoot(),

@ -61,7 +61,7 @@ export class AuthService {
} }
if(user){ if(user){
// authCredentialsDto.secuLevel = user.secuLevel // authCredentialsDto.secuLevel = user.secuLevel
return {username:user.userName ,secuLevel:user.secuLevel} return {username:user.userName ,secuLevel:user.secuLevel , userId:user.userId , mobile:user.mobileNumber , email:user.email}
} }

@ -0,0 +1,10 @@
export class CoverMasterDto{
tenderId:number;
coverType:string;
Description:string;
fileFormat:string
}

@ -55,6 +55,6 @@ export class TenderDetailDto{
tenderType: number; tenderType: number;
tenderCategory: number; tenderCategory: number;
formOfContract: number; formOfContract: number;
emd_fee_type: string; emdFeeType: string;
activeYn: string; activeYn: string;
} }

@ -1,14 +1,15 @@
import { BadRequestException, Controller, Get, Param, Post, Req, Res, UploadedFile, UseGuards, UseInterceptors } from '@nestjs/common'; import { BadRequestException, Controller, Delete, Get, NotFoundException, Param, Post, Req, Res, UploadedFile, UseGuards, UseInterceptors } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport'; import { AuthGuard } from '@nestjs/passport';
import { FileInterceptor } from '@nestjs/platform-express'; import { FileInterceptor } from '@nestjs/platform-express';
import { existsSync, mkdirSync } from 'fs'; import { existsSync, mkdirSync } from 'fs';
import { diskStorage } from 'multer'; import { diskStorage } from 'multer';
import { extname } from 'path';
import { GetUser } from 'src/auth/dto/get-user.decorator'; import { GetUser } from 'src/auth/dto/get-user.decorator';
import { FileUploadService } from './file-upload.service'; import { FileUploadService } from './file-upload.service';
import * as fs from 'fs'; import * as fs from 'fs';
import * as archiver from 'archiver'; import * as archiver from 'archiver';
import * as path from 'path'; import * as path from 'path';
import { join, extname } from 'path';
export function createFolders(filePath: string) { export function createFolders(filePath: string) {
@ -33,20 +34,23 @@ export function createFolders(filePath: string) {
@Controller('file-upload') @Controller('file-upload')
export class FileUploadController { export class FileUploadController {
constructor( constructor(
private iservice: FileUploadService private iservice: FileUploadService
) { ) {
} }
@Post('user-documents/:id') @UseGuards(AuthGuard())
@Post('user-documents/:id/:userId')
@UseInterceptors(FileInterceptor('file', { @UseInterceptors(FileInterceptor('file', {
storage: diskStorage({ storage: diskStorage({
destination: (req, res, cb) => { destination: (req, res, cb) => {
const filePath: string = './uploads/userDocuments/'+req.params.id; const parentFolder: string = './uploads/userDocuments/' + req.params.id;
createFolders(filePath); createFolders(parentFolder);
return cb(null, filePath); const childFolder: string = parentFolder + '/' + req.params.userId;
createFolders(childFolder);
return cb(null, childFolder);
}, },
filename: (req, file, cb) => { filename: (req, file, cb) => {
console.log('===here===file upload=='); console.log('===here===file upload==');
@ -60,12 +64,14 @@ export class FileUploadController {
} }
@UseGuards(AuthGuard())
@Post('Bank-documents/:id') @Post('Bank-documents/:id')
@UseInterceptors(FileInterceptor('file', { @UseInterceptors(FileInterceptor('file', {
storage: diskStorage({ storage: diskStorage({
// destination: './uploads/cars', // destination: './uploads/cars',
destination: (req, res, cb) => { destination: (req, res, cb) => {
// console.log(req); console.log(req);
const filePath: string = './uploads/BankDocuments/' + req.params.id; const filePath: string = './uploads/BankDocuments/' + req.params.id;
createFolders(filePath); createFolders(filePath);
@ -87,7 +93,7 @@ export class FileUploadController {
return { fileName: file.filename, filePath: file.path, fileSizeKB }; return { fileName: file.filename, filePath: file.path, fileSizeKB };
} }
@UseGuards(AuthGuard())
@Post('drawings/:id') @Post('drawings/:id')
@UseInterceptors(FileInterceptor('file', { @UseInterceptors(FileInterceptor('file', {
storage: diskStorage({ storage: diskStorage({
@ -115,10 +121,106 @@ export class FileUploadController {
return { fileName: file.filename, filePath: file.path, fileSizeKB }; return { fileName: file.filename, filePath: file.path, fileSizeKB };
} }
@UseGuards(AuthGuard())
@Delete('R-drawing/:id/:filename')
async deleteDrawing(
@Param('filename') filename : string,
@Param('id') id:string): Promise<any> {
const filePath = './uploads/Drawings/'+id+'/'+ filename;
console.log("filepath===",filePath);
try {
await fs.promises.unlink(filePath);
return { message: 'File deleted successfully.' };
} catch (err) {
throw new NotFoundException('File not found.');
}
}
@UseGuards(AuthGuard())
@Delete('R-userDoc/:id/:userId/:filename')
async deleteUserDoc(
@Param('userId') userId:string,
@Param('filename') filename : string,
@Param('id') id:string): Promise<any> {
const filePath = './uploads/userDocuments/'+id+'/'+userId +'/'+ filename;
console.log("filepath===",filePath);
try {
await fs.promises.unlink(filePath);
return { message: 'File deleted successfully.' };
} catch (err) {
throw new NotFoundException('File not found.');
}
}
@UseGuards(AuthGuard())
@Delete('R-notice/:id/:filename')
async deleteNotice(
@Param('filename') filename : string,
@Param('id') id:string): Promise<any> {
const filePath = './uploads/Notice/'+id +'/'+ filename;
console.log("filepath===",filePath);
try {
await fs.promises.unlink(filePath);
return { message: 'File deleted successfully.' };
} catch (err) {
throw new NotFoundException('File not found.');
}
}
@UseGuards(AuthGuard())
@Post('notice/:id')
@UseInterceptors(FileInterceptor('file', {
storage: diskStorage({
// destination: './uploads/cars',
destination: (req, res, cb) => {
// console.log(req);
const filePath: string = './uploads/Notice/' + req.params.id;
createFolders(filePath);
return cb(null, filePath);
},
filename: (req, file, cb) => {
console.log('===here===file upload==');
const randomName = Array(32).fill(null).map(() => (Math.round(Math.random() * 16)).toString(16)).join('');
return cb(null, `${randomName}${extname(file.originalname)}`);
}
})
}))
notice(@UploadedFile() file) {
if (!file) {
return { error: 'No file uploaded.' };
}
//To return the size of the document in kb
const fileSizeKB = Math.ceil(file.size / 1024);
return { fileName: file.filename, filePath: file.path, fileSizeKB };
}
@Get('notice/:id/:imgpath')
getNotice(
@Param('imgpath') image: string,
@Param('id') id: string,
@Res() res,
@Req() req,
) {
return res.sendFile(image, { root: './uploads/Notice/' + id }, function (err) {
if (err) {
console.log(err.status);
res.status(err.status).end();
}
})
}
@UseGuards(AuthGuard())
@Get('Bank-Documents/:id/:imgpath') @Get('Bank-Documents/:id/:imgpath')
getBankDocuments( getBankDocuments(
@Param('imgpath') image: string, @Param('imgpath') image: string,
@ -135,15 +237,17 @@ export class FileUploadController {
}) })
} }
@Get('user-Documents/:id/:imgpath') @UseGuards(AuthGuard())
@Get('user-Documents/:id/:userId/:imgpath')
getUserDocuments( getUserDocuments(
@Param('imgpath') image: string, @Param('imgpath') image: string,
@Param('userId') userId: string,
@Param('id') id: string, @Param('id') id: string,
@Res() res, @Res() res,
@Req() req, @Req() req,
) { ) {
return res.sendFile(image, { root: './uploads/userDocuments/'+id}, function (err) { return res.sendFile(image, { root: './uploads/userDocuments/' + id + '/' + userId }, function (err) {
if (err) { if (err) {
console.log(err.status); console.log(err.status);
res.status(err.status).end(); res.status(err.status).end();
@ -152,7 +256,7 @@ export class FileUploadController {
} }
@UseGuards(AuthGuard())
@Get('Bank-Documents-Arc/:id') @Get('Bank-Documents-Arc/:id')
async getBankDocumentsAsZip( async getBankDocumentsAsZip(
@Param('id') id: string, @Param('id') id: string,
@ -210,7 +314,7 @@ export class FileUploadController {
} }
@UseGuards(AuthGuard())
@Get('Drawings-Arc/:id') @Get('Drawings-Arc/:id')
async getDrawingsAsZip( async getDrawingsAsZip(
@Param('id') id: string, @Param('id') id: string,
@ -266,4 +370,63 @@ export class FileUploadController {
} }
@UseGuards(AuthGuard())
@Get('user-doc-arc/:id')
async getUserDocsAsZip(
@Param('id') id: string,
@Res() res,
@Req() req,
) {
const folderPath = path.join('./uploads/userDocuments', id);
if (!fs.existsSync(folderPath)) {
res.status(404).send({ error: 'File not found' });
return;
}
//Uncomment when we want tender id as the zip file name
//const zipFileName = id + '.zip';
const zipFileName = 'userDocuments.zip';
const zipPath = path.join('./uploads/userDocuments', zipFileName);
// Create a new archive
const archive = archiver('zip', {
zlib: { level: 9 } // Set compression level (optional)
});
// Create a write stream to the zip file
const output = fs.createWriteStream(zipPath);
// Pipe the archive to the write stream
archive.pipe(output);
// Add the entire folder to the archive
archive.directory(folderPath, id);
// Finalize the archive
await archive.finalize();
// Set the appropriate headers for downloading the zip file
res.attachment(zipFileName);
res.setHeader('Content-Type', 'application/zip');
// Stream the zip file to the response
const readStream = fs.createReadStream(zipPath);
readStream.pipe(res);
// Remove the temporary zip file once it's streamed
readStream.on('end', () => {
fs.unlinkSync(zipPath);
});
// Handle any errors that occur during the archiving process
archive.on('error', function (err) {
console.log(err);
res.status(500).send({ error: 'Failed to create the zip file' });
});
}
} }

@ -9,7 +9,7 @@ import { AuthModule } from 'src/auth/auth.module';
MulterModule.register({ MulterModule.register({
dest: './uploads' dest: './uploads'
}), }),
// AuthModule, AuthModule,
], ],
controllers: [FileUploadController], controllers: [FileUploadController],
providers: [FileUploadService] providers: [FileUploadService]

@ -3,6 +3,8 @@ import { AuthGuard } from "@nestjs/passport";
import { AuthModule } from "src/auth/auth.module"; import { AuthModule } from "src/auth/auth.module";
import { FindManyOptions } from "typeorm"; import { FindManyOptions } from "typeorm";
import { PcdTransactionService } from "./pcd-transaction.service"; import { PcdTransactionService } from "./pcd-transaction.service";
import { GetUser } from "src/auth/dto/get-user.decorator";
import { PcduserDto } from "src/auth/dto/pcd-user.dto";
export class PcdTransactionController<T> { export class PcdTransactionController<T> {
@ -11,10 +13,12 @@ export class PcdTransactionController<T> {
constructor( constructor(
private service: PcdTransactionService<T> private service: PcdTransactionService<T>
) { } ) { }
@UseGuards(AuthGuard())
@Get() @Get()
async findList(@Query() filter: FindManyOptions, ): Promise<T[]> { async findList(@Query() filter: FindManyOptions,
return await this.service.findList(filter); @GetUser() user: PcduserDto
): Promise<T[]> {
return await this.service.findList(filter, user);
} }
@Get('/:id') @Get('/:id')
@ -22,14 +26,15 @@ export class PcdTransactionController<T> {
return await this.service.findOne(filter, id); return await this.service.findOne(filter, id);
} }
@UseGuards(AuthGuard())
@Post() @Post()
async createOne(@Body() body: T, ): Promise<T> { async createOne(@Body() body: T,
return await this.service.createOne(body,); @GetUser() user: PcduserDto): Promise<T> {
return await this.service.createOne(body, user);
} }
@UseGuards(AuthGuard())
@Delete('/:id') @Delete('/:id')
async delete(@Query() filter: FindManyOptions, @Param('id') id: string,): Promise<any> { async delete(@Query() filter: FindManyOptions, @Param('id') id: string,): Promise<any> {
return await this.service.deleteOne(filter, id,); return await this.service.deleteOne(filter, id,);

@ -2,6 +2,7 @@ import { PcdtTransactionInterface } from "../interface/pcd-transaction.interfac
import { FindManyOptions, Repository, getConnection, QueryRunner, Connection } from "typeorm"; import { FindManyOptions, Repository, getConnection, QueryRunner, Connection } from "typeorm";
import { BadRequestException, NotAcceptableException, UnauthorizedException, InternalServerErrorException, MethodNotAllowedException, HttpException, Inject } from "@nestjs/common"; import { BadRequestException, NotAcceptableException, UnauthorizedException, InternalServerErrorException, MethodNotAllowedException, HttpException, Inject } from "@nestjs/common";
import { TransactionDetailDto } from "src/framework/custom/transaction-detail.dto"; import { TransactionDetailDto } from "src/framework/custom/transaction-detail.dto";
import { PcduserDto } from "src/auth/dto/pcd-user.dto";
//import { TENANT_CONNECTION } from "src/tenant/tenant.module"; //import { TENANT_CONNECTION } from "src/tenant/tenant.module";
// import { IintDto } from "../../dto/iint.dto"; // import { IintDto } from "../../dto/iint.dto";
// import { IintvrnoDto } from "../../dto/iintvrno.dto"; // import { IintvrnoDto } from "../../dto/iintvrno.dto";
@ -19,17 +20,17 @@ export class PcdTransactionService<T> implements PcdtTransactionInterface {
private repo: Repository<any> private repo: Repository<any>
) { } ) { }
async preFindList(filter: FindManyOptions, ): Promise<boolean> { async preFindList(filter: FindManyOptions, user: PcduserDto): Promise<boolean> {
return true return true
} }
async findList(filter: FindManyOptions, ): Promise<T[]> { async findList(filter: FindManyOptions, user: PcduserDto): Promise<T[]> {
if (!filter.where) filter.where = {}; if (!filter.where) filter.where = {};
if (this.TXN_TYPE) filter.where[this.DETAIL_DATA_FORMAT[0].transactionTypeColumnName] = this.TXN_TYPE; if (this.TXN_TYPE) filter.where[this.DETAIL_DATA_FORMAT[0].transactionTypeColumnName] = this.TXN_TYPE;
// if (!filter.where[this.DETAIL_DATA_FORMAT[0].transactionTypeColumnName]) // if (!filter.where[this.DETAIL_DATA_FORMAT[0].transactionTypeColumnName])
// return; // return;
if (!await this.preFindList(filter)) if (!await this.preFindList(filter, user))
throw new BadRequestException(`Unexpected Error Occured in findList`); throw new BadRequestException(`Unexpected Error Occured in findList`);
let result: T[] = await this.repo.find(filter); let result: T[] = await this.repo.find(filter);
@ -113,7 +114,7 @@ export class PcdTransactionService<T> implements PcdtTransactionInterface {
return true; return true;
} }
async createOne(body: T, ): Promise<T> { async createOne(body: T, user: PcduserDto): Promise<T> {
//console.log('--- incoming = ', body); //console.log('--- incoming = ', body);
if (this.TXN_TYPE) body[this.DETAIL_DATA_FORMAT[0].transactionTypeColumnName] = this.TXN_TYPE; if (this.TXN_TYPE) body[this.DETAIL_DATA_FORMAT[0].transactionTypeColumnName] = this.TXN_TYPE;

@ -1,6 +1,7 @@
import { PcdBaseDto } from "src/framework/custom/pcd-dto.custom"; import { PcdBaseDto } from "src/framework/custom/pcd-dto.custom";
import { PcdBaseEntity } from "src/framework/custom/pcd-entity.custom"; import { PcdBaseEntity } from "src/framework/custom/pcd-entity.custom";
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
import { CoverDoc } from "../covers-master/covers-master.entity";
@Entity('covers-lov') @Entity('covers-lov')
export class CoversLov extends PcdBaseEntity{ export class CoversLov extends PcdBaseEntity{
@ -18,4 +19,7 @@ export class CoversLov extends PcdBaseEntity{
}) })
coverType:string coverType:string
@OneToMany(() => CoverDoc, (coverDoc) => coverDoc.coverTypeD )
coverDoc:CoverDoc[]
} }

@ -1,4 +1,16 @@
import { Controller } from '@nestjs/common'; import { Controller } from '@nestjs/common';
import { CoverMasterDto } from 'src/dto/cover-master.dto';
import { PcdFormGridController } from 'src/framework/beans/pcd-form-grid.controller';
import { CoversMasterService } from './covers-master.service';
@Controller('covers-master') @Controller('covers-master')
export class CoversMasterController {} export class CoversMasterController extends PcdFormGridController<CoverMasterDto>{
constructor(
private coversMasterService: CoversMasterService
) {
super(coversMasterService);
}
}

@ -1,11 +1,13 @@
import { PcdBaseEntity } from "src/framework/custom/pcd-entity.custom"; import { PcdBaseEntity } from "src/framework/custom/pcd-entity.custom";
import { TenderMaster } from "src/tables/tender-master/tender-master.entity"; import { TenderMaster } from "src/tables/tender-master/tender-master.entity";
import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm"; import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm";
import { CoversLov } from "../covers-lov/covers-lov.entity";
import { FileFormat } from "../file-format-lov/file-format-lov.entity";
@Entity('cover-doc-master') @Entity('cover-doc-master')
export class CoverDoc extends PcdBaseEntity { export class CoverDoc extends PcdBaseEntity {
@PrimaryColumn({ @PrimaryGeneratedColumn({
name: "id" name: "id"
}) })
id: number id: number
@ -18,8 +20,8 @@ export class CoverDoc extends PcdBaseEntity{
tenderId: number tenderId: number
@Column({ @Column({
name: "cover_type", name: "cover_type",
type:"varchar", type: "numeric",
length:500,
nullable: true nullable: true
}) })
coverType: string coverType: string
@ -33,8 +35,8 @@ export class CoverDoc extends PcdBaseEntity{
@Column({ @Column({
name: "file_format", name: "file_format",
type:"varchar", type: "numeric",
length:500,
nullable: true nullable: true
}) })
fileFormat: string fileFormat: string
@ -43,5 +45,12 @@ export class CoverDoc extends PcdBaseEntity{
@JoinColumn([{ name: "tender_id", referencedColumnName: "id" }]) @JoinColumn([{ name: "tender_id", referencedColumnName: "id" }])
tenderIdD: TenderMaster tenderIdD: TenderMaster
@ManyToOne(() => CoversLov, (coversLov) => coversLov.coverType, { eager: true })
@JoinColumn([{ name: "cover_type", referencedColumnName: "id" }])
coverTypeD: CoversLov
@ManyToOne(() => FileFormat, (fileFormat) => fileFormat.fileFormat, { eager: true })
@JoinColumn([{ name: "file_format", referencedColumnName: "id" }])
fileFormatD: FileFormat
} }

@ -1,8 +1,15 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { CoversMasterService } from './covers-master.service'; import { CoversMasterService } from './covers-master.service';
import { CoversMasterController } from './covers-master.controller'; import { CoversMasterController } from './covers-master.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from 'src/auth/auth.module';
import { CoverMasterRepository } from './covers-master.repository';
@Module({ @Module({
imports: [
TypeOrmModule.forFeature([CoverMasterRepository]),
AuthModule
],
providers: [CoversMasterService], providers: [CoversMasterService],
controllers: [CoversMasterController] controllers: [CoversMasterController]
}) })

@ -2,6 +2,6 @@ import { EntityRepository, Repository } from "typeorm";
import { CoverDoc } from "./covers-master.entity"; import { CoverDoc } from "./covers-master.entity";
@EntityRepository(CoverDoc) @EntityRepository(CoverDoc)
export class importantDocRepository extends Repository<CoverDoc>{ export class CoverMasterRepository extends Repository<CoverDoc>{
} }

@ -1,4 +1,17 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { CoverMasterDto } from 'src/dto/cover-master.dto';
import { PcdFormGridService } from 'src/framework/beans/pcd-form-grid.service';
import { CoverMasterRepository } from './covers-master.repository';
@Injectable() @Injectable()
export class CoversMasterService {} export class CoversMasterService extends PcdFormGridService<CoverMasterDto>{
constructor(
@InjectRepository(CoverMasterRepository)
private coverMasterRepository: CoverMasterRepository,
) {
super(coverMasterRepository);
}
}

@ -1,5 +1,6 @@
import { PcdBaseEntity } from "src/framework/custom/pcd-entity.custom"; import { PcdBaseEntity } from "src/framework/custom/pcd-entity.custom";
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
import { CoverDoc } from "../covers-master/covers-master.entity";
@Entity('file-format') @Entity('file-format')
export class FileFormat extends PcdBaseEntity{ export class FileFormat extends PcdBaseEntity{
@ -15,4 +16,7 @@ export class FileFormat extends PcdBaseEntity{
nullable:true nullable:true
}) })
fileFormat:string fileFormat:string
@OneToMany(() => CoverDoc, (coverDoc) => coverDoc.fileFormatD )
coverDoc:CoverDoc[]
} }

@ -1,7 +1,6 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { FormOfContractController } from './form-of-contract.controller'; import { FormOfContractController } from './form-of-contract.controller';
import { FormOfContractService } from './form-of-contract.service'; import { FormOfContractService } from './form-of-contract.service';
import { typeOrmConfig } from 'src/config/typeorm.config';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { FormOfContractRepository } from './form-of-contract.repository'; import { FormOfContractRepository } from './form-of-contract.repository';
import { AuthModule } from 'src/auth/auth.module'; import { AuthModule } from 'src/auth/auth.module';

@ -48,7 +48,7 @@ export class TenderDoc extends PcdBaseEntity{
type:"varchar", type:"varchar",
nullable:true nullable:true
}) })
docCategory:string documentCategory:string
@ManyToOne(() => TenderMaster,(tenderMaster)=> tenderMaster.TenderDoc) @ManyToOne(() => TenderMaster,(tenderMaster)=> tenderMaster.TenderDoc)
@JoinColumn([{ name: "tender_id", referencedColumnName: "id" }]) @JoinColumn([{ name: "tender_id", referencedColumnName: "id" }])

@ -347,7 +347,7 @@ export class TenderMaster extends PcdBaseEntity{
type: "varchar", type: "varchar",
nullable: true nullable: true
}) })
emd_fee_type:string emdFeeType: string
@Column({ @Column({
name: "activeyn", name: "activeyn",

@ -1,4 +1,4 @@
import { Controller,UseGuards } from '@nestjs/common'; import { Body, Controller, Get, UseGuards } from '@nestjs/common';
import { TenderDetailDto } from 'src/dto/tender-master.dto'; import { TenderDetailDto } from 'src/dto/tender-master.dto';
import { PcdTransactionController } from 'src/framework/beans/pcd-transaction.controller'; import { PcdTransactionController } from 'src/framework/beans/pcd-transaction.controller';
import { TenderService } from './tender.service'; import { TenderService } from './tender.service';
@ -11,4 +11,11 @@ export class TenderController extends PcdTransactionController<TenderDetailDto>
private tenderService: TenderService private tenderService: TenderService
) { ) {
super(tenderService); super(tenderService);
}} }
@Get('admin')
async getTender() {
return this.tenderService.GetAdminTenderD()
}
}

@ -8,6 +8,7 @@ import { AuthModule } from 'src/auth/auth.module';
@Module({ @Module({
imports: [ imports: [
TypeOrmModule.forFeature([TenderMasterRepository]), TypeOrmModule.forFeature([TenderMasterRepository]),
AuthModule
], ],
controllers: [TenderController], controllers: [TenderController],
providers: [TenderService] providers: [TenderService]

@ -1,11 +1,13 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { PcduserDto } from 'src/auth/dto/pcd-user.dto';
import { TenderDetailDto } from 'src/dto/tender-master.dto'; import { TenderDetailDto } from 'src/dto/tender-master.dto';
import { PcdTransactionService } from 'src/framework/beans/pcd-transaction.service'; import { PcdTransactionService } from 'src/framework/beans/pcd-transaction.service';
import { TransactionDetailDto } from 'src/framework/custom/transaction-detail.dto'; import { TransactionDetailDto } from 'src/framework/custom/transaction-detail.dto';
import { CoverMasterRepository } from 'src/tables/covers-master/covers-master.repository';
import { tenderDocRepository } from 'src/tables/tender-documents/tender-doc.repository'; import { tenderDocRepository } from 'src/tables/tender-documents/tender-doc.repository';
import { TenderMasterRepository } from 'src/tables/tender-master/tender-master.repository'; import { TenderMasterRepository } from 'src/tables/tender-master/tender-master.repository';
import { Connection } from 'typeorm'; import { Connection, FindManyOptions, LessThanOrEqual, MoreThanOrEqual } from 'typeorm';
@Injectable() @Injectable()
export class TenderService extends PcdTransactionService<TenderDetailDto>{ export class TenderService extends PcdTransactionService<TenderDetailDto>{
@ -19,6 +21,14 @@ export class TenderService extends PcdTransactionService<TenderDetailDto>{
childDetail: [], childDetail: [],
addtionalSettingOfRowsInInsertion: [], addtionalSettingOfRowsInInsertion: [],
orderByColumn: { columnName: "id", sort: "DESC" } orderByColumn: { columnName: "id", sort: "DESC" }
},
{
detailName: "covers", repo: this.conn.getCustomRepository(CoverMasterRepository),
filter: [{ columnName: "tenderId", headerColumn: "id" }],
foreignKeyColumnName: "tenderId",
childDetail: [],
addtionalSettingOfRowsInInsertion: [],
orderByColumn: { columnName: "id", sort: "DESC" }
} }
]; ];
constructor( constructor(
@ -30,4 +40,18 @@ export class TenderService extends PcdTransactionService<TenderDetailDto>{
// this.TenderMasterRepository = conn.getCustomRepository(SisPaymentDetailRepository) // this.TenderMasterRepository = conn.getCustomRepository(SisPaymentDetailRepository)
} }
async preFindList(filter: FindManyOptions, user: PcduserDto): Promise<boolean> {
if (!filter.where) filter.where = {};
if (!user || user.secuLevel == 'U') {
filter.where["publishDate"] = LessThanOrEqual(new Date());
filter.where["bidOpenDate"] = MoreThanOrEqual(new Date());
}
return true
}
async GetAdminTenderD() {
return this.tenderMasterRepository.find()
}
} }

Loading…
Cancel
Save