modifications

main
sajan 3 years ago
parent 809566a2ef
commit f3a0aaaac4

3
package-lock.json generated

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

@ -1,10 +1,12 @@
<div class="backImage">
<div class="container-responsive">
<!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> -->
<br><br>
<!-- <br><br> -->
<div class="container text-center">
<div class="row">
@ -12,22 +14,22 @@
<div class="card-responsive">
<div class="card-body-responsive">
<div class="table-responsive">
<ng-container >
<mat-card class="card">
<div class="top-bar">
<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:-35px; transform: translateY(10px);">search</mat-icon>
<mat-form-field>
<input matInput placeholder="{{ 'search' | translate }}" style="width: fit-content;"
[(ngModel)]="searchTerm" (keyup.enter)="search()"/>
[(ngModel)]="searchTerm" (keyup)="search()"/>
</mat-form-field>
</span>
<button mat-raised-button style="color: #46AC9E;" (click)="search()"> {{ 'go' | translate }}
</button>
</div>
<div class="top-right-float">
<button mat-raised-button style="color: #46AC9E;" (click)="reset()"> {{ 'reset' | translate }}
<!-- <button mat-raised-button class="addButton" (click)="search()"> {{ 'go' | translate }}
</button>&nbsp; -->
<button mat-raised-button class="addButton" (click)="reset()"> {{ 'clear' | translate }}
</button>
</div>
</div>
@ -50,21 +52,21 @@
</ng-container>
<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 }}
<mat-icon>sort</mat-icon>
<!-- <mat-icon>sort</mat-icon> -->
</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}}
</td>
</ng-container>
<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 }}
<mat-icon>sort</mat-icon>
<!-- <mat-icon>sort</mat-icon> -->
</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"}}
</td>
<!-- <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
@ -73,11 +75,11 @@
</ng-container>
<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 }}
<mat-icon>sort</mat-icon>
<!-- <mat-icon>sort</mat-icon> -->
</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"}}
</td>
<!-- <td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
@ -86,36 +88,34 @@
</ng-container>
<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 }}
<!-- <mat-icon>sort</mat-icon> -->
</th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
<button style="padding: 0;" mat-button color="primary"
(click)="goToView(element.id)" [disabled]="false">
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}">
insert_drive_file
</mat-icon>
<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>
</button>
</td>
</ng-container>
<ng-container matColumnDef="upload">
<!-- <ng-container matColumnDef="upload">
<th mat-header-cell *matHeaderCellDef class="table-headers" style="width:80px">
{{ 'upload' | translate }}
<!-- <mat-icon>sort</mat-icon> -->
</th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
<button style="padding: 0;" mat-button color="primary"
(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
</mat-icon>
</button>
</td>
</ng-container>
</ng-container> -->
<ng-container matColumnDef="loading">
<td mat-footer-cell *matFooterCellDef="" colspan="5">
@ -141,6 +141,8 @@
</mat-paginator>
</mat-card>
</ng-container>
</div>
<!-- <table class="table table-bordered">
<thead class="table-dark">
<tr>
@ -173,7 +175,7 @@
</div>
</div>
</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">
<div class="container">
<div class="row">
@ -184,7 +186,6 @@
</div>
</div>
</footer>
</div>
</div> -->
</div>

@ -66,14 +66,14 @@ td {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
border: 1px solid #e3e3e3;
// border: 1px solid #e3e3e3;
width: 100%;
margin: auto;
padding: auto;
}
.header {
padding: 20px;
// padding: 20px;
width: 100%;
min-width: 350px;
}
@ -106,6 +106,8 @@ mat-card {
.top-right-float>button {
margin: 5px;
height: 40px;
margin-left: -70px;
margin-top: 7px;
}
mat-table {
@ -113,22 +115,30 @@ mat-table {
width: 100%;
display: table;
overflow-x: scroll;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
.table-headers {
padding: 5px;
color: #ffffff;
color: #353535;
font-weight: 900;
font-size: medium;
background-color: #46AC9E;
background-color: #ececec;
font-family:nucleo;
text-align: center;
}
.table-headers:hover {
background-color: #ececec;
color:#46AC9E;
}
.table-content {
padding: 5px;
overflow-wrap: inherit;
font-family:nucleo;
}
.table-column {
@ -153,15 +163,7 @@ input {
}
// .dialog-body {
// display: flex;
// justify-content: center;
// align-items: center;
// div {
// width: 90%;
// }
// }
.dialog-actions {
display: flex;
@ -216,7 +218,7 @@ input {
@media (max-width: 767px) {
.card {
min-width: 600px;
min-width: 900px;
}
}
@ -226,5 +228,123 @@ input {
}
.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,
MatTableModule,
MatPaginatorModule,
MatSortModule
MatSortModule,
ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'})
]
})
export class AuthModule { }

@ -1,25 +1,58 @@
<div class="backImg">
<div class="c-wrapper">
<div class="container">
<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="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>
<div class="row">
<img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo">
</div>
</mat-card-title> -->
<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-content>
<form *ngIf="!isNewPasswordScreen" [formGroup]="loginForm" (ngSubmit)="onVerifyOtp()">
<p>
<mat-form-field>
<mat-form-field style="margin-top: 30px;">
<input type="text" matInput placeholder="{{ 'email' | translate }}"
[disabled]="isVisibleOtp"
[disabled]="!isVisibleOtp"
formControlName="username" [(ngModel)]="user.username" style="width:100%">
</mat-form-field>
</p>
@ -31,18 +64,18 @@
</p>
<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 }}
</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 }}
</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 }}
</button>
</div>
<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>
</form>
@ -64,17 +97,21 @@
</p>
<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 }}
</button>
</div>
<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>
</form>
</mat-card-content>
</mat-card>
</div>
</div>
</div>
</div>
</div>

