From 809566a2ef9322b9587374495977a386b55c1d82 Mon Sep 17 00:00:00 2001 From: sajan Date: Tue, 25 Jul 2023 15:29:21 +0530 Subject: [PATCH] new modifications --- src/app/_dto/purchase.dto.ts | 13 + .../_modules/auth/login/login.component.ts | 8 +- .../_modules/auth/view/view.component.html | 26 +- src/app/_modules/auth/view/view.component.ts | 79 ++++-- .../add-tenders/add-tenders.component.html | 38 +-- .../add-tenders/add-tenders.component.ts | 14 +- .../dashboard/dashboard-routing.module.ts | 2 + .../dashboard/dashboard.component.html | 27 ++- .../_modules/dashboard/dashboard.component.ts | 56 ++++- .../_modules/dashboard/dashboard.module.ts | 8 +- .../dashboard/dialog/dialog.component.html | 1 + .../dashboard/dialog/dialog.component.scss | 40 ++++ .../dashboard/dialog/dialog.component.spec.ts | 25 ++ .../dashboard/dialog/dialog.component.ts | 43 ++++ .../home-upload/home-upload.component.html | 57 ++++- .../home-upload/home-upload.component.scss | 14 +- .../home-upload/home-upload.component.ts | 81 ++++++- .../home-view/home-view.component.html | 24 +- .../home-view/home-view.component.ts | 148 +++++++++++- .../bid-final-report.component.html | 226 ++++++++++++++++++ .../bid-final-report.component.scss | 125 ++++++++++ .../bid-final-report.component.spec.ts | 25 ++ .../bid-final-report.component.ts | 139 +++++++++++ .../_modules/report/report-routing.module.ts | 21 ++ src/app/_modules/report/report.component.html | 1 + src/app/_modules/report/report.component.scss | 0 src/app/_modules/report/report.component.ts | 16 ++ src/app/_modules/report/report.module.ts | 55 +++++ .../_resources/api-url.properties.ts | 9 +- .../_services/transaction.service.ts | 58 +++-- src/app/app.module.ts | 4 + .../containers/header/header.component.html | 2 +- .../containers/header/header.component.ts | 12 +- src/assets/i18n/error/en.json | 5 +- src/assets/i18n/languages/en-sales.json | 9 +- 35 files changed, 1297 insertions(+), 114 deletions(-) create mode 100644 src/app/_dto/purchase.dto.ts create mode 100644 src/app/_modules/dashboard/dialog/dialog.component.html create mode 100644 src/app/_modules/dashboard/dialog/dialog.component.scss create mode 100644 src/app/_modules/dashboard/dialog/dialog.component.spec.ts create mode 100644 src/app/_modules/dashboard/dialog/dialog.component.ts create mode 100644 src/app/_modules/report/bid-final-report/bid-final-report.component.html create mode 100644 src/app/_modules/report/bid-final-report/bid-final-report.component.scss create mode 100644 src/app/_modules/report/bid-final-report/bid-final-report.component.spec.ts create mode 100644 src/app/_modules/report/bid-final-report/bid-final-report.component.ts create mode 100644 src/app/_modules/report/report-routing.module.ts create mode 100644 src/app/_modules/report/report.component.html create mode 100644 src/app/_modules/report/report.component.scss create mode 100644 src/app/_modules/report/report.component.ts create mode 100644 src/app/_modules/report/report.module.ts diff --git a/src/app/_dto/purchase.dto.ts b/src/app/_dto/purchase.dto.ts new file mode 100644 index 0000000..30739ce --- /dev/null +++ b/src/app/_dto/purchase.dto.ts @@ -0,0 +1,13 @@ +export class PurchaseDto { + + amount: number; + + application: number; + + mobile: string; + + email: string; + + type: string; + +} \ No newline at end of file diff --git a/src/app/_modules/auth/login/login.component.ts b/src/app/_modules/auth/login/login.component.ts index 175d65e..7d3b861 100644 --- a/src/app/_modules/auth/login/login.component.ts +++ b/src/app/_modules/auth/login/login.component.ts @@ -108,12 +108,18 @@ export class LoginComponent implements OnInit { localStorage.setItem('username', res.username); localStorage.setItem('userId', res.userId); + localStorage.setItem('mobile', res.mobile); localStorage.setItem('seculevel', res.secuLevel); }, (err) => { console.log("err=1=", err); this._ui.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi')); }); - + let returnUrl = localStorage.getItem('returnUrl') + if(returnUrl){ + this.router.navigate([returnUrl]); + localStorage.removeItem('returnUrl') + } + else this.router.navigate([routePath.dashboard]); // this.service.patchToken() this.user.password = ''; diff --git a/src/app/_modules/auth/view/view.component.html b/src/app/_modules/auth/view/view.component.html index 2718a4b..e45426b 100644 --- a/src/app/_modules/auth/view/view.component.html +++ b/src/app/_modules/auth/view/view.component.html @@ -169,35 +169,35 @@ Published Date - {{tenderData.publishDate}} + {{tenderData.publishDate | date: 'MMM d, y, h:mm:ss a'}} Document Download / Sale Start Date - {{tenderData.saleStartDate}} + {{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}} Clarification Start Date - {{tenderData.clarificationStartDate}} + {{tenderData.clarificationStartDate | date: 'MMM d, y, h:mm:ss a'}} Document Download / Sale End Date - {{tenderData.saleEndDate}} + {{tenderData.saleEndDate | date: 'MMM d, y, h:mm:ss a'}} Clarification End Date - {{tenderData.clarificationEndDate}} + {{tenderData.clarificationEndDate | date: 'MMM d, y, h:mm:ss a'}} Bid Submission Start Date - {{tenderData.bidSubStartDate}} + {{tenderData.bidSubStartDate | date: 'MMM d, y, h:mm:ss a'}} Bid Submission End Date - {{tenderData.bidSubEndDate}} + {{tenderData.bidSubEndDate | date: 'MMM d, y, h:mm:ss a'}} Bid Opening Date - {{tenderData.bidOpenDate}} + {{tenderData.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}} @@ -269,7 +269,7 @@ Pre Bid Meeting Date - {{tenderData.preBidDate}} + {{tenderData.preBidDate | date: 'MMM d, y, h:mm:ss a'}} diff --git a/src/app/_modules/auth/view/view.component.ts b/src/app/_modules/auth/view/view.component.ts index 0f84fd0..a10ffc9 100644 --- a/src/app/_modules/auth/view/view.component.ts +++ b/src/app/_modules/auth/view/view.component.ts @@ -2,7 +2,9 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; import { environment } from 'src/environments/environment'; @Component({ @@ -23,7 +25,9 @@ export class ViewComponent implements OnInit { constructor(private router: Router, private route: ActivatedRoute, - private _masterService: MasterService) { + private _masterService: MasterService, + private _ui:UiService, + private _errorTranslate:ErrorTranslateService) { this.tenderId = +this.route.snapshot.paramMap.get('id'); } ngOnInit(): void { @@ -64,42 +68,28 @@ filterDataByCategory() { window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; } - DownloadDrawings(){ + DownloadDrawingsZIP(){ const id = this.tenderId; this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs,id).then((res)=>{ - }) - - } - - downloadZip() { - console.log('clicked'); - const id = this.tenderId; - // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); - // setTimeout(() => { - // newWindow.close(); - // }, 10); - - this._masterService.getMasterDatabyId(apiUrl.bankDocs, id).then(res => { - }, err => { console.log('res===>', err); if (err.status == 200) { console.log('start >>>'); // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); - let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`); setTimeout(() => { newWindow.close(); }, 100); } if (err.status == 404) { - alert('No Bank Document Found for the selected Tender.'); + alert('No Drawings Document Found for the selected Tender.'); } if (err.status == 500) { alert(`${err.message}`); } else { - alert(`An error Occured`); + // alert(`An error Occured`); // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); // setTimeout(() => { // newWindow.close(); @@ -107,9 +97,58 @@ filterDataByCategory() { } }) - // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); } + DownloadNIT(){ + const id = this.tenderId; + this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod,id).then((res)=>{ + + }) + } + // downloadWITZip() { + // console.log('clicked'); + // const id = this.tenderId; + // // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // // setTimeout(() => { + // // newWindow.close(); + // // }, 10); + + // this._masterService.getMasterDatabyId(apiUrl.bankDocs, id).then(res => { + + // }, err => { + // console.log('res===>', err); + // if (err.status == 200) { + // console.log('start >>>'); + // // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + // } + // if (err.status == 404) { + // alert('No Bank Document Found for the selected Tender.'); + // } + // if (err.status == 500) { + // alert(`${err.message}`); + // } + // else { + // // alert(`An error Occured`); + // // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // // setTimeout(() => { + // // newWindow.close(); + // // }, 100); + // } + + // }) + // // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); + + // } + + goToView(){ + this._ui.toastMessage(this._errorTranslate.translate('pleaseLogin')); + localStorage.setItem('returnUrl',`tender-view/${this.tenderId}`) + this.navigateTo('auth/login') + } } diff --git a/src/app/_modules/dashboard/add-tenders/add-tenders.component.html b/src/app/_modules/dashboard/add-tenders/add-tenders.component.html index ed0fef1..61dced4 100644 --- a/src/app/_modules/dashboard/add-tenders/add-tenders.component.html +++ b/src/app/_modules/dashboard/add-tenders/add-tenders.component.html @@ -219,21 +219,17 @@
-
+
-
+
-
- - -
+
@@ -257,8 +253,17 @@
+ +
+
+ + +
+ +
+ + +
+
+
-
-
-
@@ -289,20 +296,21 @@
+ +
+
-
-
-
+
-
+
@@ -333,7 +341,7 @@
-

+

diff --git a/src/app/_modules/dashboard/add-tenders/add-tenders.component.ts b/src/app/_modules/dashboard/add-tenders/add-tenders.component.ts index dcd4b42..8fab911 100644 --- a/src/app/_modules/dashboard/add-tenders/add-tenders.component.ts +++ b/src/app/_modules/dashboard/add-tenders/add-tenders.component.ts @@ -95,7 +95,7 @@ export class AddTendersComponent implements OnInit { - this.coverDocs = this.tenderData.covers + this.coverDocs = JSON.parse(JSON.stringify(this.tenderData.covers)); this.newCvrROW =true this.newDRWROW =true @@ -364,6 +364,7 @@ export class AddTendersComponent implements OnInit { deleteCoverRow(id, index: number){ let removeRow = Object.assign({}, (this.coverDocs).splice(index, 1)[0]); + this.tenderData.covers[index].crud = 'D'; } @@ -491,9 +492,7 @@ export class AddTendersComponent implements OnInit { else if(this.tenderData.workDesc =='' || this.tenderData.workDesc == null || this.tenderData.workDesc == undefined){ this._ui.toastMessage(this.errorTranslateService.translate("workDescriptionCantBeBlank"),2000,true); } - else if(this.tenderData.ndaPreQualification =='' || this.tenderData.ndaPreQualification == null || this.tenderData.ndaPreQualification == undefined){ - this._ui.toastMessage(this.errorTranslateService.translate("preQualificationCantBeBlank"),2000,true); - } + else if( this.tenderData.tenderValue == null || this.tenderData.tenderValue == undefined){ this._ui.toastMessage(this.errorTranslateService.translate("tenderValueCantBeBlank"),2000,true); } @@ -503,6 +502,9 @@ export class AddTendersComponent implements OnInit { else if(this.tenderData.subCategory =='' || this.tenderData.subCategory == null || this.tenderData.subCategory == undefined){ this._ui.toastMessage(this.errorTranslateService.translate("subCategoryCantBeBlank"),2000,true); } + else if(this.tenderData.ndaPreQualification =='' || this.tenderData.ndaPreQualification == null || this.tenderData.ndaPreQualification == undefined){ + this._ui.toastMessage(this.errorTranslateService.translate("preQualificationCantBeBlank"),2000,true); + } else if( this.tenderData.bidValidity == null || this.tenderData.bidValidity == undefined){ this._ui.toastMessage(this.errorTranslateService.translate("bidValidityCantBeBlank"),2000,true); } @@ -658,7 +660,7 @@ return true } if(this.RequiredDocumentsPreCheck() ){ - this.tenderData.covers = this.coverDocs + // this.tenderData.covers = this.coverDocs this.nextTab() } } @@ -690,7 +692,7 @@ return true 'success' ) - + this.router.navigate(['/dashboard']); } diff --git a/src/app/_modules/dashboard/dashboard-routing.module.ts b/src/app/_modules/dashboard/dashboard-routing.module.ts index 495ae85..c6d26aa 100644 --- a/src/app/_modules/dashboard/dashboard-routing.module.ts +++ b/src/app/_modules/dashboard/dashboard-routing.module.ts @@ -12,6 +12,8 @@ const routes: Routes = [ { path: '', redirectTo: '/dashboard', pathMatch: 'full' }, { path: 'dashboard', component: DashboardComponent }, {path:'tender-view/:id', component:HomeViewComponent}, + {path:'tender-view/:id/:pay', component:HomeViewComponent}, + {path:'tender-upload/:id',component:HomeUploadComponent}, { path: 'add-tenders', component: AddTendersComponent}, { path: 'add-tenders/:id', component: AddTendersComponent} diff --git a/src/app/_modules/dashboard/dashboard.component.html b/src/app/_modules/dashboard/dashboard.component.html index 4e8dcea..e5d6dfc 100644 --- a/src/app/_modules/dashboard/dashboard.component.html +++ b/src/app/_modules/dashboard/dashboard.component.html @@ -95,11 +95,12 @@ -
-
-
+


@@ -188,14 +189,30 @@ + + + {{ 'report' | translate }} + + + + + + + + {{ 'upload' | translate }} - + + + `, + styleUrls: ['./dialog.component.scss'] +}) +export class DialogComponent implements OnInit { + + details: string[]; + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: { details: string[] } + ) { + this.details = data.details; + } + + onAccept() { + // You can perform any actions needed when the user accepts the terms and conditions here. + this.dialogRef.close('accepted'); + } + + onClose() { + // You can perform any actions needed when the user closes the dialog without accepting the terms and conditions here. + this.dialogRef.close('closed'); + } + ngOnInit(): void { + + } +} diff --git a/src/app/_modules/dashboard/home-upload/home-upload.component.html b/src/app/_modules/dashboard/home-upload/home-upload.component.html index 507eee9..baa85bd 100644 --- a/src/app/_modules/dashboard/home-upload/home-upload.component.html +++ b/src/app/_modules/dashboard/home-upload/home-upload.component.html @@ -46,11 +46,16 @@
-
+
+ + + Bid Final Amount + + @@ -68,7 +73,7 @@
- + {{tenderData?.covers[i].file}} @@ -97,7 +102,53 @@
-
+

+ + + + + +
+ +
+ I agree to the Terms and Conditions +
+
  +
*View Terms and Conditions
+
+ + + + + +
diff --git a/src/app/_modules/dashboard/home-upload/home-upload.component.scss b/src/app/_modules/dashboard/home-upload/home-upload.component.scss index d20b177..6bbca16 100644 --- a/src/app/_modules/dashboard/home-upload/home-upload.component.scss +++ b/src/app/_modules/dashboard/home-upload/home-upload.component.scss @@ -30,4 +30,16 @@ .resp{ min-height: 460px; } -} \ No newline at end of file +} + +.checkbox-container { + display: flex; + align-items: center; + margin-bottom: 10px; +} + +.checkbox-text { + flex: 1; + font-family: 'Arial', sans-serif; + font-size: 16px; +} diff --git a/src/app/_modules/dashboard/home-upload/home-upload.component.ts b/src/app/_modules/dashboard/home-upload/home-upload.component.ts index e994742..7d2fc86 100644 --- a/src/app/_modules/dashboard/home-upload/home-upload.component.ts +++ b/src/app/_modules/dashboard/home-upload/home-upload.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import { log } from 'console'; import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; @@ -8,6 +9,7 @@ import { ErrorTranslateService } from 'src/app/_providers/_services/error-transl import { MasterService } from 'src/app/_providers/_services/master.service'; import { UiService } from 'src/app/_providers/_services/ui.service'; import Swal from 'sweetalert2' +import { DialogComponent } from '../dialog/dialog.component'; @Component({ selector: 'app-home-upload', @@ -30,6 +32,12 @@ export class HomeUploadComponent implements OnInit { tenderId: number; + bidAmount:number; + + agreeToTerms1: boolean = false; + agreeToTerms2: boolean = false; + showError: boolean = false; + tenderData: any; @@ -37,6 +45,8 @@ export class HomeUploadComponent implements OnInit { userId: string; + agreeToTerms: boolean = false; + fileSelected: boolean[] DEFAULT_COVER_COUNT: any; @@ -52,7 +62,8 @@ export class HomeUploadComponent implements OnInit { private route: ActivatedRoute, private _ui: UiService, private _errorTranslate: ErrorTranslateService, - private _masterService: MasterService + private _masterService: MasterService, + public dialog: MatDialog ) { this.secuLevel = localStorage.getItem('seculevel'); this.userId = localStorage.getItem('userId'); @@ -62,11 +73,34 @@ export class HomeUploadComponent implements OnInit { ngOnInit(): void { this.loading = true; + this.agreeToTerms = false; this.getData(); this.getFileFormatLov(); } + + + openDialog() { + const dialogRef = this.dialog.open(DialogComponent, { + width: '500px', + data: { + details: [ + 'I have thoroughly read and understood all the details provided on the official website of Thrickodithanam SCB related to the tendering process.', + 'I confirm that all the information I have provided in connection with this tender is accurate, complete, and valid to the best of my knowledge. I also understand that any misrepresentation or omission of relevant information may result in the rejection of my application/participation or the termination of any subsequent contract awarded to me.' + ] + } + }); + + dialogRef.afterClosed().subscribe((result) => { + // Handle any logic after the dialog is closed (if needed) + // For example, you can update the agreeToTerms variable based on the user's choice. + }); + } + + + + getData() { this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { // console.log("tenderData", res); @@ -125,6 +159,10 @@ export class HomeUploadComponent implements OnInit { navigateTo(destination: any) { this.router.navigate([destination]) } + updateTerms(event: any) { + this.agreeToTerms = event.checked; + } + goToHome() { @@ -134,6 +172,11 @@ export class HomeUploadComponent implements OnInit { window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; } preSave() { + + if(this.bidAmount == 0 || this.bidAmount == null || this.bidAmount == undefined){ + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterBidFinalAmount"),2000,true); + return false; + } for (let element of this.UploadedFile) { if (!element.docName) { this._ui.toastMessage(this._errorTranslate.translate("pleaseAddfiles"),2000,true); @@ -141,18 +184,50 @@ export class HomeUploadComponent implements OnInit { return false; } } + + if (!this.agreeToTerms) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAgreeToTheTermsandCondition"), 2000, true); + return false; + } + return true; } + + + + + + // openDialog(): void { + // this.showDialog = true; + // } + + // closeDialog(): void { + // this.showDialog = false; + // } + submit() { if(!this.preSave()) return - // console.log('this.tenderData.covers========',this.tenderData.covers); + let id ={ + tenderId : this.tenderId, + userId : this.userId, + + } + let body= { + bidAmount:this.bidAmount + } + this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + console.log(res); + + }) + - // console.log('this.UploadedFile========',this.UploadedFile); + //console.log('this.tenderId========',body); + // console.log('this.userId========',this.userId); Swal.fire({ title: 'Are you sure?', diff --git a/src/app/_modules/dashboard/home-view/home-view.component.html b/src/app/_modules/dashboard/home-view/home-view.component.html index f948bcc..423775d 100644 --- a/src/app/_modules/dashboard/home-view/home-view.component.html +++ b/src/app/_modules/dashboard/home-view/home-view.component.html @@ -169,35 +169,35 @@ Published Date - {{tenderData.publishDate}} + {{tenderData.publishDate | date: 'MMM d, y, h:mm:ss a'}} Document Download / Sale Start Date - {{tenderData.saleStartDate}} + {{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}} Clarification Start Date - {{tenderData.clarificationStartDate}} + {{tenderData.clarificationStartDate | date: 'MMM d, y, h:mm:ss a'}} Document Download / Sale End Date - {{tenderData.saleEndDate}} + {{tenderData.saleEndDate | date: 'MMM d, y, h:mm:ss a'}} Clarification End Date - {{tenderData.clarificationEndDate}} + {{tenderData.clarificationEndDate | date: 'MMM d, y, h:mm:ss a'}} Bid Submission Start Date - {{tenderData.bidSubStartDate}} + {{tenderData.bidSubStartDate | date: 'MMM d, y, h:mm:ss a'}} Bid Submission End Date - {{tenderData.bidSubEndDate}} + {{tenderData.bidSubEndDate | date: 'MMM d, y, h:mm:ss a'}} Bid Opening Date - {{tenderData.bidOpenDate}} + {{tenderData.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}} @@ -269,7 +269,7 @@ Pre Bid Meeting Date - {{tenderData.preBidDate}} + {{tenderData.preBidDate | date: 'MMM d, y, h:mm:ss a'}} + +
+
+ + + + + + + +
+
+
+
+ + {{title | translate}} +
+ +
+ {{'tender'|translate}} : + + {{headerData?.title}} + +
+ + +
+
+ {{'publishedDate'|translate}} : + + {{headerData?.publishDate | date: 'MMM d, y, h:mm:ss a'}} + +
+ + + +
+
+ {{'bidOpenDate'|translate}} : + + {{headerData?.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}} + +
+ + +
+
+
{{'currentDate'|translate}}: {{today | date: 'MMM d, y, h:mm:ss a'}}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ {{'slNo'|translate}}. +
+
+ {{i+1}} + +
+ {{'name'|translate}} + +
+
+ {{element?.userName}} + +
+ {{'admissionNo'|translate}} + +
+
+ {{element.rollNo }} + +
+ {{'mobileNumber'|translate}} + +
+
+ {{element?.mobileNumber}} + +
+ {{'emailId'|translate}} + +
+
+ {{element?.email}} + +
+ {{'totalBidAmount'|translate}} + +
+
+ {{element?.finalBidAmt}} + + +
+ {{'documents'|translate}} + +
+
+ +
+ +
+
\ No newline at end of file diff --git a/src/app/_modules/report/bid-final-report/bid-final-report.component.scss b/src/app/_modules/report/bid-final-report/bid-final-report.component.scss new file mode 100644 index 0000000..387b13d --- /dev/null +++ b/src/app/_modules/report/bid-final-report/bid-final-report.component.scss @@ -0,0 +1,125 @@ +h4 { + width: 100%; + text-align: center; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + + #section-to-print h6 { + text-align: center; + } + + table { + width: 100%; + } + + .table-container { + width: calc(100vw - 50px); + overflow-x: scroll; + border: 1px solid grey; + // height: 50vh; + } + + .col-header { + color: #000000; + font-weight: bolder; + font-size: medium; + text-align: center; + background-color: #46AC9E; + padding: 5px; + border: 1px solid #000000; + } + + .col-body { + padding: 5px; + text-align: center; + border: 1px solid #000000; + } + + .col-footer { + padding: 5px; + text-align: center; + font-weight: bolder; + // border: 1px solid #000000; + background-color: rgb(212, 212, 212); + } + + .row { + margin: 5px; + } + + .container { + margin: 5px; + } + + .hide { + display: none; + } + + mat-icon { + vertical-align: middle; + opacity: .6; + } + + :host ::ng-deep { + .mat-sort-header-arrow { + color: #000000; + } + + .mat-sort-header-container { + display: flex; + justify-content: center; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + } + @media print{ + .header{ + display: none; + } + .row{ + display: none; + } + + * { + font-size: 17px !important; + } + + } + + + .select{ + padding: 10px; + font-size: 16px; + border-radius: 5px; + background-color: #f2f2f2; + border: none; + box-shadow: none; + } + .select:focus { + outline: none; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); + } \ No newline at end of file diff --git a/src/app/_modules/report/bid-final-report/bid-final-report.component.spec.ts b/src/app/_modules/report/bid-final-report/bid-final-report.component.spec.ts new file mode 100644 index 0000000..8326734 --- /dev/null +++ b/src/app/_modules/report/bid-final-report/bid-final-report.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BidFinalReportComponent } from './bid-final-report.component'; + +describe('BidFinalReportComponent', () => { + let component: BidFinalReportComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BidFinalReportComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BidFinalReportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/report/bid-final-report/bid-final-report.component.ts b/src/app/_modules/report/bid-final-report/bid-final-report.component.ts new file mode 100644 index 0000000..1f2420d --- /dev/null +++ b/src/app/_modules/report/bid-final-report/bid-final-report.component.ts @@ -0,0 +1,139 @@ +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { environment } from 'src/environments/environment'; +import * as XLSX from 'xlsx'; +@Component({ + selector: 'app-bid-final-report', + templateUrl: './bid-final-report.component.html', + styleUrls: ['./bid-final-report.component.scss'] +}) +export class BidFinalReportComponent implements OnInit { + + printSize = [{ name: "landscape" }, { name: "portrait" }] + + printType: any; + + title = 'Bid Final Report'; + + today: Date = new Date(); + + @ViewChild('table', { static: false }) table: ElementRef; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + displaycolumns: string[] = ['slNo', 'name', 'mobileNumber', 'email', 'finalBidAmt', 'aadharNo']; + + dataSource: MatTableDataSource; + + tenderId: number; + + headerData: any; + + tableData: any; + + constructor( + private route: ActivatedRoute, + private _router: Router, + private _masterService:MasterService + ) { + + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + + ngOnInit(): void { + this.getHeaderData(this.tenderId); + this.getTableData(this.tenderId); + this.printType = 'portrait'; + } + + navigateTo(destination) { + this._router.navigate([destination]) + } + + backButton() { + this.navigateTo('/dashboard') + // this.backClick.emit() + } + + getHeaderData(id) { + this._masterService.getMasterDatabyId(apiUrl.getTender,id).then(res=>{ + this.headerData = res; + }) + } + + getTableData(id){ + this._masterService.getMasterDatabyId(apiUrl.bidReport,id).then(res=>{ + this.tableData = res.filter(element=> element.status == 'S'); + this.dataSource = new MatTableDataSource(this.tableData); + this.dataSource.sort = this.sort; + }) + } + + printScreen() { + + if (this.printType.trim() == 'landscape') { + var css = `@page { size: ${this.printType}; }`, + head = document.head || document.getElementsByTagName('head')[0], + style = document.createElement('style'); + style.type = 'text/css'; + style.media = 'print'; + style.appendChild(document.createTextNode(css)); + head.appendChild(style); + } + // this._menuService.isShowSidebar = false + setTimeout(() => { + window.print(); + }, 1000); + } + + + + excelDownload() { + const ws: XLSX.WorkSheet = XLSX.utils.table_to_sheet(this.table.nativeElement); + const merge = [ + { s: { r: 0, c: 4 }, e: { r: 0, c: 7 } } + ]; + ws["!merges"] = merge; + const wb: XLSX.WorkBook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); + XLSX.writeFile(wb, 'Bid-final-Report.xlsx'); + } + + + sortData(sort: Sort) { + + // console.log('sorting...'); + + // const data = this.tableData.slice(); + // if (!sort.active || sort.direction === '') { + // this.dataSource.data = data; + + // return; + // } + + // this.dataSource.data = data.sort((a, b) => { + // const isAsc = sort.direction === 'asc'; + // switch (sort.active) { + // case 'title': + // return compare(a.title, b.title, isAsc); + // case 'publishedDate': + // return compare(a.publishDate, b.publishDate, isAsc); + // case 'bidOpenDate': + // return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + // default: + // return 0; + // } + // }); + } + + downloadUserDocs(userId){ + let newWindow = window.location.href = `${environment.apiUrl}/${apiUrl.userBidDoc}/${this.tenderId}/${userId}` + } +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} \ No newline at end of file diff --git a/src/app/_modules/report/report-routing.module.ts b/src/app/_modules/report/report-routing.module.ts new file mode 100644 index 0000000..0c2f12e --- /dev/null +++ b/src/app/_modules/report/report-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { LayoutComponentComponent } from '../dashboard/layout-component/layout-component.component'; +import { BidFinalReportComponent } from './bid-final-report/bid-final-report.component'; +import { ReportComponent } from './report.component'; + +const routes: Routes = [ + { + path: '', component: LayoutComponentComponent, children: [ + { path: '', redirectTo: '/dashboard', pathMatch: 'full' }, + // { path: '', component: ReportComponent }, + {path:'bid-final-report/:id', component:BidFinalReportComponent}, + ] + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ReportRoutingModule { } diff --git a/src/app/_modules/report/report.component.html b/src/app/_modules/report/report.component.html new file mode 100644 index 0000000..b63b594 --- /dev/null +++ b/src/app/_modules/report/report.component.html @@ -0,0 +1 @@ +

report worked

\ No newline at end of file diff --git a/src/app/_modules/report/report.component.scss b/src/app/_modules/report/report.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_modules/report/report.component.ts b/src/app/_modules/report/report.component.ts new file mode 100644 index 0000000..309a633 --- /dev/null +++ b/src/app/_modules/report/report.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit, EventEmitter, Input, Output, ViewChild } from '@angular/core'; + + + +@Component({ + selector: 'app-report', + templateUrl: './report.component.html', + styleUrls: ['./report.component.scss'] +}) +export class ReportComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } +} diff --git a/src/app/_modules/report/report.module.ts b/src/app/_modules/report/report.module.ts new file mode 100644 index 0000000..f5e3626 --- /dev/null +++ b/src/app/_modules/report/report.module.ts @@ -0,0 +1,55 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { ReportRoutingModule } from './report-routing.module'; +import { ReportComponent } from './report.component'; +import { BidFinalReportComponent } from './bid-final-report/bid-final-report.component'; +import { SharedModule } from 'src/app/shared/shared.module'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTableModule } from '@angular/material/table'; +import { MatInputModule } from '@angular/material/input'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { FormsModule } from '@angular/forms'; +import { MatSortModule } from '@angular/material/sort'; +import { TranslateModule } from '@ngx-translate/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { MatMomentDateModule } from '@angular/material-moment-adapter'; +import {MatTooltipModule} from '@angular/material/tooltip'; +// import { NgxMatTimepickerModule } from 'ngx-mat-timepicker'; +import { LOCALE_ID } from '@angular/core'; + +@NgModule({ + declarations: [ReportComponent, BidFinalReportComponent], + imports: [ + CommonModule, + ReportRoutingModule, + SharedModule, + MatProgressBarModule, + MatCardModule, + MatIconModule, + MatTableModule, + MatInputModule, + MatButtonModule, + MatPaginatorModule, + MatSlideToggleModule, + FormsModule, + MatSortModule, + TranslateModule, + ReactiveFormsModule, + MatTabsModule, + MatSelectModule, + MatNativeDateModule, + MatDatepickerModule, + MatMomentDateModule, + MatTooltipModule + ] +}) +export class ReportModule { } diff --git a/src/app/_providers/_resources/api-url.properties.ts b/src/app/_providers/_resources/api-url.properties.ts index 4c4ae72..a4cc8ed 100644 --- a/src/app/_providers/_resources/api-url.properties.ts +++ b/src/app/_providers/_resources/api-url.properties.ts @@ -23,7 +23,7 @@ export const apiUrl = { tenderDoc:"tender-doc", fileFormat:"file-format-lov", docUpload: "file-upload/Bank-documents", - + paymentGateway: "payment-gateway", userImageUpload: "file-upload/user", changePassword: 'iuser/change-password', cryptoEncrypt: "crypto/encrypt", @@ -36,7 +36,12 @@ export const apiUrl = { adminTenderView:'tender/admin', drawingsDelete: "file-upload/R-drawing", widDelete:"file-upload/R-bankDoc", - noticeDelete:"file-upload/R-notice" + noticeDelete:"file-upload/R-notice", + feePaymentCancel: "fee-payment/cancel", + noticeDownlaod:"file-upload/notice", + bidReport:"payment-master/bid-report", + userBidDoc:"file-upload/user-doc-arc", + UploadBidAmount:"payment-master/finalBidAmt" }; diff --git a/src/app/_providers/_services/transaction.service.ts b/src/app/_providers/_services/transaction.service.ts index 7c151b6..7134368 100644 --- a/src/app/_providers/_services/transaction.service.ts +++ b/src/app/_providers/_services/transaction.service.ts @@ -3,6 +3,7 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { environment } from 'src/environments/environment'; import { apiUrl } from '../_resources/api-url.properties'; +import { PurchaseDto } from 'src/app/_dto/purchase.dto'; /************************** Created by Ajith A Pradeep @@ -17,23 +18,23 @@ export class TransactionService { constructor( private http: HttpClient, private _datePipe:DatePipe - ) { } - - dateFormatting(dateValue) { - let inputDate = new Date(dateValue) - let today = new Date() - let formattedDate - if (inputDate < today && this._datePipe.transform(inputDate, 'dd/MM/yyyy') != this._datePipe.transform(today, 'dd/MM/yyyy')) { - formattedDate = this._datePipe.transform(new Date(inputDate), 'yyyy/MM/dd') + " 23:59:59" + ) { } + + dateFormatting(dateValue) { + let inputDate = new Date(dateValue) + let today = new Date() + let formattedDate + if (inputDate < today && this._datePipe.transform(inputDate, 'dd/MM/yyyy') != this._datePipe.transform(today, 'dd/MM/yyyy')) { + formattedDate = this._datePipe.transform(new Date(inputDate), 'yyyy/MM/dd') + " 23:59:59" + } + else if (inputDate > today && this._datePipe.transform(inputDate, 'dd/MM/yyyy') != this._datePipe.transform(today, 'dd/MM/yyyy')) { + formattedDate = this._datePipe.transform(new Date(inputDate), 'yyyy/MM/dd') + " 00:00:01" + } + else { + formattedDate = this._datePipe.transform(new Date(), 'yyyy/MM/dd HH:mm:ss') + } + return formattedDate } - else if (inputDate > today && this._datePipe.transform(inputDate, 'dd/MM/yyyy') != this._datePipe.transform(today, 'dd/MM/yyyy')) { - formattedDate = this._datePipe.transform(new Date(inputDate), 'yyyy/MM/dd') + " 00:00:01" - } - else { - formattedDate = this._datePipe.transform(new Date(), 'yyyy/MM/dd HH:mm:ss') - } - return formattedDate - } async getTransactionData(apiUrl, filter?: string): Promise { if (!filter) @@ -57,6 +58,21 @@ export class TransactionService { return await this.http.delete(`${environment.apiUrl}/${apiUrl}/${id}`).toPromise(); } + // async getFormNo(prefix): Promise { + // return await this.http.get(`${environment.apiUrl}/${apiUrl.admissionFormNo}?where[prefix]=${prefix}`).toPromise(); + // } + + // async getAdmissionNo(filter): Promise { + // return await this.http.get(`${environment.apiUrl}/${apiUrl.admissionNo}${filter}`).toPromise(); + // } + + // async saveDiscount(body): Promise { + // return await this.http.post(`${environment.apiUrl}/${apiUrl.applyDiscount}`, body).toPromise(); + // } + + // async saveSection(body): Promise { + // return await this.http.post(`${environment.apiUrl}/${apiUrl.studentUpdateSection}`, body).toPromise(); + // } async encryptedCode(code): Promise { return await this.http.post(`${environment.apiUrl}/${apiUrl.cryptoEncrypt}`, { data: code }).toPromise(); @@ -74,11 +90,17 @@ export class TransactionService { return await this.http.post(`${environment.apiUrl}/${"sms-api/verifyOtp"}/${FR}`, body).toPromise(); } - async saveMultipleData(apiUrl, body): Promise { - return await this.http.post(`${environment.apiUrl}/${apiUrl}`, body).toPromise(); + async createPayment(paymentRequest: PurchaseDto): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl.paymentGateway}`, paymentRequest).toPromise(); } + // async createPublicPayment(paymentRequest: PurchaseDto): Promise { + // return await this.http.post(`${environment.apiUrl}/${apiUrl.publicPaymenGateway}`, paymentRequest).toPromise(); + // } + async cancelPayment(id: number): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl.feePaymentCancel}`, { id: id }).toPromise(); + } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 60da0e8..9c17cb5 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -66,6 +66,8 @@ import { BsDatepickerModule, BsDatepickerConfig } from 'ngx-bootstrap/datepicker // import ngx-translate and the http loader import {TranslateLoader, TranslateModule } from '@ngx-translate/core'; import {TranslateHttpLoader} from '@ngx-translate/http-loader'; +import { ReportModule } from './_modules/report/report.module'; +import { MatDialogModule } from '@angular/material/dialog'; @NgModule({ declarations: [ @@ -80,6 +82,7 @@ import {TranslateHttpLoader} from '@ngx-translate/http-loader'; NgOtpInputModule, AuthModule, DashboardModule, + ReportModule, BrowserAnimationsModule, RouterModule, AppRoutingModule, @@ -102,6 +105,7 @@ import {TranslateHttpLoader} from '@ngx-translate/http-loader'; MatRadioModule, MatTooltipModule, ReactiveFormsModule, + MatDialogModule, FormsModule, ProvidersModule.forRoot(environment), MatSnackBarModule, diff --git a/src/app/shared/header/containers/header/header.component.html b/src/app/shared/header/containers/header/header.component.html index d25c1a3..3c8144b 100644 --- a/src/app/shared/header/containers/header/header.component.html +++ b/src/app/shared/header/containers/header/header.component.html @@ -21,7 +21,7 @@