modifications

main
sajan 3 years ago
parent 809566a2ef
commit f3a0aaaac4

3
package-lock.json generated

@ -19342,8 +19342,7 @@
"bootstrap": { "bootstrap": {
"version": "5.1.3", "version": "5.1.3",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz",
"integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q=="
"requires": {}
}, },
"bootstrap-icons": { "bootstrap-icons": {
"version": "1.10.5", "version": "1.10.5",

@ -1,10 +1,12 @@
<div class="backImage">
<div class="container-responsive"> <div class="container-responsive">
<!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> --> <!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> -->
<br><br> <!-- <br><br> -->
<div class="container text-center"> <div class="container text-center">
<div class="row"> <div class="row">
@ -12,22 +14,22 @@
<div class="card-responsive"> <div class="card-responsive">
<div class="card-body-responsive"> <div class="card-body-responsive">
<div class="table-responsive"> <div class="table-responsive">
<ng-container > <ng-container >
<mat-card class="card"> <mat-card class="card">
<div class="top-bar"> <div class="top-bar">
<div class="top-left-float"> <div class="top-left-float">
<span> <span class="searchInputSpan">
<mat-icon style="margin-right: 3px; transform: translateY(10px);">search</mat-icon> <mat-icon style="margin-right: 3px;margin-left:-35px; transform: translateY(10px);">search</mat-icon>
<mat-form-field> <mat-form-field>
<input matInput placeholder="{{ 'search' | translate }}" style="width: fit-content;" <input matInput placeholder="{{ 'search' | translate }}" style="width: fit-content;"
[(ngModel)]="searchTerm" (keyup.enter)="search()"/> [(ngModel)]="searchTerm" (keyup)="search()"/>
</mat-form-field> </mat-form-field>
</span> </span>
<button mat-raised-button style="color: #46AC9E;" (click)="search()"> {{ 'go' | translate }} <!-- <button mat-raised-button class="addButton" (click)="search()"> {{ 'go' | translate }}
</button> </button>&nbsp; -->
</div> <button mat-raised-button class="addButton" (click)="reset()"> {{ 'clear' | translate }}
<div class="top-right-float">
<button mat-raised-button style="color: #46AC9E;" (click)="reset()"> {{ 'reset' | translate }}
</button> </button>
</div> </div>
</div> </div>
@ -50,21 +52,21 @@
</ng-container> </ng-container>
<ng-container matColumnDef="title"> <ng-container matColumnDef="title">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers"> <th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers" style="width:300px">
{{ 'title' | translate }} {{ 'title' | translate }}
<mat-icon>sort</mat-icon> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;text-align: left;" class="table-content">
{{element?.title}} {{element?.title}}
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="publishedDate"> <ng-container matColumnDef="publishedDate">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers"> <th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers " >
{{ 'publishedDate' | translate }} {{ 'publishedDate' | translate }}
<mat-icon>sort</mat-icon> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;text-align: left;" class="table-content">
{{element?.publishDate| date:"YYYY-MM-dd"}} {{element?.publishDate| date:"YYYY-MM-dd"}}
</td> </td>
<!-- <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <!-- <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
@ -73,11 +75,11 @@
</ng-container> </ng-container>
<ng-container matColumnDef="bidOpenDate"> <ng-container matColumnDef="bidOpenDate">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers"> <th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers" >
{{ 'bidOpenDate' | translate }} {{ 'bidOpenDate' | translate }}
<mat-icon>sort</mat-icon> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;text-align: left;" class="table-content">
{{element?.bidOpenDate| date:"YYYY-MM-dd"}} {{element?.bidOpenDate| date:"YYYY-MM-dd"}}
</td> </td>
<!-- <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <!-- <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
@ -86,36 +88,34 @@
</ng-container> </ng-container>
<ng-container matColumnDef="view"> <ng-container matColumnDef="view">
<th mat-header-cell *matHeaderCellDef class="table-headers" style="width:80px"> <th mat-header-cell *matHeaderCellDef class="table-headers" >
{{ 'view' | translate }} {{ 'view' | translate }}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
<button style="padding: 0;" mat-button color="primary" <button style="padding: 0;" mat-button color="primary"
(click)="goToView(element.id)" [disabled]="false"> (click)="goToView(element.id)" [disabled]="false">
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}"> <svg xmlns="http://www.w3.org/2000/svg" height="1em" style="height: 18px;" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M320 464c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64z" fill="#424242"/></svg>
insert_drive_file
</mat-icon>
</button> </button>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="upload"> <!-- <ng-container matColumnDef="upload">
<th mat-header-cell *matHeaderCellDef class="table-headers" style="width:80px"> <th mat-header-cell *matHeaderCellDef class="table-headers" style="width:80px">
{{ 'upload' | translate }} {{ 'upload' | translate }}
<!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
<button style="padding: 0;" mat-button color="primary" <button style="padding: 0;" mat-button color="primary"
(click)="goToUpload(element.id)" [disabled]="false"> (click)="goToUpload(element.id)" [disabled]="false">
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}"> <mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#353535'}">
cloud_upload cloud_upload
</mat-icon> </mat-icon>
</button> </button>
</td> </td>
</ng-container> </ng-container> -->
<ng-container matColumnDef="loading"> <ng-container matColumnDef="loading">
<td mat-footer-cell *matFooterCellDef="" colspan="5"> <td mat-footer-cell *matFooterCellDef="" colspan="5">
@ -141,6 +141,8 @@
</mat-paginator> </mat-paginator>
</mat-card> </mat-card>
</ng-container> </ng-container>
</div>
<!-- <table class="table table-bordered"> <!-- <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
@ -173,7 +175,7 @@
</div> </div>
</div> </div>
</div><br><br> </div><br><br>
<div class="footer" > <!-- <div class="footer" >
<footer id="footer" style="background-color: #48746e; padding: 70px 0; color: #ffffff; font-size: 16px; bottom: 0;" class="py-3"> <footer id="footer" style="background-color: #48746e; padding: 70px 0; color: #ffffff; font-size: 16px; bottom: 0;" class="py-3">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
@ -184,7 +186,6 @@
</div> </div>
</div> </div>
</footer> </footer>
</div> </div> -->
</div> </div>

@ -66,14 +66,14 @@ td {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: space-between; justify-content: space-between;
border: 1px solid #e3e3e3; // border: 1px solid #e3e3e3;
width: 100%; width: 100%;
margin: auto; margin: auto;
padding: auto; padding: auto;
} }
.header { .header {
padding: 20px; // padding: 20px;
width: 100%; width: 100%;
min-width: 350px; min-width: 350px;
} }
@ -106,6 +106,8 @@ mat-card {
.top-right-float>button { .top-right-float>button {
margin: 5px; margin: 5px;
height: 40px; height: 40px;
margin-left: -70px;
margin-top: 7px;
} }
mat-table { mat-table {
@ -113,22 +115,30 @@ mat-table {
width: 100%; width: 100%;
display: table; display: table;
overflow-x: scroll; overflow-x: scroll;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
.table-headers { .table-headers {
padding: 5px; padding: 5px;
color: #ffffff; color: #353535;
font-weight: 900; font-weight: 900;
font-size: medium; font-size: medium;
background-color: #46AC9E; background-color: #ececec;
font-family:nucleo;
text-align: center;
} }
.table-headers:hover { .table-headers:hover {
background-color: #ececec; background-color: #ececec;
color:#46AC9E; color:#46AC9E;
} }
.table-content { .table-content {
padding: 5px; padding: 5px;
overflow-wrap: inherit; overflow-wrap: inherit;
font-family:nucleo;
} }
.table-column { .table-column {
@ -153,15 +163,7 @@ input {
} }
// .dialog-body {
// display: flex;
// justify-content: center;
// align-items: center;
// div {
// width: 90%;
// }
// }
.dialog-actions { .dialog-actions {
display: flex; display: flex;
@ -216,7 +218,7 @@ input {
@media (max-width: 767px) { @media (max-width: 767px) {
.card { .card {
min-width: 600px; min-width: 900px;
} }
} }
@ -226,5 +228,123 @@ input {
} }
.mat-row:nth-child(odd){ .mat-row:nth-child(odd){
background-color: rgb(241, 241, 241); background-color: rgb(248, 248, 248);
}
.viewButton{
padding: 0;
border-radius: 16px !important;
height: 32px !important;
// width: 68px !important;
float: center;
// margin-top: 5px;
// margin-bottom: 5px;
color: #424242;
background-color: white;
// height: 37px;
border-radius: 9px;
font-family: nucleo;
width: 8%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
// margin-right: 5px;
}
.reportButton{
padding: 0;
// border-radius: 16px !important;
height: 32px !important;
// width: 68px !important;
float: center;
// margin-top: 5px;
// margin-bottom: 5px;
color: #424242;
// background-color: white;
// height: 37px;
// border-radius: 9px;
font-family: nucleo;
width: 8%;
// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
// margin-right: 5px;
}
.editButton {
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);
// transform: translateY(5px);
}
.editButton:hover {
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);
/* You can adjust the shadow values to your preference */
}
.addButton{
padding: 0;
border-radius: 16px !important;
height: 35px !important;
// width: 68px !important;
float: center;
margin-top: 5px;
margin-bottom: 5px;
color: #424242;
background-color: white;
// height: 37px;
border-radius: 9px;
font-family: nucleo;
width: 11%;
// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
// margin-right: 5px;
}
.addButton:hover{
background-color: #ebeaea ;
box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2);
// transform: translateY(5px);
}
.activeSpan{
background-color: #98eb98;
border-radius: 10px;
font-size: small;
color: #014d01;
}
.awaitSpan{
background-color: #b3c5ff;
border-radius: 10px;
font-size: small;
color: #213a8b;
}
.closedSpan{
background-color: #e3c096;
border-radius: 10px;
font-size: small;
color: #4d2a00;
}
.searchInputSpan{
background-color: #ececec;
border-radius: 45px;
width: 38vh;
height: 47px;
}
.backImage{
// position: fixed;
// left: 0;
// bottom: 0;
width: 100%;
// height:85%;
background-image: url('/assets/img/houstone_line1.jpg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
padding: 10px;
z-index: 1;
} }

@ -50,7 +50,8 @@ import { MatSortModule } from '@angular/material/sort';
MatFormFieldModule, MatFormFieldModule,
MatTableModule, MatTableModule,
MatPaginatorModule, MatPaginatorModule,
MatSortModule MatSortModule,
ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'})
] ]
}) })
export class AuthModule { } export class AuthModule { }

@ -1,25 +1,58 @@
<div class="backImg">
<div class="c-wrapper"> <div class="c-wrapper">
<div class="container"> <div class="container">
<div class="container" style="margin-top:50px;"> <div class="container" style="margin-top:50px;">
<div class="row">
<div class="col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6">
<mat-card *ngIf="!forgotCard" card="card-style" class="mainCard">
<mat-card-subtitle style="text-align: center;">
<div class="row" style="margin-bottom: 20px;">
<span class="resetSpan">{{ 'forgotYourPass' | translate }}</span><br>
</div>
<div class="row"> <div class="row">
<div class="col-12 col-sm-12 col-md-6 col-lg-5 col-xl-4">
<mat-card card="card-style"> <img class="forgotImage" src="assets/img/forgot.jpg">
</div>
<div class="row" style="margin-top: 20px;margin-bottom: 20px;">
<button mat-raised-button class="verifyOtpButton" type="submit" (click)="forgotCard = !forgotCard"> {{
'resetPassword' | translate }}
</button>
</div>
</mat-card-subtitle>
</mat-card>
<mat-card *ngIf="forgotCard" card="card-style" class="mainCard">
<!-- <mat-card-title> <!-- <mat-card-title>
<div class="row"> <div class="row">
<img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo"> <img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo">
</div> </div>
</mat-card-title> --> </mat-card-title> -->
<mat-card-subtitle style="text-align: center;"> <mat-card-subtitle style="text-align: center;">
<b> {{ 'resetPassword' | translate | uppercase }} </b> <div class="row" >
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<span class="resetSpan">{{ 'forgotYourPass' | translate }}</span>
</div>
</div>
</mat-card-subtitle> </mat-card-subtitle>
<mat-card-content> <mat-card-content>
<form *ngIf="!isNewPasswordScreen" [formGroup]="loginForm" (ngSubmit)="onVerifyOtp()"> <form *ngIf="!isNewPasswordScreen" [formGroup]="loginForm" (ngSubmit)="onVerifyOtp()">
<p> <p>
<mat-form-field> <mat-form-field style="margin-top: 30px;">
<input type="text" matInput placeholder="{{ 'email' | translate }}" <input type="text" matInput placeholder="{{ 'email' | translate }}"
[disabled]="isVisibleOtp" [disabled]="!isVisibleOtp"
formControlName="username" [(ngModel)]="user.username" style="width:100%"> formControlName="username" [(ngModel)]="user.username" style="width:100%">
</mat-form-field> </mat-form-field>
</p> </p>
@ -31,18 +64,18 @@
</p> </p>
<div class="button"> <div class="button">
<button *ngIf="!isVisibleOtp" mat-raised-button style="color: rgb(255, 255, 255);background-color: #212529;" type="button" <button *ngIf="!isVisibleOtp" mat-raised-button class="sendOTP" type="button"
(click)="sendOTP()"> {{ 'sendOtp' | translate }} (click)="sendOTP()"> {{ 'sendOtp' | translate }}
</button> </button>
<button *ngIf="isVisibleOtp" mat-raised-button style="color: rgb(255, 255, 255);background-color: #212529;" type="submit"> {{ <button *ngIf="isVisibleOtp" mat-raised-button class="verifyOtpButton" type="submit"> {{
'verifyOtp' | translate }} 'verifyOtp' | translate }}
</button> </button>
<button *ngIf="isVisibleOtp" mat-raised-button style="color: rgb(255, 255, 255);background-color: #212529;" type="button" <button *ngIf="isVisibleOtp" mat-raised-button class="resendOtpButton" type="button"
style="margin-left: 5px;" (click)="resendOTP()"> {{ 'resendOtp' | translate }} style="margin-left: 5px;" (click)="resendOTP()"> {{ 'resendOtp' | translate }}
</button> </button>
</div> </div>
<div style="text-align: center;padding-top: 20px;"> <div style="text-align: center;padding-top: 20px;">
<a [routerLink]="" style="color: #ae1c1c;text-decoration: auto;" (click)="goToLogin()">{{ 'login' | translate }}</a> <a [routerLink]="" style="color: #234442;font-family: nucleo;" (click)="goToLogin()">{{ 'login' | translate }}</a>
</div> </div>
</form> </form>
@ -64,17 +97,21 @@
</p> </p>
<div class="button"> <div class="button">
<button mat-raised-button style="color: rgb(255, 255, 255);background-color: #212529;" type="submit"> {{ 'changePassword' | <button mat-raised-button class="changePassButton" type="submit"> {{ 'changePassword' |
translate }} translate }}
</button> </button>
</div> </div>
<div style="text-align: center;padding-top: 20px;"> <div style="text-align: center;padding-top: 20px;">
<a [routerLink]="" style="color: #ae1c1c;text-decoration: auto;" (click)="goToLogin()">{{ 'login' | translate }}</a> <a [routerLink]="" style="color: #234442;font-family: nucleo;" (click)="goToLogin()">{{ 'login' | translate }}</a>
</div> </div>
</form> </form>
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>

