datadumb and qc report changes

This commit is contained in:
bitbucket 2023-01-19 12:50:19 +05:30
parent 4eeaca9d5d
commit 7ee9d40033
63 changed files with 3021 additions and 164 deletions

View File

@ -1691,6 +1691,21 @@
"tslib": "^1.9.0"
}
},
"angular-svg-icon": {
"version": "15.0.0",
"resolved": "https://registry.npmjs.org/angular-svg-icon/-/angular-svg-icon-15.0.0.tgz",
"integrity": "sha512-qurcOPbGri1ZveGd3Iol7CRSpveaxu21V1VCPwMSUfXlwwUT1hL4Aq3VE/RkJw5zZmFuR8akgaKeHLD+CFjjEQ==",
"requires": {
"tslib": "^2.3.1"
},
"dependencies": {
"tslib": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
}
}
},
"angular-tree-component": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/angular-tree-component/-/angular-tree-component-6.1.0.tgz",

View File

@ -40,6 +40,7 @@
"angular-notifier": "^4.1.2",
"angular-sortablejs": "^2.7.0",
"angular-split": "^3.0.2",
"angular-svg-icon": "^15.0.0",
"angular-tree-component": "6.1.0",
"chart.js": "2.6.0",
"core-js": "^2.6.11",

View File