@ -43,3 +43,108 @@
justify-content: 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();
forgotCard:boolean = false
config = {
allowNumbersOnly: true,
length: 6,

@ -34,39 +34,54 @@
<div class="container" style="margin-top:20px;">
<div class="row">
<!-- <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">
<mat-card card="card-style">
<div class="col-12 col-sm-12 col-md-6 col-lg-5 col-xl-5">
<mat-card card="card-style" class="loginCard">
<mat-card-title>
<div class="row">
<!-- <img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo"> -->
</div>
</mat-card-title>
<mat-card-subtitle style="text-align: center;">
<b> {{ 'signIn' | translate | uppercase }} </b>
<mat-card-subtitle style="text-align: left;">
<span class="loginSpan">{{ 'login.' | translate }}</span>
</mat-card-subtitle>
<mat-card-content>
<form [formGroup]="loginForm" (ngSubmit)="onSubmit()">
<form [formGroup]="loginForm" (ngSubmit)="onSubmit()" class="form" style="width: 70%;margin-top:20px">
<p>
<mat-form-field>
<mat-form-field appearance="outline">
<mat-label>Email</mat-label>
<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>
</p>
<p style="margin-bottom: 0;">
<mat-form-field>
<input type="password" matInput placeholder="{{ 'password' | translate }}"
formControlName="password" [(ngModel)]="user.password" style="width:100%">
<mat-form-field appearance="outline">
<mat-label>Password</mat-label>
<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>
</p>
<div style="text-align: right;margin-bottom: 20px;margin-top: -10px;">
<a (click)="goToForgotPassword()" style="font-size: small;color: #ae1c1c;text-decoration: auto;">{{'forgotPass' | translate}}</a>
<div class="row" style="text-align: left;margin-bottom: 20px;margin-top: 12px;">
<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 class="button">
<button mat-raised-button style="color: rgb(255, 255, 255);background-color: #212529;width: 100%;" type="submit"> {{ 'login' | translate }}
<div class="button" style="margin-top: 40px;">
<button mat-raised-button class="loginButton" type="button" (click)="onSubmit()"> {{ 'login' | translate }}
<!-- <i class="bi bi-person-plus-fill"></i> -->
</button>
</div>
@ -77,9 +92,9 @@
<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>
</div>
</div> -->
</form>
</mat-card-content>
@ -89,7 +104,7 @@
</div>
</div>
</div>
</div>
<!-- <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">
@ -104,5 +119,7 @@
</footer>
</div> -->
<div class="footer" class="fixed-bottom"></div>

@ -17,6 +17,12 @@
display: flex;
justify-content: center;
margin: 100px 0px;
}
.loginCard{
box-shadow: 0 18px 20px rgba(0, 0, 0,0.2) !important;
border-radius: 17px;
}
.mat-form-field {
@ -68,4 +74,84 @@ mat-card-content {
left: 0;
bottom: 0;
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">
<!-- <nav class="navbar navbar-expand-lg" style="padding: 16.5px;">
@ -36,30 +39,30 @@
<div class="container" style="margin-top:20px;">
<div class="row">
<!-- <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">
<mat-card card="card-style">
<div class="col-12 col-sm-12 col-md-6 col-lg-5 col-xl-5">
<mat-card card="card-style" class="registerCard">
<mat-card-title>
<div class="row">
<!-- <img mat-card-image src="assets/accurate/images/salesapp.png" alt="logo"> -->
</div>
</mat-card-title>
<mat-card-subtitle style="text-align: center;">
<b> {{ 'register' | translate | uppercase }} </b>
<mat-card-subtitle style="text-align: left;">
<span class="loginSpan">{{ 'register' | translate }} </span>
</mat-card-subtitle>
<mat-card-content>
<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%">
<input matInput [(ngModel)]="this.userDetails.email" type="text" placeholder="{{ 'email' | translate }}">
</mat-form-field>
</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)"
style="color: darkred;">{{ 'generateOtp' | translate }}</button>
class="verifyOtpButton">{{ 'generateOtp' | translate }}</button>
</div>
</div>
</mat-card-content>
@ -83,7 +86,7 @@
</div>
<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>
</div>
</div>
@ -106,11 +109,11 @@
</div>
</mat-card-title>
<mat-card-subtitle style="text-align: center;">
<b> {{ 'register' | translate | uppercase }} </b>
<mat-card-subtitle style="text-align: left;">
<span class="loginSpan">{{ 'register' | translate }} </span>
</mat-card-subtitle>
<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">
<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"
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>
</mat-card-content>
@ -168,3 +171,5 @@
</div>
</footer>
</div> -->
</div>

@ -69,3 +69,70 @@
bottom: 0;
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) {
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)
},err=>{
this._uiService.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi'));
})
}
else {
this._uiService.toastMessage(this.errorTranslateService.translate("enterAValidEmailID"));
}
// 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)
// },err=>{
// this._uiService.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi'));
// })
// }
// else {
// this._uiService.toastMessage(this.errorTranslateService.translate("enterAValidEmailID"));
// }
}
openDialogbox(templateRef) {

@ -39,11 +39,19 @@
<!-- </nav> -->
<!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> -->
<br>
<br id="headingBreak">
<div class="text-center mt-4">
<h2 class="font-weight-bold " style="color: #5faca1;">Tender Details </h2>
</div><br>
<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 class="row d-flex justify-content-center ">
<div class="col-sm-11">
@ -52,8 +60,8 @@
<div class="row">
<div class="col-md-6">
<div class="table-responsive">
<table class="table table-bordered">
<thead class="table-dark">
<table class="table table-bordered some-element">
<thead class="table-dark ">
<tr>
<th colspan="2">Basic Details</th>
</tr>
@ -305,66 +313,70 @@
<th colspan="12">Tenders Documents</th>
</tr>
</thead>
<tbody>
<tbody *ngIf="nitItemDocuments.length > 0">
<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 >
<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>
<tr style="text-align: center;">
<th colspan="3">Document Type</th>
<th colspan="3">Document Name</th>
<th colspan="3">Description</th>
<th colspan="3" class="hide-on-print">Download</th>
</tr>
<tr *ngFor="let document of drawingsDocuments">
<td colspan="12">{{document.description}}</td>
<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>
<!-- <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>
<br>
<tbody>
<tbody *ngIf="workItemDocuments.length > 0">
<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>
<th colspan="4">Document Type</th>
<th colspan="4">Document Name</th>
<tr style="text-align: center;">
<th colspan="3">Document Type</th>
<th colspan="5">Document Name</th>
<th colspan="4">Description</th>
</tr>
<tr *ngFor="let document of workItemDocuments">
<td colspan="4">{{document.documentTypeD.documentType}}</td>
<td colspan="4">{{document.docName}}</td>
<td colspan="3">{{document.documentTypeD.documentType}}</td>
<td colspan="5">{{document.docName}}</td>
<td colspan="4">{{document.description}}</td>
</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>
</tbody>
<tbody>
<tbody *ngIf="drawingsDocuments.length > 0">
<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>
<th colspan="4">Document Type</th>
<th colspan="4">Document Name</th>
<th colspan="4">Description</th>
<tr class="hide-on-print">
<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 *ngFor="let document of nitItemDocuments">
<td colspan="4">{{document.documentTypeD.documentType}}</td>
<td colspan="4">{{document.docName}}</td>
<td colspan="4">{{document.description}}</td>
<tr *ngFor="let document of drawingsDocuments">
<td colspan="12">{{document.description}}</td>
</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>
</table>
</div>
@ -379,7 +391,7 @@
</tr>
</thead>
<tbody>
<tr>
<tr style="text-align: center;">
<th colspan="4">Document Type</th>
<th colspan="4">Description</th>
<th colspan="4">Document Format</th>

@ -6,8 +6,8 @@
margin-left: auto;
top: 10px;
position: relative;
}
.container-fluid2{
}
.container-fluid2{
width: 100%;
padding-right: 15px;
padding-left: 15px;
@ -15,33 +15,190 @@
margin-left: auto;
top: -1px;
position: relative;
}
}
.table td {
word-break: break-word;
@media print {
.hide-on-print {
display: none;
}
.nav-link:hover {
}
.nav-link:hover {
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);
cursor: pointer;
.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);
// .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 { MasterService } from 'src/app/_providers/_services/master.service';
import { UiService } from 'src/app/_providers/_services/ui.service';
import { environment } from 'src/environments/environment';
import { environment } from 'src/environments/environment.prod';
@Component({
selector: 'app-view',
@ -44,6 +44,7 @@ getData(){
this.tenderData = res
this.tenderDocuments = this.tenderData['tenderDoc']
console.log("data",this.tenderDocuments);
this.filterDataByCategory();
})
}
@ -68,6 +69,10 @@ filterDataByCategory() {
window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact';
}
print(): void {
window.print();
}
DownloadDrawingsZIP(){
const id = this.tenderId;
this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs,id).then((res)=>{
@ -99,14 +104,43 @@ filterDataByCategory() {
})
}
DownloadNIT(){
DownloadNIT(index: number) {
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() {
// console.log('clicked');
// const id = this.tenderId;

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

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

@ -47,12 +47,18 @@
<div class="container ">
<!-- <div class="row" style="text-align: center;">
<h2 class="home">Home</h2>
</div> -->
<div class="row">
<div class="col-12">
<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 class="card-responsive">
<div class="card-body-responsive">
<div class="table-responsive">
<!-- <table class="table table-bordered">
@ -86,21 +92,20 @@
<mat-card class="card">
<div class="top-bar">
<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>
<input matInput placeholder="{{ 'search' | translate }}" style="width: fit-content;"
[(ngModel)]="searchTerm" (keyup.enter)="search()"/>
[(ngModel)]="searchTerm" (keyup)="search()"/>
</mat-form-field>
</span>
<button mat-raised-button style="color: #46AC9E;" (click)="search()"> {{ 'go' | translate }}
</button>
<button mat-raised-button style="color: #46AC9E;" (click)="reset()"> {{ 'clear' | translate }}
<!-- <button mat-raised-button class="addButton" (click)="search()"> {{ 'go' | translate }}
</button>&nbsp; -->
<button mat-raised-button class="addButton" (click)="reset()"> {{ 'clear' | translate }}
</button>
</div>
<!-- <div class="top-left-float">
</div> -->
</div>
<br>
<br>
@ -109,38 +114,32 @@
class="table">
<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 }} -->
<!-- <mat-icon>sort</mat-icon> -->
</th>
<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">
<mat-icon style="transform: translateY(-10px);">
<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>
<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>
</button>
</td>
</ng-container>
<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 }}
<!-- <mat-icon>sort</mat-icon> -->
</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}}
</td>
</ng-container>
<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 }}
<mat-icon>sort</mat-icon>
<!-- <mat-icon>sort</mat-icon> -->
</th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
{{element?.title}}
@ -150,7 +149,7 @@
<ng-container matColumnDef="publishedDate">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="table-headers">
{{ 'publishedDate' | translate }}
<mat-icon>sort</mat-icon>
<!-- <mat-icon>sort</mat-icon> -->
</th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
{{element?.publishDate| date:"YYYY-MM-dd"}}
@ -161,9 +160,9 @@
</ng-container>
<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 }}
<mat-icon>sort</mat-icon>
<!-- <mat-icon>sort</mat-icon> -->
</th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
{{element?.bidOpenDate| date:"YYYY-MM-dd"}}
@ -173,17 +172,31 @@
</td> -->
</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">
<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 }}
<!-- <mat-icon>sort</mat-icon> -->
</th>
<td mat-cell *matCellDef="let element" style="padding: 5px;" class="table-content">
<button style="padding: 0;" mat-button color="primary"
<td mat-cell *matCellDef="let element" style="padding: 5px;text-align: center;" class="table-content">
<button mat-button
(click)="goToView(element.id)" [disabled]="false">
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}">
insert_drive_file
</mat-icon>
<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>
</button>
</td>
@ -195,11 +208,12 @@
<!-- <mat-icon>sort</mat-icon> -->
</th>
<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)" >
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}">
<!-- <mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#353535'}">
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>
</td>
@ -211,9 +225,9 @@
<!-- <mat-icon>sort</mat-icon> -->
</th>
<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)" >
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#46AC9E'}">
<mat-icon style="transform: translate(-12px,-2px);" [ngStyle]="{'color':'#353535'}">
cloud_upload
</mat-icon>
</button>