@ -43,3 +43,108 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.sendOTP{
border: 1px solid #295754;
color: #ffffff;
background-color: #295754;
width: 100%;
border-radius: 30px;
height: 35px;
font-family: nucleo;
}
.sendOTP:hover{
background-color: #1c4441;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.backImg{
height: 70%;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
background-image: url('/assets/img/houstone_line1.jpg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
padding: 10px;
z-index: 1;
}
.mainCard{
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
border-radius: 10px;
top:-70px;
}
.resetSpan{
font-family: texg;
color: #1e3d3b;
font-size: xx-large;
float: center;
margin-top: 15px;
// margin-left: 64px;
}
.verifyOtpButton{
border: 1px solid #295754;
color: #ffffff;
background-color: #295754;
width: 54%;
border-radius: 30px;
height: 35px;
font-family: nucleo;
}
.verifyOtpButton:hover{
background-color: #1c4441;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.resendOtpButton{
border: 1px solid #295754;
color: #295754;
background-color: #ffffff;
// width: 100%;
border-radius: 30px;
height: 35px;
font-family: nucleo;
}
.resendOtpButton:hover{
background-color: #ebebeb;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.changePassButton{
border: 1px solid #295754;
color: #ffffff;
background-color: #295754;
width: 100%;
border-radius: 30px;
height: 35px;
font-family: nucleo;
}
.changePassButton:hover{
background-color: #1c4441;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.forgotImage{
background-image: url('/assets/img/forgot.jpg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 250px;
width: 250px;
}
@media screen and(max-width: 767px) {
.resetSpan {
font-size: large;
}
}

@ -19,6 +19,8 @@ export class ForgotPasswordComponent implements OnInit {
user: AuthenticationDto = new AuthenticationDto(); user: AuthenticationDto = new AuthenticationDto();
forgotCard:boolean = false
config = { config = {
allowNumbersOnly: true, allowNumbersOnly: true,
length: 6, length: 6,

@ -34,39 +34,54 @@
<div class="container" style="margin-top:20px;"> <div class="container" style="margin-top:20px;">
<div class="row"> <div class="row">
<!-- <div class="col-sm-4 col-md-4 col-lg-4 col-xl-4"></div> --> <!-- <div class="col-sm-4 col-md-4 col-lg-4 col-xl-4"></div> -->
<div class="col-12 col-sm-12 col-md-6 col-lg-5 col-xl-4"> <div class="col-12 col-sm-12 col-md-6 col-lg-5 col-xl-5">
<mat-card card="card-style"> <mat-card card="card-style" class="loginCard">
<mat-card-title> <mat-card-title>
<div class="row"> <div class="row">
<!-- <img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo"> --> <!-- <img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo"> -->
</div> </div>
</mat-card-title> </mat-card-title>
<mat-card-subtitle style="text-align: center;"> <mat-card-subtitle style="text-align: left;">
<b> {{ 'signIn' | translate | uppercase }} </b> <span class="loginSpan">{{ 'login.' | translate }}</span>
</mat-card-subtitle> </mat-card-subtitle>
<mat-card-content> <mat-card-content>
<form [formGroup]="loginForm" (ngSubmit)="onSubmit()"> <form [formGroup]="loginForm" (ngSubmit)="onSubmit()" class="form" style="width: 70%;margin-top:20px">
<p> <p>
<mat-form-field> <mat-form-field appearance="outline">
<mat-label>Email</mat-label>
<input type="text" matInput placeholder="{{ 'email' | translate }}" <input type="text" matInput placeholder="{{ 'email' | translate }}"
formControlName="username" [(ngModel)]="user.username" style="width:100%"> formControlName="username" [(ngModel)]="user.username" style="width:100%;border-bottom: 0px;">
</mat-form-field> </mat-form-field>
</p> </p>
<p style="margin-bottom: 0;"> <p style="margin-bottom: 0;">
<mat-form-field> <mat-form-field appearance="outline">
<input type="password" matInput placeholder="{{ 'password' | translate }}" <mat-label>Password</mat-label>
formControlName="password" [(ngModel)]="user.password" style="width:100%"> <input type="password" #x matInput placeholder="{{ 'password' | translate }}" (keyup.enter)="onSubmit()"
formControlName="password" [(ngModel)]="user.password" style="width:100%;border-bottom: 0px;">
<mat-icon matSuffix *ngIf="x.type=='password'" (click)="x.type='text'" class="eye-icon"><span class="material-icons-outlined">
visibility
</span></mat-icon>
<mat-icon matSuffix *ngIf="x.type=='text'" (click)="x.type='password'" class="eye-icon"><span class="material-icons-outlined">
visibility_off
</span></mat-icon>
</mat-form-field> </mat-form-field>
</p> </p>
<div style="text-align: right;margin-bottom: 20px;margin-top: -10px;"> <div class="row" style="text-align: left;margin-bottom: 20px;margin-top: 12px;">
<a (click)="goToForgotPassword()" style="font-size: small;color: #ae1c1c;text-decoration: auto;">{{'forgotPass' | translate}}</a>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" style="text-align: left;">
<span (click)="goToForgotPassword()" class="forgotSpan" >{{'forgotPass' | translate}}</span>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" style="text-align: right;">
<span mat-flat-button class="signUpButton" (click)="goToRegister()">Sign up</span>
</div>
</div> </div>
<div class="button"> <div class="button" style="margin-top: 40px;">
<button mat-raised-button style="color: rgb(255, 255, 255);background-color: #212529;width: 100%;" type="submit"> {{ 'login' | translate }} <button mat-raised-button class="loginButton" type="button" (click)="onSubmit()"> {{ 'login' | translate }}
<!-- <i class="bi bi-person-plus-fill"></i> --> <!-- <i class="bi bi-person-plus-fill"></i> -->
</button> </button>
</div> </div>
@ -77,9 +92,9 @@
<br> <br>
<div style="text-align: center;"> <!-- <div style="text-align: center;">
<p>No Account? <a (click)="goToRegister()" style="color: #ae1c1c;text-decoration: auto;">Create One</a></p> <p>No Account? <a (click)="goToRegister()" style="color: #ae1c1c;text-decoration: auto;">Create One</a></p>
</div> </div> -->
</form> </form>
</mat-card-content> </mat-card-content>
@ -89,7 +104,7 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<!-- <div class="footer" class="fixed-bottom"> <!-- <div class="footer" class="fixed-bottom">
<footer id="footer" style="background-color: #48746e; padding: 70px 0; color: #ffffff; font-size: 16px; bottom: 0;" class="py-3"> <footer id="footer" style="background-color: #48746e; padding: 70px 0; color: #ffffff; font-size: 16px; bottom: 0;" class="py-3">
@ -104,5 +119,7 @@
</footer> </footer>
</div> --> </div> -->
<div class="footer" class="fixed-bottom"></div>

@ -17,6 +17,12 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
margin: 100px 0px; margin: 100px 0px;
}
.loginCard{
box-shadow: 0 18px 20px rgba(0, 0, 0,0.2) !important;
border-radius: 17px;
} }
.mat-form-field { .mat-form-field {
@ -68,4 +74,84 @@ mat-card-content {
left: 0; left: 0;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
// background-color: aqua;
height: 70%;
background-image: url('/assets/img/houstone_line1.jpg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
padding: 10px;
z-index: 1;
}
@media (max-width: 767px) {
.form{
width: 85% !important;
}
}
.eye-icon{
cursor: pointer;
}
.c-wrapper {
position: relative;
z-index: 2; /* Set a higher z-index for the wrapper to overlay it over the footer */
margin: 0;
/* Add any other styling you want for the wrapper */
}
.loginSpan{
font-family: texg;
color: #1e3d3b;
font-size: xxx-large;
margin-left: 64px;
}
.forgotSpan{
font-size: small;
color: #234442;
text-decoration: auto;
cursor: pointer;
font-family: nucleo;
}
.signUpButton{
color: #ffffff;
background-color: #234442;
border-radius: 30px;
font-family: nucleo;
padding: 6px 20px 8px 19px;
cursor: pointer;
}
.signUpButton:hover{
background-color: #16312f;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.loginButton{
padding: 0;
border-radius: 16px !important;
height: 35px !important;
// width: 68px !important;
border: 1px solid #16312f;
float: center;
margin-top: 5px;
margin-bottom: 5px;
color: #16312f;
background-color: white;
// height: 37px;
border-radius: 9px;
font-family: nucleo;
width: 100%;
}
.loginButton:hover{
background-color: #ebeaea ;
box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2);
} }

@ -1,3 +1,6 @@
<div class="backImg">
<div class="c-wrapper" style="margin:0"> <div class="c-wrapper" style="margin:0">
<!-- <nav class="navbar navbar-expand-lg" style="padding: 16.5px;"> <!-- <nav class="navbar navbar-expand-lg" style="padding: 16.5px;">
@ -36,30 +39,30 @@
<div class="container" style="margin-top:20px;"> <div class="container" style="margin-top:20px;">
<div class="row"> <div class="row">
<!-- <div class="col-sm-4 col-md-4 col-lg-4 col-xl-4"></div> --> <!-- <div class="col-sm-4 col-md-4 col-lg-4 col-xl-4"></div> -->
<div class="col-12 col-sm-12 col-md-6 col-lg-7 col-xl-7"> <div class="col-12 col-sm-12 col-md-6 col-lg-5 col-xl-5">
<mat-card card="card-style"> <mat-card card="card-style" class="registerCard">
<mat-card-title> <mat-card-title>
<div class="row"> <div class="row">
<!-- <img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo"> --> <!-- <img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo"> -->
</div> </div>
</mat-card-title> </mat-card-title>
<mat-card-subtitle style="text-align: center;"> <mat-card-subtitle style="text-align: left;">
<b> {{ 'register' | translate | uppercase }} </b> <span class="loginSpan">{{ 'register' | translate }} </span>
</mat-card-subtitle> </mat-card-subtitle>
<mat-card-content> <mat-card-content>
<div class="row"> <div class="row">
<div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10"> <div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10" style="margin-top: 20px;">
<mat-form-field style="width: 100%"> <mat-form-field style="width: 100%">
<input matInput [(ngModel)]="this.userDetails.email" type="text" placeholder="{{ 'email' | translate }}"> <input matInput [(ngModel)]="this.userDetails.email" type="text" placeholder="{{ 'email' | translate }}">
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10" style="text-align: center;"> <div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10" style="text-align: center;margin-top: 20px;">
<button mat-raised-button (click)="sendOTP(otpValidation)" <button mat-raised-button (click)="sendOTP(otpValidation)"
style="color: darkred;">{{ 'generateOtp' | translate }}</button> class="verifyOtpButton">{{ 'generateOtp' | translate }}</button>
</div> </div>
</div> </div>
</mat-card-content> </mat-card-content>
@ -83,7 +86,7 @@
</div> </div>
<div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10" style="text-align: center;"> <div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10" style="text-align: center;">
<button mat-raised-button (click)="validation()" style="color: darkred;">{{ 'submit' | <button mat-raised-button (click)="validation()" class="submitButton">{{ 'submit' |
translate }}</button> translate }}</button>
</div> </div>
</div> </div>
@ -106,11 +109,11 @@
</div> </div>
</mat-card-title> </mat-card-title>
<mat-card-subtitle style="text-align: center;"> <mat-card-subtitle style="text-align: left;">
<b> {{ 'register' | translate | uppercase }} </b> <span class="loginSpan">{{ 'register' | translate }} </span>
</mat-card-subtitle> </mat-card-subtitle>
<mat-card-content> <mat-card-content>
<div class="row"> <div class="row" style="margin-top: 20px;">
<div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10"> <div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10">
<mat-form-field style="width: 100%"> <mat-form-field style="width: 100%">
@ -144,7 +147,7 @@
<div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10" <div class="col-10 col-sm-10 col-md-12 col-lg-10 col-xl-10"
style="text-align: center;"> style="text-align: center;">
<button mat-raised-button (click)="saveData()" style="color: darkred;">{{ 'register' | translate}}</button> <button mat-raised-button (click)="saveData()" class="saveButton">{{ 'save' | translate}}</button>
</div> </div>
</div> </div>
</mat-card-content> </mat-card-content>
@ -168,3 +171,5 @@
</div> </div>
</footer> </footer>
</div> --> </div> -->
</div>

@ -69,3 +69,70 @@
bottom: 0; bottom: 0;
width: 100%; width: 100%;
} }
.backImg{
height: 70%;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
background-image: url('/assets/img/houstone_line1.jpg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
padding: 10px;
z-index: 1;
}
.registerCard{
box-shadow: 0 18px 20px rgba(0, 0, 0,0.2) !important;
border-radius: 17px;
}
.loginSpan{
font-family: texg;
color: #1e3d3b;
font-size: xxx-large;
margin-left: 16px;
}
.verifyOtpButton{
border: 1px solid #295754;
color: #ffffff;
background-color: #295754;
width: 60%;
border-radius: 30px;
height: 35px;
font-family: nucleo;
}
.verifyOtpButton:hover{
background-color: #1c4441;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.saveButton{
border: 1px solid #295754;
color: #ffffff;
background-color: #295754;
width: 30%;
border-radius: 30px;
height: 35px;
font-family: nucleo;
}
.saveButton:hover{
background-color: #1c4441;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.submitButton{
border: 1px solid #295754;
color: #234442;
background-color: #ffffff;
width: 50%;
border-radius: 30px;
height: 35px;
font-family: nucleo;
}

@ -38,20 +38,22 @@ export class RegisterComponent implements OnInit {
} }
sendOTP(template) { sendOTP(template) {
if (this.userDetails.email && this._uiService.emailValidation(this.userDetails.email)) {
let body = { email: this.userDetails.email };
this._masterService.saveAllMasterData(apiUrl.registerOtp, body).then(res => {
this._uiService.toastMessage(this.errorTranslateService.translate("otpSendSuccessfully"));
this.openDialogbox(template) this.openDialogbox(template)
},err=>{
this._uiService.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi'));
}) // if (this.userDetails.email && this._uiService.emailValidation(this.userDetails.email)) {
} // let body = { email: this.userDetails.email };
else { // this._masterService.saveAllMasterData(apiUrl.registerOtp, body).then(res => {
this._uiService.toastMessage(this.errorTranslateService.translate("enterAValidEmailID")); // this._uiService.toastMessage(this.errorTranslateService.translate("otpSendSuccessfully"));
}
// this.openDialogbox(template)
// },err=>{
// this._uiService.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi'));
// })
// }
// else {
// this._uiService.toastMessage(this.errorTranslateService.translate("enterAValidEmailID"));
// }
} }
openDialogbox(templateRef) { openDialogbox(templateRef) {

@ -39,11 +39,19 @@
<!-- </nav> --> <!-- </nav> -->
<!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> --> <!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> -->
<br> <br id="headingBreak">
<div class="text-center mt-4"> <div class="text-center mt-4">
<h2 class="font-weight-bold " style="color: #5faca1;">Tender Details </h2> <h2 class="tenderHeading " >Tender Details </h2>
</div><br> <div class="row responsive">
<div class="col-3"></div>
<div class="col-3"></div>
<div class="col-5 ">
<button class="hide-on-print printButton" mat-raised-button (click)="print()" >Print <i class="fa fa-arrow-down" style="font-size: small;"></i></button>&nbsp;
</div>
<div class="col-1 "></div>
</div>
</div><br>
<div class="row d-flex justify-content-center "> <div class="row d-flex justify-content-center ">
<div class="col-sm-11"> <div class="col-sm-11">
@ -52,8 +60,8 @@
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-bordered"> <table class="table table-bordered some-element">
<thead class="table-dark"> <thead class="table-dark ">
<tr> <tr>
<th colspan="2">Basic Details</th> <th colspan="2">Basic Details</th>
</tr> </tr>
@ -305,66 +313,70 @@
<th colspan="12">Tenders Documents</th> <th colspan="12">Tenders Documents</th>
</tr> </tr>
</thead> </thead>
<tbody>
<tbody *ngIf="nitItemDocuments.length > 0">
<tr> <tr>
<th colspan="12" class="text-center" style="background-color: #b8b8b8;" >Drawings Document</th> <th colspan="12" class="text-center" style="background-color:#f0f0f0;">Notice</th>
</tr> </tr>
<tr style="text-align: center;">
<th colspan="3">Document Type</th>
<tr > <th colspan="3">Document Name</th>
<th colspan="12">Drawings <button mat-raised-button id="zipFile" class=" float-right btn-sm" (click)="goToView()"> <i class="bi bi-file-earmark-zip"></i> Download</button></th> <th colspan="3">Description</th>
<th colspan="3" class="hide-on-print">Download</th>
</tr> </tr>
<tr *ngFor="let document of nitItemDocuments let i = index">
<tr *ngFor="let document of drawingsDocuments"> <td colspan="3">{{document.documentTypeD.documentType}}</td>
<td colspan="12">{{document.description}}</td> <td colspan="3">{{document.docName}}</td>
<td colspan="3">{{document.description}}</td>
<td style="text-align: center;" class="hide-on-print"><button mat-raised-button class="DownloadNoticeButton hide-on-print" (click)="DownloadNIT(i)" ><i class="fa fa-arrow-down" style="font-size:large ;"></i></button></td>
</tr> </tr>
<!-- <tr class="hide-on-print">
<th colspan="12"><button mat-raised-button id="zipFile" class=" float-right btn-sm hide-on-print"
(click)="DownloadNIT()"> <i class="bi bi-file-earmark-zip"></i> Download</button></th>
</tr> -->
</tbody> </tbody>
<br>
<tbody> <tbody *ngIf="workItemDocuments.length > 0">
<tr> <tr>
<th colspan="12" class="text-center" style="background-color:#b8b8b8;" >Work Item Documents</th> <th colspan="12" class="text-center" style="background-color:#f0f0f0;" >Work Item Documents</th>
</tr> </tr>
<tr> <tr style="text-align: center;">
<th colspan="4">Document Type</th> <th colspan="3">Document Type</th>
<th colspan="4">Document Name</th> <th colspan="5">Document Name</th>
<th colspan="4">Description</th> <th colspan="4">Description</th>
</tr> </tr>
<tr *ngFor="let document of workItemDocuments"> <tr *ngFor="let document of workItemDocuments">
<td colspan="4">{{document.documentTypeD.documentType}}</td> <td colspan="3">{{document.documentTypeD.documentType}}</td>
<td colspan="4">{{document.docName}}</td> <td colspan="5">{{document.docName}}</td>
<td colspan="4">{{document.description}}</td> <td colspan="4">{{document.description}}</td>
</tr> </tr>
<tr> <tr class="hide-on-print">
<th colspan="12"><button mat-raised-button id="zipFile" class=" float-right btn-sm" (click)="goToView()"> <i class="bi bi-file-earmark-zip" ></i> Download </button> </th> <th colspan="12"><button mat-raised-button id="zipFile" class="hide-on-print DownloadZipButton" (click)="goToView()"> <i class="bi bi-file-earmark-zip" ></i> Download </button> </th>
</tr> </tr>
</tbody> </tbody>
<tbody>
<tbody *ngIf="drawingsDocuments.length > 0">
<tr> <tr>
<th colspan="12" class="text-center" style="background-color:#b8b8b8;" >Notice</th> <th colspan="12" class="text-center" style="background-color: #f0f0f0;" >Drawings Document</th>
</tr> </tr>
<tr>
<th colspan="4">Document Type</th>
<th colspan="4">Document Name</th> <tr class="hide-on-print">
<th colspan="4">Description</th> <th colspan="12">Drawings <button mat-raised-button id="zipFile" class="hide-on-print DownloadZipButton" (click)="goToView()"> <i class="bi bi-file-earmark-zip"></i> Download</button></th>
</tr> </tr>
<tr *ngFor="let document of nitItemDocuments">
<td colspan="4">{{document.documentTypeD.documentType}}</td> <tr *ngFor="let document of drawingsDocuments">
<td colspan="4">{{document.docName}}</td> <td colspan="12">{{document.description}}</td>
<td colspan="4">{{document.description}}</td>
</tr> </tr>
<tr>
<th colspan="12"><button mat-raised-button id="zipFile" class=" float-right btn-sm" (click)="DownloadNIT()"> <i class="bi bi-file-earmark-zip" ></i> Download </button> </th>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -379,7 +391,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr style="text-align: center;">
<th colspan="4">Document Type</th> <th colspan="4">Document Type</th>
<th colspan="4">Description</th> <th colspan="4">Description</th>
<th colspan="4">Document Format</th> <th colspan="4">Document Format</th>

@ -6,8 +6,8 @@
margin-left: auto; margin-left: auto;
top: 10px; top: 10px;
position: relative; position: relative;
} }
.container-fluid2{ .container-fluid2{
width: 100%; width: 100%;
padding-right: 15px; padding-right: 15px;
padding-left: 15px; padding-left: 15px;
@ -15,33 +15,190 @@
margin-left: auto; margin-left: auto;
top: -1px; top: -1px;
position: relative; position: relative;
} }
.table td { @media print {
word-break: break-word; .hide-on-print {
display: none;
} }
.nav-link:hover { }
.nav-link:hover {
color: rgb(255, 0, 0); color: rgb(255, 0, 0);
}
// #zipFile:hover {
// color: rgb(255, 0, 0);
// cursor: pointer;
// }
// .container-responsive {
// min-height: 100vh;
// position: relative;
// }
// #footer {
// background-color: #3a8379;
// padding: 20px;
// color: #ffffff;
// position: absolute;
// bottom: 0;
// width: 100%;
// }
// --------------------------------------------------------------------------------------------
thead{
// background-color: #5faca1; color: aliceblue;
padding: 5px;
color: #505050;
font-weight: 900;
font-size: medium;
background-color: #f0f0f0;
font-family: nucleo;
}
mat-table {
padding-top: 10px !important;
// table-layout: fixed;
width: 100%;
display: table;
overflow-x: scroll;
.table-headers {
padding: 5px;
color: #505050;
font-weight: 900;
font-size: medium;
background-color: #f0f0f0;
font-family: nucleo;
} }
#zipFile:hover {
color: rgb(255, 0, 0); .table-headers:hover {
cursor: pointer; background-color: #ececec;
color: #46AC9E;
}
.table-content {
padding: 5px;
overflow-wrap: inherit;
font-family: nucleo;
}
.table-column {
width: 100%;
} }
}
.table td {
word-break: break-word;
padding: 5px;
overflow-wrap: inherit;
font-family: nucleo;
}
.table th {
font-family: texg;
color: #353535;
}
.tenderHeading{
font-family: texg;
color: #353535;
}
.printButton {
float: right;
margin-top: 5px;
margin-bottom: 5px;
background-color: white;
color: #424242;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 17%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
// .container-responsive {
// min-height: 100vh;
// position: relative;
// }
// #footer {
// background-color: #3a8379;
// padding: 20px;
// color: #ffffff;
// position: absolute;
// bottom: 0;
// width: 100%;
// }
thead{ }
background-color:#48746e; color: aliceblue;
.printButton:hover {
background-color: #ececec;
color: #46AC9E;
}
.DownloadZipButton {
float: right;
margin-top: 5px;
margin-bottom: 5px;
background-color: white;
color: #424242;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 17%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.DownloadZipButton:hover {
background-color: #ececec;
color: #46AC9E;
}
.DownloadNoticeButton {
// float: right;
// margin-top: 5px;
// margin-bottom: 5px;
background-color: white;
// color: #424242;
color: #5faca1;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 17%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.DownloadNoticeButton:hover {
background-color: #ececec;
color: #303030;
}
@media screen and (max-width: 768px) {
/* Adjust font size for smaller screens */
.DownloadZipButton {
font-size: 14px;
}
}
@media screen and (max-width: 480px) {
/* Further adjustments for even smaller screens */
.DownloadZipButton {
font-size: 12px;
}
}
@media print {
.hide-on-print {
display: none;
}
.some-element {
border: 1px solid black !important;
page-break-inside: avoid; /* Prevent element from breaking across pages */
}
}
.some-element {
border: 1px solid black !important;
page-break-inside: avoid; /* Prevent element from breaking across pages */
} }

@ -5,7 +5,7 @@ import { apiUrl } from 'src/app/_providers/_resources/api-url.properties';
import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service';
import { MasterService } from 'src/app/_providers/_services/master.service'; import { MasterService } from 'src/app/_providers/_services/master.service';
import { UiService } from 'src/app/_providers/_services/ui.service'; import { UiService } from 'src/app/_providers/_services/ui.service';
import { environment } from 'src/environments/environment'; import { environment } from 'src/environments/environment.prod';
@Component({ @Component({
selector: 'app-view', selector: 'app-view',
@ -44,6 +44,7 @@ getData(){
this.tenderData = res this.tenderData = res
this.tenderDocuments = this.tenderData['tenderDoc'] this.tenderDocuments = this.tenderData['tenderDoc']
console.log("data",this.tenderDocuments); console.log("data",this.tenderDocuments);
this.filterDataByCategory();
}) })
} }
@ -68,6 +69,10 @@ filterDataByCategory() {
window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact';
} }
print(): void {
window.print();
}
DownloadDrawingsZIP(){ DownloadDrawingsZIP(){
const id = this.tenderId; const id = this.tenderId;
this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs,id).then((res)=>{ this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs,id).then((res)=>{
@ -99,14 +104,43 @@ filterDataByCategory() {
}) })
} }
DownloadNIT(){ DownloadNIT(index: number) {
const id = this.tenderId; const id = this.tenderId;
this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod,id).then((res)=>{ console.log(index);
console.log(this.nitItemDocuments[index].docName);
this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod, `${this.tenderId}/${this.nitItemDocuments[index].docName}`).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.noticeDownlaod}/${this.tenderId}/${this.nitItemDocuments[index].docName}`);
// setTimeout(() => {
// newWindow.close();
// }, 10000);
}
if (err.status == 404) {
alert('No Notice 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.noticeDownlaod}/${id}`);
// setTimeout(() => {
// newWindow.close();
// }, 100);
}
}) })
} }
// downloadWITZip() { // downloadWITZip() {
// console.log('clicked'); // console.log('clicked');
// const id = this.tenderId; // const id = this.tenderId;