@ -68,6 +68,8 @@ import { ReqTokenInterceptor } from './_guard/req-token.interceptor';
import { DynamicNotifyComponent } from './layouts/dynamic-notify/dynamic-notify.component';
import { OtpComponent } from './session/otp/otp.component';
import { NotifierModule, NotifierOptions } from 'angular-notifier';
// import { SelectAllComponent } from './select-all/select-all.component';
// import { CustomNotificationComponent } from './layouts/custom-notification/custom-notification.component';
//import { SelectAllComponent } from './select-all/select-all.component';
@ -165,7 +167,7 @@ const pdCustomNotifierOptions: NotifierOptions = {
MatFormFieldModule,
HttpClientModule,
ResizableModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,

View File

@ -30,6 +30,10 @@ export const AppRoutes: Routes = [{
path:'template2',
loadChildren:'./template2/template2.module#Template2Module'
},
{
path:'datadump',
loadChildren:'./datadump/datadump.module#DatadumpModule'
},
{
path:'quality_check_discussion',
loadChildren:'./quality-check/quality-check.module#QualityCheckModule'

View File

@ -0,0 +1,116 @@
<h2 mat-dialog-title class="paragraph_change">
<div fxFlex="70" align="left" style="padding: 10px !important;">
Trigger New Item in Data Dump List
</div>
<div fxFlex="30" align="end" style="padding: 10px !important;">
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="right" mat-dialog-close><mat-icon>close</mat-icon></button>
</div>
</h2>
<!-- <h5 style="text-align: center;">{{message}}</h5> -->
<mat-dialog-content >
<!-- <mat-card *ngFor="let list of digilock_list;let quesIndex=index">
<mat-card-content>{{list.applicant_name
}}</mat-card-content>
</mat-card> -->
<mat-card>
<!-- <mat-expansion-panel [(expanded)]="xpandStatus">
<mat-expansion-panel-header>
<mat-panel-title class="text-xs-left">
<mat-toolbar-row>
<mat-icon>filter_list</mat-icon>
<span class="toolbar-space"></span>
<span>Advanced Filter</span>
</mat-toolbar-row>
</mat-panel-title>
</mat-expansion-panel-header> -->
<mat-list class="m-gap p-gap">
<div [formGroup]="searchForm">
<mat-form-field style="width:25%">
<mat-select formControlName="pd_lender" placeholder="Lender Name" (selectionChange)="onChangeCategory($event)">
<mat-option *ngFor="let ent of entity_lender" [value]="ent.entity_id">{{ent.full_name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field style="width:25%">
<mat-select formControlName="pd_products" placeholder="Products">
<mat-option *ngFor="let pro of product" [value]="pro.product_id">{{pro.product_name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field style="width:25%">
<mat-select formControlName="pd_Customer_Segment" placeholder="Customer Segment">
<mat-option *ngFor="let pro of customer_segments" [value]="pro.customer_segment_id">{{pro.customer_segment}}</mat-option>
</mat-select>
</mat-form-field> &nbsp; &nbsp;
<mat-form-field style="width:25%">
<mat-select formControlName="pd_type" placeholder="PD Type">
<mat-option *ngFor="let type of pd_types" [value]="type.pd_type_id">{{type.type_name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field style="width:25%">
<mat-select formControlName="pd_state" placeholder="State" (selectionChange)="onChangeCity($event)">
<mat-option *ngFor="let status of states" [value]="status.state_id">{{status.name }}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field style="width:25%">
<mat-select formControlName="pd_city" placeholder="City">
<mat-option *ngFor="let city of city" [value]="city.city_id">{{city.city_name}}</mat-option>
</mat-select>
</mat-form-field> &nbsp; &nbsp;
<mat-form-field style="width:25%">
<input matInput [matDatepicker]="picker1" [min]="searchForm.get('pd_from_date').value" [max]="todaydate" formControlName="pd_from_date" placeholder="Choose a From date">
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
<mat-datepicker #picker1></mat-datepicker>
</mat-form-field>
<mat-form-field style="width:25%">
<input matInput [matDatepicker]="picker2" [min]="searchForm.get('pd_from_date').value" [max]="todaydate" formControlName="pd_to_date" placeholder="Choose a To date">
<mat-datepicker-toggle matSuffix [for]="picker2"></mat-datepicker-toggle>
<mat-datepicker #picker2></mat-datepicker>
</mat-form-field>
<!-- <div align="right">
<button type="button" mat-raised-button mat-icon-button (click)="onReset()"
matTooltip="Reset" matTooltipPosition="above" class="mr-1 mb-1 hover-icon" color="primary">
<mat-icon>settings_backup_restore</mat-icon>
</button>
<button type="button" mat-raised-button mat-icon-button (click)="searchItem()"
matTooltip="Search" matTooltipPosition="above" class="mr-1 mb-1 hover-icon" color="primary" type="button">
<mat-icon>search</mat-icon>
</button>
</div> -->
</div>
</mat-list>
<!-- </mat-expansion-panel> -->
</mat-card>
<!-- Copyright 2022 Google LLC. All Rights Reserved.
Use of this source code is governed by an MIT-style license that
can be found in the LICENSE file at https://angular.io/license -->
</mat-dialog-content>
<mat-dialog-actions align="end" >
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" color="primary" type="button" (click)="save(searchForm.value)" > <mat-icon>save</mat-icon></button>
<!-- <button class="submit-btn" color="primary" mat-raised-button type="submit" >
Submit
</button> -->
</mat-dialog-actions>
<notifier-container></notifier-container>

View File

@ -0,0 +1,53 @@
.paragraph_change {
color: #fff !important;
background-color: #e00201 !important;
}
::ng-deep { .no-padding > mat-dialog-container {
// background: black;
padding: 0;
// overflow-y: scroll !important;
}
}
.example-full-width {
width: 100%;
}
.mat-dialog-content{
margin:0px !important;
}
// mat-placeholder{
// margin-top: 20px;
// word-wrap: break-word;
// }
// input{
// height:40px;
// }
.mat-form-field-label {
white-space: normal;
}
textarea.mat-input-element {
padding: 0px 0;
margin: 5px 0;
}
.mat-input-placeholder {
white-space: normal;
}
mat-form-field {
margin: 0 2%;
}
.paragraph_change {
color: #fff !important;
background-color: #e00201 !important;
}
table {
width: 100%;
}
.mat-elevation-z8{
margin-top: 10px;
}

View File

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AddDatadumpComponent } from './add-datadump.component';
describe('AddDatadumpComponent', () => {
let component: AddDatadumpComponent;
let fixture: ComponentFixture<AddDatadumpComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ AddDatadumpComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AddDatadumpComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,135 @@
import { Component, Inject, OnInit } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
import { NotifierService } from 'angular-notifier';
import { DatadumpService } from '../datadump.service';
@Component({
selector: 'app-add-datadump',
templateUrl: './add-datadump.component.html',
styleUrls: ['./add-datadump.component.scss']
})
export class AddDatadumpComponent implements OnInit {
searchForm: FormGroup;
entity_lender: any=[]
product: any =[];
customer_segments: any=[];
pd_types: any=[];
states: any=[];
city: any=[];
constructor(private dialogRef: MatDialogRef<AddDatadumpComponent>, private notifier: NotifierService,
@Inject(MAT_DIALOG_DATA) public data: any,private _fb:FormBuilder,private datadumpservice : DatadumpService) {
this.getApiList()
}
ngOnInit() {
this.searchForm = this._fb.group(
{
pd_lender:[null],
pd_products:[null],
pd_Customer_Segment:[null],
pd_type:[null],
pd_state:[null],
pd_city:[null],
pd_from_date:[null],
pd_to_date:[null]
});
console.log( this.searchForm)
this.searchForm.controls['pd_products'].disable()
this.searchForm.controls['pd_Customer_Segment'].disable()
this.searchForm.controls['pd_type'].disable()
this.searchForm.controls['pd_city'].disable()
}
getApiList(){
this.datadumpservice.getListOfLenders().subscribe(res => {
console.log(res)
if(res.status == 200 ){
this.entity_lender = res.records
}
})
let param = {"master_name":"STATE"}
this.datadumpservice.getListOfMaster(param).subscribe(res => {
console.log(res)
if(res.status == 200 ){
this.states = res.records
}
})
console.log( this.searchForm)
}
onChangeCategory(event) {
console.log(event.value);
this.datadumpservice.getEntityPreferences(event.value).subscribe(res => {
console.log(res)
if(res.status == 200 ){
console.log(res)
this.product = res.records.products
this.customer_segments = res.records.customer_segments
this.pd_types = res.records.pd_types
this.searchForm.controls['pd_products'].enable()
this.searchForm.controls['pd_Customer_Segment'].enable()
this.searchForm.controls['pd_type'].enable()
}
})
}
onChangeCity(event){
console.log(event.value);
this.datadumpservice.getListOfStatesAndCities(event.value).subscribe(res => {
console.log(res)
if(res.status == 200 ){
console.log(res)
this.city = res.records.cities
this.searchForm.controls['pd_city'].enable()
}
})
}
save(data){
console.log(data)
function toJSONLocal(date) {
var local = new Date(date);
local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return local.toJSON().slice(0, 10);
}
let param = {
"fk_lender_id": data.pd_lender,
"fk_pd_type_id": data.pd_type,
"fk_customer_segment_id": data.pd_Customer_Segment,
"fk_product_id": data.pd_products,
"fk_city_id": data.pd_city,
"from_date":toJSONLocal(data.pd_from_date),
"to_date":toJSONLocal(data.pd_to_date),
"fk_createdby":1
}
console.log(param)
this.datadumpservice.saveDatadumpRequest(param).subscribe(res => {
console.log(res)
if(res.status == 200 ){
console.log(res)
this.dialogRef.close(0)
this.notifier.notify('success', 'Your Changes Updated.!');
}else{
this.dialogRef.close()
}
})
}
}

View File

@ -0,0 +1,29 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { DatadumpComponent } from './datadump/datadump.component';
const routes: Routes = [
{
path: '',
redirectTo: 'datadumplist',
},{
path: '',
children: [
{
path: 'datadumplist',
component: DatadumpComponent,
//component: QuestionViewComponent,
},
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class DatadumpRoutingModule { }

View File

@ -0,0 +1,13 @@
import { DatadumpModule } from './datadump.module';
describe('DatadumpModule', () => {
let datadumpModule: DatadumpModule;
beforeEach(() => {
datadumpModule = new DatadumpModule();
});
it('should create an instance', () => {
expect(datadumpModule).toBeTruthy();
});
});

View File

@ -0,0 +1,113 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DatadumpRoutingModule } from './datadump-routing.module';
import { DatadumpComponent } from './datadump/datadump.component';
import { MatAutocompleteModule, MatBadgeModule, MatBottomSheetModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatDividerModule, MatExpansionModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatNativeDateModule, MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatRippleModule, MatSelectModule, MatSidenavModule, MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatStepperModule, MatTableModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatTreeModule, MAT_DATE_LOCALE } from '@angular/material';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DatadumpService } from './datadump.service';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FlexLayoutModule } from '@angular/flex-layout';
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
import { NgxSpinnerModule } from 'ngx-spinner';
import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
import { AddDatadumpComponent } from './add-datadump/add-datadump.component';
import { NotifierModule, NotifierOptions } from 'angular-notifier';
const customNotifierOptions: NotifierOptions = {
position: {
horizontal: {
position: 'right',
distance: 12
},
vertical: {
position: 'top',
distance: 32,
gap: 10
}
},
theme: 'material',
behaviour: {
autoHide: 5000,
onClick: 'hide',
onMouseover: 'pauseAutoHide',
showDismissButton: true,
stacking: 4
},
animations: {
enabled: true,
show: {
preset: 'slide',
speed: 300,
easing: 'ease'
},
hide: {
preset: 'fade',
speed: 300,
easing: 'ease',
offset: 50
},
shift: {
speed: 300,
easing: 'ease'
},
overlap: 150
}
};
@NgModule({
imports: [
CommonModule,
DatadumpRoutingModule,
MatCardModule,
MatTabsModule,
MatIconModule,
MatInputModule,
MatIconModule,
MatAutocompleteModule,
MatInputModule,
MatRadioModule,
MatTableModule,
MatPaginatorModule,
MatButtonModule,
MatProgressBarModule,
MatToolbarModule,
FlexLayoutModule,
NgxDatatableModule,
NgxSpinnerModule,
MatChipsModule,MatProgressSpinnerModule,
FormsModule,MatSlideToggleModule,
NotifierModule.withConfig(customNotifierOptions),
MatSelectModule, MatListModule,MatGridListModule, MatTabsModule, MatBadgeModule, MatCheckboxModule,MatStepperModule,MatSidenavModule ,MatMenuModule, MatButtonToggleModule,
ReactiveFormsModule,
MatBottomSheetModule,
MatDividerModule,
MatNativeDateModule,
MatRippleModule,
MatSliderModule,
MatSnackBarModule,
MatTreeModule,
MatDatepickerModule,
MatDialogModule,MatSortModule,
NgxMatSelectSearchModule,MatTooltipModule, MatExpansionModule,
MatRadioModule,MatProgressSpinnerModule ,
MatButtonModule,MatTableModule,MatPaginatorModule,
MatProgressBarModule,MatDialogModule, MatSortModule,
MatToolbarModule,MatSelectModule,MatListModule, MatMenuModule,
MatSlideToggleModule,MatTooltipModule,
FormsModule, ReactiveFormsModule,
],
declarations: [DatadumpComponent, AddDatadumpComponent],
providers : [
DatadumpService,{ provide: MAT_DATE_LOCALE, useValue: 'en-GB' }
],
entryComponents:[AddDatadumpComponent]
})
export class DatadumpModule { }

View File

@ -0,0 +1,12 @@
import { TestBed } from '@angular/core/testing';
import { DatadumpService } from './datadump.service';
describe('DatadumpService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: DatadumpService = TestBed.get(DatadumpService);
expect(service).toBeTruthy();
});
});

View File

@ -0,0 +1,62 @@
import { Injectable } from '@angular/core';
/** Common Import Section */
import { BehaviorSubject, Observable } from 'rxjs';//for Datatables
import { HttpClient } from '@angular/common/http';
import { catchError } from 'rxjs/operators';
import { of } from 'rxjs';
/** Imported Service Files Are., */
import { AwsService } from '../AwsService/aws.service';
/** Environment */
import { environment } from 'environments/environment';
@Injectable({
providedIn: 'root'
})
export class DatadumpService {
private apiUrl = environment.apiEndpoint;
constructor(private _http: HttpClient,
private _aws:AwsService) { }
getDatadumpRequestList(): Observable<any> {
// Add safe, URL encoded search parameter if there is a search term
return this._http.get<any[]>(this.apiUrl + "getDatadumpRequestList");
}
getListOfLenders(): Observable<any> {
// Add safe, URL encoded search parameter if there is a search term
return this._http.get<any[]>(this.apiUrl + "getListOfLenders");
}
getEntityPreferences(lenderid): Observable<any> {
// Add safe, URL encoded search parameter if there is a search term
return this._http.get<any[]>(this.apiUrl + "getEntityPreferences/"+lenderid);
}
getListOfMaster(param): Observable<any> {
// Add safe, URL encoded search parameter if there is a search term
return this._http.post<any>(this.apiUrl + "getListOfMaster", param);
}
getListOfStatesAndCities(param): Observable<any> {
// Add safe, URL encoded search parameter if there is a search term
return this._http.post<any>(this.apiUrl + "getListOfStatesAndCities", param);
}
saveDatadumpRequest(param): Observable<any> {
// Add safe, URL encoded search parameter if there is a search term
return this._http.post<any>(this.apiUrl + "saveDatadumpRequest", param);
}
downloadDatadumpRequest(id): Observable<any> {
// Add safe, URL encoded search parameter if there is a search term
return this._http.get<any[]>(this.apiUrl + "downloadDatadumpRequest?request_id="+id);
}
}

View File

@ -0,0 +1,139 @@
<div id="datadump">
<mat-card>
<div fxLayout="row" fxLayoutAlign="start center" class="mb-1">
<div class="ml-xs mr-xs">
<mat-card-title><span style="font-size:24px;"> Data Dump</span></mat-card-title>
</div>
</div>
<mat-card-content>
<div class="example-container mat-elevation-z8" style="margin-top:26px;">
<div class="example-header">
<div fxLayout="row" fxLayoutAlign="start center" class="mb-2" >
<mat-form-field dividerColor="primary" class="ml-xs mr-xs" style="width: 30%;">
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
</mat-form-field>
<label style="text-align: right;margin-left:57%;" fxLayoutAlign="start center" fxFlexOffset="50px">
<button mat-fab class="mr-1 mb-1" style="margin-top: 7px;"color="primary" (click)="add()"><mat-icon>add</mat-icon></button>
</label>
</div>
</div>
<h4 style="text-align: center;" *ngIf="dataSource.data.length == 0">No Records found ....!</h4>
<mat-table [dataSource]="dataSource" matSort *ngIf="dataSource.data.length > 0" >
<ng-container matColumnDef="createdby">
<mat-header-cell *matHeaderCellDef mat-sort-header>Created By </mat-header-cell>
<mat-cell *matCellDef="let us; let i = index;">
<span > {{us.createdby}}</span>
</mat-cell>
</ng-container>
<ng-container matColumnDef="pd_type_name">
<mat-header-cell *matHeaderCellDef mat-sort-header> Pd Type </mat-header-cell>
<mat-cell *matCellDef="let us"> <span > {{us.pd_type_name}}</span> </mat-cell>
</ng-container>
<ng-container matColumnDef="lender_full_name">
<mat-header-cell *matHeaderCellDef mat-sort-header>Lender </mat-header-cell>
<mat-cell *matCellDef="let us; let i = index;"> <span [matTooltip]="us.lender_full_name">{{us.lender_short_name}}</span> </mat-cell>
</ng-container>
<ng-container matColumnDef="product_abbr">
<mat-header-cell *matHeaderCellDef mat-sort-header>Product </mat-header-cell>
<mat-cell *matCellDef="let us"> <span [matTooltip]="us.product_name">{{us.product_abbr}} </span></mat-cell>
</ng-container>
<ng-container matColumnDef="customer_segment_name">
<mat-header-cell *matHeaderCellDef mat-sort-header> Customer Segment </mat-header-cell>
<mat-cell *matCellDef="let us"> <span [matTooltip]="us.customer_segment_name">{{us.customer_segment_abbr}}</span> </mat-cell>
</ng-container>
<ng-container matColumnDef="city_name">
<mat-header-cell *matHeaderCellDef mat-sort-header> City</mat-header-cell>
<mat-cell *matCellDef="let us"> {{us.city_name}} </mat-cell>
</ng-container>
<ng-container matColumnDef="from_date">
<mat-header-cell *matHeaderCellDef mat-sort-header>From Date
</mat-header-cell>
<mat-cell *matCellDef="let us"> {{us.from_date}} </mat-cell>
</ng-container>
<ng-container matColumnDef="to_date">
<mat-header-cell *matHeaderCellDef mat-sort-header>To Date
</mat-header-cell>
<mat-cell *matCellDef="let us"> {{us.to_date}} </mat-cell>
</ng-container>
<ng-container matColumnDef="status">
<mat-header-cell *matHeaderCellDef mat-sort-header>Status
</mat-header-cell>
<mat-cell *matCellDef="let us"> <span [ngStyle] = "{'color':us.status == 'PENDING' ? '#ff9800' : '#0c8d11'}"> {{us.status}}</span> </mat-cell>
</ng-container>
<!-- <ng-container matColumnDef="IsActive">
<mat-header-cell *matHeaderCellDef mat-sort-header> Active </mat-header-cell>
<mat-cell *matCellDef="let us">
<mat-slide-toggle
class="example-margin"
[checked]="us.isactive == 1 ? true : false " [color]="color"
[matTooltip]="us.isactive == 1 ? 'Active': 'Deactive'" matTooltipPosition="above"
(click)="isactive(us.userid,us.aws_name)">
</mat-slide-toggle>
</mat-cell>
</ng-container> -->
<ng-container matColumnDef="Actions">
<mat-header-cell *matHeaderCellDef> Download </mat-header-cell>
<mat-cell *matCellDef="let us">
<!-- <a mat-icon-button [color]="color" class="hover-icon" matTooltip="Edit" matTooltipPosition="above" (click)="editUserDetails(us.userid,us.aws_name)"> -->
<!-- <mat-card>
<mat-card-content> -->
<!-- <h2>Spinner</h2> -->
<div *ngIf="loading && us.status != 'PENDING'; else content ">
<div class="spinner__loading">
<div>
<mat-progress-spinner
diameter="30"
[value]="value"
mode="determinate">
</mat-progress-spinner>
</div>
</div>
</div>
<button *ngIf="!loading && us.status != 'PENDING'; else content" mat-mini-fab color="warn" class="spinner"
type="button" matTooltip="Ready To Download"
(click)="download(us)"><mat-icon >cloud_done</mat-icon>
</button>
<!-- </mat-card-content>
</mat-card> -->
<!-- Copyright 2019 Google LLC. All Rights Reserved.
Use of this source code is governed by an MIT-style license that
can be found in the LICENSE file at http://angular.io/license -->
<!-- </a> -->
<!-- <a mat-icon-button class="hover-icon" matTooltip="Edit" matTooltipPosition="above" (click)="deleteuser(us)"><mat-icon>delete_forever</mat-icon></a> -->
<!-- <a mat-icon-button class="hover-icon" matTooltip="Edit" matTooltipPosition="above" (click)="adminedituser(us)"><mat-icon>account_circle</mat-icon></a> -->
</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;">
</mat-row>
</mat-table>
<mat-paginator [pageSize]="pageSize" [pageSizeOptions]="[5, 10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</mat-card-content>
</mat-card>
</div>
<notifier-container></notifier-container>

View File

@ -0,0 +1,116 @@
table {
width: 100%;
}
th {
text-align: left;
}
.active{
color: green;
font-size: 20px;
}
.active:hover{
color:red;
font-size:25px;
}
.deactive{
color: red;
font-size: 20px;
}
.deactive:hover{
color: green;
font-size: 25px;
}
.example-container {
display: flex;
flex-direction: column;
min-width: 300px;
}
.example-header {
min-height: 64px;
padding: 8px 24px 0;
background: #fff;
}
.mat-form-field {
font-size: 14px;
width: 100%;
}
.mat-table {
overflow: auto;
max-height: 500px;
}
.mat-table {
display: table;
width: 100%;
overflow: auto;
max-height: 500px;
> .mat-header-row, > .mat-row {
display: table-row;
padding: 0;
border: none;
> .mat-header-cell, > .mat-cell {
display: table-cell;
height: 48px;
vertical-align: middle;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
}
}
}
/** Table CSS -nocontent */
.nocontent {
color: red;
font-size: 16px;
text-align: center;
}
/** Table CSS - Search(or)Filter Field */
.mat-form-field {
font-size: 14px;
width: 100%;
}
.filter-container {
display: flex;
flex-direction: column;
min-width: 300px;
}
.filter-header {
min-height: 64px;
padding: 8px 24px 0;
}
// mat-card {
// display: flex;
// flex-direction: column;
// }
.file {
display: flex;
justify-content: space-between;
align-items: center;
}
.spinner__loading {
display: flex;
justify-content: center;
}
.spinner{
margin-left: 28%;
}
#datadump{
zoom: 90%;
}

View File

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DatadumpComponent } from './datadump.component';
describe('DatadumpComponent', () => {
let component: DatadumpComponent;
let fixture: ComponentFixture<DatadumpComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DatadumpComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DatadumpComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,123 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { MatDialog, MatIconRegistry, MatPaginator, MatSort, MatTableDataSource } from '@angular/material';
import { DomSanitizer } from '@angular/platform-browser';
import { NotifierService } from 'angular-notifier';
import { interval, Subscription } from 'rxjs';
import { AddDatadumpComponent } from '../add-datadump/add-datadump.component';
import { DatadumpService } from '../datadump.service';
@Component({
selector: 'app-datadump',
templateUrl: './datadump.component.html',
styleUrls: ['./datadump.component.scss']
})
export class DatadumpComponent implements OnInit {
public dataLength: number;
public dataSource = new MatTableDataSource();
displayedColumns = ['createdby','pd_type_name','lender_full_name','product_abbr','customer_segment_name','city_name','from_date','to_date','status','Actions'];
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
color="primary";
// pagination variable details
pageSize = 10;
userdata: any = [];
loader: boolean = false;
value = 0;
loading = true;
searchForm: FormGroup;
constructor(private datadumpservice : DatadumpService, private sanitizer: DomSanitizer, private readonly matIconRegistry: MatIconRegistry,private _fb:FormBuilder, private dialog: MatDialog, private notifier: NotifierService,) {
this.matIconRegistry.addSvgIcon('download', this.sanitizer.bypassSecurityTrustResourceUrl('assets/images/download.svg'));
}
ngOnInit() {
this.loadContent();
this.getApiList()
}
ngAfterViewInit() {
this.dataSource.paginator = this.paginator;
this.dataSource.sort = this.sort;
}
applyFilter(filterValue: string) {
filterValue = filterValue.trim(); // Remove whitespace
filterValue = filterValue.toLowerCase(); // Datasource defaults to lowercase matches
this.dataSource.filter = filterValue;
}
getApiList(){
this.datadumpservice.getDatadumpRequestList().subscribe(res => {
console.log(res)
if(res.status == 200 ){
this.dataLength = res.records.length;
this.dataSource.data = res.records
}
})
}
loadContent() {
this.loading = true;
const subs$: Subscription = interval(200).subscribe(res => {
this.value = this.value + 10;
if(this.value === 120) {
subs$.unsubscribe();
this.loading = false;
this.value = 0;
console.log('Ha terminado');
}
});
}
add(){
const dialogRef = this.dialog.open(AddDatadumpComponent, {
// position: { right: '0'},
disableClose: true,
minHeight:'40%',
maxHeight:'75%',
minWidth: '50%',
maxWidth: '75%',
});
dialogRef.afterClosed()
.subscribe(dataresult => {
if(dataresult == 0){
this.getApiList()
// if(dataresult.length>0){
// this.pdf_merge_data = dataresult
// console.log( this.pdf_merge_data )
// }
}
});
}
download(param){
console.log(param)
this.datadumpservice.downloadDatadumpRequest(param.request_id).subscribe(res => {
console.log(res)
if(res.status == 200 ){
this.notifier.notify('success', 'Download Successfully.!');
window.open(res.uri, "_blank");
}else{
this.notifier.notify('warning', res.msg);
}
})
}
}

View File

@ -98,6 +98,7 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
'entityid':this.currentUser.fk_entity_type_id,
'profilepic':this.currentUser.profilepic
}
localStorage.setItem('videocall_userid', this.currentUser.userid)
this.users.getprofilepic(users).subscribe(res=>{
this.profileurl = res;
if(this.profileurl.dataStatus == true){

View File

@ -90,9 +90,13 @@
<!-- <b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD - ' + details.parent_pd_id }}</b> -->
<b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD' }}</b>
</span><br>
<!-- <span class="fontsize" *ngIf="!details.lender_applicant_id"> Not Provided</span>
<span class="fontsize" *ngIf="details.lender_applicant_id"> {{details.lender_applicant_id}}</span>
<span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span><br> -->
<span class="fontsize" *ngIf="!details.lender_applicant_id"> Not Provided</span>
<span class="fontsize" *ngIf="details.lender_applicant_id"> {{details.lender_applicant_id}}</span>
<span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span><br>
<span class="fontsize" *ngIf="details.lender_applicant_id"> {{details.lender_applicant_id}}</span>
<span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span> <br>
<span class="fontsize" *ngIf="details.fk_pd_type =='4'">( {{details.fi_type}} )</span>
<small mat-line *ngIf="details.fin_institute_name != null">{{details.fin_institute_name}}</small>
</mat-cell>
</ng-container>

View File

@ -89,9 +89,14 @@
<!-- <b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD - ' + details.parent_pd_id }}</b> -->
<b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD' }}</b>
</span><br>
<span class="fontsize" *ngIf="!details.lender_applicant_id"> Not Provided</span>
<!-- <span class="fontsize" *ngIf="!details.lender_applicant_id"> Not Provided</span>
<span class="fontsize" *ngIf="details.lender_applicant_id"> {{details.lender_applicant_id}}</span>
<span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span><br>
<span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span><br> -->
<span class="fontsize" *ngIf="!details.lender_applicant_id"> Not Provided</span>
<span class="fontsize" *ngIf="details.lender_applicant_id"> {{details.lender_applicant_id}}</span>
<span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span> <br>
<span class="fontsize" *ngIf="details.fk_pd_type =='4'">( {{details.fi_type}} )</span>
<small mat-line *ngIf="details.fin_institute_name != null">{{details.fin_institute_name}}</small>
</mat-cell>
</ng-container>

View File

@ -181,9 +181,12 @@ export class DynamicQuestionTemplateComponent implements OnInit {
this.formGroupN.get('pincode').patchValue((res.pdMasterList.pincode_id
|| ''))
} else if(this.parent_ques.question_key == 'Name_of_the_Person_met'){
this.formGroupN.get('Name_of_the_Person_met').patchValue((res.pdMasterList.applicat_details[0].applicant_name
let name = localStorage.getItem('pdApplicantData')
let res = JSON.parse(name)
this.formGroupN.get('Name_of_the_Person_met').patchValue((res.toString()|| ''))
|| ''))
}
}
if(this.parent_ques.question_key == 'avail_loan_moratorium_facility'){

View File

@ -170,7 +170,7 @@ else
}
}
loadTemplate() {
localStorage.setItem('callApi','0')
this.is_loading = true
// let localId = this.getLocalFormId()
// console.log("d",this.pd_all_details.form_id,Number(this.pd_all_details.form_id))
@ -287,6 +287,212 @@ else
//formValues = JSON.parse(records.json)
if(this.pd_all_details_data.FormData.form_id =='34'){
this.quesService.formanswers = records
// this.quesService.formanswers = [
// {
// "answer_value": "https://test-lender21.s3.ap-south-1.amazonaws.com/pd3369/eCeE12022-11-07-12-08-18.jpeg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAR7TQUR2JQYXKFYXA%2F20221108%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20221108T092822Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Signature=233fd1b2ba52d0674fa32b7e6b6943d35d6a465c2d16c0a2e626f188c51da6f2",
// "question": "Selfie with person met",
// "question_key": "selfie_with_person_met",
// "type": "6",
// "raw_validations": [],
// "validations": [],
// "api_properties": null,
// "onchange_properties": null,
// "answers": null,
// "is_repeatable": null,
// "is_multiple": 0,
// "group_title": null,
// "is_loader": "",
// "is_saved": "",
// "is_image_status": false,
// "pd_document_id": "14441"
// },
// {
// "answer_value": "saved",
// "question": "ID card",
// "question_key": "id_card",
// "type": "6",
// "raw_validations": [],
// "validations": [],
// "api_properties": null,
// "onchange_properties": null,
// "answers": null,
// "is_repeatable": null,
// "is_multiple": 0,
// "group_title": null,
// "is_loader": "",
// "is_saved": "",
// "is_image_status": false
// },
// {
// "answer_value": "saved",
// "question": "Machinery Image",
// "question_key": "machinery_image",
// "type": "6",
// "raw_validations": [],
// "validations": [],
// "api_properties": null,
// "onchange_properties": null,
// "answers": null,
// "is_repeatable": null,
// "is_multiple": 0,
// "group_title": null,
// "is_loader": "",
// "is_saved": "",
// "is_image_status": false
// },
// {
// "is_repeatable": "1",
// "is_multi_disabled": "0",
// "group_title": "Approach to PD Location",
// "group_type": "6",
// "question_key": "approach_to_pd_location",
// "questions_group": [
// {
// "questions": [
// {
// "answer_value": "https://test-lender21.s3.ap-south-1.amazonaws.com/pd3369/T3c5g2022-11-07-12-08-30.jpeg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAR7TQUR2JQYXKFYXA%2F20221108%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20221108T092822Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Signature=a06aa90a179256f54d1af81de108bf65f27a533ad64af8565fab8c9b126077a3",
// "question": "Approach to PD Location",
// "question_key": "approach_to_pd_location",
// "type": "6",
// "raw_validations": [],
// "validations": [],
// "api_properties": null,
// "onchange_properties": null,
// "answers": null,
// "is_repeatable": null,
// "is_multiple": 0,
// "group_title": null,
// "is_loader": "",
// "is_saved": "",
// "is_image_status": false,
// "pd_document_id": "14442"
// }
// ]
// }
// ]
// },
// {
// "is_repeatable": "1",
// "is_multi_disabled": "0",
// "group_title": "Name Board Seen",
// "group_type": "6",
// "question_key": "name_board_seen",
// "questions_group": [
// {
// "questions": [
// {
// "answer_value": "saved",
// "question": "Name Board Seen",
// "question_key": "name_board_seen",
// "type": "6",
// "raw_validations": [],
// "validations": [],
// "api_properties": null,
// "onchange_properties": null,
// "answers": null,
// "is_repeatable": null,
// "is_multiple": 0,
// "group_title": null,
// "is_loader": "",
// "is_saved": "",
// "is_image_status": false
// }
// ]
// }
// ]
// },
// {
// "is_repeatable": "1",
// "is_multi_disabled": "0",
// "group_title": "Stock Photograph's",
// "group_type": "6",
// "question_key": "stock_image",
// "questions_group": [
// {
// "questions": [
// {
// "answer_value": "saved",
// "question": "Stock Photograph's",
// "question_key": "stock_image",
// "type": "6",
// "raw_validations": [],
// "validations": [],
// "api_properties": null,
// "onchange_properties": null,
// "answers": null,
// "is_repeatable": null,
// "is_multiple": 0,
// "group_title": null,
// "is_loader": "",
// "is_saved": "",
// "is_image_status": false
// }
// ]
// }
// ]
// },
// {
// "is_repeatable": "1",
// "is_multi_disabled": "0",
// "group_title": "Documents photographs",
// "group_type": "6",
// "question_key": "documents_interior_image",
// "questions_group": [
// {
// "questions": [
// {
// "answer_value": "saved",
// "question": "Documents photographs",
// "question_key": "documents_interior_image",
// "type": "6",
// "raw_validations": [],
// "validations": [],
// "api_properties": null,
// "onchange_properties": null,
// "answers": null,
// "is_repeatable": null,
// "is_multiple": 0,
// "group_title": null,
// "is_loader": "",
// "is_saved": "",
// "is_image_status": false
// }
// ]
// }
// ]
// },
// {
// "is_repeatable": "1",
// "is_multi_disabled": "0",
// "group_title": "VIDEOS",
// "group_type": "6",
// "question_key": "video",
// "questions_group": [
// {
// "questions": [
// {
// "answer_value": "https://test-lender21.s3.ap-south-1.amazonaws.com/pd3369/video/fileName2.mp4?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAR7TQUR2JQYXKFYXA%2F20221108%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20221108T094754Z&X-Amz-SignedHeaders=host&X-Amz-Expires=604800&X-Amz-Signature=c1b8dab3113b0d24cf1c06744981ef159d47f50ac1c98699274d56813ec4c085",
// "question": "VIDEOS",
// "question_key": "video",
// "type": "6",
// "raw_validations": [],
// "validations": [],
// "api_properties": null,
// "onchange_properties": null,
// "answers": null,
// "is_repeatable": null,
// "is_multiple": 0,
// "group_title": null,
// "is_loader": "",
// "is_saved": "",
// "is_image_status": false
// }
// ]
// }
// ]
// }
// ]
}else{
formValues = records.json
this.quesService.formanswers= formValues

View File

@ -1,4 +1,4 @@
<button [ngStyle]="{'color':role_id == '20' ? '#0d93a9' :'#f44336'}" (click)="capture($event)" mat-button mat-raised-button [disabled]="sales_pd_type == '2'">Capture
<button [ngStyle]="{'color':role_id == '20' ? '#0d93a9' :'#f44336'}" (click)="capture($event)" mat-button mat-raised-button >Capture
<mat-icon name="camera" *ngIf="!addMoreBtn">add_a_photo</mat-icon>
<mat-icon name="camera" *ngIf="addMoreBtn">add_a_photo</mat-icon>
</button>

View File

@ -26,7 +26,7 @@ import { LoaderService } from 'app/shared/loaderService/loader.service';
styleUrls: ['./capture-btn.component.scss']
})
export class CaptureBtnComponent implements OnInit {
@Input() json_index:any;
@Input() addMoreBtn;
@Output() imageDataEmitter = new EventEmitter
@Output() singleDataEmitter = new EventEmitter
@ -36,7 +36,7 @@ export class CaptureBtnComponent implements OnInit {
constructor(private ng2ImgMax:Ng2ImgMaxService,private loaderService:LoaderService) {
this.role_id = localStorage.getItem('user_role')
this.sales_pd_type = localStorage.getItem('sales_pd_type')
console.log(this.sales_pd_type)
console.log(this.json_index)
}
ngOnInit(): void {
@ -45,6 +45,7 @@ export class CaptureBtnComponent implements OnInit {
capturedImage(event){
this.loaderService.showMatSpinnerDialog('Fetching Data...')
console.log(event);
console.log(this.json_index)
let imageData= event.target.files[0]
this.ng2ImgMax.resizeImage(imageData, 450, 650).subscribe(
@ -52,6 +53,7 @@ export class CaptureBtnComponent implements OnInit {
this.imageDataEmitter.emit(result)
this.singleDataEmitter.emit(result)
localStorage.setItem('callApi','1')
this.loaderService.closeMatSpinnerDialog()
},
error => {

View File

@ -361,7 +361,13 @@ export class QuestionServiceService {
// FOR SETTING THE ARRAY OF VALIDATORS COMING FROM JSON Temp,
settingArrayofValidators(data,curr_control,curr_index){
console.log("entered 334",data,curr_control,curr_index);
if(data.hasOwnProperty('validations') && data.validations.length > 0 ){
if(data.hasOwnProperty('validations') ){
if(data.validations instanceof Array){
if( data.validations.length > 0){
const validList :any= [];
let validator_value
data.validations=data.validations.filter(val=>val.isactive != '0')
@ -392,6 +398,8 @@ export class QuestionServiceService {
console.log("after setting validators 363",curr_control)
}
}
}
}
// END OF SETTINGARRAYOFVALIDATORS FUN
// FOR GETTING THE VALIDATION VALUE

View File

@ -752,4 +752,10 @@ generatesateliteimage(param:any): Observable<any>{
})
)
}
saveShortsVideo(imagesDetails)
{
console.log('savepdimg',imagesDetails);
// let record = {'records':imagesDetails};
return this._http.post(api_url+'saveShortsVideo',imagesDetails);
}
}

View File

@ -430,7 +430,13 @@
<mat-icon style="font-size: 14px; line-height: 0px;">edit</mat-icon>
</button> -->
</div>
<img class="image-class" [src]="single_ques.get('answer_value').value" imageViewer class="doc-image-bucket" >
<img *ngIf="single_ques.get('question').value != 'VIDEOS'" class="image-class" [src]="single_ques.get('answer_value').value" imageViewer class="doc-image-bucket" >
<video *ngIf="single_ques.get('question').value == 'VIDEOS'"
[src]="single_ques.get('answer_value').value"
style=" width: 200px;
height: 170px;"
controls></video>
<br/>
</div>
</div>
@ -450,8 +456,8 @@
<span style="margin:0px;" *ngIf="(single_ques.get('is_saved').value == false &&
single_ques.get('is_loader').value == false) && (single_ques.value.hasOwnProperty('is_saved') &&
single_ques.value.hasOwnProperty('is_loader'))" (click)="imageReupload(single_ques)">
<div style="margin-top: -17px;padding:0px;"><button mat-ion-button clear><mat-icon style="color:lightcoral;" name="refresh-circle"></mat-icon></button></div>
<div style="margin-top: -20px;padding:0px;"><p style="font-size: 10px">Click to ReUpload</p></div>
<!-- <div style="margin-top: -17px;padding:0px;"><button mat-ion-button clear><mat-icon style="color:lightcoral;" name="refresh-circle"></mat-icon></button></div>
<div style="margin-top: -20px;padding:0px;"><p style="font-size: 10px">Click to ReUpload</p></div> -->
</span>
</div>
<!-- <input *ngIf="image.Name =='' && image.option != 'dummy'" width="20px" ion-input type="text" placeholder="Document Name" (blur)="changeName($event.target.value,i,image.image)"> -->
@ -467,10 +473,14 @@
<!-- <button mat-raised-button color="warn" style="min-width: 65px !important;" [disabled]="sales_pd_type == '2'" (click)="addData(g_i,parent_ques,group_ques.get('questions').value,$event,'camera',single_ques)">
<mat-icon>camera_alt</mat-icon>+
</button> -->
<span (click)="getIndex(g_i,parent_ques,group_ques.get('questions').value,single_ques)">
<span *ngIf="single_ques.get('question').value != 'VIDEOS'" (click)="getIndex(g_i,parent_ques,group_ques.get('questions').value,single_ques)">
<app-capture-btn class="file-btn" (imageDataEmitter)="addImage($event,g_i,parent_ques,group_ques.get('questions').value,single_ques)" ></app-capture-btn>
</span>
<!-- <button class="ml-1 mr-1 hover-icon" mat-raised-button clear style="color: #f3432c" [disabled]="sales_pd_type == '2'" (click)="addData(g_i,parent_ques,group_ques.get('questions').value,$event,'camera',single_ques)"><mat-icon style="font-size:25px">camera_alt</mat-icon>+</button> -->
<span *ngIf=" parent_ques.get('group_title').value == 'VIDEOS'" (click)="getIndex(g_i,parent_ques,group_ques.get('questions').value,single_ques)">
<app-video-capture-btn class="file-btn2" (videoDataEmitter)="addvideo($event,g_i,parent_ques,group_ques.get('questions').value,single_ques)" ></app-video-capture-btn>
</span>
<!-- <button class="ml-1 mr-1 hover-icon" mat-raised-button clear style="color: #f3432c" type="file" (change)="capturedImage($event)" ><mat-icon style="font-size:25px">camera_alt</mat-icon> <input *ngIf="single_ques.get('question').value == 'VIDEOS'" type="file" (change)="capturedImage($event)" id="input-file" name="file" accept="video/*" capture="user" style="display: none"></button> -->
</div>
</div>

View File

@ -28,6 +28,7 @@ import { CameraService } from '../ques-template/providers/camera/camera.service'
import { ApiServiceService } from '../ques-template/providers/services/api-service.service';
import { FormComponent } from '../form/form.component';
import { PdTrigerService } from 'app/personal-discussion/pd-service/pd-triger.service';
import { DomSanitizer } from '@angular/platform-browser';
// import { ImageEditComponent } from './image-edit/image-edit.component';
// const originFormControlNameNgOnChanges = FormControlName.prototype.ngOnChanges;
// FormControlName.prototype.ngOnChanges = function () {
@ -69,6 +70,7 @@ export class QuesTemplateComponent {
@ViewChild('accordion') Accordion: MatAccordion
@ViewChild('mapanel') matExpansionPanel:MatExpansionPanel
@Output() imageDataEmitter = new EventEmitter
@Output() videoDataEmitter = new EventEmitter
@Output() singleDataEmitter = new EventEmitter
@ViewChild('dummy_img_more') dummyImgMoreRef: ElementRef;
emittedFormGroup: any = null;
@ -90,7 +92,8 @@ export class QuesTemplateComponent {
pd_all_details_data: any;
parent_index: any=[];
parent_control: any=[];
constructor( private pdTriggerService:PdTrigerService,private cameraService: CameraService,public dialogRef: MatDialogRef<FormComponent>,private route: ActivatedRoute,private router: Router,private dialog:MatDialog,private _fb:FormBuilder,private questionService:QuestionServiceService,private SalesPdService:SalesPdService,notifier: NotifierService,private loaderService:LoaderService) {
prev_url : any;
constructor( private sanitizer : DomSanitizer, private pdTriggerService:PdTrigerService,private cameraService: CameraService,public dialogRef: MatDialogRef<FormComponent>,private route: ActivatedRoute,private router: Router,private dialog:MatDialog,private _fb:FormBuilder,private questionService:QuestionServiceService,private SalesPdService:SalesPdService,notifier: NotifierService,private loaderService:LoaderService) {
this.role_id = localStorage.getItem('LenderRoleID')
console.log('Hello QuesTemplateComponent Component');
this.text = 'Hello World';
@ -360,6 +363,33 @@ console.log(this.pdstatus)
}
}
capturedImage(event){
this.loaderService.showMatSpinnerDialog('Fetching Data...')
console.log(event);
// console.log(this.sales_pd_type,this.videoDataEmitter)
let imageData= event.target.files[0]
let files = imageData
// var URL = window.URL;
//var URL = window.URL || window.webkitURL;
var file = new Blob([files],{"type" : "video\/mp4"});
//var value = URL.createObjectURL(file);
console.log(file)
// this.ng2ImgMax.resizeImage(imageData, 450, 650).subscribe(
// result => {
//this.videoDataEmitter.emit(file)
//localStorage.setItem('callApi','1')
this.loaderService.closeMatSpinnerDialog()
// this.imageDataEmitter.emit(result)
// this.singleDataEmitter.emit(result)
// localStorage.setItem('callApi','1')
// this.loaderService.closeMatSpinnerDialog()
// },
// error => {
// console.log('😢 Oh no!', error);
// }
// );
}
proceedonChangeProperty(local_value_obj?){
console.log("On Change Property",this.quesAnsForm.value.questions);
@ -528,6 +558,315 @@ this.proceedonChangeProperty(modified)
this.current_index = index;
}
getIndex_name(index,q,data,single_ques) {
console.log('curr', index);
console.log(q);
// setTimeout(function(){
// console.log(q);
// },3000);
// console.log(q.controls);
this.tmp =[]
this.tmp.push(q)
console.log(data);
data.forEach(element => {
console.log(element.question_key);
});
console.log(this.tmp);
this.tmp[0].value.question_key
console.log( this.tmp[0].value.group_title)
console.log( this.tmp[0].value.question_key)
return this.tmp[0].value.group_title
this.tmp_ques = single_ques;
console.log(single_ques)
this.tmp_control = this.questionService
this.current_index = index;
}
addvideo2(event, index, parent_index, data,single_ques1) {
console.log(event, index, parent_index, data,single_ques1)
const formData:any = new FormData();
formData.append('video_file', event);
this.pd_all_details_data = JSON.parse(localStorage.getItem('pd_all_details'))
let params = {
filename:'fileName6.mp4',
"pd_id": this.pd_all_details_data.pdMasterList.pd_id,
"form_id": this.pd_all_details_data.FormData.form_id,
}
formData.append('records',JSON.stringify(params))
console.log(formData)
this.SalesPdService.saveShortsVideo(formData).subscribe(apiresult=>{
if(apiresult['dataStatus']){
console.log(apiresult)
let result:any =apiresult
this.imageData = this.quesAnsForm.value.questions
//this.imageData[this.current_index].img_url = result.records.uri
console.log( this.current_index)
if (this.current_index != 'last') {
if (this.imageData[this.current_index].is_multiple == 1) {
console.log('multi');
let img_param = {img_url: result.records.uri, is_base64: true};
this.imageData[this.current_index].img_data.push(img_param);
console.log(this.imageData)
// this.sendImage(this.imageData, this.imageData[this.current_index].img_data.length - 1);
} else {
this.imageData[this.current_index].img_url = result.records.uri;
console.log(this.imageData[this.current_index])
console.log(this.imageData)
// this.sendImage(this.imageData);
}
}
console.log( this.imageData)
}
})
}
addvideo(param_data, index, parent_index, data,single_ques1) {
// this.loaderService.showMatSpinnerDialog('Fetching Data...')
// this.ngxService.start();
let event = param_data.file
console.log(event.name)
let s:any = this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(event));
this.prev_url= s
console.log(this.prev_url)
console.log(this.quesAnsForm)
console.log(parent_index)
console.log(this.tmp_ques)
console.log(parent_index['controls'].questions_group)
this.tmp[0].value.group_title
console.log( this.tmp[0].value.question_key)
console.log(data)
data[0].question = this.tmp[0].value.group_title
data[0].question_key = this.tmp[0].value.question_key
data=data.filter(group_indi=>!group_indi.hasOwnProperty('additional_field') && group_indi.additional_field != 1 )
console.log(data)
console.log(single_ques1)
let single_ques = this.tmp_ques
console.log(single_ques)
console.log(event, index);
this.imageData = this.quesAnsForm.value.questions
console.log(this.quesAnsForm.value.questions)
// console.log(this.questions_JSON.questions)
console.log(this.imageData);
const reader = new FileReader();
// let imagePath = event;
reader.readAsDataURL(event);
reader.onload = (_event) => {
// this.imageData = reader.result;
// this.cameraService.getPosition().then(geoCords => {
// let geoCoordinates;
// if (geoCords != 'error') {
// geoCoordinates = geoCords;
// } else {
// geoCoordinates = null;
// }
// console.log(geoCords);
const formData:any = new FormData();
formData.append('video_file', event);
this.pd_all_details_data = JSON.parse(localStorage.getItem('pd_all_details'))
let params_data = {
filename: param_data.name,
"pd_id": this.pd_all_details_data.pdMasterList.pd_id,
"form_id": this.pd_all_details_data.FormData.form_id,
}
formData.append('records',JSON.stringify(params_data))
console.log(formData)
// console.log(param)
this.SalesPdService.saveShortsVideo(formData).subscribe(apiresult=>{
console.log(apiresult)
if(apiresult['dataStatus']){
console.log(this.imageData);
console.log(this.current_index);
// console.log(reader.result, geoCoordinates);
// this.pdTriggerService.addWatermarks(reader.result, geoCoordinates).then(watermarked_img => {
if (this.current_index != 'last') {
if (this.imageData[this.current_index].is_multiple == 1) {
console.log('multi');
let img_param = {img_url: this.prev_url, is_base64: true, link: null};
this.imageData[this.current_index].img_data.push(img_param);
console.log(this.imageData)
// this.sendImage(this.imageData, this.imageData[this.current_index].img_data.length - 1);
} else {
this.imageData[this.current_index].img_url = this.prev_url;
this.imageData[this.current_index].is_base64 = true;
this.imageData[this.current_index].link = null;
console.log(this.imageData)
// this.sendImage(this.imageData);
}
} else {
// this.getImageName().then(result => {
// console.log(result);
// this.imageData.push( {
// img_key: 'common_image',
// img_name:this.tmp[0].value.group_title,
// img_url: watermarked_img,
// fk_form_id: '',
// is_base64: true,
// link: null
// });
// // let el = document.getElementById('dummy-img-more');
// // el.scrollIntoView();
// setTimeout(() => {
// this.dummyImgMoreRef.nativeElement.scrollIntoView({behavior: 'smooth', block: 'end'});
// }, 1000);
// // this.sendImage(this.imageData);
// });
}
console.log(this.prev_url);
console.log(single_ques.controls)
console.log(single_ques.value.question)
this.image_question_name = single_ques.value.question
single_ques.controls.answer_value.setValue(this.prev_url)
// this.sales_pd_id = Number(this.sales_pd_id)
// console.log(this.sales_pd_id)
// if(this.networkDetection.getCurrentNetworkStatus() == ConnectionStatus.online && (typeof(this.sales_pd_id) == 'string' ? !this.sales_pd_id.includes('local') : true) ) {
single_ques.controls.is_image_status.setValue(true)
single_ques.controls.is_loader.setValue(true);
single_ques.controls.is_saved.setValue(false);
let params={"fk_sales_pd_id":"","img":this.prev_url,"img_name":single_ques.value.question_key,"location": null}
let storage_param=this.questions_JSON
let form_structure=this.questions_JSON
form_structure.questions=this.quesAnsForm.getRawValue().questions
console.log( form_structure.questions)
form_structure.is_complete=1
// else {
// single_ques.controls.is_image_status.setValue(true)
// single_ques.controls.is_loader.setValue(false);
// single_ques.controls.is_saved.setValue(true);
// }
this.emittedFormGroup = this.quesAnsForm.getRawValue()
// PASSING THE VALUE TO PARENT COMPONENT
this.imageUploadCheck.emit(this.emittedFormGroup);
this.pd_all_details_data = JSON.parse(localStorage.getItem('pd_all_details'))
console.log(this.pd_all_details_data)
// let param = {
// "pd_id": this.pd_all_details_data.pdMasterList.pd_id,
// "formid": this.pd_all_details_data.FormData.form_id,
// "company_id":null,
// "images": [
// {
// "image": watermarked_img
// }
// ],
// "Name": single_ques.value.question_key,
// "link":geoCoordinates,
// "image_key":single_ques.value.question_key,
// "is_show_report":"1",
// "pd_image_alias_name":single_ques.value.question,
// "isLoader":true,
// "isSaved":false,
// "pd_document_id":null,
// "pd_document_name":single_ques.value.question
// }
let ind = parseInt(this.current_index)+1
//let index_pdid = this.pd_index( single_ques.value.question_key)
let param ={
"pd_id": this.pd_all_details_data.pdMasterList.pd_id,
"formid": this.pd_all_details_data.FormData.form_id,
"image": this.prev_url,
"image_key": single_ques.value.question_key,
"location": null,
"is_show_report": "1",
"pd_image_alias_name": single_ques.value.question,
"pd_document_title": single_ques.value.question+' '+ind,
"pd_document_id": null
}
// }
// })
// this.SalesPdService.saveSalesPDImage(params,form_structure).subscribe(apiresult=>{
// if(apiresult['dataStatus']){
single_ques.controls.is_loader.setValue(false);
single_ques.controls.is_saved.setValue(true);
this.httpListener(apiresult);
form_structure.questions=this.quesAnsForm.getRawValue().questions
this.SalesPdService.updateSectionDataLocally(params,form_structure).subscribe(res=>{
})
storage_param.questions=this.quesAnsForm.getRawValue().questions
console.log( storage_param.questions)
let key_value = localStorage.getItem('sales_pd_id_PRIMARYKEY')
// this.SalesPdService.getData_fromLocal('sales_pd_id_PRIMARYKEY').then(key_value=>{
console.log(key_value)
storage_param.sales_pd_id=key_value
// this.salesPDProvider.insertData_Replace('sec'+storage_param.section_id,storage_param)
// })
// console.log("image saved successfully")
this.notifier.notify("success","Image Saved Successfully");
console.log(this.tmp_ques)
// this.tmp[1].controls.questions_group
// console.log(parent_index['controls'].questions_group)
// let control: any = parent_index['controls'].questions_group as FormArray
this.tmp.length
console.log(this.tmp[0])
let control: any = this.tmp[0].controls.questions_group
console.log(control)
console.log(this.current_index )
parent_index
control.push(this._fb.group({ 'questions': this._fb.array([]) }))
let sub_childControl: any = control.controls[this.current_index + 1].get('questions') as FormArray
console.log(sub_childControl)
console.log(data)
data.forEach((group_indi,arr_index )=> {
console.log(group_indi,arr_index)
delete group_indi.answer_value
sub_childControl.push(this.questionService.createValue(group_indi))
this.questionService.addAdditionalControl(group_indi, sub_childControl, arr_index)
this.tmp = []
this.loaderService.closeMatSpinnerDialog()
})
}else{
let data:any = apiresult
this.notifier.notify("info",data.msg
);
single_ques.controls.is_loader.setValue(false);
single_ques.controls.is_saved.setValue(false);
//this.SalesPdService.clear_local_key('sec'+storage_param.section_id)
// this.toastProvider.lenderappmessage("Something went wrong");
}
})
// this.ngxService.stop();
// }, err => {
// console.log('dk', err);
// //this.ngxService.stop();
// });
// });
};
}
addImage(event, index, parent_index, data,single_ques1) {
// this.loaderService.showMatSpinnerDialog('Fetching Data...')
// this.ngxService.start();
@ -2071,6 +2410,10 @@ this.parent_control.push( parent_control)
// SENDING SALES PD SECTION 9 STRUCTURE(photographs)
ngOnDestroy(){
// console.clear()
let callapi = localStorage.getItem('callApi')
if(callapi == '1'){
this.save_image()
}
console.log("dirty check",this.quesAnsForm.dirty)
if(this.local_ques_JSON.section_id == 9 && this.emittedFormGroup != null){
// FOR SENDING THE IMAGE SECTION (SECTION ID 9) JSON Structure
@ -2191,18 +2534,18 @@ this.parent_control.push( parent_control)
if(element.hasOwnProperty('answer_value') ){
console.log(element)
if(element.answer_value != ''){
if(element.answer_value != ''){
element.answer_value = 'saved'
}
}
}else{
element.questions_group.forEach(e => {
e.questions.forEach(c => {
if(c.hasOwnProperty('answer_value') ){
console.log(c)
if(c.answer_value != ''){
if(c.answer_value != ''){
c.answer_value = 'saved'
}
}
}
});
@ -2263,4 +2606,5 @@ this.parent_control.push( parent_control)
});
return ans
}
}

View File

@ -1,4 +1,4 @@
<button [ngStyle]="{'color':role_id == '20' ? '#0d93a9' :'#f44336'}" (click)="singlecapture($event)" mat-button mat-raised-button [disabled]="sales_pd_type == '2'">Capture
<button [ngStyle]="{'color':role_id == '20' ? '#0d93a9' :'#f44336'}" (click)="singlecapture($event)" mat-button mat-raised-button >Capture
<mat-icon name="camera" *ngIf="!addMoreBtn">camera_alt</mat-icon>
<mat-icon name="camera" *ngIf="addMoreBtn">add_a_photo</mat-icon>
</button>

View File

@ -76,6 +76,7 @@ export class SingleCaptureBtnComponent {
this.ng2ImgMax.resizeImage(imageData, 450, 650).subscribe(
result => {
console.log(result);
localStorage.setItem('callApi','1')
this.singleDataEmitter.emit(result)
this.loaderService.closeMatSpinnerDialog()
},

View File

@ -0,0 +1,6 @@
<button [ngStyle]="{'color':role_id == '20' ? '#0d93a9' :'#f44336'}" (click)="capture($event)" mat-button mat-raised-button >Capture Video
<mat-icon name="camera" *ngIf="!addMoreBtn">add_a_photo</mat-icon>
<mat-icon name="camera" *ngIf="addMoreBtn">add_a_photo</mat-icon>
</button>
<input type="file" (change)="capturedImage($event)" id="input-file2" name="file" accept="video/*" capture="user" style="display: none">
<!-- document.querySelector('#input-file').click() -->

View File

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { VideoCaptureBtnComponent } from './video-capture-btn.component';
describe('VideoCaptureBtnComponent', () => {
let component: VideoCaptureBtnComponent;
let fixture: ComponentFixture<VideoCaptureBtnComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ VideoCaptureBtnComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(VideoCaptureBtnComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,60 @@
import { Component, OnInit, Output, EventEmitter, Input, Injectable } from '@angular/core';
import { Ng2ImgMaxService } from 'ng2-img-max';
import { LoaderService } from 'app/shared/loaderService/loader.service';
@Component({
selector: 'app-video-capture-btn',
templateUrl: './video-capture-btn.component.html',
styleUrls: ['./video-capture-btn.component.scss']
})
export class VideoCaptureBtnComponent implements OnInit {
@Input() addMoreBtn;
@Output() videoDataEmitter = new EventEmitter
@Output() singleDataEmitter = new EventEmitter
sales_pd_type: string;
role_id: string;
constructor(private ng2ImgMax:Ng2ImgMaxService,private loaderService:LoaderService) {
this.role_id = localStorage.getItem('user_role')
this.sales_pd_type = localStorage.getItem('sales_pd_type')
console.log(this.sales_pd_type,this.videoDataEmitter)
}
ngOnInit(): void {
console.log(this.addMoreBtn)
}
capturedImage(event){
this.loaderService.showMatSpinnerDialog('Fetching Data...')
console.log(event);
console.log(this.sales_pd_type,this.videoDataEmitter)
let imageData= event.target.files[0]
let files = imageData
// var URL = window.URL;
//var URL = window.URL || window.webkitURL;
var file = new Blob([files],{"type" : "video\/mp4"});
//var value = URL.createObjectURL(file);
console.log(file)
// this.ng2ImgMax.resizeImage(imageData, 450, 650).subscribe(
// result => {
let data ={file:file,name:event.target.files[0].name}
this.videoDataEmitter.emit(data)
//localStorage.setItem('callApi','1')
this.loaderService.closeMatSpinnerDialog()
// this.imageDataEmitter.emit(result)
// this.singleDataEmitter.emit(result)
// localStorage.setItem('callApi','1')
// this.loaderService.closeMatSpinnerDialog()
// },
// error => {
// console.log('😢 Oh no!', error);
// }
// );
}
capture(event){
event.preventDefault();
let element:HTMLElement = document.getElementById('input-file2') as HTMLElement
element.click();
}
}

View File

@ -120,9 +120,9 @@
<mat-icon>delete</mat-icon>
</button>
<div *ngIf="digilocker_access_Enabled == 1" >
<button type="button" class="mr-1 hover-icon" mat-raised-button mat-icon-button (click)="digitallocker(details,i)" *ngIf="_generalForm.controls.individuals.value[i].is_main_applicant != true"
matTooltip="DigiLocker " matTooltipPosition="below" [style.visibility]="_generalForm.controls.individuals.value[i].is_main_applicant == true ? 'hidden':'visible'">
<mat-icon>vpn_lock</mat-icon>
<button type="button" class="mr-1 hover-icon" mat-raised-button mat-icon-button (click)="digitallocker(details,i)"
matTooltip="DigiLocker " matTooltipPosition="below" >
<mat-icon svgIcon="digilocker"></mat-icon>
</button>
</div>

View File

@ -1,6 +1,6 @@
import { Component, OnInit, Input, Output, Inject } from '@angular/core';
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatTableDataSource } from '@angular/material';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatTableDataSource, MatIconRegistry } from '@angular/material';
import { NotifierService } from 'angular-notifier';
import { PdTrigerService } from './../../../../../pd-service/pd-triger.service';
import { OtherApplicantDetailsComponent } from './../dialogue/other-applicant-details/other-applicant-details.component';
@ -13,6 +13,7 @@ import { ImageCropComponent } from '../dialogue/image-crop/image-crop.component'
import { ReplaySubject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { FacialRecognitionModalComponent } from '../facial-recognition/facial-recognition-modal/facial-recognition-modal.component';
import { DomSanitizer } from '@angular/platform-browser';
// import { ImageCropperComponent } from '../dialogue/image-cropper/image-cropper.component';
@Component({
@ -108,8 +109,9 @@ export class GeneralInfoComponent implements OnInit {
/********************** Declaration Section Ends Here *****************/
/** Constructor Section */
constructor(notifier: NotifierService, private _fb: FormBuilder, private _pd: PdTrigerService, private dialog: MatDialog, @Inject(MAT_DIALOG_DATA) public pd_all_details: any, private dialogRef: MatDialogRef<GeneralInfoComponent>, private titleCase: TitleCasePipe, private imageRef: MatDialogRef<ImageCropComponent>) {
constructor(notifier: NotifierService, private _fb: FormBuilder, private _pd: PdTrigerService, private dialog: MatDialog, @Inject(MAT_DIALOG_DATA) public pd_all_details: any, private dialogRef: MatDialogRef<GeneralInfoComponent>, private titleCase: TitleCasePipe, private imageRef: MatDialogRef<ImageCropComponent>,private sanitizer: DomSanitizer, private readonly matIconRegistry: MatIconRegistry) {
console.log(this.pd_all_details)
this.matIconRegistry.addSvgIcon('digilocker', this.sanitizer.bypassSecurityTrustResourceUrl('assets/images/digilocker.svg'));
this.pdid = this.pd_all_details.pdmaster_details.pd_id;
this.lender_short_name = this.pd_all_details.pdmaster_details.lender_short_name;
this.parent_pdid = this.pd_all_details.pdmaster_details.parent_pd_id;

View File

@ -90,8 +90,18 @@
<div fxLayout="row wrap" fxLayoutAlign="start stretch" fxLayoutAlign.xs="space-between stretch">
<h6 style="font-weight: bold;font-size:1.2rem" *ngIf="!val.img_data || (val.img_data != null && val.img_data.length == 0) || (val.img_data == null)">No Images Captured</h6>
<div *ngFor="let multiple_img of val.img_data;let i=index" class ="image-div">
<img *ngIf="multiple_img.img_url != '' && multiple_img.img_url != null"
<img *ngIf="multiple_img.img_url != '' && multiple_img.img_url != null && val.content_type
== '1'"
class="image-class" [src]="multiple_img.img_url" [alt]="val.img_key" alt="image" (click)="openImage(multiple_img)"/>
<video
*ngIf="multiple_img.img_url != '' && multiple_img.img_url != null && val.content_type
== '2'"
[src]="multiple_img.img_url"
style=" width: 200px;padding-right: 10px;padding-left: 10px;
height: 170px;"
controls></video>
<!-- <span>{{multiple_img.}}</span> -->
<div class="image-label" fxLayout ="row" >

View File

@ -52,7 +52,7 @@ export class ImagesAllComponent implements OnInit { imageData: any;
this._pd.getPDImgDetails(this.params).subscribe(result=>{
if(result.dataStatus) {
this.records = result.records
console.log( this.records)
// if(this.records.is_cus_link_disabled != '1') {
this.imageData =this.records.img_data;
this.imageData.forEach(val=>{

View File

@ -194,17 +194,18 @@ export class StartPd2Component implements OnInit, OnDestroy {
dialogRef.afterClosed()
.subscribe(dataresult => {
if(dataresult.update_status==true){
setTimeout(()=>{
// setTimeout(()=>{
checkType==2 ? this.router.navigate(['../../viewpd', this.pdMasterList.parent_pd_id], {relativeTo: this.route}) : this.loadTemplates(this.startPD,2,this.randomString,this.fi_id);
let data = {
"pd_id": this.startPD,
"regenerate":0,
"random_string":this.randomString
};
},2000)
// this._pd.archivePDImages(data).subscribe(data => {
this._pd.archivePDImages(data).subscribe(data => {
// })
})
//},2000)
let data1 = {
"pd_id": this.startPD,
"regenerate":0,

View File

@ -144,8 +144,10 @@ export class ImageVideoComponent implements OnInit {
// disableClose: true,
// panelClass:'video-chat'
// })
let user = localStorage.getItem('videocall_userid')
if(event == 'PDGenie'){
let url = window.location.origin+'/vchat/#/chat/'+this.master.random_string+';id='+this.master.pd_id+';type=2'
let url = window.location.origin+'/vchat/#/chat/'+this.master.random_string+';id='+this.master.pd_id+';type=2;uid='+user
window.open(url,'_blank')
} else if(event == 'G_Meet'){
let url = this.google_Meet_Link

View File

@ -193,6 +193,12 @@ export class ViewPdComponent implements OnInit, OnDestroy {
this.mandatoryFieldsValidations = masterData[1].mandatory_fields;
this.pd_QC_Rating = Number(this.pdMasterData.qc_rating);
this.pdApplicantData = data.records.applicants_details;
let tmp =[]
this.pdApplicantData.forEach(element => {
tmp.push(element.applicant_name)
});
console.log(tmp)
localStorage.setItem('pdApplicantData',JSON.stringify(tmp))
this.pdApplicantData = this.pdApplicantData.filter(appt => appt.applicant_type != 2);
this.CustomerSegmentAbbr = this.pdMasterData[0].customer_segment_abbr;
this.pdDocumentsData = data.records.pd_documnets;
@ -796,10 +802,14 @@ export class ViewPdComponent implements OnInit, OnDestroy {
}
onClickVideoChat(master) {
let videoChatLink = window.location.origin+'/vchat/#/chat/'+this.pdMasterData[0].random_string+';id='+this.viewID+';type=1'
console.log(master)
let user = localStorage.getItem('videocall_userid')
let videoChatLink = window.location.origin+'/vchat/#/chat/'+this.pdMasterData[0].random_string+';id='+this.viewID+';type=1;uid='+user
console.log(videoChatLink)
const dialogApplicant = this.dialog.open(ImageVideoComponent, {
data: {masterDetails:master,videoChatLink:videoChatLink,applicantNo:this.pdApplicantData[0].mobile_no,flag:1},
data: {masterDetails:master,videoChatLink:videoChatLink,applicantNo:this.pdApplicantData[0].mobile_no,flag:1,userid:'fk_pd_allocated_to'
},
// position: { right: '0' },
maxWidth: '70vw',
maxHeight: '60vw',

View File

@ -174,6 +174,7 @@ import { ImgExifService } from 'ng2-img-max/dist/src/img-exif.service';
import { ImgMaxPXSizeService } from 'ng2-img-max/dist/src/img-maxpx-size.service';
import { Ng2ImgMaxModule } from 'ng2-img-max';
import { CameraService } from './list-pd/start-pd/forms-dynamic/ques-template/providers/camera/camera.service';
import { VideoCaptureBtnComponent } from './list-pd/start-pd/forms-dynamic/ques-template/video-capture-btn/video-capture-btn.component';
/**
* Custom angular notifier options
*/
@ -220,7 +221,7 @@ const pdCustomNotifierOptions: NotifierOptions = {
@NgModule({
declarations: [QuesTemplateComponent,TelePdAllocationComponent, FinancialInfoComponent, BusinessInfoComponent, EmploymentInfoComponent, StockComponent, BankingDetailsComponent, ListPdComponent, FamilyDetailsComponent, AddressComponent, ManagePdComponent, MapPdViewComponent, AddPdComponent, ViewPdComponent,VendorPdAllocationComponent, DuplicatePdComponent,FacialRecognitionModalComponent, PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent,StartPd2Component, InprogressPdComponent, AllPdComponent, ScheduledPdComponent, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, CurrentLoanComponent, AssetsInfoComponent, LoanDetailsComponent, OtherIncomeComponent, SupplierInfoComponent, PersonalInfoComponent, LenderRepresentativeComponent, PdReportComponent, AssessedIncomeComponent, AllocationViewMoreComponent, PdRequirementComponent,PdCollectedDocsComponent, GeneralInfoComponent, ModelEditPdReportComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, DialogChangeCurrentVenrsion, FinalRemarksComponent, BusinessOtherFamilyMemberComponent, QcReviewComponent, BusinessInfoGroupComponent, SearchRelationPipe, RupeeCurrencyFormatPipe, NumberToWordsPipe, DeleteRecordsCountPipe, BusinessAssetsInfoComponent, BusinessBankingDetailsComponent, SalesDetailsComponent, DailySalesDetailsComponent, SalesCalculationComponent, ManageSalesComponent, PurchaseDetailsComponent, BusinessExpenseDetailsComponent, HouseHoldDetailsComponent, OtherBusinessIncomeDetailsComponent, ManagePurchaseComponent, ManageBusinesExpenseComponent, ManageHouseHoldComponent, ManageOtherBusinessIncomeComponent, GrossProfitCalculationComponent, ManageDailySalesComponent, PdStatusChangeDialogueComponent, PdLocatedMapViewDirective, ViewLocationComponent, GetAnswerableFormsPipe, ConfirmAiDetailsComponent, RentalVerificationComponent, InitiateAdditionalPdComponent ,ManageDailyPurchaseComponent, DailyPurchaseDetailsComponent, ManageRentalVerificationComponent, FuturePlansAndBusinessEnvironmentComponent, ImageCropComponent,CropToolsComponent,PurchaseCalculationComponent,QueriesDocsComponent, ImageDocsComponent,CustomTitleCaseDirective, SpeedDialFabComponent,VideoPlayerComponent,
DynamicFormComponent,DynamicQuestionTemplateComponent, ImagesAllComponent,AnswerOptionCreateDialogComponent,FormComponent,FormGroupComponent, ImageVideoComponent,CaptureBtnComponent, SingleCaptureBtnComponent,],
DynamicFormComponent,DynamicQuestionTemplateComponent, ImagesAllComponent,AnswerOptionCreateDialogComponent,FormComponent,FormGroupComponent, ImageVideoComponent,CaptureBtnComponent, SingleCaptureBtnComponent,VideoCaptureBtnComponent],
imports: [
CommonModule,
ManagePdRoutingModule,
@ -271,7 +272,7 @@ const pdCustomNotifierOptions: NotifierOptions = {
MatVideoModule
],
exports: [FacialRecognitionModalComponent,DuplicatePdComponent,VendorPdAllocationComponent,PdLocatedMapViewDirective, PdAllocationComponent, SmartPdAllocationComponent, TelePdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent,StartPd2Component, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, SupplierInfoComponent, PersonalInfoComponent, CurrentLoanComponent, LoanDetailsComponent, OtherIncomeComponent, AssetsInfoComponent, AddressComponent, FamilyDetailsComponent, BankingDetailsComponent, StockComponent, EmploymentInfoComponent, BusinessInfoComponent, FinancialInfoComponent, LenderRepresentativeComponent, AssessedIncomeComponent, AllocationViewMoreComponent, GeneralInfoComponent, PdRequirementComponent,PdCollectedDocsComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, BusinessOtherFamilyMemberComponent, BusinessInfoGroupComponent,DailySalesDetailsComponent, SalesCalculationComponent, PurchaseDetailsComponent, BusinessExpenseDetailsComponent, HouseHoldDetailsComponent, OtherBusinessIncomeDetailsComponent, ManageSalesComponent, ManagePurchaseComponent, ManageBusinesExpenseComponent, ManageHouseHoldComponent, ManageOtherBusinessIncomeComponent, GrossProfitCalculationComponent, ManageDailySalesComponent, PdStatusChangeDialogueComponent, ViewLocationComponent, ConfirmAiDetailsComponent, RentalVerificationComponent, InitiateAdditionalPdComponent, DailyPurchaseDetailsComponent, ManageDailyPurchaseComponent,ManageRentalVerificationComponent,ImageCropComponent,CropToolsComponent,PurchaseCalculationComponent,CaptureBtnComponent, SingleCaptureBtnComponent,],
exports: [FacialRecognitionModalComponent,DuplicatePdComponent,VendorPdAllocationComponent,PdLocatedMapViewDirective, PdAllocationComponent, SmartPdAllocationComponent, TelePdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent,StartPd2Component, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, SupplierInfoComponent, PersonalInfoComponent, CurrentLoanComponent, LoanDetailsComponent, OtherIncomeComponent, AssetsInfoComponent, AddressComponent, FamilyDetailsComponent, BankingDetailsComponent, StockComponent, EmploymentInfoComponent, BusinessInfoComponent, FinancialInfoComponent, LenderRepresentativeComponent, AssessedIncomeComponent, AllocationViewMoreComponent, GeneralInfoComponent, PdRequirementComponent,PdCollectedDocsComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, BusinessOtherFamilyMemberComponent, BusinessInfoGroupComponent,DailySalesDetailsComponent, SalesCalculationComponent, PurchaseDetailsComponent, BusinessExpenseDetailsComponent, HouseHoldDetailsComponent, OtherBusinessIncomeDetailsComponent, ManageSalesComponent, ManagePurchaseComponent, ManageBusinesExpenseComponent, ManageHouseHoldComponent, ManageOtherBusinessIncomeComponent, GrossProfitCalculationComponent, ManageDailySalesComponent, PdStatusChangeDialogueComponent, ViewLocationComponent, ConfirmAiDetailsComponent, RentalVerificationComponent, InitiateAdditionalPdComponent, DailyPurchaseDetailsComponent, ManageDailyPurchaseComponent,ManageRentalVerificationComponent,ImageCropComponent,CropToolsComponent,PurchaseCalculationComponent,CaptureBtnComponent, SingleCaptureBtnComponent,VideoCaptureBtnComponent],
providers: [PdTrigerService,CameraService, GetGeometricLocationService,{provide: MAT_DATE_LOCALE, useValue: 'en-GB'},
{provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]},
{provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS}, PdLocatedMapViewDirective,QuesFormService],

View File

@ -0,0 +1,87 @@
<h2 mat-dialog-title class="paragraph_change">
<div fxFlex="70" align="left" style="padding: 10px !important;">
Attach Digilocker Document's To Report
</div>
<div fxFlex="30" align="end" style="padding: 10px !important;">
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="right" mat-dialog-close><mat-icon>close</mat-icon></button>
</div>
</h2>
<h5 style="text-align: center;">{{message}}</h5>
<mat-dialog-content *ngIf="digilock_list.length > 0">
<!-- <mat-card *ngFor="let list of digilock_list;let quesIndex=index">
<mat-card-content>{{list.applicant_name
}}</mat-card-content>
</mat-card> -->
<span style="padding-bottom: 15%;">Available Digilocker Documents</span>
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">
<!-- Checkbox Column -->
<ng-container matColumnDef="select">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox (change)="$event ? toggleAllRows() : null"
[checked]="selection.hasValue() && isAllSelected()"
[indeterminate]="selection.hasValue() && !isAllSelected()"
[aria-label]="checkboxLabel()">
</mat-checkbox>
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox (click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)"
[aria-label]="checkboxLabel(row)">
</mat-checkbox>
</td>
</ng-container>
<!-- Position Column -->
<ng-container matColumnDef="applicant_name">
<th mat-header-cell *matHeaderCellDef> Applicant Name </th>
<td mat-cell *matCellDef="let element"> {{element.applicant_name}} </td>
</ng-container>
<ng-container matColumnDef="pd_document_name">
<th mat-header-cell *matHeaderCellDef> Document Name </th>
<td mat-cell *matCellDef="let element"> {{element.pd_document_name}} </td>
</ng-container>
<ng-container matColumnDef="url">
<th mat-header-cell *matHeaderCellDef> View </th>
<td mat-cell *matCellDef="let element">
<div >
<button mat-button mat-icon-button class="hover-icon" type="button" color="primary" (click)="view(element.url)"
matTooltip="View" matTooltipPosition="top" ><mat-icon>visibility</mat-icon></button>
</div>
</td>
</ng-container>
<!-- Symbol Column -->
<!-- <ng-container matColumnDef="symbol">
<th mat-header-cell *matHeaderCellDef> Symbol </th>
<td mat-cell *matCellDef="let element"> {{element.symbol}} </td>
</ng-container> -->
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"
>
</tr>
</table>
<!-- Copyright 2022 Google LLC. All Rights Reserved.
Use of this source code is governed by an MIT-style license that
can be found in the LICENSE file at https://angular.io/license -->
</mat-dialog-content>
<mat-dialog-actions align="end" >
<button mat-raised-button mat-dialog-close (click)="confirmPdf()" ><strong> Save </strong></button>
<!-- <button class="submit-btn" color="primary" mat-raised-button type="submit" >
Submit
</button> -->
</mat-dialog-actions>

View File

@ -0,0 +1,53 @@
.paragraph_change {
color: #fff !important;
background-color: #e00201 !important;
}
::ng-deep { .no-padding > mat-dialog-container {
// background: black;
padding: 0;
// overflow-y: scroll !important;
}
}
.example-full-width {
width: 100%;
}
.mat-dialog-content{
margin:0px !important;
}
// mat-placeholder{
// margin-top: 20px;
// word-wrap: break-word;
// }
// input{
// height:40px;
// }
.mat-form-field-label {
white-space: normal;
}
textarea.mat-input-element {
padding: 0px 0;
margin: 5px 0;
}
.mat-input-placeholder {
white-space: normal;
}
mat-form-field {
margin: 0 2%;
}
.paragraph_change {
color: #fff !important;
background-color: #e00201 !important;
}
table {
width: 100%;
}
.mat-elevation-z8{
margin-top: 10px;
}

View File

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PdfMergeComponent } from './pdf-merge.component';
describe('PdfMergeComponent', () => {
let component: PdfMergeComponent;
let fixture: ComponentFixture<PdfMergeComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ PdfMergeComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PdfMergeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,109 @@
import { SelectionModel } from '@angular/cdk/collections';
import { Component, Inject, OnInit } from '@angular/core';
import { MatDialogRef, MatTableDataSource, MAT_DIALOG_DATA } from '@angular/material';
import { QcService } from 'app/quality-check/qc-service/qc.service';
export interface PeriodicElement {
name: string;
position: number;
weight: number;
symbol: string;
}
@Component({
selector: 'app-pdf-merge',
templateUrl: './pdf-merge.component.html',
styleUrls: ['./pdf-merge.component.scss']
})
export class PdfMergeComponent implements OnInit {
message: any;
digilock_list: any =[];
ELEMENT_DATA: PeriodicElement[] = [
{position: 1, name: 'Hydrogen', weight: 1.0079, symbol: 'H'},
{position: 2, name: 'Helium', weight: 4.0026, symbol: 'He'},
{position: 3, name: 'Lithium', weight: 6.941, symbol: 'Li'},
{position: 4, name: 'Beryllium', weight: 9.0122, symbol: 'Be'},
{position: 5, name: 'Boron', weight: 10.811, symbol: 'B'},
];
displayedColumns: string[] = ['select','applicant_name','pd_document_name','url'];
selection = new SelectionModel<PeriodicElement>(true, []);
dataSource: any =[];
constructor(private dialogRef: MatDialogRef<PdfMergeComponent>,
@Inject(MAT_DIALOG_DATA) public data: any, public pdTrigerService: QcService) { }
ngOnInit() {
this.getPdfApi()
}
getPdfApi(){
console.log( this.data)
let data = {"pd_id": this.data.pd_id}
this.pdTrigerService.applicantWiseDigiLockerDocs(data).subscribe(data => {
let dataresult:any = data
console.log(dataresult)
if (dataresult.status == 200) {
this.digilock_list = dataresult.records
this.dataSource = new MatTableDataSource<PeriodicElement>(this.digilock_list);
console.log( this.dataSource)
}else{
this.message = dataresult.msg
}
})
}
/** Whether the number of selected elements matches the total number of rows. */
isAllSelected() {
const numSelected = this.selection.selected.length;
const numRows = this.dataSource.data.length;
// console.log( numSelected,numRows)
return numSelected === numRows;
}
/** Selects all rows if they are not all selected; otherwise clear selection. */
toggleAllRows() {
if (this.isAllSelected()) {
this.selection.clear();
return;
}
this.selection.select(...this.dataSource.data);
// console.log( this.selection)
}
/** The label for the checkbox on the passed row */
checkboxLabel(row?: PeriodicElement): string {
if (!row) {
return `${this.isAllSelected() ? 'deselect' : 'select'} all`;
}
// console.log( this.selection)
return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.position + 1}`;
}
view(url){
window.open(url, "_blank")
}
confirmPdf(){
console.log( this.selection)
if(this.selection.selected.length > 0){
console.log(this.selection.selected)
let tmp =[]
this.selection.selected.forEach((element:any) => {
tmp.push({'pd_document_id' :element.pd_document_id})
});
console.log(tmp)
// localStorage.setItem('pdf-merge',JSON.stringify(tmp))
this.dialogRef.close(tmp)
}else{
this.dialogRef.close([])
}
}
}

View File

@ -43,35 +43,9 @@
<!-- <span class="mr-1 ml-1">View More</span> -->
<span class="mr-1 ml-1">PD Report</span>
<span class="empty-spacer"></span>
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Score" matTooltipPosition="above" (click)="showAction()" ><mat-icon>arrow_upward</mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="getFrameContent(IFrameContent)" style="margin-right: 2px;"><mat-icon>save</mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="QC Notes" matTooltipPosition="above" (click)="reportReview('REMARKS')" style="margin-right: 2px;"><mat-icon>notes</mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="PD Officer Notes" matTooltipPosition="above" (click)="reportReview('pd_officer_notes')" style="margin-right: 2px;"><mat-icon>bookmarks</mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="QC Complete" matTooltipPosition="above" (click)="reportReview('COMPLETE')" style="margin-right: 2px;"><mat-icon>done_all</mat-icon></button>
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Re-generate Map" matTooltipPosition="above" (click)="reportReview('GEOLOCATION')" style="margin-right: 2px;"><mat-icon>map</mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Re-generate Report" matTooltipPosition="above" (click)="reGeneratePFReport()"><mat-icon>autorenew</mat-icon></button>
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Download PD Report" matTooltipPosition="above" (click)="downloadPDReport()"><mat-icon>get_app</mat-icon></button>
<!-- <button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Download PD Pictures" matTooltipPosition="above" (click)="archivePDImages()"><mat-icon>save_alt</mat-icon></button>-->
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Download PD Pictures" matTooltipPosition="above" [matMenuTriggerFor]="menu1">
<mat-icon>save_alt</mat-icon>
</button>
<mat-menu #menu1="matMenu">
<button mat-menu-item (click)="archivePDImages(1)">
<mat-icon>donut_large</mat-icon>
<span>Re-Generate</span>
</button>
<button mat-menu-item (click)="archivePDImages(0)">
<mat-icon>cloud_download</mat-icon>
<span>Download</span>
</button>
</mat-menu>
<button *ngIf="!spinner_access" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Download PD Pictures (PDF)" matTooltipPosition="above" [matMenuTriggerFor]="menu2">
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="QC Notes" matTooltipPosition="above" (click)="reportReview('REMARKS')" style="margin-right: 2px;"><mat-icon svgIcon="notes"></mat-icon></button>
<button *ngIf="!spinner_access" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Download PD Pictures (PDF)" matTooltipPosition="above" [matMenuTriggerFor]="menu2">
<mat-icon>picture_as_pdf</mat-icon></button>
<mat-menu #menu2="matMenu">
<button mat-menu-item (click)="downloadPDImagesPDF(1)">
@ -84,6 +58,36 @@
<span>Download</span>
</button>
</mat-menu>
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Download PD Pictures (zip)" matTooltipPosition="above" [matMenuTriggerFor]="menu1">
<mat-icon svgIcon="pic"></mat-icon>
</button>
<mat-menu #menu1="matMenu">
<button mat-menu-item (click)="archivePDImages(1)">
<mat-icon>donut_large</mat-icon>
<span>Re-Generate</span>
</button>
<button mat-menu-item (click)="archivePDImages(0)">
<mat-icon>cloud_download</mat-icon>
<span>Download</span>
</button>
</mat-menu>
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Download PD Report" matTooltipPosition="above" (click)="downloadPDReport()"><mat-icon>get_app</mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Re-generate Report" matTooltipPosition="above" (click)="reGeneratePFReport()"><mat-icon>autorenew</mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="getFrameContent(IFrameContent)" style="margin-right: 2px;"><mat-icon>save</mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip=" View / Select Digilocker Documents" matTooltipPosition="above" (click)="PdfMerge()" ><mat-icon svgIcon="digilocker"></mat-icon></button>
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Re-generate Map" matTooltipPosition="above" (click)="reportReview('GEOLOCATION')" style="margin-right: 2px;"><mat-icon>map</mat-icon></button>
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Score" matTooltipPosition="above" (click)="showAction()" ><mat-icon svgIcon="score"></mat-icon></button>
<button *ngIf="pdReportRecords.pd_status!='QC_COMPLETED'" mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="QC Complete" matTooltipPosition="above" (click)="reportReview('COMPLETE')" style="margin-right: 2px;"><mat-icon>done_all</mat-icon></button>
<!-- <button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Download PD Pictures" matTooltipPosition="above" (click)="archivePDImages()"><mat-icon>save_alt</mat-icon></button>-->
<button mat-raised-button mat-icon-button class="mr-1 ml-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above" (click)="loadPdViewCompoent()" style="margin-right: 2px;"><mat-icon>close</mat-icon></button>
</mat-toolbar>

View File

@ -11,6 +11,7 @@ import { QcService } from './../../qc-service/qc.service';
import {
MatDialog,
MatDialogRef,
MatIconRegistry,
MAT_DIALOG_DATA,
} from "@angular/material";
import{MatSidenav} from '@angular/material/sidenav'
@ -19,6 +20,7 @@ import { QcReviewComponent } from './qc-review/qc-review.component';
import { HttpResponse } from "@angular/common/http";
import { environment } from 'environments/environment';
import { QcNewComponent } from './qc-new/qc-new.component';
import { PdfMergeComponent } from './pdf-merge/pdf-merge.component';
@ -34,6 +36,7 @@ export class QcPdReportComponent implements OnInit {
reason = '';
loadComponent: boolean=false;
observer: MutationObserver;
pdf_merge_data: any = []
close(reason: string) {
this.reason = reason;
@ -79,8 +82,12 @@ export class QcPdReportComponent implements OnInit {
// ];
constructor(notifier: NotifierService, private fb: FormBuilder, private route: ActivatedRoute,
private router: Router, public pdTrigerService: QcService, private listPDComponent: QcListComponent,
private dialog: MatDialog, private sanitizer: DomSanitizer) {
private dialog: MatDialog, private sanitizer: DomSanitizer, private readonly matIconRegistry: MatIconRegistry,) {
this.startPD = this.route.snapshot.params['pdid'];
this.matIconRegistry.addSvgIcon('digilocker', this.sanitizer.bypassSecurityTrustResourceUrl('assets/images/digilocker.svg'));
this.matIconRegistry.addSvgIcon('score', this.sanitizer.bypassSecurityTrustResourceUrl('assets/images/score.svg'));
this.matIconRegistry.addSvgIcon('notes', this.sanitizer.bypassSecurityTrustResourceUrl('assets/images/notes.svg'));
this.matIconRegistry.addSvgIcon('pic', this.sanitizer.bypassSecurityTrustResourceUrl('assets/images/picture_download.svg'));
let encryptReportRandomString = atob(this.route.snapshot.params['string']);
// this.reportRandomString = this.apiUrl+'getPDReportHTML/'+encryptReportRandomString+'/'+this.startPD;
@ -189,7 +196,8 @@ export class QcPdReportComponent implements OnInit {
reGeneratePFReport() {
let data = {
"pd_id": this.startPD,
"random_string":atob(this.route.snapshot.params['string'])
"random_string":atob(this.route.snapshot.params['string']),
"digilocker_merge":this.pdf_merge_data
// "regenerate": "1"
};
this.pdTrigerService.getPDReportFinalDocument(data).subscribe(data => {
@ -424,7 +432,34 @@ export class QcPdReportComponent implements OnInit {
});
}
PdfMerge(){
const dialogRef = this.dialog.open(PdfMergeComponent, {
data:{
"pd_id":this.startPD,
},
// position: { right: '0'},
disableClose: true,
minHeight:'50%',
maxHeight:'90%',
minWidth: '60%',
maxWidth: '90%',
});
dialogRef.afterClosed()
.subscribe(dataresult => {
if(dataresult instanceof Array){
if(dataresult.length>0){
this.pdf_merge_data = dataresult
console.log( this.pdf_merge_data )
}
}
});
}
changeDocumentEdit(): void {

View File

@ -672,5 +672,9 @@ export class QcService {
// video_file -> exact file
return this._http.post(this.apiUrl+'uploadVideoFile',params)
}
applicantWiseDigiLockerDocs(params){
return this._http.post(this.apiUrl+'applicantWiseDigiLockerDocs',params )
}
}

View File

@ -110,6 +110,7 @@ import { PdVisitTimeComponent } from './qc-list/pd-visit-time/pd-visit-time.comp
import { UploadVideoComponent } from './upload-video/upload-video.component'
import { MatVideoModule } from 'mat-video';
import { SpeedDialFabComponent } from './qc-list/qc-view/speed-dial-fab/speed-dial-fab.component';
import { PdfMergeComponent } from './qc-list/qc-pd-report/pdf-merge/pdf-merge.component';
// import { PdfViewerModule } from 'ng2-pdf-viewer';
@ -186,8 +187,8 @@ const customNotifierOptions: NotifierOptions = {
AngularSplitModule.forRoot(),
MatVideoModule
],
declarations: [QualityCheckComponent,QcListComponent, QcViewComponent, QcStartComponent, QcPdReportComponent,DialogChangeCurrentVenrsion, QcReviewComponent, ModelEditPdReportComponent, NumberToWordsPipe, QcNewComponent, QcCusImagesComponent, PdVisitTimeComponent, UploadVideoComponent,SpeedDialFabComponent],
entryComponents: [PdVisitTimeComponent,PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent,DialogChangeCurrentVenrsion, QcReviewComponent, ModelEditPdReportComponent, InitiateAdditionalPdComponent,QcNewComponent,
declarations: [QualityCheckComponent,QcListComponent, QcViewComponent, QcStartComponent, QcPdReportComponent,DialogChangeCurrentVenrsion, QcReviewComponent, ModelEditPdReportComponent, NumberToWordsPipe, QcNewComponent, QcCusImagesComponent, PdVisitTimeComponent, UploadVideoComponent,SpeedDialFabComponent, PdfMergeComponent],
entryComponents: [PdVisitTimeComponent,PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent,DialogChangeCurrentVenrsion, QcReviewComponent, ModelEditPdReportComponent, InitiateAdditionalPdComponent,QcNewComponent,PdfMergeComponent,
BusinessAssetsInfoComponent,
ClientInfoComponent,
SupplierInfoComponent,

View File

@ -112,6 +112,11 @@
<td mat-cell *matCellDef="let row">
<span *ngIf="row.applicant_name" mat-line>{{row.applicant_name}}</span> </td>
</ng-container>
<ng-container matColumnDef="city_name" >
<th mat-header-cell *matHeaderCellDef >City </th>
<td mat-cell *matCellDef="let row">
<span *ngIf="row.city_name" mat-line>{{row.city_name}}</span> </td>
</ng-container>
<ng-container matColumnDef="lender_applicant_id" sticky>
<th mat-header-cell *matHeaderCellDef mat-sort-header>Lender Applicant ID </th>
@ -155,6 +160,16 @@
<td mat-cell *matCellDef="let row">
<span *ngIf="row.updatedon" mat-line> {{row.updatedon | date: 'dd-MM-yyyy hh:mm a'}}</span> </td>
</ng-container>
<ng-container matColumnDef="video_call_initiate_user">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Video Call Initiated Person</th>
<td mat-cell *matCellDef="let row">
<span *ngIf="row.video_call_initiate_user" [matTooltip]="row.video_call_initiate_user" mat-line> {{column_name_filter(row.video_call_initiate_user) }}</span> </td>
</ng-container>
<ng-container matColumnDef="total_video">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Video Count</th>
<td mat-cell *matCellDef="let row">
<span *ngIf="row.total_video" mat-line> {{row.total_video }}</span> </td>
</ng-container>
<!-- <ng-container matColumnDef="remarks">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Remarks</th>
<td mat-cell *matCellDef="let row">

View File

@ -41,13 +41,16 @@ export class SmcCreditComponent implements OnInit {
// 'credit_pd_id',
'credit_pd_sno',
'applicant_name',
'city_name',
'lender_applicant_id',
'credit_pd_type',
'product_abbr',
'officer_name',
'status',
'vendor_status',
'createdon'
'createdon',
'video_call_initiate_user',
'total_video'
//'remarks'
//'add'
// 'mail_status'
@ -171,13 +174,16 @@ export class SmcCreditComponent implements OnInit {
return {
'Reference Number':val.pd_sno,
'Main Loan Applicant':val.applicant_name,
'City':val.city_name,
'Lender Applicant ID':val.lender_applicant_id,
'Credit PD Type':val.type_name,
'Product Type':val.abbr,
'Credit Person':val.officer_name,
'Status':val.pd_status,
'Vendor Status':val.vendor_status,
'Date':val.updatedon
'Date':val.updatedon,
'Video Call Initiated Person':val.video_call_initiate_user,
'Video Count':val.total_video
//'Remarks':val.mis_report_remarks
}
})
@ -301,6 +307,20 @@ export class SmcCreditComponent implements OnInit {
// }
// }
column_name_filter(param){
let data = param.split(',');
let name =[];
data.forEach(element => {
let tmp = element.replace(/ *\([^)]*\) */g, "")
console.log(tmp)
name.push(tmp)
});
return name.toString()
}
getDateObjects(values: any) {
let selected_date = this.pipe.transform(values, 'yyyy/MM/dd');

View File

@ -52,6 +52,7 @@ const HORIZONTALMENUITEMS = [
// {state:'template/questions', name: 'Questions'},
{state:'template/templates', name: 'Templates'},
{state:'template2', name: 'Templates 2.0'},
{state:'datadump', name: 'Data Dump'},
]
},

View File

@ -84,6 +84,7 @@ const MENUITEMS : Menu[] = [
// {state:'template/questions', name: 'Questions'},
{state:'template/templates', name: 'Templates'},
{state:'template2/template2', name: 'Templates 2.0'},
{state:'datadump/datadump', name: 'Data Dump'},
]
},
{

View File

@ -89,7 +89,7 @@ export class ChecklistDatabase {
// let question_json = JSON.parse(JSON.parse(data.json))
// console.log(question_json)
let question_json;
if(data != [] && data.json){
if(data != 0 && data.json){
question_json = JSON.parse(data.json)
}else{

View File

@ -8,7 +8,7 @@ import { LenderListComponent } from './lender-list/lender-list.component';
import { LenderProductSegMappingComponent } from './lender-product-seg-mapping/lender-product-seg-mapping.component';
import { QuestionViewComponent } from './question-view/question-view.component';
import { SelectionListViewComponent } from './selection-list-view/selection-list-view.component';
import { Template2Module } from './template2.module';
export const Template2Routes: Routes = [
{

View File

@ -1,103 +1,863 @@
{
"section_id":"1",
"section_name":"General Information",
"section_id":"3",
"section_name":"Office Visit Information",
"onsubmit":[
],
"questions":[
{
"question":"Name of the Person met",
"question_key":"Name_of_the_Person_met",
"place_holder":"",
"field_type":"text",
"type":"3",
"field_width":"45",
"api_properties":
{
"purpose":"answer_options_local",
"master_name":"pd_applicants",
"fields":["pd_co_applicant_id","applicant_name"]
},
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"is_disabled":"1",
"answers":null,
"validations":[
]
},
"questions":[
{
"question":"Is Person Met",
"question_key":"is_person_met",
"question": "Employer Brief",
"question_key": "employer_brief",
"type": "1",
"disable":false,
"field_width": "45",
"answers": null,
"api_properties": null,
"onchange_properties": null,
"is_repeatable": null,
"validations": [
{
"name": "required",
"isactive": "1",
"validator": "Validators.required",
"message": "Field Required",
"value": null
}
]
} , {
"question": "Salary confirmed by Person met ?",
"question_key": "salary_confirmed_by_person_met",
"type": "3",
"disable":false,
"field_width": "45",
"answers":[
{
"answer_id":"Yes",
"answer":"Yes"
},
{
"answer_id":"No",
"answer":"No"
}
],
"api_properties": null,
"onchange_properties": [{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"salary_confirmed_by_person_met",
"expression":"(String('salary_confirmed_by_person_met') == String('Yes'))",
"value_keys":[
"salary_confirmed_by_person_met"
],
"questions":[
{
"question":"Net Monthly Salary",
"question_key":"net_monthly_salary",
"place_holder":"Net Monthly Salary",
"field_type":"numtoword",
"type":"1",
"field_width":"45",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"salary_confirmed_by_person_met",
"answers":null,
"validations":[
]
}, {
"question":"Gross Monthly Salary",
"question_key":"gross_monthly_salary",
"place_holder":"Gross Monthly Salary",
"field_type":"numtoword",
"type":"1",
"field_width":"45",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"salary_confirmed_by_person_met",
"answers":null,
"validations":[
]
}]
}]
}, {
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"salary_confirmed_by_person_met",
"expression":"(String('salary_confirmed_by_person_met') == String('No'))",
"value_keys":[
"salary_confirmed_by_person_met"
],
"questions":[
{
"question":"why salary amount was not confirmed?",
"question_key":"why_salary_amount_was_not_confirmed",
"place_holder":"why salary amount was not confirmed?",
"field_type":"text",
"type":"1",
"field_width":"45",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"salary_confirmed_by_person_met",
"answers":null,
"validations":[
]
} ]
}]
}],
"is_repeatable": null,
"validations": [
{
"name": "required",
"isactive": "1",
"validator": "Validators.required",
"message": "Field Required",
"value": null
}
]
}, {
"question": "Since how long working with this employer?",
"question_key": "since_how_long_working_with_this_employer?",
"field_type":"null",
"sub_title":"Since how long working with this employer?",
"disable":false,
"field_width": "100",
"answers": null,
"api_properties": null,
"onchange_properties": null,
"is_repeatable": null,
"validations": []
},
{
"question": "Year*",
"question_key": "year",
"type": "1",
"field_type":"num",
"disable":false,
"field_width": "25",
"answers": null,
"api_properties": null,
"onchange_properties": null,
"is_repeatable": null,
"validations": [
{
"name": "required",
"isactive": "1",
"validator": "Validators.required",
"message": "Field Required",
"value": null
}
]
},
{
"question": "Month",
"question_key": "month",
"type": "1",
"disable":false,
"field_type":"num",
"field_width": "25",
"answers": null,
"api_properties": null,
"onchange_properties": null,
"is_repeatable": null,
"validations": [
{
"name": "required",
"isactive": "1",
"validator": "Validators.required",
"message": "Field Required",
"value": null
}
]
}, {
"question":"Mode of Getting Salary?",
"question_key":"mode_of_getting_salary",
"type":"3",
"field_width":"45",
"answers":[{
"answer":"Yes",
"answer_id":"yes"
},
{
"answer":"No",
"answer_id":"no"
}],
"api_properties":null,
"onchange_properties":[
{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"is_person_met",
"expression":"(String('is_person_met') == String('no'))",
"value_keys":[
"is_person_met"
],
"questions":[
{
"question":"Designation of Person met",
"question_key":"Designation_of_Person_met",
"place_holder":"",
"field_type":"text",
"type":"8",
"field_width":"45",
"api_properties":{
"api":"getListOfMaster",
"api_method":"POST",
"params":{
"master_name":"COMPANYRELATIONSHIPS"
},
"fields":[
"company_relationship_id",
"name"
]
},
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"is_person_met",
"answers":null,
"validations":[
]
} ,{
"question":"Name of the Person met",
"question_key":"Name_of_the_Person",
"place_holder":"",
"field_type":"text",
"type":"1",
"field_width":"45",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"Was_the_employee_met",
"answers":null,
"validations":[
]
}]
}]
}],
"answers":[
{
"answer_id":"Bank Transfer",
"answer":"Bank Transfer"
},
{
"answer_id":"Paid in Cash ",
"answer":"Paid in Cash "
}, {
"answer_id":"Both Bank Transfer & Cash ",
"answer":"Both Bank Transfer & Cash "
}
],
"onchange_properties": [],
"is_repeatable":null,
"validations":[
]
}, {
"question":"Salary Register was seen ?",
"question_key":"salary_register_was_seen",
"sub_title":"Documents Sighted",
"type":"2",
"field_width":"100",
"api_properties":null,
"answers":[
{
"answer_id":"Yes",
"answer":"Yes"
},
{
"answer_id":"No",
"answer":"No"
}
],
"onchange_properties": [ {
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"salary_register_was_seen",
"expression":"(String('others_Please_specifys') == String('No')) && (String('offer_letter_was_seen') == String('No')) && (String('salary_register_was_seen') == String('No')) && (String('cash_voucher_was_seen') == String('No')) && (String('salary_slip_was_seen') == String('No'))",
"value_keys":[
"others_Please_specifys","offer_letter_was_seen","salary_register_was_seen","cash_voucher_was_seen","salary_slip_was_seen"
],
"questions":[
{
"question":"Why documents are not available?",
"question_key":"Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"4",
"field_width":"100",
"api_properties":null,
"onchange_properties":[{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"Why_documents_are_not_available_offer_letter",
"expression":"(String('Why_documents_are_not_available_offer_letter').includes('Others_please_specify'))",
"value_keys":[
"Why_documents_are_not_available_offer_letter"
],
"questions":[
{
"question":"Others ",
"question_key":"Others_please_specify_Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"1",
"field_width":"100",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":null,
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":[ {
"answer_id":"Documents_were_not_shared_by_Employer",
"answer":"Documents were not shared by Employer"
},
{
"answer_id":"Documents_are_not_issued_by_Employer_to_Employee",
"answer":"Documents are not issued by Employer to Employee"
} , {
"answer_id":"Documents_were_not_available",
"answer":"Documents were not available"
} , {
"answer_id":"Employer_was_not_available",
"answer":"Employer was not available"
} , {
"answer_id":"Others_please_specify",
"answer":"Others please specify"
} ],
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"validations":[
]
}, {
"question":"Cash voucher was seen ?",
"question_key":"cash_voucher_was_seen",
"type":"2",
"field_width":"100",
"api_properties":null,
"answers":[
{
"answer_id":"Yes",
"answer":"Yes"
},
{
"answer_id":"No",
"answer":"No"
}
],
"onchange_properties": [ {
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"cash_voucher_was_seen",
"expression":"(String('others_Please_specifys') == String('No')) && (String('offer_letter_was_seen') == String('No')) && (String('salary_register_was_seen') == String('No')) && (String('cash_voucher_was_seen') == String('No')) && (String('salary_slip_was_seen') == String('No'))",
"value_keys":[
"others_Please_specifys","offer_letter_was_seen","salary_register_was_seen","cash_voucher_was_seen","salary_slip_was_seen"
],
"questions":[
{
"question":"Why documents are not available?",
"question_key":"Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"4",
"field_width":"100",
"api_properties":null,
"onchange_properties":[{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"Why_documents_are_not_available_offer_letter",
"expression":"(String('Why_documents_are_not_available_offer_letter').includes('Others_please_specify'))",
"value_keys":[
"Why_documents_are_not_available_offer_letter"
],
"questions":[
{
"question":"Others ",
"question_key":"Others_please_specify_Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"1",
"field_width":"100",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":null,
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":[ {
"answer_id":"Documents_were_not_shared_by_Employer",
"answer":"Documents were not shared by Employer"
},
{
"answer_id":"Documents_are_not_issued_by_Employer_to_Employee",
"answer":"Documents are not issued by Employer to Employee"
} , {
"answer_id":"Documents_were_not_available",
"answer":"Documents were not available"
} , {
"answer_id":"Employer_was_not_available",
"answer":"Employer was not available"
} , {
"answer_id":"Others_please_specify",
"answer":"Others please specify"
} ],
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"validations":[
]
}, {
"question":"Salary Slip was seen ?",
"question_key":"salary_slip_was_seen",
"type":"2",
"field_width":"100",
"api_properties":null,
"answers":[
{
"answer_id":"Yes",
"answer":"Yes"
},
{
"answer_id":"No",
"answer":"No"
}
],
"onchange_properties": [ {
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"salary_slip_was_seen",
"expression":"(String('others_Please_specifys') == String('No')) && (String('offer_letter_was_seen') == String('No')) && (String('salary_register_was_seen') == String('No')) && (String('cash_voucher_was_seen') == String('No')) && (String('salary_slip_was_seen') == String('No'))",
"value_keys":[
"others_Please_specifys","offer_letter_was_seen","salary_register_was_seen","cash_voucher_was_seen","salary_slip_was_seen"
],
"questions":[
{
"question":"Why documents are not available?",
"question_key":"Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"4",
"field_width":"100",
"api_properties":null,
"onchange_properties":[{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"Why_documents_are_not_available_offer_letter",
"expression":"(String('Why_documents_are_not_available_offer_letter').includes('Others_please_specify'))",
"value_keys":[
"Why_documents_are_not_available_offer_letter"
],
"questions":[
{
"question":"Others ",
"question_key":"Others_please_specify_Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"1",
"field_width":"100",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":null,
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":[ {
"answer_id":"Documents_were_not_shared_by_Employer",
"answer":"Documents were not shared by Employer"
},
{
"answer_id":"Documents_are_not_issued_by_Employer_to_Employee",
"answer":"Documents are not issued by Employer to Employee"
} , {
"answer_id":"Documents_were_not_available",
"answer":"Documents were not available"
} , {
"answer_id":"Employer_was_not_available",
"answer":"Employer was not available"
} , {
"answer_id":"Others_please_specify",
"answer":"Others please specify"
} ],
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"validations":[
]
}, {
"question":"Offer Letter was seen ?",
"question_key":"offer_letter_was_seen",
"type":"2",
"field_width":"100",
"api_properties":null,
"answers":[
{
"answer_id":"Yes",
"answer":"Yes"
},
{
"answer_id":"No",
"answer":"No"
}
],
"onchange_properties": [ {
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"offer_letter_was_seen",
"expression":"(String('others_Please_specifys') == String('No')) && (String('offer_letter_was_seen') == String('No')) && (String('salary_register_was_seen') == String('No')) && (String('cash_voucher_was_seen') == String('No')) && (String('salary_slip_was_seen') == String('No'))",
"value_keys":[
"others_Please_specifys","offer_letter_was_seen","salary_register_was_seen","cash_voucher_was_seen","salary_slip_was_seen"
],
"questions":[
{
"question":"Why documents are not available?",
"question_key":"Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"4",
"field_width":"100",
"api_properties":null,
"onchange_properties":[{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"Why_documents_are_not_available_offer_letter",
"expression":"(String('Why_documents_are_not_available_offer_letter').includes('Others_please_specify'))",
"value_keys":[
"Why_documents_are_not_available_offer_letter"
],
"questions":[
{
"question":"Others ",
"question_key":"Others_please_specify_Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"1",
"field_width":"100",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":null,
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":[ {
"answer_id":"Documents_were_not_shared_by_Employer",
"answer":"Documents were not shared by Employer"
},
{
"answer_id":"Documents_are_not_issued_by_Employer_to_Employee",
"answer":"Documents are not issued by Employer to Employee"
} , {
"answer_id":"Documents_were_not_available",
"answer":"Documents were not available"
} , {
"answer_id":"Employer_was_not_available",
"answer":"Employer was not available"
} , {
"answer_id":"Others_please_specify",
"answer":"Others please specify"
} ],
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"validations":[
]
}, {
"question":"Others",
"question_key":"others_Please_specifys",
"type":"2",
"field_width":"100",
"api_properties":null,
"answers":[
{
"answer_id":"Yes",
"answer":"Yes"
},
{
"answer_id":"No",
"answer":"No"
}
],
"onchange_properties": [ {
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"others_Please_specifys",
"expression":"(String('others_Please_specifys') == String('Yes'))",
"value_keys":[
"others_Please_specifys"
],
"questions":[
{
"question":"Others please specify",
"question_key":"Others_specify",
"place_holder":"Others please specify",
"field_type":"text",
"type":"1",
"field_width":"100",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":null,
"validations":[
]
} ]
}]
},
{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"others_Please_specifys",
"expression":"(String('others_Please_specifys') == String('No')) && (String('offer_letter_was_seen') == String('No')) && (String('salary_register_was_seen') == String('No')) && (String('cash_voucher_was_seen') == String('No')) && (String('salary_slip_was_seen') == String('No'))",
"value_keys":[
"others_Please_specifys","offer_letter_was_seen","salary_register_was_seen","cash_voucher_was_seen","salary_slip_was_seen"
],
"questions":[
{
"question":"Why documents are not available?",
"question_key":"Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"4",
"field_width":"100",
"api_properties":null,
"onchange_properties":[{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"Why_documents_are_not_available_offer_letter",
"expression":"(String('Why_documents_are_not_available_offer_letter').includes('Others_please_specify'))",
"value_keys":[
"Why_documents_are_not_available_offer_letter"
],
"questions":[
{
"question":"Others ",
"question_key":"Others_please_specify_Why_documents_are_not_available_offer_letter",
"place_holder":"Why documents are not available",
"field_type":"text",
"type":"1",
"field_width":"100",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":null,
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"others_Please_specifys",
"answers":[ {
"answer_id":"Documents_were_not_shared_by_Employer",
"answer":"Documents were not shared by Employer"
},
{
"answer_id":"Documents_are_not_issued_by_Employer_to_Employee",
"answer":"Documents are not issued by Employer to Employee"
} , {
"answer_id":"Documents_were_not_available",
"answer":"Documents were not available"
} , {
"answer_id":"Employer_was_not_available",
"answer":"Employer was not available"
} , {
"answer_id":"Others_please_specify",
"answer":"Others please specify"
} ],
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"validations":[
]
}, {
"question":"No. of employees sighted by PD officer during visit",
"question_key":"no_of_employees_sighted_by_PD_officer_during_visit",
"type":"1",
"field_type":"num",
"field_width":"45",
"api_properties":null,
"answers":[
],
"onchange_properties":null,
"is_repeatable":null,
"validations":[
]
}, {
"question": "Was the company name board sighted? ",
"question_key": "was_the_company_name_board_sighted",
"type": "3",
"disable":false,
"field_width": "45",
"answers":[
{
"answer_id":"Yes",
"answer":"Yes"
},
{
"answer_id":"No",
"answer":"No"
}
],
"api_properties": null,
"onchange_properties": null,
"is_repeatable": null,
"validations": [
{
"name": "required",
"isactive": "1",
"validator": "Validators.required",
"message": "Field Required",
"value": null
}
]
}, {
"question": "Was any business activities observed during visit?",
"question_key": "Was_any_business_activities_observed_during_visit",
"type": "3",
"disable":false,
"field_width": "45",
"answers":[
{
"answer_id":"Yes",
"answer":"Yes"
},
{
"answer_id":"No",
"answer":"No"
}
],
"api_properties": null,
"onchange_properties": [{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"Was_any_business_activities_observed_during_visit",
"expression":"(String('Was_any_business_activities_observed_during_visit') == String('Yes'))",
"value_keys":[
"Was_any_business_activities_observed_during_visit"
],
"questions":[
{
"question":"If Yes ,Please Choose ",
"question_key":"If_yes_choose_one",
"place_holder":"why salary amount was not confirmed?",
"field_type":"text",
"type":"4",
"field_width":"45",
"api_properties":null,
"onchange_properties":[{
"purpose":"FORM_CTRL",
"form_controls":[
{
"insert_index":"If_yes_choose_one",
"expression":"(String('If_yes_choose_one').includes('others'))",
"value_keys":[
"If_yes_choose_one"
],
"questions":[
{
"question":"Others (Please specify)",
"question_key":"Others_Please_specify",
"place_holder":"Others (Please specify)",
"field_type":"text",
"type":"1",
"field_width":"45",
"api_properties":null,
"onchange_properties":null,
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"salary_confirmed_by_person_met",
"answers":null,
"validations":[
]
} ]
}]
}],
"is_repeatable":null,
"is_subfield":"1",
"parent_question_key":"salary_confirmed_by_person_met",
"answers":[
{
"answer_id":"employees_were_seen_at_the_visited_premises",
"answer":"Employees were seen at the visited premises"
},
{
"answer_id":"customers_Clients_were_seen_at_the_visited_premises",
"answer":"Customers/Clients were seen at the visited premises"
} , {
"answer_id":"manufacturing_activities_were_seen_at_the_visited_premises",
"answer":"Manufacturing activities were seen at the visited premises"
},
{
"answer_id":"others",
"answer":"Others (Please specify)"
}
],
"validations":[
]
} ]
}]
}],
"is_repeatable": null,
"validations": [
{
"name": "required",
"isactive": "1",
"validator": "Validators.required",
"message": "Field Required",
"value": null
}
]
}

View File

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="225.000000pt" height="225.000000pt" viewBox="0 0 225.000000 225.000000" preserveAspectRatio="xMidYMid meet">
<metadata fill="#ff0000">
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,225.000000) scale(0.100000,-0.100000)" fill="#ff0000" stroke="none">
<path d="M525 2202 c-62 -38 -60 -25 -63 -393 l-3 -339 -47 -32 c-131 -90 -222 -243 -222 -373 0 -33 -5 -46 -22 -57 -44 -29 -109 -103 -129 -148 -11 -25 -25 -53 -30 -62 -16 -30 -11 -188 8 -238 23 -61 64 -121 114 -163 67 -58 103 -70 219 -76 l105 -6 6 -105 c7 -119 9 -127 47 -155 26 -20 45 -20 827 -23 587 -2 807 1 828 9 15 7 37 23 47 37 19 24 20 44 20 688 l0 664 -470 0 -470 0 -1 323 c0 177 -1 354 -2 392 l-2 70 -365 3 c-340 2 -367 1 -395 -16z m257 -760 c97 -32 173 -88 246 -181 17 -22 21 -23 54 -12 19 6 69 12 111 13 66 1 83 -2 140 -30 82 -41 143 -107 181 -196 16 -36 33 -66 39 -66 23 0 98 -74 129 -128 31 -54 33 -62 33 -157 0 -92 -2 -104 -30 -154 -38 -68 -102 -125 -173 -151 -53 -20 -71 -21 -566 -19 -628 1 -686 5 -752 45 -90 56 -154 172 -154 280 0 99 55 204 139 267 47 35 51 41 51 80 0 102 54 222 137 304 107 106 279 150 415 105z" fill="#ff0000"/>
<path d="M746 969 c-34 -26 -36 -82 -4 -116 21 -22 21 -24 5 -85 -9 -35 -19 -73 -23 -85 -6 -22 -4 -23 60 -23 47 0 66 4 66 13 0 7 -9 46 -20 86 -21 73 -21 74 -1 92 42 39 34 105 -15 128 -33 15 -37 14 -68 -10z" fill="#ff0000"/>
<path d="M1402 1870 l3 -343 403 -1 c221 0 402 2 402 5 0 3 -19 21 -42 39 -57 45 -401 336 -504 425 -134 117 -245 210 -255 213 -6 2 -8 -130 -7 -338z" fill="#ff0000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000" preserveAspectRatio="xMidYMid meet">
<metadata fill="#ff0000">
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)" fill="#ff0000" stroke="none">
<path d="M2341 4609 c-887 -93 -1627 -768 -1800 -1644 -239 -1204 600 -2341 1818 -2465 1215 -122 2271 833 2271 2055 0 1149 -936 2076 -2084 2064 -66 -1 -159 -6 -205 -10z m859 -999 l0 -140 -615 0 -615 0 0 140 0 140 615 0 615 0 0 -140z m0 -500 l0 -170 -615 0 -615 0 0 170 0 170 615 0 615 0 0 -170z m0 -595 l0 -215 255 -2 255 -3 -562 -563 -563 -562 -565 565 -565 565 258 0 257 0 0 215 0 215 615 0 615 0 0 -215z" fill="#ff0000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 805 B

View File

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000" preserveAspectRatio="xMidYMid meet">
<metadata fill="#ff0000">
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)" fill="#ff0000" stroke="none">
<path d="M303 5100 c-134 -48 -237 -152 -284 -288 -18 -54 -19 -115 -19 -2252 0 -2137 1 -2198 19 -2252 47 -138 151 -242 288 -289 55 -18 97 -19 1643 -19 1546 0 1588 1 1643 19 137 47 241 151 288 289 18 51 19 88 19 504 l0 448 547 647 c618 732 606 718 640 793 38 82 44 225 14 317 -43 133 -140 236 -266 285 -50 19 -78 23 -170 22 -199 -1 -240 -30 -538 -382 l-222 -262 -5 782 c-5 841 -2 795 -58 897 -29 51 -92 115 -430 435 -259 245 -298 276 -385 305 -60 21 -73 21 -1366 20 -1246 0 -1308 -1 -1358 -19z m2397 -682 c0 -378 1 -405 19 -432 10 -15 32 -37 47 -47 27 -18 54 -19 432 -19 l402 0 0 -801 0 -800 -334 -395 c-183 -218 -346 -418 -360 -444 -18 -33 -53 -157 -106 -380 -44 -182 -80 -341 -80 -353 0 -40 43 -109 80 -129 68 -35 97 -27 412 109 161 69 309 136 328 148 19 12 41 25 48 29 11 7 13 -36 10 -240 -3 -235 -4 -251 -25 -284 -12 -19 -37 -44 -55 -55 -33 -20 -51 -20 -1568 -20 -1517 0 -1535 0 -1568 20 -18 11 -43 36 -55 55 l-22 35 0 2145 0 2145 22 35 c24 39 53 60 98 71 17 4 535 7 1153 8 l1122 1 0 -402z m705 -52 l150 -145 -277 0 -278 -1 0 266 0 266 128 -120 c70 -66 195 -186 277 -266z m1339 -1365 c43 -29 66 -70 66 -121 0 -51 -16 -81 -81 -153 l-44 -48 -108 92 c-96 81 -107 93 -95 107 97 118 130 142 193 142 22 0 53 -8 69 -19z m-371 -468 c56 -47 101 -92 101 -98 -1 -7 -182 -227 -404 -489 -273 -323 -406 -474 -415 -468 -21 12 -204 167 -204 173 -1 6 811 969 817 969 2 0 49 -39 105 -87z m-1004 -1223 c49 -41 90 -78 90 -83 1 -4 -18 -26 -41 -49 -32 -31 -77 -56 -177 -99 -74 -32 -136 -57 -138 -56 -1 2 14 68 33 147 34 142 46 173 87 218 24 26 14 31 146 -78z" fill="#ff0000"/>
<path d="M666 4201 c-46 -31 -66 -69 -66 -131 0 -62 20 -100 66 -131 28 -18 62 -19 834 -19 772 0 806 1 834 19 46 31 66 69 66 131 0 62 -20 100 -66 131 -28 18 -62 19 -834 19 -772 0 -806 -1 -834 -19z" fill="#ff0000"/>
<path d="M666 3291 c-46 -31 -66 -69 -66 -131 0 -62 20 -100 66 -131 28 -18 71 -19 1284 -19 1213 0 1256 1 1284 19 46 31 66 69 66 131 0 62 -20 100 -66 131 -28 18 -71 19 -1284 19 -1213 0 -1256 -1 -1284 -19z" fill="#ff0000"/>
<path d="M666 2391 c-46 -31 -66 -69 -66 -131 0 -62 20 -100 66 -131 28 -18 71 -19 1284 -19 1213 0 1256 1 1284 19 46 31 66 69 66 131 0 62 -20 100 -66 131 -28 18 -71 19 -1284 19 -1213 0 -1256 -1 -1284 -19z" fill="#ff0000"/>
<path d="M666 1491 c-46 -31 -66 -69 -66 -131 0 -62 20 -100 66 -131 28 -18 62 -19 834 -19 772 0 806 1 834 19 46 31 66 69 66 131 0 62 -20 100 -66 131 -28 18 -62 19 -834 19 -772 0 -806 -1 -834 -19z" fill="#ff0000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="126.000000pt" height="128.000000pt" viewBox="0 0 126.000000 128.000000" preserveAspectRatio="xMidYMid meet">
<metadata fill="#ff0000">
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,128.000000) scale(0.100000,-0.100000)" fill="#ff0000" stroke="none">
<path d="M2 793 l3 -488 165 0 165 0 3 53 3 52 -110 0 -111 0 0 385 0 385 510 0 510 0 0 -385 0 -385 -110 0 -110 0 0 -55 0 -55 168 2 167 3 3 488 2 487 -630 0 -630 0 2 -487z" fill="#ff0000"/>
<path d="M304 997 c-54 -46 -20 -137 51 -137 73 0 104 87 49 138 -32 28 -66 28 -100 -1z" fill="#ff0000"/>
<path d="M781 810 c-40 -72 -76 -132 -80 -135 -4 -2 -16 10 -26 28 -10 18 -34 57 -53 86 l-35 55 -43 -110 -43 -109 -54 -3 -55 -3 -12 51 c-7 27 -15 50 -19 50 -3 0 -20 -34 -36 -75 -29 -72 -31 -75 -62 -75 -30 0 -33 -3 -33 -30 l0 -30 400 0 c220 0 400 3 400 8 0 14 -163 422 -169 422 -3 0 -39 -59 -80 -130z" fill="#ff0000"/>
<path d="M540 315 l0 -94 -56 -3 -56 -3 101 -105 101 -105 101 105 101 105 -58 5 -59 5 -3 93 -3 92 -84 0 -85 0 0 -95z" fill="#ff0000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="200.000000pt" height="200.000000pt" viewBox="0 0 200.000000 200.000000" preserveAspectRatio="xMidYMid meet">
<metadata fill="#ff0000">
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,200.000000) scale(0.100000,-0.100000)" fill="#ff0000" stroke="none">
<path d="M865 1529 c-114 -15 -335 -89 -335 -113 0 -6 46 -90 102 -187 l101 -177 66 26 c60 24 79 26 201 26 122 0 141 -2 200 -26 l66 -25 102 177 c56 97 102 181 102 187 0 6 -35 24 -77 41 -189 74 -341 94 -528 71z" fill="#ff0000"/>
<path d="M405 1344 c-236 -177 -386 -446 -402 -716 l-6 -98 201 0 201 0 6 48 c11 80 43 174 82 240 34 58 126 156 181 194 l22 15 -103 178 c-56 98 -107 180 -112 181 -6 2 -37 -17 -70 -42z" fill="#ff0000"/>
<path d="M1513 1378 c-6 -7 -54 -89 -108 -182 -89 -155 -96 -170 -79 -179 42 -23 152 -140 187 -199 39 -66 71 -160 82 -240 l6 -48 201 0 201 0 -6 98 c-15 267 -170 543 -397 712 -37 27 -70 50 -72 50 -3 0 -10 -6 -15 -12z" fill="#ff0000"/>
<path d="M1175 734 c-131 -54 -238 -103 -247 -115 -28 -33 -24 -100 8 -130 42 -39 92 -33 150 21 110 100 327 311 323 314 -2 3 -107 -38 -234 -90z" fill="#ff0000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB