lender
This commit is contained in:
parent
8b4e41d703
commit
94ea0e0885
0
ng6-seed/angular.json
Normal file → Executable file
0
ng6-seed/angular.json
Normal file → Executable file
2271
ng6-seed/package-lock.json
generated
Normal file → Executable file
2271
ng6-seed/package-lock.json
generated
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
72
ng6-seed/package.json
Normal file → Executable file
72
ng6-seed/package.json
Normal file → Executable file
@ -3,6 +3,7 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"prod": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng build --prod --build-optimizer=true",
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
"start": "ng serve",
|
"start": "ng serve",
|
||||||
"build": "ng build",
|
"build": "ng build",
|
||||||
@ -12,72 +13,87 @@
|
|||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@agm/core": "^1.0.0-beta.2",
|
"@agm/core": "^1.0.0-beta.5",
|
||||||
"@angular/animations": "^6.0.0-rc.5",
|
"@angular/animations": "^6.1.10",
|
||||||
"@angular/cdk": "^6.0.0-rc.5",
|
"@angular/cdk": "^6.0.0-rc.5",
|
||||||
"@angular/common": "^6.0.0-rc.5",
|
"@angular/common": "^6.1.10",
|
||||||
"@angular/compiler": "^6.0.0-rc.5",
|
"@angular/compiler": "^6.1.10",
|
||||||
"@angular/core": "^6.0.0-rc.5",
|
"@angular/core": "^6.1.10",
|
||||||
"@angular/flex-layout": "^6.0.0-beta.18",
|
"@angular/flex-layout": "^6.0.0-beta.18",
|
||||||
"@angular/forms": "^6.0.0-rc.5",
|
"@angular/forms": "^6.1.10",
|
||||||
"@angular/http": "^6.0.0-rc.5",
|
"@angular/http": "^6.0.0-rc.6",
|
||||||
"@angular/material": "^6.0.0-rc.5",
|
"@angular/material": "^6.0.0-rc.5",
|
||||||
"@angular/platform-browser": "^6.0.0-rc.5",
|
"@angular/material-moment-adapter": "^6.0.0-rc.5",
|
||||||
"@angular/platform-browser-dynamic": "^6.0.0-rc.5",
|
"@angular/platform-browser": "^6.1.10",
|
||||||
"@angular/router": "^6.0.0-rc.5",
|
"@angular/platform-browser-dynamic": "^6.1.10",
|
||||||
|
"@angular/router": "^6.1.10",
|
||||||
"@ngx-translate/core": "^10.0.2",
|
"@ngx-translate/core": "^10.0.2",
|
||||||
"@ngx-translate/http-loader": "^3.0.1",
|
"@ngx-translate/http-loader": "^3.0.1",
|
||||||
"@swimlane/ngx-charts": "^7.0.1",
|
"@swimlane/ngx-charts": "^7.0.1",
|
||||||
"@swimlane/ngx-datatable": "11.1.5",
|
"@swimlane/ngx-datatable": "11.1.5",
|
||||||
"amazon-cognito-identity-js": "^2.0.27",
|
"@types/file-saver": "^2.0.0",
|
||||||
|
"amazon-cognito-identity-js": "^2.0.30",
|
||||||
"angular-calendar": "0.23.3",
|
"angular-calendar": "0.23.3",
|
||||||
"angular-sortablejs": "^2.0.6",
|
"angular-notifier": "^4.1.1",
|
||||||
|
"angular-sortablejs": "^2.7.0",
|
||||||
"angular-tree-component": "6.1.0",
|
"angular-tree-component": "6.1.0",
|
||||||
"aws-sdk": "^2.318.0",
|
|
||||||
"chart.js": "2.6.0",
|
"chart.js": "2.6.0",
|
||||||
"core-js": "^2.5.5",
|
"core-js": "^2.6.5",
|
||||||
"d3": "^4.9.1",
|
"d3": "^4.9.1",
|
||||||
"dragula": "3.7.2",
|
"dragula": "3.7.2",
|
||||||
|
"file-saver": "^2.0.1",
|
||||||
"font-awesome": "4.7.0",
|
"font-awesome": "4.7.0",
|
||||||
"hammerjs": "2.0.8",
|
"hammerjs": "2.0.8",
|
||||||
"intl": "^1.2.4",
|
"intl": "^1.2.4",
|
||||||
"jquery": "3.2.1",
|
"jquery": "3.2.1",
|
||||||
"karma-jasmine": "^1.1.1",
|
"karma-jasmine": "^1.1.1",
|
||||||
"leaflet": "^1.0.2",
|
"leaflet": "^1.4.0",
|
||||||
"moment": "^2.15.0",
|
"moment": "^2.24.0",
|
||||||
|
"ng-pick-datetime": "^6.0.16",
|
||||||
"ng2-charts": "1.6.0",
|
"ng2-charts": "1.6.0",
|
||||||
|
"ng2-ckeditor": "^1.2.2",
|
||||||
"ng2-dragula": "1.3.1",
|
"ng2-dragula": "1.3.1",
|
||||||
"ng2-file-upload": "1.2.1",
|
"ng2-file-upload": "1.2.1",
|
||||||
|
"ng2-pdf-viewer": "^5.2.4",
|
||||||
|
"ng2-toastr": "^4.1.2",
|
||||||
"ng2-validation": "4.2.0",
|
"ng2-validation": "4.2.0",
|
||||||
"ngx-color-picker": "^4.0.3",
|
"ngx-color-picker": "^4.0.3",
|
||||||
"ngx-mat-select-search": "^1.3.1",
|
"ngx-mat-daterange-picker": "^1.1.4",
|
||||||
|
"ngx-mat-select-search": "^1.7.2",
|
||||||
"ngx-perfect-scrollbar": "5.0.0-7",
|
"ngx-perfect-scrollbar": "5.0.0-7",
|
||||||
|
"ngx-viewer": "^1.0.1",
|
||||||
|
"node-sass": "^4.11.0",
|
||||||
"perfect-scrollbar": "^1.3.0",
|
"perfect-scrollbar": "^1.3.0",
|
||||||
"quill": "^1.2.0",
|
"quill": "^1.2.0",
|
||||||
"rxjs": "^6.3.1",
|
"rxjs": "^6.5.1",
|
||||||
"rxjs-compat": "^6.3.1",
|
"rxjs-compat": "^6.5.1",
|
||||||
"screenfull": "^3.2.2",
|
"screenfull": "^3.2.2",
|
||||||
"simple-line-icons": "^2.4.1",
|
"simple-line-icons": "^2.4.1",
|
||||||
"sortablejs": "^1.6.0",
|
"sortablejs": "^1.9.0",
|
||||||
"tether": "^1.4.0",
|
"sweetalert2": "^7.33.1",
|
||||||
"zone.js": "^0.8.26"
|
"tether": "^1.4.6",
|
||||||
|
"viewerjs": "^1.3.3",
|
||||||
|
"xlsx": "^0.14.2",
|
||||||
|
"zone.js": "^0.8.29"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-devkit/build-angular": "~0.6.1",
|
"@angular-devkit/build-angular": "^0.6.8",
|
||||||
"@angular/cli": "^6.0.0-rc.5",
|
"@angular/cli": "^6.2.9",
|
||||||
"@angular/compiler-cli": "^6.0.0-rc.5",
|
"@angular/compiler-cli": "^6.1.10",
|
||||||
"@types/node": "~8.9.4",
|
"@types/aws-sdk": "^2.7.0",
|
||||||
"codelyzer": "~4.1.0",
|
|
||||||
"@types/jasmine": "2.5.52",
|
"@types/jasmine": "2.5.52",
|
||||||
"@types/jquery": "3.2.0",
|
"@types/jquery": "3.2.0",
|
||||||
|
"@types/node": "^8.10.46",
|
||||||
|
"aws-sdk": "^2.443.0",
|
||||||
|
"codelyzer": "~4.1.0",
|
||||||
"jasmine-core": "2.6.3",
|
"jasmine-core": "2.6.3",
|
||||||
"jasmine-spec-reporter": "4.1.0",
|
"jasmine-spec-reporter": "4.1.0",
|
||||||
"karma": "1.7.0",
|
"karma": "1.7.0",
|
||||||
"karma-chrome-launcher": "2.1.1",
|
"karma-chrome-launcher": "2.1.1",
|
||||||
"karma-cli": "1.0.1",
|
"karma-cli": "1.0.1",
|
||||||
|
"karma-coverage-istanbul-reporter": "1.3.0",
|
||||||
"karma-jasmine": "1.1.0",
|
"karma-jasmine": "1.1.0",
|
||||||
"karma-jasmine-html-reporter": "^0.2.2",
|
"karma-jasmine-html-reporter": "^0.2.2",
|
||||||
"karma-coverage-istanbul-reporter": "1.3.0",
|
|
||||||
"protractor": "5.1.2",
|
"protractor": "5.1.2",
|
||||||
"ts-node": "~5.0.0",
|
"ts-node": "~5.0.0",
|
||||||
"tslint": "~5.9.1",
|
"tslint": "~5.9.1",
|
||||||
|
|||||||
@ -1,16 +1,18 @@
|
|||||||
import { Injectable } from "@angular/core";
|
import { Injectable } from "@angular/core";
|
||||||
import {
|
import {
|
||||||
AuthenticationDetails,
|
AuthenticationDetails,
|
||||||
CognitoUserPool ,
|
CognitoUserPool,
|
||||||
CognitoUser,
|
CognitoUser,
|
||||||
CognitoUserAttribute,
|
CognitoUserAttribute,
|
||||||
ICognitoUserAttributeData,
|
ICognitoUserAttributeData,
|
||||||
ISignUpResult,
|
ISignUpResult,
|
||||||
CognitoUserSession
|
CognitoUserSession
|
||||||
} from "amazon-cognito-identity-js";
|
} from "amazon-cognito-identity-js";
|
||||||
|
import * as AWS from "aws-sdk";
|
||||||
|
|
||||||
import { Observable } from "rxjs/Observable";
|
import { Observable } from "rxjs/Observable";
|
||||||
import "rxjs/add/operator/map";
|
import "rxjs/add/operator/map";
|
||||||
import * as AWS from "aws-sdk";
|
// import AWS from "aws-sdk/dist/aws-sdk";
|
||||||
|
|
||||||
//environment
|
//environment
|
||||||
import { environment } from '../../environments/environment';
|
import { environment } from '../../environments/environment';
|
||||||
@ -18,28 +20,30 @@ import { environment } from '../../environments/environment';
|
|||||||
import { Http, Headers, RequestOptions } from '@angular/http';
|
import { Http, Headers, RequestOptions } from '@angular/http';
|
||||||
import { HttpClient } from '@angular/common/http';
|
import { HttpClient } from '@angular/common/http';
|
||||||
import 'rxjs/add/operator/map';
|
import 'rxjs/add/operator/map';
|
||||||
|
import { CognitoService } from './cognito.service';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const sineedge_poolData = {
|
// const sineedge_poolData = {
|
||||||
UserPoolId: "ap-south-1_y7dt3iEaX", //ap-south-1_qQ85yQZJO UserName :SPARQ_SINEEDGE_DEV
|
// UserPoolId: "ap-south-1_y7dt3iEaX", //ap-south-1_qQ85yQZJO UserName :SPARQ_SINEEDGE_DEV
|
||||||
ClientId: "291qt4smn5pql6o8cc2hi201lj" // ClientName: SINEEDGE_DEV_WEB
|
// ClientId: "291qt4smn5pql6o8cc2hi201lj" // ClientName: SINEEDGE_DEV_WEB
|
||||||
};
|
// };
|
||||||
const sineedgedev_poolData = {
|
const sineedgedev_poolData = {
|
||||||
UserPoolId: environment.UserPoolId, // UserName :SPARQ_SINEEDGE_DEV
|
UserPoolId: "ap-south-1_qQ85yQZJO", // UserName :SPARQ_SINEEDGE_DEV
|
||||||
ClientId: environment.ClientId// ClientName: SINEEDGE_DEV_WEB
|
ClientId: "67b4fnbuols5upms5to8bvqddh"// ClientName: SINEEDGE_DEV_WEB
|
||||||
}
|
}
|
||||||
|
// client id changed on 12-04-2019 by kms
|
||||||
|
//ClientId: "2o5c3cs9k3als16nqhp3irh8rs"
|
||||||
|
|
||||||
const lender_poolData = {
|
const lender_poolData = {
|
||||||
UserPoolId: "ap-south-1_hFiGyr1Gw", // Username :SPARQ_LENDER_DEV
|
UserPoolId: "ap-south-1_hFiGyr1Gw", // Username :SPARQ_LENDER_DEV
|
||||||
ClientId: "6egsdssf0i7h2o9mscqgqbn788" // ClientName:LENDER_DEV_WEB
|
ClientId: "vkotfqgqorgjh3fvp1r26hslv" // ClientName:LENDER_DEV_WEB
|
||||||
};
|
};
|
||||||
const vendor_poolData = {
|
const vendor_poolData = {
|
||||||
UserPoolId: "",
|
UserPoolId: "ap-south-1_K57yPaWxV",
|
||||||
ClientId: ""
|
ClientId: ""
|
||||||
}
|
}
|
||||||
|
// const sineedgeUserPool = new CognitoUserPool(sineedge_poolData);
|
||||||
const sineedgeUserPool = new CognitoUserPool(sineedge_poolData);
|
|
||||||
const lenderUserPool = new CognitoUserPool(lender_poolData);
|
const lenderUserPool = new CognitoUserPool(lender_poolData);
|
||||||
const sineedgedevUserpool = new CognitoUserPool(sineedgedev_poolData);
|
const sineedgedevUserpool = new CognitoUserPool(sineedgedev_poolData);
|
||||||
|
|
||||||
@ -47,11 +51,12 @@ const sineedgedevUserpool = new CognitoUserPool(sineedgedev_poolData);
|
|||||||
* Identity PoolID
|
* Identity PoolID
|
||||||
*/
|
*/
|
||||||
const sineedgeIdentity = "ap-south-1:9a551eab-97cf-4991-b677-2f9bcd058961";//"ap-south-1:9a551eab-97cf-4991-b677-2f9bcd058961";
|
const sineedgeIdentity = "ap-south-1:9a551eab-97cf-4991-b677-2f9bcd058961";//"ap-south-1:9a551eab-97cf-4991-b677-2f9bcd058961";
|
||||||
const lenderIdentity = "ap-south-1:ca22dabc-db59-4af5-9bb8-265f7ec95907";
|
const lenderIdentity = "ap-south-1:ca22dabc-db59-4af5-9bb8-265f7ec95907";
|
||||||
const vendorIdenttiy = "";
|
const vendorIdenttiy = "ap-south-1:5ad3ce43-4260-4273-87b2-e6a377b8e874";
|
||||||
// serviceProvider
|
// serviceProvider
|
||||||
const apiurl = "http://localhost/sineedge/sparqapi/api/";
|
const apiurl = environment.apiEndpoint;
|
||||||
const currentdate = new Date().toJSON().slice(0,19).replace('T',' ');
|
//const apiurl = "http://ssa.sineedge.com/sparqapi/api/";
|
||||||
|
//const apiurl = "http://localhost/sparqapi/api/";
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: "root"
|
providedIn: "root"
|
||||||
@ -59,14 +64,14 @@ const currentdate = new Date().toJSON().slice(0,19).replace('T',' ');
|
|||||||
|
|
||||||
|
|
||||||
export class AwsService {
|
export class AwsService {
|
||||||
public static _REGION = environment.region;
|
//public static _REGION = environment.region;
|
||||||
mySecData: any;
|
mySecData: any;
|
||||||
|
|
||||||
cognitoUser: any;
|
cognitoUser: any;
|
||||||
jwttoken: any;
|
jwttoken: any;
|
||||||
cognitousers: any;
|
cognitousers: any;
|
||||||
localUserId:any = '';
|
localUserId:any = '';
|
||||||
constructor(public http: Http, public RequestOptions: RequestOptions) { }
|
constructor(public http: Http, public RequestOptions: RequestOptions,public shared:CognitoService) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Login Function
|
* Login Function
|
||||||
@ -80,7 +85,7 @@ export class AwsService {
|
|||||||
let attributesData = [];
|
let attributesData = [];
|
||||||
const userData = {
|
const userData = {
|
||||||
Username: authenticationData.Username, // User email id
|
Username: authenticationData.Username, // User email id
|
||||||
Pool: sineedgedevUserpool // user Pool ID
|
Pool: lenderUserPool // user Pool ID
|
||||||
};
|
};
|
||||||
let cognitoUser = new CognitoUser(userData);
|
let cognitoUser = new CognitoUser(userData);
|
||||||
return Observable.create(observer => {
|
return Observable.create(observer => {
|
||||||
@ -127,7 +132,7 @@ export class AwsService {
|
|||||||
////(auth);
|
////(auth);
|
||||||
const userData = {
|
const userData = {
|
||||||
Username: auth.Username,
|
Username: auth.Username,
|
||||||
Pool: sineedgedevUserpool
|
Pool: lenderUserPool
|
||||||
};
|
};
|
||||||
let cognitoUser = new CognitoUser(userData);
|
let cognitoUser = new CognitoUser(userData);
|
||||||
return Observable.create(observe => {
|
return Observable.create(observe => {
|
||||||
@ -143,8 +148,8 @@ export class AwsService {
|
|||||||
//Optional automatic callback
|
//Optional automatic callback
|
||||||
inputVerificationCode: function (data) {
|
inputVerificationCode: function (data) {
|
||||||
//('Code sent to: ' + data);
|
//('Code sent to: ' + data);
|
||||||
var verificationCode = prompt('Please input verification code ', '');
|
var verificationCode = prompt('Enter Verification Code Sent to Mobile ', '');
|
||||||
var newPassword = prompt('Enter new password ', '');
|
var newPassword = prompt('Enter New Password ', '');
|
||||||
cognitoUser.confirmPassword(verificationCode, newPassword, {
|
cognitoUser.confirmPassword(verificationCode, newPassword, {
|
||||||
onSuccess() {
|
onSuccess() {
|
||||||
//('Password confirmed!');
|
//('Password confirmed!');
|
||||||
@ -162,4 +167,597 @@ export class AwsService {
|
|||||||
/**
|
/**
|
||||||
* End of the function
|
* End of the function
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logout function
|
||||||
|
*/
|
||||||
|
logout(){
|
||||||
|
|
||||||
|
return Observable.create(observe=>{
|
||||||
|
this.shared.getCurrentUser().signOut();
|
||||||
|
|
||||||
|
observe.next();
|
||||||
|
|
||||||
|
observe.complete();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config function
|
||||||
|
*/
|
||||||
|
getconfig() {
|
||||||
|
let session:any = this.shared.getAccessToken() || "";
|
||||||
|
let config = "";
|
||||||
|
config += AWS.config.region = "ap-south-1";
|
||||||
|
config += AWS.config.credentials = new AWS.CognitoIdentityCredentials({
|
||||||
|
IdentityPoolId: lenderIdentity, // for sineedge_DEV
|
||||||
|
Logins: {
|
||||||
|
"cognito-idp.ap-south-1.amazonaws.com/ap-south-1_qQ85yQZJO": session
|
||||||
|
.getIdToken()
|
||||||
|
.getJwtToken()
|
||||||
|
}
|
||||||
|
// NOTE: getSession must be called to authenticate user before calling getUserAttributes
|
||||||
|
});
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* admin Disable user
|
||||||
|
* @param userdata
|
||||||
|
* @param awsName
|
||||||
|
*/
|
||||||
|
admindisabelUser(userdata, awsName) {
|
||||||
|
let session:any = this.shared.getAccessToken() || "";
|
||||||
|
this.getconfig();
|
||||||
|
// let config = "";
|
||||||
|
// AWS.config.region = "ap-south-1";//environment.region;
|
||||||
|
// AWS.config.credentials = new AWS.CognitoIdentityCredentials({
|
||||||
|
// IdentityPoolId: sineedgeIdentity, // for sineedge_DEV
|
||||||
|
// Logins: {
|
||||||
|
// "cognito-idp.ap-south-1.amazonaws.com/ap-south-1_qQ85yQZJO": session
|
||||||
|
// .getIdToken()
|
||||||
|
// .getJwtToken()
|
||||||
|
// }
|
||||||
|
// // NOTE: getSession must be called to authenticate user before calling getUserAttributes
|
||||||
|
// });
|
||||||
|
let userGroup = session.idToken.payload["cognito:groups"].filter(
|
||||||
|
usergroup => usergroup == "ADMIN"
|
||||||
|
)[0];
|
||||||
|
//cognitosdata = 7;
|
||||||
|
let params: any;
|
||||||
|
if (userGroup == 'ADMIN') {
|
||||||
|
if (userdata.fk_entity_type_id == 1) {
|
||||||
|
params = {
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId, /* required */
|
||||||
|
Username: awsName /* required */
|
||||||
|
};
|
||||||
|
} else if (userdata.fk_entity_type_id == 2) {
|
||||||
|
params = {
|
||||||
|
UserPoolId: lender_poolData.UserPoolId, /* required */
|
||||||
|
Username: awsName /* required */
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return Observable.create(observe => {
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
cognitoidentityserviceprovider.adminDisableUser(params, function (err, data) {
|
||||||
|
if (err) console.log(err, err.stack); // an error occurred
|
||||||
|
observe.next("0"); // successful response
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Admin enable user
|
||||||
|
* @param userdata
|
||||||
|
* @param awsName
|
||||||
|
*/
|
||||||
|
adminenableUser(userdata, awsName) {
|
||||||
|
let session:any = this.shared.getAccessToken() || "";
|
||||||
|
// this.getconfig();
|
||||||
|
let config = "";
|
||||||
|
AWS.config.region = "ap-south-1";
|
||||||
|
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
|
||||||
|
IdentityPoolId: lenderIdentity, // for lender_DEV
|
||||||
|
Logins: {
|
||||||
|
"cognito-idp.ap-south-1.amazonaws.com/ap-south-1_qQ85yQZJO": session
|
||||||
|
.getIdToken()
|
||||||
|
.getJwtToken()
|
||||||
|
}
|
||||||
|
// NOTE: getSession must be called to authenticate user before calling getUserAttributes
|
||||||
|
});
|
||||||
|
let userGroup = session.idToken.payload["cognito:groups"].filter(
|
||||||
|
usergroup => usergroup == "ADMIN"
|
||||||
|
)[0];
|
||||||
|
//cognitosdata = 7;
|
||||||
|
let params: any;
|
||||||
|
if (userGroup == 'ADMIN') {
|
||||||
|
|
||||||
|
if (userdata.fk_entity_type_id == 1) {
|
||||||
|
params = {
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId, /* required */
|
||||||
|
Username: awsName /* required */
|
||||||
|
};
|
||||||
|
} else if (userdata.fk_entity_type_id == 2) {
|
||||||
|
params = {
|
||||||
|
UserPoolId: lender_poolData.UserPoolId, /* required */
|
||||||
|
Username: awsName /* required */
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return Observable.create(observe => {
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
cognitoidentityserviceprovider.adminEnableUser(params, function (err, data) {
|
||||||
|
if (err) console.log(err, err.stack); // an error occurred
|
||||||
|
observe.next("1"); // successful response
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
register(userData) {
|
||||||
|
let session:any = this.shared.getAccessToken() || "";
|
||||||
|
|
||||||
|
this.getconfig();
|
||||||
|
let registeredData: any = "";
|
||||||
|
let params: any;
|
||||||
|
let userGroup = session.idToken.payload["cognito:groups"].filter(
|
||||||
|
usergroup => usergroup == "ADMIN"
|
||||||
|
)[0];
|
||||||
|
// (userGroup);
|
||||||
|
if (userGroup == "ADMIN") {
|
||||||
|
if (userData.type.entity_type_id == 1) {
|
||||||
|
params = {
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId /* required */,
|
||||||
|
Username: userData.email /* required */,
|
||||||
|
DesiredDeliveryMediums: [
|
||||||
|
"EMAIL"
|
||||||
|
/* more items */
|
||||||
|
],
|
||||||
|
// ForceAliasCreation: true || false,
|
||||||
|
MessageAction: "SUPPRESS",
|
||||||
|
TemporaryPassword: "temp1234",
|
||||||
|
UserAttributes: [
|
||||||
|
{
|
||||||
|
Name: "email" /* required */,
|
||||||
|
Value: userData.email
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "phone_number" /* required */,
|
||||||
|
Value: "+91" + userData.phone
|
||||||
|
},{
|
||||||
|
Name: "custom:role_id" /* required */,
|
||||||
|
Value: userData.role.role_id
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
]
|
||||||
|
};
|
||||||
|
} else if (userData.type.entity_type_id == 2) {
|
||||||
|
params = {
|
||||||
|
UserPoolId: lender_poolData.UserPoolId /* required */,
|
||||||
|
Username: userData.email /* required */,
|
||||||
|
DesiredDeliveryMediums: [
|
||||||
|
"EMAIL"
|
||||||
|
/* more items */
|
||||||
|
],
|
||||||
|
// ForceAliasCreation: true || false,
|
||||||
|
MessageAction: "SUPPRESS",
|
||||||
|
TemporaryPassword: "temp1234",
|
||||||
|
UserAttributes: [
|
||||||
|
{
|
||||||
|
Name: "email" /* required */,
|
||||||
|
Value: userData.email
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "phone_number" /* required */,
|
||||||
|
Value: "+91" + userData.phone
|
||||||
|
},{
|
||||||
|
Name: "custom:role_id" /* required */,
|
||||||
|
Value: userData.role.role_id
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}else if(userData.type.entity_type_id == 3){
|
||||||
|
params = {
|
||||||
|
UserPoolId: vendor_poolData.UserPoolId /* required */,
|
||||||
|
Username: userData.email /* required */,
|
||||||
|
DesiredDeliveryMediums: [
|
||||||
|
"EMAIL"
|
||||||
|
/* more items */
|
||||||
|
],
|
||||||
|
// ForceAliasCreation: true || false,
|
||||||
|
MessageAction: "SUPPRESS",
|
||||||
|
TemporaryPassword: "temp1234",
|
||||||
|
UserAttributes: [
|
||||||
|
{
|
||||||
|
Name: "email" /* required */,
|
||||||
|
Value: userData.email
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "phone_number" /* required */,
|
||||||
|
Value: "+91" + userData.phone
|
||||||
|
},{
|
||||||
|
Name: "custom:role_id" /* required */,
|
||||||
|
Value: userData.role.role_id
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return Observable.create(observe => {
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
|
||||||
|
cognitoidentityserviceprovider.adminCreateUser(params, (
|
||||||
|
err,
|
||||||
|
data
|
||||||
|
) => {
|
||||||
|
if (err) { alert(err.message); }
|
||||||
|
// an error occurred
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
observe.next(data);
|
||||||
|
|
||||||
|
|
||||||
|
// successful response
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
return alert('Admin Only create user');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UserGroup(cognitodata, userData) {
|
||||||
|
//console.log(cognitodata);
|
||||||
|
this.getconfig();
|
||||||
|
//console.log(userData);
|
||||||
|
//let cognitodata = "539bfefa-ae42-4bee-bf79-4b15d1a2af7f";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let params: any;
|
||||||
|
|
||||||
|
if(userData.userid === undefined){
|
||||||
|
params = {
|
||||||
|
GroupName: "ADMIN" /* required */,
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId,//"ap-south-1_y7dt3iEaX" /* required */,
|
||||||
|
Username: cognitodata.User.Username //'539bfefa-ae42-4bee-bf79-4b15d1a2af7f' /* required */
|
||||||
|
};
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
params = {
|
||||||
|
GroupName: "ADMIN" /* required */,
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId,//"ap-south-1_y7dt3iEaX" /* required */,
|
||||||
|
Username: userData.aws_name //'539bfefa-ae42-4bee-bf79-4b15d1a2af7f' /* required */
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//console.log(params);
|
||||||
|
return Observable.create(observe=>{
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
|
||||||
|
cognitoidentityserviceprovider.adminAddUserToGroup(params, function (
|
||||||
|
err,
|
||||||
|
data
|
||||||
|
) {
|
||||||
|
if (err) {
|
||||||
|
alert(err.message);
|
||||||
|
}//(err, err.stack);
|
||||||
|
// an error occurred
|
||||||
|
else {//(data);
|
||||||
|
|
||||||
|
observe.next(cognitodata);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* admin User update
|
||||||
|
* @param username,clientid params
|
||||||
|
**/
|
||||||
|
adminUpdateuser(user, cognitosdata) {
|
||||||
|
|
||||||
|
console.log('inside - updateuser');
|
||||||
|
let session:any = this.shared.getAccessToken() || "";
|
||||||
|
this.getconfig();
|
||||||
|
|
||||||
|
//let cognitodata = "539bfefa-ae42-4bee-bf79-4b15d1a2af7f";
|
||||||
|
let userGroup = session.idToken.payload["cognito:groups"].filter(
|
||||||
|
usergroup => usergroup == "ADMIN"
|
||||||
|
)[0];
|
||||||
|
//cognitosdata = 7;
|
||||||
|
let params:any;
|
||||||
|
if (userGroup == 'ADMIN') {
|
||||||
|
if(user.type.entity_type_id ==1){
|
||||||
|
params = {
|
||||||
|
UserAttributes: [ /* required */
|
||||||
|
{
|
||||||
|
Name: 'locale', /* required */
|
||||||
|
Value: cognitosdata.toString()
|
||||||
|
},{
|
||||||
|
Name:"email_verified",
|
||||||
|
Value:"true"
|
||||||
|
},{
|
||||||
|
Name:"phone_number_verified",
|
||||||
|
Value:"true"
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
],
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId, /* required */
|
||||||
|
Username: user.email /* required */
|
||||||
|
};
|
||||||
|
}else if(user.type.entity_type_id ==2){
|
||||||
|
params = {
|
||||||
|
UserAttributes: [ /* required */
|
||||||
|
{
|
||||||
|
Name: 'locale', /* required */
|
||||||
|
Value: cognitosdata.toString()
|
||||||
|
},{
|
||||||
|
Name:"email_verified",
|
||||||
|
Value:"true"
|
||||||
|
},{
|
||||||
|
Name:"phone_number_verified",
|
||||||
|
Value:"true"
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
],
|
||||||
|
UserPoolId: lender_poolData.UserPoolId, /* required */
|
||||||
|
Username: user.email /* required */
|
||||||
|
};
|
||||||
|
}else if(user.type.entity_type_id ==3){
|
||||||
|
params = {
|
||||||
|
UserAttributes: [ /* required */
|
||||||
|
{
|
||||||
|
Name: 'locale', /* required */
|
||||||
|
Value: cognitosdata.toString()
|
||||||
|
},{
|
||||||
|
Name:"email_verified",
|
||||||
|
Value:"true"
|
||||||
|
},{
|
||||||
|
Name:"phone_number_verified",
|
||||||
|
Value:"true"
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
],
|
||||||
|
UserPoolId: vendor_poolData.UserPoolId, /* required */
|
||||||
|
Username: user.email /* required */
|
||||||
|
};
|
||||||
|
}
|
||||||
|
//console.log(params);
|
||||||
|
return Observable.create(observe => {
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
|
||||||
|
cognitoidentityserviceprovider.adminUpdateUserAttributes(params, function (err, data) {
|
||||||
|
if (err) //(err, err.stack);
|
||||||
|
//console.log(data); // an error occurred
|
||||||
|
observe.next(data); // successful response
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
getlocale(){
|
||||||
|
let session:any = this.shared.getAccessToken() || "";
|
||||||
|
return session.idToken.payload.locale;
|
||||||
|
}
|
||||||
|
|
||||||
|
adminchangeData(userData,changeusers){
|
||||||
|
console.log('inside - changeData');
|
||||||
|
let session:any = this.shared.getAccessToken() || "";
|
||||||
|
this.getconfig();
|
||||||
|
let registeredData: any = "";
|
||||||
|
let params:any='';
|
||||||
|
let userGroup = session.idToken.payload["cognito:groups"].filter(
|
||||||
|
usergroup => usergroup == "ADMIN"
|
||||||
|
)[0];
|
||||||
|
// (userGroup);
|
||||||
|
if (userGroup == "ADMIN") {
|
||||||
|
if (userData.fk_entity_type_id == 1) {
|
||||||
|
params = {
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId /* required */,
|
||||||
|
Username: userData.aws_name,//userData.email /* required */,
|
||||||
|
|
||||||
|
// ForceAliasCreation: true || false,
|
||||||
|
|
||||||
|
UserAttributes: [
|
||||||
|
{
|
||||||
|
Name: "email" /* required */,
|
||||||
|
Value: changeusers.email,//userData.email
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "phone_number" /* required */,
|
||||||
|
Value: "+91"+ changeusers.phone
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "custom:role_id" /* required */,
|
||||||
|
Value: userData.user_role
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
]
|
||||||
|
};
|
||||||
|
} else if (userData.fk_entity_type_id == 2) {
|
||||||
|
params = {
|
||||||
|
UserPoolId: lender_poolData.UserPoolId /* required */,
|
||||||
|
Username: userData.aws_name /* required */,
|
||||||
|
|
||||||
|
UserAttributes: [
|
||||||
|
{
|
||||||
|
Name: "email" /* required */,
|
||||||
|
Value: changeusers.email
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "phone_number" /* required */,
|
||||||
|
Value: "+91" + changeusers.phone
|
||||||
|
},{
|
||||||
|
Name: "custom:role_id" /* required */,
|
||||||
|
Value: userData.user_role
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}else if(userData.fk_entity_type_id == 3)
|
||||||
|
{
|
||||||
|
params = {
|
||||||
|
UserPoolId: vendor_poolData.UserPoolId /* required */,
|
||||||
|
Username: userData.aws_name /* required */,
|
||||||
|
|
||||||
|
UserAttributes: [
|
||||||
|
{
|
||||||
|
Name: "email" /* required */,
|
||||||
|
Value: changeusers.email
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "phone_number" /* required */,
|
||||||
|
Value: "+91" + changeusers.phone
|
||||||
|
},{
|
||||||
|
Name: "custom:role_id" /* required */,
|
||||||
|
Value: userData.user_role
|
||||||
|
}
|
||||||
|
/* more items */
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return Observable.create(observe=>{
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
cognitoidentityserviceprovider.adminUpdateUserAttributes(params, function(err, data) {
|
||||||
|
if (err) console.log(err, err.stack); // an error occurred
|
||||||
|
observe.next(data); // successful response
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// adminremoveGroup(roles,users){
|
||||||
|
// console.log(roles);
|
||||||
|
// console.log(users);
|
||||||
|
// if(users !==undefined){
|
||||||
|
|
||||||
|
// let session:any = this.shared.getAccessToken() ||"";
|
||||||
|
// this.getconfig();
|
||||||
|
// let params:any;
|
||||||
|
// if(users.fk_entity_type_id ==1){
|
||||||
|
// params = {
|
||||||
|
// GroupName: roles.GroupName, /* required */
|
||||||
|
// UserPoolId: sineedgedev_poolData.UserPoolId, /* required */
|
||||||
|
// Username: users.aws_name//'2c64866e-e96f-453b-903f-2b6f831688af' /* required */
|
||||||
|
// };
|
||||||
|
// }else if(users.fk_entity_id ==2){
|
||||||
|
// params = {
|
||||||
|
// GroupName: roles.GroupName, /* required */
|
||||||
|
// UserPoolId: lender_poolData.UserPoolId, /* required */
|
||||||
|
// Username: users.aws_name//'2c64866e-e96f-453b-903f-2b6f831688af' /* required */
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
// let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
// cognitoidentityserviceprovider.adminRemoveUserFromGroup(params, function(err, data) {
|
||||||
|
// if (err) console.log(err, err.stack); // an error occurred
|
||||||
|
// else console.log(data); // successful response
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
adminresetpassword(awsuser){
|
||||||
|
this.getconfig();
|
||||||
|
let params:any;
|
||||||
|
if(awsuser.fk_entity_id ==1){
|
||||||
|
params= {
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId, /* required */
|
||||||
|
Username: awsuser.email /* required */
|
||||||
|
};
|
||||||
|
}else if(awsuser.fk_entity_id ==2){
|
||||||
|
params= {
|
||||||
|
UserPoolId: lender_poolData.UserPoolId, /* required */
|
||||||
|
Username: awsuser.email /* required */
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return Observable.create(observe=>{
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
cognitoidentityserviceprovider.changePassword(params, function(err, data) {
|
||||||
|
if (err) console.log(err, err.stack); // an error occurred
|
||||||
|
else {
|
||||||
|
observe.next(data);
|
||||||
|
} // successful response
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
changepassword(passData) {
|
||||||
|
let session:any = this.shared.getAccessToken() || "";
|
||||||
|
this.getconfig();
|
||||||
|
var params = {
|
||||||
|
AccessToken: session.accessToken.jwtToken, /* required */
|
||||||
|
PreviousPassword: passData.oldPassword, /* required */
|
||||||
|
ProposedPassword: passData.newPassword /* required */
|
||||||
|
};
|
||||||
|
return Observable.create(observe => {
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
cognitoidentityserviceprovider.changePassword(params, function (err, data) {
|
||||||
|
if (err) console.log(err, err.stack); // an error occurred
|
||||||
|
observe.next(data);
|
||||||
|
// successful response
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
admindelete(aws){
|
||||||
|
this.getconfig();
|
||||||
|
let params:any;
|
||||||
|
if(aws.fk_entity_id ==1){
|
||||||
|
params= {
|
||||||
|
UserPoolId: sineedgedev_poolData.UserPoolId, /* required */
|
||||||
|
Username: aws.email /* required */
|
||||||
|
};
|
||||||
|
}else if(aws.fk_entity_id ==2){
|
||||||
|
params= {
|
||||||
|
UserPoolId: lender_poolData.UserPoolId, /* required */
|
||||||
|
Username: aws.email /* required */
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return Observable.create(observe=>{
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
cognitoidentityserviceprovider.adminDeleteUser(params, function(err, data) {
|
||||||
|
if (err) console.log(err, err.stack); // an error occurred
|
||||||
|
else {
|
||||||
|
observe.next(data);
|
||||||
|
} // successful response
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
adminlistgroup(enitiy){
|
||||||
|
// console.log(enitiy);
|
||||||
|
this.getconfig();
|
||||||
|
let params:any;
|
||||||
|
if(enitiy ==1){
|
||||||
|
params = {
|
||||||
|
UserPoolId:sineedgedev_poolData.UserPoolId,
|
||||||
|
}
|
||||||
|
}else if(enitiy ==2){
|
||||||
|
params = {
|
||||||
|
UserPoolId:lender_poolData.UserPoolId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//console.log(enitiy);
|
||||||
|
return Observable.create(observe=>{
|
||||||
|
|
||||||
|
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
|
||||||
|
cognitoidentityserviceprovider.listGroups(params,function(err,data){
|
||||||
|
if(err) alert(err.stack);
|
||||||
|
else {observe.next(data.Groups);}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
128
ng6-seed/src/app/AwsService/cognito.service.ts
Normal file → Executable file
128
ng6-seed/src/app/AwsService/cognito.service.ts
Normal file → Executable file
@ -1,5 +1,6 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import * as AWS from "aws-sdk";
|
import * as AWS from "aws-sdk";
|
||||||
|
import { CanActivateChild, Router } from '@angular/router';
|
||||||
import {
|
import {
|
||||||
AuthenticationDetails,
|
AuthenticationDetails,
|
||||||
CognitoUserPool,
|
CognitoUserPool,
|
||||||
@ -10,6 +11,39 @@ import {
|
|||||||
CognitoUserSession
|
CognitoUserSession
|
||||||
} from "amazon-cognito-identity-js";
|
} from "amazon-cognito-identity-js";
|
||||||
import { environment } from '../../environments/environment';
|
import { environment } from '../../environments/environment';
|
||||||
|
|
||||||
|
import { BehaviorSubject,Observable,of } from 'rxjs';
|
||||||
|
const sineedge_poolData = {
|
||||||
|
UserPoolId: "ap-south-1_y7dt3iEaX", //ap-south-1_qQ85yQZJO UserName :SPARQ_SINEEDGE_DEV
|
||||||
|
ClientId: "291qt4smn5pql6o8cc2hi201lj" // ClientName: SINEEDGE_DEV_WEB
|
||||||
|
};
|
||||||
|
const sineedgedev_poolData = {
|
||||||
|
UserPoolId: "ap-south-1_qQ85yQZJO", // UserName :SPARQ_SINEEDGE_DEV
|
||||||
|
ClientId: "67b4fnbuols5upms5to8bvqddh" // ClientName: SINEEDGE_DEV_WEB
|
||||||
|
}
|
||||||
|
const lender_poolData = {
|
||||||
|
UserPoolId: "ap-south-1_hFiGyr1Gw", // Username :SPARQ_LENDER_DEV
|
||||||
|
ClientId: "vkotfqgqorgjh3fvp1r26hslv" // ClientName:LENDER_DEV_WEB
|
||||||
|
};
|
||||||
|
const vendor_poolData = {
|
||||||
|
UserPoolId: "",
|
||||||
|
ClientId: ""
|
||||||
|
}
|
||||||
|
const sineedgeUserPool = new CognitoUserPool(sineedge_poolData);
|
||||||
|
const lenderUserPool = new CognitoUserPool(lender_poolData);
|
||||||
|
const sineedgedevUserpool = new CognitoUserPool(sineedgedev_poolData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identity PoolID
|
||||||
|
*/
|
||||||
|
const sineedgeIdentity = "ap-south-1:9a551eab-97cf-4991-b677-2f9bcd058961";//"ap-south-1:9a551eab-97cf-4991-b677-2f9bcd058961";
|
||||||
|
const lenderIdentity = "ap-south-1:ca22dabc-db59-4af5-9bb8-265f7ec95907";
|
||||||
|
const vendorIdenttiy = "";
|
||||||
|
// serviceProvider
|
||||||
|
//const apiurl = "http://ssa.sineedge.com/sparqapi/api/";
|
||||||
|
const apiurl = environment.apiEndpoint;
|
||||||
|
// const apiurl = "http://localhost/sparqapi/api/";
|
||||||
|
|
||||||
export interface Callback {
|
export interface Callback {
|
||||||
callback(): void;
|
callback(): void;
|
||||||
|
|
||||||
@ -19,33 +53,53 @@ export interface Callback {
|
|||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class CognitoService {
|
export class CognitoService implements CanActivateChild {
|
||||||
public static _REGION = environment.region;
|
public loggedIn :boolean = false;
|
||||||
|
// public static _REGION = environment.region;
|
||||||
|
|
||||||
public static _IDENTITY_POOL_ID = environment.identityPoolId;
|
// public static _IDENTITY_POOL_ID = environment.identityPoolId;
|
||||||
public static _USER_POOL_ID = environment.UserPoolId;
|
// public static _USER_POOL_ID = environment.UserPoolId;
|
||||||
public static _CLIENT_ID = environment.ClientId;
|
// public static _CLIENT_ID = environment.ClientId;
|
||||||
|
|
||||||
public static _POOL_DATA: any = {
|
// public static _POOL_DATA: any = {
|
||||||
UserPoolId: CognitoService._USER_POOL_ID,
|
// UserPoolId: CognitoService._USER_POOL_ID,
|
||||||
ClientId: CognitoService._CLIENT_ID
|
// ClientId: CognitoService._CLIENT_ID
|
||||||
};
|
// };
|
||||||
|
get isLoggedIn() {
|
||||||
|
if(lenderUserPool.getCurrentUser() !=null){
|
||||||
|
this.loggedIn = true;
|
||||||
|
}else{
|
||||||
|
this.loggedIn = false;
|
||||||
|
}
|
||||||
|
return this.loggedIn; // {2}
|
||||||
|
}
|
||||||
|
canActivateChild(){
|
||||||
|
if(this.getToken()){
|
||||||
|
//alert('session valid')
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
this.route.navigate(['/authentication/login']);
|
||||||
|
//alert('session valid timeout');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public cognitoCreds: AWS.CognitoIdentityCredentials;
|
public cognitoCreds: AWS.CognitoIdentityCredentials;
|
||||||
isloggin:boolean = false;
|
isloggin:boolean = false;
|
||||||
|
|
||||||
|
|
||||||
getUserPool() {
|
// getUserPool() {
|
||||||
if (environment.cognito_idp_endpoint) {
|
// if (environment.cognito_idp_endpoint) {
|
||||||
CognitoService._POOL_DATA.endpoint = environment.cognito_idp_endpoint;
|
// CognitoService.sineedgedev_poolData.endpoint = environment.cognito_idp_endpoint;
|
||||||
}
|
// }
|
||||||
return new CognitoUserPool(CognitoService._POOL_DATA);
|
// return new CognitoUserPool(CognitoService.sineedgedev_poolData);
|
||||||
}
|
// }
|
||||||
|
|
||||||
getCurrentUser() {
|
getCurrentUser() {
|
||||||
return this.getUserPool().getCurrentUser();
|
|
||||||
|
return lenderUserPool.getCurrentUser();
|
||||||
}
|
}
|
||||||
constructor() { }
|
constructor(public route:Router) { }
|
||||||
|
|
||||||
// getAccessToken(callback: Callback): void {
|
// getAccessToken(callback: Callback): void {
|
||||||
// if (callback == null) {
|
// if (callback == null) {
|
||||||
@ -70,20 +124,40 @@ isloggin:boolean = false;
|
|||||||
// callback.callbackWithParam(null);
|
// callback.callbackWithParam(null);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
refresh() {
|
||||||
|
let tokenexp:boolean;
|
||||||
|
this.getCurrentUser().getSession(function (err, session) {
|
||||||
|
if (err) {
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
if (session.isValid()) {
|
||||||
|
tokenexp = session.isValid();
|
||||||
|
of(tokenexp)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
tokenexp = session.isValid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tokenexp;
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
getAccessToken(){
|
getAccessToken(){
|
||||||
|
this.refresh();
|
||||||
let jwttoken = '';
|
let jwttoken = '';
|
||||||
if (this.getCurrentUser() != null) {
|
if (this.getCurrentUser() != null) {
|
||||||
//console.log(JSON.stringify(this.getCurrentUser()));
|
//console.log(JSON.stringify(this.getCurrentUser()));
|
||||||
console.log('76 if');
|
// console.log('76 if');
|
||||||
this.getCurrentUser().getSession(function (err, session) {
|
this.getCurrentUser().getSession(function (err, session) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.log("CognitoUtil: Can't set the credentials:" + err);
|
|
||||||
jwttoken ='';
|
jwttoken ='';
|
||||||
console.log('81 if')
|
// console.log('81 if')
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (session.isValid()) {
|
if (session.isValid()) {
|
||||||
console.log('85 else if');
|
// console.log('85 else if');
|
||||||
jwttoken = session;
|
jwttoken = session;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -92,7 +166,7 @@ getAccessToken(){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log("else");
|
//console.log("else");
|
||||||
|
|
||||||
}
|
}
|
||||||
return jwttoken;
|
return jwttoken;
|
||||||
@ -102,16 +176,16 @@ getToken():boolean {
|
|||||||
let isloggin = false;
|
let isloggin = false;
|
||||||
if (this.getCurrentUser() != null) {
|
if (this.getCurrentUser() != null) {
|
||||||
//console.log(JSON.stringify(this.getCurrentUser()));
|
//console.log(JSON.stringify(this.getCurrentUser()));
|
||||||
console.log('76 if');
|
//console.log('76 if');
|
||||||
this.getCurrentUser().getSession(function (err, session) {
|
this.getCurrentUser().getSession(function (err, session) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.log("CognitoUtil: Can't set the credentials:" + err);
|
// console.log("CognitoUtil: Can't set the credentials:" + err);
|
||||||
isloggin = false;
|
isloggin = false;
|
||||||
console.log('81 if')
|
//console.log('81 if')
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (session.isValid()) {
|
if (session.isValid()) {
|
||||||
console.log('85 else if');
|
// console.log('85 else if');
|
||||||
isloggin = true;
|
isloggin = true;
|
||||||
} else {
|
} else {
|
||||||
isloggin = false;
|
isloggin = false;
|
||||||
@ -120,7 +194,7 @@ getToken():boolean {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log("else");
|
// console.log("else");
|
||||||
isloggin = false;
|
isloggin = false;
|
||||||
}
|
}
|
||||||
return isloggin;
|
return isloggin;
|
||||||
|
|||||||
92
ng6-seed/src/app/_guard/auth.guard.ts
Normal file → Executable file
92
ng6-seed/src/app/_guard/auth.guard.ts
Normal file → Executable file
@ -1,54 +1,48 @@
|
|||||||
// import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
// import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild } from '@angular/router';
|
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild } from '@angular/router';
|
||||||
// import { Observable , of } from 'rxjs';
|
import { Observable , of } from 'rxjs';
|
||||||
|
import { CognitoService } from '../AwsService/cognito.service';
|
||||||
|
@Injectable()
|
||||||
|
export class AuthGuard implements CanActivate, CanActivateChild {
|
||||||
|
|
||||||
// @Injectable()
|
constructor(private router: Router,public shared:CognitoService) { }
|
||||||
// export class AuthGuard implements CanActivate, CanActivateChild {
|
|
||||||
|
|
||||||
// constructor(private router: Router) { }
|
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
||||||
|
if (this.shared.getToken()) {
|
||||||
|
alert("if");
|
||||||
|
// this.router.navigate(['']);
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
alert("else");
|
||||||
|
this.router.navigate(['/login']);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
|
||||||
// if (localStorage.getItem('token') != null) {
|
|
||||||
// // this.router.navigate(['']);
|
if (this.shared.getToken()) {
|
||||||
// return true
|
// alert("if");
|
||||||
// } else {
|
|
||||||
// this.router.navigate(['/login']);
|
return true;
|
||||||
// return false;
|
} else {
|
||||||
// }
|
// alert("else");
|
||||||
// }
|
setTimeout(() => {
|
||||||
|
this.router.navigate(['authentication/login']);
|
||||||
|
return false;
|
||||||
|
},1000);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
|
// public getToken(): string {
|
||||||
// if (this.loginService.loggedIn()) {
|
// return localStorage.getItem('token');
|
||||||
// let roles = route.data["role"] as Array<string>;
|
// }
|
||||||
// console.log("dataRole: " +roles);
|
|
||||||
// if(roles.length > -1){
|
|
||||||
// var match = this.loginService.roleMatch(roles);
|
|
||||||
// if(match){
|
|
||||||
// // this.router.navigate(['./dashboard']);
|
|
||||||
// return this.loginService.loggedIn()
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// this.router.navigate(['./404']);
|
|
||||||
// return this.loginService.loggedIn();
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// this.router.navigate(['/login']);
|
|
||||||
// return this.loginService.loggedIn();
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// this.router.navigate(['/login']);
|
|
||||||
// return this.loginService.loggedIn();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public getToken(): string {
|
// public logOut() {
|
||||||
// return localStorage.getItem('token');
|
// localStorage.clear();
|
||||||
// }
|
// if(localStorage.getItem('token') === null){
|
||||||
|
// this.router.navigate(['/login']);
|
||||||
// public logOut() {
|
// }
|
||||||
// localStorage.clear();
|
// }
|
||||||
// if(localStorage.getItem('token') === null){
|
}
|
||||||
// this.router.navigate(['/login']);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
7
ng6-seed/src/app/_guard/token.interceptor.ts
Normal file → Executable file
7
ng6-seed/src/app/_guard/token.interceptor.ts
Normal file → Executable file
@ -14,6 +14,7 @@ import { catchError, map, tap } from 'rxjs/operators';
|
|||||||
import { HttpErrorResponse } from "@angular/common/http";
|
import { HttpErrorResponse } from "@angular/common/http";
|
||||||
|
|
||||||
import { CognitoService } from '../AwsService/cognito.service';
|
import { CognitoService } from '../AwsService/cognito.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TokenInterceptor implements HttpInterceptor{
|
export class TokenInterceptor implements HttpInterceptor{
|
||||||
constructor( private router: Router,public shared:CognitoService) {}
|
constructor( private router: Router,public shared:CognitoService) {}
|
||||||
@ -24,7 +25,7 @@ export class TokenInterceptor implements HttpInterceptor{
|
|||||||
// }
|
// }
|
||||||
// });
|
// });
|
||||||
let token:any = this.shared.getAccessToken() ||"";
|
let token:any = this.shared.getAccessToken() ||"";
|
||||||
console.log(token);
|
//console.log(token);
|
||||||
let requests = request.clone({
|
let requests = request.clone({
|
||||||
headers:new HttpHeaders({
|
headers:new HttpHeaders({
|
||||||
|
|
||||||
@ -41,9 +42,9 @@ export class TokenInterceptor implements HttpInterceptor{
|
|||||||
return (error: any): Observable<T> => {
|
return (error: any): Observable<T> => {
|
||||||
if(error instanceof HttpErrorResponse){
|
if(error instanceof HttpErrorResponse){
|
||||||
console.error("Error: " + error.status);
|
console.error("Error: " + error.status);
|
||||||
if(error.status == 401 || error.status == 500){
|
if(error.status == 401){
|
||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
this.router.navigate(['/login']);
|
this.router.navigate(['/authentication/login']);
|
||||||
}
|
}
|
||||||
return of(result as T);
|
return of(result as T);
|
||||||
}
|
}
|
||||||
|
|||||||
0
ng6-seed/src/app/app.component.html
Normal file → Executable file
0
ng6-seed/src/app/app.component.html
Normal file → Executable file
0
ng6-seed/src/app/app.component.spec.ts
Normal file → Executable file
0
ng6-seed/src/app/app.component.spec.ts
Normal file → Executable file
2
ng6-seed/src/app/app.component.ts
Normal file → Executable file
2
ng6-seed/src/app/app.component.ts
Normal file → Executable file
@ -12,5 +12,5 @@ export class AppComponent {
|
|||||||
|
|
||||||
const browserLang: string = translate.getBrowserLang();
|
const browserLang: string = translate.getBrowserLang();
|
||||||
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
|
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
25
ng6-seed/src/app/app.module.ts
Normal file → Executable file
25
ng6-seed/src/app/app.module.ts
Normal file → Executable file
@ -6,6 +6,8 @@ import { FormsModule } from '@angular/forms';
|
|||||||
import { HttpModule, Http } from '@angular/http';
|
import { HttpModule, Http } from '@angular/http';
|
||||||
import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS} from '@angular/common/http';
|
import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS} from '@angular/common/http';
|
||||||
|
|
||||||
|
import { LocationStrategy, HashLocationStrategy } from '@angular/common';
|
||||||
|
|
||||||
import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';
|
import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';
|
||||||
import { PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar';
|
import { PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar';
|
||||||
import { PerfectScrollbarConfigInterface } from 'ngx-perfect-scrollbar';
|
import { PerfectScrollbarConfigInterface } from 'ngx-perfect-scrollbar';
|
||||||
@ -28,7 +30,9 @@ import {MatCheckboxModule} from '@angular/material/checkbox';
|
|||||||
import {MatProgressBarModule} from '@angular/material/progress-bar';
|
import {MatProgressBarModule} from '@angular/material/progress-bar';
|
||||||
import {MatSelectModule} from '@angular/material/select';
|
import {MatSelectModule} from '@angular/material/select';
|
||||||
import {MatCardModule} from '@angular/material/card';
|
import {MatCardModule} from '@angular/material/card';
|
||||||
|
import {MatBadgeModule} from '@angular/material/badge';
|
||||||
|
import {ChangePasswordDialog} from './settings/users/user-profile/user-profile.component';
|
||||||
|
import { MatFormFieldModule,MatProgressSpinnerModule } from '@angular/material';
|
||||||
import { AppRoutes } from './app.routing';
|
import { AppRoutes } from './app.routing';
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
import { AdminLayoutComponent } from './layouts/admin/admin-layout.component';
|
import { AdminLayoutComponent } from './layouts/admin/admin-layout.component';
|
||||||
@ -36,6 +40,10 @@ import { AuthLayoutComponent } from './layouts/auth/auth-layout.component';
|
|||||||
import { SharedModule } from './shared/shared.module';
|
import { SharedModule } from './shared/shared.module';
|
||||||
import { AwsService } from './AwsService/aws.service';
|
import { AwsService } from './AwsService/aws.service';
|
||||||
import { TokenInterceptor } from './_guard/token.interceptor';
|
import { TokenInterceptor } from './_guard/token.interceptor';
|
||||||
|
import { NewPasswordDialog, ForgotPass } from './session/login/login.component';
|
||||||
|
import { AuthGuard } from './_guard/auth.guard';
|
||||||
|
import { RoleMenuItemsPipe } from './layouts/role-menu-items.pipe';
|
||||||
|
import { ResizableModule } from 'angular-resizable-element';
|
||||||
export function HttpLoaderFactory(http: HttpClient) {
|
export function HttpLoaderFactory(http: HttpClient) {
|
||||||
return new TranslateHttpLoader(http);
|
return new TranslateHttpLoader(http);
|
||||||
}
|
}
|
||||||
@ -52,7 +60,8 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
|
|||||||
declarations: [
|
declarations: [
|
||||||
AppComponent,
|
AppComponent,
|
||||||
AdminLayoutComponent,
|
AdminLayoutComponent,
|
||||||
AuthLayoutComponent
|
AuthLayoutComponent,
|
||||||
|
NewPasswordDialog,ForgotPass,ChangePasswordDialog, RoleMenuItemsPipe,
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
@ -70,10 +79,14 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
|
|||||||
MatTabsModule,
|
MatTabsModule,
|
||||||
MatCheckboxModule,
|
MatCheckboxModule,
|
||||||
MatProgressBarModule,
|
MatProgressBarModule,
|
||||||
|
MatProgressSpinnerModule,
|
||||||
MatSelectModule,
|
MatSelectModule,
|
||||||
MatCardModule,
|
MatCardModule,
|
||||||
|
MatBadgeModule,
|
||||||
DemoMaterialModule,
|
DemoMaterialModule,
|
||||||
|
MatFormFieldModule,
|
||||||
HttpClientModule,
|
HttpClientModule,
|
||||||
|
ResizableModule,
|
||||||
TranslateModule.forRoot({
|
TranslateModule.forRoot({
|
||||||
loader: {
|
loader: {
|
||||||
provide: TranslateLoader,
|
provide: TranslateLoader,
|
||||||
@ -84,7 +97,11 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
|
|||||||
FlexLayoutModule,
|
FlexLayoutModule,
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
AwsService,
|
{
|
||||||
|
provide: LocationStrategy,
|
||||||
|
useClass: HashLocationStrategy,
|
||||||
|
},
|
||||||
|
AwsService,AuthGuard,
|
||||||
TranslateService,
|
TranslateService,
|
||||||
// {
|
// {
|
||||||
// provide: PERFECT_SCROLLBAR_CONFIG,
|
// provide: PERFECT_SCROLLBAR_CONFIG,
|
||||||
@ -96,7 +113,7 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
|
|||||||
multi: true
|
multi: true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
entryComponents: [],
|
entryComponents: [NewPasswordDialog,ForgotPass,ChangePasswordDialog],
|
||||||
bootstrap: [AppComponent]
|
bootstrap: [AppComponent]
|
||||||
})
|
})
|
||||||
export class AppModule { }
|
export class AppModule { }
|
||||||
|
|||||||
16
ng6-seed/src/app/app.routing.ts
Normal file → Executable file
16
ng6-seed/src/app/app.routing.ts
Normal file → Executable file
@ -2,7 +2,8 @@ import { Routes } from '@angular/router';
|
|||||||
|
|
||||||
import { AdminLayoutComponent } from './layouts/admin/admin-layout.component';
|
import { AdminLayoutComponent } from './layouts/admin/admin-layout.component';
|
||||||
import { AuthLayoutComponent } from './layouts/auth/auth-layout.component';
|
import { AuthLayoutComponent } from './layouts/auth/auth-layout.component';
|
||||||
|
import { CognitoService} from './AwsService/cognito.service';
|
||||||
|
import { AuthGuard } from './_guard/auth.guard';
|
||||||
export const AppRoutes: Routes = [{
|
export const AppRoutes: Routes = [{
|
||||||
path: '',
|
path: '',
|
||||||
redirectTo: 'home',
|
redirectTo: 'home',
|
||||||
@ -10,6 +11,7 @@ export const AppRoutes: Routes = [{
|
|||||||
}, {
|
}, {
|
||||||
path: '',
|
path: '',
|
||||||
component: AdminLayoutComponent,
|
component: AdminLayoutComponent,
|
||||||
|
canActivateChild:[AuthGuard],
|
||||||
children: [{
|
children: [{
|
||||||
path: 'home',
|
path: 'home',
|
||||||
loadChildren: './dashboard/dashboard.module#DashboardModule'
|
loadChildren: './dashboard/dashboard.module#DashboardModule'
|
||||||
@ -17,6 +19,18 @@ export const AppRoutes: Routes = [{
|
|||||||
path:'setting',
|
path:'setting',
|
||||||
loadChildren:'./settings/settings.module#SettingsModule'
|
loadChildren:'./settings/settings.module#SettingsModule'
|
||||||
}
|
}
|
||||||
|
,{
|
||||||
|
path:'personal_discussion',
|
||||||
|
loadChildren:'./personal-discussion/personal-discussion.module#PersonalDiscussionModule'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'quality_check_discussion',
|
||||||
|
loadChildren:'./quality-check/quality-check.module#QualityCheckModule'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'reports',
|
||||||
|
loadChildren:'./reports/reports.module#ReportsModule'
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}, {
|
}, {
|
||||||
path: '',
|
path: '',
|
||||||
|
|||||||
@ -1,232 +1,270 @@
|
|||||||
export const single = [
|
export const single = [
|
||||||
{
|
{
|
||||||
name: 'Germany',
|
name: 'Germany',
|
||||||
value: 40632
|
value: 40632
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'USA',
|
name: 'USA',
|
||||||
value: 49737
|
value: 49737
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'France',
|
name: 'France',
|
||||||
value: 36745
|
value: 36745
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'UK',
|
name: 'UK',
|
||||||
value: 36240
|
value: 36240
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Spain',
|
name: 'Spain',
|
||||||
value: 33000
|
value: 33000
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Italy',
|
name: 'Italy',
|
||||||
value: 35800
|
value: 35800
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
export const multi = [
|
export const multi = [
|
||||||
{
|
{
|
||||||
name: 'Germany',
|
name: 'Draft',
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: '2017',
|
name: 'Full PD',
|
||||||
value: 71632
|
value: 16
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '2010',
|
name: 'Smart PD',
|
||||||
value: 40632
|
value: 13
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '2000',
|
name: 'Tele PD',
|
||||||
value: 76953
|
value: 12
|
||||||
},
|
},
|
||||||
{
|
]
|
||||||
name: '1990',
|
},
|
||||||
value: 31476
|
{
|
||||||
}
|
name: 'Triggered',
|
||||||
]
|
series: [
|
||||||
},
|
{
|
||||||
{
|
name: 'Full PD',
|
||||||
name: 'USA',
|
value: 16
|
||||||
series: [
|
},
|
||||||
{
|
{
|
||||||
name: '2017',
|
name: 'Smart PD',
|
||||||
value: 82632
|
value: 17
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '2010',
|
name: 'Tele PD',
|
||||||
value: 49737
|
value: 12
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: '2000',
|
]
|
||||||
value: 55986
|
},
|
||||||
},
|
{
|
||||||
{
|
name: 'Allocated',
|
||||||
name: '1990',
|
series: [
|
||||||
value: 37060
|
{
|
||||||
}
|
name: 'Full PD',
|
||||||
]
|
value: 12
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'France',
|
name: 'Smart PD',
|
||||||
series: [
|
value: 32
|
||||||
{
|
},
|
||||||
name: '2017',
|
{
|
||||||
value: 51732
|
name: 'Tele PD',
|
||||||
},
|
value: 20
|
||||||
{
|
},
|
||||||
name: '2010',
|
|
||||||
value: 36745
|
]
|
||||||
},
|
},{
|
||||||
{
|
name: 'Scheduled',
|
||||||
name: '2000',
|
series: [
|
||||||
value: 34774
|
{
|
||||||
},
|
name: 'Full PD',
|
||||||
{
|
value: 15
|
||||||
name: '1990',
|
},
|
||||||
value: 29476
|
{
|
||||||
}
|
name: 'Smart PD',
|
||||||
]
|
value: 24
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'UK',
|
name: 'Tele PD',
|
||||||
series: [
|
value: 14
|
||||||
{
|
}
|
||||||
name: '2017',
|
|
||||||
value: 95652
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '2010',
|
name: 'Inprogress',
|
||||||
value: 36240
|
series: [
|
||||||
},
|
{
|
||||||
{
|
name: 'Full PD',
|
||||||
name: '2000',
|
value: 24
|
||||||
value: 32543
|
},
|
||||||
},
|
{
|
||||||
{
|
name: 'Smart PD',
|
||||||
name: '1990',
|
value: 20
|
||||||
value: 26424
|
},
|
||||||
}
|
{
|
||||||
]
|
name: 'Tele PD',
|
||||||
}
|
value: 23
|
||||||
];
|
},
|
||||||
|
]
|
||||||
export const bubble = [
|
},
|
||||||
{
|
{
|
||||||
name: 'Germany',
|
name: 'Completed',
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: '2009',
|
name: 'Full PD',
|
||||||
x: new Date(2009, 0, 1),
|
value: 14
|
||||||
y: 80.3,
|
},
|
||||||
r: 80.4
|
{
|
||||||
},
|
name: 'Smart PD',
|
||||||
{
|
value: 22
|
||||||
name: '2006',
|
},
|
||||||
x: new Date(2006, 0, 1),
|
{
|
||||||
y: 80.3,
|
name: 'Tele PD',
|
||||||
r: 78
|
value: 14
|
||||||
},
|
},
|
||||||
{
|
]
|
||||||
name: '1995',
|
},
|
||||||
x: new Date(1995, 0, 1),
|
{
|
||||||
y: 77.7,
|
name: 'QC Completed',
|
||||||
r: 58.1
|
series: [
|
||||||
},
|
{
|
||||||
{
|
name: 'Full PD',
|
||||||
name: '1990',
|
value: 22
|
||||||
x: new Date(1990, 0, 1),
|
},
|
||||||
y: 75.4,
|
{
|
||||||
r: 79
|
name: 'Smart PD',
|
||||||
}
|
value: 17
|
||||||
]
|
},
|
||||||
},
|
{
|
||||||
{
|
name: 'Tele PD',
|
||||||
name: 'USA',
|
value: 21
|
||||||
series: [
|
},
|
||||||
{
|
|
||||||
name: '2010',
|
]
|
||||||
x: new Date(2010, 0, 1),
|
}
|
||||||
y: 78.8,
|
];
|
||||||
r: 310
|
|
||||||
},
|
export const bubble = [
|
||||||
{
|
{
|
||||||
name: '2005',
|
name: 'Germany',
|
||||||
x: new Date(2005, 0, 1),
|
series: [
|
||||||
y: 76.9,
|
{
|
||||||
r: 283
|
name: '2009',
|
||||||
},
|
x: new Date(2009, 0, 1),
|
||||||
{
|
y: 80.3,
|
||||||
name: '1996',
|
r: 80.4
|
||||||
x: new Date(1996, 0, 1),
|
},
|
||||||
y: 78.7,
|
{
|
||||||
r: 59.1
|
name: '2006',
|
||||||
},
|
x: new Date(2006, 0, 1),
|
||||||
{
|
y: 80.3,
|
||||||
name: '1990',
|
r: 78
|
||||||
x: new Date(1990, 0, 1),
|
},
|
||||||
y: 75.4,
|
{
|
||||||
r: 253
|
name: '1995',
|
||||||
}
|
x: new Date(1995, 0, 1),
|
||||||
]
|
y: 77.7,
|
||||||
},
|
r: 58.1
|
||||||
{
|
},
|
||||||
name: 'France',
|
{
|
||||||
series: [
|
name: '1990',
|
||||||
{
|
x: new Date(1990, 0, 1),
|
||||||
name: '2008',
|
y: 75.4,
|
||||||
x: new Date(2008, 0, 1),
|
r: 79
|
||||||
y: 81.4,
|
}
|
||||||
r: 63
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '2000',
|
name: 'USA',
|
||||||
x: new Date(2000, 0, 1),
|
series: [
|
||||||
y: 79.1,
|
{
|
||||||
r: 59.4
|
name: '2010',
|
||||||
},
|
x: new Date(2010, 0, 1),
|
||||||
{
|
y: 78.8,
|
||||||
name: '1994',
|
r: 310
|
||||||
x: new Date(1994, 0, 1),
|
},
|
||||||
y: 76.7,
|
{
|
||||||
r: 58.1
|
name: '2005',
|
||||||
},
|
x: new Date(2005, 0, 1),
|
||||||
{
|
y: 76.9,
|
||||||
name: '1990',
|
r: 283
|
||||||
x: new Date(1990, 0, 1),
|
},
|
||||||
y: 77.2,
|
{
|
||||||
r: 56.9
|
name: '1996',
|
||||||
}
|
x: new Date(1996, 0, 1),
|
||||||
]
|
y: 78.7,
|
||||||
},
|
r: 59.1
|
||||||
{
|
},
|
||||||
name: 'UK',
|
{
|
||||||
series: [
|
name: '1990',
|
||||||
{
|
x: new Date(1990, 0, 1),
|
||||||
name: '2007',
|
y: 75.4,
|
||||||
x: new Date(2007, 0, 1),
|
r: 253
|
||||||
y: 80.2,
|
}
|
||||||
r: 62.7
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '2003',
|
name: 'France',
|
||||||
x: new Date(2003, 0, 1),
|
series: [
|
||||||
y: 77.8,
|
{
|
||||||
r: 58.9
|
name: '2008',
|
||||||
},
|
x: new Date(2008, 0, 1),
|
||||||
{
|
y: 81.4,
|
||||||
name: '1995',
|
r: 63
|
||||||
x: new Date(1995, 0, 1),
|
},
|
||||||
y: 78.7,
|
{
|
||||||
r: 59.1
|
name: '2000',
|
||||||
},
|
x: new Date(2000, 0, 1),
|
||||||
{
|
y: 79.1,
|
||||||
name: '1990',
|
r: 59.4
|
||||||
x: new Date(1990, 0, 1),
|
},
|
||||||
y: 75.7,
|
{
|
||||||
r: 57.1
|
name: '1994',
|
||||||
}
|
x: new Date(1994, 0, 1),
|
||||||
]
|
y: 76.7,
|
||||||
}
|
r: 58.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '1990',
|
||||||
|
x: new Date(1990, 0, 1),
|
||||||
|
y: 77.2,
|
||||||
|
r: 56.9
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'UK',
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: '2007',
|
||||||
|
x: new Date(2007, 0, 1),
|
||||||
|
y: 80.2,
|
||||||
|
r: 62.7
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2003',
|
||||||
|
x: new Date(2003, 0, 1),
|
||||||
|
y: 77.8,
|
||||||
|
r: 58.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '1995',
|
||||||
|
x: new Date(1995, 0, 1),
|
||||||
|
y: 78.7,
|
||||||
|
r: 59.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '1990',
|
||||||
|
x: new Date(1990, 0, 1),
|
||||||
|
y: 75.7,
|
||||||
|
r: 57.1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
];
|
];
|
||||||
146
ng6-seed/src/app/dashboard/dashboard.component.html
Normal file → Executable file
146
ng6-seed/src/app/dashboard/dashboard.component.html
Normal file → Executable file
@ -1,5 +1,141 @@
|
|||||||
<div class="pad-wrap">
|
<div class="pad-wrap" [style.minHeight]="'100%'">
|
||||||
<p>
|
<div fxFlex.gt-sm="100" fxFlex.gt-xs="100" fxFlex="100">
|
||||||
Dashboard!
|
<mat-card>
|
||||||
</p>
|
<mat-card-title style="background-color:#e00201;padding: 23px;">TAT Charts</mat-card-title>
|
||||||
</div>
|
<mat-card-subtitle></mat-card-subtitle>
|
||||||
|
<mat-card-content>
|
||||||
|
<div class="w-100 h-300px">
|
||||||
|
<ngx-charts-bar-horizontal-stacked [scheme]="colorScheme" [results]="multi" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [legend]="showLegend" [showXAxisLabel]="showXAxisLabel" [showYAxisLabel]="showYAxisLabel" [xAxisLabel]="yAxisLabel" [yAxisLabel]="xAxisLabel" (select)="onSelect($event)">
|
||||||
|
</ngx-charts-bar-horizontal-stacked>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pad-wrap" [style.minHeight]="'100%'">
|
||||||
|
<div fxFlex.gt-sm="100" fxFlex.gt-xs="100" fxFlex="100">
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-title style="background-color:#e00201;padding: 23px;">
|
||||||
|
PD Report
|
||||||
|
</mat-card-title>
|
||||||
|
<mat-card-content>
|
||||||
|
<div fxFlex="row">
|
||||||
|
<div fxFlex="100">
|
||||||
|
<div fxFlex="50" algin="center">
|
||||||
|
<div fxLayout="row wrap">
|
||||||
|
<mat-card style="background-color:#c1c1c1;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h2>892</h2>
|
||||||
|
<h6 style="margin-top: 0px;">Draft</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#f44336;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>265</h4>
|
||||||
|
<h6 style="margin-top: 0px;">Triggered</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#ffa500;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>452</h4>
|
||||||
|
<h6 style="margin-top: 0px;">Allocated</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#ffeb3b;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>56</h4>
|
||||||
|
<h6 style="margin-top: 0px;">Scheduled</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#3f51b5;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>56</h4>
|
||||||
|
<h6 style="margin-top: 0px;">InProgress</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#3f51b5;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>56</h4>
|
||||||
|
<h6 style="margin-top: 0px;">Completed</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#4caf50;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>56</h4>
|
||||||
|
<h6 style="margin-top: 0px;">QC Completed</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
<!-- </div> -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="50" algin="center">
|
||||||
|
<div fxLayout="row wrap">
|
||||||
|
<!-- <div fxFlex="100"> -->
|
||||||
|
<mat-card style="background-color:#c1c1c1;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h2>892</h2>
|
||||||
|
<h6 style="margin-top: 0px;">Draft</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#f44336;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>265</h4>
|
||||||
|
<h6 style="margin-top: 0px;">Triggered</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#ffa500;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>452</h4>
|
||||||
|
<h6 style="margin-top: 0px;">Allocated</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#ffeb3b;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>56</h4>
|
||||||
|
<h6 style="margin-top: 0px;">Scheduled</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#3f51b5;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>56</h4>
|
||||||
|
<h6 style="margin-top: 0px;">InProgress</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#3f51b5;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>56</h4>
|
||||||
|
<h6 style="margin-top: 0px;">Completed</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card style="background-color:#4caf50;color: #fff;height: 100px;text-align: center;width: 125px;margin: 1px;">
|
||||||
|
<mat-card-content>
|
||||||
|
<h4>56</h4>
|
||||||
|
<h6 style="margin-top: 0px;">QC Completed</h6>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
<!-- </div> -->
|
||||||
|
<div fxFlex.gt-sm="100" fxFlex.gt-xs="100" fxFlex="100">
|
||||||
|
<!-- <mat-card>
|
||||||
|
<mat-card-title>Bar Chart 4</mat-card-title>
|
||||||
|
<mat-card-subtitle></mat-card-subtitle>
|
||||||
|
<hr>
|
||||||
|
<mat-card-content>
|
||||||
|
<div class="w-100 h-300px">
|
||||||
|
<ngx-charts-bar-horizontal-stacked [scheme]="colorScheme" [results]="multi" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [legend]="showLegend" [showXAxisLabel]="showXAxisLabel" [showYAxisLabel]="showYAxisLabel" [xAxisLabel]="yAxisLabel" [yAxisLabel]="xAxisLabel" (select)="onSelect($event)">
|
||||||
|
</ngx-charts-bar-horizontal-stacked>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
575
ng6-seed/src/app/dashboard/dashboard.component.scss
Normal file → Executable file
575
ng6-seed/src/app/dashboard/dashboard.component.scss
Normal file → Executable file
@ -2,538 +2,73 @@ $red: #f5515f;
|
|||||||
$blue: #05abe0;
|
$blue: #05abe0;
|
||||||
$grey: #343434;
|
$grey: #343434;
|
||||||
$p: 12px;
|
$p: 12px;
|
||||||
.profile {
|
|
||||||
position: relative;
|
::ng-deep .ngx-mat-drp-date-input{text-overflow:ellipsis !important;color:#fff !important;}
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
mat-card-title{
|
||||||
background: rgba(white, .25);
|
background-color:#E00201 !important;
|
||||||
border-radius: 2px;
|
color:#fff;
|
||||||
overflow: hidden;
|
|
||||||
box-shadow: 0 0 20px rgba(darken($red, 40%), .2);
|
|
||||||
&.pre-enter {
|
|
||||||
transform-origin: center center;
|
|
||||||
transform: scaleY(0);
|
|
||||||
.avatar {
|
|
||||||
transform-origin: center top;
|
|
||||||
transform: scaleY(0);
|
|
||||||
}
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
a.follow,
|
|
||||||
a.link {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(300px);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.on-enter {
|
|
||||||
animation: scaleYIn 1000ms ease-out forwards;
|
|
||||||
.avatar {
|
|
||||||
animation: scaleYIn-small 750ms ease-out forwards 1000ms;
|
|
||||||
}
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
a.follow,
|
|
||||||
a.link {
|
|
||||||
opacity: 1;
|
|
||||||
animation: slideInUp 1000ms ease-out forwards;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
animation-delay: 1050ms;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
animation-delay: 1100ms;
|
|
||||||
}
|
|
||||||
a.follow {
|
|
||||||
animation-delay: 1250ms;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
&:nth-child(1) {
|
|
||||||
a.link {
|
|
||||||
animation-delay: 1300ms;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:nth-child(2) {
|
|
||||||
a.link {
|
|
||||||
animation-delay: 1350ms;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:nth-child(3) {
|
|
||||||
a.link {
|
|
||||||
animation-delay: 1400ms;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.background {
|
.mat-input-wrapper {
|
||||||
position: absolute;
|
background: #fff;
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
background: white;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar,
|
li
|
||||||
.info {
|
{
|
||||||
width: 100%;
|
display:inline-block;
|
||||||
height: 50%;
|
//float:left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar {
|
|
||||||
background: url('../../assets/images/1.jpg') no-repeat center center / cover;
|
.example-full-width {
|
||||||
clip-path: polygon(0 0, 100% 0, 100% 75%, 0% 100%);
|
width: 95%;
|
||||||
|
}
|
||||||
|
.oval {
|
||||||
|
height: 13px;
|
||||||
|
width: 25px;
|
||||||
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.prof-list {
|
// .ngx-mat-drp-date-input[_ngcontent-c17] {
|
||||||
li {
|
// text-overflow: ellipsis;
|
||||||
display: inline-block;
|
// color: #fff;
|
||||||
list-style: none;
|
// }
|
||||||
}
|
|
||||||
|
//.lengend-list {
|
||||||
|
// list-style-type: none;
|
||||||
|
//margin: 0;
|
||||||
|
// padding: 0;
|
||||||
|
// overflow: hidden;
|
||||||
|
// text-align:justify;
|
||||||
|
//}
|
||||||
|
|
||||||
|
.lengend-element {
|
||||||
|
font-size: 1rem !important;
|
||||||
|
padding-right: 3%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info {
|
.donut-inner{
|
||||||
display: flex;
|
margin-top: -165px;
|
||||||
flex-flow: row wrap;
|
// margin-left: 120px;
|
||||||
align-items: center;
|
|
||||||
align-content: center;
|
|
||||||
justify-content: center;
|
|
||||||
position: relative;
|
|
||||||
text-align: center;
|
|
||||||
h1 {
|
|
||||||
padding: $p $p 0;
|
|
||||||
width: 100%;
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: 800;
|
|
||||||
letter-spacing: 2px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
||||||
h2,
|
|
||||||
a.follow {
|
|
||||||
display: block;
|
|
||||||
|
|
||||||
border-radius: 2px;
|
|
||||||
padding: $p/2;
|
|
||||||
color: white;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 500;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
background: $red;
|
|
||||||
background: linear-gradient(135deg, rgba(#f5825f, 1) 0%, rgba(#f5005f, 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5825f', endColorstr='#f5005f', GradientType=1);
|
|
||||||
}
|
|
||||||
a.follow {
|
|
||||||
margin-left: $p;
|
|
||||||
background: $blue;
|
|
||||||
background: linear-gradient(135deg, rgba(#05c8e0, 1) 0%, rgba(#057fe0, 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#05c8e0', endColorstr='#057fe0', GradientType=1);
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
background: #05c8e0;
|
|
||||||
background: linear-gradient(135deg, rgba(lighten(#05c8e0, 10%), 1) 0%, rgba(lighten(#057fe0, 10%), 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='lighten(#05c8e0, 10%)', endColorstr='lighten(#057fe0, 10%)', GradientType=1);
|
|
||||||
}
|
|
||||||
&:active {
|
|
||||||
background: #057fe0;
|
|
||||||
background: linear-gradient(135deg, rgba(darken(#05c8e0, 5%), 1) 0%, rgba(darken(#057fe0, 5%), 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='darken(#05c8e0, 5%)', endColorstr='darken(#057fe0, 5%)', GradientType=1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
padding: $p/2;
|
|
||||||
width: 100%;
|
|
||||||
li {
|
|
||||||
padding: $p/2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
a.link {
|
|
||||||
display: block;
|
|
||||||
border-radius: 100%;
|
|
||||||
background: $blue;
|
|
||||||
width: 30px;
|
|
||||||
height: 30px;
|
|
||||||
line-height: 30px;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a.link {
|
.donut-inner h5 {
|
||||||
&.portfolio {
|
margin-bottom: 5px;
|
||||||
background: #f5c8bf;
|
margin-top: 0;
|
||||||
background: linear-gradient(135deg, rgba(#f5c8bf, 1) 0%, rgba(#f58dbf, 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5c8bf', endColorstr='#f58dbf', GradientType=1);
|
}
|
||||||
box-shadow: inset 0 0 10px rgba(#f58dbf, .5);
|
.donut-inner span{
|
||||||
&:hover,
|
font-size:1rems;
|
||||||
&:focus {
|
|
||||||
background: lighten(#f5c8bf, 5%);
|
|
||||||
background: linear-gradient(135deg, rgba(lighten(#f5c8bf, 5%), 1) 0%, rgba(lighten(#f58dbf, 5%), 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='lighten(#f5c8bf, 5%)', endColorstr='lighten(#f58dbf, 5%)', GradientType=1);
|
|
||||||
box-shadow: inset 0 0 10px rgba(lighten(#f58dbf, 5%), .5);
|
|
||||||
}
|
|
||||||
&:active {
|
|
||||||
background: darken(#f5c8bf, 5%);
|
|
||||||
background: linear-gradient(135deg, rgba(darken(#f5c8bf, 5%), 1) 0%, rgba(darken(#f58dbf, 5%), 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='darken(#f5c8bf, 5%)', endColorstr='darken(#f58dbf, 5%)', GradientType=1);
|
|
||||||
box-shadow: inset 0 0 10px rgba(darken(#f58dbf, 5%), .5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.codepen {
|
|
||||||
background: #fcd000;
|
|
||||||
background: linear-gradient(135deg, rgba(#fcd000, 1) 0%, rgba(#fc9a00, 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fcd000', endColorstr='#fc9a00', GradientType=1);
|
|
||||||
box-shadow: inset 0 0 10px rgba(#fc9a00, .5);
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
background: lighten(#fcd000, 5%);
|
|
||||||
background: linear-gradient(135deg, rgba(lighten(#fcd000, 5%), 1) 0%, rgba(lighten(#fc9a00, 5%), 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='lighten(#fcd000, 5%)', endColorstr='lighten(#fc9a00, 5%)', GradientType=1);
|
|
||||||
box-shadow: inset 0 0 10px rgba(lighten(#fc9a00, 5%), .5);
|
|
||||||
}
|
|
||||||
&:active {
|
|
||||||
background: darken(#fcd000, 5%);
|
|
||||||
background: linear-gradient(135deg, rgba(darken(#fcd000, 5%), 1) 0%, rgba(darken(#fc9a00, 5%), 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='darken(#fcd000, 5%)', endColorstr='darken(#fc9a00, 5%)', GradientType=1);
|
|
||||||
box-shadow: inset 0 0 10px rgba(darken(#fc9a00, 5%), .5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.github {
|
|
||||||
background: #41adc4;
|
|
||||||
background: linear-gradient(135deg, rgba(#41adc4, 1) 0%, rgba(#4183c4, 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#41adc4', endColorstr='#4183c4', GradientType=1);
|
|
||||||
box-shadow: inset 0 0 10px rgba(#4183c4, .5);
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
background: lighten(#41adc4, 5%);
|
|
||||||
background: linear-gradient(135deg, rgba(lighten(#41adc4, 5%), 1) 0%, rgba(lighten(#4183c4, 5%), 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='lighten(#41adc4, 5%)', endColorstr='lighten(#4183c4, 5%)', GradientType=1);
|
|
||||||
box-shadow: inset 0 0 10px rgba(lighten(#4183c4, 5%), .5);
|
|
||||||
}
|
|
||||||
&:active {
|
|
||||||
background: darken(#41adc4, 5%);
|
|
||||||
background: linear-gradient(135deg, rgba(darken(#41adc4, 5%), 1) 0%, rgba(darken(#4183c4, 5%), 1) 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='darken(#41adc4, 5%)', endColorstr='darken(#4183c4, 5%)', GradientType=1);
|
|
||||||
box-shadow: inset 0 0 10px rgba(darken(#4183c4, 5%), .5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (min-width: 470px) {
|
mat-card-content{
|
||||||
.profile {
|
min-height: 400px;
|
||||||
display: flex;
|
|
||||||
&.pre-enter {
|
|
||||||
transform: scaleX(0);
|
|
||||||
.avatar {
|
|
||||||
transform-origin: left center;
|
|
||||||
transform: scaleX(0);
|
|
||||||
}
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
a.follow,
|
|
||||||
a.link {
|
|
||||||
transform: translateX(300px);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.on-enter {
|
|
||||||
animation-name: scaleXIn;
|
|
||||||
.avatar {
|
|
||||||
animation-name: scaleXIn-small;
|
|
||||||
}
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
a.follow,
|
|
||||||
a.link {
|
|
||||||
animation-name: slideInLeft;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.background {
|
|
||||||
mix-blend-mode: overlay;
|
|
||||||
}
|
|
||||||
.avatar,
|
|
||||||
.info {
|
|
||||||
width: 50%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
.avatar {
|
|
||||||
clip-path: polygon(0 0, 100% 0, 75% 100%, 0% 100%);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
.chart{
|
||||||
@media only screen and (min-width: 470px) and (min-height: 600px) {
|
padding: 0.8rem;
|
||||||
.profile {
|
|
||||||
max-height: 400px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* https://goo.gl/jIUq3E */
|
|
||||||
|
|
||||||
@keyframes scaleXIn {
|
|
||||||
0% {
|
|
||||||
transform: matrix3d(0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
4.7% {
|
|
||||||
transform: matrix3d(0.45, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
9.41% {
|
|
||||||
transform: matrix3d(0.883, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
14.11% {
|
|
||||||
transform: matrix3d(1.141, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
18.72% {
|
|
||||||
transform: matrix3d(1.212, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
24.32% {
|
|
||||||
transform: matrix3d(1.151, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
29.93% {
|
|
||||||
transform: matrix3d(1.048, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
35.54% {
|
|
||||||
transform: matrix3d(0.979, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
41.04% {
|
|
||||||
transform: matrix3d(0.961, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
52.15% {
|
|
||||||
transform: matrix3d(0.991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
63.26% {
|
|
||||||
transform: matrix3d(1.007, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
85.49% {
|
|
||||||
transform: matrix3d(0.999, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* https://goo.gl/auuhcg */
|
|
||||||
|
|
||||||
@keyframes scaleYIn {
|
|
||||||
0% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
4.7% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.45, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
9.41% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.883, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
14.11% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1.141, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
18.72% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1.212, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
24.32% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1.151, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
29.93% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1.048, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
35.54% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.979, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
41.04% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.961, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
52.15% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
63.26% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1.007, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
85.49% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.999, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* https://goo.gl/dNBqrt */
|
|
||||||
|
|
||||||
@keyframes scaleXIn-small {
|
|
||||||
0% {
|
|
||||||
transform: matrix3d(0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
6.31% {
|
|
||||||
transform: matrix3d(0.384, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
12.51% {
|
|
||||||
transform: matrix3d(0.621, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
18.82% {
|
|
||||||
transform: matrix3d(0.771, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
25.03% {
|
|
||||||
transform: matrix3d(0.862, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
37.54% {
|
|
||||||
transform: matrix3d(0.952, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
50.05% {
|
|
||||||
transform: matrix3d(0.984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
75.08% {
|
|
||||||
transform: matrix3d(0.999, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* https://goo.gl/jZL0uj */
|
|
||||||
|
|
||||||
@keyframes scaleYIn-small {
|
|
||||||
0% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
6.31% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.384, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
12.51% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.621, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
18.82% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.771, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
25.03% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.862, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
37.54% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.952, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
50.05% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
75.08% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 0.999, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* https://goo.gl/Ne0Mkr */
|
|
||||||
|
|
||||||
@keyframes slideInLeft {
|
|
||||||
0% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 300, 0, 0, 1);
|
|
||||||
}
|
|
||||||
6.31% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 184.858, 0, 0, 1);
|
|
||||||
}
|
|
||||||
12.51% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 113.68, 0, 0, 1);
|
|
||||||
}
|
|
||||||
18.82% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 68.663, 0, 0, 1);
|
|
||||||
}
|
|
||||||
25.03% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 41.37, 0, 0, 1);
|
|
||||||
}
|
|
||||||
37.54% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.382, 0, 0, 1);
|
|
||||||
}
|
|
||||||
50.05% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.724, 0, 0, 1);
|
|
||||||
}
|
|
||||||
75.08% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.381, 0, 0, 1);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* https://goo.gl/MSqtd5 */
|
|
||||||
|
|
||||||
@keyframes slideInUp {
|
|
||||||
0% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 300, 0, 1);
|
|
||||||
}
|
|
||||||
6.31% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 184.858, 0, 1);
|
|
||||||
}
|
|
||||||
12.51% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 113.68, 0, 1);
|
|
||||||
}
|
|
||||||
18.82% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 68.663, 0, 1);
|
|
||||||
}
|
|
||||||
25.03% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 41.37, 0, 1);
|
|
||||||
}
|
|
||||||
37.54% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 14.382, 0, 1);
|
|
||||||
}
|
|
||||||
50.05% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4.724, 0, 1);
|
|
||||||
}
|
|
||||||
75.08% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.381, 0, 1);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//wheather
|
|
||||||
.card-wheather {
|
|
||||||
height: 220px;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.city {
|
|
||||||
|
|
||||||
font-size: 26px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.date {
|
|
||||||
font-size: 20px;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sun {
|
|
||||||
height: 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grad-blue {
|
|
||||||
background: linear-gradient(58deg, #f44336, #673ab7);
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grad-green {
|
|
||||||
background: linear-gradient(58deg, #009688, #673ab7);
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grad-red {
|
|
||||||
background: linear-gradient(58deg, #f44336, #673ab7);
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.card-wheather{
|
|
||||||
padding: 2rem;
|
|
||||||
}
|
|
||||||
.temp {
|
|
||||||
font-size: 50px;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
}
|
||||||
|
::ng-deep .body-container{
|
||||||
|
padding: 0rem !important;
|
||||||
|
}
|
||||||
35
ng6-seed/src/app/dashboard/dashboard.component.ts
Normal file → Executable file
35
ng6-seed/src/app/dashboard/dashboard.component.ts
Normal file → Executable file
@ -1,12 +1,41 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
|
import { DashboardService } from './dashboard.service';
|
||||||
|
import { single, multi } from './charts.data';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-dashboard',
|
selector: 'app-dashboard',
|
||||||
templateUrl: './dashboard.component.html',
|
templateUrl: './dashboard.component.html',
|
||||||
styleUrls: ['./dashboard.component.scss']
|
styleUrls: ['./dashboard.component.scss']
|
||||||
})
|
})
|
||||||
export class DashboardComponent {
|
|
||||||
constructor() {
|
|
||||||
|
|
||||||
|
export class DashboardComponent {
|
||||||
|
|
||||||
|
dashboardTitle = 'PD Report';
|
||||||
|
|
||||||
|
public single: any[];
|
||||||
|
public multi: any[];
|
||||||
|
|
||||||
|
public showXAxis = true;
|
||||||
|
public showYAxis = true;
|
||||||
|
public gradient = false;
|
||||||
|
public showLegend = false;
|
||||||
|
public showXAxisLabel = true;
|
||||||
|
public xAxisLabel = 'PD Process';
|
||||||
|
public showYAxisLabel = true;
|
||||||
|
public yAxisLabel = 'PD`s';
|
||||||
|
public colorScheme = {
|
||||||
|
domain: ['#ffeb3b', '#ffa500', '#f44336']
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
constructor(private _dashboardService: DashboardService) {
|
||||||
|
Object.assign(this, {single, multi});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngOnInit(){}
|
||||||
|
|
||||||
|
|
||||||
|
public onSelect(event) {
|
||||||
|
console.log(event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
20
ng6-seed/src/app/dashboard/dashboard.module.ts
Normal file → Executable file
20
ng6-seed/src/app/dashboard/dashboard.module.ts
Normal file → Executable file
@ -1,15 +1,20 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { MatIconModule, MatCardModule, MatButtonModule, MatListModule, MatProgressBarModule, MatMenuModule } from '@angular/material';
|
|
||||||
import { FlexLayoutModule } from '@angular/flex-layout';
|
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||||
|
|
||||||
import { ChartsModule } from 'ng2-charts/ng2-charts';
|
import { ChartsModule } from 'ng2-charts/ng2-charts';
|
||||||
import { NgxChartsModule} from '@swimlane/ngx-charts';
|
import { NgxChartsModule} from '@swimlane/ngx-charts';
|
||||||
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
|
|
||||||
|
import { MatIconModule,
|
||||||
|
MatCardModule,
|
||||||
|
MatTabsModule,
|
||||||
|
MatButtonModule} from '@angular/material';
|
||||||
|
|
||||||
import { DashboardComponent } from './dashboard.component';
|
import { DashboardComponent } from './dashboard.component';
|
||||||
import { DashboardRoutes } from './dashboard.routing';
|
import { DashboardRoutes } from './dashboard.routing';
|
||||||
|
|
||||||
|
/** Dashboard Service */
|
||||||
|
import { DashboardService } from './dashboard.service';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
@ -17,15 +22,14 @@ import { DashboardRoutes } from './dashboard.routing';
|
|||||||
RouterModule.forChild(DashboardRoutes),
|
RouterModule.forChild(DashboardRoutes),
|
||||||
MatIconModule,
|
MatIconModule,
|
||||||
MatCardModule,
|
MatCardModule,
|
||||||
|
MatTabsModule,
|
||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
MatListModule,
|
|
||||||
MatProgressBarModule,
|
|
||||||
MatMenuModule,
|
|
||||||
ChartsModule,
|
ChartsModule,
|
||||||
NgxChartsModule,
|
NgxChartsModule,
|
||||||
NgxDatatableModule,
|
MatCardModule,
|
||||||
FlexLayoutModule
|
FlexLayoutModule
|
||||||
],
|
],
|
||||||
|
providers: [ DashboardService ],
|
||||||
declarations: [ DashboardComponent ]
|
declarations: [ DashboardComponent ]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
0
ng6-seed/src/app/dashboard/dashboard.routing.ts
Normal file → Executable file
0
ng6-seed/src/app/dashboard/dashboard.routing.ts
Normal file → Executable file
12
ng6-seed/src/app/dashboard/dashboard.service.spec.ts
Executable file
12
ng6-seed/src/app/dashboard/dashboard.service.spec.ts
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
import { TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { DashboardService } from './dashboard.service';
|
||||||
|
|
||||||
|
describe('DashboardService', () => {
|
||||||
|
beforeEach(() => TestBed.configureTestingModule({}));
|
||||||
|
|
||||||
|
it('should be created', () => {
|
||||||
|
const service: DashboardService = TestBed.get(DashboardService);
|
||||||
|
expect(service).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
24
ng6-seed/src/app/dashboard/dashboard.service.ts
Executable file
24
ng6-seed/src/app/dashboard/dashboard.service.ts
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
/** Common Import Section */
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { 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 DashboardService {
|
||||||
|
|
||||||
|
private apiUrl = environment.apiEndpoint;
|
||||||
|
|
||||||
|
constructor(private _http: HttpClient,
|
||||||
|
private _aws:AwsService) { }
|
||||||
|
|
||||||
|
}
|
||||||
0
ng6-seed/src/app/error/404/error-404-component.html
Normal file → Executable file
0
ng6-seed/src/app/error/404/error-404-component.html
Normal file → Executable file
0
ng6-seed/src/app/error/404/error-404-component.scss
Normal file → Executable file
0
ng6-seed/src/app/error/404/error-404-component.scss
Normal file → Executable file
0
ng6-seed/src/app/error/404/error-404.component.ts
Normal file → Executable file
0
ng6-seed/src/app/error/404/error-404.component.ts
Normal file → Executable file
0
ng6-seed/src/app/error/503/error-503-component.html
Normal file → Executable file
0
ng6-seed/src/app/error/503/error-503-component.html
Normal file → Executable file
0
ng6-seed/src/app/error/503/error-503-component.scss
Normal file → Executable file
0
ng6-seed/src/app/error/503/error-503-component.scss
Normal file → Executable file
0
ng6-seed/src/app/error/503/error-503.component.ts
Normal file → Executable file
0
ng6-seed/src/app/error/503/error-503.component.ts
Normal file → Executable file
0
ng6-seed/src/app/error/error.module.ts
Normal file → Executable file
0
ng6-seed/src/app/error/error.module.ts
Normal file → Executable file
0
ng6-seed/src/app/error/error.routing.ts
Normal file → Executable file
0
ng6-seed/src/app/error/error.routing.ts
Normal file → Executable file
1118
ng6-seed/src/app/layouts/admin/admin-layout.component.html
Normal file → Executable file
1118
ng6-seed/src/app/layouts/admin/admin-layout.component.html
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
107
ng6-seed/src/app/layouts/admin/admin-layout.component.ts
Normal file → Executable file
107
ng6-seed/src/app/layouts/admin/admin-layout.component.ts
Normal file → Executable file
@ -9,13 +9,24 @@ import {TranslateService} from '@ngx-translate/core';
|
|||||||
import PerfectScrollbar from 'perfect-scrollbar';
|
import PerfectScrollbar from 'perfect-scrollbar';
|
||||||
import { PerfectScrollbarConfigInterface,
|
import { PerfectScrollbarConfigInterface,
|
||||||
PerfectScrollbarComponent, PerfectScrollbarDirective } from 'ngx-perfect-scrollbar';
|
PerfectScrollbarComponent, PerfectScrollbarDirective } from 'ngx-perfect-scrollbar';
|
||||||
|
import { UserService } from '../../settings/service/user.service';
|
||||||
|
import { DashboardService } from '../../dashboard/dashboard.service';
|
||||||
|
import { AwsService } from '../../AwsService/aws.service';
|
||||||
|
import { RoleMenuItemsPipe } from './../role-menu-items.pipe';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-layout',
|
selector: 'app-layout',
|
||||||
templateUrl: './admin-layout.component.html'
|
templateUrl: './admin-layout.component.html',
|
||||||
|
providers: [RoleMenuItemsPipe],
|
||||||
})
|
})
|
||||||
|
|
||||||
export class AdminLayoutComponent implements OnInit, OnDestroy {
|
export class AdminLayoutComponent implements OnInit, OnDestroy {
|
||||||
|
|
||||||
|
profileurl: any;;
|
||||||
|
userDep: string;
|
||||||
|
fullName: any;
|
||||||
|
roleName:any;
|
||||||
|
currentUser: any;
|
||||||
private _router: Subscription;
|
private _router: Subscription;
|
||||||
|
|
||||||
today: number = Date.now();
|
today: number = Date.now();
|
||||||
@ -28,22 +39,80 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
|
|||||||
sidebarBg: boolean = true;
|
sidebarBg: boolean = true;
|
||||||
currentLang = 'en';
|
currentLang = 'en';
|
||||||
layoutDir = 'ltr';
|
layoutDir = 'ltr';
|
||||||
|
menuLayout : any = 'top-menu';
|
||||||
menuLayout : any = 'vertical-menu';
|
|
||||||
selectedSidebarImage : any = 'bg-1';
|
selectedSidebarImage : any = 'bg-1';
|
||||||
selectedSidebarColor : any = 'sidebar-default';
|
selectedSidebarColor : any = 'sidebar-red';
|
||||||
selectedHeaderColor : any = 'header-default';
|
selectedHeaderColor : any = 'header-default';
|
||||||
collapsedClass : any = 'side-panel-opened';
|
collapsedClass : any = 'side-panel-opened';
|
||||||
|
|
||||||
@ViewChild('sidemenu') sidemenu;
|
@ViewChild('sidemenu') sidemenu;
|
||||||
public config: PerfectScrollbarConfigInterface = {};
|
public config: PerfectScrollbarConfigInterface = {};
|
||||||
|
|
||||||
constructor(private router: Router, public menuItems: MenuItems, public horizontalMenuItems : HorizontalMenuItems, public translate: TranslateService ) {
|
|
||||||
|
alertMsgTriggerType : any[];
|
||||||
|
alertMsgAllocateType : any[];
|
||||||
|
alertCount: any;
|
||||||
|
userRoleType: String;
|
||||||
|
constructor(private router: Router, public menuItems: MenuItems, public horizontalMenuItems : HorizontalMenuItems, public translate: TranslateService,public aws:AwsService,public users:UserService,private _dashboardService: DashboardService) {
|
||||||
const browserLang: string = translate.getBrowserLang();
|
const browserLang: string = translate.getBrowserLang();
|
||||||
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
|
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
|
||||||
|
this.users.getroles().subscribe(res=>{
|
||||||
|
this.currentUser = res;
|
||||||
|
if(this.currentUser.dataStatus == true){
|
||||||
|
|
||||||
|
this.currentUser = this.currentUser.records[0];
|
||||||
|
|
||||||
|
this.fullName = this.currentUser.user_first_name +' '+this.currentUser.user_last_name;
|
||||||
|
this.roleName = this.currentUser.role_name;
|
||||||
|
|
||||||
|
console.log('this.currentUser',this.currentUser);
|
||||||
|
window.localStorage.setItem('LenderRoleID', this.currentUser.user_role);
|
||||||
|
|
||||||
|
if(this.currentUser.fk_entity_type_id == 1 ){
|
||||||
|
this.userDep = "SineEdge";
|
||||||
|
}else if(this.currentUser.fk_entity_type_id == 2 ){
|
||||||
|
// this.userDep = "Lender";
|
||||||
|
this.userDep = this.currentUser.full_name;
|
||||||
|
}else{
|
||||||
|
this.userDep = "Vendor";
|
||||||
|
}
|
||||||
|
let users= {
|
||||||
|
'userid':this.currentUser.userid,
|
||||||
|
'entityid':this.currentUser.fk_entity_type_id,
|
||||||
|
'profilepic':this.currentUser.profilepic
|
||||||
|
}
|
||||||
|
this.users.getprofilepic(users).subscribe(res=>{
|
||||||
|
this.profileurl = res;
|
||||||
|
if(this.profileurl.dataStatus == true){
|
||||||
|
|
||||||
|
this.profileurl = this.profileurl.records;
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/** 3) Getting PD Details For Alert Message */
|
||||||
|
// this._dashboardService.getAlertDetail().subscribe(data => {
|
||||||
|
|
||||||
|
// console.log(' *****Layout Alert Message *****');
|
||||||
|
// console.log('Layout Alert Message Whole Data',data);
|
||||||
|
|
||||||
|
// this.alertCount = data.records.length;
|
||||||
|
// this.alertMsgTriggerType = data.records.filter(trigger=>trigger.pd_status == "TRIGGERED" );
|
||||||
|
// this.alertMsgAllocateType = data.records.filter(allocate=>allocate.pd_status == "ALLOCATED" );
|
||||||
|
// console.log('Layout Alert Message',this.alertMsgTriggerType);
|
||||||
|
// console.log('Layout Alert Message',this.alertMsgAllocateType);
|
||||||
|
// console.log('Layout Alert Count',this.alertCount);
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
|
this.userRoleType=localStorage.getItem('user_role');
|
||||||
|
// console.clear();
|
||||||
const elemSidebar = <HTMLElement>document.querySelector('.sidebar-container ');
|
const elemSidebar = <HTMLElement>document.querySelector('.sidebar-container ');
|
||||||
|
|
||||||
if (window.matchMedia(`(min-width: 960px)`).matches && !this.isMac() && !this.compactSidebar && this.layoutDir != 'rtl') {
|
if (window.matchMedia(`(min-width: 960px)`).matches && !this.isMac() && !this.compactSidebar && this.layoutDir != 'rtl') {
|
||||||
@ -52,6 +121,7 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
|
|||||||
suppressScrollX: true
|
suppressScrollX: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
this._router = this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe((event: NavigationEnd) => {
|
this._router = this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe((event: NavigationEnd) => {
|
||||||
this.url = event.url;
|
this.url = event.url;
|
||||||
@ -64,7 +134,7 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('click', ['$event'])
|
@HostListener('click', ['$event'])
|
||||||
onClick(e: any) {
|
onClick(e: any) {
|
||||||
const elemSidebar = <HTMLElement>document.querySelector('.sidebar-container ');
|
const elemSidebar = <HTMLElement>document.querySelector('.sidebar-container ');
|
||||||
@ -80,6 +150,7 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
this._router.unsubscribe();
|
this._router.unsubscribe();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
isOver(): boolean {
|
isOver(): boolean {
|
||||||
@ -126,7 +197,7 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
changeMenuLayout(value)
|
changeMenuLayout(value)
|
||||||
{
|
{
|
||||||
console.log(value)
|
// console.log(value)
|
||||||
if(value)
|
if(value)
|
||||||
{
|
{
|
||||||
this.menuLayout = 'top-menu';
|
this.menuLayout = 'top-menu';
|
||||||
@ -200,4 +271,26 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
|
|||||||
]
|
]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
userprofile(){
|
||||||
|
this.router.navigate(['setting/users/userprofile']);
|
||||||
|
}
|
||||||
|
logout(){
|
||||||
|
//alert();
|
||||||
|
this.aws.logout().subscribe(res=>{
|
||||||
|
//alert("res");
|
||||||
|
this.router.navigate(['/authentication/login']);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
menunav(active){
|
||||||
|
switch(active){
|
||||||
|
case 'HOME':
|
||||||
|
this.router.navigate(['/home']);
|
||||||
|
break;
|
||||||
|
case 'USERS':
|
||||||
|
this.router.navigate(['/setting/users/userprofile']);
|
||||||
|
break;
|
||||||
|
case 'SETTING':
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
0
ng6-seed/src/app/layouts/auth/auth-layout.component.html
Normal file → Executable file
0
ng6-seed/src/app/layouts/auth/auth-layout.component.html
Normal file → Executable file
0
ng6-seed/src/app/layouts/auth/auth-layout.component.ts
Normal file → Executable file
0
ng6-seed/src/app/layouts/auth/auth-layout.component.ts
Normal file → Executable file
8
ng6-seed/src/app/layouts/role-menu-items.pipe.spec.ts
Normal file
8
ng6-seed/src/app/layouts/role-menu-items.pipe.spec.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { RoleMenuItemsPipe } from './role-menu-items.pipe';
|
||||||
|
|
||||||
|
describe('RoleMenuItemsPipe', () => {
|
||||||
|
it('create an instance', () => {
|
||||||
|
const pipe = new RoleMenuItemsPipe();
|
||||||
|
expect(pipe).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
51
ng6-seed/src/app/layouts/role-menu-items.pipe.ts
Normal file
51
ng6-seed/src/app/layouts/role-menu-items.pipe.ts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
|
|
||||||
|
@Pipe({
|
||||||
|
name: 'roleMenuItems'
|
||||||
|
})
|
||||||
|
export class RoleMenuItemsPipe implements PipeTransform {
|
||||||
|
|
||||||
|
transform(value: any, type: any): any {
|
||||||
|
// this is for horizontal menu filter
|
||||||
|
// if(type=="1"){
|
||||||
|
// switch(localStorage.getItem('user_role')){
|
||||||
|
// case '1': return value.filter(val=>val.state!="quality_check_discussion");
|
||||||
|
// case '2': return value.filter(val=>val.state!="quality_check_discussion");
|
||||||
|
// case '4': return value.filter(val=>val.state!="quality_check_discussion" && val.state!="reports");
|
||||||
|
// case '5': return value.filter(val=>val.state!="quality_check_discussion" && val.state!="reports");
|
||||||
|
// case '6': return value.filter(val=>val.state!="personal_discussion" && val.state!="reports");
|
||||||
|
// case '7': return value.filter(val=>val.state!="personal_discussion" && val.state!="reports");
|
||||||
|
// case '10': return value;
|
||||||
|
// default: return value.filter(val=>val.state!="quality_check_discussion");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // this is for vertical menu filter
|
||||||
|
// else if(type=="2"){
|
||||||
|
// switch(localStorage.getItem('user_role')){
|
||||||
|
// case '1': return value.filter(val=>val.state!="quality_check_discussion");
|
||||||
|
// case '2': return value.filter(val=>val.state!="quality_check_discussion");
|
||||||
|
// case '4': return value.filter(val=>val.state!="quality_check_discussion" && val.state!="reports");
|
||||||
|
// case '5': return value.filter(val=>val.state!="quality_check_discussion" && val.state!="reports");
|
||||||
|
// case '6': return value.filter(val=>val.state!="personal_discussion" && val.state!="reports");
|
||||||
|
// case '7': return value.filter(val=>val.state!="personal_discussion" && val.state!="reports");
|
||||||
|
// case '10': return value;
|
||||||
|
// default: return value.filter(val=>val.state!="quality_check_discussion");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else{
|
||||||
|
// return [];
|
||||||
|
// }
|
||||||
|
// if(localStorage.getItem('user_role')=="10"){
|
||||||
|
// return value
|
||||||
|
// }
|
||||||
|
// else if(localStorage.getItem('user_role')=="6" || localStorage.getItem('user_role')=="7"){
|
||||||
|
// return value.filter(val=>val.state!='' && val.state!="personal_discussion" && val.state!="reports")
|
||||||
|
// }
|
||||||
|
// else{
|
||||||
|
// return value.filter(val=>val.state!='' && val.state!="quality_check_discussion")
|
||||||
|
// }
|
||||||
|
return value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
import { TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { GetGeometricLocationService } from './get-geometric-location.service';
|
||||||
|
|
||||||
|
describe('GetGeometricLocationService', () => {
|
||||||
|
beforeEach(() => TestBed.configureTestingModule({}));
|
||||||
|
|
||||||
|
it('should be created', () => {
|
||||||
|
const service: GetGeometricLocationService = TestBed.get(GetGeometricLocationService);
|
||||||
|
expect(service).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Observable } from 'rxjs';//for Datatables
|
||||||
|
import { Http } from '@angular/http';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
|
||||||
|
export class GetGeometricLocationService {
|
||||||
|
MAP_API_KEY: string;
|
||||||
|
MAP_API_URL: string;
|
||||||
|
constructor(private _http: Http) {
|
||||||
|
this.MAP_API_KEY = 'AIzaSyCXsHTus6hyIB8jYvt9ZEIbZve-2vWeQRg'
|
||||||
|
this.MAP_API_URL = `https://maps.googleapis.com/maps/api/geocode/json?key=${this.MAP_API_KEY}&address=`;
|
||||||
|
}
|
||||||
|
findLocations(address:string, postalCode?: string,state?:string, city?: string): Observable<any> {
|
||||||
|
let compositeAddress = [address];
|
||||||
|
|
||||||
|
if (postalCode) compositeAddress.push(postalCode);
|
||||||
|
if (state) compositeAddress.push(state);
|
||||||
|
if (city) compositeAddress.push(city);
|
||||||
|
|
||||||
|
let url = `${this.MAP_API_URL}${compositeAddress.join(',')}`;
|
||||||
|
return this._http.get(url).map(response => <any> response.json());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,358 @@
|
|||||||
|
<mat-card>
|
||||||
|
<mat-card-content>
|
||||||
|
<form [formGroup]="_PDtriggerForm">
|
||||||
|
|
||||||
|
<mat-card-content>
|
||||||
|
<div style="width: 100%;text-align:right;">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above"
|
||||||
|
(click)="loadPdListCompoent(cancelStatus)"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title> PD Details </mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content>
|
||||||
|
<mat-form-field style="width: 28%">
|
||||||
|
<mat-select placeholder="Lender Name" formControlName="fk_lender_id">
|
||||||
|
<!-- (selectionChange)="getBillingDetails(pdMain.fk_lender_id.value)" -->
|
||||||
|
<mat-option> Select </mat-option>
|
||||||
|
<mat-option (click)="selectedLender(LL)" *ngFor="let LL of lenderList" [value]="LL.entity_id" >
|
||||||
|
{{LL.full_name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 28%">
|
||||||
|
<mat-select placeholder="Branch" formControlName="pd_branch_id">
|
||||||
|
<!-- (selectionChange)="getBillingDetails(pdMain.fk_lender_id.value)" -->
|
||||||
|
<mat-option>
|
||||||
|
Select
|
||||||
|
</mat-option>
|
||||||
|
<mat-option *ngFor="let LB of lenderBranchList" [value]="LB.entity_lender_branch_id" >
|
||||||
|
{{LB.branch_name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 28%">
|
||||||
|
<input matInput autocomplete="off" placeholder=" Loan Application ID" formControlName="lender_applicant_id" type="text" required>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.lender_applicant_id.hasError('required')">Applicant ID Required</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 28%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Lender Contact Person" formControlName="lender_contact_person" type="text" required>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.lender_contact_person.hasError('required')">Lender Contact Person Required</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 28%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Lender's Mobile Number" formControlName="lender_contact_mobile" type="text" ForMobileNumbers maxlength="10" minlength="10">
|
||||||
|
<mat-error *ngIf="pdMain.lender_contact_mobile.hasError('maxlength') || pdMain.lender_contact_mobile.hasError('minlength')">Enter Valid Mobile Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<!--<mat-form-field style="width: 32%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Lender Contact Number" formControlName="lender_contact_mobile" type="text" OnlyNumber maxlength="10" required>
|
||||||
|
<mat-error *ngIf="pdMain.lender_contact_mobile.hasError('pattern') || pdMain.lender_contact_mobile.hasError('maxlength') || pdMain.lender_contact_mobile.hasError('minlength')">Enter Valid Mobile Number. </mat-error>
|
||||||
|
</mat-form-field>-->
|
||||||
|
|
||||||
|
<mat-form-field style="width: 8%">
|
||||||
|
<input matInput autocomplete="off" placeholder="STD Code" formControlName="lender_stdcode" type="text" maxlength="5" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="pdMain.lender_stdcode.hasError('maxlength') || pdMain.lender_stdcode.hasError('minlength')">Enter Valid STD Code Number.</mat-error>
|
||||||
|
</mat-form-field> -
|
||||||
|
<mat-form-field style="width: 17%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Landline Number" formControlName="lender_landline" type="text" maxlength="8" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="pdMain.lender_landline.hasError('maxlength') || pdMain.lender_landline.hasError('minlength')">Enter Valid LandLine Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 28%">
|
||||||
|
<mat-select placeholder="Product Name" formControlName="fk_product_id" (selectionChange)="getSubproductList(pdMain.fk_product_id.value)">
|
||||||
|
<mat-option>
|
||||||
|
Select
|
||||||
|
</mat-option>
|
||||||
|
<mat-option *ngFor="let PL of productList" [value]="PL.product_id" >
|
||||||
|
{{PL.product_name}}
|
||||||
|
</mat-option>
|
||||||
|
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_product_id.hasError('required')">Product Required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field *ngIf="isSubproductShown" style="width: 28%">
|
||||||
|
|
||||||
|
<mat-select placeholder="Sub Product Name" formControlName="fk_subproduct_id">
|
||||||
|
<mat-option>Select</mat-option>
|
||||||
|
<mat-option *ngFor="let SPL of subProductList" [value]="SPL.subproduct_id" >
|
||||||
|
{{SPL.subproduct_name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_subproduct_id.hasError('required')">Sub Product Required.</mat-error> -->
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
<!-- {{customerSegmentList | json}} -->
|
||||||
|
<mat-form-field style="width: 28%">
|
||||||
|
<mat-select placeholder="Customer Segment" formControlName="fk_customer_segment">
|
||||||
|
<mat-option>
|
||||||
|
Select
|
||||||
|
</mat-option>
|
||||||
|
<mat-option *ngFor="let CSL of customerSegmentList" [value]="CSL.customer_segment_id" >
|
||||||
|
{{CSL.abbr}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_customer_segment.hasError('required')">Customer Segment Required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
<!-- {{pdMain.fk_customer_segment.value}} -->
|
||||||
|
<mat-form-field style="width: 28%">
|
||||||
|
<mat-select placeholder="PD Type" formControlName="fk_pd_type">
|
||||||
|
<mat-option>
|
||||||
|
Select
|
||||||
|
</mat-option>
|
||||||
|
<mat-option *ngFor="let PDL of pdTypeList" [value]="PDL.pd_type_id" >
|
||||||
|
{{PDL.type_name}}
|
||||||
|
</mat-option>
|
||||||
|
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_pd_type.hasError('required')">PD Type Required.</mat-error> -->
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 60%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Loan Amount" formControlName="loan_amount" OnlyNumber required autocomplete="off">
|
||||||
|
<mat-hint align="start" style="font-size:90%" *ngIf="pdMain.loan_amount.value">{{"₹"}} {{pdMain.loan_amount.value | numberToWords}} Only</mat-hint>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.loan_amount.hasError('required')">Amount Required.</mat-error> -->
|
||||||
|
<mat-error *ngIf="pdMain.loan_amount.hasError('pattern')">Enter valid amount. </mat-error>
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>Address Details</mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<div formArrayName="addresses" *ngFor="let addresses of pdAddresses.controls; let i = index;">
|
||||||
|
<mat-card-content [formGroupName]="i">
|
||||||
|
<mat-form-field style="width: 96%">
|
||||||
|
<textarea matInput autocomplete="off" placeholder="Address at which PD is to be done" formControlName="addressline1"
|
||||||
|
[value]="addresses.get('addressline1').value | titlecase"></textarea>
|
||||||
|
<!-- oninput="this.value = this.value.toUpperCase()" -->
|
||||||
|
<!-- <mat-error *ngIf="pdAddresses.addressline1.hasError('required')">Address1 required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 32%">
|
||||||
|
<mat-select placeholder="State" formControlName="fk_state" (selectionChange)="getCityList($event.value,i)">
|
||||||
|
<mat-option> Select </mat-option>
|
||||||
|
<mat-option *ngFor="let SL of stateList" [value]="SL.state_id">
|
||||||
|
{{SL.name}}
|
||||||
|
</mat-option>
|
||||||
|
|
||||||
|
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdAddresses.fk_state.hasError('required')">State Required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 32%">
|
||||||
|
<mat-select placeholder="City" formControlName="fk_city">
|
||||||
|
<mat-option> Select </mat-option>
|
||||||
|
<mat-option *ngFor="let CL of cityList[i]" [value]="CL.city_id">
|
||||||
|
{{CL.city_name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdAddresses.fk_city.hasError('required')">City Required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 24%">
|
||||||
|
<mat-select placeholder="Pincode" formControlName="pincode" (selectionChange)="getPincode($event.value,i)">
|
||||||
|
<mat-option>Select</mat-option>
|
||||||
|
<mat-option *ngFor="let PL of pincodeList[i]" [value]="PL.pincode_id">{{PL.pincode}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 24%" *ngIf="pincodeflag[i]">
|
||||||
|
<!-- *ngIf="pdAddresses.pincode.value == 1" -->
|
||||||
|
<input matInput autocomplete="off" placeholder="Specify Pincode" formControlName="other_pincode" OnlyNumber>
|
||||||
|
<!-- <mat-error *ngIf="pdAddresses.other_pincode.hasError('maxlength') || pdMain.other_pincode.hasError('minlength')">Enter Valid Pincode. </mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
<div align="end" *ngIf="pdAddresses.controls.length > 1">
|
||||||
|
<button mat-raised-button mat-icon-button matTooltip="Delete" matTooltipPosition="above" (click)="removeAddresses(i)" type="button"><mat-icon>delete</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<mat-card-actions align="end">
|
||||||
|
|
||||||
|
<button type="button" mat-raised-button mat-icon-button (click)="addAddresses()"
|
||||||
|
matTooltip="Add More Additional Addresses" matTooltipPosition="above" class="mr-1 mb-1 hover-icon" color="primary" type="button">
|
||||||
|
<mat-icon>add</mat-icon>
|
||||||
|
</button>
|
||||||
|
</mat-card-actions>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>Applicant Details</mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content>
|
||||||
|
<h5>Applicant 1</h5>
|
||||||
|
<mat-form-field style="width: 12%">
|
||||||
|
<mat-select placeholder="Title" formControlName="applicant_title_name">
|
||||||
|
<mat-option *ngFor="let tl of titleList" [value]="tl.title_id">
|
||||||
|
{{tl.name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 38%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Name of Individual Applicant" formControlName="applicant_name"
|
||||||
|
[value]="pdMain.applicant_name.value | titlecase">
|
||||||
|
<!-- <mat-error *ngIf="pdMain.applicant_name.hasError('required')">Name is Required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 38%" *ngIf="pdMain.fk_customer_segment.value != '8'">
|
||||||
|
<input matInput autocomplete="off" placeholder="Company / Firm Name" formControlName="company_name" type="text">
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 38%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Mobile Number" formControlName="mobile_no" type="text" ForMobileNumbers maxlength="10" minlength="10">
|
||||||
|
<mat-error *ngIf="pdMain.mobile_no.hasError('required')">Mobile No is Required . </mat-error>
|
||||||
|
<mat-error *ngIf="pdMain.mobile_no.hasError('maxlength') || pdMain.mobile_no.hasError('minlength')">Enter Valid Mobile Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 12%">
|
||||||
|
<input matInput autocomplete="off" placeholder="STD Code" formControlName="applicant_stdcode" type="text" ForMobileNumbers maxlength="5">
|
||||||
|
<mat-error *ngIf="pdMain.applicant_stdcode.hasError('maxlength') || pdMain.applicant_stdcode.hasError('minlength')">Enter Valid STD Code Number. </mat-error>
|
||||||
|
</mat-form-field> -
|
||||||
|
<mat-form-field style="width: 22%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Landline Number" formControlName="applicant_landline" type="text" ForMobileNumbers maxlength="8">
|
||||||
|
<mat-error *ngIf="pdMain.applicant_landline.hasError('maxlength') || pdMain.applicant_landline.hasError('minlength')">Enter Valid LandLine Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<div formArrayName="coapplicants" *ngFor="let coDetails of pdCoApplicant.controls; let i = index;">
|
||||||
|
|
||||||
|
<div class="row" fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="100" fxFlex.lg="100" fxFlex.xl="100">
|
||||||
|
|
||||||
|
|
||||||
|
<h5>{{coDetails.controls.label.value}} {{i+2}}</h5>
|
||||||
|
|
||||||
|
<div [formGroupName]="i">
|
||||||
|
<mat-form-field style="width: 12%">
|
||||||
|
<mat-select placeholder="Title" formControlName="applicant_title_name">
|
||||||
|
<mat-option *ngFor="let tl of titleList" [value]="tl.title_id">
|
||||||
|
{{tl.name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 38%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Name of Individual Applicant" formControlName="coapplicant_name" type="text"
|
||||||
|
[value]="coDetails['controls'].coapplicant_name.value | titlecase" required>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.applicant_name.hasError('required')">Name is Required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 38%" *ngIf="pdMain.fk_customer_segment.value != '8'">
|
||||||
|
<input matInput autocomplete="off" placeholder="Company / Firm Name" formControlName="company_name" type="text">
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<!-- <mat-form-field style="width: 100%">
|
||||||
|
<input matInput placeholder="Name" formControlName="coapplicant_name" type="text" required>
|
||||||
|
</mat-form-field> -->
|
||||||
|
|
||||||
|
<mat-form-field style="width: 38%">
|
||||||
|
<input matInput placeholder="Mobile Number" formControlName="coapplicant_mobile_no" type="text" maxlength="10" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="coDetails['controls'].coapplicant_mobile_no.hasError('maxlength') || coDetails['controls'].coapplicant_mobile_no.hasError('minlength')">Enter Valid Mobile Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 12%">
|
||||||
|
<input matInput autocomplete="off" placeholder="STD Code" formControlName="coapplicant_stdcode" type="text" maxlength="5" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="coDetails['controls'].coapplicant_stdcode.hasError('maxlength') || coDetails['controls'].coapplicant_stdcode.hasError('minlength')">Enter Valid STD Code. </mat-error>
|
||||||
|
</mat-form-field> -
|
||||||
|
<mat-form-field style="width: 22%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Landline Number" formControlName="coapplicant_landline" type="text" maxlength="8" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="coDetails['controls'].coapplicant_landline.hasError('maxlength') || coDetails['controls'].coapplicant_landline.hasError('minlength')">Enter Valid Landline Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
|
||||||
|
<button mat-raised-button mat-icon-button matTooltip="Delete" matTooltipPosition="above" (click)="removeCoApplicant(i)" type="button"><mat-icon>delete</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Phone field to be split into 2 parts. Mobile Number mandatory and optional land line number with std code. ---->
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
<mat-card-actions align="end">
|
||||||
|
<button mat-fab class="mr-1 mb-1" color="primary" matTooltip="Add More Applicant" matTooltipPosition="above" style="opacity: 0.8;border:2px;border-radius: 50%;" (click)="addCoApplicant()"><mat-icon>group_add</mat-icon><div class="mat-button-ripple mat-ripple" matripple=""></div><div class="mat-button-focus-overlay"></div></button>
|
||||||
|
</mat-card-actions>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>Additional Requirements</mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content formArrayName="addtional_requirements" *ngFor="let requirements of pdRequirements.controls; let i = index;">
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-content [formGroupName]="i">
|
||||||
|
<mat-form-field style="width: 90%;">
|
||||||
|
<input matInput autocomplete="off" placeholder="Requirement" formControlName="add_requirement">
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<button mat-raised-button mat-icon-button matTooltip="Delete" matTooltipPosition="above" (click)="removeRequirements(i)" type="button"><mat-icon>delete</mat-icon></button>
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
</mat-card>
|
||||||
|
</mat-card-content>
|
||||||
|
<mat-card-actions align="end">
|
||||||
|
<button type="button" mat-raised-button mat-icon-button (click)="addRequiremnts()"
|
||||||
|
matTooltip="Add More Additional Requirements" matTooltipPosition="above" class="mr-1 mb-1 hover-icon" color="primary" type="button">
|
||||||
|
<mat-icon>add</mat-icon>
|
||||||
|
</button>
|
||||||
|
</mat-card-actions>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
<mat-card formArrayName="documents">
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>
|
||||||
|
Document
|
||||||
|
</mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content>
|
||||||
|
<mat-list *ngFor="let docList of documents.controls; let d = index;" [formGroupName]="d">
|
||||||
|
<!-- <h3 mat-subheader>Upload Documents</h3> -->
|
||||||
|
<mat-list-item>
|
||||||
|
<mat-form-field style="width: 70%">
|
||||||
|
<input matInput autocomplete="off" placeholder="Document Name" formControlName="doc_name" type="text">
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
|
||||||
|
<div style="width:50%">
|
||||||
|
<input type="file" title="Browse Document" (change)="fileSelectionEvent($event,d)" formControlName="documentFile">
|
||||||
|
|
||||||
|
<span (click)="removeItem(d)">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" matTooltip="Delete" matTooltipPosition="above" type="button"><mat-icon>delete</mat-icon></button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</mat-list-item>
|
||||||
|
</mat-list>
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
<mat-card-actions align="end">
|
||||||
|
<button mat-raised-button mat-icon-button matTooltip="Add Document" matTooltipPosition="above" class="mr-1 mb-1 hover-icon" color="primary" (click)="addMoreDocs()" type="button"><mat-icon>attach_file</mat-icon></button>
|
||||||
|
|
||||||
|
</mat-card-actions>
|
||||||
|
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
<mat-card-actions>
|
||||||
|
<div fxFlex="70" class="pb-0 text-sm-left" align="left">
|
||||||
|
<mat-form-field appearance="outline" style="width: 100%">
|
||||||
|
<!-- <mat-label>Remarks</mat-label> -->
|
||||||
|
<textarea matInput autocomplete="off" placeholder="Remarks" formControlName="remarks"></textarea>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" matTooltip="Reset" matTooltipPosition="above" type="button"
|
||||||
|
(click)="onReset()"><mat-icon>settings_backup_restore</mat-icon></button>
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" (click)="saveDraftPD(_PDtriggerForm.value,draftStatus)" matTooltip="Save as Draft" matTooltipPosition="above" type="button" [disabled]="disableAfterSubmit===true"><mat-icon>description</mat-icon></button>
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Trigger PD" matTooltipPosition="above" (click)="triggerPD(_PDtriggerForm.value,PDTriggerStatus)" [disabled]="disableAfterSubmit===true"><mat-icon>save</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-card-actions>
|
||||||
|
</form>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.mat-form-field-appearance-legacy .mat-hint{
|
||||||
|
color:rgba(0, 0, 0, 0.8) !important;
|
||||||
|
}
|
||||||
|
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { MastersComponent } from './masters.component';
|
import { AddPdComponent } from './add-pd.component';
|
||||||
|
|
||||||
describe('MastersComponent', () => {
|
describe('AddPdComponent', () => {
|
||||||
let component: MastersComponent;
|
let component: AddPdComponent;
|
||||||
let fixture: ComponentFixture<MastersComponent>;
|
let fixture: ComponentFixture<AddPdComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ MastersComponent ]
|
declarations: [ AddPdComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(MastersComponent);
|
fixture = TestBed.createComponent(AddPdComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,743 @@
|
|||||||
|
import { Component, OnInit, ViewEncapsulation, Output, EventEmitter, OnDestroy } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { CustomValidators } from 'ng2-validation';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { PdTrigerService } from '../../../pd-service/pd-triger.service';
|
||||||
|
import { ListPdComponent } from '../list-pd.component';
|
||||||
|
import { AwsService } from '../../../../AwsService/aws.service';
|
||||||
|
import { TitleCasePipe } from '@angular/common';
|
||||||
|
/**sweet alert */
|
||||||
|
import Swal from 'sweetalert2';
|
||||||
|
@Component({
|
||||||
|
selector: 'app-add-pd',
|
||||||
|
templateUrl: './add-pd.component.html',
|
||||||
|
styleUrls: ['./add-pd.component.scss'],
|
||||||
|
providers:[TitleCasePipe],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
})
|
||||||
|
export class AddPdComponent implements OnInit, OnDestroy {
|
||||||
|
//@Output() loadParent = new EventEmitter<string>();
|
||||||
|
cancelStatus: boolean;
|
||||||
|
enablePDButton: boolean;
|
||||||
|
coapplicantFlag: boolean = false;
|
||||||
|
draftStatus: string;
|
||||||
|
PDTriggerStatus: string;
|
||||||
|
private notifier: NotifierService;
|
||||||
|
public _PDtriggerForm: FormGroup;
|
||||||
|
|
||||||
|
addresses: FormArray;
|
||||||
|
coapplicants: FormArray;
|
||||||
|
addtional_requirements: FormArray;
|
||||||
|
|
||||||
|
productList: any = [];
|
||||||
|
subProductList: any;
|
||||||
|
lenderList: any;
|
||||||
|
lenderBranchList: any;
|
||||||
|
customerSegmentAllList: any;
|
||||||
|
customerSegmentList: any;
|
||||||
|
productAllList : any = [];
|
||||||
|
stateList: any = [];
|
||||||
|
cityList: any = [];
|
||||||
|
pdTypeList: any;
|
||||||
|
billingList: any;
|
||||||
|
relationShipList: any;
|
||||||
|
pincodeList: any = [];
|
||||||
|
errorMessage: any;
|
||||||
|
titleList: any;
|
||||||
|
// Dynamic co applicant
|
||||||
|
createWithLongContent = false;
|
||||||
|
dynamicCoApplicant = [];
|
||||||
|
disableAfterSubmit: boolean;
|
||||||
|
pincodeflag : any = [];
|
||||||
|
isSubproductShown: boolean = true;
|
||||||
|
constructor(notifier: NotifierService, private _fb: FormBuilder, private route: ActivatedRoute,
|
||||||
|
private router: Router, private _pd: PdTrigerService, private _aws: AwsService, private ListPdComponent: ListPdComponent,
|
||||||
|
private titleCase : TitleCasePipe) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
}
|
||||||
|
public totalfiles: Array<File> = [];
|
||||||
|
public totalFileName = [];
|
||||||
|
public lengthCheckToaddMore = 0;
|
||||||
|
ngOnInit() {
|
||||||
|
this.draftStatus = "DRAFT";
|
||||||
|
this.PDTriggerStatus = "TRIGGERED";
|
||||||
|
this.enablePDButton = false;
|
||||||
|
this.cancelStatus = false;
|
||||||
|
this.ListPdComponent.showListView(false);
|
||||||
|
this.getLenderList();
|
||||||
|
this.getProductsList();
|
||||||
|
this.getCustomerSegmentList();
|
||||||
|
this.getStateCityList();
|
||||||
|
this.getPDTypeList();
|
||||||
|
this.getRelationMaster();
|
||||||
|
this.getTitleMaster();
|
||||||
|
this.loadFormData();
|
||||||
|
|
||||||
|
}
|
||||||
|
// load form data
|
||||||
|
loadFormData() {
|
||||||
|
this._PDtriggerForm = this._fb.group({
|
||||||
|
fk_lender_id: [null],
|
||||||
|
pd_branch_id: [null],
|
||||||
|
lender_applicant_id: [null, Validators.compose([Validators.required])],
|
||||||
|
lender_contact_person: [null, Validators.compose([Validators.required])],
|
||||||
|
lender_contact_mobile: [null, Validators.compose([Validators.minLength(10), Validators.maxLength(12), Validators.pattern('^[0-9]*$')])],
|
||||||
|
lender_stdcode: [null, Validators.compose([Validators.minLength(3), Validators.maxLength(5), Validators.pattern('^[0-9]*$')])],
|
||||||
|
lender_landline: [null, Validators.compose([Validators.minLength(6), Validators.maxLength(8), Validators.pattern('^[0-9]*$')])],
|
||||||
|
//lender_billing: [null],
|
||||||
|
fk_product_id: [null],
|
||||||
|
fk_subproduct_id: [null],
|
||||||
|
fk_pd_type: [null],
|
||||||
|
fk_customer_segment: [null],
|
||||||
|
loan_amount: [null, Validators.compose([Validators.pattern('^[0-9]*$')])],
|
||||||
|
applicant_title_name: [''],
|
||||||
|
applicant_name: [null,Validators.compose([Validators.required])],
|
||||||
|
mobile_no: [null, Validators.compose([Validators.maxLength(10), Validators.minLength(10)])],
|
||||||
|
// landline : [null,Validators.compose([Validators.minLength(12),Validators.maxLength(13)])],
|
||||||
|
// email: [null],
|
||||||
|
applicant_stdcode: [null, Validators.compose([Validators.minLength(3), Validators.maxLength(5), Validators.pattern('^[0-9]*$')])],
|
||||||
|
applicant_landline: [null, Validators.compose([Validators.minLength(6), Validators.maxLength(8), Validators.pattern('^[0-9]*$')])],
|
||||||
|
company_name: [null],
|
||||||
|
remarks: [null],
|
||||||
|
// allocation_type: [null],
|
||||||
|
// sub_allocation_type: [null],
|
||||||
|
coapplicants: this._fb.array([]),
|
||||||
|
addresses: this._fb.array([this.createAddresses()]),
|
||||||
|
documents: this._fb.array([]),
|
||||||
|
addtional_requirements: this._fb.array([this.createRequiremnt()])
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
lenderShortName:string;
|
||||||
|
/** FOR Dropdowns */
|
||||||
|
selectedLender(lender) {
|
||||||
|
// console.log('lender',lender);
|
||||||
|
this.lenderBranchList = lender['branches'];
|
||||||
|
this.lenderShortName = lender['short_name'];
|
||||||
|
// console.log(this.lenderShortName);
|
||||||
|
this._PDtriggerForm.controls.pd_branch_id.setValue(null);
|
||||||
|
|
||||||
|
if(this.lenderShortName == 'CLIX'){
|
||||||
|
|
||||||
|
let getProductAbbr = this.productAllList.map(dval => dval.product_abbr);
|
||||||
|
let ClixProductAbbr = ['BL','LAEP'];
|
||||||
|
let FilteredAbbr: any = [];
|
||||||
|
FilteredAbbr = ClixProductAbbr.map(x => {
|
||||||
|
let findIndex = getProductAbbr.indexOf(x);
|
||||||
|
return this.productAllList[findIndex];
|
||||||
|
});
|
||||||
|
this.productList = FilteredAbbr.length > 0 ? FilteredAbbr : this.productAllList;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.productList = this.productAllList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// console.log(this.productList);
|
||||||
|
|
||||||
|
// console.log('this.productList',this.productList);
|
||||||
|
this._PDtriggerForm.controls['fk_product_id'].setValue('');
|
||||||
|
this._PDtriggerForm.controls['fk_subproduct_id'].setValue('');
|
||||||
|
this._PDtriggerForm.controls['fk_pd_type'].setValue('');
|
||||||
|
this._PDtriggerForm.controls['fk_customer_segment'].setValue('');
|
||||||
|
this._PDtriggerForm.controls['loan_amount'].setValue('');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
getLenderList() {
|
||||||
|
this._pd.getLenderDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.lenderList = data.records
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any>error);
|
||||||
|
}
|
||||||
|
|
||||||
|
getProductsList() {
|
||||||
|
this._pd.getProductsDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.productAllList = data.records
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any>error);
|
||||||
|
}
|
||||||
|
|
||||||
|
getCustomerSegmentList() {
|
||||||
|
this._pd.getCustomersDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.customerSegmentAllList = data.records
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any>error);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get State
|
||||||
|
getStateCityList() {
|
||||||
|
this._pd.getAllMasterDatas('STATE').subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.stateList = data.records.filter(item => item.isactive == 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//get PDType List
|
||||||
|
getPDTypeList() {
|
||||||
|
this._pd.getPDTypeDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.pdTypeList = data.records.pd_type;
|
||||||
|
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any>error);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//get sub product list based on prokduct id
|
||||||
|
getSubproductList(productID: string) {
|
||||||
|
let productabbr : any;
|
||||||
|
// console.log('productID',productID);
|
||||||
|
if(productID !== undefined && productID !== null && productID !== '') {
|
||||||
|
this.subProductList = this.productList.filter(item => item.product_id == productID);
|
||||||
|
this.subProductList = this.subProductList[0].subproducts;
|
||||||
|
this.subProductList = this.subProductList.filter(item => item.is_others == 0);
|
||||||
|
productabbr = this.productAllList.filter(item => item.product_id == productID)[0].product_abbr;
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
productabbr = ''
|
||||||
|
this.subProductList = [];
|
||||||
|
this._PDtriggerForm.controls['fk_subproduct_id'].setValue('');
|
||||||
|
this._PDtriggerForm.controls['fk_pd_type'].setValue('');
|
||||||
|
this._PDtriggerForm.controls['fk_customer_segment'].setValue('');
|
||||||
|
this._PDtriggerForm.controls['loan_amount'].setValue('');
|
||||||
|
}
|
||||||
|
// console.log('productID',productID,productabbr);
|
||||||
|
/**customer segment */
|
||||||
|
switch(productabbr){
|
||||||
|
case 'BL' :
|
||||||
|
// console.log(1);
|
||||||
|
this.customerSegmentList = this.customerSegmentAllList.filter(s => (s.customer_segment).includes('Self'));
|
||||||
|
this._PDtriggerForm.controls['fk_subproduct_id'].setValue(null);
|
||||||
|
this.isSubproductShown = false;
|
||||||
|
break;
|
||||||
|
case 'LAEP':
|
||||||
|
// console.log(2);
|
||||||
|
this.customerSegmentList = this.customerSegmentAllList.filter(s => (s.customer_segment).includes('Self'));
|
||||||
|
this._PDtriggerForm.controls['fk_subproduct_id'].setValue(null);
|
||||||
|
this.isSubproductShown = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// console.log(3);
|
||||||
|
this.customerSegmentList = this.customerSegmentAllList;
|
||||||
|
this.isSubproductShown = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.lenderShortName == 'CLIX' && productabbr != ''){
|
||||||
|
this._PDtriggerForm.controls['fk_pd_type'].setValue('1');
|
||||||
|
this._PDtriggerForm.controls['fk_customer_segment'].setValue('5');
|
||||||
|
this._PDtriggerForm.controls['loan_amount'].setValue(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//get city list details based on state id
|
||||||
|
getCityList(stateID: string,index) {
|
||||||
|
this._pd.getStateWiseCities(stateID).subscribe(data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.cityList[index] = data.records.cities;
|
||||||
|
this.pincodeList[index] = data.records.pincode;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// get relation master details
|
||||||
|
getRelationMaster() {
|
||||||
|
let relation = "RELATIONSHIPS";
|
||||||
|
this._pd.getAllMasterDatas(relation).subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.relationShipList = data.records;
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any>error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get title master
|
||||||
|
getTitleMaster() {
|
||||||
|
let relation = "TITLES";
|
||||||
|
this._pd.getAllMasterDatas(relation).subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.titleList = data.records.filter(val => val.isactive == 1);
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any>error);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** FOR Documents */
|
||||||
|
addMoreDocs() {
|
||||||
|
if (this.totalfiles.length != 0) {
|
||||||
|
if (this.documents.value[0].doc_name != "" && ((this.lengthCheckToaddMore) === (this.totalfiles.length))) {
|
||||||
|
this.documents.insert(0, this.generateDocuments())
|
||||||
|
this.lengthCheckToaddMore = this.lengthCheckToaddMore + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this.totalfiles.length === 0 && this.lengthCheckToaddMore === 0) {
|
||||||
|
this.documents.insert(0, this.generateDocuments())
|
||||||
|
this.lengthCheckToaddMore = this.lengthCheckToaddMore + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
generateDocuments(): FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
doc_name: [null],//Validators.compose([Validators.required])
|
||||||
|
documentFile: [null],//, Validators.compose([Validators.required])
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
get documents(): FormArray {
|
||||||
|
return this._PDtriggerForm.get('documents') as FormArray;
|
||||||
|
};
|
||||||
|
|
||||||
|
get pdMain() {
|
||||||
|
return this._PDtriggerForm.controls;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(index: number) {
|
||||||
|
this.totalfiles.splice(index, 1);
|
||||||
|
this.totalFileName.splice(index, 1);
|
||||||
|
this.documents.removeAt(index);
|
||||||
|
this.lengthCheckToaddMore = this.lengthCheckToaddMore - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** FOR Coapplicant */
|
||||||
|
get pdCoApplicant() { return this._PDtriggerForm.get('coapplicants') as FormArray; }
|
||||||
|
|
||||||
|
addCoApplicant() {
|
||||||
|
this.coapplicants = this._PDtriggerForm.get('coapplicants') as FormArray;
|
||||||
|
this.coapplicants.push(this.createCoApplicant());
|
||||||
|
}
|
||||||
|
|
||||||
|
createCoApplicant(): FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
label: ['Applicant'],
|
||||||
|
applicant_title_name:[null],
|
||||||
|
coapplicant_name: [null, Validators.compose([Validators.required])],
|
||||||
|
coapplicant_mobile_no: [null,Validators.compose([Validators.minLength(10),Validators.maxLength(10)])],
|
||||||
|
coapplicant_stdcode:[null, Validators.compose([Validators.minLength(3), Validators.maxLength(5), Validators.pattern('^[0-9]*$')])],
|
||||||
|
coapplicant_landline: [null, Validators.compose([Validators.minLength(6), Validators.maxLength(8), Validators.pattern('^[0-9]*$')])],
|
||||||
|
company_name:[null],
|
||||||
|
relationship: [null],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
removeCoApplicant(i: number) {
|
||||||
|
const control = <FormArray>this._PDtriggerForm.controls['coapplicants'];
|
||||||
|
control.removeAt(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** FOr Adress */
|
||||||
|
get pdAddresses() { return this._PDtriggerForm.get('addresses') as FormArray; }
|
||||||
|
createAddresses(): FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
addressline1: [null],
|
||||||
|
fk_city: [null],
|
||||||
|
fk_state: [null],
|
||||||
|
pincode: [null],/** ,Validators.compose([Validators.minLength(6),Validators.maxLength(6)]) */
|
||||||
|
other_pincode: [null, Validators.compose([Validators.minLength(6), Validators.maxLength(6)])],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
addAddresses() {
|
||||||
|
this.addresses = this._PDtriggerForm.get('addresses') as FormArray;
|
||||||
|
this.addresses.push(this.createAddresses());
|
||||||
|
}
|
||||||
|
|
||||||
|
removeAddresses(index: number) {
|
||||||
|
const address_control = <FormArray>this._PDtriggerForm.controls['addresses'];
|
||||||
|
address_control.removeAt(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
get pdRequirements() { return this._PDtriggerForm.get('addtional_requirements') as FormArray; }
|
||||||
|
createRequiremnt(): FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
add_req_id: [null],
|
||||||
|
add_requirement: [null],
|
||||||
|
isactive: [1],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
addRequiremnts() {
|
||||||
|
this.addtional_requirements = this._PDtriggerForm.get('addtional_requirements') as FormArray;
|
||||||
|
this.addtional_requirements.push(this.createRequiremnt());
|
||||||
|
}
|
||||||
|
|
||||||
|
removeRequirements(index: number) {
|
||||||
|
const requirement_control = <FormArray>this._PDtriggerForm.controls['addtional_requirements'];
|
||||||
|
requirement_control.removeAt(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public fileSelectionEvent(fileInput: any, oldIndex: number) {
|
||||||
|
|
||||||
|
|
||||||
|
if (fileInput.target.files && fileInput.target.files[0]) {
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.onload = (event: any) => {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldIndex == 0) {
|
||||||
|
this.totalfiles.unshift((fileInput.target.files[0]))
|
||||||
|
this.totalFileName.unshift(fileInput.target.files[0].name)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.totalfiles[oldIndex] = (fileInput.target.files[0]);
|
||||||
|
this.totalFileName[oldIndex] = fileInput.target.files[0].name
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.readAsDataURL(fileInput.target.files[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.totalfiles.length == 1) {
|
||||||
|
this.lengthCheckToaddMore = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getPincode(e,i){ this.pincodeflag[i] = e == 1 ? true : false;}
|
||||||
|
// save pd in draft
|
||||||
|
saveDraftPD(formValue: any, status: string) {
|
||||||
|
//alert('Inside The Draft PD');
|
||||||
|
this.submitPdDetails(formValue, status);
|
||||||
|
}
|
||||||
|
//trigger pd
|
||||||
|
triggerPD(formValue: any, status: string) {
|
||||||
|
this._PDtriggerForm.controls['fk_lender_id'].setValidators([Validators.required]);
|
||||||
|
this._PDtriggerForm.controls['fk_lender_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if(formValue.fk_product_id != '4'){
|
||||||
|
// this._PDtriggerForm.controls['fk_subproduct_id'].setValidators([Validators.required]);
|
||||||
|
// this._PDtriggerForm.controls['fk_subproduct_id'].updateValueAndValidity();
|
||||||
|
// }
|
||||||
|
if(formValue.fk_product_id == '4'){
|
||||||
|
this._PDtriggerForm.controls['fk_subproduct_id'].setValue(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.lenderShortName != 'CLIX'){
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['fk_pd_type'].setValidators([Validators.required]);
|
||||||
|
this._PDtriggerForm.controls['fk_pd_type'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['fk_customer_segment'].setValidators([Validators.required]);
|
||||||
|
this._PDtriggerForm.controls['fk_customer_segment'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['loan_amount'].setValidators([Validators.required]);
|
||||||
|
this._PDtriggerForm.controls['loan_amount'].updateValueAndValidity();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['applicant_name'].setValidators([Validators.required]);
|
||||||
|
this._PDtriggerForm.controls['applicant_name'].updateValueAndValidity();
|
||||||
|
this._PDtriggerForm.controls['applicant_title_name'].setValidators([Validators.required]);
|
||||||
|
this._PDtriggerForm.controls['applicant_title_name'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['mobile_no'].setValidators([Validators.required]);
|
||||||
|
this._PDtriggerForm.controls['mobile_no'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._PDtriggerForm.controls['addressline1'].setValidators([Validators.required]);
|
||||||
|
// this._PDtriggerForm.controls['addressline1'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._PDtriggerForm.controls['fk_city'].setValidators([Validators.required]);
|
||||||
|
// this._PDtriggerForm.controls['fk_city'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._PDtriggerForm.controls['fk_state'].setValidators([Validators.required]);
|
||||||
|
// this._PDtriggerForm.controls['fk_state'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._PDtriggerForm.controls['pincode'].setValidators([Validators.required]);
|
||||||
|
// this._PDtriggerForm.controls['pincode'].updateValueAndValidity();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.clearCustomValidatorFields();
|
||||||
|
}, 10000);
|
||||||
|
this.submitPdDetails(formValue, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
// this is for clear custom validator required fields
|
||||||
|
clearCustomValidatorFields() {
|
||||||
|
this._PDtriggerForm.controls['fk_lender_id'].clearValidators();
|
||||||
|
this._PDtriggerForm.controls['fk_lender_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['fk_product_id'].clearValidators();
|
||||||
|
this._PDtriggerForm.controls['fk_product_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// if(this._PDtriggerForm.controls.fk_product_id.value != '4'){
|
||||||
|
// this._PDtriggerForm.controls['fk_subproduct_id'].clearValidators();
|
||||||
|
// this._PDtriggerForm.controls['fk_subproduct_id'].updateValueAndValidity();
|
||||||
|
// }
|
||||||
|
if(this._PDtriggerForm.controls.fk_product_id.value == '4'){
|
||||||
|
this._PDtriggerForm.controls['fk_subproduct_id'].setValue(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['fk_pd_type'].clearValidators();
|
||||||
|
this._PDtriggerForm.controls['fk_pd_type'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['fk_customer_segment'].clearValidators();
|
||||||
|
this._PDtriggerForm.controls['fk_customer_segment'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['loan_amount'].clearValidators();
|
||||||
|
this._PDtriggerForm.controls['loan_amount'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['applicant_name'].clearValidators();
|
||||||
|
this._PDtriggerForm.controls['applicant_name'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['applicant_title_name'].clearValidators();
|
||||||
|
this._PDtriggerForm.controls['applicant_title_name'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._PDtriggerForm.controls['mobile_no'].clearValidators();
|
||||||
|
this._PDtriggerForm.controls['mobile_no'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._PDtriggerForm.controls['addressline1'].clearValidators();
|
||||||
|
// this._PDtriggerForm.controls['addressline1'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._PDtriggerForm.controls['fk_city'].clearValidators();
|
||||||
|
// this._PDtriggerForm.controls['fk_city'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._PDtriggerForm.controls['fk_state'].clearValidators();
|
||||||
|
// this._PDtriggerForm.controls['fk_state'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._PDtriggerForm.controls['pincode'].clearValidators();
|
||||||
|
// this._PDtriggerForm.controls['pincode'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this.validateAllFormFields(this._PDtriggerForm);
|
||||||
|
}
|
||||||
|
|
||||||
|
// common function for both draft and process pd
|
||||||
|
submitPdDetails(formValue: any, status: string) {
|
||||||
|
// console.log('inside the submitPdDetails data');
|
||||||
|
if (this._PDtriggerForm.invalid) {
|
||||||
|
this.validateAllFormFields(this._PDtriggerForm);
|
||||||
|
this.notifier.notify('warning', 'Please Fill All Mandatory Fields.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ((formValue.lender_contact_mobile == '' || formValue.lender_contact_mobile == null) && (formValue.lender_stdcode == '' || formValue.lender_stdcode == null && formValue.lender_landline == '' || formValue.lender_landline == null)) {
|
||||||
|
this.notifier.notify('warning', 'Either Mobile or Landline Need.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (formValue.mobile_no != null && formValue.mobile_no.length != 10){
|
||||||
|
this.notifier.notify('warning', 'Please Check Applicant Mobile Number.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.disableAfterSubmit = true;
|
||||||
|
|
||||||
|
let lender_landline_no;
|
||||||
|
let applicant_landline_no;
|
||||||
|
|
||||||
|
if(!formValue.lender_stdcode || !formValue.lender_landline){
|
||||||
|
lender_landline_no = null;
|
||||||
|
}
|
||||||
|
else if(!formValue.lender_stdcode && !formValue.lender_landline){
|
||||||
|
lender_landline_no = null;
|
||||||
|
}
|
||||||
|
else if(formValue.lender_stdcode && formValue.lender_landline){
|
||||||
|
lender_landline_no = formValue.lender_stdcode + '-' + formValue.lender_landline;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
lender_landline_no = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!formValue.applicant_stdcode || !formValue.applicant_landline){
|
||||||
|
applicant_landline_no = null;
|
||||||
|
}
|
||||||
|
else if(!formValue.applicant_stdcode && !formValue.applicant_landline){
|
||||||
|
applicant_landline_no = null;
|
||||||
|
}
|
||||||
|
else if(formValue.applicant_stdcode && formValue.applicant_landline){
|
||||||
|
applicant_landline_no = formValue.applicant_stdcode + '-' + formValue.applicant_landline;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
applicant_landline_no = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let pd_details: any = {
|
||||||
|
"fk_lender_id": formValue.fk_lender_id,
|
||||||
|
"lender_applicant_id": formValue.lender_applicant_id,
|
||||||
|
"pd_branch_id": formValue.pd_branch_id,
|
||||||
|
"pd_contact_person": formValue.lender_contact_person,
|
||||||
|
"pd_contact_mobileno": formValue.lender_contact_mobile,
|
||||||
|
"pd_contact_landline": lender_landline_no,
|
||||||
|
"fk_product_id": formValue.fk_product_id,
|
||||||
|
"fk_subproduct_id": formValue.fk_product_id != 4 ? formValue.fk_subproduct_id != '' || formValue.fk_subproduct_id != 0 ? formValue.fk_subproduct_id : null : null,
|
||||||
|
"fk_pd_type": formValue.fk_pd_type,
|
||||||
|
"fk_customer_segment": formValue.fk_customer_segment,
|
||||||
|
"loan_amount": formValue.loan_amount,
|
||||||
|
"addressline1": !formValue.addresses[0].addressline1 ? null : this.titleCase.transform(formValue.addresses[0].addressline1),
|
||||||
|
"fk_city": formValue.addresses[0].fk_city,
|
||||||
|
"fk_state": formValue.addresses[0].fk_state,
|
||||||
|
"pincode": formValue.addresses[0].pincode,
|
||||||
|
"other_pincode": formValue.addresses[0].other_pincode,
|
||||||
|
"remarks": formValue.remarks,
|
||||||
|
"pd_status": status,
|
||||||
|
"fk_createdby": this._aws.getlocale(),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var pd_applicant_details: any = [];
|
||||||
|
var addresses_details: any = [];
|
||||||
|
if (formValue.applicant_name) {
|
||||||
|
pd_applicant_details.push({
|
||||||
|
"applicant_name": this.titleCase.transform(formValue.applicant_name),
|
||||||
|
"applicant_title_name": formValue.applicant_title_name,
|
||||||
|
"company_name": formValue.company_name,
|
||||||
|
"mobile_no": formValue.mobile_no,
|
||||||
|
"landline": applicant_landline_no,
|
||||||
|
"applicant_type": 1,
|
||||||
|
"relation": "",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
formValue.coapplicants.forEach((itemElement, itemIndex) => {
|
||||||
|
|
||||||
|
let coapplicant_landline_no;
|
||||||
|
|
||||||
|
if(!itemElement.coapplicant_stdcode || !itemElement.coapplicant_landline){
|
||||||
|
coapplicant_landline_no = null;
|
||||||
|
}
|
||||||
|
else if(!itemElement.coapplicant_stdcode && !itemElement.coapplicant_landline){
|
||||||
|
coapplicant_landline_no = null;
|
||||||
|
}
|
||||||
|
else if(itemElement.coapplicant_stdcode && itemElement.coapplicant_landline){
|
||||||
|
coapplicant_landline_no = formValue.coapplicant_stdcode + '-' + itemElement.applicant_landline;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
coapplicant_landline_no = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (itemElement.coapplicant_stdcode != null || itemElement.coapplicant_landline != null) {
|
||||||
|
// if (itemElement.coapplicant_stdcode != '' && itemElement.coapplicant_landline != '') {
|
||||||
|
// coapplicant_landline_no = formValue.coapplicant_stdcode + '-' + itemElement.applicant_landline;
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// coapplicant_landline_no = null;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// coapplicant_landline_no = null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
let obj1 = {
|
||||||
|
"applicant_name":this.titleCase.transform(itemElement.coapplicant_name),
|
||||||
|
"applicant_title_name": itemElement.applicant_title_name,
|
||||||
|
"company_name": itemElement.company_name,
|
||||||
|
"mobile_no":itemElement.coapplicant_mobile_no,
|
||||||
|
"landline": coapplicant_landline_no,
|
||||||
|
"applicant_type":0,
|
||||||
|
"relation": "",
|
||||||
|
}
|
||||||
|
pd_applicant_details.push(obj1)
|
||||||
|
});
|
||||||
|
|
||||||
|
if (formValue.addresses.length > 0) {
|
||||||
|
formValue.addresses.forEach((addressElement, itemIndex) => {
|
||||||
|
let addressobj = {
|
||||||
|
"addressline1": !addressElement.addressline1 ? null : this.titleCase.transform(addressElement.addressline1),
|
||||||
|
"fk_city": addressElement.fk_city,
|
||||||
|
"fk_state": addressElement.fk_state,
|
||||||
|
"pincode": addressElement.pincode,
|
||||||
|
"other_pincode": addressElement.other_pincode,
|
||||||
|
}
|
||||||
|
addresses_details.push(addressobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// docs details
|
||||||
|
let pd_form: FormData = new FormData();
|
||||||
|
|
||||||
|
for (let j = 0; j < this.totalfiles.length; j++) {
|
||||||
|
pd_form.append('pddocuments[]', <File>this.totalfiles[j])
|
||||||
|
}
|
||||||
|
|
||||||
|
//reverseFileNames=this.totalFileName.reverse();
|
||||||
|
|
||||||
|
let AllFilesObj = []
|
||||||
|
|
||||||
|
formValue.documents.forEach((element, index) => {
|
||||||
|
AllFilesObj.push(element.doc_name);
|
||||||
|
});
|
||||||
|
pd_form.append("pd_details", JSON.stringify(pd_details))
|
||||||
|
|
||||||
|
if (pd_applicant_details.length > 0) {
|
||||||
|
pd_form.append("pd_applicant_details", JSON.stringify(pd_applicant_details))
|
||||||
|
}
|
||||||
|
|
||||||
|
if(addresses_details.length>0){
|
||||||
|
pd_form.append("addresses", JSON.stringify(addresses_details));
|
||||||
|
}
|
||||||
|
|
||||||
|
pd_form.append("pd_document_titles", JSON.stringify(AllFilesObj))
|
||||||
|
|
||||||
|
if (formValue.addtional_requirements.length > 0) {
|
||||||
|
pd_form.append("addtional_requirements", JSON.stringify(formValue.addtional_requirements))
|
||||||
|
}
|
||||||
|
|
||||||
|
this._pd.addPdDetails(pd_form).subscribe(result => {
|
||||||
|
if (result.status == 200) {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.notifier.notify('success', 'PD Saved.');
|
||||||
|
this.loadPdListCompoent(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}
|
||||||
|
}, error => {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loadPdListCompoent(from: boolean) {
|
||||||
|
//alert(from);
|
||||||
|
if (from) {
|
||||||
|
// alert('if'+from);
|
||||||
|
this.router.navigate(['../../'], { relativeTo: this.route });
|
||||||
|
this.ListPdComponent.pdListLoad(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// alert(from);
|
||||||
|
this.router.navigate(['../../'], { relativeTo: this.route });
|
||||||
|
this.ListPdComponent.showListView(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
ngOnDestroy(): void {
|
||||||
|
this.ListPdComponent.showListView(true);
|
||||||
|
}
|
||||||
|
/** To Reset Popup Data */
|
||||||
|
onReset() {
|
||||||
|
this.loadFormData();
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
}
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,153 @@
|
|||||||
|
<mat-card-content>
|
||||||
|
<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>Advance 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:20%">
|
||||||
|
<mat-select multiple formControlName="pd_type" placeholder="PD Type">
|
||||||
|
<mat-option *ngFor="let type of PDType" [value]="type.pd_type_id">{{type.type_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:25%">
|
||||||
|
<mat-select multiple formControlName="pd_status" placeholder="PD Status">
|
||||||
|
<mat-option *ngFor="let status of pdStatus" [value]="status.pd_status_name">{{status.pd_status_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:20%">
|
||||||
|
<input matInput [matDatepicker]="picker" (blur)="checkDate($event)" [max]="todaydate" formControlName="pd_from_date" placeholder="Choose a From date">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:20%">
|
||||||
|
<input matInput [matDatepicker]="picker1" [min]="searchForm.get('pd_from_date').value" [max]="todaydate" formControlName="pd_to_date" placeholder="Choose a todate">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker1></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_products" placeholder="Products">
|
||||||
|
<mat-option *ngFor="let pro of PRODUCTS" [value]="pro.product_id">{{pro.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_city" placeholder="City">
|
||||||
|
<mat-option *ngFor="let city of CITY" [value]="city.city_id">{{city.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_lender" placeholder="Lender Name">
|
||||||
|
<mat-option *ngFor="let ent of ENTITY" [value]="ent.entity_id">{{ent.full_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_name" placeholder="Applicant Name">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_applicant_id" placeholder="Applicant Id">
|
||||||
|
</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>
|
||||||
|
<br/>
|
||||||
|
<mat-table [dataSource]="dataSourceTab1" matSort *ngIf="PdListData.length > 0">
|
||||||
|
|
||||||
|
<ng-container matColumnDef="PDType">
|
||||||
|
|
||||||
|
<mat-cell fxFlex.xs="20" fxFlex.sm="15" fxFlex.md="10" fxFlex.lg="10" fxFlex.xl="10" class="cell" *matCellDef="let details;" style="justify-content:flex-end">
|
||||||
|
<div [ngStyle]="{'color': '#e00201','font-weight': 'bold'}" mat-line>{{details.pd_id}}</div>
|
||||||
|
<small mat-line>{{details.pd_type_name}}</small>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Name">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<span *ngIf="details.is_child" mat-line>
|
||||||
|
<b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD - ' + details.parent_pd_id }}</b>
|
||||||
|
</span>
|
||||||
|
<br>
|
||||||
|
<span class="fontsize"> {{details.lender_applicant_id}}</span>
|
||||||
|
<span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Lenderid">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details">
|
||||||
|
<span *ngIf="details.lender_short_name" mat-line> {{details.lender_short_name}} </span>
|
||||||
|
<br>
|
||||||
|
<span *ngIf="details.product_abbr" mat-line class="fontsize"> {{details.product_abbr}}<span *ngIf="details.subproduct_abbr">/{{details.subproduct_abbr}}</span></span>
|
||||||
|
<br>
|
||||||
|
<span *ngIf="details.loan_amount" class="fontsize">
|
||||||
|
<i class="fa-1x fa fa-rupee"></i> {{details.loan_amount}}</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Address">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<span matTooltip="Initiated Date" matTooltipPosition="above">{{details.pd_date_of_initiation}}</span>
|
||||||
|
<br>
|
||||||
|
<span class="fontsize" *ngIf="details.city_name">
|
||||||
|
<i class="fa-1x fa fa-map-marker"> </i> {{details.city_name}}-{{details.pincode_id == 1 ? details.other_pincode : details.pincode }} </span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Status">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<span *ngIf="details.pd_status!='QC_COMPLETED'"> {{details.pd_status}}</span>
|
||||||
|
<span *ngIf="details.pd_status=='QC_COMPLETED'"> QC COMPLETED</span>
|
||||||
|
<br>
|
||||||
|
<span class="fontsize" *ngIf="details.pd_status!='SCHEDULED' && details.pd_status!='QC_COMPLETED'" [matTooltip]="details.pd_status | titlecase"
|
||||||
|
matTooltipPosition="above">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||||
|
</span>
|
||||||
|
<span class="fontsize" *ngIf="details.pd_status=='QC_COMPLETED'" matTooltip="QC Completed" matTooltipPosition="above">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||||
|
</span>
|
||||||
|
<span class="fontsize" *ngIf="details.pd_status=='SCHEDULED'" [matTooltip]="details.pd_status | titlecase" matTooltipPosition="above">{{details.scheduled_on}}
|
||||||
|
</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Action">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<a [style.visibility]="details.pd_status=='INITIATED' && details.encrypted_url!=null && details.encrypted_url!='' ? 'visible' : 'hidden'" [attr.href]="details.encrypted_url" target="_blank">
|
||||||
|
<button mat-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" color="primary"
|
||||||
|
matTooltip="Officer Tracking" matTooltipPosition="above">
|
||||||
|
<mat-icon>my_location</mat-icon>
|
||||||
|
</button>
|
||||||
|
</a>
|
||||||
|
<button mat-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" color="primary" (click)="viewPD(details.is_child == 0 ? details.pd_id : details.parent_pd_id)"
|
||||||
|
matTooltip="View" matTooltipPosition="above">
|
||||||
|
<mat-icon>visibility</mat-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<mat-row style="align-items: normal !important;" *matRowDef="let row; columns: displayedColumns;">
|
||||||
|
</mat-row>
|
||||||
|
</mat-table>
|
||||||
|
|
||||||
|
<!-- <ng-template #noRecord>
|
||||||
|
<div> No Record found </div>
|
||||||
|
</ng-template> -->
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
<mat-paginator *ngIf="!recordStatus" #paginator class="mat-elevation-z1" [length]="PdListData.length" [pageIndex]="pageIndex"
|
||||||
|
[pageSize]="pageSize" [pageSizeOptions]="[5, 10, 25,50, 100]" (page)="pageEvent = $event; pageChange($event)" showFirstLastButtons>
|
||||||
|
</mat-paginator>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
.ic-change:hover {
|
||||||
|
transform: scale(1.1);
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
.cell{
|
||||||
|
display:inline !important;
|
||||||
|
}
|
||||||
|
.cellhide{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.center{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
.fontsize{
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar-space {
|
||||||
|
flex: 0.01 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { UomListComponent } from './uom-list.component';
|
import { AllPdComponent } from './all-pd.component';
|
||||||
|
|
||||||
describe('UomListComponent', () => {
|
describe('AllPdComponent', () => {
|
||||||
let component: UomListComponent;
|
let component: AllPdComponent;
|
||||||
let fixture: ComponentFixture<UomListComponent>;
|
let fixture: ComponentFixture<AllPdComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ UomListComponent ]
|
declarations: [ AllPdComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(UomListComponent);
|
fixture = TestBed.createComponent(AllPdComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,223 @@
|
|||||||
|
import { Component,ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter, OnDestroy, AfterViewInit, OnChanges, SimpleChanges } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../pd-service/pd-triger.service';
|
||||||
|
import { MatPaginator, MatSort, MatTableDataSource, PageEvent } from '@angular/material';
|
||||||
|
import { FormGroup, FormBuilder } from '@angular/forms';
|
||||||
|
import { DatePipe } from '@angular/common';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-all-pd',
|
||||||
|
templateUrl: './all-pd.component.html',
|
||||||
|
styleUrls: ['./all-pd.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
export class AllPdComponent implements OnInit, OnChanges {
|
||||||
|
xpandStatus: boolean = false;
|
||||||
|
PRODUCTS:any[]=[];
|
||||||
|
ENTITY: any[]=[]
|
||||||
|
CITY: any[]=[]
|
||||||
|
PDType: any[]=[]
|
||||||
|
pdStatus: any[]=[]
|
||||||
|
searchForm:FormGroup;
|
||||||
|
pipe = new DatePipe('en-US');
|
||||||
|
private notifier: NotifierService;
|
||||||
|
recordStatus: boolean;
|
||||||
|
errorMessage:any[]=[];
|
||||||
|
tabStatus:string="ALL";
|
||||||
|
public dataLengthTab1: number;
|
||||||
|
public dataSourceTab1 = new MatTableDataSource();
|
||||||
|
displayedColumns = ['PDType','Name','Lenderid','Address','Status','Action'];
|
||||||
|
|
||||||
|
@ViewChild(MatPaginator) paginator: MatPaginator;
|
||||||
|
@ViewChild(MatSort) sort: MatSort;
|
||||||
|
|
||||||
|
@Input() bindFilterValue: string;
|
||||||
|
|
||||||
|
@Output() loadPdView = new EventEmitter<string>();
|
||||||
|
|
||||||
|
// data source variable details
|
||||||
|
PdListData:any[] = [];
|
||||||
|
|
||||||
|
// pagination variable details
|
||||||
|
length = 5;
|
||||||
|
pageIndex = 0;
|
||||||
|
pageSize = 10;
|
||||||
|
pageEvent: PageEvent;
|
||||||
|
todaydate:Date = new Date();
|
||||||
|
constructor(private _pd: PdTrigerService,private _fb:FormBuilder,notifier: NotifierService,) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
this.searchForm = this._fb.group(
|
||||||
|
{
|
||||||
|
pd_type:[null],
|
||||||
|
pd_status:[null],
|
||||||
|
pd_from_date:[null],
|
||||||
|
pd_to_date:[null],
|
||||||
|
pd_city:[null],
|
||||||
|
pd_products:[null],
|
||||||
|
pd_lender:[null],
|
||||||
|
pd_name:[null],
|
||||||
|
pd_applicant_id:[null],
|
||||||
|
});
|
||||||
|
this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.recordStatus=false;
|
||||||
|
// this.loadPDDetails();
|
||||||
|
//this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
// get changes for filter from parent componnet filter
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
let filteredText = changes.bindFilterValue.currentValue ? changes.bindFilterValue.currentValue.trim() : changes.bindFilterValue.currentValue;
|
||||||
|
filteredText = filteredText ? filteredText.toLowerCase() : filteredText;
|
||||||
|
this.dataSourceTab1.filter = filteredText;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// load inprogress pd list
|
||||||
|
|
||||||
|
loadPDDetails() {
|
||||||
|
//this._pd.getTabStatusPdDetails(this.tabStatus)
|
||||||
|
this._pd.getPdDetails()
|
||||||
|
.subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.PdListData = data.records;
|
||||||
|
this.dataLengthTab1 = data.records.length;
|
||||||
|
this.dataSourceTab1.data = this.PdListData;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.PdListData=[];
|
||||||
|
this.dataSourceTab1 = null;
|
||||||
|
this.recordStatus=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// , error => {this.errorMessage = <any> error});
|
||||||
|
,error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
pageChange(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
viewPD(pdid:string){
|
||||||
|
this.loadPdView.next(pdid);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
titleCaseWord(word:string) {
|
||||||
|
if (!word) return word;
|
||||||
|
return word[0].toUpperCase() + word.substr(1).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common Search
|
||||||
|
* sriram
|
||||||
|
*/
|
||||||
|
|
||||||
|
getcommonDropDown(): void
|
||||||
|
{
|
||||||
|
this._pd.getAllMasterDatas('PDSTATUS').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.pdStatus = res.records.filter(status=>status.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._pd.getAllMasterDatas('PDTYPE').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.PDType = res.records.filter(type=>type.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._pd.getListOfCities().subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.CITY = res.records;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._pd.getAllMasterDatas('ENTITY').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.ENTITY = res.records.filter(ent=>ent.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._pd.getAllMasterDatas('PRODUCTS').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.PRODUCTS = res.records.filter(pro=>pro.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
checkDate(e)
|
||||||
|
{
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
searchItem()
|
||||||
|
{
|
||||||
|
|
||||||
|
if(this.searchForm.value.pd_type !=null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
this.searchForm.value.pd_type = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.searchForm.value.pd_status !=null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
this.searchForm.value.pd_status = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.searchForm.value.pd_from_date = this.pipe.transform(this.searchForm.value.pd_from_date,'yyyy-MM-dd');
|
||||||
|
this.searchForm.value.pd_to_date = this.pipe.transform(this.searchForm.value.pd_to_date,'yyyy-MM-dd');
|
||||||
|
// console.log(JSON.stringify(this.searchForm.value));
|
||||||
|
this._pd.overAllSearchFormDetails(this.searchForm.value).subscribe(res=>
|
||||||
|
{
|
||||||
|
this.xpandStatus = false;
|
||||||
|
if(res['dataStatus']==true)
|
||||||
|
{
|
||||||
|
this.dataSourceTab1.data = res['records'];
|
||||||
|
// console.log('records',res['records']);
|
||||||
|
this.dataSourceTab1.paginator = this.paginator;
|
||||||
|
}else{
|
||||||
|
this.notifier.notify('warning', 'No Records Found !');
|
||||||
|
this.dataSourceTab1.paginator['length'] = 0;
|
||||||
|
this.dataSourceTab1.paginator['pageIndex'] = 0;
|
||||||
|
this.dataSourceTab1.data = [];
|
||||||
|
// console.log('records-records',res['records']);
|
||||||
|
}
|
||||||
|
},error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Went Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onReset(){
|
||||||
|
this.searchForm.reset();
|
||||||
|
this.loadPDDetails();
|
||||||
|
this.xpandStatus = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.dataSourceTab1.paginator = this.paginator;
|
||||||
|
this.dataSourceTab1.sort = this.sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
<mat-card-content>
|
||||||
|
|
||||||
|
<mat-expansion-panel [(expanded)]="xpandStatus">
|
||||||
|
<mat-expansion-panel-header>
|
||||||
|
<mat-panel-title class="text-xs-left">
|
||||||
|
<!-- <h6 class="mt-0"><mat-icon>filter_list</mat-icon> Filter</h6> -->
|
||||||
|
<mat-toolbar-row>
|
||||||
|
<mat-icon>filter_list</mat-icon>
|
||||||
|
<span class="toolbar-space"></span>
|
||||||
|
<span>Advance 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:30%">
|
||||||
|
<mat-select multiple formControlName="pd_type" placeholder="PD Type">
|
||||||
|
<mat-option *ngFor="let type of PDType" [value]="type.pd_type_id">{{type.type_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<!-- <mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_status" placeholder="PD Status">
|
||||||
|
<mat-option *ngFor="let status of pdStatus" [value]="status.pd_status_name">{{status.pd_status_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field> -->
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput [max]="todaydate" [matDatepicker]="picker" (blur)="checkDate($event)" formControlName="pd_from_date" placeholder="Choose a From date">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput [max]="todaydate" [matDatepicker]="picker1" [min]="searchForm.get('pd_from_date').value" formControlName="pd_to_date" placeholder="Choose a todate">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker1></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_products" placeholder="Products">
|
||||||
|
<mat-option *ngFor="let pro of PRODUCTS" [value]="pro.product_id">{{pro.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_city" placeholder="City">
|
||||||
|
<mat-option *ngFor="let city of CITY" [value]="city.city_id">{{city.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_lender" placeholder="Lender Name">
|
||||||
|
<mat-option *ngFor="let ent of ENTITY" [value]="ent.entity_id">{{ent.full_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_name" placeholder="Applicant Name">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_applicant_id" placeholder="Applicant Id">
|
||||||
|
</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>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<mat-table [dataSource]="dataSourceTab4" matSort *ngIf="completedPdListData.length > 0" >
|
||||||
|
|
||||||
|
<ng-container matColumnDef="PDType">
|
||||||
|
<mat-cell fxFlex.xs="20" fxFlex.sm="15" fxFlex.md="10" fxFlex.lg="10" fxFlex.xl="10" class="cell" *matCellDef="let details;" style="justify-content:flex-end">
|
||||||
|
<div [ngStyle]="{'color': '#e00201','font-weight': 'bold'}" mat-line>{{details.pd_id}}</div>
|
||||||
|
<small mat-line>{{details.pd_type_name}}</small>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Name">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<!-- <span *ngIf="details.applicant_name" mat-line><b>{{details.applicant_name}}</b></span><br> -->
|
||||||
|
<span *ngIf="details.is_child" mat-line>
|
||||||
|
<b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD - ' + details.parent_pd_id }}</b>
|
||||||
|
</span><br>
|
||||||
|
<span class="fontsize"> {{details.lender_applicant_id}}</span> <span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Lenderid">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details">
|
||||||
|
<span *ngIf="details.lender_short_name" mat-line> {{details.lender_short_name}} </span><br>
|
||||||
|
<span *ngIf="details.product_abbr" mat-line class="fontsize"> {{details.product_abbr}}<span *ngIf="details.subproduct_abbr">/{{details.subproduct_abbr}}</span></span> <br>
|
||||||
|
<span *ngIf="details.loan_amount" class="fontsize"><i class="fa-1x fa fa-rupee"></i> {{details.loan_amount}}</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Address">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<span matTooltip="Initiated Date" matTooltipPosition="above">{{details.pd_date_of_initiation}}</span><br>
|
||||||
|
<span class="fontsize" *ngIf="details.city_name"> <i class="fa-1x fa fa-map-marker"> </i> {{details.city_name}}-{{details.pincode_id == 1 ? details.other_pincode : details.pincode }} </span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Status">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<span> {{details.pd_status}}</span><br>
|
||||||
|
<span class="fontsize" [matTooltip]="details.pd_status | titlecase" >{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||||
|
</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Action">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<button mat-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" (click)="viewPD(details.is_child == 0 ? details.pd_id : details.parent_pd_id)" matTooltip="View"
|
||||||
|
matTooltipPosition="above" color="primary"><mat-icon>visibility</mat-icon></button>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<mat-row style="align-items: normal !important;" *matRowDef="let row; columns: displayedColumns;">
|
||||||
|
</mat-row>
|
||||||
|
</mat-table>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
<mat-paginator *ngIf="!recordStatus" #paginator class="mat-elevation-z1" [length]="completedPdListData.length" [pageIndex]="pageIndex" [pageSize]="pageSize"
|
||||||
|
[pageSizeOptions]="[5, 10, 25,50, 100]" (page)="pageEvent = $event; pageChange($event)" showFirstLastButtons>
|
||||||
|
</mat-paginator>
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
.ic-change:hover {
|
||||||
|
transform: scale(1.1);
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
.cell{
|
||||||
|
display:inline !important;
|
||||||
|
}
|
||||||
|
.cellhide{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.center{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
.fontsize{
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
.toolbar-space {
|
||||||
|
flex: 0.01 0 auto;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { ProductListComponent } from './product-list.component';
|
import { CompletedPdComponent } from './completed-pd.component';
|
||||||
|
|
||||||
describe('ProductListComponent', () => {
|
describe('CompletedPdComponent', () => {
|
||||||
let component: ProductListComponent;
|
let component: CompletedPdComponent;
|
||||||
let fixture: ComponentFixture<ProductListComponent>;
|
let fixture: ComponentFixture<CompletedPdComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ ProductListComponent ]
|
declarations: [ CompletedPdComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(ProductListComponent);
|
fixture = TestBed.createComponent(CompletedPdComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,236 @@
|
|||||||
|
import { Component,ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter, OnDestroy, AfterViewInit, OnChanges, SimpleChanges } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../pd-service/pd-triger.service';
|
||||||
|
import { MatPaginator, MatSort, MatTableDataSource, PageEvent } from '@angular/material';
|
||||||
|
import { FormGroup, FormBuilder } from '@angular/forms';
|
||||||
|
import { DatePipe } from '@angular/common';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-completed-pd',
|
||||||
|
templateUrl: './completed-pd.component.html',
|
||||||
|
styleUrls: ['./completed-pd.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
export class CompletedPdComponent implements OnInit, OnChanges {
|
||||||
|
xpandStatus: boolean = false;
|
||||||
|
PRODUCTS: any[]=[];
|
||||||
|
CITY: any[]=[];
|
||||||
|
ENTITY: any[]=[];
|
||||||
|
PDType: any[]=[];
|
||||||
|
pdStatus: any[]=[];
|
||||||
|
searchForm:FormGroup;
|
||||||
|
pipe = new DatePipe('en-US');
|
||||||
|
private notifier: NotifierService;
|
||||||
|
recordStatus: boolean;
|
||||||
|
errorMessage:any[]=[];
|
||||||
|
tabStatus:string="COMPLETED";
|
||||||
|
public dataLengthTab4: number;
|
||||||
|
public dataSourceTab4 = new MatTableDataSource();
|
||||||
|
|
||||||
|
displayedColumns = ['PDType','Name','Lenderid','Address','Status','Action'];
|
||||||
|
|
||||||
|
@ViewChild(MatPaginator) paginator: MatPaginator;
|
||||||
|
@ViewChild(MatSort) sort: MatSort;
|
||||||
|
|
||||||
|
@Input() bindFilterValue: string;
|
||||||
|
@Output() loadPdView = new EventEmitter<string>();
|
||||||
|
|
||||||
|
// data source variable details
|
||||||
|
completedPdListData:any[] = [];
|
||||||
|
|
||||||
|
// pagination variable details
|
||||||
|
length = 5;
|
||||||
|
pageIndex = 0;
|
||||||
|
pageSize = 10;
|
||||||
|
pageEvent: PageEvent;
|
||||||
|
todaydate:Date = new Date();
|
||||||
|
|
||||||
|
constructor(private _pd: PdTrigerService,public _fb:FormBuilder,notifier: NotifierService,) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
|
||||||
|
this.searchForm = this._fb.group(
|
||||||
|
{
|
||||||
|
pd_type:[null],
|
||||||
|
pd_status:['COMPLETED'],
|
||||||
|
pd_from_date:[null],
|
||||||
|
pd_to_date:[null],
|
||||||
|
pd_city:[null],
|
||||||
|
pd_products:[null],
|
||||||
|
pd_lender:[null],
|
||||||
|
pd_name:[null],
|
||||||
|
pd_applicant_id:[null],
|
||||||
|
});
|
||||||
|
this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.recordStatus=false;
|
||||||
|
// this.loadPDDetails();
|
||||||
|
// this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get changes for filter from parent componnet filter
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
// let filteredText = changes.bindFilterValue.currentValue;
|
||||||
|
let filteredText = changes.bindFilterValue.currentValue ? changes.bindFilterValue.currentValue.trim() : changes.bindFilterValue.currentValue;
|
||||||
|
// filteredText = filteredText ? filteredText.trim() : filteredText;
|
||||||
|
filteredText = filteredText ? filteredText.toLowerCase() : filteredText;
|
||||||
|
this.dataSourceTab4.filter = filteredText;
|
||||||
|
}
|
||||||
|
|
||||||
|
// load inprogress pd list
|
||||||
|
|
||||||
|
loadPDDetails() {
|
||||||
|
this._pd.getTabStatusPdDetails(this.tabStatus)
|
||||||
|
.subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.completedPdListData = data.records;
|
||||||
|
this.dataLengthTab4 = data.records.length;
|
||||||
|
this.dataSourceTab4.data = this.completedPdListData;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.completedPdListData=[];
|
||||||
|
this.dataLengthTab4= null;
|
||||||
|
this.recordStatus=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// , error => this.errorMessage = <any> error);
|
||||||
|
,error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
pageChange(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
viewPD(pdid:string){
|
||||||
|
this.loadPdView.next(pdid);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
titleCaseWord(word:string) {
|
||||||
|
if (!word) return word;
|
||||||
|
return word[0].toUpperCase() + word.substr(1).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common Search
|
||||||
|
* sriram
|
||||||
|
*/
|
||||||
|
|
||||||
|
getcommonDropDown(): void
|
||||||
|
{
|
||||||
|
this._pd.getAllMasterDatas('PDSTATUS').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.pdStatus = res.records.filter(status=>status.isactive==1 && status.pd_status_name==this.tabStatus);
|
||||||
|
// this.searchForm.controls['pd_status'].setValue(this.pdStatus[0]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._pd.getAllMasterDatas('PDTYPE').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.PDType = res.records.filter(type=>type.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// this._pd.getAllMasterDatas('CITY').subscribe(res=>
|
||||||
|
// {
|
||||||
|
// if(res.dataStatus==true)
|
||||||
|
// {
|
||||||
|
// this.CITY = res.records.filter(city=>city.isactive==1);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
this._pd.getListOfCities().subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.CITY = res.records;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._pd.getAllMasterDatas('ENTITY').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.ENTITY = res.records.filter(ent=>ent.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._pd.getAllMasterDatas('PRODUCTS').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.PRODUCTS = res.records.filter(pro=>pro.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
checkDate(e)
|
||||||
|
{
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
searchItem()
|
||||||
|
{
|
||||||
|
|
||||||
|
if(this.searchForm.value.pd_type !=null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
this.searchForm.value.pd_type = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.searchForm.value.pd_status !=null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
this.searchForm.value.pd_status = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.searchForm.value.pd_from_date = this.pipe.transform(this.searchForm.value.pd_from_date,'yyyy-MM-dd');
|
||||||
|
this.searchForm.value.pd_to_date = this.pipe.transform(this.searchForm.value.pd_to_date,'yyyy-MM-dd');
|
||||||
|
|
||||||
|
this._pd.overAllSearchFormDetails(this.searchForm.value).subscribe(res=>
|
||||||
|
{
|
||||||
|
this.xpandStatus = false;
|
||||||
|
|
||||||
|
if(res['dataStatus']==true)
|
||||||
|
{
|
||||||
|
this.dataSourceTab4 = res['records'];
|
||||||
|
this.dataSourceTab4.paginator = this.paginator;
|
||||||
|
}else{
|
||||||
|
this.notifier.notify('warning', 'No Records Found !');
|
||||||
|
|
||||||
|
this.dataSourceTab4.paginator['length'] = 0;
|
||||||
|
this.dataSourceTab4.paginator['pageIndex'] = 0;
|
||||||
|
this.dataSourceTab4.data = [];
|
||||||
|
}
|
||||||
|
},error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Went Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onReset(){
|
||||||
|
this.searchForm.reset();
|
||||||
|
this.loadPDDetails();
|
||||||
|
this.xpandStatus = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.dataSourceTab4.paginator = this.paginator;
|
||||||
|
this.dataSourceTab4.sort = this.sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,120 @@
|
|||||||
|
<form [formGroup]="_EditApplicantForm">
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
|
||||||
|
</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>
|
||||||
|
|
||||||
|
<mat-dialog-content>
|
||||||
|
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>Applicant 1</mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content>
|
||||||
|
<mat-form-field style="width: 15%">
|
||||||
|
<mat-select placeholder="Title" formControlName="applicant_title_name">
|
||||||
|
<mat-option *ngFor="let tl of titleList" [value]="tl.title_id">
|
||||||
|
{{tl.name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 65%">
|
||||||
|
<!-- <input matInput placeholder="Name of Individual Applicant" formControlName="applicant_name"
|
||||||
|
[value]="pdMainApplicant.applicant_name.value | titlecase" required> -->
|
||||||
|
<input matInput placeholder="Name of Individual Applicant" formControlName="applicant_name" required>
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 40%" *ngIf="CSAbbr != 'SE-RI'">
|
||||||
|
<input matInput placeholder="Company / Firm Name" formControlName="company_name" type="text">
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 40%">
|
||||||
|
<input matInput placeholder="Mobile Number" formControlName="mobile_no" type="text" maxlength="10" ForMobileNumbers required>
|
||||||
|
<mat-error *ngIf="pdMainApplicant.mobile_no.hasError('maxlength') || pdMainApplicant.mobile_no.hasError('minlength')">Enter Valid Mobile Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 15%">
|
||||||
|
<input matInput placeholder="STD Code" formControlName="stdcode" type="text" maxlength="5" ForMobileNumbers>
|
||||||
|
<!-- <span matPrefix>+91</span> -->
|
||||||
|
<mat-error *ngIf="pdMainApplicant.stdcode.hasError('maxlength') || pdMainApplicant.stdcode.hasError('minlength')">Enter Valid STD Code. </mat-error>
|
||||||
|
</mat-form-field> -
|
||||||
|
<mat-form-field style="width: 60%">
|
||||||
|
<input matInput placeholder="LandLine Number" formControlName="landline" maxlength="8" type="text" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="pdMainApplicant.landline.hasError('maxlength') || pdMainApplicant.landline.hasError('minlength')">Enter Valid Landline Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<mat-card formArrayName="coApplicantItems" *ngFor="let coDetails of pdCoApplicant.controls; let i = index;">
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>Applicant {{i+2}}</mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content [formGroupName]="i">
|
||||||
|
<mat-form-field style="width: 15%">
|
||||||
|
<mat-select placeholder="Title" formControlName="applicant_title_name">
|
||||||
|
<mat-option *ngFor="let tl of titleList" [value]="tl.title_id">
|
||||||
|
{{tl.name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 65%">
|
||||||
|
<input matInput placeholder="Name of Individual Applicant" formControlName="coapplicantName" type="text" required>
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 40%" *ngIf="CSAbbr != 'SE-RI'">
|
||||||
|
<input matInput placeholder="Company / Firm Name" formControlName="company_name" type="text">
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 40%">
|
||||||
|
<input matInput placeholder="Mobile Number" formControlName="coapplicant_mobile_no" type="text" maxlength="10" minlength="10" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf=" coDetails['controls'].coapplicant_mobile_no.hasError('maxlength') || coDetails['controls'].coapplicant_mobile_no.hasError('minlength')">Enter Valid Mobile Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<!-- <mat-form-field style="width: 40%" >
|
||||||
|
<input matInput placeholder="LandLine Number" formControlName="coapplicant_landline" type="text" OnlyNumber>
|
||||||
|
<mat-error *ngIf=" coDetails['controls'].coapplicant_landline.hasError('maxlength') || coDetails['controls'].coapplicant_landline.hasError('minlength')">Enter Valid Phone Number. </mat-error>
|
||||||
|
</mat-form-field> -->
|
||||||
|
<mat-form-field style="width: 15%">
|
||||||
|
<input matInput placeholder="STD Code" formControlName="coapplicant_stdcode" type="text" maxlength="5" ForMobileNumbers>
|
||||||
|
<!-- <span matPrefix>+91</span> -->
|
||||||
|
<mat-error *ngIf="coDetails['controls'].coapplicant_stdcode.hasError('maxlength') || coDetails['controls'].coapplicant_stdcode.hasError('minlength')">Enter Valid STD Number. </mat-error>
|
||||||
|
</mat-form-field> -
|
||||||
|
<mat-form-field style="width: 60%">
|
||||||
|
<input matInput placeholder="LandLine Number" formControlName="coapplicant_landline" type="text" maxlength="8" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="coDetails['controls'].coapplicant_landline.hasError('maxlength') || coDetails['controls'].coapplicant_landline.hasError('minlength')">Enter Valid Landline Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
<!-- <mat-form-field style="width: 82%">
|
||||||
|
|
||||||
|
<mat-select placeholder="Relationship With Main Applicant" formControlName="relationship">
|
||||||
|
<mat-option>Select</mat-option>
|
||||||
|
<mat-option *ngFor="let rel of relationShipList" [value]="rel.relationship_id" >
|
||||||
|
{{rel.name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field> -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1" matTooltip="Add More Co-Applicant" matTooltipPosition="above" color="primary" type="button" (click)="addCoApplicant(emptyData)"><mat-icon>add</mat-icon></button>
|
||||||
|
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="updatePdApplicant(_EditApplicantForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<!-- <notifier-container></notifier-container> -->
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
// padding: 10px !important;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { CompanyListComponent } from './company-list.component';
|
import { EditPdApplicantComponent } from './edit-pd-applicant.component';
|
||||||
|
|
||||||
describe('CompanyListComponent', () => {
|
describe('EditPdApplicantComponent', () => {
|
||||||
let component: CompanyListComponent;
|
let component: EditPdApplicantComponent;
|
||||||
let fixture: ComponentFixture<CompanyListComponent>;
|
let fixture: ComponentFixture<EditPdApplicantComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ CompanyListComponent ]
|
declarations: [ EditPdApplicantComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(CompanyListComponent);
|
fixture = TestBed.createComponent(EditPdApplicantComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,326 @@
|
|||||||
|
import { Component, OnInit,ViewEncapsulation, Inject } from '@angular/core';
|
||||||
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { CustomValidators } from 'ng2-validation';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { PdTrigerService } from '../../../pd-service/pd-triger.service';
|
||||||
|
import { TitleCasePipe } from '@angular/common';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-edit-pd-applicant',
|
||||||
|
templateUrl: './edit-pd-applicant.component.html',
|
||||||
|
styleUrls: ['./edit-pd-applicant.component.scss'],
|
||||||
|
providers:[TitleCasePipe],
|
||||||
|
encapsulation: ViewEncapsulation.None,
|
||||||
|
})
|
||||||
|
export class EditPdApplicantComponent implements OnInit {
|
||||||
|
public pageTitle: string = "Applicant Details";
|
||||||
|
errorMessage: any;
|
||||||
|
public _EditApplicantForm:FormGroup;
|
||||||
|
public notifier: NotifierService;
|
||||||
|
mainApplicantData: any[];
|
||||||
|
coApplicantData: any[];
|
||||||
|
coApplicantItems:FormArray;
|
||||||
|
emptyData:any;
|
||||||
|
relationShipList:any;
|
||||||
|
titleList: any;
|
||||||
|
CSAbbr:any;
|
||||||
|
disableAfterSubmit: boolean;
|
||||||
|
|
||||||
|
constructor(private _fb: FormBuilder,
|
||||||
|
private _pd: PdTrigerService, notifier: NotifierService, private dialogRef: MatDialogRef<EditPdApplicantComponent>,
|
||||||
|
@Inject(MAT_DIALOG_DATA) public data: any,private titleCase : TitleCasePipe) {
|
||||||
|
|
||||||
|
this.notifier=notifier;
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.CSAbbr = this.data.SegmentAbbr != '' ? this.data.SegmentAbbr != null ? this.data.SegmentAbbr : '' :'' ;
|
||||||
|
if(this.data.records.length>0){
|
||||||
|
this.mainApplicantData= this.data.records.filter(item => item.applicant_type == 1);
|
||||||
|
this.coApplicantData= this.data.records.filter(item => item.applicant_type == 0);
|
||||||
|
this.loadApplicantFormData();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.loadEmptyFormData()
|
||||||
|
}
|
||||||
|
this.getRelationMaster();
|
||||||
|
this.getTitleMaster();
|
||||||
|
|
||||||
|
}
|
||||||
|
loadEmptyFormData() {
|
||||||
|
this._EditApplicantForm = this._fb.group({
|
||||||
|
fk_applicant_primary_id: [null],
|
||||||
|
applicant_name: [null, Validators.compose([Validators.required])],
|
||||||
|
mobile_no: [null, Validators.compose([Validators.minLength(10),Validators.maxLength(12)])],
|
||||||
|
stdcode: [null, Validators.compose([Validators.minLength(3),Validators.maxLength(5)])],
|
||||||
|
landline: [null, Validators.compose([Validators.minLength(6),Validators.maxLength(8)])],
|
||||||
|
company_name: [null],
|
||||||
|
applicant_type: [1],
|
||||||
|
coApplicantItems: this._fb.array([]),
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
loadApplicantFormData() {
|
||||||
|
let stdcode;
|
||||||
|
let landline;
|
||||||
|
if(this.mainApplicantData[0].landline != null){
|
||||||
|
let stdcodesearch = this.mainApplicantData[0].landline.search("-");
|
||||||
|
stdcode = this.mainApplicantData[0].landline.substr(0,stdcodesearch) ;
|
||||||
|
landline = this.mainApplicantData[0].landline.substr(+stdcodesearch + 1,8) ;
|
||||||
|
}else{
|
||||||
|
stdcode = '';
|
||||||
|
landline = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
this._EditApplicantForm = this._fb.group({
|
||||||
|
fk_applicant_primary_id: [this.mainApplicantData[0].pd_co_applicant_id],
|
||||||
|
applicant_name: [this.titleCase.transform(this.mainApplicantData[0].applicant_name), Validators.compose([Validators.required])],
|
||||||
|
mobile_no: [this.mainApplicantData[0].mobile_no, Validators.compose([Validators.minLength(10),Validators.maxLength(12)])],
|
||||||
|
stdcode: [stdcode, Validators.compose([Validators.minLength(3),Validators.maxLength(5)])],
|
||||||
|
landline: [landline, Validators.compose([Validators.minLength(6),Validators.maxLength(8)])],
|
||||||
|
company_name: [this.mainApplicantData[0].company_name],
|
||||||
|
applicant_type: [this.mainApplicantData[0].applicant_type, Validators.compose([Validators.required])],
|
||||||
|
applicant_title_name: [this.mainApplicantData[0].applicant_title_name, Validators.compose([Validators.required])],
|
||||||
|
|
||||||
|
coApplicantItems: this._fb.array([]),
|
||||||
|
});
|
||||||
|
// bind dynamic co applicant data
|
||||||
|
if(this.coApplicantData.length > 0){
|
||||||
|
for(let value of this.coApplicantData){
|
||||||
|
this.addCoApplicant(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
createItem(listData): FormGroup {
|
||||||
|
if(listData){
|
||||||
|
let stdcode;
|
||||||
|
let landline;
|
||||||
|
if(listData.landline != null){
|
||||||
|
let stdcodesearch = listData.landline.search("-");
|
||||||
|
stdcode = listData.landline.substr(0,stdcodesearch);
|
||||||
|
landline = listData.landline.substr(+stdcodesearch + 1,8);}
|
||||||
|
else{
|
||||||
|
stdcode = '';
|
||||||
|
landline = '';
|
||||||
|
}
|
||||||
|
return this._fb.group({
|
||||||
|
label: ['Co Applicant'],
|
||||||
|
fk_applicant_primary_id: [listData.pd_co_applicant_id],
|
||||||
|
applicant_title_name: [listData.applicant_title_name, Validators.compose([Validators.required])],
|
||||||
|
coapplicantName: [this.titleCase.transform(listData.applicant_name), Validators.compose([Validators.required])],
|
||||||
|
coapplicant_mobile_no: [listData.mobile_no,Validators.compose([Validators.minLength(10),Validators.maxLength(12),Validators.pattern('^[0-9]*$')])],
|
||||||
|
coapplicant_stdcode: [stdcode, Validators.compose([Validators.minLength(3),Validators.maxLength(5)])],
|
||||||
|
// landline: [landline, Validators.compose([Validators.minLength(6),Validators.maxLength(8)])],
|
||||||
|
coapplicant_landline: [landline,Validators.compose([Validators.minLength(6),Validators.maxLength(8)])],
|
||||||
|
// relationship: [listData.relation],
|
||||||
|
applicant_type: [listData.applicant_type, Validators.compose([Validators.required])],
|
||||||
|
company_name: [listData.company_name],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return this._fb.group({
|
||||||
|
label: ['Co Applicant'],
|
||||||
|
fk_applicant_primary_id: [null],
|
||||||
|
applicant_title_name: [null, Validators.compose([Validators.required])],
|
||||||
|
coapplicantName: [null, Validators.compose([Validators.required])],
|
||||||
|
coapplicant_mobile_no: [null, Validators.compose([Validators.minLength(10),Validators.maxLength(12),Validators.pattern('^[0-9]*$')])],
|
||||||
|
coapplicant_stdcode: [null, Validators.compose([Validators.minLength(3),Validators.maxLength(5)])],
|
||||||
|
coapplicant_landline: [null,Validators.compose([Validators.minLength(6),Validators.maxLength(8)])],
|
||||||
|
//coapplicant_landline: [null, Validators.compose([Validators.minLength(8),Validators.maxLength(12)])],
|
||||||
|
// relationship: [null],
|
||||||
|
applicant_type: [0],
|
||||||
|
company_name: [null],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
addCoApplicant(listData) {
|
||||||
|
if(this._EditApplicantForm.valid){
|
||||||
|
this.coApplicantItems = this._EditApplicantForm.get('coApplicantItems') as FormArray;
|
||||||
|
this.coApplicantItems.push(this.createItem(listData));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
get pdMainApplicant() { return this._EditApplicantForm.controls; }
|
||||||
|
get pdCoApplicant() { return this._EditApplicantForm.get('coApplicantItems') as FormArray; }
|
||||||
|
updatePdApplicant(formValue: any) {
|
||||||
|
if(this._EditApplicantForm.invalid) {
|
||||||
|
this.validateAllFormFields(this._EditApplicantForm);
|
||||||
|
this.notifier.notify('warning', 'Please Fill All Mandatory Fields.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if((formValue.mobile_no == '') && (formValue.stdcode == '' || formValue.landline == '')){
|
||||||
|
this.notifier.notify('warning', 'Either Mobile or Landline Need.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if(formValue.mobile_no.length != 10){
|
||||||
|
this.notifier.notify('warning', 'Please Check Applicant Mobile Number.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
let concat_landline1
|
||||||
|
// if(formValue.stdcode != null && formValue.landline != null){
|
||||||
|
// if(formValue.stdcode == '' && formValue.landline == ''){
|
||||||
|
// concat_landline1 = null;
|
||||||
|
// }else {
|
||||||
|
// let std = formValue.stdcode == '' ? '' : formValue.stdcode;
|
||||||
|
// let landline = formValue.landline == '' ? '' : formValue.landline;
|
||||||
|
// concat_landline1 = std+'-'+landline;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else if(formValue.stdcode == '' && formValue.landline == ''){
|
||||||
|
// concat_landline1 = null;
|
||||||
|
// }else{
|
||||||
|
// concat_landline1 = null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
if(!formValue.stdcode || !formValue.landline){
|
||||||
|
concat_landline1 = null;
|
||||||
|
}
|
||||||
|
else if(!formValue.stdcode && !formValue.landline){
|
||||||
|
concat_landline1 = null;
|
||||||
|
}
|
||||||
|
else if(formValue.stdcode && formValue.landline){
|
||||||
|
let std = formValue.stdcode == '' ? '' : formValue.stdcode;
|
||||||
|
let landline = formValue.landline == '' ? '' : formValue.landline;
|
||||||
|
concat_landline1 = std+'-'+landline;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
concat_landline1 = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let pd_applicant_details : any=[{
|
||||||
|
"fk_pd_id": this.data.pdID,
|
||||||
|
"pd_co_applicant_id": formValue.fk_applicant_primary_id,
|
||||||
|
"applicant_name":this.titleCase.transform(formValue.applicant_name),
|
||||||
|
"company_name":formValue.company_name,
|
||||||
|
"mobile_no":formValue.mobile_no,
|
||||||
|
"landline":concat_landline1,
|
||||||
|
"applicant_type":formValue.applicant_type,
|
||||||
|
// "relation":formValue.relationship,
|
||||||
|
"applicant_title_name": formValue.applicant_title_name,
|
||||||
|
"isactive":1
|
||||||
|
}];
|
||||||
|
formValue.coApplicantItems.forEach((itemElement, itemIndex) => {
|
||||||
|
|
||||||
|
let concat_landline
|
||||||
|
// if(itemElement.coapplicant_stdcode != null && itemElement.coapplicant_landline != null){
|
||||||
|
// if(itemElement.coapplicant_stdcode == '' && itemElement.coapplicant_landline == ''){
|
||||||
|
// concat_landline = null;
|
||||||
|
// }else{
|
||||||
|
// let std = itemElement.coapplicant_stdcode == '' ? '' : itemElement.coapplicant_stdcode;
|
||||||
|
// let landline = itemElement.coapplicant_landline == '' ? '' : itemElement.coapplicant_landline;
|
||||||
|
// concat_landline = std+'-'+landline;
|
||||||
|
// }
|
||||||
|
// }else if(itemElement.coapplicant_stdcode == '' && itemElement.coapplicant_landline == ''){
|
||||||
|
// concat_landline = null;
|
||||||
|
// }else{
|
||||||
|
// concat_landline = null;
|
||||||
|
// }
|
||||||
|
if(!itemElement.coapplicant_stdcode || !itemElement.coapplicant_landline){
|
||||||
|
concat_landline = null;
|
||||||
|
}
|
||||||
|
else if(!itemElement.coapplicant_stdcode && !itemElement.coapplicant_landline){
|
||||||
|
concat_landline = null;
|
||||||
|
}
|
||||||
|
else if(itemElement.coapplicant_stdcode && itemElement.coapplicant_landline){
|
||||||
|
let std = itemElement.coapplicant_stdcode == '' ? '' : itemElement.coapplicant_stdcode;
|
||||||
|
let landline = itemElement.coapplicant_landline == '' ? '' : itemElement.coapplicant_landline;
|
||||||
|
concat_landline = std+'-'+landline;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
concat_landline = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let obj1 = {
|
||||||
|
"fk_pd_id": this.data.pdID,
|
||||||
|
"pd_co_applicant_id": itemElement.fk_applicant_primary_id,
|
||||||
|
"applicant_title_name":itemElement.applicant_title_name,
|
||||||
|
"applicant_name":this.titleCase.transform(itemElement.coapplicantName),
|
||||||
|
// "relation":itemElement.relationship,
|
||||||
|
"mobile_no":itemElement.coapplicant_mobile_no,
|
||||||
|
"landline":concat_landline,
|
||||||
|
"applicant_type":itemElement.applicant_type,
|
||||||
|
"company_name":itemElement.company_name,
|
||||||
|
"isactive":1
|
||||||
|
}
|
||||||
|
pd_applicant_details.push(obj1)
|
||||||
|
});
|
||||||
|
this.disableAfterSubmit = true;
|
||||||
|
this._pd.updatePdApplicant(pd_applicant_details).subscribe(result => {
|
||||||
|
if (result.status == 200) {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.notifier.notify('success', 'PD Details Updated.');
|
||||||
|
this.dialogRef.close();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}
|
||||||
|
}, error => {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// get relation master details
|
||||||
|
getRelationMaster(){
|
||||||
|
let relation ="RELATIONSHIPS";
|
||||||
|
this._pd.getAllMasterDatas(relation).subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.relationShipList=data.records;
|
||||||
|
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any> error);
|
||||||
|
}
|
||||||
|
// get title master
|
||||||
|
getTitleMaster() {
|
||||||
|
let relation ="TITLES";
|
||||||
|
this._pd.getAllMasterDatas(relation).subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.titleList=data.records.filter(val=>val.isactive==1);
|
||||||
|
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any> error);
|
||||||
|
|
||||||
|
}
|
||||||
|
/** To Reset Popup Data */
|
||||||
|
onReset() {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
if(this.data.records.length>0){
|
||||||
|
this.loadApplicantFormData();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.loadEmptyFormData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** For Popup Close Button */
|
||||||
|
closeEditComponent(): void {
|
||||||
|
this.dialogRef.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,233 @@
|
|||||||
|
<form [formGroup]="_EditPDtriggerForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</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>
|
||||||
|
|
||||||
|
<mat-dialog-content>
|
||||||
|
|
||||||
|
<mat-card>
|
||||||
|
<!-- <mat-card-header>
|
||||||
|
<mat-card-title>PD Details</mat-card-title>
|
||||||
|
</mat-card-header> -->
|
||||||
|
<mat-card-content>
|
||||||
|
<mat-form-field style="width: 29%">
|
||||||
|
<mat-select placeholder="Lender Name" formControlName="fk_lender_id">
|
||||||
|
<mat-option>
|
||||||
|
Select
|
||||||
|
</mat-option>
|
||||||
|
<!-- <mat-option *ngFor="let LL of lenderList" [value]="LL.entity_id" > -->
|
||||||
|
<mat-option (click)="selectedLender(LL)" *ngFor="let LL of lenderList"
|
||||||
|
[value]="LL.entity_id">
|
||||||
|
{{LL.full_name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_lender_id.hasError('required')" class="mat-text-warn">Lender Name Required.</mat-error> -->
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 29%">
|
||||||
|
<input matInput placeholder=" Loan Application ID" formControlName="lender_applicant_id"
|
||||||
|
type="text" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 29%">
|
||||||
|
<input matInput placeholder="Lender Contact Person" formControlName="pd_contact_person"
|
||||||
|
type="text" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 29%">
|
||||||
|
<input matInput placeholder="Lender Mobile Number" formControlName="pd_contact_mobileno"
|
||||||
|
type="text" maxlength="10" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="pdMain.pd_contact_mobileno.hasError('pattern') || pdMain.pd_contact_mobileno.hasError('maxlength') || pdMain.pd_contact_mobileno.hasError('minlength')">Enter
|
||||||
|
Valid Mobile Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 10%">
|
||||||
|
<input matInput placeholder="STD Code" formControlName="lender_stdcode" type="text" maxlength="5"
|
||||||
|
ForMobileNumbers>
|
||||||
|
<!-- <span matPrefix>+91</span> -->
|
||||||
|
<mat-error *ngIf="pdMain.lender_stdcode.hasError('maxlength') || pdMain.lender_stdcode.hasError('minlength')">Enter
|
||||||
|
Valid STD Code. </mat-error>
|
||||||
|
</mat-form-field> -
|
||||||
|
<mat-form-field style="width: 20%">
|
||||||
|
<input matInput placeholder="LandLine Number" formControlName="lender_landline"
|
||||||
|
type="text" maxlength="8" ForMobileNumbers>
|
||||||
|
<mat-error *ngIf="pdMain.lender_landline.hasError('maxlength') || pdMain.lender_landline.hasError('minlength')">Enter
|
||||||
|
Valid Landline Number. </mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 21.5%">
|
||||||
|
<mat-select placeholder="Branch" formControlName="pd_branch_id">
|
||||||
|
<!-- (selectionChange)="getBillingDetails(pdMain.fk_lender_id.value)" -->
|
||||||
|
<mat-option>
|
||||||
|
Select
|
||||||
|
</mat-option>
|
||||||
|
<mat-option *ngFor="let LB of lenderBranchList" [value]="LB.entity_lender_branch_id">
|
||||||
|
{{LB.branch_name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 29%">
|
||||||
|
<mat-select placeholder="Product Name" formControlName="fk_product_id"
|
||||||
|
(selectionChange)="getSubproductList(pdMain.fk_product_id.value,2)">
|
||||||
|
<mat-option>
|
||||||
|
Select
|
||||||
|
</mat-option>
|
||||||
|
<mat-option *ngFor="let PL of productList" [value]="PL.product_id">
|
||||||
|
{{PL.product_name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_product_id.hasError('required')">Product Required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<!-- <mat-form-field style="width: 29%"> -->
|
||||||
|
<mat-form-field *ngIf="isSubproductShown" style="width: 29%">
|
||||||
|
|
||||||
|
<mat-select placeholder="Sub product Name" formControlName="fk_subproduct_id">
|
||||||
|
<mat-option>Select</mat-option>
|
||||||
|
|
||||||
|
<mat-option *ngFor="let SPL of subProductList" [value]="SPL.subproduct_id">
|
||||||
|
{{SPL.subproduct_name}}
|
||||||
|
</mat-option>
|
||||||
|
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_subproduct_id.hasError('required')">Sub Product Required.</mat-error> -->
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 29%">
|
||||||
|
<mat-select placeholder="Customer Segment" formControlName="fk_customer_segment">
|
||||||
|
<mat-option>Select</mat-option>
|
||||||
|
<mat-option *ngFor="let CSL of customerSegmentList" [value]="CSL.customer_segment_id">
|
||||||
|
<!-- {{CSL.customer_segment}} -->{{CSL.abbr}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_customer_segment.hasError('required')">Customer Segment Required.</mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 29%">
|
||||||
|
<mat-select placeholder="PD Type" formControlName="fk_pd_type">
|
||||||
|
<mat-option>Select</mat-option>
|
||||||
|
<mat-option *ngFor="let PDL of pdTypeList" [value]="PDL.pd_type_id">
|
||||||
|
{{PDL.type_name}}
|
||||||
|
</mat-option>
|
||||||
|
|
||||||
|
</mat-select>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.fk_pd_type.hasError('required')">PD Type Required.</mat-error> -->
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 62%">
|
||||||
|
<!-- <input matInput placeholder="Loan Amount" formControlName="loan_amount"> -->
|
||||||
|
<input matInput placeholder="Loan Amount" formControlName="loan_amount"
|
||||||
|
OnlyNumber required
|
||||||
|
autocomplete="off">
|
||||||
|
<mat-hint align="start" style="font-size:90%" *ngIf="pdMain.loan_amount.value != ''">{{"₹"}} {{pdMain.loan_amount.value | numberToWords}} Only</mat-hint>
|
||||||
|
<!-- <mat-error *ngIf="pdMain.loan_amount.hasError('required')">Amount Required.</mat-error> -->
|
||||||
|
<mat-error *ngIf="pdMain.loan_amount.hasError('pattern')">Enter valid amount.
|
||||||
|
</mat-error>
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
|
||||||
|
<div formArrayName="addresses" *ngFor="let addresses of pdAddresses.controls; let i = index; let last = last">
|
||||||
|
<mat-card [formGroupName]="i">
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>Address Details #{{i+1}} <span *ngIf="!addressesDeactivited[i]" style="color: red;" align="end"><i> Deactivited </i></span> </mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 96%">
|
||||||
|
<textarea matInput autocomplete="off" placeholder="Address at which PD is to be done"
|
||||||
|
formControlName="addressline1" [value]="addresses.get('addressline1').value | titlecase"></textarea>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 32%">
|
||||||
|
<mat-select placeholder="State" formControlName="fk_state"
|
||||||
|
(selectionChange)="getCityList($event.value,i)">
|
||||||
|
<mat-option> Select </mat-option>
|
||||||
|
<mat-option *ngFor="let SL of stateList" [value]="SL.state_id">
|
||||||
|
{{SL.name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 32%">
|
||||||
|
<mat-select placeholder="City" formControlName="fk_city">
|
||||||
|
<mat-option> Select </mat-option>
|
||||||
|
<mat-option *ngFor="let CL of cityList[i]" [value]="CL.city_id">
|
||||||
|
{{CL.city_name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 24%">
|
||||||
|
<mat-select placeholder="Pincode" formControlName="pincode"
|
||||||
|
(selectionChange)="getPincode($event.value,i)">
|
||||||
|
<mat-option>Select</mat-option>
|
||||||
|
<mat-option *ngFor="let PL of pincodeList[i]" [value]="PL.pincode_id">{{PL.pincode}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<mat-form-field style="width: 24%" *ngIf="pincodeflag[i]">
|
||||||
|
<!-- *ngIf="pdAddresses.pincode.value == 1" -->
|
||||||
|
<input matInput autocomplete="off" placeholder="Specify Pincode"
|
||||||
|
formControlName="other_pincode" OnlyNumber>
|
||||||
|
<!-- <mat-error *ngIf="pdAddresses.other_pincode.hasError('maxlength') || pdMain.other_pincode.hasError('minlength')">Enter Valid Pincode. </mat-error> -->
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
<mat-card-actions align="end">
|
||||||
|
|
||||||
|
<button mat-raised-button mat-icon-button matTooltip="Delete"
|
||||||
|
matTooltipPosition="above" (click)="removeAddresses(i,'Deactivited')"
|
||||||
|
type="button" *ngIf="pdAddresses.controls.length > 1 && addressesDeactivited[i]">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
<button type="button" mat-flat-button (click)="removeAddresses(i,'Activited')"
|
||||||
|
matTooltipPosition="above" color="primary" *ngIf="!addressesDeactivited[i]">
|
||||||
|
<strong>Deleted</strong>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
<button type="button" mat-raised-button mat-icon-button (click)="addAddresses(i)" *ngIf="last"
|
||||||
|
matTooltip="Add More Additional Addresses" matTooltipPosition="above"
|
||||||
|
class="mr-1 mb-1 hover-icon" color="primary" type="button">
|
||||||
|
<mat-icon>add</mat-icon>
|
||||||
|
</button>
|
||||||
|
</mat-card-actions>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions>
|
||||||
|
<div fxFlex="70" class="pb-0 text-sm-left" align="left">
|
||||||
|
<mat-form-field appearance="outline" style="width: 100%">
|
||||||
|
<mat-label>Remarks</mat-label>
|
||||||
|
<textarea matInput placeholder="Remarks" formControlName="remarks"></textarea>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end">
|
||||||
|
<!-- <button *ngIf="currentPDStatus==pdStatusCheck.DRAFT || currentPDStatus==pdStatusCheck.TRIGGERED" mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" (click)="saveDraftPD(this._EditPDtriggerForm.value,pdStatusCheck.DRAFT)" type="button" matTooltip="Save As Draft" matTooltipPosition="above"><mat-icon>insert_drive_file</mat-icon></button> -->
|
||||||
|
<!-- <button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" matTooltip="Trigger PD" matTooltipPosition="above" type="button" (click)="triggerPD(_EditPDtriggerForm.value, pdStatusCheck.TRIGGERED)"><mat-icon>save</mat-icon></button> -->
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" matTooltip="Save PD"
|
||||||
|
matTooltipPosition="above" type="button" (click)="triggerPD(_EditPDtriggerForm.value,'')" [disabled]="disableAfterSubmit===true">
|
||||||
|
<mat-icon>save</mat-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
// padding: 10px !important;
|
||||||
|
}
|
||||||
|
.cdk-global-overlay-wrapper{
|
||||||
|
justify-content: center !important;
|
||||||
|
}
|
||||||
|
mat-dialog-actions{
|
||||||
|
border-top: 2px solid #e00201;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-form-field-appearance-legacy .mat-hint{
|
||||||
|
color:rgba(0, 0, 0, 0.8) !important;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { PdTypeDialogComponent } from './pd-type-dialog.component';
|
import { EditPdMasterComponent } from './edit-pd-master.component';
|
||||||
|
|
||||||
describe('PdTypeDialogComponent', () => {
|
describe('EditPdMasterComponent', () => {
|
||||||
let component: PdTypeDialogComponent;
|
let component: EditPdMasterComponent;
|
||||||
let fixture: ComponentFixture<PdTypeDialogComponent>;
|
let fixture: ComponentFixture<EditPdMasterComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ PdTypeDialogComponent ]
|
declarations: [ EditPdMasterComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(PdTypeDialogComponent);
|
fixture = TestBed.createComponent(EditPdMasterComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,628 @@
|
|||||||
|
import { Component, OnInit,ViewEncapsulation, Inject } from '@angular/core';
|
||||||
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { CustomValidators } from 'ng2-validation';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { PdTrigerService } from '../../../pd-service/pd-triger.service';
|
||||||
|
import { TitleCasePipe } from '@angular/common';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-edit-pd-master',
|
||||||
|
templateUrl: './edit-pd-master.component.html',
|
||||||
|
styleUrls: ['./edit-pd-master.component.scss'],
|
||||||
|
providers:[TitleCasePipe],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
})
|
||||||
|
export class EditPdMasterComponent implements OnInit {
|
||||||
|
public pageTitle: string = "PD Details";
|
||||||
|
pdid: any;
|
||||||
|
errorMessage: any;
|
||||||
|
productList:any;
|
||||||
|
productAllList:any;
|
||||||
|
subProductList:any;
|
||||||
|
lenderList:any;
|
||||||
|
customerSegmentAllList:any;
|
||||||
|
customerSegmentList:any;
|
||||||
|
stateList:any;
|
||||||
|
cityList:any = [];
|
||||||
|
pdTypeList:any;
|
||||||
|
billingList:any;
|
||||||
|
lenderBranchList: any;
|
||||||
|
pincodeList: any = [];
|
||||||
|
addressesList : any = [];
|
||||||
|
addressesDeactivited : any = [];
|
||||||
|
applicantLength:number;
|
||||||
|
// draftStatus: string;
|
||||||
|
// PDTriggerStatus: string;
|
||||||
|
enablePDButton: boolean;
|
||||||
|
currentPDStatus: string;
|
||||||
|
disableAfterSubmit: boolean;
|
||||||
|
|
||||||
|
pincodeflag : any = [];
|
||||||
|
public _EditPDtriggerForm:FormGroup;
|
||||||
|
public notifier: NotifierService;
|
||||||
|
addresses: FormArray;
|
||||||
|
|
||||||
|
// create values for status check
|
||||||
|
pdStatusCheck :any={
|
||||||
|
"DRAFT" :'DRAFT',
|
||||||
|
"TRIGGERED" :'TRIGGERED',
|
||||||
|
"ALLOCATED" :'ALLOCATED',
|
||||||
|
"SCHEDULED" :'SCHEDULED',
|
||||||
|
"INPROGRESS" :'INPROGRESS',
|
||||||
|
"COMPLETED" :'COMPLETED',
|
||||||
|
"QC_COMPLETED" :'QC_COMPLETED',
|
||||||
|
};
|
||||||
|
lenderShortName: any;
|
||||||
|
isSubproductShown: boolean = true;
|
||||||
|
productShortName : any;
|
||||||
|
constructor(private _fb: FormBuilder,
|
||||||
|
private _pd: PdTrigerService, notifier: NotifierService,private dialogRef: MatDialogRef<EditPdMasterComponent>,
|
||||||
|
@Inject(MAT_DIALOG_DATA) public data: any,private titleCase : TitleCasePipe) {
|
||||||
|
this.notifier=notifier
|
||||||
|
this.currentPDStatus = data.records.pd_status;
|
||||||
|
this.pdid = data.records.pd_id;
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
// this.draftStatus="DRAFT";
|
||||||
|
// this.PDTriggerStatus="TRIGGERED";
|
||||||
|
this.getCustomerSegmentList();
|
||||||
|
this.getLenderList();
|
||||||
|
this.getProductsList();
|
||||||
|
this.getStateCityList();
|
||||||
|
this.getPDTypeList();
|
||||||
|
// this.getAddresses();
|
||||||
|
this.loadFormData();
|
||||||
|
this.applicantLength=this.data.applicantLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
getLenderList(){
|
||||||
|
this._pd.getLenderDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.lenderList=data.records;
|
||||||
|
if(this.data.records.fk_lender_id != null){
|
||||||
|
let x = this.lenderList.filter(item => item.entity_id == this.data.records.fk_lender_id)
|
||||||
|
this.lenderBranchList = x[0]['branches'];
|
||||||
|
this.lenderShortName = x[0]['short_name'] ;
|
||||||
|
this.filterProductAbbr(x[0]['short_name'],1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//, error => this.errorMessage = <any> error);
|
||||||
|
, error => {
|
||||||
|
// this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
selectedLender(lender){
|
||||||
|
// alert(JSON.stringify(lender['branches ']));
|
||||||
|
this.lenderBranchList = lender['branches'];
|
||||||
|
this.lenderShortName = lender['short_name'];
|
||||||
|
this.filterProductAbbr(lender['short_name'],2);
|
||||||
|
this._EditPDtriggerForm.controls.pd_branch_id.setValue(null);
|
||||||
|
|
||||||
|
}
|
||||||
|
filterProductAbbr(param,flag){
|
||||||
|
if(param == 'CLIX'){
|
||||||
|
// console.log(this.productAllList);
|
||||||
|
let getProductAbbr = this.productAllList.map(dval => dval.product_abbr);
|
||||||
|
// console.log('getProductAbbr',getProductAbbr);
|
||||||
|
let ClixProductAbbr = ['BL','LAEP'];
|
||||||
|
// console.log(ClixProductAbbr);
|
||||||
|
let FilteredAbbr: any = [];
|
||||||
|
FilteredAbbr = ClixProductAbbr.map(x => {
|
||||||
|
let findIndex = getProductAbbr.indexOf(x);
|
||||||
|
return this.productAllList[findIndex];
|
||||||
|
});
|
||||||
|
// console.log('FilteredAbbr',FilteredAbbr);
|
||||||
|
this.productList = FilteredAbbr.length > 0 ? FilteredAbbr : this.productAllList;
|
||||||
|
|
||||||
|
// this.productList = this.productAllList;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.productList = this.productAllList;
|
||||||
|
}
|
||||||
|
if(flag != 1){
|
||||||
|
this._EditPDtriggerForm.controls['fk_product_id'].setValue('');
|
||||||
|
this._EditPDtriggerForm.controls['fk_subproduct_id'].setValue('');
|
||||||
|
this._EditPDtriggerForm.controls['fk_pd_type'].setValue('');
|
||||||
|
this._EditPDtriggerForm.controls['fk_customer_segment'].setValue('');
|
||||||
|
this._EditPDtriggerForm.controls['loan_amount'].setValue('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getCustomerSegmentList(){
|
||||||
|
this._pd.getCustomersDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.customerSegmentAllList=data.records
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any> error);
|
||||||
|
}
|
||||||
|
|
||||||
|
getProductsList(){
|
||||||
|
this._pd.getProductsDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
// this.productList=data.records
|
||||||
|
this.productAllList = data.records
|
||||||
|
if(this.data.records.fk_product_id){
|
||||||
|
this.getSubproductList(this.data.records.fk_product_id,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any> error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// getStateCityList(){
|
||||||
|
// this._pd.getStateCityDetails().subscribe(
|
||||||
|
// data => {
|
||||||
|
// if (data.status == 200) {
|
||||||
|
// this.stateList=data.records
|
||||||
|
// if(this.data.records.fk_state){
|
||||||
|
// this.getCityList(this.data.records.fk_state);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }, error => this.errorMessage = <any> error);
|
||||||
|
// }
|
||||||
|
getStateCityList(){
|
||||||
|
this._pd.getAllMasterDatas('STATE').subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.stateList = data.records.filter(item => item.isactive == 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getPDTypeList(){
|
||||||
|
this._pd.getPDTypeDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.pdTypeList=data.records.pd_type;
|
||||||
|
|
||||||
|
}
|
||||||
|
}, error => this.errorMessage = <any> error);
|
||||||
|
}
|
||||||
|
|
||||||
|
loadFormData() {
|
||||||
|
let stdcode;
|
||||||
|
let landline;
|
||||||
|
if(this.data.records.pd_contact_landline){
|
||||||
|
if(this.data.records.pd_contact_landline != null){
|
||||||
|
let stdcodesearch = this.data.records.pd_contact_landline.search("-");
|
||||||
|
stdcode = this.data.records.pd_contact_landline.substr(0,stdcodesearch);
|
||||||
|
landline = this.data.records.pd_contact_landline.substr(+stdcodesearch + 1,8);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
stdcode = '';
|
||||||
|
landline = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// let getpincodeid = this.data.records.pincode != '' ? this.data.records.pincode != null ? (this.pincodeList.filter(data => data.pincode == this.data.records.pincode).pincode_id)
|
||||||
|
// : this.data.records.pincode
|
||||||
|
// : this.data.records.pincode;
|
||||||
|
|
||||||
|
this._EditPDtriggerForm = this._fb.group({
|
||||||
|
pd_id: [this.data.records.pd_id],
|
||||||
|
fk_lender_id: [this.data.records.fk_lender_id, Validators.compose([Validators.required])],
|
||||||
|
lender_applicant_id: [this.data.records.lender_applicant_id, Validators.compose([Validators.required])],
|
||||||
|
pd_branch_id:[this.data.records.pd_branch_id, Validators.compose([Validators.required])],
|
||||||
|
pd_contact_person: [this.data.records.pd_contact_person, Validators.compose([Validators.required])],
|
||||||
|
pd_contact_mobileno: [this.data.records.pd_contact_mobileno, Validators.compose([Validators.minLength(10),Validators.maxLength(12),Validators.pattern('^[0-9]*$')])],
|
||||||
|
lender_stdcode: [stdcode, Validators.compose([Validators.minLength(3),Validators.maxLength(5)])],
|
||||||
|
lender_landline: [landline,Validators.compose([Validators.minLength(6),Validators.maxLength(8)])],
|
||||||
|
fk_product_id: [this.data.records.fk_product_id],
|
||||||
|
fk_subproduct_id: [this.data.records.fk_subproduct_id],
|
||||||
|
fk_pd_type: [this.data.records.fk_pd_type],
|
||||||
|
fk_customer_segment: [this.data.records.fk_customer_segment],
|
||||||
|
loan_amount: [this.data.records.loan_amount,Validators.compose([Validators.pattern('^[0-9]*$')])],
|
||||||
|
addresses: this._fb.array([]),
|
||||||
|
// addressline1: [this.data.records.addressline1.toUpperCase()],
|
||||||
|
// fk_city: [this.data.records.fk_city],
|
||||||
|
// fk_state: [this.data.records.fk_state],
|
||||||
|
// pincode : [this.data.records.pincode_id],
|
||||||
|
// other_pincode:[this.data.records.other_pincode,Validators.compose([Validators.minLength(6),Validators.maxLength(6),Validators.pattern('^[0-9]*$')])],
|
||||||
|
remarks: [this.data.records.remarks],
|
||||||
|
});
|
||||||
|
const addressesArray = this._EditPDtriggerForm.get('addresses') as FormArray;
|
||||||
|
this._pd.getAddressesDetails(this.pdid).subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.addressesList = data.records.filter(item => item.isactive == 1);
|
||||||
|
|
||||||
|
if (this.addressesList.length > 0) {
|
||||||
|
|
||||||
|
this.addressesList.forEach((val,index)=>{
|
||||||
|
this.addressesDeactivited[index] = true;
|
||||||
|
let obj = {
|
||||||
|
pd_address_id:val.pd_address_id,
|
||||||
|
addressline1: !val.addressline1 ? null : this.titleCase.transform(val.addressline1),
|
||||||
|
fk_city: val.fk_city,
|
||||||
|
fk_state: val.fk_state,
|
||||||
|
pincode: val.pincode_id,
|
||||||
|
other_pincode:val.other_pincode,
|
||||||
|
isactive:1,
|
||||||
|
}
|
||||||
|
this.getCityList(val.fk_state,index);
|
||||||
|
this.getPincode(val.pincode_id,index);
|
||||||
|
this.addressesDeactivited[this.addressesList.length] = true;
|
||||||
|
addressesArray.push(this.createAddresses(obj));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.addressesDeactivited[0] = true;
|
||||||
|
addressesArray.push(this.createAddresses(null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.addressesDeactivited[0] = true;
|
||||||
|
addressesArray.push(this.createAddresses(null));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
get pdMain() { return this._EditPDtriggerForm.controls; }
|
||||||
|
|
||||||
|
//get sub product list based on prokduct id
|
||||||
|
getSubproductList(productID:string,flag:number){
|
||||||
|
// console.log('productID',productID);
|
||||||
|
this.customerSegmentList=this.customerSegmentAllList;
|
||||||
|
|
||||||
|
|
||||||
|
if (productID !== undefined && productID !== null && productID !== '') {
|
||||||
|
this.productShortName = this.productAllList.filter(item => item.product_id == productID)[0].product_abbr;
|
||||||
|
this.subProductList=this.productAllList.filter(item => item.product_id == productID);
|
||||||
|
this.subProductList=this.subProductList[0].subproducts;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.productShortName = '';
|
||||||
|
this.subProductList=[];
|
||||||
|
}
|
||||||
|
// console.log('this.productAbbr',this.productShortName);
|
||||||
|
switch (this.productShortName) {
|
||||||
|
case 'BL':
|
||||||
|
// console.log(1);
|
||||||
|
this.customerSegmentList = this.customerSegmentAllList.filter(s => (s.customer_segment).includes('Self'));
|
||||||
|
if(this.lenderShortName == 'CLIX' && flag==2 ){ this._EditPDtriggerForm.controls['fk_customer_segment'].setValue('5'); }
|
||||||
|
this._EditPDtriggerForm.controls['fk_subproduct_id'].setValue(null);
|
||||||
|
this.subProductList=[];
|
||||||
|
this.isSubproductShown = false;
|
||||||
|
break;
|
||||||
|
case 'LAEP':
|
||||||
|
// console.log(2);
|
||||||
|
this.customerSegmentList = this.customerSegmentAllList.filter(s => (s.customer_segment).includes('Self'));
|
||||||
|
this._EditPDtriggerForm.controls['fk_subproduct_id'].setValue(null);
|
||||||
|
if(this.lenderShortName == 'CLIX' && flag==2 ){ this._EditPDtriggerForm.controls['fk_customer_segment'].setValue('5'); }
|
||||||
|
this.subProductList=[];
|
||||||
|
this.isSubproductShown = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// console.log(3);
|
||||||
|
this.customerSegmentList = this.customerSegmentAllList;
|
||||||
|
// console.log('productID', productID);
|
||||||
|
this.isSubproductShown = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// //get city list details based on state id
|
||||||
|
// getCityList(stateID:string){
|
||||||
|
// this.cityList= this.stateList.filter(item => item.state_id == stateID);
|
||||||
|
// this.cityList=this.cityList[0].cities;
|
||||||
|
// }
|
||||||
|
//get city list details based on state id
|
||||||
|
getCityList(stateID:string,i){
|
||||||
|
|
||||||
|
this._pd.getStateWiseCities(stateID).subscribe(data=>{
|
||||||
|
if (data.status == 200) {
|
||||||
|
|
||||||
|
this.cityList[i] = data.records.cities;
|
||||||
|
this.pincodeList[i] = data.records.pincode;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
get pdAddresses() { return this._EditPDtriggerForm.get('addresses') as FormArray; }
|
||||||
|
createAddresses(data): FormGroup {
|
||||||
|
if(data == null){
|
||||||
|
return this._fb.group({
|
||||||
|
fk_pd_id:[this.pdid],
|
||||||
|
pd_address_id:[null],
|
||||||
|
addressline1: [null],
|
||||||
|
fk_city: [null],
|
||||||
|
fk_state: [null],
|
||||||
|
pincode: [null],/** ,Validators.compose([Validators.minLength(6),Validators.maxLength(6)]) */
|
||||||
|
other_pincode: [null, Validators.compose([Validators.minLength(6), Validators.maxLength(6)])],
|
||||||
|
isactive:[1],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return this._fb.group({
|
||||||
|
fk_pd_id:[this.pdid],
|
||||||
|
pd_address_id:[data.pd_address_id],
|
||||||
|
addressline1: [data.addressline1 != null ? this.titleCase.transform(data.addressline1) : null],
|
||||||
|
fk_city: [data.fk_city],
|
||||||
|
fk_state: [data.fk_state],
|
||||||
|
pincode : [data.pincode],
|
||||||
|
other_pincode:[data.other_pincode,Validators.compose([Validators.minLength(6),Validators.maxLength(6),Validators.pattern('^[0-9]*$')])],
|
||||||
|
isactive:[data.isactive],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
addAddresses(index) {
|
||||||
|
this.addresses = this._EditPDtriggerForm.get('addresses') as FormArray;
|
||||||
|
this.addresses.push(this.createAddresses(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
removeAddresses(index: number,strflag : any) {
|
||||||
|
const address_control = <FormArray>this._EditPDtriggerForm.controls['addresses'];
|
||||||
|
if(strflag == 'Deactivited'){
|
||||||
|
address_control.controls[index]['controls'].isactive.setValue(0);
|
||||||
|
this.addressesDeactivited[index] = false;
|
||||||
|
}
|
||||||
|
else if(strflag == 'Activited'){
|
||||||
|
address_control.controls[index]['controls'].isactive.setValue(1);
|
||||||
|
this.addressesDeactivited[index] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// address_control.controls[index]['controls'].showHide();
|
||||||
|
// isactive.setValue(0);
|
||||||
|
// this.showHide = true;
|
||||||
|
// var div = document.getElementById('newpost');
|
||||||
|
// if (div.style.display !== 'none') {
|
||||||
|
// div.style.display = 'none';
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// div.style.display = 'block';
|
||||||
|
// }
|
||||||
|
|
||||||
|
// address_control.controls[index].disable();
|
||||||
|
|
||||||
|
// address_control.removeAt(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
getPincode(e,i){ this.pincodeflag[i] = e == 1 ? true : false;}
|
||||||
|
|
||||||
|
// save pd in draft
|
||||||
|
saveDraftPD(formValue: any, status:string){
|
||||||
|
this.clearCustomValidatorFields();
|
||||||
|
this.submitPdDetails(formValue, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerPD(formValue: any, status:any){
|
||||||
|
// console.log('functionclicked',formValue, status);
|
||||||
|
// this._EditPDtriggerForm.controls['fk_lender_id'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['fk_lender_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['fk_product_id'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['fk_product_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['fk_subproduct_id'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['fk_subproduct_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['fk_pd_type'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['fk_pd_type'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['fk_customer_segment'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['fk_customer_segment'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['loan_amount'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['loan_amount'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['addressline1'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['addressline1'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['fk_city'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['fk_city'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['fk_state'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['fk_state'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['pincode'].setValidators([Validators.required]);
|
||||||
|
// this._EditPDtriggerForm.controls['pincode'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// if(this.applicantLength==0){
|
||||||
|
// this.notifier.notify('error', 'Please add applicants.!');
|
||||||
|
|
||||||
|
// }
|
||||||
|
setTimeout(() => {
|
||||||
|
this.clearCustomValidatorFields();
|
||||||
|
}, 10000);
|
||||||
|
this.submitPdDetails(formValue, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
// this is for clear custom validator required fields
|
||||||
|
clearCustomValidatorFields(){
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['fk_lender_id'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['fk_lender_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['fk_product_id'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['fk_product_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['fk_subproduct_id'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['fk_subproduct_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['fk_pd_type'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['fk_pd_type'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['fk_customer_segment'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['fk_customer_segment'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['loan_amount'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['loan_amount'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['addressline1'].clearValidators();
|
||||||
|
// this._EditPDtriggerForm.controls['addressline1'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['fk_city'].clearValidators();
|
||||||
|
// this._EditPDtriggerForm.controls['fk_city'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['fk_state'].clearValidators();
|
||||||
|
// this._EditPDtriggerForm.controls['fk_state'].updateValueAndValidity();
|
||||||
|
|
||||||
|
// this._EditPDtriggerForm.controls['pincode'].clearValidators();
|
||||||
|
// this._EditPDtriggerForm.controls['pincode'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this.validateAllFormFields(this._EditPDtriggerForm);
|
||||||
|
}
|
||||||
|
|
||||||
|
submitPdDetails(formValue: any, status:any) {
|
||||||
|
// let updateStatus = this.currentPDStatus == this.pdStatusCheck.DRAFT ? status : this.currentPDStatus == this.pdStatusCheck.TRIGGERED ? status : this.currentPDStatus;
|
||||||
|
let updateStatus = this.currentPDStatus;
|
||||||
|
|
||||||
|
if(status != 1){
|
||||||
|
if(this._EditPDtriggerForm.invalid) {
|
||||||
|
this.validateAllFormFields(this._EditPDtriggerForm);
|
||||||
|
this.notifier.notify('warning', 'Please Fill All Mandatory Fields.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(this.lenderShortName == 'CLIX'){
|
||||||
|
const control = <FormArray>this._EditPDtriggerForm.controls['addresses'];
|
||||||
|
let CtrlLength = control.controls.length;
|
||||||
|
if (CtrlLength > 0) {
|
||||||
|
let cnt = 0;
|
||||||
|
while (cnt < CtrlLength) {
|
||||||
|
|
||||||
|
let ChildCtrl: any = control.controls[cnt]
|
||||||
|
ChildCtrl.controls['addressline1'].setValidators([Validators.required]);
|
||||||
|
ChildCtrl.controls['addressline1'].updateValueAndValidity();
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['fk_product_id'].setValidators([Validators.required]);
|
||||||
|
this._EditPDtriggerForm.controls['fk_product_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['pd_branch_id'].setValidators([Validators.required]);
|
||||||
|
this._EditPDtriggerForm.controls['pd_branch_id'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['pd_contact_person'].setValidators([Validators.required]);
|
||||||
|
this._EditPDtriggerForm.controls['pd_contact_person'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['pd_contact_mobileno'].setValidators([Validators.required]);
|
||||||
|
this._EditPDtriggerForm.controls['pd_contact_mobileno'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['fk_pd_type'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['fk_pd_type'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['fk_customer_segment'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['fk_customer_segment'].updateValueAndValidity();
|
||||||
|
|
||||||
|
this._EditPDtriggerForm.controls['loan_amount'].clearValidators();
|
||||||
|
this._EditPDtriggerForm.controls['loan_amount'].updateValueAndValidity();
|
||||||
|
|
||||||
|
if(this._EditPDtriggerForm.invalid) {
|
||||||
|
this.validateAllFormFields(this._EditPDtriggerForm);
|
||||||
|
this.notifier.notify('warning', 'Please Fill All Mandatory Fields.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let my_array = this._EditPDtriggerForm.value;
|
||||||
|
let concat_landline
|
||||||
|
if(my_array.lender_stdcode != null && my_array.lender_landline != null){
|
||||||
|
if(my_array.lender_stdcode == '' && my_array.lender_landline == ''){
|
||||||
|
concat_landline = null;
|
||||||
|
}else{
|
||||||
|
let std = my_array.lender_stdcode == '' ? '' : my_array.lender_stdcode;
|
||||||
|
let landline = my_array.lender_landline == '' ? '' : my_array.lender_landline;
|
||||||
|
concat_landline = std+'-'+landline;
|
||||||
|
}
|
||||||
|
}else if(my_array.lender_stdcode == '' && my_array.lender_landerline == ''){
|
||||||
|
concat_landline = null;
|
||||||
|
}else{
|
||||||
|
concat_landline = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((my_array.pd_contact_mobileno == '' || my_array.pd_contact_mobileno == null) && (concat_landline == '' || concat_landline == null )){
|
||||||
|
this.notifier.notify('warning', 'Either Mobile or Landline Need.!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
let filteredAddressesdata = my_array.addresses.filter(item => item.isactive == 1);
|
||||||
|
let lenderMasterArray = {
|
||||||
|
"pd_id": my_array.pd_id,
|
||||||
|
"fk_lender_id": my_array.fk_lender_id,
|
||||||
|
"lender_applicant_id": my_array.lender_applicant_id,
|
||||||
|
"pd_branch_id":my_array.pd_branch_id,
|
||||||
|
"pd_contact_person": my_array.pd_contact_person,
|
||||||
|
"pd_contact_mobileno": my_array.pd_contact_mobileno,
|
||||||
|
"pd_contact_landline": concat_landline,
|
||||||
|
"fk_product_id": my_array.fk_product_id,
|
||||||
|
"fk_subproduct_id": my_array.fk_product_id != '4' ? my_array.fk_subproduct_id : null,
|
||||||
|
"fk_pd_type": my_array.fk_pd_type,
|
||||||
|
"fk_customer_segment": my_array.fk_customer_segment,
|
||||||
|
"loan_amount": my_array.loan_amount,
|
||||||
|
"addressline1": filteredAddressesdata[0].addressline1 != null ? this.titleCase.transform(filteredAddressesdata[0].addressline1) : null,
|
||||||
|
"fk_city": filteredAddressesdata[0].fk_city,
|
||||||
|
"fk_state": filteredAddressesdata[0].fk_state,
|
||||||
|
"pincode": filteredAddressesdata[0].pincode,
|
||||||
|
"other_pincode":filteredAddressesdata[0].other_pincode,
|
||||||
|
"remarks": my_array.remarks,
|
||||||
|
}
|
||||||
|
|
||||||
|
this.disableAfterSubmit = true;
|
||||||
|
this._pd.editPdMasterDetails(lenderMasterArray, updateStatus).subscribe(result => {
|
||||||
|
if (result.status == 200) {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this._pd.updatePDAddress(my_array.addresses).subscribe(result => {
|
||||||
|
if (result.status == 200) {
|
||||||
|
this.notifier.notify('success', 'PD Details Updated.');
|
||||||
|
this.dialogRef.close();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.notifier.notify('success', 'PD Details Updated.');
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong in Address Try Again.!');
|
||||||
|
}//else
|
||||||
|
}, error => {
|
||||||
|
// this.notifier.notify('warning', 'Something Wents Wrong in Address Try Again.!');
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong in Address Section Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}//else
|
||||||
|
}, error => {
|
||||||
|
// this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
});//error closed
|
||||||
|
}//else closed
|
||||||
|
|
||||||
|
}
|
||||||
|
/** To Reset Popup Data */
|
||||||
|
onReset() {
|
||||||
|
this.disableAfterSubmit = false;
|
||||||
|
this.loadFormData();
|
||||||
|
}
|
||||||
|
/** For Popup Close Button */
|
||||||
|
closeEditMasterComponent(): void {
|
||||||
|
this.dialogRef.close();
|
||||||
|
}
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
<form [formGroup]="additionalPDForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end" style="padding: 10px !important;">
|
||||||
|
<button mat-raised-button mat-icon-button mat-dialog-close class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
|
<mat-form-field style="width:80%" appearance="outline">
|
||||||
|
<mat-label>Customer Segment</mat-label>
|
||||||
|
<mat-select placeholder="" formControlName="fk_customer_segment" required>
|
||||||
|
<mat-option *ngFor="let segment of customerSegmentList" [value]="segment.customer_segment_id">
|
||||||
|
{{segment.abbr}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:38%" appearance="outline">
|
||||||
|
<mat-label>Applicant</mat-label>
|
||||||
|
<mat-select placeholder="" formControlName="pd_co_applicant_id" required (selectionChange)="toGetMobileNo($event.value)">
|
||||||
|
<mat-option *ngFor="let appt of applicantList" [value]="appt.pd_co_applicant_id">
|
||||||
|
{{appt.applicant_name | titlecase}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:38%" appearance="outline">
|
||||||
|
<mat-label>Applicant Mobile Number</mat-label>
|
||||||
|
<input matInput placeholder="" formControlName="mobile_no" type="text" maxlength="10" ForMobileNumbers required>
|
||||||
|
</mat-form-field>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions>
|
||||||
|
<div fxFlex="80" align="left">
|
||||||
|
<p style="color: #e00201">Note : Changes once made can't be revoked. Are you sure of the Customer Segment?</p>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="20" align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(additionalPDForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { InitiateAdditionalPdComponent } from './initiate-additional-pd.component';
|
||||||
|
|
||||||
|
describe('InitiateAdditionalPdComponent', () => {
|
||||||
|
let component: InitiateAdditionalPdComponent;
|
||||||
|
let fixture: ComponentFixture<InitiateAdditionalPdComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ InitiateAdditionalPdComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(InitiateAdditionalPdComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,116 @@
|
|||||||
|
import { Component, OnInit, Inject } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA , DialogPosition} from '@angular/material';
|
||||||
|
import { PdTrigerService } from './../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-initiate-additional-pd',
|
||||||
|
templateUrl: './initiate-additional-pd.component.html',
|
||||||
|
styleUrls: ['./initiate-additional-pd.component.scss']
|
||||||
|
})
|
||||||
|
export class InitiateAdditionalPdComponent implements OnInit {
|
||||||
|
pageTitle: string;
|
||||||
|
private notifier: NotifierService;
|
||||||
|
additionalPDForm:FormGroup;
|
||||||
|
customerSegmentList: any=[];
|
||||||
|
applicantList: any =[];
|
||||||
|
constructor(notifier: NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService, @Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<InitiateAdditionalPdComponent>) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
this.pageTitle="Choose customer segment For this PD address"
|
||||||
|
this.applicantList = this.data.applicants_details;
|
||||||
|
this.applicantList = this.applicantList.filter(appt => appt.applicant_type != 2 && appt.applicant_type != 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.initForm();
|
||||||
|
this._pd.getCustomersDetails().subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.customerSegmentList = data.records
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.data.type===false ? this.additionalPDForm.controls['fk_customer_segment'].disable():this.additionalPDForm.controls['fk_customer_segment'].enable();
|
||||||
|
|
||||||
|
if(this.data.applicant_id){
|
||||||
|
this.additionalPDForm.controls['pd_co_applicant_id'].setValue(this.data.applicant_id);
|
||||||
|
this.toGetMobileNo(this.data.applicant_id);
|
||||||
|
// this.additionalPDForm.controls['pd_co_applicant_id'].disable();
|
||||||
|
}
|
||||||
|
// else { this.additionalPDForm.controls['pd_co_applicant_id'].enable(); }
|
||||||
|
}
|
||||||
|
initForm(){
|
||||||
|
return this.additionalPDForm = this._fb.group({
|
||||||
|
pd_id:[this.data.type===false ? this.data.pd_id : ''],
|
||||||
|
parent_pd_id: [this.data.type===true ? this.data.pd_id : ''],
|
||||||
|
fk_customer_segment: [this.data.type===false ? this.data.fk_customer_segment :'',Validators.required],
|
||||||
|
pd_co_applicant_id:[this.data.type===false ? '' : '',Validators.required],
|
||||||
|
mobile_no:[this.data.type===false ? '' : '',Validators.required],
|
||||||
|
fk_address_id:[this.data.pd_address_id,Validators.required],
|
||||||
|
pd_status:[this.data.pd_status,Validators.required],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** To Get City And Pincode Data For Address Form
|
||||||
|
* Param 'stateID' -> selected StateId
|
||||||
|
*/
|
||||||
|
toGetMobileNo(applicantID) {
|
||||||
|
let mobile = this.applicantList.filter(val=>val.pd_co_applicant_id == applicantID).map(val=>val.mobile_no)[0]
|
||||||
|
if(mobile != '' && mobile != null){
|
||||||
|
this.additionalPDForm.controls['mobile_no'].setValue(mobile);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.additionalPDForm.controls['mobile_no'].setValue('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// save details
|
||||||
|
submitDetails(values: any) {
|
||||||
|
if (this.additionalPDForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.additionalPDForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let update_details: any;
|
||||||
|
if(this.data.type){
|
||||||
|
update_details= {"pd_id":values.pd_id,
|
||||||
|
"parent_pd_id":values.parent_pd_id,
|
||||||
|
"fk_customer_segment":values.fk_customer_segment ,
|
||||||
|
"fk_address_id":values.fk_address_id,
|
||||||
|
"pd_status":"TRIGGERED",
|
||||||
|
"pd_co_applicant_id":values.pd_co_applicant_id,
|
||||||
|
"mobile_no":values.mobile_no};
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
update_details={"pd_id":values.pd_id,
|
||||||
|
"pd_status":"TRIGGERED",
|
||||||
|
"parent_pd_id":values.parent_pd_id,
|
||||||
|
"fk_customer_segment":values.fk_customer_segment ,
|
||||||
|
"fk_primary_address_id":values.fk_address_id};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._pd.initiateAddressPdProcess(update_details).subscribe(data => {
|
||||||
|
this.notifier.notify('success', 'Saved Successfully.');
|
||||||
|
setTimeout(() =>{
|
||||||
|
this.dialogRef.close({update_status:true});
|
||||||
|
},3000);
|
||||||
|
}, error => {
|
||||||
|
// this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
// alert(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,122 @@
|
|||||||
|
<mat-card-content>
|
||||||
|
<mat-expansion-panel [(expanded)]="xpandStatus">
|
||||||
|
<mat-expansion-panel-header >
|
||||||
|
<mat-panel-title class="text-xs-left">
|
||||||
|
<!-- <h6 class="mt-0"><mat-icon>filter_list</mat-icon> Filter</h6> -->
|
||||||
|
<mat-toolbar-row>
|
||||||
|
<mat-icon>filter_list</mat-icon>
|
||||||
|
<span class="toolbar-space"></span>
|
||||||
|
<span>Advance 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:30%">
|
||||||
|
<mat-select multiple formControlName="pd_type" placeholder="PD Type">
|
||||||
|
<mat-option *ngFor="let type of PDType" [value]="type.pd_type_id">{{type.type_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<!-- <mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_status" placeholder="PD Status">
|
||||||
|
<mat-option *ngFor="let status of pdStatus" [value]="status.pd_status_name">{{status.pd_status_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field> -->
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput [matDatepicker]="picker" [max]="todaydate" (blur)="checkDate($event)" formControlName="pd_from_date" placeholder="Choose a From date">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput [matDatepicker]="picker1" [max]="todaydate" [min]="searchForm.get('pd_from_date').value" formControlName="pd_to_date" placeholder="Choose a todate">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker1></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_products" placeholder="Products">
|
||||||
|
<mat-option *ngFor="let pro of PRODUCTS" [value]="pro.product_id">{{pro.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_city" placeholder="City">
|
||||||
|
<mat-option *ngFor="let city of CITY" [value]="city.city_id">{{city.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_lender" placeholder="Lender Name">
|
||||||
|
<mat-option *ngFor="let ent of ENTITY" [value]="ent.entity_id">{{ent.full_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_name" placeholder="Applicant Name">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_applicant_id" placeholder="Applicant Id">
|
||||||
|
</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>
|
||||||
|
<br/>
|
||||||
|
<mat-table [dataSource]="dataSourceTab2" matSort *ngIf="progressPdListData.length > 0" >
|
||||||
|
<ng-container matColumnDef="PDType">
|
||||||
|
<mat-cell fxFlex.xs="20" fxFlex.sm="15" fxFlex.md="10" fxFlex.lg="10" fxFlex.xl="10" class="cell" *matCellDef="let details;" style="justify-content:flex-end">
|
||||||
|
<div [ngStyle]="{'color': '#e00201','font-weight': 'bold'}" mat-line>{{details.pd_id}}</div>
|
||||||
|
<small mat-line>{{details.pd_type_name}}</small>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Name">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<!-- <span *ngIf="details.applicant_name" mat-line><b>{{details.applicant_name}}</b></span><br> -->
|
||||||
|
<span *ngIf="details.is_child" mat-line>
|
||||||
|
<b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD - ' + details.parent_pd_id }}</b>
|
||||||
|
</span><br>
|
||||||
|
<span class="fontsize"> {{details.lender_applicant_id}}</span> <span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Lenderid">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details">
|
||||||
|
<span *ngIf="details.lender_short_name" mat-line> {{details.lender_short_name}} </span><br>
|
||||||
|
<span *ngIf="details.product_abbr" mat-line class="fontsize"> {{details.product_abbr}}<span *ngIf="details.subproduct_abbr">/{{details.subproduct_abbr}}</span></span> <br>
|
||||||
|
<span *ngIf="details.loan_amount" class="fontsize"><i class="fa-1x fa fa-rupee"></i> {{details.loan_amount}}</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Address">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<span matTooltip="Initiated Date" matTooltipPosition="above">{{details.pd_date_of_initiation}}</span><br>
|
||||||
|
<span class="fontsize" *ngIf="details.city_name"> <i class="fa-1x fa fa-map-marker"> </i> {{details.city_name}}-{{details.pincode_id == 1 ? details.other_pincode : details.pincode }} </span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Status">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<span> {{details.pd_status}}</span><br>
|
||||||
|
<span class="fontsize" [matTooltip]="details.pd_status | titlecase" matTooltipPosition="above">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||||
|
</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Action">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<button mat-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" (click)="viewPD(details.is_child == 0 ? details.pd_id : details.parent_pd_id)" matTooltip="View" matTooltipPosition="above" color="primary"><mat-icon>visibility</mat-icon></button>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<mat-row style="align-items: normal !important;" *matRowDef="let row; columns: displayedColumns;">
|
||||||
|
</mat-row>
|
||||||
|
</mat-table>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
<mat-paginator *ngIf="!recordStatus" #paginator class="mat-elevation-z1" [length]="progressPdListData.length" [pageIndex]="pageIndex" [pageSize]="pageSize"
|
||||||
|
[pageSizeOptions]="[5, 10, 25,50, 100]" (page)="pageEvent = $event; pageChange($event)" showFirstLastButtons>
|
||||||
|
</mat-paginator>
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
.ic-change:hover {
|
||||||
|
transform: scale(1.1);
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
.cell{
|
||||||
|
display:inline !important;
|
||||||
|
}
|
||||||
|
.cellhide{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.center{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
.fontsize{
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
.toolbar-space {
|
||||||
|
flex: 0.01 0 auto;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { StatesDialogComponent } from './states-dialog.component';
|
import { InprogressPdComponent } from './inprogress-pd.component';
|
||||||
|
|
||||||
describe('StatesDialogComponent', () => {
|
describe('InprogressPdComponent', () => {
|
||||||
let component: StatesDialogComponent;
|
let component: InprogressPdComponent;
|
||||||
let fixture: ComponentFixture<StatesDialogComponent>;
|
let fixture: ComponentFixture<InprogressPdComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ StatesDialogComponent ]
|
declarations: [ InprogressPdComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(StatesDialogComponent);
|
fixture = TestBed.createComponent(InprogressPdComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,224 @@
|
|||||||
|
import { Component,ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter, OnDestroy, AfterViewInit, OnChanges, SimpleChanges } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../pd-service/pd-triger.service';
|
||||||
|
import { MatPaginator, MatSort, MatTableDataSource, PageEvent } from '@angular/material';
|
||||||
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||||
|
import { DatePipe } from '@angular/common';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-inprogress-pd',
|
||||||
|
templateUrl: './inprogress-pd.component.html',
|
||||||
|
styleUrls: ['./inprogress-pd.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
})
|
||||||
|
export class InprogressPdComponent implements OnInit, OnChanges {
|
||||||
|
xpandStatus: boolean = false;
|
||||||
|
PRODUCTS: any[]=[];
|
||||||
|
ENTITY: any[]=[];
|
||||||
|
CITY: any[]=[];
|
||||||
|
PDType: any[]=[];
|
||||||
|
pdStatus: any[]=[];
|
||||||
|
recordStatus: boolean;
|
||||||
|
errorMessage:any[]=[];
|
||||||
|
tabStatus:string="INPROGRESS";
|
||||||
|
pipe = new DatePipe('en-US');
|
||||||
|
todaydate:Date = new Date();
|
||||||
|
private notifier: NotifierService;
|
||||||
|
public dataLengthTab2: number;
|
||||||
|
public dataSourceTab2 = new MatTableDataSource();
|
||||||
|
|
||||||
|
displayedColumns = ['PDType','Name','Lenderid','Address','Status','Action'];
|
||||||
|
|
||||||
|
@ViewChild(MatPaginator) paginator: MatPaginator;
|
||||||
|
@ViewChild(MatSort) sort: MatSort;
|
||||||
|
|
||||||
|
@Input() bindFilterValue: string;
|
||||||
|
@Output() loadPdView = new EventEmitter<string>();
|
||||||
|
|
||||||
|
// data source variable details
|
||||||
|
progressPdListData:any[] = [];
|
||||||
|
|
||||||
|
// pagination variable details
|
||||||
|
length = 5;
|
||||||
|
pageIndex = 0;
|
||||||
|
pageSize = 10;
|
||||||
|
pageEvent: PageEvent;
|
||||||
|
searchForm:FormGroup;
|
||||||
|
constructor(private _pd: PdTrigerService,public _fb:FormBuilder,notifier: NotifierService) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
|
||||||
|
this.searchForm = this._fb.group(
|
||||||
|
{
|
||||||
|
pd_type:[null],
|
||||||
|
pd_status:['INPROGRESS'],
|
||||||
|
pd_from_date:[null],
|
||||||
|
pd_to_date:[null],
|
||||||
|
pd_city:[null],
|
||||||
|
pd_products:[null],
|
||||||
|
pd_lender:[null],
|
||||||
|
pd_name:[null],
|
||||||
|
pd_applicant_id:[null],
|
||||||
|
});
|
||||||
|
this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.recordStatus=false;
|
||||||
|
// this.loadPDDetails();
|
||||||
|
// this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
// get changes for filter from parent componnet filter
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
// let filteredText = changes.bindFilterValue.currentValue;
|
||||||
|
// filteredText = filteredText ? filteredText.trim() : filteredText;
|
||||||
|
let filteredText = changes.bindFilterValue.currentValue ? changes.bindFilterValue.currentValue.trim() : changes.bindFilterValue.currentValue;
|
||||||
|
filteredText = filteredText ? filteredText.toLowerCase() : filteredText;
|
||||||
|
this.dataSourceTab2.filter = filteredText;
|
||||||
|
}
|
||||||
|
|
||||||
|
// load inprogress pd list
|
||||||
|
|
||||||
|
loadPDDetails() {
|
||||||
|
this._pd.getTabStatusPdDetails(this.tabStatus)
|
||||||
|
.subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.progressPdListData = data.records;
|
||||||
|
this.dataLengthTab2 = data.records.length;
|
||||||
|
this.dataSourceTab2.data = this.progressPdListData;
|
||||||
|
}else{
|
||||||
|
this.progressPdListData =[];
|
||||||
|
this.dataSourceTab2 = null;
|
||||||
|
this.recordStatus=true;
|
||||||
|
}
|
||||||
|
},error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Went Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
pageChange(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
viewPD(pdid:string){
|
||||||
|
this.loadPdView.next(pdid);
|
||||||
|
|
||||||
|
}
|
||||||
|
titleCaseWord(word:string) {
|
||||||
|
if (!word) return word;
|
||||||
|
return word[0].toUpperCase() + word.substr(1).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common Search
|
||||||
|
* sriram
|
||||||
|
*/
|
||||||
|
|
||||||
|
getcommonDropDown() : void
|
||||||
|
{
|
||||||
|
this._pd.getAllMasterDatas('PDSTATUS').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.pdStatus = res.records.filter(status=>status.isactive==1 && status.pd_status_name == this.tabStatus);
|
||||||
|
}
|
||||||
|
// this.searchForm.controls['pd_status'].setValue(this.pdStatus[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
this._pd.getAllMasterDatas('PDTYPE').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.PDType = res.records.filter(type=>type.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// this._pd.getAllMasterDatas('CITY').subscribe(res=>
|
||||||
|
// {
|
||||||
|
// if(res.dataStatus==true)
|
||||||
|
// {
|
||||||
|
// this.CITY = res.records.filter(city=>city.isactive==1);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
this._pd.getListOfCities().subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.CITY = res.records;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._pd.getAllMasterDatas('ENTITY').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.ENTITY = res.records.filter(ent=>ent.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._pd.getAllMasterDatas('PRODUCTS').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.PRODUCTS = res.records.filter(pro=>pro.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
checkDate(e)
|
||||||
|
{
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
searchItem()
|
||||||
|
{
|
||||||
|
|
||||||
|
if(this.searchForm.value.pd_type !=null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
this.searchForm.value.pd_type = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.searchForm.value.pd_status !=null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
this.searchForm.value.pd_status = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.searchForm.value.pd_from_date = this.pipe.transform(this.searchForm.value.pd_from_date,'yyyy-MM-dd');
|
||||||
|
this.searchForm.value.pd_to_date = this.pipe.transform(this.searchForm.value.pd_to_date,'yyyy-MM-dd');
|
||||||
|
|
||||||
|
this._pd.overAllSearchFormDetails(this.searchForm.value).subscribe(res=>
|
||||||
|
{
|
||||||
|
this.xpandStatus = false;
|
||||||
|
if(res['dataStatus']==true)
|
||||||
|
{
|
||||||
|
this.dataSourceTab2 = res['records'];
|
||||||
|
this.dataSourceTab2.paginator = this.paginator;
|
||||||
|
}else{
|
||||||
|
this.notifier.notify('warning', 'No Records Found !');
|
||||||
|
this.dataSourceTab2.paginator['length'] = 0;
|
||||||
|
this.dataSourceTab2.paginator['pageIndex'] = 0;
|
||||||
|
this.dataSourceTab2.data = [];
|
||||||
|
}
|
||||||
|
},error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Went Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onReset(){
|
||||||
|
this.searchForm.reset();
|
||||||
|
this.loadPDDetails();
|
||||||
|
this.xpandStatus = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.dataSourceTab2.paginator = this.paginator;
|
||||||
|
this.dataSourceTab2.sort = this.sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
<mat-card>
|
||||||
|
<mat-card-content [style.display]="viewPdList ? 'block' : 'none'">
|
||||||
|
<div fxLayout="row">
|
||||||
|
<div fxFlex="50" class="pb-0 text-sm-left">
|
||||||
|
<mat-form-field dividerColor="primary" style="width: 50%;">
|
||||||
|
<input matInput [(ngModel)]="filterValue" placeholder="Filter">
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="50" class="pb-0 text-sm-right">
|
||||||
|
<button mat-fab (click)="viewMapPdDetails()" class="mr-1 mb-1 hover-icon" matTooltip="Map view" matTooltipPosition="above"><mat-icon>map</mat-icon></button>
|
||||||
|
<span *ngIf="userRoleID == 10 || userRoleID == 3"><button mat-fab (click)="addPdDetails()" class="mr-1 mb-1 hover-icon" matTooltip="Add PD" matTooltipPosition="above" *ngIf="roleAccessDetails.trigger"><mat-icon>add</mat-icon></button></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<mat-card>
|
||||||
|
<mat-tab-group (selectedTabChange)="onTabClick($event)">
|
||||||
|
<mat-tab>
|
||||||
|
<ng-template mat-tab-label><mat-icon>select_all</mat-icon> All</ng-template>
|
||||||
|
<app-all-pd [bindFilterValue]="filterValue" (loadPdView)="viewPDDetails($event)"></app-all-pd>
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab>
|
||||||
|
<ng-template mat-tab-label><mat-icon>schedule</mat-icon> Scheduled </ng-template>
|
||||||
|
<app-scheduled-pd [bindFilterValue]="filterValue" (loadPdView)="viewPDDetails($event)"></app-scheduled-pd>
|
||||||
|
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab>
|
||||||
|
<ng-template mat-tab-label><mat-icon>hdr_strong</mat-icon> In Progress </ng-template>
|
||||||
|
<app-inprogress-pd [bindFilterValue]="filterValue" (loadPdView)="viewPDDetails($event)"></app-inprogress-pd>
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab>
|
||||||
|
<ng-template mat-tab-label><mat-icon>done</mat-icon> Completed </ng-template>
|
||||||
|
<app-completed-pd [bindFilterValue]="filterValue" (loadPdView)="viewPDDetails($event)"></app-completed-pd>
|
||||||
|
|
||||||
|
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab>
|
||||||
|
<ng-template mat-tab-label><mat-icon>done_all</mat-icon> QC Completed </ng-template>
|
||||||
|
<app-qc-completed-pd [bindFilterValue]="filterValue" (loadPdView)="viewPDDetails($event)"></app-qc-completed-pd>
|
||||||
|
|
||||||
|
|
||||||
|
</mat-tab>
|
||||||
|
|
||||||
|
</mat-tab-group>
|
||||||
|
</mat-card>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
<router-outlet></router-outlet>
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
.ic-change:hover {
|
||||||
|
transform: scale(1.1);
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
.cell{
|
||||||
|
display:inline !important;
|
||||||
|
}
|
||||||
|
.cellhide{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.center{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
.fontsize{
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-ink-bar{
|
||||||
|
background-color:#e00201;
|
||||||
|
}
|
||||||
|
.mat-tab-label-active{
|
||||||
|
color: #e00201 !important;
|
||||||
|
}
|
||||||
|
.mat-fab.mat-accent{
|
||||||
|
color:#e00201 !important;
|
||||||
|
background-color: #fff !important;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { RegisterComponent } from './register.component';
|
import { ListPdComponent } from './list-pd.component';
|
||||||
|
|
||||||
describe('RegisterComponent', () => {
|
describe('ListPdComponent', () => {
|
||||||
let component: RegisterComponent;
|
let component: ListPdComponent;
|
||||||
let fixture: ComponentFixture<RegisterComponent>;
|
let fixture: ComponentFixture<ListPdComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ RegisterComponent ]
|
declarations: [ ListPdComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(RegisterComponent);
|
fixture = TestBed.createComponent(ListPdComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
96
ng6-seed/src/app/personal-discussion/manage-pd/list-pd/list-pd.component.ts
Executable file
96
ng6-seed/src/app/personal-discussion/manage-pd/list-pd/list-pd.component.ts
Executable file
@ -0,0 +1,96 @@
|
|||||||
|
import { Component,ViewChild, OnInit, ViewEncapsulation, OnDestroy, OnChanges } from '@angular/core';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { PdTrigerService } from '../../pd-service/pd-triger.service';
|
||||||
|
import { MatPaginator, MatSort, MatTableDataSource, PageEvent, MatTabChangeEvent } from '@angular/material';
|
||||||
|
import { AllPdComponent } from './all-pd/all-pd.component';
|
||||||
|
import { InprogressPdComponent } from './inprogress-pd/inprogress-pd.component';
|
||||||
|
import { ScheduledPdComponent } from './scheduled-pd/scheduled-pd.component';
|
||||||
|
import { CompletedPdComponent } from './completed-pd/completed-pd.component';
|
||||||
|
import { QcCompletedPdComponent } from './qc-completed-pd/qc-completed-pd.component';
|
||||||
|
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list-pd',
|
||||||
|
templateUrl: './list-pd.component.html',
|
||||||
|
styleUrls: ['./list-pd.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
})
|
||||||
|
export class ListPdComponent implements OnInit, OnDestroy {
|
||||||
|
public filterValue: string;
|
||||||
|
private notifier: NotifierService;
|
||||||
|
recordStatus: boolean;
|
||||||
|
noRecordFound:boolean;
|
||||||
|
viewPdList:boolean;
|
||||||
|
viewMapPdList:boolean;
|
||||||
|
errorMessage: any;
|
||||||
|
public allTab:boolean;
|
||||||
|
public inprogressTab:boolean = false;
|
||||||
|
public scheduledTab:boolean = false;
|
||||||
|
public completedTab:boolean = false;
|
||||||
|
public getTabIndex:number=0;
|
||||||
|
|
||||||
|
@ViewChild(AllPdComponent) allTabC:AllPdComponent;
|
||||||
|
@ViewChild(InprogressPdComponent) inprogressTabC: InprogressPdComponent;
|
||||||
|
@ViewChild(ScheduledPdComponent) scheduledTabC:ScheduledPdComponent;
|
||||||
|
@ViewChild(CompletedPdComponent) completedTabC: CompletedPdComponent;
|
||||||
|
@ViewChild(QcCompletedPdComponent) qcCompletedTabC: QcCompletedPdComponent;
|
||||||
|
|
||||||
|
// roles checks for enables events
|
||||||
|
roleAccessDetails:any
|
||||||
|
public userRoleID = +localStorage.getItem('user_role') ;
|
||||||
|
constructor( notifier: NotifierService, private route: ActivatedRoute,
|
||||||
|
private router: Router, private _pd: PdTrigerService) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
this.roleAccessDetails=this._pd.getRoleAccessDetails();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.viewPdList = true;
|
||||||
|
this.recordStatus=false;
|
||||||
|
this.allTab=true;
|
||||||
|
|
||||||
|
}
|
||||||
|
// after view call all tabs component
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.allTabC.loadPDDetails();
|
||||||
|
}
|
||||||
|
|
||||||
|
// view pd list in map view
|
||||||
|
viewMapPdDetails(){
|
||||||
|
this.viewPdList = !this.viewPdList;
|
||||||
|
this.router.navigate([ '../pdlist/pdmaplist'], { relativeTo: this.route });
|
||||||
|
|
||||||
|
}
|
||||||
|
// add pd
|
||||||
|
addPdDetails() {
|
||||||
|
this.viewPdList = !this.viewPdList;
|
||||||
|
this.router.navigate([ '../pdlist/addpd'], { relativeTo: this.route });
|
||||||
|
|
||||||
|
}
|
||||||
|
showListView(status: boolean){
|
||||||
|
this.viewPdList = status;
|
||||||
|
|
||||||
|
}
|
||||||
|
pdListLoad(status: boolean){
|
||||||
|
this.viewPdList = status;
|
||||||
|
this.getTabIndex==0 ? this.allTabC.loadPDDetails() : this.getTabIndex==1 ? this.scheduledTabC.loadPDDetails() : this.getTabIndex==2 ? this.inprogressTabC.loadPDDetails() : this.getTabIndex==3 ? this.completedTabC.loadPDDetails() : this.qcCompletedTabC.loadPDDetails();
|
||||||
|
|
||||||
|
}
|
||||||
|
viewPDDetails(pdid:string){
|
||||||
|
this.viewPdList = !this.viewPdList;
|
||||||
|
this.router.navigate([ '../pdlist/viewpd',pdid], { relativeTo: this.route });
|
||||||
|
|
||||||
|
}
|
||||||
|
//get tab changes
|
||||||
|
onTabClick(event: MatTabChangeEvent) {
|
||||||
|
this.getTabIndex=event.index;
|
||||||
|
this.getTabIndex==0 ? this.allTabC.loadPDDetails() : this.getTabIndex==1 ? this.scheduledTabC.loadPDDetails() : this.getTabIndex==2 ? this.inprogressTabC.loadPDDetails() : this.getTabIndex==3 ? this.completedTabC.loadPDDetails() : this.qcCompletedTabC.loadPDDetails();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnDestroy(): void {
|
||||||
|
this.viewPdList=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
|
||||||
|
<div fxLayout="row" [style.minHeight]="'100%'">
|
||||||
|
<div fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="100" fxFlex.lg="100" fxFlex.xl="100">
|
||||||
|
<div *ngIf="!noRecordFound" class="ml-xs mr-xs" style="width: 95%;">
|
||||||
|
<mat-form-field dividerColor="primary" class="ml-xs mr-xs" style="width: 24%;">
|
||||||
|
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div style="text-align:right;position:absolute;z-index:2;right:1px">
|
||||||
|
<button mat-fab class="hover-icon" matTooltip="Close" matTooltipPosition="above" (click)="goList()"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="row">
|
||||||
|
<div fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="30" fxFlex.lg="30" fxFlex.xl="30">
|
||||||
|
|
||||||
|
<div [style.overflow]="'auto'" [style.height.px]="'500'" *ngIf="pdList.length > 0">
|
||||||
|
<mat-card>
|
||||||
|
<!--<mat-card-header style="background-color:#f44336;color:#fff;padding: 20px;">
|
||||||
|
PD Details
|
||||||
|
</mat-card-header>-->
|
||||||
|
<mat-card-content style="max-height:500px;overflow:auto;">
|
||||||
|
<div>
|
||||||
|
<input style="border-bottom: 1px solid #dcd9d9;padding-top: 5%;" matInput (keyup)="applyFilter($event.target.value)" placeholder="Search">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div *ngFor="let details of dataSource.connect() | async">
|
||||||
|
<div *ngIf="(details.pd_status=='TRIGGERED' || details.pd_status=='ALLOCATED') && details.fk_pd_type !='3' ">
|
||||||
|
<mat-card [ngStyle]="{'border-left':'5px solid','border-left-color': getColor(details.fk_pd_type)}">
|
||||||
|
|
||||||
|
<mat-card-title *ngIf="details.applicat_details" style="margin-bottom: 0px;">
|
||||||
|
<div fxLayout="row" fxFlex="100">
|
||||||
|
<div fxFlex="55">
|
||||||
|
<span style="font-weight:700">{{details.applicat_details[0].applicant_name}}</span><span style="font-size: 13px;"> ({{details.customer_segment_abbr}})</span> <br>
|
||||||
|
<span style="font-size: 13px;" >{{details.lender_full_name}} ({{details.lender_applicant_id}})</span><br>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="45" style="text-align:right;" *ngIf="details.pd_status!=pdStatusCheck.DRAFT">
|
||||||
|
<!-- <button mat-raised-button mat-button-sm mat-icon-button class="mr-1 hover-icon" type="button" matTooltip="PD Allocation" matTooltipPosition="above" (click)="pdAllocationTo(details)" *ngIf="roleAccessDetails.allocate"><mat-icon>verified_user</mat-icon></button> -->
|
||||||
|
<!-- <button mat-raised-button mat-button-sm mat-icon-button class=" hover-icon" type="button" matTooltip="Schedule" matTooltipPosition="above" (click)="scheduleDetails(details)" *ngIf="roleAccessDetails.schedule"><mat-icon>schedule</mat-icon></button> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</mat-card-title>
|
||||||
|
<mat-card-content style="padding: 2% 0% 0% 7%;">
|
||||||
|
|
||||||
|
<span style="font-size: 13px;" class="hover-icon"><i *ngIf="details.city_name" class="fa-1x fa fa-map-marker"> </i>{{details.city_name}}/{{details.state_name}}-{{details.pincode}}</span> <br>
|
||||||
|
<span style="font-size: 13px;" *ngIf="details.product_abbr">{{details.product_abbr}}/{{details.subproduct_abbr}}</span><br>
|
||||||
|
<!----<span style="font-size: 13px;"> {{details.customer_segment_abbr}}<span *ngIf="details.loan_amount" style="padding-left: 48%;"><i class="fa-1x fa fa-rupee"> </i>{{details.loan_amount}}</span></span><br>-->
|
||||||
|
<span style="font-size: 13px;">{{details.pd_date_of_initiation}}</span> -
|
||||||
|
<span style="font-size: 13px;">{{details.pd_status}} <!--- {{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}--></span>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
<mat-list *ngIf="recordStatus">
|
||||||
|
<mat-list-item>
|
||||||
|
<p mat-line>No Record Found ...</p>
|
||||||
|
|
||||||
|
</mat-list-item>
|
||||||
|
</mat-list>
|
||||||
|
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!---- <mat-paginator #paginator [length]="pdList.length" [pageIndex]="pageIndex" [pageSize]="pageSize"
|
||||||
|
[pageSizeOptions]="[5, 10, 25, 100]" (page)="pageEvent = $event; pageChange($event)">
|
||||||
|
</mat-paginator> -->
|
||||||
|
</div>
|
||||||
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="70" fxFlex.lg="70" fxFlex.xl="70">
|
||||||
|
<mat-card class="mb-2" *ngIf="pdList.length > 0">
|
||||||
|
<agm-map [latitude]="lat" [longitude]="lng" #gm>
|
||||||
|
<agm-marker *ngFor="let getMap of mapDetails" [latitude]="getMap.geometry.location.lat" [longitude]="getMap.geometry.location.lng" (mouseOver)="onMouseOver(infoWindow,gm)">
|
||||||
|
<agm-info-window [disableAutoPan]="false" #infoWindow>
|
||||||
|
<div>
|
||||||
|
<p><strong>{{getMap.applicant_details | titlecase}}</strong></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<p>{{getMap.lender_details}}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</agm-info-window>
|
||||||
|
</agm-marker>
|
||||||
|
</agm-map>
|
||||||
|
</mat-card>
|
||||||
|
</div>
|
||||||
|
</div><!--End Row-->
|
||||||
|
<div style="text-align:right;position:absolute;z-index:2;bottom: 0;right: 0;margin-right: 70px;margin-bottom: 65px;">
|
||||||
|
<span style="width: 30px; height: 10px; background:#009688;color:#009688">II</span> Full <span style="width: 30px; height: 10px; background:#673ab7;color:#673ab7">II</span> Smart
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
@import "../../../../../assets/styles/scss/material.variables";
|
||||||
|
|
||||||
|
:host {
|
||||||
|
margin-left: -5px;
|
||||||
|
margin-right: -5px;
|
||||||
|
margin-top: -5px;
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.sebm-google-map-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 500px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mat-toolbar-height-desktop: 64px !default;
|
||||||
|
$mat-toolbar-height-mobile-portrait: 56px !default;
|
||||||
|
$mat-toolbar-height-mobile-landscape: 48px !default;
|
||||||
|
|
||||||
|
.mat-card-top {
|
||||||
|
margin-top: -($mat-toolbar-height-desktop);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media ($mat-xsmall) and (orientation: portrait) {
|
||||||
|
.mat-card-top {
|
||||||
|
margin-top: -($mat-toolbar-height-mobile-portrait);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media ($mat-small) and (orientation: landscape) {
|
||||||
|
.mat-card-top {
|
||||||
|
margin-top: -($mat-toolbar-height-mobile-landscape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 0px; /* remove scrollbar space */
|
||||||
|
background: transparent; /* optional: just make scrollbar invisible */
|
||||||
|
}
|
||||||
|
/* optional: show position indicator in red */
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: #FF0000;
|
||||||
|
}
|
||||||
|
::ng-deep .body-container{
|
||||||
|
padding:0px !important;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { TitleListComponent } from './title-list.component';
|
import { MapPdViewComponent } from './map-pd-view.component';
|
||||||
|
|
||||||
describe('TitleListComponent', () => {
|
describe('MapPdViewComponent', () => {
|
||||||
let component: TitleListComponent;
|
let component: MapPdViewComponent;
|
||||||
let fixture: ComponentFixture<TitleListComponent>;
|
let fixture: ComponentFixture<MapPdViewComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ TitleListComponent ]
|
declarations: [ MapPdViewComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(TitleListComponent);
|
fixture = TestBed.createComponent(MapPdViewComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,162 @@
|
|||||||
|
import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core';
|
||||||
|
import { MatPaginator, MatSort, MatTableDataSource, PageEvent } from '@angular/material';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { MatDialog } from '@angular/material';
|
||||||
|
import { PdTrigerService } from './../../../pd-service/pd-triger.service';
|
||||||
|
import { GetGeometricLocationService } from './../../../location-service/get-geometric-location.service';
|
||||||
|
import { ListPdComponent } from './../list-pd.component';
|
||||||
|
// import { PdAllocationComponent } from './../pd-allocation/pd-allocation.component';
|
||||||
|
import { SmartPdAllocationComponent } from './../smart-pd-allocation/smart-pd-allocation.component';
|
||||||
|
import { TelePdAllocationComponent } from '././../tele-pd-allocation/tele-pd-allocation.component';
|
||||||
|
// import { SchedulePdComponent } from './../schedule-pd/schedule-pd.component';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-map-pd-view',
|
||||||
|
templateUrl: './map-pd-view.component.html',
|
||||||
|
styleUrls: ['./map-pd-view.component.scss']
|
||||||
|
})
|
||||||
|
export class MapPdViewComponent implements OnInit, OnDestroy {
|
||||||
|
private notifier:NotifierService;
|
||||||
|
lat:string
|
||||||
|
lng:string
|
||||||
|
mapDetails:any[] = [];
|
||||||
|
recordStatus: boolean;
|
||||||
|
noRecordFound: boolean = true;
|
||||||
|
errorMessage: any;
|
||||||
|
// pagination variable details
|
||||||
|
length = 50;
|
||||||
|
pageIndex = 0;
|
||||||
|
pageSize = 10;
|
||||||
|
pageEvent: PageEvent;
|
||||||
|
// data source variable details
|
||||||
|
pdListData = null;
|
||||||
|
public dataLength: number;
|
||||||
|
public dataSource = new MatTableDataSource();
|
||||||
|
@ViewChild(MatPaginator) paginator: MatPaginator;
|
||||||
|
@ViewChild(MatSort) sort: MatSort;
|
||||||
|
pdList:any[] = [];
|
||||||
|
|
||||||
|
// create values for status check
|
||||||
|
pdStatusCheck :any={
|
||||||
|
"DRAFT" :'DRAFT',
|
||||||
|
"TRIGGERED" :'TRIGGERED',
|
||||||
|
"ALLOCATED" :'ALLOCATED',
|
||||||
|
"SCHEDULED" :'SCHEDULED',
|
||||||
|
"INPROGRESS" :'INPROGRESS',
|
||||||
|
"COMPLETED" :'COMPLETED',
|
||||||
|
"QC_COMPLETED" :'QC_COMPLETED',
|
||||||
|
};
|
||||||
|
// roles checks for enables events
|
||||||
|
roleAccessDetails:any
|
||||||
|
public getColor(type: number): string{
|
||||||
|
|
||||||
|
return type == 1 ? "#009688" : "#673ab7" ;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(notifier:NotifierService,private route: ActivatedRoute,
|
||||||
|
private router: Router,private _pd: PdTrigerService,private dialog: MatDialog,private _geolocation: GetGeometricLocationService, private ListPdComponent : ListPdComponent) {
|
||||||
|
this.notifier=notifier;
|
||||||
|
this.roleAccessDetails=this._pd.getRoleAccessDetails();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.ListPdComponent.showListView(false);
|
||||||
|
this.recordStatus=false
|
||||||
|
this.loadPdDetails(this.pdStatusCheck.TRIGGERED,this.pdStatusCheck.ALLOCATED);
|
||||||
|
}
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.dataSource.paginator = this.paginator;
|
||||||
|
this.dataSource.sort = this.sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
loadPdDetails(triStatus,allocStatus){
|
||||||
|
this._pd.getPdMapList(triStatus,allocStatus).subscribe(responseList => {
|
||||||
|
if(responseList.length>0){
|
||||||
|
if(responseList[0].dataStatus===true){
|
||||||
|
let filterValue=responseList[0].records.filter(val=>val.fk_pd_type !='3')
|
||||||
|
this.pdList= this.pdList.concat.apply(this.pdList, filterValue);
|
||||||
|
}
|
||||||
|
if(responseList[1].dataStatus===true){
|
||||||
|
let filterValue=responseList[1].records.filter(val=>val.fk_pd_type !='3')
|
||||||
|
this.pdList= this.pdList.concat.apply(this.pdList, filterValue);
|
||||||
|
}
|
||||||
|
if(this.pdList.length>0){
|
||||||
|
this.pdListData = this.pdList;
|
||||||
|
this.dataLength = this.pdList.length;
|
||||||
|
this.dataSource.data = this.pdListData;
|
||||||
|
this.getMapViewLocations(this.pdList);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.pdList=[];
|
||||||
|
this.dataLength = null;
|
||||||
|
this.recordStatus=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.pdList=[];
|
||||||
|
this.dataLength = null;
|
||||||
|
this.recordStatus=true;
|
||||||
|
}
|
||||||
|
},error => this.errorMessage = <any> error);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getMapViewLocations(getData:any){
|
||||||
|
getData.forEach(element => {
|
||||||
|
if(element.addressline1 && element.pincode && element.state_name && element.city_name){
|
||||||
|
this._geolocation.findLocations(element.addressline1,element.pincode,element.state_name,element.city_name)
|
||||||
|
.subscribe(response => {
|
||||||
|
if (response.status == 'OK') {
|
||||||
|
this.lat = response.results[0].geometry.location.lat;
|
||||||
|
this.lng = response.results[0].geometry.location.lng;
|
||||||
|
response.results[0].applicant_details = element.applicant_name + ' ( Id:'+element.pd_id+')';
|
||||||
|
response.results[0].lender_details = element.lender_short_name + '( Id:'+element.lender_applicant_id+')';
|
||||||
|
this.mapDetails.push(response.results[0]);
|
||||||
|
}
|
||||||
|
// else if (response.status == 'ZERO_RESULTS') {
|
||||||
|
// console.log('geocodingAPIService', 'ZERO_RESULTS', response.status);
|
||||||
|
// } else {
|
||||||
|
// console.log('geocodingAPIService', 'Other error', response.status);
|
||||||
|
// }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pageChange(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
// go list view
|
||||||
|
goList(){
|
||||||
|
this.ListPdComponent.showListView(true);
|
||||||
|
this.router.navigate([ '../../' ], { relativeTo: this.route });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnDestroy(): void {
|
||||||
|
this.ListPdComponent.showListView(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
//Global filter
|
||||||
|
applyFilter(filterValue: string) {
|
||||||
|
filterValue = filterValue.trim(); // Remove whitespace
|
||||||
|
filterValue = filterValue.toLowerCase(); // Datasource defaults to lowercase matches
|
||||||
|
this.dataSource.filter = filterValue;
|
||||||
|
}
|
||||||
|
// this is for map tooltip open
|
||||||
|
onMouseOver(infoWindow, gm) {
|
||||||
|
|
||||||
|
if (gm.lastOpen != null) {
|
||||||
|
gm.lastOpen.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
gm.lastOpen = infoWindow;
|
||||||
|
|
||||||
|
infoWindow.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
<form role="form" [formGroup]="ngForm" accept-charset="UTF-8" novalidate>
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
Edit PD Report Details
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</h2>
|
||||||
|
<mat-dialog-content *ngIf="showEditor">
|
||||||
|
<div style="margin: 12px;">
|
||||||
|
<div class="form-group has-feedback">
|
||||||
|
<ckeditor formControlName="content" name="myckeditor" required [config]="ckeConfig" debounce="500" (change)="onChange($event)">
|
||||||
|
</ckeditor>
|
||||||
|
</div>
|
||||||
|
<!-- <button [disabled]="ngForm.invalid" mat-raised-button color="primary" type="button" (click)="myClick()">Save</button> -->
|
||||||
|
</div>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button [disabled]="ngForm.invalid && showEditor===false" mat-raised-button color="primary" type="button" (click)="myClick()">Save</button>
|
||||||
|
<button mat-button mat-dialog-close mat-raised-button color="primary" type="button">Cancel</button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
</form>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
::ng-deep .cdk-global-overlay-wrapper{
|
||||||
|
justify-content: center !important;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ModelEditPdReportComponent } from './model-edit-pd-report.component';
|
||||||
|
|
||||||
|
describe('ModelEditPdReportComponent', () => {
|
||||||
|
let component: ModelEditPdReportComponent;
|
||||||
|
let fixture: ComponentFixture<ModelEditPdReportComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ModelEditPdReportComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ModelEditPdReportComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,97 @@
|
|||||||
|
import { Component, OnInit, ViewChild , Input, Inject} from '@angular/core';
|
||||||
|
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
|
||||||
|
import { PdTrigerService } from '../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from "angular-notifier";
|
||||||
|
|
||||||
|
|
||||||
|
import {
|
||||||
|
MatDialog,
|
||||||
|
MatDialogRef,
|
||||||
|
MAT_DIALOG_DATA
|
||||||
|
} from '@angular/material';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-model-edit-pd-report',
|
||||||
|
templateUrl: './model-edit-pd-report.component.html',
|
||||||
|
styleUrls: ['./model-edit-pd-report.component.scss']
|
||||||
|
})
|
||||||
|
export class ModelEditPdReportComponent implements OnInit {
|
||||||
|
|
||||||
|
@Input() questionId: number;
|
||||||
|
ngForm: FormGroup;
|
||||||
|
name = 'ng2-ckeditor';
|
||||||
|
ckeConfig: any;
|
||||||
|
recordData: any;
|
||||||
|
log = '';
|
||||||
|
showEditor: boolean= false;
|
||||||
|
@ViewChild('myckeditor') ckeditor: any;
|
||||||
|
/**
|
||||||
|
* Notifier service
|
||||||
|
*/
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor( private _formBuilder: FormBuilder,
|
||||||
|
private pdTrigerService: PdTrigerService,
|
||||||
|
notifier: NotifierService ,
|
||||||
|
private dialogRef: MatDialogRef<ModelEditPdReportComponent>,
|
||||||
|
@Inject(MAT_DIALOG_DATA) public data: any) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
this.ngForm = this._formBuilder.group({
|
||||||
|
report_template_id: [],
|
||||||
|
fk_template_id: [],
|
||||||
|
content: [null, Validators.compose([Validators.required])],
|
||||||
|
isactive:[1]
|
||||||
|
})
|
||||||
|
// this.mycontent = `<p>My html content</p>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
// alert(JSON.stringify(this.data));
|
||||||
|
// this.ngForm.controls['content'].setValue('<h1>Home<h1>');
|
||||||
|
this.pdTrigerService.getActualPDReportModelTemplate(this.data).subscribe(data => {
|
||||||
|
if(data['dataStatus']){
|
||||||
|
this.recordData = data.records[0];
|
||||||
|
this.ngForm = this._formBuilder.group({
|
||||||
|
content: [this.recordData.pd_report_latest_version_blob, Validators.compose([Validators.required])],
|
||||||
|
isactive:[this.recordData.isactive]
|
||||||
|
});
|
||||||
|
this.showEditor = true;
|
||||||
|
}
|
||||||
|
},err => {
|
||||||
|
|
||||||
|
});
|
||||||
|
// this.ckeConfig = {
|
||||||
|
// allowedContent: false,
|
||||||
|
// extraPlugins: 'divarea',
|
||||||
|
// forcePasteAsPlainText: true
|
||||||
|
// };
|
||||||
|
}
|
||||||
|
|
||||||
|
onChange($event: any): void {
|
||||||
|
// console.log('onChange');
|
||||||
|
// this.log += new Date() + "<br />";
|
||||||
|
}
|
||||||
|
|
||||||
|
myClick(): void {
|
||||||
|
let template = this.ngForm.controls['content'].value;
|
||||||
|
// alert(template);
|
||||||
|
let data = {
|
||||||
|
content: template,
|
||||||
|
pd_id: this.data.startId
|
||||||
|
}
|
||||||
|
|
||||||
|
// alert(JSON.stringify(data));
|
||||||
|
// var formValues = this.ngForm.value;
|
||||||
|
// Object.keys(formValues).forEach((key) => (formValues[key] == null) && delete formValues[key]);
|
||||||
|
|
||||||
|
this.pdTrigerService.updatePDReportDetails(data).subscribe(data=>{
|
||||||
|
this.notifier.notify('success', 'Your Changes Updated.!');
|
||||||
|
this.dialogRef.close({
|
||||||
|
status: true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}, err => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,107 @@
|
|||||||
|
<!-- this is for completed pd report -->
|
||||||
|
<ng-container *ngIf="pdReportRecords && pdReportRecords.pd_status=='COMPLETED'">
|
||||||
|
<div *ngIf="reGenerateBtn">
|
||||||
|
|
||||||
|
<mat-sidenav-container class="app-inner background-none shadow-none mail-db">
|
||||||
|
<mat-sidenav #mailnav [mode]="isOver() ? 'over' : 'side'" [opened]="!isOver()" class="mail-sidebar pl-xs pr-xs">
|
||||||
|
<!-- <button _ngcontent-c21="" [disabled]="currentPDStatus !=pdStatusCheck.COMPLETED || actualQuestions!=answeredQuestions" class="compose-btn mat-warn mat-raised-button mb-1" (click)="changePDStatus(pdStatusCheck.QC_COMPLETED);"> <span>{{currentPDStatus==pdStatusCheck.COMPLETED ? 'QC OK':(currentPDStatus==pdStatusCheck.QC_COMPLETED ? 'QC COMPLETED' : currentPDStatus )}}</span></button> -->
|
||||||
|
<button class="compose-btn mat-warn mat-raised-button mb-1" type="button" [disabled]="reGenerateBtn===false" (click)="reGeneratePFReport()"><b>Re-generate Report</b></button>
|
||||||
|
|
||||||
|
<mat-nav-list style="background-color: white !important">
|
||||||
|
<a mat-list-item *ngFor="let pd of pdReportVersionList; let itemIndex = index;" (click)="changeVersion(pd, itemIndex)">
|
||||||
|
<h4 mat-line [ngStyle]="{'color':pd.is_latest == 1 && itemIndex == selectedIndex ? '#e00201' : pd.is_latest == 1 && itemIndex != selectedIndex ? 'green' : pd.is_latest !=1 && itemIndex == selectedIndex ? '#e00201' : 'rgba(0, 0, 0, 0.87)' }">{{ pd.doc_name }}</h4>
|
||||||
|
<!-- <h4 mat-line>{{ pd.doc_name }}</h4> -->
|
||||||
|
<p mat-line> {{pd.createdby}} ({{pd.createdon}}) </p>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
</mat-nav-list>
|
||||||
|
|
||||||
|
|
||||||
|
</mat-sidenav>
|
||||||
|
<mat-toolbar color="primary">
|
||||||
|
<!-- fxHide="false" fxHide.gt-sm -->
|
||||||
|
<button (click)="mailnav.toggle()" mat-icon-button>
|
||||||
|
<mat-icon style="color: white;">short_text</mat-icon>
|
||||||
|
</button>
|
||||||
|
<span class="mr-1 ml-1">View More</span>
|
||||||
|
</mat-toolbar>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="100" fxFlex.lg="100" fxFlex.xl="100">
|
||||||
|
<!--{{qcStatus}}-->
|
||||||
|
<figure style="min-height: 240px;">
|
||||||
|
|
||||||
|
<div *ngIf="latestPDDetails">
|
||||||
|
<div style="margin: 12px;">
|
||||||
|
<!-- background: #ddd;
|
||||||
|
padding: 8px;" -->
|
||||||
|
<div style="text-align: right" class="mb-1">
|
||||||
|
<button mat-raised-button mat-icon-button class="hover-icon " type="button" matTooltip="Edit" matTooltipPosition="above"
|
||||||
|
*ngIf="latestPDDetails.is_latest == 1 && qcStatus !== 'QC_COMPLETED'" (click)="addNewQuestion()"><mat-icon>edit</mat-icon></button>
|
||||||
|
<button mat-stroked-button *ngIf="latestPDDetails.is_latest == 0 && qcStatus !== 'QC_COMPLETED'" type="button" (click)="changeDocumentEdit()">Restore</button>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="reGenerateBtn">
|
||||||
|
<pdf-viewer [src]="latestPDDetails.doc_uri" [original-size]="false" [page]="1">
|
||||||
|
</pdf-viewer>
|
||||||
|
<!-- latestPDDetails.doc_uri -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<button mat-raised-button color="blue" type="button" (click)="reportReview('REMARKS')" style="margin-right: 2px;">Notes</button>
|
||||||
|
<button mat-raised-button color="primary" type="button" (click)="reportReview('COMPLETE')" style="margin-right: 2px;">QC Complete</button>
|
||||||
|
<button mat-raised-button color="primary" type="button" (click)="loadPdViewCompoent()" style="margin-right: 2px;">Close</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-sidenav-container>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="generateBtn">
|
||||||
|
<div fxLayout="row wrap">
|
||||||
|
<div class="container" fxLayout fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="10px" fxLayoutGap.xs="0" style="padding: 10%;">
|
||||||
|
<div fxFlex="100">
|
||||||
|
<h5 style="text-align:center;color: black;"> {{message}}</h5>
|
||||||
|
<div style="text-align:center;">
|
||||||
|
<button mat-raised-button color="primary" type="button" *ngIf="generateBtn" (click)="generateNewPDReport()" style="margin-right: 2px;">Generate Report</button>
|
||||||
|
<button mat-raised-button color="primary" type="button" (click)="loadPdViewCompoent()" style="margin-right: 2px;">Close</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</ng-container>
|
||||||
|
<!-- this is for qc completed pd report -->
|
||||||
|
<ng-container *ngIf="pdReportRecords && pdReportRecords.pd_status=='QC_COMPLETED'">
|
||||||
|
|
||||||
|
<div *ngIf="reGenerateBtn" fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="100" fxFlex.lg="100" fxFlex.xl="100">
|
||||||
|
<!--{{qcStatus}}-->
|
||||||
|
<figure style="min-height: 240px;">
|
||||||
|
|
||||||
|
<ng-container *ngIf="latestPDDetails">
|
||||||
|
<div style="margin: 12px;">
|
||||||
|
|
||||||
|
<div *ngIf="reGenerateBtn">
|
||||||
|
<pdf-viewer [src]="latestPDDetails.doc_uri" [original-size]="false" [page]="1">
|
||||||
|
</pdf-viewer>
|
||||||
|
<!-- latestPDDetails.doc_uri -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<button mat-raised-button color="primary" type="button" (click)="loadPdViewCompoent()" style="margin-right: 2px;">Close</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</ng-container>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
@ -0,0 +1,128 @@
|
|||||||
|
@import "./../../../../../assets/styles/scss/components/messages";
|
||||||
|
:host {
|
||||||
|
margin-left: -5px;
|
||||||
|
margin-right: -5px;
|
||||||
|
margin-top: -5px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
:host /deep/ {
|
||||||
|
mat-sidenav {
|
||||||
|
max-width: 400px;
|
||||||
|
max-height: 500px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
.mat-sidenav-content {
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (min-width: 959px) {
|
||||||
|
.mat-sidenav-side {
|
||||||
|
background-color: transparent;
|
||||||
|
box-shadow: none!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.mat-menu-item-active {
|
||||||
|
color: red !important;
|
||||||
|
}
|
||||||
|
.mat-expansion-panel-header-description {
|
||||||
|
color: rgba(0, 0, 0, 87);
|
||||||
|
}
|
||||||
|
.mat-card-content {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
.mat-card-actions {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-ellipsis {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custm-list-item {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$base-card-box-shadow:1.5px 2.6px 24px 0 rgba(0, 35, 136, 0.08) !important;
|
||||||
|
$product-bg-color-hover: rgba(103, 58, 183, 0.7);
|
||||||
|
.p-list-main {
|
||||||
|
background: white;
|
||||||
|
margin: auto;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden !important;
|
||||||
|
border-radius: 10px 10px 10px 10px;
|
||||||
|
box-shadow: $base-card-box-shadow;
|
||||||
|
transform: scale(0.95);
|
||||||
|
transition: box-shadow 0.5s, transform 0.5s;
|
||||||
|
&:hover {
|
||||||
|
transform: scale(1);
|
||||||
|
box-shadow: 5px 20px 30px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
.p-list {
|
||||||
|
position: relative;
|
||||||
|
.top {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
// background: url(https://s-media-cache-ak0.pinimg.com/736x/49/80/6f/49806f3f1c7483093855ebca1b8ae2c4.jpg) no-repeat center center;
|
||||||
|
-webkit-background-size: 100%;
|
||||||
|
-moz-background-size: 100%;
|
||||||
|
-o-background-size: 100%;
|
||||||
|
background-size: 100%;
|
||||||
|
}
|
||||||
|
.bottom {
|
||||||
|
width: 200%;
|
||||||
|
height: 15%;
|
||||||
|
transition: transform 0.5s;
|
||||||
|
h1 {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.left {
|
||||||
|
height: 100%;
|
||||||
|
width: 50%;
|
||||||
|
background: #f4f4f4;
|
||||||
|
position: relative;
|
||||||
|
float: left;
|
||||||
|
.details {
|
||||||
|
padding: 5px;
|
||||||
|
float: left;
|
||||||
|
// width: calc(70% - 40px);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
.right {
|
||||||
|
width: 50%;
|
||||||
|
background: #A6CDDE;
|
||||||
|
color: white;
|
||||||
|
float: right;
|
||||||
|
height: 200%;
|
||||||
|
overflow: hidden;
|
||||||
|
.details {
|
||||||
|
padding: 20px;
|
||||||
|
float: right;
|
||||||
|
width: calc(70% - 40px);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.custm-list-item {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 2%;
|
||||||
|
right: 2%;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { CityListComponent } from './city-list.component';
|
import { PdReportComponent } from './pd-report.component';
|
||||||
|
|
||||||
describe('CityListComponent', () => {
|
describe('PdReportComponent', () => {
|
||||||
let component: CityListComponent;
|
let component: PdReportComponent;
|
||||||
let fixture: ComponentFixture<CityListComponent>;
|
let fixture: ComponentFixture<PdReportComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ CityListComponent ]
|
declarations: [ PdReportComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(CityListComponent);
|
fixture = TestBed.createComponent(PdReportComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,329 @@
|
|||||||
|
import { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';
|
||||||
|
import { Component, ViewChild, OnInit, ViewEncapsulation, OnDestroy, Inject } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray, AbstractControl } from '@angular/forms';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { ListPdComponent } from './../list-pd.component';
|
||||||
|
|
||||||
|
import { saveAs as importedSaveAs } from "file-saver";
|
||||||
|
|
||||||
|
import { PdTrigerService } from '../../../pd-service/pd-triger.service';
|
||||||
|
import {
|
||||||
|
MatDialog,
|
||||||
|
MatDialogRef,
|
||||||
|
MAT_DIALOG_DATA
|
||||||
|
} from "@angular/material";
|
||||||
|
import { ModelEditPdReportComponent } from './model-edit-pd-report/model-edit-pd-report.component';
|
||||||
|
import { QcReviewComponent } from './qc-review/qc-review.component';
|
||||||
|
import { HttpResponse } from "@angular/common/http";
|
||||||
|
|
||||||
|
/**sweet alert */
|
||||||
|
// import Swal from 'sweetalert2';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-pd-report',
|
||||||
|
templateUrl: './pd-report.component.html',
|
||||||
|
styleUrls: ['./pd-report.component.scss']
|
||||||
|
})
|
||||||
|
export class PdReportComponent implements OnInit {
|
||||||
|
Url: SafeUrl;
|
||||||
|
startPD: any;
|
||||||
|
//public src = 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf';
|
||||||
|
public src = 'https://lender7.s3.ap-south-1.amazonaws.com/pd1/pd_report_original_version.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJ3QDSPT3LDSWRYUQ%2F20181210%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20181210T053116Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=6e25703a1e339dd5f081fa8aca5b8b2d81ba161d8cfd708759de899abf72146b';
|
||||||
|
//public src;
|
||||||
|
public document;
|
||||||
|
public generateBtn: Boolean = false;
|
||||||
|
public reGenerateBtn: Boolean = false;
|
||||||
|
public pdReportVersionList = [];
|
||||||
|
// public src;
|
||||||
|
pdReportRecords: any;
|
||||||
|
latestPDDetails: any;
|
||||||
|
message: any;
|
||||||
|
selectedIndex: Number;
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService, private fb: FormBuilder, private route: ActivatedRoute,
|
||||||
|
private router: Router, public pdTrigerService: PdTrigerService, private listPDComponent: ListPdComponent,
|
||||||
|
private dialog: MatDialog, private sanitizer: DomSanitizer) {
|
||||||
|
this.startPD = this.route.snapshot.params['pdid'];
|
||||||
|
this.notifier = notifier;
|
||||||
|
// this.src = 'https://lender7.s3.ap-south-1.amazonaws.com/pd1/pd_report_original_version.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJ3QDSPT3LDSWRYUQ%2F20181210%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20181210T073026Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=35aa183cbbfc835f96719a5e9aa552c79b3a1b7d8bca043f7d738d730755dcbb';
|
||||||
|
// this.src = this.sanitizer.bypassSecurityTrustResourceUrl("https://lender7.s3.ap-south-1.amazonaws.com/pd1/pd_report_original_version.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJ3QDSPT3LDSWRYUQ%2F20181210%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20181210T053116Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=6e25703a1e339dd5f081fa8aca5b8b2d81ba161d8cfd708759de899abf72146b");
|
||||||
|
// alert(JSON.stringify(this.src));
|
||||||
|
// this.document = { name: 'Angular 2',
|
||||||
|
// description: 'An amazing Angular 2 pdf',
|
||||||
|
// url: { url: 'https://lender7.s3.ap-south-1.amazonaws.com/pd1/pd_report_original_version.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJ3QDSPT3LDSWRYUQ%2F20181210%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20181210T053116Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=6e25703a1e339dd5f081fa8aca5b8b2d81ba161d8cfd708759de899abf72146b', withCredentials: true } };
|
||||||
|
// this.Url = this.sanitizer.bypassSecurityTrustResourceUrl("https://lender7.s3.ap-south-1.amazonaws.com/pd1/pd_report_original_version.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJ3QDSPT3LDSWRYUQ%2F20181207%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20181207T122031Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=fac718f35d195ecb45d1dc7049fbaf0fa3158f237deeedac3bae60f8ec22e822");
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.listPDComponent.showListView(false);
|
||||||
|
this.getPdReportDetails();
|
||||||
|
this.getPdReportVersionList();
|
||||||
|
// start
|
||||||
|
|
||||||
|
// end
|
||||||
|
const elemSidebar = <HTMLElement>document.querySelector('.app-inner .mail-sidebar');
|
||||||
|
const elemContent = <HTMLElement>document.querySelector('.app-inner .main-content');
|
||||||
|
|
||||||
|
if (window.matchMedia(`(min-width: 1560px)`).matches && !this.isMac()) {
|
||||||
|
// Ps.initialize(elemSidebar, { wheelSpeed: 2, suppressScrollX: true });
|
||||||
|
// Ps.initialize(elemContent, { wheelSpeed: 2, suppressScrollX: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// this.loadTemplates(this.startPD);
|
||||||
|
// this.next = 1;
|
||||||
|
// this.previous = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
isMac(): boolean {
|
||||||
|
let bool = false;
|
||||||
|
if (navigator.platform.toUpperCase().indexOf('MAC') >= 0 || navigator.platform.toUpperCase().indexOf('IPAD') >= 0) {
|
||||||
|
bool = true;
|
||||||
|
}
|
||||||
|
return bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
isOver(): boolean {
|
||||||
|
return window.matchMedia(`(max-width: 1560px)`).matches;
|
||||||
|
}
|
||||||
|
|
||||||
|
reGeneratePFReport() {
|
||||||
|
let data = {
|
||||||
|
"pd_id": this.startPD,
|
||||||
|
"regenerate": "1"
|
||||||
|
};
|
||||||
|
this.pdTrigerService.getPDReportFinalDocument(data).subscribe(data => {
|
||||||
|
if (data.dataStatus) {
|
||||||
|
this.notifier.notify('success', 'Your Changes Updated.!');
|
||||||
|
this.getPdReportVersionList();
|
||||||
|
} else {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}
|
||||||
|
}, err => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
})
|
||||||
|
}
|
||||||
|
generateNewPDReport() {
|
||||||
|
let data = {
|
||||||
|
"pd_id": this.startPD
|
||||||
|
};
|
||||||
|
this.pdTrigerService.getPDReportFinalDocument(data).subscribe(data => {
|
||||||
|
if (data.dataStatus) {
|
||||||
|
this.notifier.notify('success', 'Your Changes Updated.!');
|
||||||
|
this.getPdReportVersionList();
|
||||||
|
} else {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}
|
||||||
|
}, err => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public qcStatus: string = '';
|
||||||
|
getPdReportVersionList() {
|
||||||
|
this.pdTrigerService.getPdDocVersionList(this.startPD).subscribe(data => {
|
||||||
|
if (data.status == 200 && data.dataStatus) {
|
||||||
|
this.pdReportVersionList = [...data.records.reports_urls].reverse();
|
||||||
|
let datas = this.pdReportVersionList.filter((a) => { return a.is_latest == 1; })
|
||||||
|
this.latestPDDetails = datas[0];
|
||||||
|
this.selectedIndex = 0;
|
||||||
|
this.qcStatus = data.records.pdstatus;
|
||||||
|
// alert(JSON.stringify(this.latestPDDetails));
|
||||||
|
this.reGenerateBtn = true;
|
||||||
|
} else {
|
||||||
|
// this.reGenerateBtn = true;
|
||||||
|
this.generateBtn = true;
|
||||||
|
this.message = data.msg;
|
||||||
|
}
|
||||||
|
}, err => {
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
getPdReportDetails() {
|
||||||
|
this.pdTrigerService.getPdFinalReportDetails(this.startPD).subscribe(data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
// this.pdReportRecords = data.records.question_answers;
|
||||||
|
this.pdReportRecords = data.records;
|
||||||
|
// this.pdReportRecords = data.records.qu;
|
||||||
|
}
|
||||||
|
}, err => {
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// load pd view component
|
||||||
|
loadPdViewCompoent() {
|
||||||
|
this.router.navigate(['../../viewpd', this.startPD], { relativeTo: this.route });
|
||||||
|
}
|
||||||
|
|
||||||
|
// add questions popup model call
|
||||||
|
addNewQuestion() {
|
||||||
|
const dialogRef = this.dialog.open(ModelEditPdReportComponent, {
|
||||||
|
data: { startId: this.startPD, version_id: this.latestPDDetails.doc_name },
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.status==true){
|
||||||
|
this.getPdReportVersionList();
|
||||||
|
}
|
||||||
|
// this.getPdReportFinalTemplateDetails();
|
||||||
|
// this.getQuestionsMasters();
|
||||||
|
// this.getBranch();
|
||||||
|
// this.isPopupOpened = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
changeVersion(pd: any,selIndex:Number): void {
|
||||||
|
this.latestPDDetails = pd;
|
||||||
|
this.selectedIndex = selIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
reportReview(status): void {
|
||||||
|
const dialogRef = this.dialog.open(QcReviewComponent, {
|
||||||
|
data: { startId: this.startPD, data_status: status },
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.status==true){
|
||||||
|
this.getPdReportVersionList();
|
||||||
|
}
|
||||||
|
// this.getPdReportFinalTemplateDetails();
|
||||||
|
// this.getQuestionsMasters();
|
||||||
|
// this.getBranch();
|
||||||
|
// this.isPopupOpened = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
changeDocumentEdit(): void {
|
||||||
|
|
||||||
|
|
||||||
|
const dialogRef = this.dialog.open(DialogChangeCurrentVenrsion, {
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if (dataresult) {
|
||||||
|
let data = {
|
||||||
|
"pd_id": this.startPD,
|
||||||
|
"doc_name": this.latestPDDetails.doc_name
|
||||||
|
};
|
||||||
|
this.pdTrigerService.swapOlderPDReportToLatest(data).subscribe(data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.notifier.notify('success', 'Your Changes Updated.!');
|
||||||
|
this.getPdReportVersionList();
|
||||||
|
} else {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}
|
||||||
|
}, err => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Swal('User Created');
|
||||||
|
// swal({
|
||||||
|
// title: 'Error!',
|
||||||
|
// text: 'Do you want to continue',
|
||||||
|
// type: 'error',
|
||||||
|
// confirmButtonText: 'Cool'
|
||||||
|
// });
|
||||||
|
|
||||||
|
// Swal({
|
||||||
|
// title: 'Are you sure?',
|
||||||
|
// type: 'warning',
|
||||||
|
// showCancelButton: true,
|
||||||
|
// confirmButtonColor: '#3085d6',
|
||||||
|
// cancelButtonColor: '#d33',
|
||||||
|
// confirmButtonText: SwalButtonText
|
||||||
|
// }).then((result) => {
|
||||||
|
// if (result.value) {
|
||||||
|
// // this._mastersService.editMasterDetails(ActiveDatas,'CITY')
|
||||||
|
// // .subscribe(dataresult=>{
|
||||||
|
// // if (dataresult.dataStatus == true){
|
||||||
|
// // Swal(this.SwalMessage,'success');
|
||||||
|
// // this.getCity();
|
||||||
|
// // }
|
||||||
|
// // else{
|
||||||
|
// // Swal("Sorry Try Again !");
|
||||||
|
// // }
|
||||||
|
// // });
|
||||||
|
// }
|
||||||
|
// else{
|
||||||
|
// // this.getCity();
|
||||||
|
// }s
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
|
||||||
|
export() {
|
||||||
|
this.pdTrigerService.pdReportExportExcel().subscribe((blob: HttpResponse<Blob>) => {
|
||||||
|
if (blob) {
|
||||||
|
// console.log(blob);
|
||||||
|
let datass = blob.headers.get('content-disposition');
|
||||||
|
let fileName = datass.split(/"/)[1];
|
||||||
|
// this.notifier.notify('success', 'Your Changes Updated.!');
|
||||||
|
const blobs = new Blob([blob.body],
|
||||||
|
{ type: 'application/vnd.ms-excel' });
|
||||||
|
const file = new File([blobs], fileName,
|
||||||
|
{ type: 'application/vnd.ms-excel' });
|
||||||
|
// console.log(file);
|
||||||
|
importedSaveAs(file);
|
||||||
|
} else {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}
|
||||||
|
}, err => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'dialog-overview-example-dialog',
|
||||||
|
styles: [`
|
||||||
|
.listHover: hover {
|
||||||
|
background: yellow;
|
||||||
|
}`
|
||||||
|
],
|
||||||
|
template: `
|
||||||
|
<div style="width: 220px;">
|
||||||
|
<h3 style="text-align: center">Document is marked as final</h3>
|
||||||
|
<p style="text-align: center"> Because you've marked the document as final, you can edit this document.</p>
|
||||||
|
<div style="text-align: center; margin: 12px;" class="mb-1">
|
||||||
|
<button mat-raised-button color="primary" (click)="getConfirmation(false)">Cancel</button>
|
||||||
|
<button mat-raised-button color="accent" (click)="getConfirmation(true)">ok</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
})
|
||||||
|
export class DialogChangeCurrentVenrsion implements OnInit {
|
||||||
|
|
||||||
|
public m_questions: any;
|
||||||
|
|
||||||
|
public m_question_forms: any;
|
||||||
|
constructor(
|
||||||
|
public dialogRef: MatDialogRef<DialogChangeCurrentVenrsion>,
|
||||||
|
@Inject(MAT_DIALOG_DATA) public data) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
getConfirmation(confim: Boolean) {
|
||||||
|
this.dialogRef.close(confim);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
<div *ngIf="showStatus == 'COMPLETE'">
|
||||||
|
<h2 mat-dialog-title>QC Complete</h2>
|
||||||
|
<mat-dialog-content class="mat-typography">
|
||||||
|
<!--<h3>Develop across all platforms</h3>-->
|
||||||
|
<div *ngIf="conformation === false" style="width: 220px;text-align: center; margin: 12px;">
|
||||||
|
<p>
|
||||||
|
Once QC is Completed further edit will not be possible on this document.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="conformation" style="margin: 12px; width: 340px;">
|
||||||
|
<form role="form" *ngIf="showForm" [formGroup]="ngForm" accept-charset="UTF-8" novalidate>
|
||||||
|
<div>
|
||||||
|
<app-rating [rating]="ngForm.get('qc_rating').value" (ratingClick)='ratingComponentClick($event)'></app-rating>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<mat-form-field appearance="outline" style="width: 100%">
|
||||||
|
<mat-label>Remarks</mat-label>
|
||||||
|
<textarea matInput placeholder="Remarks" formControlName="qc_feedback"></textarea>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-button class="btn btn-primary" *ngIf="conformation === false" (click)="conformation = true">Ok</button>
|
||||||
|
<button mat-button class="btn btn-primary" *ngIf="conformation" (click)="myClick()">Save</button>
|
||||||
|
<button mat-button mat-dialog-close>Cancel</button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="showStatus == 'REMARKS'">
|
||||||
|
<h2 mat-dialog-title>QC Notes</h2>
|
||||||
|
<mat-dialog-content class="mat-typography">
|
||||||
|
<div style="margin: 12px; width: 340px;">
|
||||||
|
<form role="form" *ngIf="showForm" [formGroup]="ngForm" accept-charset="UTF-8" novalidate>
|
||||||
|
<div>
|
||||||
|
<mat-form-field appearance="outline" style="width: 100%">
|
||||||
|
<mat-label>Remarks</mat-label>
|
||||||
|
<textarea matInput placeholder="Remarks" formControlName="qc_remarks"></textarea>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-button class="btn btn-primary" (click)="myClick()">Save</button>
|
||||||
|
<button mat-button mat-dialog-close>Cancel</button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { QcReviewComponent } from './qc-review.component';
|
||||||
|
|
||||||
|
describe('QcReviewComponent', () => {
|
||||||
|
let component: QcReviewComponent;
|
||||||
|
let fixture: ComponentFixture<QcReviewComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ QcReviewComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(QcReviewComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,109 @@
|
|||||||
|
import { Component, OnInit, ViewChild , Input, Inject} from '@angular/core';
|
||||||
|
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
|
||||||
|
import { PdTrigerService } from '../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from "angular-notifier";
|
||||||
|
|
||||||
|
|
||||||
|
import {
|
||||||
|
MatDialog,
|
||||||
|
MatDialogRef,
|
||||||
|
MAT_DIALOG_DATA
|
||||||
|
} from '@angular/material';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-qc-review',
|
||||||
|
templateUrl: './qc-review.component.html',
|
||||||
|
styleUrls: ['./qc-review.component.scss']
|
||||||
|
})
|
||||||
|
export class QcReviewComponent implements OnInit {
|
||||||
|
|
||||||
|
conformation: Boolean = false;
|
||||||
|
@Input() questionId: number;
|
||||||
|
ngForm: FormGroup;
|
||||||
|
recordData: any;
|
||||||
|
showForm: Boolean;
|
||||||
|
showStatus : any;
|
||||||
|
/**
|
||||||
|
* Notifier service
|
||||||
|
*/
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor( private _formBuilder: FormBuilder,
|
||||||
|
private pdTrigerService: PdTrigerService,
|
||||||
|
notifier: NotifierService ,
|
||||||
|
private dialogRef: MatDialogRef<QcReviewComponent>,
|
||||||
|
@Inject(MAT_DIALOG_DATA) public data: any) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
this.showStatus = this.data.data_status;
|
||||||
|
// this.mycontent = `<p>My html content</p>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.getQcCompleteReviewStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
getQcCompleteReviewStatus() {
|
||||||
|
let type ; '';
|
||||||
|
if( this.showStatus === 'REMARKS'){
|
||||||
|
type = 'QC_REMARKS';
|
||||||
|
this.pdTrigerService.getQCReportFinalReviewDetails(this.data.startId, type).subscribe(data => {
|
||||||
|
if(data['dataStatus']){
|
||||||
|
this.recordData = data.records[0];
|
||||||
|
this.ngForm = this._formBuilder.group({
|
||||||
|
qc_remarks: [this.recordData.qc_remarks],
|
||||||
|
pd_status: [this.recordData.pd_status]
|
||||||
|
})
|
||||||
|
this.showForm = true;
|
||||||
|
}
|
||||||
|
},err => {
|
||||||
|
|
||||||
|
});
|
||||||
|
} else if(this.showStatus === 'COMPLETE') {
|
||||||
|
type = 'QC';
|
||||||
|
this.pdTrigerService.getQCReportFinalReviewDetails(this.data.startId, type).subscribe(data => {
|
||||||
|
if(data['dataStatus']){
|
||||||
|
this.recordData = data.records[0];
|
||||||
|
this.ngForm = this._formBuilder.group({
|
||||||
|
qc_feedback: [this.recordData.qc_feedback],
|
||||||
|
qc_rating: [Number(this.recordData.qc_rating)],
|
||||||
|
pd_status: ["QC_COMPLETED"],
|
||||||
|
})
|
||||||
|
this.showForm = true;
|
||||||
|
}
|
||||||
|
},err => {
|
||||||
|
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
onChange($event: any): void {
|
||||||
|
// this.log += new Date() + "<br />";
|
||||||
|
}
|
||||||
|
|
||||||
|
myClick(): void {
|
||||||
|
let template = this.ngForm.value;
|
||||||
|
template.pd_id = this.data.startId;
|
||||||
|
this.pdTrigerService.pdReviewStatusUpdate(template).subscribe(data=>{
|
||||||
|
this.notifier.notify('success', 'Your Changes Updated.!');
|
||||||
|
this.dialogRef.close({
|
||||||
|
status: true
|
||||||
|
});
|
||||||
|
}, err => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// =============================
|
||||||
|
|
||||||
|
ratingClicked: number;
|
||||||
|
itemIdRatingClicked: string;
|
||||||
|
rating : number = 1;
|
||||||
|
|
||||||
|
ratingComponentClick(e){
|
||||||
|
this.ngForm.controls.qc_rating.setValue(e.rating);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
<form [formGroup]="_EditPDRequirementForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</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>
|
||||||
|
|
||||||
|
<mat-dialog-content>
|
||||||
|
|
||||||
|
<mat-card formArrayName="addtional_requirements" *ngFor="let requirements of pdRequirements.controls; let i = index;">
|
||||||
|
<mat-card-content [formGroupName]="i">
|
||||||
|
<mat-form-field style="width: 90%;">
|
||||||
|
<input matInput placeholder="Requirement" formControlName="add_requirement">
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
|
<!-- <button mat-raised-button mat-icon-button color="primary" matTooltip="Delete" matTooltipPosition="above" (click)="removeRequirements(i)" type="button"><mat-icon>delete</mat-icon></button> -->
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
|
||||||
|
<button type="button" mat-raised-button mat-icon-button (click)="addRequiremnts(const_requirement)" matTooltip="Add More Additional Requirements" matTooltipPosition="above" class="mr-1 mb-1 hover-icon" color="primary" type="button"> <mat-icon>add</mat-icon> </button>
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="updateAdditionalRequirement(_EditPDRequirementForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<!-- <notifier-container></notifier-container> -->
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { CompanyDialogComponent } from './company-dialog.component';
|
import { PdRequirementComponent } from './pd-requirement.component';
|
||||||
|
|
||||||
describe('CompanyDialogComponent', () => {
|
describe('PdRequirementComponent', () => {
|
||||||
let component: CompanyDialogComponent;
|
let component: PdRequirementComponent;
|
||||||
let fixture: ComponentFixture<CompanyDialogComponent>;
|
let fixture: ComponentFixture<PdRequirementComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ CompanyDialogComponent ]
|
declarations: [ PdRequirementComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(CompanyDialogComponent);
|
fixture = TestBed.createComponent(PdRequirementComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,111 @@
|
|||||||
|
import { Component, OnInit,ViewEncapsulation, Inject } from '@angular/core';
|
||||||
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { CustomValidators } from 'ng2-validation';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { PdTrigerService } from '../../../pd-service/pd-triger.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-pd-requirement',
|
||||||
|
templateUrl: './pd-requirement.component.html',
|
||||||
|
styleUrls: ['./pd-requirement.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None,
|
||||||
|
})
|
||||||
|
export class PdRequirementComponent implements OnInit {
|
||||||
|
public pageTitle: string = "Additional Requirements Details";
|
||||||
|
public _EditPDRequirementForm:FormGroup;
|
||||||
|
public notifier: NotifierService;
|
||||||
|
addtional_requirements: FormArray;
|
||||||
|
public const_requirement : any = {
|
||||||
|
"add_req_id": '',
|
||||||
|
"add_requirement":'',
|
||||||
|
"earning_ans": '',
|
||||||
|
"isactive": 1,
|
||||||
|
};
|
||||||
|
constructor(private _fb: FormBuilder,
|
||||||
|
private _pd: PdTrigerService, notifier: NotifierService,private dialogRef: MatDialogRef<PdRequirementComponent>,
|
||||||
|
@Inject(MAT_DIALOG_DATA) public data: any) {
|
||||||
|
this.notifier=notifier
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.loadForm();
|
||||||
|
|
||||||
|
}
|
||||||
|
loadForm() {
|
||||||
|
this._EditPDRequirementForm = this._fb.group({
|
||||||
|
pdid: [this.data.pdID],
|
||||||
|
addtional_requirements: this._fb.array([])
|
||||||
|
});
|
||||||
|
// bind dynamic co applicant data
|
||||||
|
if(this.data.records.length > 0){
|
||||||
|
this.data.records.forEach((itemElement, itemIndex) => {
|
||||||
|
this.addRequiremnts(itemElement)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.addRequiremnts(this.const_requirement)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get pdRequirements() { return this._EditPDRequirementForm.get('addtional_requirements') as FormArray; }
|
||||||
|
createRequiremnt(receive:any): FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
add_req_id:[receive.add_req_id],
|
||||||
|
add_requirement: [receive.add_requirement, Validators.compose([Validators.required])],
|
||||||
|
isactive: [receive.isactive],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
addRequiremnts(getData:any) {
|
||||||
|
if(this._EditPDRequirementForm.valid){
|
||||||
|
this.addtional_requirements = this._EditPDRequirementForm.get('addtional_requirements') as FormArray;
|
||||||
|
this.addtional_requirements.push(this.createRequiremnt(getData));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.validateAllFormFields(this._EditPDRequirementForm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// removeRequirements(index: number) {
|
||||||
|
// const requirement_control = <FormArray>this._EditPDRequirementForm.controls['additional_requirements'];
|
||||||
|
// requirement_control.removeAt(index);
|
||||||
|
// }
|
||||||
|
|
||||||
|
updateAdditionalRequirement(formValue: any) {
|
||||||
|
if(this._EditPDRequirementForm.invalid) {
|
||||||
|
this.validateAllFormFields(this._EditPDRequirementForm)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let records:any=formValue;
|
||||||
|
|
||||||
|
this._pd.saveAdditionalRequirements(records).subscribe(result => {
|
||||||
|
if (result.status == 200) {
|
||||||
|
this.notifier.notify('success', 'Additional Requirements Updated.');
|
||||||
|
this.dialogRef.close();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
<h2 mat-dialog-title>{{dialoge_title_content}}</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
|
<div fxFlex="100">
|
||||||
|
<p align="center">
|
||||||
|
{{dialoge_content}}
|
||||||
|
</p>
|
||||||
|
<span *ngIf="!CompletenessCheck">
|
||||||
|
<span *ngIf="!Loading">
|
||||||
|
<p align="center" style="color: red !important;"> {{completeness_message}} </p>
|
||||||
|
<ul><li *ngFor="let forms of dialoge_subcontent" style="color: red !important;">
|
||||||
|
{{ forms }}
|
||||||
|
</li></ul>
|
||||||
|
</span>
|
||||||
|
<span *ngIf="Loading">
|
||||||
|
<div fxLayoutAlign="center">
|
||||||
|
<mat-progress-spinner mode="indeterminate"></mat-progress-spinner>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end" *ngIf="CompletenessCheck">
|
||||||
|
<button *ngIf="enableAddonPD===true" mat-raised-button color="primary" (click)="changePDStatus(addonStatus)"><strong> Yes / Allow Addon PD</strong></button>
|
||||||
|
<button mat-raised-button color="primary" (click)="changePDStatus(this.data.pd_status)"><strong>Yes</strong></button>
|
||||||
|
<button mat-raised-button mat-dialog-close><strong> No </strong></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
<mat-dialog-actions align="end" *ngIf="!CompletenessCheck">
|
||||||
|
<button mat-raised-button mat-dialog-close><strong> Ok </strong></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { PdStatusChangeDialogueComponent } from './pd-status-change-dialogue.component';
|
||||||
|
|
||||||
|
describe('PdStatusChangeDialogueComponent', () => {
|
||||||
|
let component: PdStatusChangeDialogueComponent;
|
||||||
|
let fixture: ComponentFixture<PdStatusChangeDialogueComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ PdStatusChangeDialogueComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(PdStatusChangeDialogueComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,79 @@
|
|||||||
|
import { Component, OnInit, ViewChild , Input, Inject} from '@angular/core';
|
||||||
|
import { NotifierService } from "angular-notifier";
|
||||||
|
import {MatDialog,MatDialogRef,MAT_DIALOG_DATA } from '@angular/material';
|
||||||
|
import { PdTrigerService } from '../../../pd-service/pd-triger.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-pd-status-change-dialogue',
|
||||||
|
templateUrl: './pd-status-change-dialogue.component.html',
|
||||||
|
styleUrls: ['./pd-status-change-dialogue.component.scss']
|
||||||
|
})
|
||||||
|
export class PdStatusChangeDialogueComponent implements OnInit {
|
||||||
|
|
||||||
|
conformation: Boolean = false;
|
||||||
|
private notifier: NotifierService;
|
||||||
|
dialoge_title_content: string;
|
||||||
|
dialoge_content: string;
|
||||||
|
dialoge_subcontent : any = [];
|
||||||
|
completeness_message: string;
|
||||||
|
enableAddonPD : boolean;
|
||||||
|
CompletenessCheck: boolean;
|
||||||
|
addonStatus: string ="ADD_ON_PENDING";
|
||||||
|
public Loading: boolean;
|
||||||
|
|
||||||
|
constructor(notifier: NotifierService , private pd: PdTrigerService,private dialogRef: MatDialogRef<PdStatusChangeDialogueComponent>,@Inject(MAT_DIALOG_DATA) public data: any)
|
||||||
|
{
|
||||||
|
this.notifier = notifier;
|
||||||
|
this.dialoge_title_content = this.data.pd_status=='INPROGRESS' ? 'Start Discussion' : this.data.pd_status=='COMPLETED' ? 'Complete Discussion' : 'Change Discussion';
|
||||||
|
this.dialoge_content = this.data.pd_status=='INPROGRESS' ? 'Are you starting the Discussion ?' : this.data.pd_status=='COMPLETED' ? 'Please confirm you are completing the Discussion and forwarding for Quality Check ?' : 'Change Discussion';
|
||||||
|
this.enableAddonPD = false;
|
||||||
|
this.CompletenessCheck = this.data.pd_status=='INPROGRESS' ? true : this.data.pd_status=='COMPLETED' ? false : true;
|
||||||
|
this.Loading = this.data.pd_status=='INPROGRESS' ? false : this.data.pd_status=='COMPLETED' ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
if(this.data.pd_status=='COMPLETED'){
|
||||||
|
let params: any={};
|
||||||
|
params.pd_id = this.data.pdid;
|
||||||
|
|
||||||
|
this.pd.pdFormsCompletenessCheck(this.data.pdid).subscribe(result => {
|
||||||
|
if (result.dataStatus === true) {
|
||||||
|
if(result.records.length > 0){
|
||||||
|
this.completeness_message = result.msg ;
|
||||||
|
this.dialoge_subcontent = result.records;
|
||||||
|
this.Loading = false;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.CompletenessCheck = true;
|
||||||
|
this.Loading = false;
|
||||||
|
this.pd.getPDCompleteDetails(params).subscribe(result => {
|
||||||
|
if (result.dataStatus === true) {
|
||||||
|
this.enableAddonPD = result.records.address_count>0 ? true: false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
changePDStatus(status: string): void {
|
||||||
|
let update_status = {
|
||||||
|
"pd_id":this.data.pdid,
|
||||||
|
};
|
||||||
|
this.pd.editPdMasterDetails(update_status, status).subscribe(result => {
|
||||||
|
if (result.status == 200) {
|
||||||
|
this.dialogRef.close({update_status:true});
|
||||||
|
this.notifier.notify('success', this.data.pd_status=='INPROGRESS' ? 'Discussions Started Successfully' : this.data.pd_status=='COMPLETED' ? 'Discussions Completed Successfully' : 'Discussions Updated Successfully');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.dialogRef.close({update_status:false});
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
}
|
||||||
|
}, error => {
|
||||||
|
this.dialogRef.close({update_status:false});
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,124 @@
|
|||||||
|
<mat-card-content>
|
||||||
|
<mat-expansion-panel [(expanded)]="xpandStatus">
|
||||||
|
<mat-expansion-panel-header>
|
||||||
|
<mat-panel-title class="text-xs-left">
|
||||||
|
<!-- <h6 class="mt-0"><mat-icon>filter_list</mat-icon> Filter</h6> -->
|
||||||
|
<mat-toolbar-row>
|
||||||
|
<mat-icon>filter_list</mat-icon>
|
||||||
|
<span class="toolbar-space"></span>
|
||||||
|
<span>Advance 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:30%">
|
||||||
|
<mat-select multiple formControlName="pd_type" placeholder="PD Type">
|
||||||
|
<mat-option *ngFor="let type of PDType" [value]="type.pd_type_id">{{type.type_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<!-- <mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_status" placeholder="PD Status">
|
||||||
|
<mat-option *ngFor="let status of pdStatus" [value]="status.pd_status_name">{{status.pd_status_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field> -->
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput [matDatepicker]="picker" [max]="todaydate" (blur)="checkDate($event)" formControlName="pd_from_date" placeholder="Choose a From date">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput [matDatepicker]="picker1" [max]="todaydate" [min]="searchForm.get('pd_from_date').value"formControlName="pd_to_date" placeholder="Choose a todate">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker1></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_products" placeholder="Products">
|
||||||
|
<mat-option *ngFor="let pro of PRODUCTS" [value]="pro.product_id">{{pro.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_city" placeholder="City">
|
||||||
|
<mat-option *ngFor="let city of CITY" [value]="city.city_id">{{city.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_lender" placeholder="Lender Name">
|
||||||
|
<mat-option *ngFor="let ent of ENTITY" [value]="ent.entity_id">{{ent.full_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_name" placeholder="Applicant Name">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_applicant_id" placeholder="Applicant Id">
|
||||||
|
</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>
|
||||||
|
<br/>
|
||||||
|
<mat-table [dataSource]="dataSourceTab5" matSort *ngIf="qcCompletedPdListData.length > 0" >
|
||||||
|
<ng-container matColumnDef="PDType">
|
||||||
|
<mat-cell fxFlex.xs="20" fxFlex.sm="15" fxFlex.md="10" fxFlex.lg="10" fxFlex.xl="10" class="cell" *matCellDef="let details;" style="justify-content:flex-end">
|
||||||
|
<div [ngStyle]="{'color': '#e00201','font-weight': 'bold'}" mat-line>{{details.pd_id}}</div>
|
||||||
|
<small mat-line>{{details.pd_type_name}}</small>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Name">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<!-- <span *ngIf="details.applicant_name" mat-line><b>{{details.applicant_name}}</b></span><br> -->
|
||||||
|
<span *ngIf="details.is_child" mat-line>
|
||||||
|
<b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD - ' + details.parent_pd_id }}</b>
|
||||||
|
</span><br>
|
||||||
|
<span class="fontsize"> {{details.lender_applicant_id}}</span> <span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Lenderid">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details">
|
||||||
|
<span *ngIf="details.lender_short_name" mat-line> {{details.lender_short_name}} </span><br>
|
||||||
|
<span *ngIf="details.product_abbr" mat-line class="fontsize"> {{details.product_abbr}}<span *ngIf="details.subproduct_abbr">/{{details.subproduct_abbr}}</span></span> <br>
|
||||||
|
<span *ngIf="details.loan_amount" class="fontsize"><i class="fa-1x fa fa-rupee"></i> {{details.loan_amount}}</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Address">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<span matTooltip="Initiated Date" matTooltipPosition="above">{{details.pd_date_of_initiation}}</span><br>
|
||||||
|
<span class="fontsize" *ngIf="details.city_name"> <i class="fa-1x fa fa-map-marker"> </i> {{details.city_name}}-{{details.pincode_id == 1 ? details.other_pincode : details.pincode }} </span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Status">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<span > QC COMPLETED</span><br>
|
||||||
|
<span class="fontsize" matTooltip="QC Completed" matTooltipPosition="above">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||||
|
</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Action">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<button mat-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" (click)="viewPD(details.is_child == 0 ? details.pd_id : details.parent_pd_id)" matTooltip="View" matTooltipPosition="above" color="primary"><mat-icon>visibility</mat-icon></button>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<mat-row style="align-items: normal !important;" *matRowDef="let row; columns: displayedColumns;">
|
||||||
|
</mat-row>
|
||||||
|
</mat-table>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
<mat-paginator *ngIf="!recordStatus" #paginator class="mat-elevation-z1" [length]="qcCompletedPdListData.length" [pageIndex]="pageIndex" [pageSize]="pageSize"
|
||||||
|
[pageSizeOptions]="[5, 10, 25,50, 100]" (page)="pageEvent = $event; pageChange($event)" showFirstLastButtons>
|
||||||
|
</mat-paginator>
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
.ic-change:hover {
|
||||||
|
transform: scale(1.1);
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
.cell{
|
||||||
|
display:inline !important;
|
||||||
|
}
|
||||||
|
.cellhide{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.center{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
.fontsize{
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
.toolbar-space {
|
||||||
|
flex: 0.01 0 auto;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { QcCompletedPdComponent } from './qc-completed-pd.component';
|
||||||
|
|
||||||
|
describe('QcCompletedPdComponent', () => {
|
||||||
|
let component: QcCompletedPdComponent;
|
||||||
|
let fixture: ComponentFixture<QcCompletedPdComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ QcCompletedPdComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(QcCompletedPdComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,207 @@
|
|||||||
|
import { Component, ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter, OnDestroy, AfterViewInit, OnChanges, SimpleChanges } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../pd-service/pd-triger.service';
|
||||||
|
import { MatPaginator, MatSort, MatTableDataSource, PageEvent } from '@angular/material';
|
||||||
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||||
|
import { DatePipe } from '@angular/common';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-qc-completed-pd',
|
||||||
|
templateUrl: './qc-completed-pd.component.html',
|
||||||
|
styleUrls: ['./qc-completed-pd.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
export class QcCompletedPdComponent implements OnInit, OnChanges {
|
||||||
|
xpandStatus: boolean = false;
|
||||||
|
PRODUCTS: any[] = [];
|
||||||
|
ENTITY: any[] = [];
|
||||||
|
CITY: any[] = [];
|
||||||
|
PDType: any[] = [];
|
||||||
|
pdStatus: any[] = [];
|
||||||
|
recordStatus: boolean;
|
||||||
|
errorMessage: any[] = [];
|
||||||
|
tabStatus: string = "QC_COMPLETED";
|
||||||
|
pipe = new DatePipe('en-US');
|
||||||
|
todaydate:Date = new Date();
|
||||||
|
public dataLengthTab5: number;
|
||||||
|
public dataSourceTab5 = new MatTableDataSource();
|
||||||
|
searchForm: FormGroup;
|
||||||
|
displayedColumns = ['PDType', 'Name', 'Lenderid', 'Address', 'Status', 'Action'];
|
||||||
|
private notifier: NotifierService;
|
||||||
|
|
||||||
|
@ViewChild(MatPaginator) paginator: MatPaginator;
|
||||||
|
@ViewChild(MatSort) sort: MatSort;
|
||||||
|
|
||||||
|
@Input() bindFilterValue: string;
|
||||||
|
@Output() loadPdView = new EventEmitter<string>();
|
||||||
|
|
||||||
|
// data source variable details
|
||||||
|
qcCompletedPdListData: any[] = [];
|
||||||
|
|
||||||
|
// pagination variable details
|
||||||
|
length = 5;
|
||||||
|
pageIndex = 0;
|
||||||
|
pageSize = 10;
|
||||||
|
pageEvent: PageEvent;
|
||||||
|
|
||||||
|
constructor(private _pd: PdTrigerService, public _fb: FormBuilder,notifier: NotifierService,) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
|
||||||
|
this.searchForm = this._fb.group(
|
||||||
|
{
|
||||||
|
pd_type: [null],
|
||||||
|
pd_status: ['QC_COMPLETED'],
|
||||||
|
pd_from_date: [null],
|
||||||
|
pd_to_date: [null],
|
||||||
|
pd_city: [null],
|
||||||
|
pd_products: [null],
|
||||||
|
pd_lender: [null],
|
||||||
|
pd_name: [null],
|
||||||
|
pd_applicant_id: [null],
|
||||||
|
});
|
||||||
|
this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.recordStatus = false;
|
||||||
|
// this.loadPDDetails();
|
||||||
|
// this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.dataSourceTab5.paginator = this.paginator;
|
||||||
|
this.dataSourceTab5.sort = this.sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get changes for filter from parent componnet filter
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
let filteredText = changes.bindFilterValue.currentValue;
|
||||||
|
filteredText = filteredText ? filteredText.trim() : filteredText;
|
||||||
|
filteredText = filteredText ? filteredText.toLowerCase() : filteredText;
|
||||||
|
this.dataSourceTab5.filter = filteredText;
|
||||||
|
}
|
||||||
|
|
||||||
|
// load inprogress pd list
|
||||||
|
|
||||||
|
loadPDDetails() {
|
||||||
|
this._pd.getTabStatusPdDetails(this.tabStatus)
|
||||||
|
.subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.qcCompletedPdListData = data.records;
|
||||||
|
this.dataLengthTab5 = data.records.length;
|
||||||
|
this.dataSourceTab5.data = this.qcCompletedPdListData;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.qcCompletedPdListData = [];
|
||||||
|
this.dataLengthTab5 = null;
|
||||||
|
this.recordStatus = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// , error => this.errorMessage = <any>error);
|
||||||
|
,error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
pageChange(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
viewPD(pdid: string) {
|
||||||
|
this.loadPdView.next(pdid);
|
||||||
|
|
||||||
|
}
|
||||||
|
titleCaseWord(word: string) {
|
||||||
|
if (!word) return word;
|
||||||
|
return word[0].toUpperCase() + word.substr(1).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common Search
|
||||||
|
* sriram
|
||||||
|
*/
|
||||||
|
|
||||||
|
getcommonDropDown():void {
|
||||||
|
this._pd.getAllMasterDatas('PDSTATUS').subscribe(res => {
|
||||||
|
if (res.dataStatus == true) {
|
||||||
|
this.pdStatus = res.records.filter(status => status.isactive == 1 && status.pd_status_name == this.tabStatus);
|
||||||
|
// this.searchForm.controls['pd_status'].setValue(this.pdStatus[0]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._pd.getAllMasterDatas('PDTYPE').subscribe(res => {
|
||||||
|
if (res.dataStatus == true) {
|
||||||
|
this.PDType = res.records.filter(type => type.isactive == 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// this._pd.getAllMasterDatas('CITY').subscribe(res => {
|
||||||
|
// if (res.dataStatus == true) {
|
||||||
|
// this.CITY = res.records.filter(city => city.isactive == 1);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
this._pd.getListOfCities().subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.CITY = res.records;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._pd.getAllMasterDatas('ENTITY').subscribe(res => {
|
||||||
|
if (res.dataStatus == true) {
|
||||||
|
this.ENTITY = res.records.filter(ent => ent.isactive == 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._pd.getAllMasterDatas('PRODUCTS').subscribe(res => {
|
||||||
|
if (res.dataStatus == true) {
|
||||||
|
this.PRODUCTS = res.records.filter(pro => pro.isactive == 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
checkDate(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
searchItem() {
|
||||||
|
|
||||||
|
if (this.searchForm.value.pd_type != null) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.searchForm.value.pd_type = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.searchForm.value.pd_status != null) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.searchForm.value.pd_status = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.searchForm.value.pd_from_date = this.pipe.transform(this.searchForm.value.pd_from_date, 'yyyy-MM-dd');
|
||||||
|
this.searchForm.value.pd_to_date = this.pipe.transform(this.searchForm.value.pd_to_date, 'yyyy-MM-dd');
|
||||||
|
|
||||||
|
this._pd.overAllSearchFormDetails(this.searchForm.value).subscribe(res => {
|
||||||
|
this.xpandStatus = false;
|
||||||
|
if (res['dataStatus'] == true) {
|
||||||
|
this.dataSourceTab5 = res['records'];
|
||||||
|
this.dataSourceTab5.paginator = this.paginator;
|
||||||
|
}else{
|
||||||
|
this.notifier.notify('warning', 'No Records Found !');
|
||||||
|
this.dataSourceTab5.paginator['length'] = 0;
|
||||||
|
this.dataSourceTab5.paginator['pageIndex'] = 0;
|
||||||
|
this.dataSourceTab5.data = [];
|
||||||
|
}
|
||||||
|
},error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Went Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onReset(){
|
||||||
|
this.searchForm.reset();
|
||||||
|
this.loadPDDetails();
|
||||||
|
this.xpandStatus = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
<mat-card-content>
|
||||||
|
<mat-expansion-panel [(expanded)]="xpandStatus">
|
||||||
|
<mat-expansion-panel-header>
|
||||||
|
<mat-panel-title class="text-xs-left">
|
||||||
|
<!-- <h6 class="mt-0"><mat-icon>filter_list</mat-icon> Filter</h6> -->
|
||||||
|
<mat-toolbar-row>
|
||||||
|
<mat-icon>filter_list</mat-icon>
|
||||||
|
<span class="toolbar-space"></span>
|
||||||
|
<span>Advance 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:30%">
|
||||||
|
<mat-select multiple formControlName="pd_type" placeholder="PD Type">
|
||||||
|
<mat-option *ngFor="let type of PDType" [value]="type.pd_type_id">{{type.type_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<!-- <mat-form-field style="width:40%">
|
||||||
|
<mat-select formControlName="pd_status" placeholder="PD Status">
|
||||||
|
<mat-option *ngFor="let status of pdStatus" [value]="status.pd_status_name" [disabled]="'true'">{{status.pd_status_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field> -->
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput [matDatepicker]="picker" [max]="todaydate" (blur)="checkDate($event)" formControlName="pd_from_date" placeholder="Choose a From date">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput [matDatepicker]="picker1" [max]="todaydate" [min]="searchForm.get('pd_from_date').value"formControlName="pd_to_date" placeholder="Choose a todate">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker1></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_products" placeholder="Products">
|
||||||
|
<mat-option *ngFor="let pro of PRODUCTS" [value]="pro.product_id">{{pro.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_city" placeholder="City">
|
||||||
|
<mat-option *ngFor="let city of CITY" [value]="city.city_id">{{city.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<mat-select multiple formControlName="pd_lender" placeholder="Lender Name">
|
||||||
|
<mat-option *ngFor="let ent of ENTITY" [value]="ent.entity_id">{{ent.full_name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_name" placeholder="Applicant Name">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width:30%">
|
||||||
|
<input matInput type="text" formControlName="pd_applicant_id" placeholder="Applicant Id">
|
||||||
|
</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>
|
||||||
|
<br/>
|
||||||
|
<mat-table [dataSource]="dataSourceTab3" matSort *ngIf="scheduledPdListData.length > 0" >
|
||||||
|
<ng-container matColumnDef="PDType">
|
||||||
|
<mat-cell fxFlex.xs="20" fxFlex.sm="15" fxFlex.md="10" fxFlex.lg="10" fxFlex.xl="10" class="cell" *matCellDef="let details;" style="justify-content:flex-end">
|
||||||
|
<div [ngStyle]="{'color': '#e00201','font-weight': 'bold'}" mat-line>{{details.pd_id}}</div>
|
||||||
|
<small mat-line>{{details.pd_type_name}}</small>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Name">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<!-- <span *ngIf="details.applicant_name" mat-line><b>{{details.applicant_name}}</b></span><br> -->
|
||||||
|
<span *ngIf="details.is_child" mat-line>
|
||||||
|
<b>{{details.is_child == 0 ? details.applicant_name : 'Add On PD - ' + details.parent_pd_id }}</b>
|
||||||
|
</span><br>
|
||||||
|
<span class="fontsize"> {{details.lender_applicant_id}}</span> <span class="fontsize" *ngIf="details.customer_segment_abbr">-({{details.customer_segment_abbr}} )</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Lenderid">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details">
|
||||||
|
<span *ngIf="details.lender_short_name" mat-line> {{details.lender_short_name}} </span><br>
|
||||||
|
<span *ngIf="details.product_abbr" mat-line class="fontsize"> {{details.product_abbr}}<span *ngIf="details.subproduct_abbr">/{{details.subproduct_abbr}}</span></span> <br>
|
||||||
|
<span *ngIf="details.loan_amount" class="fontsize"><i class="fa-1x fa fa-rupee"></i> {{details.loan_amount}}</span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Address">
|
||||||
|
<mat-cell class="cell" *matCellDef="let details;">
|
||||||
|
<span>{{details.pd_date_of_initiation}}</span><br>
|
||||||
|
<span class="fontsize" *ngIf="details.city_name"> <i class="fa-1x fa fa-map-marker"> </i> {{details.city_name}}-{{details.pincode_id == 1 ? details.other_pincode : details.pincode }} </span>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Status">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<span> {{details.pd_status}}</span><br>
|
||||||
|
<!-- <span class="fontsize">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||||
|
</span> -->
|
||||||
|
<span class="fontsize">{{details.scheduled_on}}
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Action">
|
||||||
|
<mat-cell class="cell center" *matCellDef="let details;">
|
||||||
|
<button mat-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" (click)="viewPD(details.is_child == 0 ? details.pd_id : details.parent_pd_id)" color="primary" matTooltip="View" matTooltipPosition="above"><mat-icon>visibility</mat-icon></button>
|
||||||
|
</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<mat-row style="align-items: normal !important;" *matRowDef="let row; columns: displayedColumns;">
|
||||||
|
</mat-row>
|
||||||
|
</mat-table>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
<mat-paginator *ngIf="!recordStatus" #paginator class="mat-elevation-z1" [length]="scheduledPdListData.length" [pageIndex]="pageIndex" [pageSize]="pageSize"
|
||||||
|
[pageSizeOptions]="[5, 10, 25,50, 100]" (page)="pageEvent = $event; pageChange($event)" showFirstLastButtons>
|
||||||
|
</mat-paginator>
|
||||||
|
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
.ic-change:hover {
|
||||||
|
transform: scale(1.1);
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
.cell{
|
||||||
|
display:inline !important;
|
||||||
|
}
|
||||||
|
.cellhide{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.center{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
.fontsize{
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
.toolbar-space {
|
||||||
|
flex: 0.01 0 auto;
|
||||||
|
}
|
||||||
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { RegionsListComponent } from './regions-list.component';
|
import { ScheduledPdComponent } from './scheduled-pd.component';
|
||||||
|
|
||||||
describe('RegionsListComponent', () => {
|
describe('ScheduledPdComponent', () => {
|
||||||
let component: RegionsListComponent;
|
let component: ScheduledPdComponent;
|
||||||
let fixture: ComponentFixture<RegionsListComponent>;
|
let fixture: ComponentFixture<ScheduledPdComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ RegionsListComponent ]
|
declarations: [ ScheduledPdComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(RegionsListComponent);
|
fixture = TestBed.createComponent(ScheduledPdComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
@ -0,0 +1,225 @@
|
|||||||
|
import { Component,ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter, OnDestroy, AfterViewInit, OnChanges, SimpleChanges } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../pd-service/pd-triger.service';
|
||||||
|
import { MatPaginator, MatSort, MatTableDataSource, PageEvent } from '@angular/material';
|
||||||
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||||
|
import { DatePipe } from '@angular/common';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-scheduled-pd',
|
||||||
|
templateUrl: './scheduled-pd.component.html',
|
||||||
|
styleUrls: ['./scheduled-pd.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
})
|
||||||
|
export class ScheduledPdComponent implements OnInit, OnChanges {
|
||||||
|
xpandStatus: boolean = false;
|
||||||
|
PRODUCTS: any[]=[];
|
||||||
|
ENTITY: any[]=[];
|
||||||
|
CITY: any[]=[];
|
||||||
|
PDType: any[]=[];
|
||||||
|
pdStatus: any[]=[];
|
||||||
|
recordStatus: boolean;
|
||||||
|
errorMessage:any[]=[];
|
||||||
|
tabStatus:string="SCHEDULED";
|
||||||
|
pipe = new DatePipe('en-US');
|
||||||
|
searchForm:FormGroup;
|
||||||
|
todaydate:Date = new Date();
|
||||||
|
public dataLengthTab3: number;
|
||||||
|
public dataSourceTab3 = new MatTableDataSource();
|
||||||
|
private notifier: NotifierService;
|
||||||
|
|
||||||
|
displayedColumns = ['PDType','Name','Lenderid','Address','Status','Action'];
|
||||||
|
|
||||||
|
@ViewChild(MatPaginator) paginator: MatPaginator;
|
||||||
|
@ViewChild(MatSort) sort: MatSort;
|
||||||
|
|
||||||
|
@Input() bindFilterValue: string;
|
||||||
|
@Output() loadPdView = new EventEmitter<string>();
|
||||||
|
|
||||||
|
// data source variable details
|
||||||
|
scheduledPdListData:any[] = [];
|
||||||
|
|
||||||
|
// pagination variable details
|
||||||
|
length = 5;
|
||||||
|
pageIndex = 0;
|
||||||
|
pageSize = 10;
|
||||||
|
pageEvent: PageEvent;
|
||||||
|
|
||||||
|
constructor(private _pd: PdTrigerService,public _fb:FormBuilder,notifier: NotifierService,) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
|
||||||
|
this.searchForm = this._fb.group(
|
||||||
|
{
|
||||||
|
pd_type:[null],
|
||||||
|
pd_status:['SCHEDULED'],
|
||||||
|
pd_from_date:[null],
|
||||||
|
pd_to_date:[null],
|
||||||
|
pd_city:[null],
|
||||||
|
pd_products:[null],
|
||||||
|
pd_lender:[null],
|
||||||
|
pd_name:[null],
|
||||||
|
pd_applicant_id:[null],
|
||||||
|
});
|
||||||
|
this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.recordStatus=false;
|
||||||
|
// this.loadPDDetails();
|
||||||
|
//this.getcommonDropDown();
|
||||||
|
}
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.dataSourceTab3.paginator = this.paginator;
|
||||||
|
this.dataSourceTab3.sort = this.sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get changes for filter from parent componnet filter
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
// let filteredText = changes.bindFilterValue.currentValue;
|
||||||
|
// filteredText = filteredText ? filteredText.trim() : filteredText;
|
||||||
|
let filteredText = changes.bindFilterValue.currentValue ? changes.bindFilterValue.currentValue.trim() : changes.bindFilterValue.currentValue;
|
||||||
|
filteredText = filteredText ? filteredText.toLowerCase() : filteredText;
|
||||||
|
this.dataSourceTab3.filter = filteredText;
|
||||||
|
}
|
||||||
|
|
||||||
|
// load inprogress pd list
|
||||||
|
|
||||||
|
loadPDDetails() {
|
||||||
|
this._pd.getTabStatusPdDetails(this.tabStatus)
|
||||||
|
.subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.status == 200) {
|
||||||
|
this.scheduledPdListData = data.records;
|
||||||
|
this.dataLengthTab3 = data.records.length;
|
||||||
|
this.dataSourceTab3.data = this.scheduledPdListData;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.scheduledPdListData=[];
|
||||||
|
this.dataLengthTab3 = null;
|
||||||
|
this.recordStatus=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// , error => this.errorMessage = <any> error);
|
||||||
|
,error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
pageChange(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
viewPD(pdid:string){
|
||||||
|
this.loadPdView.next(pdid);
|
||||||
|
|
||||||
|
}
|
||||||
|
titleCaseWord(word:string) {
|
||||||
|
if (!word) return word;
|
||||||
|
return word[0].toUpperCase() + word.substr(1).toLowerCase();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Common Search
|
||||||
|
* sriram
|
||||||
|
*/
|
||||||
|
|
||||||
|
getcommonDropDown() : void
|
||||||
|
{
|
||||||
|
this._pd.getAllMasterDatas('PDSTATUS').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.pdStatus = res.records.filter(status=>status.isactive==1 && status.pd_status_name==this.tabStatus);
|
||||||
|
// this.searchForm.controls['pd_status'].setValue(this.pdStatus[0]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._pd.getAllMasterDatas('PDTYPE').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.PDType = res.records.filter(type=>type.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// this._pd.getAllMasterDatas('CITY').subscribe(res=>
|
||||||
|
// {
|
||||||
|
// if(res.dataStatus==true)
|
||||||
|
// {
|
||||||
|
// this.CITY = res.records.filter(city=>city.isactive==1);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
this._pd.getListOfCities().subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.CITY = res.records;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._pd.getAllMasterDatas('ENTITY').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.ENTITY = res.records.filter(ent=>ent.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._pd.getAllMasterDatas('PRODUCTS').subscribe(res=>
|
||||||
|
{
|
||||||
|
if(res.dataStatus==true)
|
||||||
|
{
|
||||||
|
this.PRODUCTS = res.records.filter(pro=>pro.isactive==1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
checkDate(e)
|
||||||
|
{
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
searchItem()
|
||||||
|
{
|
||||||
|
|
||||||
|
if(this.searchForm.value.pd_type !=null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
this.searchForm.value.pd_type = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.searchForm.value.pd_status !=null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
this.searchForm.value.pd_status = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.searchForm.value.pd_from_date = this.pipe.transform(this.searchForm.value.pd_from_date,'yyyy-MM-dd');
|
||||||
|
this.searchForm.value.pd_to_date = this.pipe.transform(this.searchForm.value.pd_to_date,'yyyy-MM-dd');
|
||||||
|
|
||||||
|
this._pd.overAllSearchFormDetails(this.searchForm.value).subscribe(res=>
|
||||||
|
{
|
||||||
|
this.xpandStatus = false;
|
||||||
|
if(res['dataStatus']==true)
|
||||||
|
{
|
||||||
|
this.dataSourceTab3 = res['records'];
|
||||||
|
this.dataSourceTab3.paginator = this.paginator;
|
||||||
|
}else{
|
||||||
|
this.notifier.notify('warning', 'No Records Found !');
|
||||||
|
this.dataSourceTab3.paginator['length'] = 0;
|
||||||
|
this.dataSourceTab3.paginator['pageIndex'] = 0;
|
||||||
|
this.dataSourceTab3.data = [];
|
||||||
|
}
|
||||||
|
},error => {
|
||||||
|
this.errorMessage.push(error);
|
||||||
|
this.notifier.notify('warning', 'Something Went Wrong Try Again.!' + '-' + error.error_text + ' occur');
|
||||||
|
alert(error.html_format);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onReset(){
|
||||||
|
this.searchForm.reset();
|
||||||
|
this.loadPDDetails();
|
||||||
|
this.xpandStatus = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user