@ -3,7 +3,7 @@
<!-- <mat-progress-bar *ngIf="loading" mode="indeterminate" color="warn"></mat-progress-bar> --> <!-- <mat-progress-bar *ngIf="loading" mode="indeterminate" color="warn"></mat-progress-bar> -->
<br> <br>
<div class="text-center mt-4"> <div class="text-center mt-4">
<h2 class="font-weight-bold " style="color: #5faca1;">Tender Details </h2> <h2 class="tenderHeading" >Tender Details </h2>
</div> </div>
<div class="container"> <div class="container">
@ -13,7 +13,7 @@
<mat-tab-group class="custom-tab-group" color="warn"> <mat-tab-group class="custom-tab-group" color="warn">
<mat-tab label="Basic Details " [disabled]="true"> <br><br> <mat-tab label="Basic Details" [disabled]="true"> <br><br>
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="form-row"> <div class="form-row">
@ -494,7 +494,7 @@
</div><br> </div><br>
<div class="form-row"> <div class="form-row">
<div class="form-group col-md-12"> <div class="form-group col-md-12">
<button class="btn btn-light float-left font-weight-bold" (click)="prevTab()"><i <button class="btn btn-light float-left font-weight-bold " (click)="prevTab()"><i
class="bi bi-arrow-left-circle"></i> Prev class="bi bi-arrow-left-circle"></i> Prev
</button> </button>
<button class="btn btn-light float-right font-weight-bold" <button class="btn btn-light float-right font-weight-bold"
@ -584,7 +584,7 @@
</tr> </tr>
<tr> <tr>
<td colspan="12" class="text-right"> <td colspan="12" class="text-right">
<button class="btn btn-outline-secondary btn-sm" <button class="Buttons" mat-raised-button
(click)="addNewcoverDocRow()">Add Row</button> (click)="addNewcoverDocRow()">Add Row</button>
</td> </td>
</tr> </tr>
@ -649,27 +649,30 @@
</mat-tab> </mat-tab>
<mat-tab label="Tender Documents" [disabled]="true"> <br><br> <mat-tab label="Tender Documents" [disabled]="false"> <br><br>
<div class="col-md-12"> <div class="col-md-12">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-bordered"> <table class="table table-bordered">
<tbody> <tbody>
<tr> <tr>
<th colspan="4" style="background-color: #b8b8b8;"></th> <th colspan="4" style="background-color: #b8b8b8;"></th>
<th colspan="4" class="text-center" style="background-color: #b8b8b8;"> <th colspan="4" class="text-center" style="background-color: #b8b8b8;">
Drawing Document </th> Notice </th>
<th colspan="4" style="background-color: #b8b8b8;"><mat-slide-toggle <th colspan="4" style="background-color: #b8b8b8;">
matTooltip=" Slide to Add Drawing Documents" aria-label="Button that displays a tooltip when focused or hovered over" <mat-slide-toggle matTooltip="Slide to Add Notice"
(change)="addDrawingToggle($event)" (change)="addNoticeToggle($event)"
class="float-right warn"></mat-slide-toggle> class="float-right"></mat-slide-toggle></th>
</th>
</tr> </tr>
<tr> <tr>
<th colspan="4" class="col-sm-4" style="text-align: center;">Upload <th colspan="4" class="col-sm-4" style="text-align: center;">Upload
Files</th> Files</th>
@ -678,31 +681,30 @@
<th colspan="4" class="col-sm-4" style="text-align: center;">Description <th colspan="4" class="col-sm-4" style="text-align: center;">Description
</th> </th>
</tr> </tr>
<tr *ngFor="let drawDOC of drawingsDocuments; let i = index"> <tr *ngFor="let nitDoc of nitDocuments; let i = index">
<td colspan="4"> <td colspan="4">
<div class="input-group"> <div class="input-group">
<mat-form-field class="columns" appearance="outline" <mat-form-field class="columns" appearance="outline"
style="height: 15px;margin-top: -10px;width:90%;"> style="height: 15px;margin-top: -10px;width:90%;">
<mat-label <mat-label
*ngIf="drawingsDocuments[i].file; else assetImageLabel"> *ngIf="nitDocuments[i].file; else assetImageLabel">
{{drawingsDocuments[i].file}}</mat-label> {{nitDocuments[i].file}}</mat-label>
<ng-template #assetImageLabel> <ng-template #assetImageLabel>
<mat-label> {{ 'assetImagePath' | translate }} <mat-label> {{ 'assetImagePath' | translate }}
</mat-label> </mat-label>
</ng-template> </ng-template>
<input matInput readonly <input matInput readonly [(ngModel)]="nitDocuments[i].file"
[(ngModel)]="drawingsDocuments[i].file"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<button mat-icon-button matSuffix <button mat-icon-button matSuffix
(click)="assetFileInput.click()"> (click)="assetFileInput.click()">
<mat-icon>attach_file</mat-icon> <mat-icon>attach_file</mat-icon>
</button> </button>
<input hidden (change)="UploadDrawingFiles($event,i)" <input hidden (change)="UploadNoticeFiles($event,i,'NIT')"
#assetFileInput type="file" id="file"> #assetFileInput type="file" id="file">
</mat-form-field> </mat-form-field>
<!-- <input type="file" class="form-control" <!-- <input type="file" class="form-control"
[(ngModel)]="drawingsDocuments[i].file" [(ngModel)]="nitDocuments[i].file"
(change)="UploadDrawingFiles($event,i)" (change)="UploadDrawingFiles($event,i)"
(change)="readUrl($event)" (change)="readUrl($event)"
[ngModelOptions]="{standalone: true}"> --> [ngModelOptions]="{standalone: true}"> -->
@ -717,23 +719,23 @@
style="height: 15px;margin-top: -10px;width:90%;"> style="height: 15px;margin-top: -10px;width:90%;">
<mat-label> Document Type</mat-label> <mat-label> Document Type</mat-label>
<mat-select style="border: none; padding: 0; width: 100%;" <mat-select style="border: none; padding: 0; width: 100%;"
[(ngModel)]="drawingsDocuments[i].docType" [(ngModel)]="nitDocuments[i].docType"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<mat-option style="opacity: .5;"> Select Document Type <mat-option style="opacity: .5;"> Select Document Type
</mat-option> </mat-option>
<mat-option <mat-option
*ngFor="let documentType of filteredDocumentDrawingTypeLov " *ngFor="let documentType of filteredDocumentNITTypeLov "
[value]="documentType.id"> [value]="documentType.id">
{{documentType.documentType}} {{documentType.documentType}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<!-- <select class="form-control" id="documentType" <!-- <select class="form-control" id="documentType"
[(ngModel)]="drawingsDocuments[i].docType" [(ngModel)]="nitDocuments[i].docType"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<option [value]="documentType.id" <option [value]="documentType.id"
*ngFor="let documentType of filteredDocumentDrawingTypeLov "> *ngFor="let documentType of filteredDocumentNITTypeLov ">
{{documentType.documentType}} {{documentType.documentType}}
</option> </option>
</select> --> </select> -->
@ -741,11 +743,10 @@
<td colspan="4"> <td colspan="4">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" <input type="text" class="form-control"
[(ngModel)]="drawingsDocuments[i].description" [(ngModel)]="nitDocuments[i].description"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<button class="btn btn-outline-secondary delete-btn" <button class="btn btn-outline-secondary delete-btn"
type="button" type="button" (click)="deleteNITRow(nitDoc.tender_id,i)">
(click)="deleteDrawingsRow(drawDOC.tender_id,i)">
<i class="bi bi-trash"></i> <i class="bi bi-trash"></i>
</button> </button>
</div> </div>
@ -753,8 +754,8 @@
</tr> </tr>
<tr> <tr>
<td colspan="12" class="text-right"> <td colspan="12" class="text-right">
<button class="btn btn-outline-secondary btn-sm" <button class="Buttons" mat-raised-button
(click)="addNewDrawingRow()">Add Row</button> (click)="addNewNitDocRow()">Add Row</button>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -763,80 +764,77 @@
<tbody> <tbody>
<tr> <tr>
<th colspan="4" style="background-color: #b8b8b8;"></th> <th colspan="12" class="text-center" style="background-color:#b8b8b8;">
<th colspan="4" class="text-center" style="background-color: #b8b8b8;"> Work Item Documents
Notice </th>
<th colspan="4" style="background-color: #b8b8b8;">
<mat-slide-toggle matTooltip="Slide to Add Notice"
(change)="addNoticeToggle($event)"
class="float-right"></mat-slide-toggle></th>
</tr> </tr>
<tr> <tr>
<th colspan="4" class="col-sm-4" style="text-align: center;">Upload <th colspan="4" class="col-sm-2"
Files</th> style="padding-bottom: 0;padding-right: 0;text-align: center;">
<th colspan="4" class="col-sm-4" style="text-align: center;">Document Upload Files</th>
Type</th> <th colspan="4" class="col-sm-5"
<th colspan="4" class="col-sm-4" style="text-align: center;">Description style="min-width: 250px;text-align: center;">Document Type</th>
</th> <th colspan="4" class="col-sm-5"
style="min-width: 250px;text-align: center;">Description</th>
</tr> </tr>
<tr *ngFor="let nitDoc of nitDocuments; let i = index"> <tr *ngFor="let workItemDoc of workItemDocuments; let i = index">
<td colspan="4"> <td colspan="4">
<div class="input-group"> <div class="input-group">
<mat-form-field class="columns" appearance="outline" <mat-form-field class="columns" appearance="outline"
style="height: 15px;margin-top: -10px;width:90%;"> style="height: 15px;margin-top: -10px;width: 90%;">
<mat-label <mat-label
*ngIf="nitDocuments[i].file; else assetImageLabel"> *ngIf="workItemDocuments[i].file; else assetImageLabel">
{{nitDocuments[i].file}}</mat-label> {{workItemDocuments[i].file}}</mat-label>
<ng-template #assetImageLabel> <ng-template #assetImageLabel>
<mat-label> {{ 'assetImagePath' | translate }} <mat-label> {{ 'assetImagePath' | translate }}
</mat-label> </mat-label>
</ng-template> </ng-template>
<input matInput readonly [(ngModel)]="nitDocuments[i].file" <input matInput readonly
[(ngModel)]="workItemDocuments[i].file"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<button mat-icon-button matSuffix <button mat-icon-button matSuffix
(click)="assetFileInput.click()"> (click)="assetFileInput.click()">
<mat-icon>attach_file</mat-icon> <mat-icon>attach_file</mat-icon>
</button> </button>
<input hidden (change)="UploadNoticeFiles($event,i,'NIT')" <input hidden (change)="UploadFiles($event,i,'WID')"
#assetFileInput type="file" id="file"> #assetFileInput type="file" id="file">
</mat-form-field> </mat-form-field>
<!-- <input type="file" class="form-control" <!-- <input type="file" class="form-control"
[(ngModel)]="nitDocuments[i].file" [disabled]="workItemDoc.isUploaded"
(change)="UploadDrawingFiles($event,i)" [(ngModel)]="workItemDocuments[i].file"
(change)="readUrl($event)" (change)="UploadFiles($event,i,'WID')"
[ngModelOptions]="{standalone: true}"> --> [ngModelOptions]="{standalone: true}"> -->
<!-- <button class="btn btn-outline-secondary delete-btn" type="button"> <!-- <button class="btn btn-outline-secondary delete-btn" type="button" [disabled]="workItemDoc.isUploaded">
<i class="bi bi-cloud-upload"></i> <i class="bi bi-cloud-upload"></i>
</button> --> </button> -->
</div> </div>
</td> </td>
<td colspan="4"> <td colspan="4">
<mat-form-field appearance="outline" class="columns" <mat-form-field appearance="outline" class="columns"
style="height: 15px;margin-top: -10px;width:90%;"> style="height: 15px;margin-top: -10px;width:90%;">
<mat-label> Document Type</mat-label> <mat-label> Document Type</mat-label>
<mat-select style="border: none; padding: 0; width: 100%;" <mat-select style="border: none; padding: 0; width: 100%;"
[(ngModel)]="nitDocuments[i].docType" [(ngModel)]="workItemDocuments[i].docType"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<mat-option style="opacity: .5;"> Select Document Type <mat-option style="opacity: .5;"> Select Document Type
</mat-option> </mat-option>
<mat-option <mat-option
*ngFor="let documentType of filteredDocumentNITTypeLov " *ngFor="let documentType of filteredDocumentTypeLov"
[value]="documentType.id"> [value]="documentType.id">
{{documentType.documentType}} {{documentType.documentType}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<!-- <select class="form-control" id="documentType" <!-- <select class="form-control" id="documentType"
[(ngModel)]="nitDocuments[i].docType" [(ngModel)]="workItemDocuments[i].docType"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<option [value]="documentType.id" <option [value]="documentType.id"
*ngFor="let documentType of filteredDocumentNITTypeLov "> *ngFor="let documentType of filteredDocumentTypeLov">
{{documentType.documentType}} {{documentType.documentType}}
</option> </option>
</select> --> </select> -->
@ -844,10 +842,11 @@
<td colspan="4"> <td colspan="4">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" <input type="text" class="form-control"
[(ngModel)]="nitDocuments[i].description" [(ngModel)]="workItemDocuments[i].description"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<button class="btn btn-outline-secondary delete-btn" <button class="btn btn-outline-secondary delete-btn"
type="button" (click)="deleteNITRow(nitDoc.tender_id,i)"> type="button"
(click)="deleteWIDRow(workItemDoc.tender_id,i)">
<i class="bi bi-trash"></i> <i class="bi bi-trash"></i>
</button> </button>
</div> </div>
@ -855,87 +854,94 @@
</tr> </tr>
<tr> <tr>
<td colspan="12" class="text-right"> <td colspan="12" class="text-right">
<button class="btn btn-outline-secondary btn-sm" <!-- <button class="btn btn-outline-secondary btn-sm" type="button" (click)="UploadFiles(this.tenderData.tenderId)">Upload
(click)="addNewNitDocRow()">Add Row</button> <i class="bi bi-cloud-upload"></i>
</button> -->
&nbsp;&nbsp;
<button class="Buttons" mat-raised-button
(click)="addNewWorkItemDocRow()">Add Row</button>
</td> </td>
</tr> </tr>
</tbody> </tbody>
<tbody>
<tr>
<th colspan="4" style="background-color: #b8b8b8;"></th>
<th colspan="4" class="text-center" style="background-color: #b8b8b8;">
Drawing Document </th>
<th colspan="4" style="background-color: #b8b8b8;"><mat-slide-toggle
matTooltip=" Slide to Add Drawing Documents" aria-label="Button that displays a tooltip when focused or hovered over"
(change)="addDrawingToggle($event)"
class="float-right warn"></mat-slide-toggle>
</th>
<tbody>
<tr>
<th colspan="12" class="text-center" style="background-color:#b8b8b8;">
Work Item Documents
</tr> </tr>
<tr> <tr>
<th colspan="4" class="col-sm-2" <th colspan="4" class="col-sm-4" style="text-align: center;">Upload
style="padding-bottom: 0;padding-right: 0;text-align: center;"> Files</th>
Upload Files</th> <th colspan="4" class="col-sm-4" style="text-align: center;">Document
<th colspan="4" class="col-sm-5" Type</th>
style="min-width: 250px;text-align: center;">Document Type</th> <th colspan="4" class="col-sm-4" style="text-align: center;">Description
<th colspan="4" class="col-sm-5" </th>
style="min-width: 250px;text-align: center;">Description</th>
</tr> </tr>
<tr *ngFor="let workItemDoc of workItemDocuments; let i = index"> <tr *ngFor="let drawDOC of drawingsDocuments; let i = index">
<td colspan="4"> <td colspan="4">
<div class="input-group"> <div class="input-group">
<mat-form-field class="columns" appearance="outline" <mat-form-field class="columns" appearance="outline"
style="height: 15px;margin-top: -10px;width: 90%;"> style="height: 15px;margin-top: -10px;width:90%;">
<mat-label <mat-label
*ngIf="workItemDocuments[i].file; else assetImageLabel"> *ngIf="drawingsDocuments[i].file; else assetImageLabel">
{{workItemDocuments[i].file}}</mat-label> {{drawingsDocuments[i].file}}</mat-label>
<ng-template #assetImageLabel> <ng-template #assetImageLabel>
<mat-label> {{ 'assetImagePath' | translate }} <mat-label> {{ 'assetImagePath' | translate }}
</mat-label> </mat-label>
</ng-template> </ng-template>
<input matInput readonly <input matInput readonly
[(ngModel)]="workItemDocuments[i].file" [(ngModel)]="drawingsDocuments[i].file"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<button mat-icon-button matSuffix <button mat-icon-button matSuffix
(click)="assetFileInput.click()"> (click)="assetFileInput.click()">
<mat-icon>attach_file</mat-icon> <mat-icon>attach_file</mat-icon>
</button> </button>
<input hidden (change)="UploadFiles($event,i,'WID')" <input hidden (change)="UploadDrawingFiles($event,i)"
#assetFileInput type="file" id="file"> #assetFileInput type="file" id="file">
</mat-form-field> </mat-form-field>
<!-- <input type="file" class="form-control" <!-- <input type="file" class="form-control"
[disabled]="workItemDoc.isUploaded" [(ngModel)]="drawingsDocuments[i].file"
[(ngModel)]="workItemDocuments[i].file" (change)="UploadDrawingFiles($event,i)"
(change)="UploadFiles($event,i,'WID')" (change)="readUrl($event)"
[ngModelOptions]="{standalone: true}"> --> [ngModelOptions]="{standalone: true}"> -->
<!-- <button class="btn btn-outline-secondary delete-btn" type="button" [disabled]="workItemDoc.isUploaded"> <!-- <button class="btn btn-outline-secondary delete-btn" type="button">
<i class="bi bi-cloud-upload"></i> <i class="bi bi-cloud-upload"></i>
</button> --> </button> -->
</div> </div>
</td> </td>
<td colspan="4">
<td colspan="4">
<mat-form-field appearance="outline" class="columns" <mat-form-field appearance="outline" class="columns"
style="height: 15px;margin-top: -10px;width:90%;"> style="height: 15px;margin-top: -10px;width:90%;">
<mat-label> Document Type</mat-label> <mat-label> Document Type</mat-label>
<mat-select style="border: none; padding: 0; width: 100%;" <mat-select style="border: none; padding: 0; width: 100%;"
[(ngModel)]="workItemDocuments[i].docType" [(ngModel)]="drawingsDocuments[i].docType"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<mat-option style="opacity: .5;"> Select Document Type <mat-option style="opacity: .5;"> Select Document Type
</mat-option> </mat-option>
<mat-option <mat-option
*ngFor="let documentType of filteredDocumentTypeLov" *ngFor="let documentType of filteredDocumentDrawingTypeLov "
[value]="documentType.id"> [value]="documentType.id">
{{documentType.documentType}} {{documentType.documentType}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<!-- <select class="form-control" id="documentType" <!-- <select class="form-control" id="documentType"
[(ngModel)]="workItemDocuments[i].docType" [(ngModel)]="drawingsDocuments[i].docType"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<option [value]="documentType.id" <option [value]="documentType.id"
*ngFor="let documentType of filteredDocumentTypeLov"> *ngFor="let documentType of filteredDocumentDrawingTypeLov ">
{{documentType.documentType}} {{documentType.documentType}}
</option> </option>
</select> --> </select> -->
@ -943,11 +949,11 @@
<td colspan="4"> <td colspan="4">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" <input type="text" class="form-control"
[(ngModel)]="workItemDocuments[i].description" [(ngModel)]="drawingsDocuments[i].description"
[ngModelOptions]="{standalone: true}"> [ngModelOptions]="{standalone: true}">
<button class="btn btn-outline-secondary delete-btn" <button class="btn btn-outline-secondary delete-btn"
type="button" type="button"
(click)="deleteWIDRow(workItemDoc.tender_id,i)"> (click)="deleteDrawingsRow(drawDOC.tender_id,i)">
<i class="bi bi-trash"></i> <i class="bi bi-trash"></i>
</button> </button>
</div> </div>
@ -955,13 +961,8 @@
</tr> </tr>
<tr> <tr>
<td colspan="12" class="text-right"> <td colspan="12" class="text-right">
<!-- <button class="btn btn-outline-secondary btn-sm" type="button" (click)="UploadFiles(this.tenderData.tenderId)">Upload <button class="Buttons" mat-raised-button
<i class="bi bi-cloud-upload"></i> (click)="addNewDrawingRow()">Add Row</button>
</button> -->
&nbsp;&nbsp;
<button class="btn btn-outline-secondary btn-sm"
(click)="addNewWorkItemDocRow()">Add Row</button>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -976,10 +977,10 @@
<br> <br>
<div class="form-row"> <div class="form-row">
<div class="form-group col-md-12"> <div class="form-group col-md-12">
<button class="btn btn-light float-left font-weight-bold" (click)="prevTab()"><i <!-- <button class="btn btn-light float-left font-weight-bold" (click)="prevTab()"><i
class="bi bi-arrow-left-circle"></i> Prev class="bi bi-arrow-left-circle"></i> Prev
</button> </button> -->
<button class="btn btn-outline-primary float-right font-weight-bold" <button class="ButtonSubmit float-right " mat-raised-button
(click)="TendersDocuments()">Submit Tender (click)="TendersDocuments()">Submit Tender
<i class="bi bi-arrow-right-circle"></i> <i class="bi bi-arrow-right-circle"></i>
</button> </button>

@ -18,9 +18,15 @@
} }
::ng-deep .custom-tab-group .mat-tab-label { ::ng-deep .custom-tab-group .mat-tab-label {
color: rgb(0, 0, 0); // color: rgb(0, 0, 0);
text-transform: none; text-transform: none;
min-width: 120px; /* adjust the value as per your requirements */ min-width: 120px;
padding: 5px;
color: #505050;
font-weight: 700;
font-size: small;
background-color: #f0f0f0;
font-family: nucleo;
} }
@ -43,3 +49,75 @@
.element-with-tooltip { .element-with-tooltip {
cursor: pointer; /* Set the cursor style to pointer for the element */ cursor: pointer; /* Set the cursor style to pointer for the element */
} }
.tenderHeading{
font-family: texg;
//color: #353535;
}
label
{
font-family: texg;
color: #262627;
}
input{
overflow-wrap: inherit;
font-family: nucleo;
}
.form-control{
font-family: nucleo;
}
// .input-style{
// font-family: nucleo;
// }
.Buttons {
float: right;
margin-top: 5px;
margin-bottom: 5px;
background-color: white;
color: #424242;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 17%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
th,td{
font-family: nucleo;
}
.Buttons:hover {
background-color: #ececec;
color: #46AC9E;
}
.ButtonSubmit {
float: right;
margin-top: 5px;
margin-bottom: 5px;
background-color: #ececec;
color: #46AC9E;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 17%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.ButtonSubmit:hover {
background-color: #46AC9E;
color: #ececec;
}

@ -53,6 +53,9 @@ export class AddTendersComponent implements OnInit {
newDRWROW: boolean = false; newDRWROW: boolean = false;
newCvrROW: boolean = false; newCvrROW: boolean = false;
id: number; id: number;
disableUploadButton: boolean;
userID: string;
isFileNameDuplicate: boolean;
constructor(private router: Router, constructor(private router: Router,
private _masterService : MasterService, private _masterService : MasterService,
@ -64,6 +67,7 @@ export class AddTendersComponent implements OnInit {
{ {
this.seculevel = localStorage.getItem('seculevel') this.seculevel = localStorage.getItem('seculevel')
this.userID = localStorage.getItem('userId')
this.tenderData = new TenderDetailDto(); this.tenderData = new TenderDetailDto();
this.tenderID = +this.route.snapshot.paramMap.get('id'); this.tenderID = +this.route.snapshot.paramMap.get('id');
this.getData() this.getData()
@ -120,7 +124,14 @@ export class AddTendersComponent implements OnInit {
console.log("this.workItemDocuments===",this.workItemDocuments); console.log("this.workItemDocuments===",this.workItemDocuments);
} }
// if(res.fileName.length > 0){
// this.disableUploadButton = false
// }else{
// this.disableUploadButton = true
// }
}) })
} }
@ -214,6 +225,7 @@ export class AddTendersComponent implements OnInit {
let newRow = Object.assign({}, lastRow); let newRow = Object.assign({}, lastRow);
newRow.documentCategory = 'NIT' newRow.documentCategory = 'NIT'
newRow.crud = 'I' newRow.crud = 'I'
newRow.userId = this.userID
this.nitDocuments.push(newRow); this.nitDocuments.push(newRow);
console.log('===this.nitDocuments===',this.nitDocuments); console.log('===this.nitDocuments===',this.nitDocuments);
} }
@ -228,6 +240,7 @@ export class AddTendersComponent implements OnInit {
let newRow = Object.assign({}, lastRow); let newRow = Object.assign({}, lastRow);
newRow.documentCategory = 'D' newRow.documentCategory = 'D'
newRow.crud = 'I' newRow.crud = 'I'
newRow.userId = this.userID
this.drawingsDocuments.push(newRow); this.drawingsDocuments.push(newRow);
console.log('===this.drawingsDocuments===',this.drawingsDocuments); console.log('===this.drawingsDocuments===',this.drawingsDocuments);
@ -243,8 +256,11 @@ export class AddTendersComponent implements OnInit {
const newRow = Object.assign({}, lastRow); const newRow = Object.assign({}, lastRow);
newRow.documentCategory = 'WID' newRow.documentCategory = 'WID'
newRow.crud = 'I' newRow.crud = 'I'
newRow.userId = this.userID
this.workItemDocuments.push(newRow); this.workItemDocuments.push(newRow);
this.newDRWROW = true this.newDRWROW = true
console.log(this.workItemDocuments);
} }
@ -262,6 +278,13 @@ export class AddTendersComponent implements OnInit {
UploadFiles(event,i,type){ UploadFiles(event,i,type){
if(this.workItemDocuments[i].file){
this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"),4000,false);
}else{
this.selectedFiles = event.target.files; this.selectedFiles = event.target.files;
let file = event.target.files[0] let file = event.target.files[0]
const fd = new FormData(); const fd = new FormData();
@ -286,42 +309,88 @@ export class AddTendersComponent implements OnInit {
this.workItemDocuments[i].file = res.fileName this.workItemDocuments[i].file = res.fileName
this.workItemDocuments[i].documentSize =res.fileSizeKB; this.workItemDocuments[i].documentSize =res.fileSizeKB;
} }
}) })}
} }
UploadNoticeFiles(event,i,type){ // UploadNoticeFiles(event,i,type){
this.selectedFiles = event.target.files;
let file = event.target.files[0]
const fd = new FormData();
fd.append('file', file);
// if(this.nitDocuments[i].file){
// this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"),4000,false);
// }else{
if(file && this.id) // for (let j = 0; j < this.nitDocuments.length; j++) {
this._masterService.postMasterData(apiUrl.nitUploadDoc,fd,this.id).then((res)=>{
console.log("res1===",res.fileName); // this.selectedFiles = event.target.files;
console.log("res2===",res.fileSizeKB); // let file = event.target.files[0]
console.log('======= this.tenderData.tenderDocs==========', this.tenderData.tenderDoc); // const fd = new FormData();
// fd.append('file', file);
// if (this.nitDocuments[j].docName === file.name) {
// console.log("this.nitDocuments[j].docName",this.nitDocuments[j].docName);
// this._ui.toastMessage(this.errorTranslateService.translate("documentnamecantbesame"),4000,false);
// file.name = "";
// }
// if(file && this.id){
// this._masterService.postMasterData(apiUrl.nitUploadDoc,fd,this.id).then((res)=>{
// if(type == 'NIT'){
// this.nitDocuments[i].docName = res.fileName
// this.nitDocuments[i].file = res.fileName
// this.nitDocuments[i].documentSize =res.fileSizeKB;
// }
// })}
// }
// }
// }
UploadNoticeFiles(event: any, i: number, type: string) {
if (this.nitDocuments[i].file) {
this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false);
return;
}
let file: File | undefined = event.target.files[0];
if (!file) {
return;
}
const isFileNameDuplicate = this.nitDocuments.some((doc) => doc.docName === file!.name);
if (isFileNameDuplicate) {
this._ui.toastMessage(this.errorTranslateService.translate("documentnamecantbesame"), 4000, false);
return;
}
const fd = new FormData();
fd.append('file', file, file.name);
if (file && this.id) {
this._masterService.postMasterData(apiUrl.nitUploadDoc, fd, this.id)
.then((res) => {
if(type == 'NIT'){ if(type == 'NIT'){
this.nitDocuments[i].docName = res.fileName this.nitDocuments[i].docName = res.fileName
this.nitDocuments[i].file = res.fileName this.nitDocuments[i].file = res.fileName
this.nitDocuments[i].documentSize =res.fileSizeKB; this.nitDocuments[i].documentSize =res.fileSizeKB;
} }
// else{
// this.workItemDocuments[i].docName = res.fileName
// this.workItemDocuments[i].file = res.fileName
// this.workItemDocuments[i].documentSize =res.fileSizeKB;
// }
}) })
.catch((error) => {
});
} }
}
UploadDrawingFiles(event,i){ UploadDrawingFiles(event,i){
if(this.drawingsDocuments[i].file){
this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"),4000,false);
}else{
this.selectedFiles = event.target.files; this.selectedFiles = event.target.files;
let file = event.target.files[0] let file = event.target.files[0]
@ -335,7 +404,7 @@ export class AddTendersComponent implements OnInit {
this.drawingsDocuments[i].file = res.fileName; this.drawingsDocuments[i].file = res.fileName;
this.drawingsDocuments[i].documentSize =res.fileSizeKB; this.drawingsDocuments[i].documentSize =res.fileSizeKB;
}) })}
} }
@ -364,8 +433,10 @@ export class AddTendersComponent implements OnInit {
deleteCoverRow(id, index: number){ deleteCoverRow(id, index: number){
let removeRow = Object.assign({}, (this.coverDocs).splice(index, 1)[0]); let removeRow = Object.assign({}, (this.coverDocs).splice(index, 1)[0]);
// removeRow.crud = 'D';
this.tenderData.covers[index].crud = 'D'; this.tenderData.covers[index].crud = 'D';
} }
// UploadCoverFiles(event,i){ // UploadCoverFiles(event,i){
@ -567,13 +638,14 @@ export class AddTendersComponent implements OnInit {
else if( this.tenderData.bidSubEndDate == null || this.tenderData.bidSubEndDate == undefined){ else if( this.tenderData.bidSubEndDate == null || this.tenderData.bidSubEndDate == undefined){
this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeBlank"),2000,true); this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeBlank"),2000,true);
} }
else if (this.tenderData.bidSubEndDate && this.tenderData.bidOpenDate && this.tenderData.bidSubEndDate > this.tenderData.bidOpenDate) {
this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeGreaterThanbidOpeningDate"), 2000, true);
}
else if( this.tenderData.bidOpenDate == null || this.tenderData.bidOpenDate == undefined){ else if( this.tenderData.bidOpenDate == null || this.tenderData.bidOpenDate == undefined){
this._ui.toastMessage(this.errorTranslateService.translate("bidOpeningDateCantBeBlank"),2000,true); this._ui.toastMessage(this.errorTranslateService.translate("bidOpeningDateCantBeBlank"),2000,true);
} }
else this.nextTab() else this.nextTab()
} }
@ -659,7 +731,6 @@ return true
} }
if(this.RequiredDocumentsPreCheck() ){ if(this.RequiredDocumentsPreCheck() ){
// this.tenderData.covers = this.coverDocs // this.tenderData.covers = this.coverDocs
this.nextTab() this.nextTab()
} }
@ -672,6 +743,8 @@ return true
TendersDocuments(){ TendersDocuments(){
this.tenderData.id =this.id this.tenderData.id =this.id
this.tenderData.crud = 'I' this.tenderData.crud = 'I'
this.tenderData.covers = this.coverDocs
if(this.tenderDocumnetsPreCheck() ) if(this.tenderDocumnetsPreCheck() )
if(!this.newDRWROW){ if(!this.newDRWROW){
@ -731,9 +804,10 @@ return true
return return
} }
this._masterService.saveAllMasterData(apiUrl.AllTenderData,this.tenderData).then((res)=>{ this._masterService.saveMasterData(apiUrl.AllTenderData,this.tenderData).then((res)=>{
console.log('successssssssss========',res); console.log('successssssssss========',res);
this.id = res['id'] this.id = res['id']
this.tenderData = res
console.log('this.id========',this.id); console.log('this.id========',this.id);
if(res){ if(res){

@ -47,12 +47,18 @@
<div class="container "> <div class="container ">
<!-- <div class="row" style="text-align: center;">
<h2 class="home">Home</h2>
</div> -->
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<div style="text-align: right;margin-bottom: 5px;" *ngIf="seculevel == 'B'"> <div style="text-align: right;margin-bottom: 5px;" *ngIf="seculevel == 'B'">
<button mat-raised-button (click)="addNewTender()" style="color: #46AC9E;">{{ 'addTender' | translate }}</button> <button mat-raised-button (click)="addNewTender()" class="addButton">+{{ 'addTender' | translate }}</button>
</div> </div>
<div class="card-responsive"> <div class="card-responsive">
<div class="card-body-responsive"> <div class="card-body-responsive">
<div class="table-responsive"> <div class="table-responsive">
<!-- <table class="table table-bordered"> <!-- <table class="table table-bordered">
@ -86,21 +92,20 @@
<mat-card class="card"> <mat-card class="card">
<div class="top-bar"> <div class="top-bar">
<div class="top-left-float"> <div class="top-left-float">
<span>
<mat-icon style="margin-right: 3px; transform: translateY(10px);">search</mat-icon> <span class="searchInputSpan">
<mat-icon style="margin-right: 3px;margin-left:5px; transform: translateY(10px);">search</mat-icon>
<mat-form-field> <mat-form-field>
<input matInput placeholder="{{ 'search' | translate }}" style="width: fit-content;" <input matInput placeholder="{{ 'search' | translate }}" style="width: fit-content;"
[(ngModel)]="searchTerm" (keyup.enter)="search()"/> [(ngModel)]="searchTerm" (keyup)="search()"/>
</mat-form-field> </mat-form-field>
</span> </span>
<button mat-raised-button style="color: #46AC9E;" (click)="search()"> {{ 'go' | translate }} <!-- <button mat-raised-button class="addButton" (click)="search()"> {{ 'go' | translate }}
</button> </button>&nbsp; -->
<button mat-raised-button style="color: #46AC9E;" (click)="reset()"> {{ 'clear' | translate }} <button mat-raised-button class="addButton" (click)="reset()"> {{ 'clear' | translate }}
</button> </button>
</div> </div>
<!-- <div class="top-left-float">
</div> -->
</div> </div>
<br> <br>
<br> <br>
@ -109,38 +114,32 @@
class="table"> class="table">
<ng-container matColumnDef="actions" class="table-column" > <ng-container matColumnDef="actions" class="table-column" >
<th mat-header-cell *matHeaderCellDef style="padding: 5px;" style="width:60px" class="table-headers"> <th mat-header-cell *matHeaderCellDef style="padding: 5px;" style="width:70px" class="table-headers">
<!-- {{ 'actions' | translate }} --> <!-- {{ 'actions' | translate }} -->
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element;let i=index" style="padding: 5px;" class="table-content first-column"> <td mat-cell *matCellDef="let element;let i=index" style="padding: 5px;" class="table-content first-column">
<button style="padding: 0;" mat-button color="primary" <button class="editButton" mat-button
(click)="goToEdit(element.id)" [disabled]="false"> (click)="goToEdit(element.id)" [disabled]="false">
<mat-icon style="transform: translateY(-10px);"> <svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 512 512"><path d="M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z" fill="#424242"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path
d="M490.3 40.4C512.2 62.27 512.2 97.73 490.3 119.6L460.3 149.7L362.3 51.72L392.4 21.66C414.3-.2135 449.7-.2135 471.6 21.66L490.3 40.4zM172.4 241.7L339.7 74.34L437.7 172.3L270.3 339.6C264.2 345.8 256.7 350.4 248.4 353.2L159.6 382.8C150.1 385.6 141.5 383.4 135 376.1C128.6 370.5 126.4 361 129.2 352.4L158.8 263.6C161.6 255.3 166.2 247.8 172.4 241.7V241.7zM192 63.1C209.7 63.1 224 78.33 224 95.1C224 113.7 209.7 127.1 192 127.1H96C78.33 127.1 64 142.3 64 159.1V416C64 433.7 78.33 448 96 448H352C369.7 448 384 433.7 384 416V319.1C384 302.3 398.3 287.1 416 287.1C433.7 287.1 448 302.3 448 319.1V416C448 469 405 512 352 512H96C42.98 512 0 469 0 416V159.1C0 106.1 42.98 63.1 96 63.1H192z"
fill="#46AC9E"/>
</svg>
</mat-icon>
</button> </button>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="slno"> <ng-container matColumnDef="slno">
<th mat-header-cell *matHeaderCellDef class="table-headers" style="width:80px"> <th mat-header-cell *matHeaderCellDef class="table-headers" style="width:80px;text-align: center;">
{{ 'slno' | translate }} {{ 'slno' | translate }}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element;let i = index" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element;let i = index" style="padding: 5px;text-align: center;" class="table-content">
{{i+1}} {{i+1}}
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="title"> <ng-container matColumnDef="title">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers"> <th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers" style="width:300px">
{{ 'title' | translate }} {{ 'title' | translate }}
<mat-icon>sort</mat-icon> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
{{element?.title}} {{element?.title}}
@ -150,7 +149,7 @@
<ng-container matColumnDef="publishedDate"> <ng-container matColumnDef="publishedDate">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers"> <th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers">
{{ 'publishedDate' | translate }} {{ 'publishedDate' | translate }}
<mat-icon>sort</mat-icon> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
{{element?.publishDate| date:"YYYY-MM-dd"}} {{element?.publishDate| date:"YYYY-MM-dd"}}
@ -161,9 +160,9 @@
</ng-container> </ng-container>
<ng-container matColumnDef="bidOpenDate"> <ng-container matColumnDef="bidOpenDate">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers"> <th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers" >
{{ 'bidOpenDate' | translate }} {{ 'bidOpenDate' | translate }}
<mat-icon>sort</mat-icon> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
{{element?.bidOpenDate| date:"YYYY-MM-dd"}} {{element?.bidOpenDate| date:"YYYY-MM-dd"}}
@ -173,17 +172,31 @@
</td> --> </td> -->
</ng-container> </ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers" >
{{ 'status' | translate }}
</th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
<span *ngIf="element.hide == 'Active'" class="activeSpan" >&nbsp;&nbsp;&nbsp;{{element?.hide}}&nbsp;&nbsp;&nbsp;</span>
<span *ngIf="element.hide == 'Await'" class="awaitSpan">&nbsp;&nbsp;&nbsp;{{element?.hide}}&nbsp;&nbsp;&nbsp;</span>
<span *ngIf="element.hide == 'Closed'" class="closedSpan">&nbsp;&nbsp;&nbsp;{{element?.hide}}&nbsp;&nbsp;&nbsp;</span>
</td>
</ng-container>
<ng-container matColumnDef="view"> <ng-container matColumnDef="view">
<th mat-header-cell *matHeaderCellDef class="table-headers" style="width:80px"> <th mat-header-cell *matHeaderCellDef class="table-headers" style="width:100px;text-align: center;">
{{ 'view' | translate }} {{ 'view' | translate }}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;text-align: center;" class="table-content">
<button style="padding: 0;" mat-button color="primary" <button mat-button
(click)="goToView(element.id)" [disabled]="false"> (click)="goToView(element.id)" [disabled]="false">
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}"> <svg xmlns="http://www.w3.org/2000/svg" height="1em" style="height: 18px;" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M320 464c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64z" fill="#424242"/></svg>
insert_drive_file
</mat-icon>
</button> </button>
</td> </td>
@ -195,11 +208,12 @@
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
<button style="padding: 0;" mat-button color="primary" <button class="reportButton" mat-button *ngIf="element.reportHide =='false'"
(click)="goToReport(element.id)" > (click)="goToReport(element.id)" >
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}"> <!-- <mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#353535'}">
assessment assessment
</mat-icon> </mat-icon> -->
<svg style="height: 60%;margin-bottom: 4px;" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 576 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M527.9 224H480v-48c0-26.5-21.5-48-48-48H272l-64-64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h400c16.5 0 31.9-8.5 40.7-22.6l79.9-128c20-31.9-3-73.4-40.7-73.4zM48 118c0-3.3 2.7-6 6-6h134.1l64 64H426c3.3 0 6 2.7 6 6v42H152c-16.8 0-32.4 8.8-41.1 23.2L48 351.4zm400 282H72l77.2-128H528z" fill="#424242"/></svg>
</button> </button>
</td> </td>
@ -211,9 +225,9 @@
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</th> </th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content"> <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
<button *ngIf="!element.hide" style="padding: 0;" mat-button color="primary" <button *ngIf="element.hide =='Active'" style="padding: 0;" mat-button color="primary"
(click)="goToUpload(element.id)" > (click)="goToUpload(element.id)" >
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}"> <mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#353535'}">
cloud_upload cloud_upload
</mat-icon> </mat-icon>
</button> </button>

@ -66,7 +66,7 @@ td {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: space-between; justify-content: space-between;
border: 1px solid #e3e3e3; // border: 1px solid #e3e3e3;
width: 100%; width: 100%;
margin: auto; margin: auto;
padding: auto; padding: auto;
@ -106,6 +106,8 @@ mat-card {
.top-right-float>button { .top-right-float>button {
margin: 5px; margin: 5px;
height: 40px; height: 40px;
margin-left: -74px;
margin-top: 7px;
} }
mat-table { mat-table {
@ -113,12 +115,15 @@ mat-table {
width: 100%; width: 100%;
display: table; display: table;
overflow-x: scroll; overflow-x: scroll;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
.table-headers { .table-headers {
padding: 5px; padding: 5px;
color: #ffffff; color: #353535;
font-weight: 900; font-weight: 900;
font-size: medium; font-size: medium;
background-color: #46AC9E; background-color: #ececec;
font-family:nucleo;
} }
.table-headers:hover { .table-headers:hover {
@ -129,6 +134,8 @@ mat-table {
.table-content { .table-content {
padding: 5px; padding: 5px;
overflow-wrap: inherit; overflow-wrap: inherit;
font-family:nucleo;
} }
.table-column { .table-column {
@ -214,9 +221,19 @@ input {
// } // }
@media (max-width: 767px) { @media screen and(max-width: 767px) {
.card { .card {
min-width: 600px; min-width: 900px;
}
.top-bar {
flex-direction: column;
align-items: center;
}
.top-left-float,
.top-right-float {
min-width: 100%;
} }
} }
@ -226,5 +243,113 @@ input {
} }
.mat-row:nth-child(odd){ .mat-row:nth-child(odd){
background-color: rgb(241, 241, 241); background-color: rgb(248, 248, 248);
}
.viewButton{
padding: 0;
border-radius: 16px !important;
height: 32px !important;
// width: 68px !important;
float: center;
// margin-top: 5px;
// margin-bottom: 5px;
color: #424242;
background-color: white;
// height: 37px;
border-radius: 9px;
font-family: nucleo;
width: 8%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
// margin-right: 5px;
}
.reportButton{
padding: 0;
// border-radius: 16px !important;
height: 32px !important;
// width: 68px !important;
float: center;
// margin-top: 5px;
// margin-bottom: 5px;
color: #424242;
// background-color: white;
// height: 37px;
// border-radius: 9px;
font-family: nucleo;
width: 8%;
// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
// margin-right: 5px;
}
.editButton {
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);
// transform: translateY(5px);
}
.editButton:hover {
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);
/* You can adjust the shadow values to your preference */
}
.addButton{
padding: 0;
border-radius: 16px !important;
height: 35px !important;
// width: 68px !important;
float: center;
margin-top: 5px;
margin-bottom: 5px;
color: #424242;
background-color: white;
// height: 37px;
border-radius: 9px;
font-family: nucleo;
width: 11%;
// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
// margin-right: 5px;
}
.addButton:hover{
background-color: #ebeaea ;
box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2);
// transform: translateY(5px);
}
.activeSpan{
background-color: #98eb98;
border-radius: 10px;
font-size: small;
color: #014d01;
}
.awaitSpan{
background-color: #b3c5ff;
border-radius: 10px;
font-size: small;
color: #213a8b;
}
.closedSpan{
background-color: #e3c096;
border-radius: 10px;
font-size: small;
color: #4d2a00;
}
.searchInputSpan{
background-color: #ececec;
border-radius: 45px;
width: 38vh;
height: 47px;
}
.home{
font-family: texg;
font-weight: 800;
color:#4c4c4c;
} }

@ -1,5 +1,5 @@
import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core'; import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core';
import { Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto';
import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; import { MenuFormatDto } from 'src/app/_dto/menu-format.dto';
import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; import { apiUrl } from 'src/app/_providers/_resources/api-url.properties';
@ -55,11 +55,15 @@ export class DashboardComponent implements OnInit {
enableDownload: boolean = true enableDownload: boolean = true
amountPaid: boolean = false;
@ViewChild('paginator') paginator: MatPaginator; @ViewChild('paginator') paginator: MatPaginator;
@ViewChild(MatSort, { static: false }) sort: MatSort; @ViewChild(MatSort, { static: false }) sort: MatSort;
noData: boolean; noData: boolean;
userId: string;
tenderId: number;
constructor( constructor(
private _menuService: MenuService, private _menuService: MenuService,
@ -69,16 +73,19 @@ export class DashboardComponent implements OnInit {
private authenticationService: AuthService, private authenticationService: AuthService,
private _masterService: MasterService, private _masterService: MasterService,
private errorService:ErrorTranslateService, private errorService:ErrorTranslateService,
private datePipe: DatePipe private datePipe: DatePipe,
private route: ActivatedRoute,
) { ) {
// this.user$ = this.getUser(); // this.user$ = this.getUser();
this.seculevel = localStorage.getItem('seculevel') this.seculevel = localStorage.getItem('seculevel')
console.log('=====level====',this.seculevel); console.log('=====level====',this.seculevel);
this.userId = localStorage.getItem('userId');
this.tenderId = +this.route.snapshot.paramMap.get('id');
// this.emails$ = this.emailService.loadEmails(); // this.emails$ = this.emailService.loadEmails();
// this.getSchoolLogo(); // this.getSchoolLogo();
if(this.seculevel == 'B'){ if(this.seculevel == 'B'){
this.displayedColumns = ['actions','title','publishedDate','bidOpenDate','view','report']; this.displayedColumns = ['actions','title','publishedDate','bidOpenDate','status','view','report'];
} }
else{ else{
this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','view','upload']; this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','view','upload'];
@ -98,6 +105,7 @@ export class DashboardComponent implements OnInit {
this.enableDownload = true; this.enableDownload = true;
this.getData(); this.getData();
this.paymentCheck()
// await this._ui.userValidation() // await this._ui.userValidation()
// this.loading = true; // this.loading = true;
@ -125,10 +133,10 @@ export class DashboardComponent implements OnInit {
// console.log('1111111 ',element.bidSubStartDate); // console.log('1111111 ',element.bidSubStartDate);
// console.log('2222222 ',element.bidSubEndDate); // console.log('2222222 ',element.bidSubEndDate);
element.hide = false element.hide = 'Active'
} }
else else
element.hide = true element.hide = 'Closed'
} }
this.dataCopy = res; this.dataCopy = res;
@ -143,9 +151,32 @@ export class DashboardComponent implements OnInit {
}) })
else else
this._masterService.getMasterData(apiUrl.adminTenderView).then((res) =>{ this._masterService.getMasterData(apiUrl.adminTenderView).then((res) =>{
console.log("tenderData=2=",res);
this.tenderData = res; this.tenderData = res;
for(let element of res){
const publishDate: Date = new Date(element.publishDate);
const bidSubEndDate: Date = new Date(element.bidSubEndDate);
const bidOpenDate: Date = new Date(element.bidOpenDate);
if(newDate >= bidOpenDate){
element.reportHide = 'false'
}
if(newDate >= publishDate && newDate <= bidOpenDate){
// console.log('1111111 ',element.bidSubStartDate);
// console.log('2222222 ',element.bidSubEndDate);
element.hide = 'Active'
}
else if(newDate < publishDate){
element.hide = 'Await'
}
else
element.hide = 'Closed'
}
this.dataCopy = res; this.dataCopy = res;
this.pageLength = this.tenderData.length; this.pageLength = this.tenderData.length;
this.dataSource = new MatTableDataSource(this.tenderData); this.dataSource = new MatTableDataSource(this.tenderData);
@ -153,6 +184,8 @@ export class DashboardComponent implements OnInit {
this.dataSource.paginator = this.paginator; this.dataSource.paginator = this.paginator;
this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false;
this.loading = false; this.loading = false;
console.log("tenderData=2=",res);
},err=>{ },err=>{
console.error(err) console.error(err)
}) })
@ -198,6 +231,8 @@ export class DashboardComponent implements OnInit {
return compare(a.publishDate, b.publishDate, isAsc); return compare(a.publishDate, b.publishDate, isAsc);
case 'bidOpenDate': case 'bidOpenDate':
return compare(a.bidOpenDate, b.bidOpenDate, isAsc); return compare(a.bidOpenDate, b.bidOpenDate, isAsc);
case 'status':
return compare(a.hide, b.hide, isAsc);
default: default:
return 0; return 0;
} }
@ -301,6 +336,17 @@ export class DashboardComponent implements OnInit {
} }
paymentCheck(){
this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => {
console.log('pay res=>', res);
if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) {
this.amountPaid = true
}
})
}
signIn(){ signIn(){
this.router.navigate(['/login']); this.router.navigate(['/login']);
} }
@ -321,6 +367,12 @@ export class DashboardComponent implements OnInit {
} }
goToUpload(tenderId){ goToUpload(tenderId){
this.paymentCheck()
if(!this.amountPaid){
this._ui.toastMessage(this.errorService.translate("pleasePayTheAmountForUpload"), 2000);
}else
this.router.navigate(['/tender-upload',tenderId]); this.router.navigate(['/tender-upload',tenderId]);
} }
goToEdit(tenderId){ goToEdit(tenderId){
@ -331,6 +383,7 @@ export class DashboardComponent implements OnInit {
} }
// public getUser(): Observable<User> { // public getUser(): Observable<User> {
// return of({ // return of({
// email: localStorage.getItem('username'), // email: localStorage.getItem('username'),
@ -345,8 +398,15 @@ export class DashboardComponent implements OnInit {
goToReport(id){ goToReport(id){
this.navigateTo(`bid-final-report/${id}`) this.navigateTo(`bid-final-report/${id}`)
} }
} }
function compare(a: any, b: any, isAsc: boolean): number { function compare(a: any, b: any, isAsc: boolean): number {
return (a < b ? -1 : 1) * (isAsc ? 1 : -1); return (a < b ? -1 : 1) * (isAsc ? 1 : -1);

@ -11,8 +11,11 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
</ul> </ul>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions> <mat-dialog-actions>
<button mat-button style=" background-color: gold;" (click)="onAccept()">Accept</button> <!-- <button mat-button style=" color: #46AC9E;" (click)="onAccept()">Accept</button> -->
<button mat-button (click)="onClose()">Close</button> <a style="color: #46AC9E;margin-right: 18px;cursor:pointer" (click)="onAccept()">Close</a>
<!-- <button mat-button (click)="onClose()">Close</button> -->
<!-- <a style="margin-right: 10px;cursor:pointer" (click)="onClose()">Close</a> -->
</mat-dialog-actions> </mat-dialog-actions>
`, `,
styleUrls: ['./dialog.component.scss'] styleUrls: ['./dialog.component.scss']

@ -52,9 +52,11 @@
<div class="form-group"> <div class="form-group">
<form #myForm="ngForm"> <form #myForm="ngForm">
<!-- <mat-label >Bid Final Amount </mat-label> -->
<mat-form-field class="input-style" appearance="outline" style="width: 100%;"> <mat-form-field class="input-style" appearance="outline" style="width: 100%;">
<mat-label class="font-weight-bold">Bid Final Amount </mat-label> <mat-label >Bid Final Amount </mat-label>
<input matInput placeholder="Enter Bid Amount" type="number" [(ngModel)]="bidAmount" [ngModelOptions]="{standalone: true}"/> <input matInput #bidAmountInput placeholder="Enter Bid Amount" type="number" [(ngModel)]="bidAmount" [ngModelOptions]="{standalone: true}"/>
</mat-form-field> </mat-form-field>
<table id="customers"> <table id="customers">
@ -65,8 +67,8 @@
</tr> </tr>
<tr *ngFor="let cover of tenderData?.covers;let i=index"> <tr *ngFor="let cover of tenderData?.covers;let i=index">
<td>{{cover?.Description}} <td><span style="font-size: medium;">{{cover?.Description}}</span>
<br>(uploading file should be in {{cover?.fileFormatD?.fileFormat}} format) <br><span style="font-size: smaller;">({{cover?.fileFormatD?.fileFormat}} format)</span>
</td> </td>
<td> <td>
<div class="form-group"> <div class="form-group">
@ -135,13 +137,16 @@
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. 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.
</div> </div>
</div> --> </div> -->
<div class="container" > <div >
<mat-checkbox [(ngModel)]="agreeToTerms" (change)="updateTerms($event)" style="margin-right: 10px;"> <mat-checkbox [(ngModel)]="agreeToTerms" [ngModelOptions]="{standalone: true}" (change)="updateTerms($event)" style="margin-right: 10px;transform: translateY(3px);margin-left: 10px;">
<div class="checkbox-text"> <!-- <div class="checkbox-text" >
I agree to the Terms and Conditions <span style="cursor: pointer;"> </span>
</div> <a >I agree to the Terms and Conditions</a>
</mat-checkbox>&nbsp; <span style="cursor: pointer;"> </span>
<div class="text-center font-weight-bold" (click)="openDialog()">*View Terms and Conditions <i class="bi bi-shield-fill-check"></i></div> </div> -->
</mat-checkbox>
<span>I agree to the <a style="color:blue;cursor: pointer;" (click)="openDialog()">Terms and Conditions</a></span>
<!-- <div class="text-center font-weight-bold" (click)="openDialog()">*View Terms and Conditions <i class="bi bi-shield-fill-check"></i></div> -->
</div> </div>

@ -30,6 +30,10 @@
.resp{ .resp{
min-height: 460px; min-height: 460px;
} }
#customers td, #customers th {
padding-right: 2px;
}
} }
.checkbox-container { .checkbox-container {
@ -43,3 +47,24 @@
font-family: 'Arial', sans-serif; font-family: 'Arial', sans-serif;
font-size: 16px; font-size: 16px;
} }
::ng-deep .mat-checkbox-ripple .mat-ripple-element {
background-color: #5FACA1 !important;
}
::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background {
background-color: #5FACA1 !important;
}
::ng-deep .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background {
background-color: #5FACA1 !important;
}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
margin: 0;
}

@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit,ViewChild,ElementRef,AfterViewInit, } from '@angular/core';
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
@ -10,6 +10,7 @@ import { MasterService } from 'src/app/_providers/_services/master.service';
import { UiService } from 'src/app/_providers/_services/ui.service'; import { UiService } from 'src/app/_providers/_services/ui.service';
import Swal from 'sweetalert2' import Swal from 'sweetalert2'
import { DialogComponent } from '../dialog/dialog.component'; import { DialogComponent } from '../dialog/dialog.component';
import { DatePipe } from '@angular/common';
@Component({ @Component({
selector: 'app-home-upload', selector: 'app-home-upload',
@ -35,9 +36,10 @@ export class HomeUploadComponent implements OnInit {
bidAmount:number; bidAmount:number;
agreeToTerms1: boolean = false; agreeToTerms1: boolean = false;
agreeToTerms2: boolean = false; agreeToTerms2: boolean = false;
showError: boolean = false;
showError: boolean = false;
tenderData: any; tenderData: any;
@ -57,17 +59,31 @@ export class HomeUploadComponent implements OnInit {
fileFormat: any[] fileFormat: any[]
userEmail: string;
emailBody: any;
username: string;
@ViewChild('bidAmountInput') bidAmountInput: ElementRef;
amountPaid: boolean = false;
constructor( constructor(
private router: Router, private router: Router,
private route: ActivatedRoute, private route: ActivatedRoute,
private _ui: UiService, private _ui: UiService,
private _errorTranslate: ErrorTranslateService, private _errorTranslate: ErrorTranslateService,
private _masterService: MasterService, private _masterService: MasterService,
public dialog: MatDialog public dialog: MatDialog,
private datePipe: DatePipe
) { ) {
this.secuLevel = localStorage.getItem('seculevel'); this.secuLevel = localStorage.getItem('seculevel');
this.userId = localStorage.getItem('userId'); this.userId = localStorage.getItem('userId');
this.tenderId = +this.route.snapshot.paramMap.get('id'); this.tenderId = +this.route.snapshot.paramMap.get('id');
this.userEmail = localStorage.getItem('emailId');
this.username = localStorage.getItem('username');
} }
@ -78,6 +94,14 @@ export class HomeUploadComponent implements OnInit {
this.getData(); this.getData();
this.getFileFormatLov(); this.getFileFormatLov();
this.paymentCheck();
}
ngAfterViewInit(): void {
setTimeout(() => {
this.bidAmountInput.nativeElement.focus();
}, 0);
} }
@ -99,7 +123,16 @@ export class HomeUploadComponent implements OnInit {
} }
paymentCheck(){
this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => {
console.log('pay res=>', res);
if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) {
this.amountPaid = true
}
})
}
getData() { getData() {
this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => {
@ -118,6 +151,19 @@ export class HomeUploadComponent implements OnInit {
this.UploadedFile.push(new TenderDocumentDto()); this.UploadedFile.push(new TenderDocumentDto());
} }
console.log('org Date==',this.tenderData.bidOpenDate);
const dateObj = new Date(this.tenderData.bidOpenDate);
const bidOpenDate = this.datePipe.transform(dateObj, 'MMM d, y, h:mm:ss a');
this.emailBody = {
custName:this.username,
tenderName:this.tenderData.title,
bidOpenDate:bidOpenDate,
email:this.userEmail
}
console.log('email===>',this.emailBody);
}) })
} }
@ -130,14 +176,20 @@ export class HomeUploadComponent implements OnInit {
} }
UploadFiles(event, i) { UploadFiles(event, i) {
// console.log('fileFormatId===',this.tenderData.covers[i].fileFormatD.fileFormat); const newFilename = `${this.tenderData.covers[i].Description.replace(/ /g, '')}${this.tenderData.covers[i].fileFormatD.fileFormat}`
let fileFormatId = this.fileFormat.filter(element => element.fileFormat == this.tenderData.covers[i].fileFormatD.fileFormat); let fileFormatId = this.fileFormat.filter(element => element.fileFormat == this.tenderData.covers[i].fileFormatD.fileFormat);
this.selectedFiles = event.target.files; this.selectedFiles = event.target.files;
let file = event.target.files[0] let file = event.target.files[0]
const fd = new FormData(); const fd = new FormData();
fd.append('file', file);
// Create a new File object with the updated filename
const updatedFile = new File([file], newFilename, { type: file.type });
// const fd = new FormData();
fd.append('file', updatedFile);
if (file && this.tenderId) { if (file && this.tenderId) {
this._masterService.postMasterData(apiUrl.userDocUpload + '/' + this.tenderId, fd, this.userId).then(res => { this._masterService.postMasterData(apiUrl.userDocUpload + '/' + this.tenderId, fd, this.userId).then(res => {
this.tenderData.covers[i].file = res.fileName; this.tenderData.covers[i].file = res.fileName;
@ -210,19 +262,37 @@ export class HomeUploadComponent implements OnInit {
submit() { submit() {
if(!this.amountPaid){
this._ui.toastMessage(this._errorTranslate.translate("pleasePayTheAmountForUpload"), 2000);
return
}
if(!this.preSave()) if(!this.preSave())
return return
let id ={ let id ={
tenderId : this.tenderId, tenderId : this.tenderId,
userId : this.userId, userId : this.userId,
} }
let body= { let body= {
bidAmount:this.bidAmount bidAmount:this.bidAmount
} }
this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{
console.log(res); console.log(res);
const body={email:this.userEmail}
this._masterService.saveMasterData(apiUrl.UploadBidAmount,this.emailBody).then(res=>{
console.log(res);
},err=>{
console.error(err);
})
},err=>{
console.error(err);
}) })

@ -39,9 +39,18 @@
<!-- </nav> --> <!-- </nav> -->
<!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> --> <!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> -->
<br> <br id="headingBreak">
<div class="text-center mt-4"> <div class="text-center mt-4">
<h2 class="font-weight-bold " style="color: #5faca1;">Tender Details </h2> <h2 class="tenderHeading" >Tender Details </h2>
<div class="row responsive">
<div class="col-3"></div>
<div class="col-3"></div>
<div class="col-5 ">
<button class="hide-on-print printButton" mat-raised-button (click)="print()">Print <i class="fa fa-arrow-down" style="font-size: small;"></i></button>&nbsp;
</div>
<div class="col-1 "></div>
</div>
</div><br> </div><br>
@ -55,7 +64,7 @@
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
<th colspan="2">Basic Details</th> <th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Basic Details</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -97,12 +106,14 @@
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
<th colspan="2">Tender Fee Details</th> <th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Tender Fee Details</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -118,10 +129,10 @@
<th>Tender Fee Exemption Allowed</th> <th>Tender Fee Exemption Allowed</th>
<td>{{tenderData.tenderFeeExemption}}</td> <td>{{tenderData.tenderFeeExemption}}</td>
</tr> </tr>
<!-- <tr> <tr class="hide-on-print">
<th>Fee Payable At</th> <!-- <th>Fee Payable At</th> -->
<td>{{tenderData.feePayableAt}}</td> <th colspan="2"> <button class="float-right hide-on-print payButton" *ngIf="!amountPaid && seculevel != 'B'" mat-raised-button (click)="paymentGateway()">Pay Tender Fee</button></th>
</tr> --> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -132,7 +143,7 @@
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
<th colspan="2">EMD Fee Details</th> <th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">EMD Fee Details</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -163,7 +174,7 @@
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
<th colspan="2">Critical Dates</th> <th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Critical Dates</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -211,7 +222,7 @@
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
<th colspan="2">Work Item Details</th> <th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Work Item Details</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -295,74 +306,89 @@
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
<th colspan="12">Tenders Documents</th> <th colspan="12" style="background-image: url('assets/img/thimg3.jpg');">Tenders Documents</th>
</tr> </tr>
</thead> </thead>
<tbody>
<tr>
<th colspan="12" class="text-center" style="background-color: #b8b8b8;">Drawings Document</th>
</tr>
<tbody *ngIf="nitItemDocuments.length > 0">
<tr> <tr>
<th colspan="12"><button mat-raised-button id="zipFile" class=" float-right btn-sm" <th colspan="12" class="text-center" style="background-color:#f0f0f0;">Notice</th>
(click)="DownloadDrawingsZIP()" > <i class="bi bi-file-earmark-zip"></i> Download as Zip
File</button> </th>
</tr> </tr>
<tr style="text-align: center;">
<tr *ngFor="let document of drawingsDocuments"> <th colspan="3">Document Type</th>
<td colspan="12">{{document.description}}</td> <th colspan="3">Document Name</th>
<th colspan="3">Description</th>
<th colspan="3" class="hide-on-print">Download</th>
</tr> </tr>
<tr *ngFor="let document of nitItemDocuments let i = index">
<td colspan="3">{{document.documentTypeD.documentType}}</td>
<td colspan="3">{{document.docName}}</td>
<td colspan="3">{{document.description}}</td>
<td style="text-align: center;" class="hide-on-print"><button mat-raised-button class="DownloadNoticeButton hide-on-print" (click)="DownloadNIT(i)" ><i class="fa fa-arrow-down" style="font-size:large ;"></i></button></td>
</tr>
</tbody><br>
<tbody *ngIf="workItemDocuments.length > 0">
</tbody>
<br>
<tbody>
<tr> <tr>
<th colspan="12" class="text-center" style="background-color:#b8b8b8;">Work Item Documents</th> <th colspan="12" class="text-center" style="background-color:#f0f0f0;">Work Item Documents</th>
</tr> </tr>
<tr> <tr style="text-align: center;">
<th colspan="4">Document Type</th> <th colspan="3">Document Type</th>
<th colspan="4">Document Name</th> <th colspan="5">Document Name</th>
<th colspan="4">Description</th> <th colspan="4">Description</th>
</tr> </tr>
<tr *ngFor="let document of workItemDocuments"> <tr *ngFor="let document of workItemDocuments">
<td colspan="4">{{document.documentTypeD.documentType}}</td> <td colspan="3">{{document.documentTypeD.documentType}}</td>
<td colspan="4">{{document.docName}}</td> <td colspan="5">{{document.docName}}</td>
<td colspan="4">{{document.description}}</td> <td colspan="4">{{document.description}}</td>
</tr> </tr>
<tr> <tr class="hide-on-print">
<th colspan="12"><button mat-raised-button id="zipFile" class=" float-right btn-sm" <th colspan="12"><button mat-raised-button id="zipFile" (click)="downloadWITZip()" class=" DownloadZipButton hide-on-print"
> <i class="bi bi-file-earmark-zip"></i> Download as Zip File</button> > <i class="bi bi-file-earmark-zip"></i> Download as Zip File</button>
</th> </th>
</tr> </tr>
</tbody> </tbody><br>
<tbody> <!-- <tbody *ngIf="nitItemDocuments.length > 0">
<tr> <tr>
<th colspan="12" class="text-center" style="background-color:#b8b8b8;">Notice</th> <th colspan="12" class="text-center" style="background-color:#b8b8b8;">Notice</th>
</tr> </tr>
<tr> <tr>
<th colspan="4">Document Type</th> <th colspan="3">Document Type</th>
<th colspan="4">Document Name</th> <th colspan="3">Document Name</th>
<th colspan="4">Description</th> <th colspan="3">Description</th>
<th colspan="3" class="hide-on-print">Download</th>
</tr> </tr>
<tr *ngFor="let document of nitItemDocuments"> <tr *ngFor="let document of nitItemDocuments let i = index">
<td colspan="4">{{document.documentTypeD.documentType}}</td> <td colspan="3">{{document.documentTypeD.documentType}}</td>
<td colspan="4">{{document.docName}}</td> <td colspan="3">{{document.docName}}</td>
<td colspan="4">{{document.description}}</td> <td colspan="3">{{document.description}}</td>
<td class="hide-on-print"><button mat-raised-button class="btn-sm hide-on-print" (click)="DownloadNIT(i)" style="color: #5faca1;"><mat-icon>download</mat-icon></button></td>
</tr> </tr>
</tbody> -->
<tbody *ngIf="drawingsDocuments.length > 0">
<tr> <tr>
<th colspan="12" class="text-center" style="background-color: #f0f0f0;">Drawings Document</th>
</tr>
<th colspan="12"><button mat-raised-button id="zipFile" class=" float-right btn-sm"
(click)="DownloadNIT()"> <i class="bi bi-file-earmark-zip"></i> Download</button></th> <tr class="hide-on-print">
<th colspan="12">Description<button mat-raised-button id="zipFile" class="DownloadZipButton hide-on-print"
(click)="DownloadDrawingsZIP()" > <i class="bi bi-file-earmark-zip"></i> Download as Zip
File</button> </th>
</tr> </tr>
<tr *ngFor="let document of drawingsDocuments">
<td colspan="12">{{document.description}}</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -373,11 +399,11 @@
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
<th colspan="12">Required Documents Details</th> <th colspan="12" style="background-image: url('assets/img/thimg3.jpg');">Required Documents Details</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr style="text-align: center;">
<th colspan="4">Document Type</th> <th colspan="4">Document Type</th>
<th colspan="4">Description</th> <th colspan="4">Description</th>
<th colspan="4">Document Format</th> <th colspan="4">Document Format</th>
@ -408,7 +434,7 @@
<table class="table table-bordered"> <table class="table table-bordered">
<thead class="table-dark"> <thead class="table-dark">
<tr> <tr>
<th colspan="2">Tender Inviting</th> <th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Tender Inviting</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

@ -17,16 +17,22 @@
position: relative; position: relative;
} }
.table td { @media print {
word-break: break-word; .hide-on-print {
display: none;
}
} }
.nav-link:hover { .nav-link:hover {
color: rgb(255, 0, 0); color: rgb(255, 0, 0);
} }
#zipFile:hover { // #zipFile:hover {
color: rgb(255, 0, 0); // color: rgb(255, 0, 0);
cursor: pointer; // cursor: pointer;
} // }
// .container-responsive { // .container-responsive {
// min-height: 100vh; // min-height: 100vh;
@ -41,7 +47,145 @@
// bottom: 0; // bottom: 0;
// width: 100%; // width: 100%;
// } // }
// --------------------------------------------------------------------------------------------
thead{ thead{
background-color: #5faca1; color: aliceblue; // background-color: #5faca1; color: aliceblue;
padding: 5px;
color: #505050;
font-weight: 900;
font-size: medium;
background-color: #f0f0f0;
font-family: nucleo;
}
mat-table {
padding-top: 10px !important;
// table-layout: fixed;
width: 100%;
display: table;
overflow-x: scroll;
.table-headers {
padding: 5px;
color: #505050;
font-weight: 900;
font-size: medium;
background-color: #f0f0f0;
font-family: nucleo;
}
.table-headers:hover {
background-color: #ececec;
color: #46AC9E;
}
.table-content {
padding: 5px;
overflow-wrap: inherit;
font-family: nucleo;
}
.table-column {
width: 100%;
}
}
.table td {
word-break: break-word;
padding: 5px;
overflow-wrap: inherit;
font-family: nucleo;
}
.table th {
font-family: texg;
color: #353535;
}
.tenderHeading{
font-family: texg;
color: #353535;
}
.printButton {
float: right;
margin-top: 5px;
margin-bottom: 5px;
background-color: white;
color: #424242;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 17%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.printButton:hover {
background-color: #ececec;
color: #46AC9E;
}
.payButton:hover {
background-color: #ececec;
color: #46AC9E;
}
.DownloadZipButton {
float: right;
margin-top: 5px;
margin-bottom: 5px;
background-color: white;
color: #424242;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 17%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.DownloadZipButton:hover {
background-color: #ececec;
color: #46AC9E;
}
.DownloadNoticeButton {
// float: right;
// margin-top: 5px;
// margin-bottom: 5px;
background-color: white;
// color: #424242;
color: #5faca1;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 17%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.DownloadNoticeButton:hover {
background-color: #ececec;
color: #303030;
}
@media screen and (max-width: 768px) {
/* Adjust font size for smaller screens */
.DownloadZipButton {
font-size: 14px;
}
}
@media screen and (max-width: 480px) {
/* Further adjustments for even smaller screens */
.DownloadZipButton {
font-size: 12px;
}
} }

@ -8,7 +8,7 @@ import { ErrorTranslateService } from 'src/app/_providers/_services/error-transl
import { MasterService } from 'src/app/_providers/_services/master.service'; import { MasterService } from 'src/app/_providers/_services/master.service';
import { TransactionService } from 'src/app/_providers/_services/transaction.service'; import { TransactionService } from 'src/app/_providers/_services/transaction.service';
import { UiService } from 'src/app/_providers/_services/ui.service'; import { UiService } from 'src/app/_providers/_services/ui.service';
import { environment } from 'src/environments/environment'; import { environment } from 'src/environments/environment.prod';
@Component({ @Component({
selector: 'app-home-view', selector: 'app-home-view',
@ -21,7 +21,7 @@ export class HomeViewComponent implements OnInit {
tenderData: any; tenderData: any;
nitItemDocuments: any ; nitItemDocuments: any;
workItemDocuments: any; workItemDocuments: any;
@ -36,15 +36,26 @@ export class HomeViewComponent implements OnInit {
newPaymentRow: any; newPaymentRow: any;
currentDate = new Date(); currentDate = new Date();
enableDownload: boolean = true enableDownload: boolean = true
paymentStatus: string; paymentStatus: string;
userId: string;
amountPaid: boolean = false;
seculevel: string;
displayedColumns: string[] = ['field', 'value'];
constructor( constructor(
private router: Router, private router: Router,
private route: ActivatedRoute, private route: ActivatedRoute,
private _masterService: MasterService, private _masterService: MasterService,
private _transactionService: TransactionService, private _transactionService: TransactionService,
private _ui:UiService, private _ui: UiService,
private _errorTranslateService: ErrorTranslateService private _errorTranslateService: ErrorTranslateService
) { ) {
this.tenderId = +this.route.snapshot.paramMap.get('id'); this.tenderId = +this.route.snapshot.paramMap.get('id');
@ -54,10 +65,13 @@ export class HomeViewComponent implements OnInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.tenderData = new TenderDetailDto() this.tenderData = new TenderDetailDto()
this.userId = localStorage.getItem('userId')
this.seculevel = localStorage.getItem('seculevel')
console.log("this.tenderId", this.tenderId); console.log("this.seculevel", this.seculevel);
this.enableDownload = true; this.enableDownload = true;
this.getData() this.getData();
this.getPaymentData();
} }
@ -72,7 +86,7 @@ export class HomeViewComponent implements OnInit {
console.log("tenderData", res); console.log("tenderData", res);
this.tenderData = res this.tenderData = res
this.tenderDocuments = this.tenderData['tenderDoc'] this.tenderDocuments = this.tenderData['tenderDoc']
console.log("data",this.tenderDocuments); console.log("data", this.tenderDocuments);
const saleStartDate = new Date(this.tenderData.saleStartDate); const saleStartDate = new Date(this.tenderData.saleStartDate);
const saleEndDate = new Date(this.tenderData.saleEndDate); const saleEndDate = new Date(this.tenderData.saleEndDate);
@ -91,6 +105,24 @@ export class HomeViewComponent implements OnInit {
}) })
} }
getPaymentData() {
this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => {
console.log('pay res=>', res);
if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) {
this.amountPaid = true
}
// else{
// this.amountPaid = false
// }
})
}
print(): void {
window.print();
}
filterDataByCategory() { filterDataByCategory() {
@ -109,12 +141,19 @@ export class HomeViewComponent implements OnInit {
window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact';
} }
DownloadDrawingsZIP(){ DownloadDrawingsZIP() {
if (!this.amountPaid && this.seculevel == 'U') {
// Scroll to the "Pay" button
var payButton = document.getElementById("headingBreak");
if (payButton) {
payButton.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000);
this.paymentGateway() }
else {
const id = this.tenderId; const id = this.tenderId;
this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs,id).then((res)=>{ this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs, id).then((res) => {
}, err => { }, err => {
console.log('res===>', err); console.log('res===>', err);
@ -124,7 +163,7 @@ export class HomeViewComponent implements OnInit {
let newWindow = window.open(`${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`); let newWindow = window.open(`${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`);
setTimeout(() => { setTimeout(() => {
newWindow.close(); newWindow.close();
}, 100); }, 10000);
} }
if (err.status == 404) { if (err.status == 404) {
alert('No Bank Document Found for the selected Tender.'); alert('No Bank Document Found for the selected Tender.');
@ -141,41 +180,66 @@ export class HomeViewComponent implements OnInit {
} }
}) })
} }
DownloadNIT(){ }
// DownloadDrawingsZIP() {
// // Your code to download the ZIP file goes here
// // Scroll to the "Pay" button
// var payButton = document.getElementById("headingBreak");
// if (payButton) {
// payButton.scrollIntoView({ behavior: 'smooth', block: 'start' });
// }
// }
DownloadNIT(index: number) {
const id = this.tenderId; const id = this.tenderId;
this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod,id).then((res)=>{ console.log(index);
console.log(this.nitItemDocuments[index].docName);
// }, err => { this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod, `${this.tenderId}/${this.nitItemDocuments[index].docName}`).then((res) => {
// console.log('res===>', err);
// if (err.status == 200) { } , err => {
// console.log('start >>>'); console.log('res===>', err);
// // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); if (err.status == 200) {
console.log('start >>>');
// window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`);
let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${this.tenderId}/${this.nitItemDocuments[index].docName}`);
// setTimeout(() => {
// newWindow.close();
// }, 10000);
}
if (err.status == 404) {
alert('No Notice 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.noticeDownlaod}/${id}`); // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${id}`);
// setTimeout(() => { // setTimeout(() => {
// newWindow.close(); // newWindow.close();
// }, 100); // }, 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);
// }
}) })
} }
downloadWITZip() { downloadWITZip() {
if (!this.amountPaid && this.seculevel == 'U') {
// Scroll to the "Pay" button
var payButton = document.getElementById("headingBreak");
if (payButton) {
payButton.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000);
}
else {
console.log('clicked'); console.log('clicked');
const id = this.tenderId; const id = this.tenderId;
// let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`);
@ -211,11 +275,12 @@ export class HomeViewComponent implements OnInit {
}) })
// window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id);
}
} }
async paymentGateway() { async paymentGateway() {
// if(this.seculevel != 'B'){
this.paymentDetails = new PurchaseDto(); this.paymentDetails = new PurchaseDto();
this.paymentDetails.application = this.tenderId; this.paymentDetails.application = this.tenderId;
this.paymentDetails.mobile = localStorage.getItem('mobile') this.paymentDetails.mobile = localStorage.getItem('mobile')
@ -228,7 +293,7 @@ export class HomeViewComponent implements OnInit {
// let paymentMethod = this.paymentMethodLovData.find(x=> x.id==this.newPaymentRow.paymentMethod) // let paymentMethod = this.paymentMethodLovData.find(x=> x.id==this.newPaymentRow.paymentMethod)
console.log('this.paymentDetails===',this.paymentDetails); console.log('this.paymentDetails===', this.paymentDetails);
this._transactionService.createPayment(this.paymentDetails).then( this._transactionService.createPayment(this.paymentDetails).then(
res => { res => {
@ -239,7 +304,7 @@ export class HomeViewComponent implements OnInit {
console.log("==er====", err); console.log("==er====", err);
} }
); );
// }
} }

@ -1,106 +1,232 @@
<!-- <p>bid-final-report works!</p> <!-- -->
<div class="header">
<h6> <a (click)="navigateTo('dashboard')"> Home </a> \ <a (click)="navigateTo('report/report-activities')">Report
</a> \ </h6>
<h4><b>{{title | translate}}</b></h4>
</div> -->
<div class="row"> <!-- <div class="row" id="Headerbutton">
<div> <div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<button mat-raised-button color="primary" (click)="backButton()" <button mat-raised-button color="primary" (click)="backButton()"
style="float: left;margin-top: 5px;margin-bottom: 5px;background-color: #46AC9E;"> style="float: left;margin-top: 5px;margin-bottom: 5px;background-color: #46AC9E;">
Back Back
</button> </button>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<button mat-raised-button color="primary" (click)="printScreen()" <button mat-raised-button color="primary" (click)="printScreen()"
style="float: right;margin-top: 5px;margin-bottom: 5px;background-color: #46AC9E;"> style="float: right;margin-top: 5px;margin-bottom: 5px;background-color: #46AC9E;">
Print Print
</button> </button>
<!-- <select class="select" [(ngModel)]="printType" style="float: right;margin-top: 5px;margin-bottom: 5px;margin-right: 5px;">
<option *ngFor="let size of printSize" >
{{size.name}}
</option>
</select> -->
<button mat-raised-button color="primary" (click)="excelDownload()" <button mat-raised-button color="primary" (click)="excelDownload()"
style="float: right;margin-top: 5px;margin-bottom: 5px;margin-right: 5px;background-color: #46AC9E;"> style="float: right;margin-top: 5px;margin-bottom: 5px;margin-right: 5px;background-color: #46AC9E;">
Excel Download Excel Download
</button> </button>
</div> </div>
</div> -->
<div class="buttonCard">
<button mat-stroked-button (click)="backButton()" class="backButton">
<i class="fa fa-arrow-left" aria-hidden="true"
style="top: 0px;position: relative;font-size: small;"></i>
Back
</button>
<button mat-stroked-button (click)="printScreen()" class="printButton">
Print
</button>
<button mat-stroked-button (click)="excelDownload()" class="excelButton">
Excel
</button>
</div> </div>
<div id="section-to-print" class="container" style="background-color: white;"> <div id="section-to-print" class="container" style="background-color: white;">
<h6> <!-- <div class="outerContainer"> -->
<!-- <h6 style="width: calc(100vw - 50px);margin-top: 18px;">
<b> <b>
{{title | translate}} <span class="titleSpan">{{title | translate}}</span>
<br> <br>
<span > <div class="row" >
<span class="tenderInfo">Tender Information:</span>
</div>
<div class="row" >
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" id="tenderNameDiv">
<span class="tenderName">
<br> <br>
{{'tender'|translate}} : {{'tender'|translate}} :
<span > <span>
{{headerData?.title}} {{headerData?.title}}
</span> </span>
</span> </span>
</div>
<span > <div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" id="publishingDateDiv">
<br> <span class="publishingDate">
<br> <br>
{{'publishedDate'|translate}} : {{'publishedDate'|translate}} :
<span> <span>
{{headerData?.publishDate | date: 'MMM d, y, h:mm:ss a'}} {{headerData?.publishDate | date: 'MMM d, y, h:mm:ss a'}}
</span> </span>
</span> </span>
</div>
</div>
<span > <div class="row" >
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" id="tenderNameDiv">
<span class="tenderName">
<br> <br>
{{'tenderId'|translate}} :
<span>
{{tenderInputId}}
</span>
</span>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" id="publishingDateDiv">
<span class="publishingDate">
<br> <br>
{{'bidOpenDate'|translate}} : {{'bidOpenDate'|translate}} :
<span > <span>
{{headerData?.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}} {{headerData?.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}}
</span> </span>
</span> </span>
</div>
</div>
<br>
<div class="row" >
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" id="tenderNameDiv">
<span class="tenderName">
<br>
<span class="bidComparison">
Bid Comparison:
</span>
</span>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" id="publishingDateDiv">
</div>
</div>
</b> </b>
</h6> </h6> -->
<h6>{{'currentDate'|translate}}: {{today | date: 'MMM d, y, h:mm:ss a'}}</h6> <!-- <hr class="hiddenLine"> -->
<!-- <h6>{{'currentDate'|translate}}: {{today | date: 'MMM d, y, h:mm:ss a'}}</h6> -->
<!-- <h6>{{tenderInputId}}</h6> -->
<div class="table-container" #table> <div class="table-container" #table>
<div class="reportHeader">
<div class="row" style="text-align: center;">
<h2 class="bidHeading">Bid Final Report</h2>
</div>
<div class="row">
<h3 class="tenderInfo">Tender Information:</h3>
</div>
<!-- <br> -->
<div class="row">
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<span class="subHead">
{{'tender'|translate}} :
<span class="subDetail"> {{headerData?.title}} </span>
</span>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" style="text-align: center;">
<span class="subHead">
{{'publishedDate'|translate}} :
<span class="subDetail"> {{headerData?.publishDate | date: 'MMM d, y, h:mm:ss a'}}</span>
</span>
</div>
</div>
<!-- <br> -->
<div class="row" style="margin-top: 5px;">
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<span class="subHead">
{{'tenderId'|translate}} :
<span class="subDetail"> {{tenderInputId}} </span>
</span>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" style="text-align: center;">
<span class="subHead">
{{'bidOpenDate'|translate}} :
<span class="subDetail">{{headerData?.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}}</span>
</span>
</div>
</div>
<br>
<div class="row">
<h3 class="tenderInfo">Bid Summary:</h3>
</div>
</div>
<table hidden="true"> <table hidden="true">
<tr> <tr>
<th></th> <th></th>
<th></th> <th></th>
<th></th> <th></th>
<th></th>
<th>{{title | translate}}</th> <th>{{title | translate}}</th>
<th></th>
<th></th>
</tr> </tr>
<tr > <tr>
<td></td>
<td></td>
<td></td> <td></td>
<td>Tender</td>
<td>Tender Name</td>
<td> <td>
{{headerData?.publishDate}} {{headerData?.title}}
</td> </td>
</tr>
<tr >
<td></td>
<td></td>
<td></td> <td></td>
<td>Published Date</td> <td>Published Date</td>
<td > <td>
{{headerData?.bidOpenDate }} {{headerData?.publishDate }}
</td> </td>
</tr> </tr>
<tr > <tr>
<td></td> <td></td>
<td>Tender Id</td>
<td>
{{tenderInputId }}
</td>
<td></td> <td></td>
<td>Bid Open Date</td>
<td>
{{headerData?.bidOpenDate}}
</td>
</tr>
<!-- <tr>
<td></td> <td></td>
<td>Bid Open Date</td> <td>Bid Open Date</td>
<td> <td>
{{headerData?.sectionName}} {{headerData?.sectionName}}
</td> </td>
<td></td>
<td></td>
<td></td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
@ -111,46 +237,49 @@
<td> <td>
{{today | date: 'dd MMMM YYYY'}} {{today | date: 'dd MMMM YYYY'}}
</td> </td>
</tr> <td></td>
</tr> -->
<tr></tr> <tr></tr>
</table> </table>
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8" matSort matSortDisableClear="true" <mat-table mat-table [dataSource]="dataSource" class="mat-elevation-z8" matSort matSortDisableClear="true"
(matSortChange)="sortData($event)"> (matSortChange)="sortData($event)">
<ng-container matColumnDef="slNo"> <ng-container matColumnDef="slNo">
<th mat-header-cell *matHeaderCellDef style="text-align: center;" class="col-header"> <th mat-header-cell *matHeaderCellDef style="text-align: center;width:80px" class="table-headers">
<div> <div>
{{'slNo'|translate}}. {{'slNo'|translate}}
</div> </div>
</th> </th>
<td mat-cell *matCellDef="let element let i=index" class="col-body"> <td mat-cell *matCellDef="let element let i=index" class="table-content" style="text-align: center;">
{{i+1}} {{i+1}}
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="name"> <ng-container matColumnDef="name">
<th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;" class="col-header"> <th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;width:140px"
class="table-headers">
<div> <div>
{{'name'|translate}} {{'name'|translate}}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</div> </div>
</th> </th>
<td mat-cell *matCellDef="let element" class="col-body"> <td mat-cell *matCellDef="let element" class="table-content">
{{element?.userName}} {{element?.userName}}
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="admissionNo"> <ng-container matColumnDef="admissionNo">
<th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;" class="col-header"> <th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;" class="table-headers">
<div> <div>
{{'admissionNo'|translate}} {{'admissionNo'|translate}}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</div> </div>
</th> </th>
<td mat-cell *matCellDef="let element" class="col-body"> <td mat-cell *matCellDef="let element" class="table-content">
{{element.rollNo }} {{element.rollNo }}
</td> </td>
@ -159,26 +288,27 @@
<ng-container matColumnDef="mobileNumber"> <ng-container matColumnDef="mobileNumber">
<th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;" class="col-header"> <th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;width:170px"
class="table-headers">
<div> <div>
{{'mobileNumber'|translate}} {{'mobileNumber'|translate}}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</div> </div>
</th> </th>
<td mat-cell *matCellDef="let element" class="col-body"> <td mat-cell *matCellDef="let element" class="table-content">
{{element?.mobileNumber}} {{element?.mobileNumber}}
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="email"> <ng-container matColumnDef="email">
<th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;" class="col-header"> <th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;" class="table-headers">
<div> <div>
{{'emailId'|translate}} {{'emailId'|translate}}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</div> </div>
</th> </th>
<td mat-cell *matCellDef="let element" class="col-body"> <td mat-cell *matCellDef="let element" class="table-content">
{{element?.email}} {{element?.email}}
</td> </td>
@ -187,13 +317,13 @@
<ng-container matColumnDef="finalBidAmt"> <ng-container matColumnDef="finalBidAmt">
<th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;" class="col-header"> <th mat-header-cell mat-sort-header *matHeaderCellDef style="text-align: center;" class="table-headers">
<div> <div>
{{'totalBidAmount'|translate}} {{'totalBidAmount'|translate}}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</div> </div>
</th> </th>
<td mat-cell *matCellDef="let element" class="col-body"> <td mat-cell *matCellDef="let element" class="table-content">
{{element?.finalBidAmt}} {{element?.finalBidAmt}}
</td> </td>
@ -202,15 +332,18 @@
<ng-container matColumnDef="aadharNo"> <ng-container matColumnDef="aadharNo">
<th mat-header-cell *matHeaderCellDef style="text-align: center;" class="col-header"> <th mat-header-cell *matHeaderCellDef style="text-align: center;width:150px" class="table-headers">
<div> <div>
{{'documents'|translate}} {{'documents'|translate}}
<!-- <mat-icon>sort</mat-icon> --> <!-- <mat-icon>sort</mat-icon> -->
</div> </div>
</th> </th>
<td mat-cell *matCellDef="let element" class="col-body"> <td mat-cell *matCellDef="let element" class="table-content" style="text-align: center;">
<button mat-stroked-button (click)="downloadUserDocs(element?.userId)"> <!-- <button mat-stroked-button (click)="downloadUserDocs(element?.userId)">
<mat-icon style="color: black;">file_download</mat-icon></button> <mat-icon style="color: #4a4a4a;">file_download</mat-icon></button> -->
<button mat-stroked-button (click)="openDialogBox(captcha,element?.userId)">
<mat-icon style="color: #4a4a4a;">file_download</mat-icon></button>
</td> </td>
</ng-container> </ng-container>
@ -220,7 +353,47 @@
<tr mat-header-row *matHeaderRowDef="displaycolumns ;sticky: true;"></tr> <tr mat-header-row *matHeaderRowDef="displaycolumns ;sticky: true;"></tr>
<tr mat-row *matRowDef="let row; columns: displaycolumns;"></tr> <tr mat-row *matRowDef="let row; columns: displaycolumns;"></tr>
</table> </mat-table>
</div> </div>
<!-- </div> -->
</div> </div>
<ng-template #captcha>
<div class="row">
<div class="captchaDiv" >
<span class="captchaFont">{{captchaText}}</span>
</div>
</div>
<br>
<span>Type the word Above : </span>
<br>
<div class="row">
<mat-form-field appearance="outline">
<mat-label>Text</mat-label>
<input type="text" matInput placeholder="{{ 'Type' | translate }}"
[(ngModel)]="userCaptchaInput" style="width:100%;border-bottom: 0px;">
</mat-form-field>
</div>
<div class="row" style="text-align: center;">
<div class="col-4 col-sm-4 col-md-4 col-lg-4 col-xl-4"></div>
<div class="col-4 col-sm-4 col-md-4 col-lg-4 col-xl-4">
<button mat-raised-button class="captchaSubmit" (click)="captchaCheck()">submit</button>
</div>
<div class="col-4 col-sm-4 col-md-4 col-lg-4 col-xl-4" style="margin-top: 4px;">
<mat-icon (click)="generateRandomText()" style="cursor: pointer;" [ngClass]="{'rotate-icon': isIconRotating}">refresh</mat-icon>
</div>
</div>
<br>
<div class="row" style="text-align: center;">
<span *ngIf="!captchaMatching" style="color: red;">Captcha Not Matching</span>
</div>
</ng-template>

@ -1,89 +1,197 @@
h4 { // .header {
// margin-left: 4%;
// margin-top: 20px;
// }
// .header>h6{
// a {
// text-decoration: none;
// color: #262627;
// }
// a:hover {
// text-decoration: underline;
// cursor: pointer;
// }
// }
// mat-card{
// min-width: 180px ;
// // max-width: 20vw;
// height: 200px;
// display: inline-block;
// }
// mat-card:hover{
// cursor: pointer;
// }
// -----------------------------------------------------------------------------------
.nav-link:hover {
color: red;
}
th,
td {
padding: 10px;
// border: 1px solid #ccc;
word-wrap: break-word;
white-space: normal;
}
.h2 {
font-family: sans-serif;
font-size: 26px;
font-weight: 500;
}
.table td {
word-break: break-word;
}
.table-break-word {
word-break: break-word;
}
.top-bar {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
border: 1px solid #e3e3e3;
width: 100%; width: 100%;
text-align: center; margin: auto;
} padding: auto;
}
.header { .header {
padding: 20px; padding: 20px;
width: 100%; width: 100%;
min-width: 350px; min-width: 350px;
} }
.header>h6>a { .header>h6>a {
text-decoration: none; text-decoration: none;
color: #262627; color: #262627;
} }
.header>h6>a:hover { .header>h6>a:hover {
text-decoration: underline; text-decoration: underline;
cursor: pointer; cursor: pointer;
} }
mat-card {
min-width: 350px;
}
.top-left-float {
display: flex;
min-width: 282px;
}
#section-to-print h6 { .top-right-float {
text-align: center; display: flex;
} min-width: 161px;
}
table { .top-left-float>button,
width: 100%; .top-right-float>button {
} margin: 5px;
height: 40px;
}
.table-container { mat-table {
width: calc(100vw - 50px); padding-top: 10px !important;
// table-layout: fixed;
width: 100%;
display: table;
overflow-x: scroll; overflow-x: scroll;
border: 1px solid grey;
// height: 50vh;
}
.col-header { .table-headers {
color: #000000;
font-weight: bolder;
font-size: medium;
text-align: center;
background-color: #46AC9E;
padding: 5px; padding: 5px;
border: 1px solid #000000; color: #505050;
font-weight: 900;
font-size: medium;
background-color: #f0f0f0;
font-family: nucleo;
} }
.col-body { .table-headers:hover {
padding: 5px; background-color: #ececec;
text-align: center; color: #46AC9E;
border: 1px solid #000000;
} }
.col-footer { .table-content {
padding: 5px; padding: 5px;
text-align: center; overflow-wrap: inherit;
font-weight: bolder; font-family: nucleo;
// border: 1px solid #000000;
background-color: rgb(212, 212, 212);
} }
.row { .table-column {
margin: 5px; width: 100%;
} }
}
.container { input {
margin: 5px; border: none;
border-bottom: 1px solid silver;
}
:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) {
.mat-slide-toggle-thumb {
background-color: #46AC9E;
} }
.hide { .mat-slide-toggle-bar {
display: none; background-color: skyblue;
} }
mat-icon { }
vertical-align: middle;
opacity: .6; // .dialog-body {
// display: flex;
// justify-content: center;
// align-items: center;
// div {
// width: 90%;
// }
// }
.dialog-actions {
display: flex;
flex-wrap: wrap;
width: 97%;
justify-content: space-between;
.btn-group-left {
// min-width: 150px;
margin-top: 5px;
} }
:host ::ng-deep { .btn-group-right {
.mat-sort-header-arrow { // min-width: 95px;
color: #000000; margin-top: 5px;
} }
}
.mat-sort-header-container { .hide {
display: flex; display: none;
justify-content: center; }
:host ::ng-deep {
.mat-form-field-infix {
border-bottom: 0px solid white;
} }
.mat-table { .mat-table {
@ -95,31 +203,194 @@ h4 {
} }
} }
} }
}
.img-fluid {
margin-right: 5px;
max-height: 40px;
}
// .navbar {
// background-position: center;
// }
@media (max-width: 767px) {
.card {
min-width: 600px;
} }
@media print{ }
.header{
@media print {
.buttonCard {
display: none; display: none;
} }
.row{
.backButton {
display: none; display: none;
} }
* { .printButton {
font-size: 17px !important; display: none;
} }
.excelButton {
display: none;
} }
}
.mat-row:nth-child(even) {
background-color: rgb(255, 255, 255);
}
.select{ .mat-row:nth-child(odd) {
padding: 10px; background-color: rgb(241, 241, 241);
font-size: 16px; }
border-radius: 5px;
background-color: #f2f2f2; .table-container {
border: none; margin-top: 20px
box-shadow: none; }
}
.select:focus {
outline: none; .backButton {
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); float: left;
} margin-top: 5px;
margin-bottom: 5px;
color: #424242;
background-color: white;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 8%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
transform: translateY(5px);
}
.backButton:hover {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
/* You can adjust the shadow values to your preference */
}
.printButton {
float: right;
margin-top: 5px;
margin-bottom: 5px;
background-color: white;
color: #424242;
height: 37px;
border-radius: 9px;
font-family: nucleo;
width: 8%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.printButton:hover {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
/* You can adjust the shadow values to your preference */
}
.excelButton {
float: right;
margin-top: 5px;
margin-bottom: 5px;
color: #424242;
background-color: white;
height: 37px;
border-radius: 9px;
font-family: nucleo;
width: 8%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
margin-right: 5px;
}
.excelButton:hover {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
/* You can adjust the shadow values to your preference */
}
.buttonCard {
width: 100%;
background-color: #ffffff;
height: 50px;
margin: 0px;
padding: 0px 16px 0px 16px;
margin-top: 20px;
}
.reportHeader {
width: 100%;
background-color: #ffffff;
// height: 50px;
margin: 5px 0px 0px 0px;
}
.bidHeading {
font-family: texg;
color: #353535;
}
.tenderInfo {
font-family: texg;
color: #353535;
}
.subHead {
font-family: texg;
color: #353535;
}
.subDetail {
font-family: nucleo;
color: #353535;
}
.captchaFont {
font-family: captcha;
font-size: large;
}
.captchaDiv {
text-align: center;
height: 100px;
display: flex;
align-items: center;
justify-content: center;
background-image: url('/assets/img/captchaback.jpeg');
}
.captchaSubmit{
float: right;
margin-top: 5px;
margin-bottom: 5px;
color: #424242;
background-color: white;
height: 37px;
border-radius: 9px;
font-family: nucleo;
// width: 8%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
margin-right: 5px;
}
.captchaSubmit:hover {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: rgb(240, 240, 240);
/* You can adjust the shadow values to your preference */
}
.rotate-icon {
animation: rotate 1s infinite;
}
@keyframes rotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

@ -1,10 +1,11 @@
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { MatSort, Sort } from '@angular/material/sort'; import { MatSort, Sort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table'; import { MatTableDataSource } from '@angular/material/table';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; import { apiUrl } from 'src/app/_providers/_resources/api-url.properties';
import { MasterService } from 'src/app/_providers/_services/master.service'; import { MasterService } from 'src/app/_providers/_services/master.service';
import { environment } from 'src/environments/environment'; import { environment } from 'src/environments/environment.prod';
import * as XLSX from 'xlsx'; import * as XLSX from 'xlsx';
@Component({ @Component({
selector: 'app-bid-final-report', selector: 'app-bid-final-report',
@ -35,10 +36,24 @@ export class BidFinalReportComponent implements OnInit {
tableData: any; tableData: any;
tenderInputId: any;
dialogRef: any;
captchaText: string;
userCaptchaInput: string;
captchaMatching: boolean = true;
userDocId: any;
isIconRotating: boolean;
constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
private _router: Router, private _router: Router,
private _masterService:MasterService private _masterService: MasterService,
private dialog: MatDialog
) { ) {
this.tenderId = +this.route.snapshot.paramMap.get('id'); this.tenderId = +this.route.snapshot.paramMap.get('id');
@ -60,14 +75,15 @@ export class BidFinalReportComponent implements OnInit {
} }
getHeaderData(id) { getHeaderData(id) {
this._masterService.getMasterDatabyId(apiUrl.getTender,id).then(res=>{ this._masterService.getMasterDatabyId(apiUrl.getTender, id).then(res => {
this.headerData = res; this.headerData = res;
this.tenderInputId = res.tenderId
}) })
} }
getTableData(id){ getTableData(id) {
this._masterService.getMasterDatabyId(apiUrl.bidReport,id).then(res=>{ this._masterService.getMasterDatabyId(apiUrl.bidReport, id).then(res => {
this.tableData = res.filter(element=> element.status == 'S'); this.tableData = res.filter(element => element.status == 'S');
this.dataSource = new MatTableDataSource(this.tableData); this.dataSource = new MatTableDataSource(this.tableData);
this.dataSource.sort = this.sort; this.dataSource.sort = this.sort;
}) })
@ -130,9 +146,56 @@ export class BidFinalReportComponent implements OnInit {
// }); // });
} }
downloadUserDocs(userId){ downloadUserDocs(userId) {
let newWindow = window.location.href = `${environment.apiUrl}/${apiUrl.userBidDoc}/${this.tenderId}/${userId}` let newWindow = window.location.href = `${environment.apiUrl}/${apiUrl.userBidDoc}/${this.tenderId}/${userId}`
} }
openDialogBox(templateRef,userId) {
this.userDocId = userId
this.dialogRef = this.dialog.open(templateRef, {
disableClose: false,
width: '400px'
});
this.generateRandomText();
this.captchaMatching = true
this.userCaptchaInput = ''
}
generateRandomText() {
this.isIconRotating = true;
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let randomText = '';
for (let i = 0; i < 6; i++) {
const randomIndex = Math.floor(Math.random() * characters.length);
randomText += characters[randomIndex];
}
this.captchaText = randomText;
setTimeout(() => {
this.isIconRotating = false;
}, 1000);
}
captchaCheck(){
if(this.captchaText == this.userCaptchaInput){
this.dialogRef.close();
this.downloadUserDocs(this.userDocId)
}
else{
this.captchaMatching = false
setTimeout(() => {
this.captchaMatching = true
}, 2000);
}
}
} }
function compare(a: any, b: any, isAsc: boolean): number { function compare(a: any, b: any, isAsc: boolean): number {
return (a < b ? -1 : 1) * (isAsc ? 1 : -1); return (a < b ? -1 : 1) * (isAsc ? 1 : -1);

@ -23,7 +23,6 @@ import { MatNativeDateModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select'; import { MatSelectModule } from '@angular/material/select';
import { MatMomentDateModule } from '@angular/material-moment-adapter'; import { MatMomentDateModule } from '@angular/material-moment-adapter';
import {MatTooltipModule} from '@angular/material/tooltip'; import {MatTooltipModule} from '@angular/material/tooltip';
// import { NgxMatTimepickerModule } from 'ngx-mat-timepicker';
import { LOCALE_ID } from '@angular/core'; import { LOCALE_ID } from '@angular/core';
@NgModule({ @NgModule({
@ -49,7 +48,7 @@ import { LOCALE_ID } from '@angular/core';
MatNativeDateModule, MatNativeDateModule,
MatDatepickerModule, MatDatepickerModule,
MatMomentDateModule, MatMomentDateModule,
MatTooltipModule MatTooltipModule,
] ]
}) })
export class ReportModule { } export class ReportModule { }

@ -41,8 +41,9 @@ export const apiUrl = {
noticeDownlaod:"file-upload/notice", noticeDownlaod:"file-upload/notice",
bidReport:"payment-master/bid-report", bidReport:"payment-master/bid-report",
userBidDoc:"file-upload/user-doc-arc", userBidDoc:"file-upload/user-doc-arc",
UploadBidAmount:"payment-master/finalBidAmt" UploadBidAmount:"payment-master/finalBidAmt",
paymentCheck:"payment-master/bid-payment-check",
emailUserSubmit:"auth/otp/UD"
}; };

@ -6,15 +6,26 @@
<button mat-icon-button aria-label="Example icon button with a person icon" [matMenuTriggerFor]="userMenu"> <button mat-icon-button aria-label="Example icon button with a person icon" [matMenuTriggerFor]="userMenu">
<!-- <mat-icon style="margin-left:-3px;color:white;margin-bottom: 2px;">person</mat-icon> --> <!-- <mat-icon style="margin-left:-3px;color:white;margin-bottom: 2px;">person</mat-icon> -->
<img src="assets/img/userU.png" alt="" class="img-fluid" style="height: 35px;transform: translateY(-5px);"> <!-- <img src="assets/img/user.png" alt="" class="img-fluid" style="height: 35px;transform: translateY(-5px);"> -->
<button *ngIf="secuLevel != 'B'" mat-mini-fab style="transform: translateY(-5px);background-color: #46AC9E;">
{{username.charAt(0).toUpperCase()}}
</button>
<button *ngIf="secuLevel == 'B'" class="adminButtom" mat-mini-fab >
<span style="font-weight: 900;">{{username.charAt(0).toUpperCase()}}</span>
</button>
</button> </button>
<mat-menu #userMenu="matMenu" xPosition="before"> <mat-menu #userMenu="matMenu" xPosition="before">
<div class="user-menu-title"> <div class="user-menu-title">
<div> <div>
<img src="assets/img/user.png" alt="" *ngIf="!adminUser" class="img-fluid" style="height: 40px;"> <!-- <img src="assets/img/user.png" alt="" *ngIf="!adminUser" class="img-fluid" style="height: 40px;">
<img src="assets/img/admin.png" alt="" *ngIf="adminUser" class="img-fluid" style="height: 40px;"> <img src="assets/img/admin.png" alt="" *ngIf="adminUser" class="img-fluid" style="height: 40px;"> -->
<button mat-mini-fab style="transform: translateY(-5px);background-color: #46AC9E;box-shadow: none; pointer-events: none;">
{{username.charAt(0).toUpperCase()}}
</button>
<!-- <img src="assets/img/user.svg" alt=""> --> <!-- <img src="assets/img/user.svg" alt=""> -->
</div> </div>
<span class="user-menu-title__name" style="font-weight: 600;text-align: center;">{{getUser()}} </span> <span class="user-menu-title__name" style="font-weight: 600;text-align: center;">{{getUser()}} </span>

@ -3,7 +3,7 @@
@import 'src/app/styles/variables'; @import 'src/app/styles/variables';
.user-button { .user-button {
background-color:#4b978d; background-color: #4b978d;
box-shadow: none; box-shadow: none;
margin-left: 16px; margin-left: 16px;
@ -73,3 +73,15 @@
} }
} }
} }
.adminButtom {
transform: translateY(-5px);
background-color: #ECECEC;
color: #46AC9E;
font-family: nucleo;
}
.adminButtom:hover{
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: rgb(187, 187, 187);
}

@ -17,6 +17,8 @@ export class UserComponent {
public routes: typeof routes = routes; public routes: typeof routes = routes;
public flatlogicEmail: string = "https://flatlogic.com"; public flatlogicEmail: string = "https://flatlogic.com";
adminUser: boolean = false; adminUser: boolean = false;
username: string;
secuLevel: string;
public signOutEmit(): void { public signOutEmit(): void {
localStorage.removeItem('emailId') localStorage.removeItem('emailId')
@ -36,10 +38,10 @@ ngOnInit(){
this.getEmail(); this.getEmail();
} }
getUser(){ getUser(){
let secuLevel = localStorage.getItem('seculevel') this.secuLevel = localStorage.getItem('seculevel')
if(secuLevel && secuLevel == 'B'){ if(this.secuLevel && this.secuLevel == 'B'){
if(secuLevel === 'B'){ if(this.secuLevel === 'B'){
this.adminUser = true this.adminUser = true
} }
else{ else{
@ -47,9 +49,9 @@ ngOnInit(){
} }
// this.cdr.detectChanges(); // this.cdr.detectChanges();
} }
let username = localStorage.getItem('username') this.username = localStorage.getItem('username')
if(username) if(this.username)
return username return this.username
else else
return '' return ''
} }

@ -1,22 +1,22 @@
<div class="container-responsive"> <div [ngClass]="{'container-responsive': !this.router.url.includes('auth')}" style="padding: 10px;">
<nav class="navbar navbar-expand-lg" style="padding: 8px;"> <nav class="navbar navbar-expand-lg" style="padding: 8px;">
<div class="container"> <div class="container">
<!-- <div id="imageHead"> --> <!-- <div id="imageHead"> -->
<p class="navbar-brand d-flex align-items-center" href="#" > <p class="navbar-brand d-flex align-items-center" href="#" >
<img src="assets/img/emblem2.jpg" alt="" class="img-fluid" style="height: 40px;"> <img src="assets/img/emblem3.png" alt="" class="img-fluid" (click)="goToWebsite()" style="height: 40px;cursor: pointer;">
Thrickodithanam SCB <span class="title" style="cursor: pointer;" (click)="goToWebsite()">Thrickodithanam SCB</span>
</p> </p>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" <!-- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button> -->
<!-- </div> --> <!-- </div> -->
<div class=" justify-content-end" id="navbarNav"> <div class=" justify-content-end" id="navbarNav">
<ul class="navbar-nav"> <ul class="navbar-nav">
<li class="nav-item" id="imageHead"> <li class="nav-item" id="imageHead">
<!-- <p class="nav-link" (click)="goToWebsite()">Go to Website</p> --> <!-- <p class="nav-link" (click)="goToWebsite()">Go to Website</p> -->
<img src="assets/img/web.png" alt="" class="img-fluid" (click)="goToWebsite()" style="height: 30px;transform: translateX(-48px);cursor: pointer;opacity: 90%;"> <!-- <img src="assets/img/web.png" alt="" class="img-fluid" (click)="goToWebsite()" style="height: 30px;transform: translateX(-48px);cursor: pointer;opacity: 90%;"> -->
</li> </li>
<li class="nav-item" id="imageHead"> <li class="nav-item" id="imageHead">
@ -36,9 +36,13 @@
</div> </div>
</div> </div>
</nav> </nav>
<nav class="navbar navbar-dark-responsive" style="background-image: url('assets/img/panel_background.jpg');padding: 45px;"> <!-- <nav class="navbar navbar-dark-responsive" style="background-image: url('assets/img/panel_background.jpg');padding: 45px;">
</nav> </nav> -->
</div> </div>
<!-- *ngIf="!this.router.url.includes('report') " -->

@ -75,3 +75,16 @@
display: none; display: none;
} }
} }
.title{
font-family: nucleo;
// color: white;
font-weight: 800;
}
.container-responsive{
background-image: url('/assets/img/greenployg3.jpg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
padding: 10px;
}

@ -65,8 +65,10 @@ export class HeaderComponent {
else{ else{
this.router.navigate(['/dashboard']) this.router.navigate(['/dashboard'])
} }
// if(currentLoc = '/dashboard'){
// this. goToWebsite()
// }
} }
goToSignIn(){ goToSignIn(){

Binary file not shown.

@ -119,6 +119,7 @@
"pincodeCantBeBlank":"Pincode Can't Be Blank", "pincodeCantBeBlank":"Pincode Can't Be Blank",
"clarificationEndDateCantBeBlank":"Clarification End Date Can't Be Blank", "clarificationEndDateCantBeBlank":"Clarification End Date Can't Be Blank",
"bidSubmissionEndDateCantBeBlank":"Bid Submission End Date Can't Be Blank", "bidSubmissionEndDateCantBeBlank":"Bid Submission End Date Can't Be Blank",
"bidSubmissionEndDateCantBeGreaterThanbidOpeningDate":"Bid Submission End Date Can't Be Greater Than Bid Opening Date",
"documentNameCantBeBlank":"Document Name Can't Be Blank", "documentNameCantBeBlank":"Document Name Can't Be Blank",
"UploaddocumentCantBeBlank": "Please Upload Documents", "UploaddocumentCantBeBlank": "Please Upload Documents",
"documentSizeCantBeBlank":"Document Size Can't Be Blank", "documentSizeCantBeBlank":"Document Size Can't Be Blank",
@ -132,10 +133,13 @@
"TenderCreatedSuccessfully":"Tender Created Successfully", "TenderCreatedSuccessfully":"Tender Created Successfully",
"pleaseEnableDrawingDocuments": "Please Enable Drawing Documents", "pleaseEnableDrawingDocuments": "Please Enable Drawing Documents",
"pleaseEnableNoticeDocuments" : "Please Enable Notice Documents", "pleaseEnableNoticeDocuments" : "Please Enable Notice Documents",
"Pleasedeletetheexistingfile" :"Please Delete The Existing File Before Adding a New One.",
"pleasePayTheAmountForUpload":"Please Pay The Amount For Upload",
"pleaseAddfiles":"Please Add The Remaining Files", "pleaseAddfiles":"Please Add The Remaining Files",
"pleaseEnterBidFinalAmount":"Please Enter Bid Final Amount", "pleaseEnterBidFinalAmount":"Please Enter Bid Final Amount",
"pleaseLogin":"Please Login for Downloading", "pleaseLogin":"Please Login for Downloading",
"pleaseAgreeToTheTermsandCondition":"Please Agree To The Terms and Condition" "documentnamecantbesame": "Document Name Can't Be Same ",
"pleaseAgreeToTheTermsandCondition":"Please Agree To The Terms and Condition",
"pleasePayTheAmountForDoc":"Please Pay The Amount For Downloading Documents"
} }