@ -66,7 +66,7 @@ td {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
border: 1px solid #e3e3e3;
// border: 1px solid #e3e3e3;
width: 100%;
margin: auto;
padding: auto;
@ -106,6 +106,8 @@ mat-card {
.top-right-float>button {
margin: 5px;
height: 40px;
margin-left: -74px;
margin-top: 7px;
}
mat-table {
@ -113,12 +115,15 @@ mat-table {
width: 100%;
display: table;
overflow-x: scroll;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
.table-headers {
padding: 5px;
color: #ffffff;
color: #353535;
font-weight: 900;
font-size: medium;
background-color: #46AC9E;
background-color: #ececec;
font-family:nucleo;
}
.table-headers:hover {
@ -129,6 +134,8 @@ mat-table {
.table-content {
padding: 5px;
overflow-wrap: inherit;
font-family:nucleo;
}
.table-column {
@ -214,9 +221,19 @@ input {
// }
@media (max-width: 767px) {
@media screen and(max-width: 767px) {
.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){
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 { Router } from '@angular/router';
import { ActivatedRoute, Router } from '@angular/router';
import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto';
import { MenuFormatDto } from 'src/app/_dto/menu-format.dto';
import { apiUrl } from 'src/app/_providers/_resources/api-url.properties';
@ -55,11 +55,15 @@ export class DashboardComponent implements OnInit {
enableDownload: boolean = true
amountPaid: boolean = false;
@ViewChild('paginator') paginator: MatPaginator;
@ViewChild(MatSort, { static: false }) sort: MatSort;
noData: boolean;
userId: string;
tenderId: number;
constructor(
private _menuService: MenuService,
@ -69,16 +73,19 @@ export class DashboardComponent implements OnInit {
private authenticationService: AuthService,
private _masterService: MasterService,
private errorService:ErrorTranslateService,
private datePipe: DatePipe
private datePipe: DatePipe,
private route: ActivatedRoute,
) {
// this.user$ = this.getUser();
this.seculevel = localStorage.getItem('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.getSchoolLogo();
if(this.seculevel == 'B'){
this.displayedColumns = ['actions','title','publishedDate','bidOpenDate','view','report'];
this.displayedColumns = ['actions','title','publishedDate','bidOpenDate','status','view','report'];
}
else{
this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','view','upload'];
@ -98,6 +105,7 @@ export class DashboardComponent implements OnInit {
this.enableDownload = true;
this.getData();
this.paymentCheck()
// await this._ui.userValidation()
// this.loading = true;
@ -125,10 +133,10 @@ export class DashboardComponent implements OnInit {
// console.log('1111111 ',element.bidSubStartDate);
// console.log('2222222 ',element.bidSubEndDate);
element.hide = false
element.hide = 'Active'
}
else
element.hide = true
element.hide = 'Closed'
}
this.dataCopy = res;
@ -143,9 +151,32 @@ export class DashboardComponent implements OnInit {
})
else
this._masterService.getMasterData(apiUrl.adminTenderView).then((res) =>{
console.log("tenderData=2=",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.pageLength = this.tenderData.length;
this.dataSource = new MatTableDataSource(this.tenderData);
@ -153,6 +184,8 @@ export class DashboardComponent implements OnInit {
this.dataSource.paginator = this.paginator;
this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false;
this.loading = false;
console.log("tenderData=2=",res);
},err=>{
console.error(err)
})
@ -198,6 +231,8 @@ export class DashboardComponent implements OnInit {
return compare(a.publishDate, b.publishDate, isAsc);
case 'bidOpenDate':
return compare(a.bidOpenDate, b.bidOpenDate, isAsc);
case 'status':
return compare(a.hide, b.hide, isAsc);
default:
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(){
this.router.navigate(['/login']);
}
@ -321,6 +367,12 @@ export class DashboardComponent implements OnInit {
}
goToUpload(tenderId){
this.paymentCheck()
if(!this.amountPaid){
this._ui.toastMessage(this.errorService.translate("pleasePayTheAmountForUpload"), 2000);
}else
this.router.navigate(['/tender-upload',tenderId]);
}
goToEdit(tenderId){
@ -331,6 +383,7 @@ export class DashboardComponent implements OnInit {
}
// public getUser(): Observable<User> {
// return of({
// email: localStorage.getItem('username'),
@ -345,8 +398,15 @@ export class DashboardComponent implements OnInit {
goToReport(id){
this.navigateTo(`bid-final-report/${id}`)
}
}
function compare(a: any, b: any, isAsc: boolean): number {
return (a < b ? -1 : 1) * (isAsc ? 1 : -1);

@ -11,8 +11,11 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
</ul>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button style=" background-color: gold;" (click)="onAccept()">Accept</button>
<button mat-button (click)="onClose()">Close</button>
<!-- <button mat-button style=" color: #46AC9E;" (click)="onAccept()">Accept</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>
`,
styleUrls: ['./dialog.component.scss']

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

@ -30,6 +30,10 @@
.resp{
min-height: 460px;
}
#customers td, #customers th {
padding-right: 2px;
}
}
.checkbox-container {
@ -43,3 +47,24 @@
font-family: 'Arial', sans-serif;
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 { MatDialog } from '@angular/material/dialog';
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 Swal from 'sweetalert2'
import { DialogComponent } from '../dialog/dialog.component';
import { DatePipe } from '@angular/common';
@Component({
selector: 'app-home-upload',
@ -35,9 +36,10 @@ export class HomeUploadComponent implements OnInit {
bidAmount:number;
agreeToTerms1: boolean = false;
agreeToTerms2: boolean = false;
showError: boolean = false;
showError: boolean = false;
tenderData: any;
@ -57,17 +59,31 @@ export class HomeUploadComponent implements OnInit {
fileFormat: any[]
userEmail: string;
emailBody: any;
username: string;
@ViewChild('bidAmountInput') bidAmountInput: ElementRef;
amountPaid: boolean = false;
constructor(
private router: Router,
private route: ActivatedRoute,
private _ui: UiService,
private _errorTranslate: ErrorTranslateService,
private _masterService: MasterService,
public dialog: MatDialog
public dialog: MatDialog,
private datePipe: DatePipe
) {
this.secuLevel = localStorage.getItem('seculevel');
this.userId = localStorage.getItem('userId');
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.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() {
this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => {
@ -118,6 +151,19 @@ export class HomeUploadComponent implements OnInit {
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) {
// 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);
this.selectedFiles = event.target.files;
let file = event.target.files[0]
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) {
this._masterService.postMasterData(apiUrl.userDocUpload + '/' + this.tenderId, fd, this.userId).then(res => {
this.tenderData.covers[i].file = res.fileName;
@ -210,19 +262,37 @@ export class HomeUploadComponent implements OnInit {
submit() {
if(!this.amountPaid){
this._ui.toastMessage(this._errorTranslate.translate("pleasePayTheAmountForUpload"), 2000);
return
}
if(!this.preSave())
return
let id ={
tenderId : this.tenderId,
userId : this.userId,
}
let body= {
bidAmount:this.bidAmount
}
this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{
console.log(res);
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> -->
<!-- <mat-progress-bar mode="indeterminate" color="warn"></mat-progress-bar> -->
<br>
<br id="headingBreak">
<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>
@ -55,7 +64,7 @@
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th colspan="2">Basic Details</th>
<th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Basic Details</th>
</tr>
</thead>
<tbody>
@ -97,12 +106,14 @@
</div>
<div class="col-md-6">
<div class="table-responsive">
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th colspan="2">Tender Fee Details</th>
<th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Tender Fee Details</th>
</tr>
</thead>
<tbody>
@ -118,10 +129,10 @@
<th>Tender Fee Exemption Allowed</th>
<td>{{tenderData.tenderFeeExemption}}</td>
</tr>
<!-- <tr>
<th>Fee Payable At</th>
<td>{{tenderData.feePayableAt}}</td>
</tr> -->
<tr class="hide-on-print">
<!-- <th>Fee Payable At</th> -->
<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>
</tbody>
</table>
</div>
@ -132,7 +143,7 @@
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th colspan="2">EMD Fee Details</th>
<th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">EMD Fee Details</th>
</tr>
</thead>
<tbody>
@ -163,7 +174,7 @@
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th colspan="2">Critical Dates</th>
<th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Critical Dates</th>
</tr>
</thead>
<tbody>
@ -211,7 +222,7 @@
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th colspan="2">Work Item Details</th>
<th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Work Item Details</th>
</tr>
</thead>
<tbody>
@ -295,74 +306,89 @@
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th colspan="12">Tenders Documents</th>
<th colspan="12" style="background-image: url('assets/img/thimg3.jpg');">Tenders Documents</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan="12" class="text-center" style="background-color: #b8b8b8;">Drawings Document</th>
</tr>
<tbody *ngIf="nitItemDocuments.length > 0">
<tr>
<th colspan="12"><button mat-raised-button id="zipFile" class=" float-right btn-sm"
(click)="DownloadDrawingsZIP()" > <i class="bi bi-file-earmark-zip"></i> Download as Zip
File</button> </th>
<th colspan="12" class="text-center" style="background-color:#f0f0f0;">Notice</th>
</tr>
<tr *ngFor="let document of drawingsDocuments">
<td colspan="12">{{document.description}}</td>
<tr style="text-align: center;">
<th colspan="3">Document Type</th>
<th colspan="3">Document Name</th>
<th colspan="3">Description</th>
<th colspan="3" class="hide-on-print">Download</th>
</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>
<br>
<tbody>
<tbody *ngIf="workItemDocuments.length > 0">
<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>
<th colspan="4">Document Type</th>
<th colspan="4">Document Name</th>
<tr style="text-align: center;">
<th colspan="3">Document Type</th>
<th colspan="5">Document Name</th>
<th colspan="4">Description</th>
</tr>
<tr *ngFor="let document of workItemDocuments">
<td colspan="4">{{document.documentTypeD.documentType}}</td>
<td colspan="4">{{document.docName}}</td>
<td colspan="3">{{document.documentTypeD.documentType}}</td>
<td colspan="5">{{document.docName}}</td>
<td colspan="4">{{document.description}}</td>
</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>
</th>
</tr>
</tbody>
</tbody><br>
<tbody>
<!-- <tbody *ngIf="nitItemDocuments.length > 0">
<tr>
<th colspan="12" class="text-center" style="background-color:#b8b8b8;">Notice</th>
</tr>
<tr>
<th colspan="4">Document Type</th>
<th colspan="4">Document Name</th>
<th colspan="4">Description</th>
<th colspan="3">Document Type</th>
<th colspan="3">Document Name</th>
<th colspan="3">Description</th>
<th colspan="3" class="hide-on-print">Download</th>
</tr>
<tr *ngFor="let document of nitItemDocuments">
<td colspan="4">{{document.documentTypeD.documentType}}</td>
<td colspan="4">{{document.docName}}</td>
<td colspan="4">{{document.description}}</td>
<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 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>
</tbody> -->
<tbody *ngIf="drawingsDocuments.length > 0">
<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 *ngFor="let document of drawingsDocuments">
<td colspan="12">{{document.description}}</td>
</tr>
</tbody>
</table>
</div>
@ -373,11 +399,11 @@
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th colspan="12">Required Documents Details</th>
<th colspan="12" style="background-image: url('assets/img/thimg3.jpg');">Required Documents Details</th>
</tr>
</thead>
<tbody>
<tr>
<tr style="text-align: center;">
<th colspan="4">Document Type</th>
<th colspan="4">Description</th>
<th colspan="4">Document Format</th>
@ -408,7 +434,7 @@
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th colspan="2">Tender Inviting</th>
<th colspan="2" style="background-image: url('assets/img/thimg3.jpg');">Tender Inviting</th>
</tr>
</thead>
<tbody>

@ -17,16 +17,22 @@
position: relative;
}
.table td {
word-break: break-word;
@media print {
.hide-on-print {
display: none;
}
}
.nav-link:hover {
color: rgb(255, 0, 0);
}
#zipFile:hover {
color: rgb(255, 0, 0);
cursor: pointer;
}
// #zipFile:hover {
// color: rgb(255, 0, 0);
// cursor: pointer;
// }
// .container-responsive {
// min-height: 100vh;
@ -41,7 +47,145 @@
// bottom: 0;
// width: 100%;
// }
// --------------------------------------------------------------------------------------------
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 { TransactionService } from 'src/app/_providers/_services/transaction.service';
import { UiService } from 'src/app/_providers/_services/ui.service';
import { environment } from 'src/environments/environment';
import { environment } from 'src/environments/environment.prod';
@Component({
selector: 'app-home-view',
@ -21,7 +21,7 @@ export class HomeViewComponent implements OnInit {
tenderData: any;
nitItemDocuments: any ;
nitItemDocuments: any;
workItemDocuments: any;
@ -36,15 +36,26 @@ export class HomeViewComponent implements OnInit {
newPaymentRow: any;
currentDate = new Date();
enableDownload: boolean = true
paymentStatus: string;
userId: string;
amountPaid: boolean = false;
seculevel: string;
displayedColumns: string[] = ['field', 'value'];
constructor(
private router: Router,
private route: ActivatedRoute,
private _masterService: MasterService,
private _transactionService: TransactionService,
private _ui:UiService,
private _ui: UiService,
private _errorTranslateService: ErrorTranslateService
) {
this.tenderId = +this.route.snapshot.paramMap.get('id');
@ -54,10 +65,13 @@ export class HomeViewComponent implements OnInit {
}
ngOnInit(): void {
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.getData()
this.getData();
this.getPaymentData();
}
@ -72,7 +86,7 @@ export class HomeViewComponent implements OnInit {
console.log("tenderData", res);
this.tenderData = res
this.tenderDocuments = this.tenderData['tenderDoc']
console.log("data",this.tenderDocuments);
console.log("data", this.tenderDocuments);
const saleStartDate = new Date(this.tenderData.saleStartDate);
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() {
@ -109,12 +141,19 @@ export class HomeViewComponent implements OnInit {
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;
this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs,id).then((res)=>{
this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs, id).then((res) => {
}, err => {
console.log('res===>', err);
@ -124,7 +163,7 @@ export class HomeViewComponent implements OnInit {
let newWindow = window.open(`${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`);
setTimeout(() => {
newWindow.close();
}, 100);
}, 10000);
}
if (err.status == 404) {
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;
this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod,id).then((res)=>{
console.log(index);
console.log(this.nitItemDocuments[index].docName);
// }, err => {
// console.log('res===>', err);
// if (err.status == 200) {
// console.log('start >>>');
// // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`);
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);
// }
// 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() {
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');
const id = this.tenderId;
// 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);
}
}
async paymentGateway() {
// if(this.seculevel != 'B'){
this.paymentDetails = new PurchaseDto();
this.paymentDetails.application = this.tenderId;
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)
console.log('this.paymentDetails===',this.paymentDetails);
console.log('this.paymentDetails===', this.paymentDetails);
this._transactionService.createPayment(this.paymentDetails).then(
res => {
@ -239,7 +304,7 @@ export class HomeViewComponent implements OnInit {
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>
<!-- <div class="row" id="Headerbutton">
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<button mat-raised-button color="primary" (click)="backButton()"
style="float: left;margin-top: 5px;margin-bottom: 5px;background-color: #46AC9E;">
Back
</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()"
style="float: right;margin-top: 5px;margin-bottom: 5px;background-color: #46AC9E;">
Print
</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()"
style="float: right;margin-top: 5px;margin-bottom: 5px;margin-right: 5px;background-color: #46AC9E;">
Excel Download
</button>
</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 id="section-to-print" class="container" style="background-color: white;">
<h6>
<!-- <div class="outerContainer"> -->
<!-- <h6 style="width: calc(100vw - 50px);margin-top: 18px;">
<b>
{{title | translate}}
<span class="titleSpan">{{title | translate}}</span>
<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>
{{'tender'|translate}} :
<span >
<span>
{{headerData?.title}}
</span>
</span>
</div>
<span >
<br>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6" id="publishingDateDiv">
<span class="publishingDate">
<br>
{{'publishedDate'|translate}} :
<span>
{{headerData?.publishDate | date: 'MMM d, y, h:mm:ss a'}}
</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>
{{'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>
{{'bidOpenDate'|translate}} :
<span >
<span>
{{headerData?.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}}
</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>
</h6>
<h6>{{'currentDate'|translate}}: {{today | date: 'MMM d, y, h:mm:ss a'}}</h6>
</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="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">
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th>{{title | translate}}</th>
<th></th>
<th></th>
</tr>
<tr >
<td></td>
<td></td>
<tr>
<td></td>
<td>Tender</td>
<td>Tender Name</td>
<td>
{{headerData?.publishDate}}
{{headerData?.title}}
</td>
</tr>
<tr >
<td></td>
<td></td>
<td></td>
<td>Published Date</td>
<td >
{{headerData?.bidOpenDate }}
<td>
{{headerData?.publishDate }}
</td>
</tr>
<tr >
<tr>
<td></td>
<td>Tender Id</td>
<td>
{{tenderInputId }}
</td>
<td></td>
<td>Bid Open Date</td>
<td>
{{headerData?.bidOpenDate}}
</td>
</tr>
<!-- <tr>
<td></td>
<td>Bid Open Date</td>
<td>
{{headerData?.sectionName}}
</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
@ -111,46 +237,49 @@
<td>
{{today | date: 'dd MMMM YYYY'}}
</td>
</tr>
<td></td>
</tr> -->
<tr></tr>
</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)">
<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>
{{'slNo'|translate}}.
{{'slNo'|translate}}
</div>
</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}}
</td>
</ng-container>
<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>
{{'name'|translate}}
<!-- <mat-icon>sort</mat-icon> -->
</div>
</th>
<td mat-cell *matCellDef="let element" class="col-body">
<td mat-cell *matCellDef="let element" class="table-content">
{{element?.userName}}
</td>
</ng-container>
<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>
{{'admissionNo'|translate}}
<!-- <mat-icon>sort</mat-icon> -->
</div>
</th>
<td mat-cell *matCellDef="let element" class="col-body">
<td mat-cell *matCellDef="let element" class="table-content">
{{element.rollNo }}
</td>
@ -159,26 +288,27 @@
<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>
{{'mobileNumber'|translate}}
<!-- <mat-icon>sort</mat-icon> -->
</div>
</th>
<td mat-cell *matCellDef="let element" class="col-body">
<td mat-cell *matCellDef="let element" class="table-content">
{{element?.mobileNumber}}
</td>
</ng-container>
<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>
{{'emailId'|translate}}
<!-- <mat-icon>sort</mat-icon> -->
</div>
</th>
<td mat-cell *matCellDef="let element" class="col-body">
<td mat-cell *matCellDef="let element" class="table-content">
{{element?.email}}
</td>
@ -187,13 +317,13 @@
<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>
{{'totalBidAmount'|translate}}
<!-- <mat-icon>sort</mat-icon> -->
</div>
</th>
<td mat-cell *matCellDef="let element" class="col-body">
<td mat-cell *matCellDef="let element" class="table-content">
{{element?.finalBidAmt}}
</td>
@ -202,15 +332,18 @@
<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>
{{'documents'|translate}}
<!-- <mat-icon>sort</mat-icon> -->
</div>
</th>
<td mat-cell *matCellDef="let element" class="col-body">
<button mat-stroked-button (click)="downloadUserDocs(element?.userId)">
<mat-icon style="color: black;">file_download</mat-icon></button>
<td mat-cell *matCellDef="let element" class="table-content" style="text-align: center;">
<!-- <button mat-stroked-button (click)="downloadUserDocs(element?.userId)">
<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>
</ng-container>
@ -220,7 +353,47 @@
<tr mat-header-row *matHeaderRowDef="displaycolumns ;sticky: true;"></tr>
<tr mat-row *matRowDef="let row; columns: displaycolumns;"></tr>
</table>
</mat-table>
</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%;
text-align: center;
}
margin: auto;
padding: auto;
}
.header {
.header {
padding: 20px;
width: 100%;
min-width: 350px;
}
}
.header>h6>a {
.header>h6>a {
text-decoration: none;
color: #262627;
}
}
.header>h6>a:hover {
.header>h6>a:hover {
text-decoration: underline;
cursor: pointer;
}
}
mat-card {
min-width: 350px;
}
.top-left-float {
display: flex;
min-width: 282px;
}
#section-to-print h6 {
text-align: center;
}
.top-right-float {
display: flex;
min-width: 161px;
}
table {
width: 100%;
}
.top-left-float>button,
.top-right-float>button {
margin: 5px;
height: 40px;
}
.table-container {
width: calc(100vw - 50px);
mat-table {
padding-top: 10px !important;
// table-layout: fixed;
width: 100%;
display: table;
overflow-x: scroll;
border: 1px solid grey;
// height: 50vh;
}
.col-header {
color: #000000;
font-weight: bolder;
font-size: medium;
text-align: center;
background-color: #46AC9E;
.table-headers {
padding: 5px;
border: 1px solid #000000;
color: #505050;
font-weight: 900;
font-size: medium;
background-color: #f0f0f0;
font-family: nucleo;
}
.col-body {
padding: 5px;
text-align: center;
border: 1px solid #000000;
.table-headers:hover {
background-color: #ececec;
color: #46AC9E;
}
.col-footer {
.table-content {
padding: 5px;
text-align: center;
font-weight: bolder;
// border: 1px solid #000000;
background-color: rgb(212, 212, 212);
overflow-wrap: inherit;
font-family: nucleo;
}
.row {
margin: 5px;
.table-column {
width: 100%;
}
}
.container {
margin: 5px;
input {
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 {
display: none;
.mat-slide-toggle-bar {
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 {
.mat-sort-header-arrow {
color: #000000;
.btn-group-right {
// min-width: 95px;
margin-top: 5px;
}
}
.mat-sort-header-container {
display: flex;
justify-content: center;
.hide {
display: none;
}
:host ::ng-deep {
.mat-form-field-infix {
border-bottom: 0px solid white;
}
.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;
}
.row{
.backButton {
display: none;
}
* {
font-size: 17px !important;
.printButton {
display: none;
}
.excelButton {
display: none;
}
}
.mat-row:nth-child(even) {
background-color: rgb(255, 255, 255);
}
.select{
padding: 10px;
font-size: 16px;
border-radius: 5px;
background-color: #f2f2f2;
border: none;
box-shadow: none;
}
.select:focus {
outline: none;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
}
.mat-row:nth-child(odd) {
background-color: rgb(241, 241, 241);
}
.table-container {
margin-top: 20px
}
.backButton {
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 { MatDialog } from '@angular/material/dialog';
import { MatSort, Sort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { ActivatedRoute, Router } from '@angular/router';
import { apiUrl } from 'src/app/_providers/_resources/api-url.properties';
import { MasterService } from 'src/app/_providers/_services/master.service';
import { environment } from 'src/environments/environment';
import { environment } from 'src/environments/environment.prod';
import * as XLSX from 'xlsx';
@Component({
selector: 'app-bid-final-report',
@ -35,10 +36,24 @@ export class BidFinalReportComponent implements OnInit {
tableData: any;
tenderInputId: any;
dialogRef: any;
captchaText: string;
userCaptchaInput: string;
captchaMatching: boolean = true;
userDocId: any;
isIconRotating: boolean;
constructor(
private route: ActivatedRoute,
private _router: Router,
private _masterService:MasterService
private _masterService: MasterService,
private dialog: MatDialog
) {
this.tenderId = +this.route.snapshot.paramMap.get('id');
@ -60,14 +75,15 @@ export class BidFinalReportComponent implements OnInit {
}
getHeaderData(id) {
this._masterService.getMasterDatabyId(apiUrl.getTender,id).then(res=>{
this._masterService.getMasterDatabyId(apiUrl.getTender, id).then(res => {
this.headerData = res;
this.tenderInputId = res.tenderId
})
}
getTableData(id){
this._masterService.getMasterDatabyId(apiUrl.bidReport,id).then(res=>{
this.tableData = res.filter(element=> element.status == 'S');
getTableData(id) {
this._masterService.getMasterDatabyId(apiUrl.bidReport, id).then(res => {
this.tableData = res.filter(element => element.status == 'S');
this.dataSource = new MatTableDataSource(this.tableData);
this.dataSource.sort = this.sort;
})
@ -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}`
}
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 {
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 { MatMomentDateModule } from '@angular/material-moment-adapter';
import {MatTooltipModule} from '@angular/material/tooltip';
// import { NgxMatTimepickerModule } from 'ngx-mat-timepicker';
import { LOCALE_ID } from '@angular/core';
@NgModule({
@ -49,7 +48,7 @@ import { LOCALE_ID } from '@angular/core';
MatNativeDateModule,
MatDatepickerModule,
MatMomentDateModule,
MatTooltipModule
MatTooltipModule,
]
})
export class ReportModule { }

@ -41,8 +41,9 @@ export const apiUrl = {
noticeDownlaod:"file-upload/notice",
bidReport:"payment-master/bid-report",
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">
<!-- <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>
<mat-menu #userMenu="matMenu" xPosition="before">
<div class="user-menu-title">
<div>
<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/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;"> -->
<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=""> -->
</div>
<span class="user-menu-title__name" style="font-weight: 600;text-align: center;">{{getUser()}} </span>

@ -3,7 +3,7 @@
@import 'src/app/styles/variables';
.user-button {
background-color:#4b978d;
background-color: #4b978d;
box-shadow: none;
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 flatlogicEmail: string = "https://flatlogic.com";
adminUser: boolean = false;
username: string;
secuLevel: string;
public signOutEmit(): void {
localStorage.removeItem('emailId')
@ -36,10 +38,10 @@ ngOnInit(){
this.getEmail();
}
getUser(){
let secuLevel = localStorage.getItem('seculevel')
if(secuLevel && secuLevel == 'B'){
this.secuLevel = localStorage.getItem('seculevel')
if(this.secuLevel && this.secuLevel == 'B'){
if(secuLevel === 'B'){
if(this.secuLevel === 'B'){
this.adminUser = true
}
else{
@ -47,9 +49,9 @@ ngOnInit(){
}
// this.cdr.detectChanges();
}
let username = localStorage.getItem('username')
if(username)
return username
this.username = localStorage.getItem('username')
if(this.username)
return this.username
else
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;">
<div class="container">
<!-- <div id="imageHead"> -->
<p class="navbar-brand d-flex align-items-center" href="#" >
<img src="assets/img/emblem2.jpg" alt="" class="img-fluid" style="height: 40px;">
Thrickodithanam SCB
<img src="assets/img/emblem3.png" alt="" class="img-fluid" (click)="goToWebsite()" style="height: 40px;cursor: pointer;">
<span class="title" style="cursor: pointer;" (click)="goToWebsite()">Thrickodithanam SCB</span>
</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">
<span class="navbar-toggler-icon"></span>
</button>
</button> -->
<!-- </div> -->
<div class=" justify-content-end" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item" id="imageHead">
<!-- <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 class="nav-item" id="imageHead">
@ -36,9 +36,13 @@
</div>
</div>
</nav>
<nav class="navbar navbar-dark-responsive" style="background-image: url('assets/img/panel_background.jpg');padding: 45px;">
</nav>
<!-- <nav class="navbar navbar-dark-responsive" style="background-image: url('assets/img/panel_background.jpg');padding: 45px;">
</nav> -->
</div>
<!-- *ngIf="!this.router.url.includes('report') " -->

@ -75,3 +75,16 @@
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{
this.router.navigate(['/dashboard'])
}
// if(currentLoc = '/dashboard'){
// this. goToWebsite()
// }
}
goToSignIn(){

Binary file not shown.

@ -119,6 +119,7 @@
"pincodeCantBeBlank":"Pincode Can't Be Blank",
"clarificationEndDateCantBeBlank":"Clarification 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",
"UploaddocumentCantBeBlank": "Please Upload Documents",
"documentSizeCantBeBlank":"Document Size Can't Be Blank",
@ -132,10 +133,13 @@
"TenderCreatedSuccessfully":"Tender Created Successfully",
"pleaseEnableDrawingDocuments": "Please Enable Drawing 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",
"pleaseEnterBidFinalAmount":"Please Enter Bid Final Amount",
"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...",
"loadingData": "Loading Data...",
"login": "Login",
"login.": "log in•",
"addNewPayment": "Add New Payment",
"makeNewPayment": "Make New Payment",
"message": "Message",
@ -333,13 +334,14 @@
"taxAmount":"Tax Amount",
"hscSac":"HSN/SAC No",
"companySettings":"Company Settings",
"register":"Register",
"register":"Register",
"generateOtp":"Generate OTP",
"enterOtp":"Enter OTP",
"submit":"Submit",
"confPass":"Confirm Password",
"addTender":"Add Tender",
"forgotPass":"Forgot Password?",
"forgotYourPass":"Forgot Your Password?",
"assetImagePath":"Asset File Path",
"title":"Title",
"publishedDate":"Published Date",
@ -350,6 +352,8 @@
"report":"Report",
"totalBidAmount":"Total Bid Amount",
"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;
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://tenderapi.accuratesoftware.online/api/v1',
// apiUrl: 'http://192.168.1.112:3200/api/v1',
production: true,
hmr: false,

@ -4,7 +4,7 @@
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',
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"
"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=="
"resolved" "https://registry.npmjs.org/@angular/animations/-/animations-11.2.13.tgz"
"version" "11.2.13"
@ -180,7 +180,7 @@
"universal-analytics" "0.4.23"
"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=="
"resolved" "https://registry.npmjs.org/@angular/common/-/common-11.2.13.tgz"
"version" "11.2.13"
@ -220,7 +220,7 @@
"resolved" "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz"
"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=="
"resolved" "https://registry.npmjs.org/@angular/core/-/core-11.2.13.tgz"
"version" "11.2.13"
@ -232,7 +232,7 @@
"resolved" "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz"
"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=="
"resolved" "https://registry.npmjs.org/@angular/forms/-/forms-11.2.13.tgz"
"version" "11.2.13"
@ -251,7 +251,7 @@
dependencies:
"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=="
"resolved" "https://registry.npmjs.org/@angular/material/-/material-11.2.12.tgz"
"version" "11.2.12"
@ -1201,7 +1201,7 @@
"merge-source-map" "^1.1.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=="
"resolved" "https://registry.npmjs.org/@ng-idle/core/-/core-11.1.0.tgz"
"version" "11.1.0"
@ -1224,7 +1224,7 @@
"enhanced-resolve" "5.7.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=="
"resolved" "https://registry.npmjs.org/@ngx-translate/core/-/core-13.0.0.tgz"
"version" "13.0.0"
@ -5626,7 +5626,7 @@
"resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
"version" "1.0.4"
"moment@^2.18.1", "moment@^2.29.1":
"moment@^2.29.1":
"integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
"resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz"
"version" "2.29.4"
@ -7426,13 +7426,6 @@
dependencies:
"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":
"integrity" "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ=="
"resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz"
@ -7440,6 +7433,13 @@
dependencies:
"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":
"integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"

Loading…
Cancel
Save