@ -103,6 +103,7 @@
"loading": "Loading...", "loading": "Loading...",
"loadingData": "Loading Data...", "loadingData": "Loading Data...",
"login": "Login", "login": "Login",
"login.": "log in•",
"addNewPayment": "Add New Payment", "addNewPayment": "Add New Payment",
"makeNewPayment": "Make New Payment", "makeNewPayment": "Make New Payment",
"message": "Message", "message": "Message",
@ -333,13 +334,14 @@
"taxAmount":"Tax Amount", "taxAmount":"Tax Amount",
"hscSac":"HSN/SAC No", "hscSac":"HSN/SAC No",
"companySettings":"Company Settings", "companySettings":"Company Settings",
"register":"Register", "register":"Register",
"generateOtp":"Generate OTP", "generateOtp":"Generate OTP",
"enterOtp":"Enter OTP", "enterOtp":"Enter OTP",
"submit":"Submit", "submit":"Submit",
"confPass":"Confirm Password", "confPass":"Confirm Password",
"addTender":"Add Tender", "addTender":"Add Tender",
"forgotPass":"Forgot Password?", "forgotPass":"Forgot Password?",
"forgotYourPass":"Forgot Your Password?",
"assetImagePath":"Asset File Path", "assetImagePath":"Asset File Path",
"title":"Title", "title":"Title",
"publishedDate":"Published Date", "publishedDate":"Published Date",
@ -350,6 +352,8 @@
"report":"Report", "report":"Report",
"totalBidAmount":"Total Bid Amount", "totalBidAmount":"Total Bid Amount",
"documents": "Documents", "documents": "Documents",
"tender":"Tender" "tender":"Tender",
"tenderId":"Tender Id",
"status":"Status"
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

@ -398,3 +398,22 @@ div.apexcharts-xaxistooltip-bottom:after {
background-color: #00a300; background-color: #00a300;
color: white; // Set the text color to white or any other contrasting color for better visibility color: white; // Set the text color to white or any other contrasting color for better visibility
} }
@font-face {
font-family: 'nucleo';
src: url('assets/fonts/Poppins-Medium.ttf');
}
@font-face {
font-family: 'texg';
src: url('assets/fonts/texgyreadventor-bold.otf');
}
@font-face {
font-family: 'texg-regular';
src: url('assets/fonts/texgyreadventor-regular.otf');
}
@font-face {
font-family: 'captcha';
src: url('assets/fonts/captcha.ttf');
}

@ -4,6 +4,8 @@ export const environment = {
// apiUrl:'https://sales.api.accuratesoftware.online/api/v1', // apiUrl:'https://sales.api.accuratesoftware.online/api/v1',
apiUrl: 'https://tenderapi.accuratesoftware.online/api/v1', apiUrl: 'https://tenderapi.accuratesoftware.online/api/v1',
// apiUrl: 'http://192.168.1.112:3200/api/v1',
production: true, production: true,
hmr: false, hmr: false,

@ -4,7 +4,7 @@
export const environment = { export const environment = {
//apiUrl: 'http://192.168.1.112:3500/api/v1', //apiUrl: 'http://192.168.1.112:3200/api/v1',
apiUrl: 'https://tenderapi.accuratesoftware.online/api/v1', apiUrl: 'https://tenderapi.accuratesoftware.online/api/v1',
production: false, production: false,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 39 KiB

@ -136,7 +136,7 @@
"ora" "5.3.0" "ora" "5.3.0"
"rxjs" "6.6.3" "rxjs" "6.6.3"
"@angular/animations@^11.0.0 || ^12.0.0", "@angular/animations@^11.2.13": "@angular/animations@^11.2.13":
"integrity" "sha512-+TcJbMmKZI4kbSLp7TCJzOYkm90qe54OLWcNH6bi2NC9S0QsXaPo73yRP8sERjg/DjRj+wBf3LY63FvHZmqcTA==" "integrity" "sha512-+TcJbMmKZI4kbSLp7TCJzOYkm90qe54OLWcNH6bi2NC9S0QsXaPo73yRP8sERjg/DjRj+wBf3LY63FvHZmqcTA=="
"resolved" "https://registry.npmjs.org/@angular/animations/-/animations-11.2.13.tgz" "resolved" "https://registry.npmjs.org/@angular/animations/-/animations-11.2.13.tgz"
"version" "11.2.13" "version" "11.2.13"
@ -180,7 +180,7 @@
"universal-analytics" "0.4.23" "universal-analytics" "0.4.23"
"uuid" "8.3.2" "uuid" "8.3.2"
"@angular/common@^11.0.0 || ^12.0.0", "@angular/common@>=10.0.0", "@angular/common@>=6.0.0", "@angular/common@>=9.0.0", "@angular/common@~11.2.13": "@angular/common@~11.2.13":
"integrity" "sha512-96iZ4wlZado78yG6eY/ZmY6+H2X2hJi2XsK7iXKzc5h3oeILEkt+ulfBNkCNjMm8xPYBmLrSBueG96/T4/Bi5w==" "integrity" "sha512-96iZ4wlZado78yG6eY/ZmY6+H2X2hJi2XsK7iXKzc5h3oeILEkt+ulfBNkCNjMm8xPYBmLrSBueG96/T4/Bi5w=="
"resolved" "https://registry.npmjs.org/@angular/common/-/common-11.2.13.tgz" "resolved" "https://registry.npmjs.org/@angular/common/-/common-11.2.13.tgz"
"version" "11.2.13" "version" "11.2.13"
@ -220,7 +220,7 @@
"resolved" "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz" "resolved" "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz"
"version" "9.0.0" "version" "9.0.0"
"@angular/core@^11.0.0 || ^12.0.0", "@angular/core@^12.0.0 || ^13.0.0-0", "@angular/core@>=10.0.0", "@angular/core@>=6.0.0", "@angular/core@>=9.0.0", "@angular/core@~11.2.13": "@angular/core@~11.2.13":
"integrity" "sha512-xMKskq/Sbf8dkX/vx4WCwXMpDTJJ77rGlP8fVTB8az8QeOa14i6AdpmSXaJ8sl68R3v8Y1Pa9yBQytbKuxShqQ==" "integrity" "sha512-xMKskq/Sbf8dkX/vx4WCwXMpDTJJ77rGlP8fVTB8az8QeOa14i6AdpmSXaJ8sl68R3v8Y1Pa9yBQytbKuxShqQ=="
"resolved" "https://registry.npmjs.org/@angular/core/-/core-11.2.13.tgz" "resolved" "https://registry.npmjs.org/@angular/core/-/core-11.2.13.tgz"
"version" "11.2.13" "version" "11.2.13"
@ -232,7 +232,7 @@
"resolved" "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz" "resolved" "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz"
"version" "9.0.0" "version" "9.0.0"
"@angular/forms@^11.0.0 || ^12.0.0", "@angular/forms@~11.2.13": "@angular/forms@~11.2.13":
"integrity" "sha512-Q5vNHycS+II2xYOE/HJB4NoYg/Ngg6hPF+0KXdCA7L4kfrwx5Fsi4oZ6gRRnSpzSGedISpSU4VE5wPiq7zJ3+A==" "integrity" "sha512-Q5vNHycS+II2xYOE/HJB4NoYg/Ngg6hPF+0KXdCA7L4kfrwx5Fsi4oZ6gRRnSpzSGedISpSU4VE5wPiq7zJ3+A=="
"resolved" "https://registry.npmjs.org/@angular/forms/-/forms-11.2.13.tgz" "resolved" "https://registry.npmjs.org/@angular/forms/-/forms-11.2.13.tgz"
"version" "11.2.13" "version" "11.2.13"
@ -251,7 +251,7 @@
dependencies: dependencies:
"tslib" "^2.2.0" "tslib" "^2.2.0"
"@angular/material@^11.2.12", "@angular/material@12.2.13": "@angular/material@^11.2.12":
"integrity" "sha512-n3HDKoM552jLcmxtpTYzMUzV6V9vUBKyNs7SNdUfjuK00VJlTWMu03g/QWOj2Y9KftOuDUa8+N2XodwAr+jtCw==" "integrity" "sha512-n3HDKoM552jLcmxtpTYzMUzV6V9vUBKyNs7SNdUfjuK00VJlTWMu03g/QWOj2Y9KftOuDUa8+N2XodwAr+jtCw=="
"resolved" "https://registry.npmjs.org/@angular/material/-/material-11.2.12.tgz" "resolved" "https://registry.npmjs.org/@angular/material/-/material-11.2.12.tgz"
"version" "11.2.12" "version" "11.2.12"
@ -1201,7 +1201,7 @@
"merge-source-map" "^1.1.0" "merge-source-map" "^1.1.0"
"schema-utils" "^2.7.0" "schema-utils" "^2.7.0"
"@ng-idle/core@^11.0.3", "@ng-idle/core@^11.1.0": "@ng-idle/core@^11.1.0":
"integrity" "sha512-/hf3LDFz3UCTe2H6r1bq6Kn6mo5B5mxaU5XVqcDfE4Vdlx9evTqBXyl0VpWbuzZbohVCfWq31mEjbxg9lbY4bw==" "integrity" "sha512-/hf3LDFz3UCTe2H6r1bq6Kn6mo5B5mxaU5XVqcDfE4Vdlx9evTqBXyl0VpWbuzZbohVCfWq31mEjbxg9lbY4bw=="
"resolved" "https://registry.npmjs.org/@ng-idle/core/-/core-11.1.0.tgz" "resolved" "https://registry.npmjs.org/@ng-idle/core/-/core-11.1.0.tgz"
"version" "11.1.0" "version" "11.1.0"
@ -1224,7 +1224,7 @@
"enhanced-resolve" "5.7.0" "enhanced-resolve" "5.7.0"
"webpack-sources" "2.2.0" "webpack-sources" "2.2.0"
"@ngx-translate/core@^13.0.0", "@ngx-translate/core@>=13.0.0": "@ngx-translate/core@^13.0.0":
"integrity" "sha512-+tzEp8wlqEnw0Gc7jtVRAJ6RteUjXw6JJR4O65KlnxOmJrCGPI0xjV/lKRnQeU0w4i96PQs/jtpL921Wrb7PWg==" "integrity" "sha512-+tzEp8wlqEnw0Gc7jtVRAJ6RteUjXw6JJR4O65KlnxOmJrCGPI0xjV/lKRnQeU0w4i96PQs/jtpL921Wrb7PWg=="
"resolved" "https://registry.npmjs.org/@ngx-translate/core/-/core-13.0.0.tgz" "resolved" "https://registry.npmjs.org/@ngx-translate/core/-/core-13.0.0.tgz"
"version" "13.0.0" "version" "13.0.0"
@ -5626,7 +5626,7 @@
"resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
"version" "1.0.4" "version" "1.0.4"
"moment@^2.18.1", "moment@^2.29.1": "moment@^2.29.1":
"integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
"resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz"
"version" "2.29.4" "version" "2.29.4"
@ -7426,13 +7426,6 @@
dependencies: dependencies:
"tslib" "^1.9.0" "tslib" "^1.9.0"
"rxjs@>=6.5.3", "rxjs@7.0.0":
"integrity" "sha512-I1V/ArAtGJg4kmCfms8fULm0SwYgEsAf2d5WPCBGzTYm2qTjO3Tx4EDFaGjbOox8CeEsC69jQK22mnmfyA26sw=="
"resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.0.0.tgz"
"version" "7.0.0"
dependencies:
"tslib" "~2.1.0"
"rxjs@6.6.3": "rxjs@6.6.3":
"integrity" "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==" "integrity" "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ=="
"resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz" "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz"
@ -7440,6 +7433,13 @@
dependencies: dependencies:
"tslib" "^1.9.0" "tslib" "^1.9.0"
"rxjs@7.0.0":
"integrity" "sha512-I1V/ArAtGJg4kmCfms8fULm0SwYgEsAf2d5WPCBGzTYm2qTjO3Tx4EDFaGjbOox8CeEsC69jQK22mnmfyA26sw=="
"resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.0.0.tgz"
"version" "7.0.0"
dependencies:
"tslib" "~2.1.0"
"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@>=5.1.0", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": "safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@>=5.1.0", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2":
"integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"

Loading…
Cancel
Save