Merge branch 'master' of https://bitbucket.org/sriramv18/sparqsineedge
This commit is contained in:
commit
1ba4476104
@ -25,7 +25,11 @@ export const AppRoutes: Routes = [{
|
||||
},{
|
||||
path:'template',
|
||||
loadChildren:'./template/template.module#TemplateModule'
|
||||
}
|
||||
},
|
||||
{
|
||||
path:'quality_check_discussion',
|
||||
loadChildren:'./quality-check/quality-check.module#QualityCheckModule'
|
||||
},
|
||||
]
|
||||
}, {
|
||||
path: '',
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<ng-container matColumnDef="Status">
|
||||
<mat-cell class="cell center" *matCellDef="let details;">
|
||||
<span> {{details.pd_status}}</span><br>
|
||||
<span class="fontsize">{{ (details.scheduled_on) ? (details.scheduled_on | slice:0:10):(details.scheduled_on) }}
|
||||
<span class="fontsize">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||
</span>
|
||||
</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
@ -23,8 +23,8 @@
|
||||
<ng-container matColumnDef="Status">
|
||||
<mat-cell class="cell center" *matCellDef="let details;">
|
||||
<span> {{details.pd_status}}</span><br>
|
||||
<span class="fontsize">{{ (details.scheduled_on)? (details.scheduled_on | slice:0:10):(details.scheduled_on) }}
|
||||
</span>
|
||||
<span class="fontsize">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||
</span>
|
||||
</mat-cell>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="Action">
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
.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;
|
||||
}
|
||||
@ -23,8 +23,8 @@
|
||||
<ng-container matColumnDef="Status">
|
||||
<mat-cell class="cell center" *matCellDef="let details;">
|
||||
<span> {{details.pd_status}}</span><br>
|
||||
<span class="fontsize">{{ (details.scheduled_on)? (details.scheduled_on | slice:0:10):(details.scheduled_on) }}
|
||||
</span>
|
||||
<span class="fontsize">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||
</span>
|
||||
</mat-cell>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="Action">
|
||||
|
||||
@ -33,6 +33,12 @@
|
||||
<app-completed-pd [bindFilterValue]="filterValue" (loadPdView)="viewPDDetails($event)"></app-completed-pd>
|
||||
|
||||
|
||||
</mat-tab>
|
||||
<mat-tab>
|
||||
<ng-template mat-tab-label>QC Completed </ng-template>
|
||||
<app-qc-completed-pd [bindFilterValue]="filterValue" (loadPdView)="viewPDDetails($event)"></app-qc-completed-pd>
|
||||
|
||||
|
||||
</mat-tab>
|
||||
|
||||
</mat-tab-group>
|
||||
|
||||
@ -7,6 +7,7 @@ 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({
|
||||
@ -33,7 +34,9 @@ export class ListPdComponent implements OnInit, OnDestroy {
|
||||
@ViewChild(InprogressPdComponent) inprogressTabC: InprogressPdComponent;
|
||||
@ViewChild(ScheduledPdComponent) scheduledTabC:ScheduledPdComponent;
|
||||
@ViewChild(CompletedPdComponent) completedTabC: CompletedPdComponent;
|
||||
@ViewChild(QcCompletedPdComponent) qcCompletedTabC: QcCompletedPdComponent;
|
||||
|
||||
|
||||
constructor( notifier: NotifierService, private route: ActivatedRoute,
|
||||
private router: Router, private _pd: PdTrigerService) {
|
||||
this.notifier = notifier;
|
||||
@ -68,7 +71,7 @@ export class ListPdComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
pdListLoad(status: boolean){
|
||||
this.viewPdList = status;
|
||||
this.getTabIndex==0 ? this.allTabC.loadPDDetails() : this.getTabIndex==1 ? this.inprogressTabC.loadPDDetails() : this.getTabIndex==2 ? this.scheduledTabC.loadPDDetails() : this.completedTabC.loadPDDetails();
|
||||
this.getTabIndex==0 ? this.allTabC.loadPDDetails() : this.getTabIndex==1 ? this.inprogressTabC.loadPDDetails() : this.getTabIndex==2 ? this.scheduledTabC.loadPDDetails() : this.qcCompletedTabC.loadPDDetails();
|
||||
|
||||
}
|
||||
viewPDDetails(pdid:string){
|
||||
@ -79,7 +82,8 @@ export class ListPdComponent implements OnInit, OnDestroy {
|
||||
//get tab changes
|
||||
onTabClick(event: MatTabChangeEvent) {
|
||||
this.getTabIndex=event.index;
|
||||
this.getTabIndex==0 ? this.allTabC.loadPDDetails() : this.getTabIndex==1 ? this.inprogressTabC.loadPDDetails() : this.getTabIndex==2 ? this.scheduledTabC.loadPDDetails() : this.completedTabC.loadPDDetails();
|
||||
this.getTabIndex==0 ? this.allTabC.loadPDDetails() : this.getTabIndex==1 ? this.inprogressTabC.loadPDDetails() : this.getTabIndex==2 ? this.scheduledTabC.loadPDDetails() : this.qcCompletedTabC.loadPDDetails();
|
||||
|
||||
}
|
||||
|
||||
ngOnDestroy(): void {
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
<mat-card-content>
|
||||
<mat-table [dataSource]="dataSourceTab5" matSort *ngIf="qcCompletedPdListData.length > 0" >
|
||||
|
||||
<ng-container matColumnDef="Name">
|
||||
<mat-cell class="cell" *matCellDef="let details;">
|
||||
<span *ngIf="details.applicat_details" mat-line><b>{{details.applicat_details[0].applicant_name}}</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_full_name" mat-line> {{details.lender_full_name}} </span><br>
|
||||
<span *ngIf="details.product_abbr" mat-line class="fontsize"> {{details.product_abbr}}/{{details.subproduct_abbr}}</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}} </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>
|
||||
</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.pd_id)"><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,16 @@
|
||||
.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;
|
||||
}
|
||||
@ -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,86 @@
|
||||
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';
|
||||
|
||||
@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 {
|
||||
recordStatus: boolean;
|
||||
errorMessage:any[]=[];
|
||||
tabStatus:string="QC_COMPLETED";
|
||||
public dataLengthTab5: number;
|
||||
public dataSourceTab5 = new MatTableDataSource();
|
||||
displayedColumns = ['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
|
||||
qcCompletedPdListData:any[] = [];
|
||||
|
||||
// pagination variable details
|
||||
length = 50;
|
||||
pageIndex = 0;
|
||||
pageSize = 10;
|
||||
pageEvent: PageEvent;
|
||||
|
||||
constructor(private _pd: PdTrigerService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.recordStatus=false;
|
||||
// this.loadPDDetails();
|
||||
}
|
||||
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);
|
||||
}
|
||||
pageChange(e) {
|
||||
console.log(e);
|
||||
}
|
||||
viewPD(pdid:string){
|
||||
this.loadPdView.next(pdid);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<ng-container matColumnDef="Status">
|
||||
<mat-cell class="cell center" *matCellDef="let details;">
|
||||
<span> {{details.pd_status}}</span><br>
|
||||
<span class="fontsize">{{ (details.scheduled_on)? (details.scheduled_on | slice:0:10):(details.scheduled_on) }}
|
||||
<span class="fontsize">{{ (details.updatedon)? (details.updatedon | slice:0:10):(details.updatedon) }}
|
||||
</span>
|
||||
</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
@ -406,7 +406,7 @@ optionsMapItems(items) {
|
||||
|
||||
// load pd view component
|
||||
loadPdViewCompoent(){
|
||||
this.router.navigate([ '../../../pdlist/viewpd',this.startPD], { relativeTo: this.route });
|
||||
this.router.navigate([ '../../viewpd',this.startPD], { relativeTo: this.route });
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -140,7 +140,7 @@ export class ViewPdComponent implements OnInit, OnDestroy {
|
||||
// start pd
|
||||
getPDStart(pdID:any){
|
||||
this.destroyType=3;
|
||||
this.router.navigate([ '../../../pdlist/startpd',pdID], { relativeTo: this.route });
|
||||
this.router.navigate([ '../../startpd',pdID], { relativeTo: this.route });
|
||||
}
|
||||
|
||||
// updateViewComponent(editBack:string) {
|
||||
|
||||
@ -39,6 +39,7 @@ import { InprogressPdComponent } from './list-pd/inprogress-pd/inprogress-pd.com
|
||||
import { AllPdComponent } from './list-pd/all-pd/all-pd.component';
|
||||
import { ScheduledPdComponent } from './list-pd/scheduled-pd/scheduled-pd.component';
|
||||
import { CompletedPdComponent } from './list-pd/completed-pd/completed-pd.component';
|
||||
import { QcCompletedPdComponent } from './list-pd/qc-completed-pd/qc-completed-pd.component';
|
||||
/**
|
||||
* Custom angular notifier options
|
||||
*/
|
||||
@ -108,7 +109,8 @@ const pdCustomNotifierOptions: NotifierOptions = {
|
||||
AgmCoreModule.forRoot({apiKey: 'AIzaSyBtdO5k6CRntAMJCF-H5uZjTCoSGX95cdk'}),OwlDateTimeModule,
|
||||
OwlNativeDateTimeModule,
|
||||
],
|
||||
declarations: [ListPdComponent, ManagePdComponent, MapPdViewComponent, AddPdComponent, ViewPdComponent, PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, InprogressPdComponent, AllPdComponent, ScheduledPdComponent, CompletedPdComponent],
|
||||
declarations: [ListPdComponent, ManagePdComponent, MapPdViewComponent, AddPdComponent, ViewPdComponent, PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, InprogressPdComponent, AllPdComponent, ScheduledPdComponent, CompletedPdComponent, QcCompletedPdComponent],
|
||||
exports: [PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, CompletedPdComponent, QcCompletedPdComponent],
|
||||
providers: [PdTrigerService, GetGeometricLocationService],
|
||||
entryComponents: [PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent]
|
||||
})
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
|
||||
<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>
|
||||
<mat-card>
|
||||
<mat-tab-group (selectedTabChange)="onTabClick($event)">
|
||||
<mat-tab>
|
||||
<ng-template mat-tab-label>Completed </ng-template>
|
||||
<app-completed-pd [bindFilterValue]="filterValue" (loadPdView)="viewPDDetails($event)"></app-completed-pd>
|
||||
</mat-tab>
|
||||
<mat-tab>
|
||||
<ng-template mat-tab-label>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,16 @@
|
||||
.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;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { QcListComponent } from './qc-list.component';
|
||||
|
||||
describe('QcListComponent', () => {
|
||||
let component: QcListComponent;
|
||||
let fixture: ComponentFixture<QcListComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ QcListComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(QcListComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
71
ng6-seed/src/app/quality-check/qc-list/qc-list.component.ts
Normal file
71
ng6-seed/src/app/quality-check/qc-list/qc-list.component.ts
Normal file
@ -0,0 +1,71 @@
|
||||
import { Component,ViewChild, OnInit, ViewEncapsulation, OnDestroy, OnChanges } from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { NotifierService } from 'angular-notifier';
|
||||
import { MatPaginator, MatSort, MatTableDataSource, PageEvent, MatTabChangeEvent } from '@angular/material';
|
||||
import { CompletedPdComponent } from './../../personal-discussion/manage-pd/list-pd/completed-pd/completed-pd.component';
|
||||
import { QcCompletedPdComponent } from './../../personal-discussion/manage-pd/list-pd/qc-completed-pd/qc-completed-pd.component';
|
||||
|
||||
@Component({
|
||||
selector: 'app-qc-list',
|
||||
templateUrl: './qc-list.component.html',
|
||||
styleUrls: ['./qc-list.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class QcListComponent implements OnInit {
|
||||
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(CompletedPdComponent) completedTabC: CompletedPdComponent;
|
||||
@ViewChild(QcCompletedPdComponent) qcCompletedTabC: QcCompletedPdComponent;
|
||||
|
||||
constructor( notifier: NotifierService, private route: ActivatedRoute,
|
||||
private router: Router) {
|
||||
this.notifier = notifier;
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.viewPdList = true;
|
||||
this.recordStatus=false;
|
||||
this.allTab=true;
|
||||
|
||||
}
|
||||
// after view call all tabs component
|
||||
ngAfterViewInit() {
|
||||
this.completedTabC.loadPDDetails();
|
||||
}
|
||||
|
||||
showListView(status: boolean){
|
||||
this.viewPdList = status;
|
||||
|
||||
}
|
||||
pdListLoad(status: boolean){
|
||||
this.viewPdList = status;
|
||||
this.getTabIndex==0 ? this.completedTabC.loadPDDetails() : this.qcCompletedTabC.loadPDDetails();
|
||||
|
||||
}
|
||||
viewPDDetails(pdid:string){
|
||||
this.viewPdList = !this.viewPdList;
|
||||
this.router.navigate([ '../qclist/viewpd',pdid], { relativeTo: this.route });
|
||||
|
||||
}
|
||||
//get tab changes
|
||||
onTabClick(event: MatTabChangeEvent) {
|
||||
this.getTabIndex=event.index;
|
||||
this.getTabIndex==0 ? this.completedTabC.loadPDDetails() : this.qcCompletedTabC.loadPDDetails();
|
||||
}
|
||||
|
||||
ngOnDestroy(): void {
|
||||
this.viewPdList=false;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,365 @@
|
||||
<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="" class="compose-btn mat-warn mat-raised-button mb-1" (click)="changePDStatus(PDStatus);"> <span>QC Complete</span></button>
|
||||
<mat-expansion-panel *ngFor="let category of categoryList;let catIndex = index; ">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title class="text-xs-left">
|
||||
<h6 class="mt-0"> {{category.category_name}}</h6>
|
||||
</mat-panel-title>
|
||||
|
||||
</mat-expansion-panel-header>
|
||||
|
||||
<mat-list>
|
||||
<mat-list-item class="custm-list-item" *ngFor="let questions of category.questions; let quesIndex=index" [ngStyle]="{'color':quesIndex === selectedQuestionIndex && catIndex === selectedCategoryIndex ? 'red' : 'black' }" (click)="OnSelectDirectQuestions(questions, catIndex,quesIndex)">
|
||||
<small>{{ (questions.question.length>15)? (questions.question | slice:0:15)+'..':(questions.question) }}</small>
|
||||
</mat-list-item>
|
||||
|
||||
|
||||
</mat-list>
|
||||
</mat-expansion-panel>
|
||||
|
||||
</mat-sidenav>
|
||||
<mat-toolbar color="primary" fxHide="false" fxHide.gt-sm>
|
||||
<button (click)="mailnav.toggle()" mat-icon-button>
|
||||
<mat-icon>short_text</mat-icon>
|
||||
</button>
|
||||
<span class="mr-1 ml-1">Category</span>
|
||||
</mat-toolbar>
|
||||
<div class="main-content" fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="100" fxFlex.lg="100" fxFlex.xl="100">
|
||||
<figure>
|
||||
<mat-card-content>
|
||||
|
||||
<div fxLayout="row" >
|
||||
<button mat-raised-button mat-icon-button class="hover-icon start_close_btn" type="button" matTooltip="Close" matTooltipPosition="above"
|
||||
(click)="loadPdViewCompoent()"><mat-icon>close</mat-icon></button>
|
||||
<div fxFlex="33" class="text-xs-left">
|
||||
<h4 class="mt-0">{{mainApplicantName}}</h4>
|
||||
<small>{{pdMasterList.customer_segment_name}}</small>
|
||||
</div>
|
||||
<div fxFlex="66" class="text-xs-right">
|
||||
<h4 class="mt-0">{{pdMasterList.product_name}}/{{pdMasterList.subproduct_name}}</h4>
|
||||
<small>{{pdMasterList.lender_full_name}}/{{pdMasterList.lender_applicant_id}}</small>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</mat-card-content>
|
||||
<hr>
|
||||
<mat-card-content style="min-height: 240px;" *ngIf="selectedCategory.length==0">
|
||||
<!-- <h6 class="mt-0">About</h6> -->
|
||||
<p>No Records Found..</p>
|
||||
</mat-card-content>
|
||||
|
||||
<!-- check type of questions -->
|
||||
<ng-container [ngSwitch]="selectedCategory.fk_question_answertype">
|
||||
<!-- start options type questions section -->
|
||||
<ng-container *ngSwitchCase="1">
|
||||
|
||||
|
||||
<form [formGroup]="optionsForm" *ngIf="answerList.length>0 ; else noanswers;">
|
||||
<mat-card-content>
|
||||
<h6 class="mt-0">{{optionsForm.controls.pd_question.value}}</h6>
|
||||
<div fxLayout="row" >
|
||||
<div fxFlex="60" class="text-xs-left">
|
||||
|
||||
<mat-list>
|
||||
|
||||
<mat-radio-group formControlName="modelValue">
|
||||
|
||||
<mat-list-item *ngFor="let option of optionsForm.controls.items.value">
|
||||
<mat-radio-button [value]="option.pd_answer_id">{{option.pd_answer}}</mat-radio-button>
|
||||
|
||||
</mat-list-item>
|
||||
|
||||
</mat-radio-group>
|
||||
|
||||
</mat-list>
|
||||
|
||||
</div>
|
||||
<div fxFlex="40" class="text-xs-right" *ngIf="optionsForm.controls.documents.length>0">
|
||||
|
||||
<mat-card >
|
||||
<mat-card-content style="display: flex;
|
||||
overflow: auto;min-height: 200px; max-height: 240px;">
|
||||
<div fxLayout="row wrap">
|
||||
<div fxFlex="50" class="m-gap p-gap" *ngFor="let docs of optionsForm.controls.documents.value; let docIndex=index">
|
||||
<div class="p-list-main mb-2">
|
||||
<div class="p-list">
|
||||
|
||||
<div class="top"><img [src]="docs.pd_document_url" alt=""/></div>
|
||||
<div class="bottom">
|
||||
<div class="left">
|
||||
<div class="details">
|
||||
<small>{{docs.pd_document_title}}</small>
|
||||
<!-- <p>{{docs.pd_document_name}}</p> -->
|
||||
</div>
|
||||
<!-- <div class="buy"><i class="material-icons">add_shopping_cart</i></div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</mat-card-content>
|
||||
|
||||
</mat-card>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<div fxLayout="row" >
|
||||
<div fxFlex="60" class="pb-0 text-sm-left">
|
||||
<mat-form-field appearance="outline" style="width: 100%">
|
||||
<mat-label>Remarks</mat-label>
|
||||
<textarea matInput placeholder="Remarks" formControlName="pd_answer_remark"></textarea>
|
||||
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<!-- this section for questions type options button actions -->
|
||||
<div fxFlex="40" class="pb-0 text-sm-right">
|
||||
<mat-button-toggle-group name="fontStyle" aria-label="Font Style">
|
||||
<mat-button-toggle value="bold" matTooltip="Save&Previous" (click)="saveNextPrevious(optionsForm.controls,previous)" matTooltipPosition="below"><mat-icon>arrow_backward</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Previous" (click)="skipNextPrevious(previous)" matTooltipPosition="below"><mat-icon>skip_previous</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Next" (click)="skipNextPrevious(next)" matTooltipPosition="below"><mat-icon>skip_next</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Save&Next" (click)="saveNextPrevious(optionsForm.controls,next)" matTooltipPosition="below"><mat-icon>arrow_forward</mat-icon></mat-button-toggle>
|
||||
</mat-button-toggle-group>
|
||||
|
||||
</div>
|
||||
<!-- end questions type options -->
|
||||
</div>
|
||||
|
||||
</mat-card-actions>
|
||||
</form>
|
||||
|
||||
<ng-template #noanswers>
|
||||
<mat-card-content>
|
||||
<h6 class="mt-0">{{selectedCategory.question}}</h6>
|
||||
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<div fxLayout="row" >
|
||||
|
||||
<div fxFlex="100" class="pb-0 text-sm-right">
|
||||
<mat-button-toggle-group name="fontStyle" aria-label="Font Style">
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Previous" (click)="skipNextPrevious(previous)" matTooltipPosition="below"><mat-icon>skip_previous</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Next" (click)="skipNextPrevious(next)" matTooltipPosition="below"><mat-icon>skip_next</mat-icon></mat-button-toggle>
|
||||
</mat-button-toggle-group>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</mat-card-actions>
|
||||
</ng-template>
|
||||
|
||||
|
||||
</ng-container>
|
||||
<!-- end options type questions section -->
|
||||
<!-- start text box questions section -->
|
||||
<ng-container *ngSwitchCase="2">
|
||||
|
||||
<form [formGroup]="textBoxForm" *ngIf="answerList.length>0 ; else noanswers;">
|
||||
<mat-card-content>
|
||||
<h6 class="mt-0">{{textBoxForm.controls.pd_question.value}}</h6>
|
||||
<div fxLayout="row" >
|
||||
<div fxFlex="60" class="text-xs-left">
|
||||
|
||||
<mat-list [formArrayName]="'items'">
|
||||
<mat-list-item *ngFor="let control of textBoxForm.controls.items.controls; let i = index;" [formGroup]="control">
|
||||
|
||||
<mat-form-field appearance="outline" style="width: 100%">
|
||||
<mat-label>Answers</mat-label>
|
||||
<textarea matInput placeholder="Answers" formControlName="pd_answer"></textarea>
|
||||
|
||||
</mat-form-field>
|
||||
</mat-list-item>
|
||||
|
||||
</mat-list>
|
||||
</div>
|
||||
<div fxFlex="40" class="text-xs-right" *ngIf="textBoxForm.controls.documents.length>0">
|
||||
|
||||
<mat-card >
|
||||
<mat-card-content style="display: flex;
|
||||
overflow: auto;min-height: 200px; max-height: 240px;">
|
||||
<div fxLayout="row wrap">
|
||||
|
||||
<div fxFlex="50" class="m-gap p-gap" *ngFor="let docs of textBoxForm.controls.documents.value; let docIndex=index">
|
||||
<div class="p-list-main mb-2">
|
||||
<div class="p-list">
|
||||
|
||||
<div class="top"><img [src]="docs.pd_document_url" alt=""/></div>
|
||||
<div class="bottom">
|
||||
<div class="left">
|
||||
<div class="details">
|
||||
<small>{{docs.pd_document_title}}</small>
|
||||
<!-- <p>{{docs.pd_document_name}}</p> -->
|
||||
</div>
|
||||
<!-- <div class="buy"><i class="material-icons">add_shopping_cart</i></div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</mat-card-content>
|
||||
|
||||
</mat-card>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<div fxLayout="row" >
|
||||
<div fxFlex="60" class="pb-0 text-sm-left">
|
||||
<mat-form-field appearance="outline" style="width: 100%">
|
||||
<mat-label>Remarks</mat-label>
|
||||
<textarea matInput placeholder="Remarks" formControlName="pd_answer_remark"></textarea>
|
||||
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<!-- this section for questions type options button actions -->
|
||||
<div fxFlex="40" class="pb-0 text-sm-right">
|
||||
<mat-button-toggle-group name="fontStyle" aria-label="Font Style">
|
||||
<mat-button-toggle value="bold" matTooltip="Save&Previous" (click)="saveNextPreviousText(textBoxForm.controls,previous)" matTooltipPosition="below"><mat-icon>arrow_backward</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Previous" (click)="skipNextPrevious(previous)" matTooltipPosition="below"><mat-icon>skip_previous</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Next" (click)="skipNextPrevious(previous)" matTooltipPosition="below"><mat-icon>skip_next</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Save&Next" (click)="saveNextPreviousText(textBoxForm.controls,next)" matTooltipPosition="below"><mat-icon>arrow_forward</mat-icon></mat-button-toggle>
|
||||
</mat-button-toggle-group>
|
||||
|
||||
</div>
|
||||
<!-- end questions type options -->
|
||||
</div>
|
||||
|
||||
</mat-card-actions>
|
||||
</form>
|
||||
<ng-template #noanswers>
|
||||
<mat-card-content>
|
||||
<h6 class="mt-0">{{selectedCategory.question}}</h6>
|
||||
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<div fxLayout="row" >
|
||||
|
||||
<div fxFlex="100" class="pb-0 text-sm-right">
|
||||
<mat-button-toggle-group name="fontStyle" aria-label="Font Style">
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Previous" (click)="skipNextPrevious(previous)" matTooltipPosition="below"><mat-icon>skip_previous</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Next" (click)="skipNextPrevious(next)" matTooltipPosition="below"><mat-icon>skip_next</mat-icon></mat-button-toggle>
|
||||
</mat-button-toggle-group>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</mat-card-actions>
|
||||
</ng-template>
|
||||
</ng-container>
|
||||
<!-- end text box questions section -->
|
||||
<!-- start check box questions section -->
|
||||
<ng-container *ngSwitchCase="3">
|
||||
|
||||
<form [formGroup]="checkBoxForm" *ngIf="answerList.length>0 ; else noanswers;">
|
||||
<mat-card-content>
|
||||
<h6 class="mt-0">{{checkBoxForm.controls.pd_question.value}}</h6>
|
||||
<div fxLayout="row" >
|
||||
<div fxFlex="60" class="text-xs-left">
|
||||
|
||||
<mat-list [formArrayName]="'items'">
|
||||
<mat-list-item *ngFor="let control of checkBoxForm.controls.items.controls; let i = index;" [formGroup]="control">
|
||||
|
||||
<small><mat-checkbox class="example-margin" formControlName="checkbox" id="{{ control.controls.pd_answer_id.value }}"> {{ control.controls.pd_answer.value }}</mat-checkbox> </small>
|
||||
|
||||
</mat-list-item>
|
||||
|
||||
</mat-list>
|
||||
</div>
|
||||
<div fxFlex="40" class="text-xs-right" *ngIf="checkBoxForm.controls.documents.length>0">
|
||||
|
||||
<mat-card >
|
||||
<mat-card-content style="display: flex;
|
||||
overflow: auto;min-height: 200px; max-height: 240px;">
|
||||
<div fxLayout="row wrap">
|
||||
<div fxFlex="50" class="m-gap p-gap" *ngFor="let docs of textBoxForm.controls.documents.value; let docIndex=index">
|
||||
<div class="p-list-main mb-2">
|
||||
<div class="p-list">
|
||||
|
||||
<div class="top"><img [src]="docs.pd_document_url" alt=""/></div>
|
||||
<div class="bottom">
|
||||
<div class="left">
|
||||
<div class="details">
|
||||
<small>{{docs.pd_document_title}}</small>
|
||||
<!-- <p>{{docs.pd_document_name}}</p> -->
|
||||
</div>
|
||||
<!-- <div class="buy"><i class="material-icons">add_shopping_cart</i></div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</mat-card-content>
|
||||
|
||||
</mat-card>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</mat-card-content>
|
||||
<mat-card-actions *ngIf="checkBoxForm.controls.items.length > 0">
|
||||
<div fxLayout="row" >
|
||||
<div fxFlex="60" class="pb-0 text-sm-left">
|
||||
<mat-form-field appearance="outline" style="width: 100%">
|
||||
<mat-label>Remarks</mat-label>
|
||||
<textarea matInput placeholder="Remarks" formControlName="pd_answer_remark"></textarea>
|
||||
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<!-- this section for questions type options button actions -->
|
||||
<div fxFlex="40" class="pb-0 text-sm-right">
|
||||
<mat-button-toggle-group name="fontStyle" aria-label="Font Style">
|
||||
<mat-button-toggle value="bold" matTooltip="Save&Previous" (click)="saveNextPrevious(checkBoxForm.controls,previous)" matTooltipPosition="below"><mat-icon>arrow_backward</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Previous" (click)="skipNextPrevious(previous)" matTooltipPosition="below"><mat-icon>skip_previous</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Next" (click)="skipNextPrevious(previous)" matTooltipPosition="below"><mat-icon>skip_next</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Save&Next" (click)="saveNextPrevious(checkBoxForm.controls,next)" matTooltipPosition="below"><mat-icon>arrow_forward</mat-icon></mat-button-toggle>
|
||||
</mat-button-toggle-group>
|
||||
|
||||
</div>
|
||||
<!-- end questions type options -->
|
||||
</div>
|
||||
|
||||
</mat-card-actions>
|
||||
</form>
|
||||
<ng-template #noanswers>
|
||||
<mat-card-content>
|
||||
<h6 class="mt-0">{{selectedCategory.question}}</h6>
|
||||
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<div fxLayout="row" >
|
||||
|
||||
<div fxFlex="100" class="pb-0 text-sm-right">
|
||||
<mat-button-toggle-group name="fontStyle" aria-label="Font Style">
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Previous" (click)="skipNextPrevious(previous)" matTooltipPosition="below"><mat-icon>skip_previous</mat-icon></mat-button-toggle>
|
||||
<mat-button-toggle value="bold" matTooltip="Skip&Next" (click)="skipNextPrevious(next)" matTooltipPosition="below"><mat-icon>skip_next</mat-icon></mat-button-toggle>
|
||||
</mat-button-toggle-group>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</mat-card-actions>
|
||||
</ng-template>
|
||||
</ng-container>
|
||||
|
||||
</ng-container>
|
||||
<!-- end check box questions section -->
|
||||
|
||||
</figure>
|
||||
</div>
|
||||
</mat-sidenav-container>
|
||||
|
||||
<notifier-container></notifier-container>
|
||||
|
||||
|
||||
@ -0,0 +1,121 @@
|
||||
@import "./../../../../assets/styles/scss/components/messages";
|
||||
:host {
|
||||
margin-left: -5px;
|
||||
margin-right: -5px;
|
||||
margin-top: -5px;
|
||||
display: block;
|
||||
}
|
||||
:host /deep/ {
|
||||
mat-sidenav {
|
||||
width: 250px;
|
||||
}
|
||||
.mat-sidenav-content {
|
||||
padding: 0;
|
||||
|
||||
}
|
||||
@media (min-width: 959px) {
|
||||
.mat-sidenav-side {
|
||||
background-color: transparent;
|
||||
box-shadow: none!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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.start_close_btn {
|
||||
position: fixed;
|
||||
right: 69px;
|
||||
top: 112px;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { QcStartComponent } from './qc-start.component';
|
||||
|
||||
describe('QcStartComponent', () => {
|
||||
let component: QcStartComponent;
|
||||
let fixture: ComponentFixture<QcStartComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ QcStartComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(QcStartComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,415 @@
|
||||
import { Component, ViewChild ,OnInit,ViewEncapsulation, OnDestroy } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { NotifierService } from 'angular-notifier';
|
||||
import { QcListComponent } from './../qc-list.component';
|
||||
import { QcService } from './../../qc-service/qc.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-qc-start',
|
||||
templateUrl: './qc-start.component.html',
|
||||
styleUrls: ['./qc-start.component.scss']
|
||||
})
|
||||
export class QcStartComponent implements OnInit, OnDestroy {
|
||||
private notifier: NotifierService;
|
||||
public startPD:string;
|
||||
public PDStatus: string;
|
||||
public mainApplicantName:string;
|
||||
//public remarks: string;
|
||||
errorMessage:any;
|
||||
selectedCategory:any=[];
|
||||
categoryList: any=[];
|
||||
pdMasterList: any=[];
|
||||
optionsForm: FormGroup;
|
||||
checkBoxForm:FormGroup;
|
||||
textBoxForm:FormGroup;
|
||||
next:number;
|
||||
previous:number;
|
||||
selectedCategoryIndex:number;
|
||||
selectedQuestionIndex:number;
|
||||
getQuestionsLength:number;
|
||||
answerList:any=[];
|
||||
ansPDList:any=[];
|
||||
constructor(notifier: NotifierService, private fb: FormBuilder,private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private QcListComponent : QcListComponent, private _qc: QcService,) {
|
||||
this.startPD = this.route.snapshot.params['pdid'];
|
||||
this.notifier = notifier;
|
||||
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.QcListComponent.showListView(false);
|
||||
const elemSidebar = <HTMLElement>document.querySelector('.app-inner .mail-sidebar');
|
||||
const elemContent = <HTMLElement>document.querySelector('.app-inner .main-content');
|
||||
|
||||
if (window.matchMedia(`(min-width: 960px)`).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;
|
||||
this.PDStatus="QC_COMPLETED"
|
||||
}
|
||||
isMac(): boolean {
|
||||
let bool = false;
|
||||
if (navigator.platform.toUpperCase().indexOf('MAC') >= 0 || navigator.platform.toUpperCase().indexOf('IPAD') >= 0) {
|
||||
bool = true;
|
||||
}
|
||||
return bool;
|
||||
}
|
||||
// load pd template details
|
||||
loadTemplates(startID:string){
|
||||
this._qc.loadPDTemplates(startID).subscribe(
|
||||
data => {
|
||||
if (data.status == 200) {
|
||||
this.pdMasterList=data.records.pdmaster_details;
|
||||
this.categoryList=data.records.question_answers;
|
||||
let filterApplicantName= data.records.pdapplicants_detials.filter(item => item.applicant_type == 1);
|
||||
this.mainApplicantName = filterApplicantName[0].applicant_name;
|
||||
}
|
||||
else{
|
||||
this.pdMasterList="";
|
||||
this.mainApplicantName="";
|
||||
this.categoryList=[];
|
||||
}
|
||||
}, error => this.errorMessage = <any> error);
|
||||
}
|
||||
|
||||
ngOnDestroy(): void {
|
||||
this.QcListComponent.showListView(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
isOver(): boolean {
|
||||
return window.matchMedia(`(max-width: 960px)`).matches;
|
||||
}
|
||||
|
||||
OnSelectDirectQuestions(selectedQuestions: any, categoryIndex:number,questionsIndex:number){
|
||||
this.selectedCategory=selectedQuestions;
|
||||
this.selectedCategoryIndex=categoryIndex;
|
||||
this.selectedQuestionIndex=questionsIndex;
|
||||
|
||||
let serachQuestions = {
|
||||
"question_id":selectedQuestions.fk_question_id,
|
||||
"pd_id":this.startPD,
|
||||
"template_id":selectedQuestions.fk_template_id,
|
||||
"category_id":selectedQuestions.fk_template_question_category_id
|
||||
}
|
||||
this.getAnswers(serachQuestions);
|
||||
|
||||
}
|
||||
|
||||
// load question based answer list
|
||||
getAnswers(serachList:any){
|
||||
|
||||
this._qc.getAnswersForPD(serachList).subscribe(
|
||||
data => {
|
||||
if (data.status == 200) {
|
||||
this.answerList=data.records.answers;
|
||||
this.ansPDList=data.records;
|
||||
|
||||
// this for options type questions
|
||||
if(this.selectedCategory.fk_question_answertype==1){
|
||||
this.loadOtionsForm(this.selectedCategory, this.answerList);
|
||||
}
|
||||
//this for text box type questions
|
||||
else if(this.selectedCategory.fk_question_answertype==2){
|
||||
|
||||
this.loadTextBoxForm(this.selectedCategory,this.answerList);
|
||||
}
|
||||
//this for check box type questions
|
||||
else if(this.selectedCategory.fk_question_answertype==3){
|
||||
|
||||
this.loadCheckBoxForm(this.selectedCategory,this.answerList);
|
||||
}
|
||||
}
|
||||
}, error => this.errorMessage = <any> error);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
// load check box form
|
||||
|
||||
loadCheckBoxForm(selectedCategory: any, ansItem: any){
|
||||
// create checkbox group
|
||||
let checkboxGroup = new FormArray(ansItem.map(item => new FormGroup({
|
||||
fk_pd_id:new FormControl(this.startPD),
|
||||
pd_detail_answer_id: new FormControl(item.pd_detail_answer_id),
|
||||
pd_answer_id: new FormControl(item.question_answer_id),
|
||||
pd_answer: new FormControl(item.answer),
|
||||
pd_answer_weightage:new FormControl(item.template_answer_weightage),
|
||||
checkbox: new FormControl(item.isactive==null ? false: true)
|
||||
})));
|
||||
// create documents group
|
||||
let documentsGroup = new FormArray(this.ansPDList.images.map(item => new FormGroup({
|
||||
pd_document_title:new FormControl(item.pd_document_title),
|
||||
pd_document_url: new FormControl(item.pd_document_name),
|
||||
|
||||
})));
|
||||
|
||||
// create a hidden reuired formControl to keep status of checkbox group
|
||||
let hiddenControl = new FormControl(this.mapItems(checkboxGroup.value), Validators.required);
|
||||
// update checkbox group's value to hidden formcontrol
|
||||
checkboxGroup.valueChanges.subscribe((v) => {
|
||||
hiddenControl.setValue(this.mapItems(v));
|
||||
});
|
||||
|
||||
|
||||
this.checkBoxForm = new FormGroup({
|
||||
pd_detail_id: new FormControl(this.ansPDList.pd_detail_id),
|
||||
fk_pd_id: new FormControl(this.startPD),
|
||||
fk_category_id: new FormControl(this.selectedCategory.fk_template_question_category_id),
|
||||
fk_question_id: new FormControl(this.selectedCategory.fk_question_id),
|
||||
pd_question: new FormControl(this.selectedCategory.question),
|
||||
pd_question_weightage: new FormControl(this.selectedCategory.question_weightage),
|
||||
pd_answer_remark:new FormControl(this.ansPDList.question_remark),
|
||||
items: checkboxGroup,
|
||||
selectedItems: hiddenControl,
|
||||
documents: documentsGroup
|
||||
});
|
||||
}
|
||||
|
||||
// map options form group values
|
||||
mapItems(items) {
|
||||
let selectedItems = items.filter((item) => item.checkbox).map((item) => item);
|
||||
return selectedItems.length ? selectedItems : null;
|
||||
}
|
||||
|
||||
// load Options form
|
||||
loadOtionsForm(selectedCategory: any, ansItem: any){
|
||||
// create options type group
|
||||
let optionsGroup = new FormArray(ansItem.map(item => new FormGroup({
|
||||
fk_pd_id:new FormControl(this.startPD),
|
||||
pd_detail_answer_id: new FormControl(item.pd_detail_answer_id),
|
||||
pd_answer_id: new FormControl(item.question_answer_id),
|
||||
pd_answer: new FormControl(item.answer),
|
||||
pd_answer_weightage:new FormControl(item.template_answer_weightage),
|
||||
options: new FormControl(item.isactive==null ? false: true)
|
||||
})));
|
||||
|
||||
// create documents group
|
||||
let documentsGroup = new FormArray(this.ansPDList.images.map(item => new FormGroup({
|
||||
pd_document_title:new FormControl(item.pd_document_title),
|
||||
pd_document_url: new FormControl(item.pd_document_name),
|
||||
|
||||
})));
|
||||
|
||||
// create a hidden reuired formControl to keep status of checkbox group
|
||||
let hiddenControl = new FormControl(this.optionsMapItems(optionsGroup.value), Validators.required);
|
||||
let checkedItem = hiddenControl.value!=null ? new FormControl(hiddenControl.value[0].pd_answer_id) :new FormControl(null);
|
||||
|
||||
this.optionsForm = new FormGroup({
|
||||
pd_detail_id: new FormControl(this.ansPDList.pd_detail_id),
|
||||
fk_pd_id: new FormControl(this.startPD),
|
||||
fk_category_id: new FormControl(this.selectedCategory.fk_template_question_category_id),
|
||||
fk_question_id: new FormControl(this.selectedCategory.fk_question_id),
|
||||
pd_question: new FormControl(this.selectedCategory.question),
|
||||
pd_question_weightage: new FormControl(this.selectedCategory.question_weightage),
|
||||
pd_answer_remark:new FormControl(this.ansPDList.question_remark),
|
||||
items: optionsGroup,
|
||||
selectedItems: hiddenControl,
|
||||
modelValue : checkedItem,
|
||||
documents: documentsGroup
|
||||
|
||||
});
|
||||
this.optionsForm.controls.modelValue.valueChanges.subscribe((v) => {
|
||||
hiddenControl.setValue(this.updateOptionsMapItems(v,optionsGroup.value));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// map option type group values
|
||||
optionsMapItems(items) {
|
||||
|
||||
let optionSelectedItems = items.filter((item) => item.options==true).map((item) => item);
|
||||
return optionSelectedItems.length ? optionSelectedItems : null;
|
||||
}
|
||||
// map options type while change options
|
||||
updateOptionsMapItems(key,items) {
|
||||
|
||||
let updateSelectedItems = items.filter((item) => item.pd_answer_id==key).map((item) => item);
|
||||
return updateSelectedItems.length ? updateSelectedItems : null;
|
||||
}
|
||||
|
||||
// load text box form
|
||||
loadTextBoxForm(selectedCategory: any, ansItem: any){
|
||||
// create text box type group
|
||||
let textGroup = new FormArray(ansItem.map(item => new FormGroup({
|
||||
fk_pd_id:new FormControl(this.startPD),
|
||||
pd_detail_answer_id: new FormControl(item.pd_detail_answer_id),
|
||||
pd_answer_id: new FormControl(item.question_answer_id),
|
||||
pd_answer: new FormControl(item.answer),
|
||||
pd_answer_weightage:new FormControl(item.template_answer_weightage),
|
||||
text: new FormControl(item.pd_detail_answer_id==null ? false: true)
|
||||
})));
|
||||
|
||||
// create documents group
|
||||
let documentsGroup = new FormArray(this.ansPDList.images.map(item => new FormGroup({
|
||||
pd_document_title:new FormControl(item.pd_document_title),
|
||||
pd_document_url: new FormControl(item.pd_document_name),
|
||||
|
||||
})));
|
||||
|
||||
this.textBoxForm = new FormGroup({
|
||||
pd_detail_id: new FormControl(ansItem.pd_detail_id),
|
||||
fk_pd_id: new FormControl(this.startPD),
|
||||
fk_category_id: new FormControl(this.selectedCategory.fk_template_question_category_id),
|
||||
fk_question_id: new FormControl(this.selectedCategory.fk_question_id),
|
||||
pd_question: new FormControl(this.selectedCategory.question),
|
||||
pd_question_weightage: new FormControl(this.selectedCategory.question_weightage),
|
||||
pd_answer_remark:new FormControl(this.ansPDList.question_remark),
|
||||
items: textGroup,
|
||||
documents: documentsGroup
|
||||
});
|
||||
}
|
||||
|
||||
// next save and previous save for options and check box type questions
|
||||
saveNextPrevious(details:any, type:number){
|
||||
|
||||
let fetchAns =[];
|
||||
details.selectedItems.value.forEach((itemElement, itemIndex) => {
|
||||
let obj1 = {
|
||||
fk_pd_detail_id:details.pd_detail_id.value,
|
||||
fk_pd_id:itemElement.fk_pd_id,
|
||||
pd_detail_answer_id: itemElement.pd_detail_answer_id,
|
||||
pd_answer_id: itemElement.pd_answer_id,
|
||||
pd_answer: itemElement.pd_answer,
|
||||
pd_answer_weightage:itemElement.pd_answer_weightage,
|
||||
}
|
||||
fetchAns.push(obj1)
|
||||
});
|
||||
|
||||
let pd_details:any=[{
|
||||
"pd_detail_id":details.pd_detail_id.value,
|
||||
"fk_pd_id":details.fk_pd_id.value,
|
||||
"fk_category_id":details.fk_category_id.value,
|
||||
"fk_question_id":details.fk_question_id.value,
|
||||
"pd_question":details.pd_question.value,
|
||||
"pd_question_weightage":details.pd_question_weightage.value,
|
||||
"question_remark":details.pd_answer_remark.value,
|
||||
"answers":fetchAns,
|
||||
"images":[]
|
||||
}];
|
||||
this._qc.savePDQuestions(pd_details).subscribe(result => {
|
||||
if (result.status == 200) {
|
||||
if(type==1){
|
||||
this.skipNextPrevious(this.next);
|
||||
}
|
||||
else{
|
||||
this.skipNextPrevious(this.previous);
|
||||
}
|
||||
}
|
||||
}, error => {
|
||||
});
|
||||
}
|
||||
// next save and previous save for text type questions
|
||||
saveNextPreviousText(details:any, type:number){
|
||||
let fetchAns =[];
|
||||
details.items.value.forEach((itemElement, itemIndex) => {
|
||||
let obj1 = {
|
||||
fk_pd_detail_id:details.pd_detail_id.value,
|
||||
fk_pd_id:itemElement.fk_pd_id,
|
||||
pd_detail_answer_id: itemElement.pd_detail_answer_id,
|
||||
pd_answer_id: itemElement.pd_answer_id,
|
||||
pd_answer: itemElement.pd_answer,
|
||||
pd_answer_weightage:itemElement.pd_answer_weightage,
|
||||
}
|
||||
fetchAns.push(obj1)
|
||||
});
|
||||
let pd_details:any={
|
||||
"pd_detail_id":details.pd_detail_id.value,
|
||||
"fk_pd_id":details.fk_pd_id.value,
|
||||
"fk_category_id":details.fk_category_id.value,
|
||||
"fk_question_id":details.fk_question_id.value,
|
||||
"pd_question":details.pd_question.value,
|
||||
"pd_question_weightage":details.pd_question_weightage.value,
|
||||
"question_remark":details.pd_answer_remark.value,
|
||||
"answers":fetchAns,
|
||||
"images":[]
|
||||
};
|
||||
this._qc.savePDQuestions(pd_details).subscribe(result => {
|
||||
if (result.status == 200) {
|
||||
if(type==1){
|
||||
this.skipNextPrevious(this.next);
|
||||
}
|
||||
else{
|
||||
this.skipNextPrevious(this.previous);
|
||||
}
|
||||
}
|
||||
}, error => {
|
||||
});
|
||||
}
|
||||
|
||||
// skip to previous and next questions
|
||||
|
||||
skipNextPrevious(type:number){
|
||||
// for skip to next
|
||||
if(type==1){
|
||||
if(this.categoryList.length > this.selectedCategoryIndex ){
|
||||
let nextCatList = this.categoryList[this.selectedCategoryIndex];
|
||||
this.selectedQuestionIndex=this.selectedQuestionIndex < nextCatList.questions.length-1 ? this.selectedQuestionIndex+1 : this.selectedQuestionIndex;
|
||||
let nextQuesList = nextCatList.questions[this.selectedQuestionIndex];
|
||||
this.selectedCategory=nextQuesList;
|
||||
this.selectedCategoryIndex=this.selectedCategoryIndex;
|
||||
this.selectedQuestionIndex=this.selectedQuestionIndex;
|
||||
let serachQuestions = {
|
||||
"question_id":nextQuesList.fk_question_id,
|
||||
"pd_id":this.startPD,
|
||||
"template_id":nextQuesList.fk_template_id,
|
||||
"category_id":nextQuesList.fk_template_question_category_id
|
||||
}
|
||||
this.getAnswers(serachQuestions);
|
||||
}
|
||||
}
|
||||
// for skip to previous
|
||||
else if(type==2){
|
||||
if(this.categoryList.length > this.selectedCategoryIndex ){
|
||||
let preCatList = this.categoryList[this.selectedCategoryIndex];
|
||||
this.selectedQuestionIndex=this.selectedQuestionIndex ==0 ? this.selectedQuestionIndex : this.selectedQuestionIndex-1;
|
||||
let preQuesList = preCatList.questions[this.selectedQuestionIndex];
|
||||
this.selectedCategory=preQuesList;
|
||||
this.selectedCategoryIndex=this.selectedCategoryIndex;
|
||||
this.selectedQuestionIndex=this.selectedQuestionIndex;
|
||||
let serachQuestions = {
|
||||
"question_id":preQuesList.fk_question_id,
|
||||
"pd_id":this.startPD,
|
||||
"template_id":preQuesList.fk_template_id,
|
||||
"category_id":preQuesList.fk_template_question_category_id
|
||||
}
|
||||
this.getAnswers(serachQuestions);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//change pd status
|
||||
changePDStatus(status:string){
|
||||
|
||||
let update_array = {
|
||||
"pd_id": this.startPD
|
||||
}
|
||||
this._qc.editPdMasterDetails(update_array, status).subscribe(result => {
|
||||
if (result.status == 200) {
|
||||
this.notifier.notify('success', 'QC Completed.');
|
||||
}
|
||||
else {
|
||||
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||
}
|
||||
}, error => {
|
||||
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||
});
|
||||
}
|
||||
|
||||
// load pd view component
|
||||
loadPdViewCompoent(){
|
||||
this.router.navigate([ '../../viewpd',this.startPD], { relativeTo: this.route });
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,140 @@
|
||||
<div class="mb-2" >
|
||||
<div fxLayout="row" fxLayoutAlign="start center" class="filter-header">
|
||||
<div *ngFor="let master of pdMasterData" class="ml-xs mr-xs" fxFlex="75">
|
||||
<h4>{{master.lender_full_name}} - {{master.lender_applicant_id}}</h4>
|
||||
{{master.pd_date_of_initiation}}
|
||||
</div>
|
||||
<div *ngFor="let master of pdMasterData" class="ml-xs mr-xs pt-1" fxFlex="25" style="text-align:right;" >
|
||||
<button *ngIf="master.pd_type_name" mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Allocate" matTooltipPosition="above" (click)="pdAllocationTo(master)"><mat-icon>verified_user</mat-icon></button>
|
||||
<button *ngIf="master.pd_type_name" mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Schedule" matTooltipPosition="above" (click)="scheduleDetails(master)"><mat-icon>schedule</mat-icon></button>
|
||||
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Discussion" matTooltipPosition="above" (click)="getPDStart(viewID)"><mat-icon>question_answer</mat-icon></button>
|
||||
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above" (click)="loadPdListCompoent()"><mat-icon>close</mat-icon></button>
|
||||
<br><span style="color:red;text-align:center">{{master.pd_allocated_to}} -{{master.pd_status_name}}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<mat-card-content>
|
||||
<div fxLayout="row wrap">
|
||||
|
||||
<div class="m-gap p-gap" fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50">
|
||||
<!--pd master -->
|
||||
<mat-card *ngFor="let master of pdMasterData" class="minheight">
|
||||
<div class="cardEdit">
|
||||
<!-- <button *ngIf="master.pd_type_name" mat-raised-button mat-button-sm mat-icon-button class="mr-1 mb-1 hover-icon" type="button" (click)="pdAllocationTo(master)"><mat-icon>directions_run</mat-icon></button>
|
||||
<button *ngIf="master.pd_type_name" mat-raised-button mat-button-sm mat-icon-button class="mr-1 mb-1 hover-icon" type="button" (click)="scheduleDetails(master)"><mat-icon>schedule</mat-icon></button>
|
||||
-->
|
||||
<button mat-raised-button mat-button-sm mat-icon-button class="mr-1 mb-1 hover-icon" type="button" (click)="editPdMaster(master)"><mat-icon>edit</mat-icon></button>
|
||||
|
||||
</div>
|
||||
<mat-card-header>
|
||||
<!-- <img mat-card-avatar src="assets/images/avatar.jpg">
|
||||
<mat-card-title>{{master.lender_full_name}} - {{master.lender_applicant_id}}
|
||||
</mat-card-title>-->
|
||||
<mat-card-subtitle *ngIf="master.city_name" class="hover-icon"><i class="fa-1x fa fa-map-marker"> </i> <span>{{master.city_name}} / {{master.state_name}}-{{master.pincode}}</span></mat-card-subtitle>
|
||||
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<p *ngIf="master.product_name">{{master.product_name}} / {{master.subproduct_name}}</p>
|
||||
<p *ngIf="master.pd_type_name"><span>{{master.pd_type_name}}</span> / <span *ngIf="master.loan_amount" class="hover-icon"><i class="fa-1x fa fa-rupee"> </i>{{master.loan_amount}}</span></p>
|
||||
<p><span>{{master.addressline1}},{{master.addressline2}} ,{{master.addressline3}}</span></p>
|
||||
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
||||
|
||||
</div>
|
||||
<div fxFlex.xs="100" class="m-gap p-gap" fxFlex.sm="100" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50">
|
||||
<!-- applicant card -->
|
||||
<mat-card class="minheight">
|
||||
<div class="cardEdit">
|
||||
<button mat-raised-button mat-button-sm mat-icon-button class="mr-1 mb-1 hover-icon" type="button" (click)="editPdApplicant(pdApplicantData)"><mat-icon>edit</mat-icon></button>
|
||||
</div>
|
||||
<mat-card-header>
|
||||
<mat-card-title>Applicants</mat-card-title>
|
||||
</mat-card-header>
|
||||
|
||||
<mat-card-content *ngIf="pdApplicantData.length>0; else noApplicant">
|
||||
<mat-list *ngFor="let applicant of pdApplicantData">
|
||||
<mat-list-item>
|
||||
<p><span *ngIf="applicant.applicant_name!=null" class="mb-2 text-center hover-icon">
|
||||
<i class="fa-1x fa fa-user-o"></i>
|
||||
{{applicant.applicant_name}} </span> <span *ngIf="applicant.mobile_no!=null" class="mb-2 text-center hover-icon">
|
||||
<i class="fa-1x fa fa-phone"></i>
|
||||
{{applicant.mobile_no}} </span> <br><span *ngIf="applicant.applicant_type=='1';else codetails" style="font-size:12px;">Main Applicant</span>
|
||||
<ng-template #codetails> <span>{{applicant.relation_name}}</span></ng-template>
|
||||
</p>
|
||||
|
||||
|
||||
</mat-list-item>
|
||||
|
||||
</mat-list>
|
||||
|
||||
</mat-card-content>
|
||||
|
||||
<ng-template #noApplicant><mat-card-content><p>No Applicant</p></mat-card-content></ng-template>
|
||||
|
||||
|
||||
</mat-card>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="m-gap p-gap">
|
||||
<!-- pd documents card -->
|
||||
<mat-card class="minheight">
|
||||
<!-- <div class="cardEdit">
|
||||
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon"><mat-icon>edit</mat-icon></button>
|
||||
</div> -->
|
||||
<mat-card-header>
|
||||
<mat-card-title>Documents</mat-card-title>
|
||||
<!-- <mat-card-subtitle><i class="fa-1x fa fa-map-marker"> </i> {{master.city_name}} / {{master.state_name}}-{{master.pincode}}</mat-card-subtitle> -->
|
||||
</mat-card-header>
|
||||
<mat-card-content *ngIf="pdDocumentsData.length>0; else nodocument">
|
||||
<mat-list *ngFor="let documents of pdDocumentsData">
|
||||
<mat-list-item>
|
||||
<p><span>
|
||||
{{documents.pd_document_title}} </span> <span class="mb-2 text-center hover-icon">
|
||||
<i class="fa-1x fa fa-file"></i>
|
||||
{{documents.pd_document_name}} </span>
|
||||
</p>
|
||||
</mat-list-item>
|
||||
|
||||
</mat-list>
|
||||
</mat-card-content>
|
||||
<ng-template #nodocument><mat-card-content><p>No Document</p></mat-card-content></ng-template>
|
||||
|
||||
</mat-card>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="m-gap p-gap" fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="100" fxFlex.lg="100" fxFlex.xl="100">
|
||||
<!--pd logs card -->
|
||||
<mat-expansion-panel *ngIf="masterPdLogsData.length>0; else nohistory">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title class="text-xs-left">
|
||||
<h6 class="mt-0"> PD History</h6>
|
||||
</mat-panel-title>
|
||||
|
||||
</mat-expansion-panel-header>
|
||||
<mat-list class="m-gap p-gap" *ngFor="let masterHistory of masterPdLogsData">
|
||||
<mat-list-item>
|
||||
<p>{{masterHistory}}</p>
|
||||
|
||||
</mat-list-item>
|
||||
|
||||
</mat-list>
|
||||
|
||||
</mat-expansion-panel>
|
||||
|
||||
<ng-template #nohistory>
|
||||
<mat-card>
|
||||
<mat-card-content><p>No History</p></mat-card-content>
|
||||
</mat-card>
|
||||
</ng-template>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</div>
|
||||
<!-- <notifier-container></notifier-container> -->
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
.cardEdit {
|
||||
display: inline;float:right;padding-top:3%;
|
||||
}
|
||||
.minheight {
|
||||
min-height: 100%;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { QcViewComponent } from './qc-view.component';
|
||||
|
||||
describe('QcViewComponent', () => {
|
||||
let component: QcViewComponent;
|
||||
let fixture: ComponentFixture<QcViewComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ QcViewComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(QcViewComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,151 @@
|
||||
import { Component, OnInit,ViewEncapsulation, EventEmitter, Input, Output, OnDestroy } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { MatDialog } from '@angular/material';
|
||||
import { NotifierService } from 'angular-notifier';
|
||||
import { QcService } from './../../qc-service/qc.service';
|
||||
import { QcListComponent } from './../qc-list.component';
|
||||
import { PdAllocationComponent } from './../../../personal-discussion/manage-pd/list-pd/pd-allocation/pd-allocation.component';
|
||||
import { SmartPdAllocationComponent } from './../../../personal-discussion/manage-pd/list-pd/smart-pd-allocation/smart-pd-allocation.component';
|
||||
import { SchedulePdComponent } from './../../../personal-discussion/manage-pd/list-pd/schedule-pd/schedule-pd.component';
|
||||
import { EditPdApplicantComponent } from './../../../personal-discussion/manage-pd/list-pd/edit-pd-applicant/edit-pd-applicant.component';
|
||||
import { EditPdMasterComponent } from './../../../personal-discussion/manage-pd/list-pd/edit-pd-master/edit-pd-master.component';
|
||||
|
||||
@Component({
|
||||
selector: 'app-qc-view',
|
||||
templateUrl: './qc-view.component.html',
|
||||
styleUrls: ['./qc-view.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class QcViewComponent implements OnInit, OnDestroy {
|
||||
public selectedMoment = new Date();
|
||||
private notifier:NotifierService;
|
||||
errorMessage: any;
|
||||
pdMasterData: any=[];
|
||||
pdApplicantData: any=[];
|
||||
pdDocumentsData: any=[];
|
||||
masterPdLogsData: any=[];
|
||||
applicantPDLogsData: any=[];
|
||||
viewID:string;
|
||||
viewParams:any;
|
||||
destroyType:number=1;
|
||||
public _EditPDtriggerForm:FormGroup;
|
||||
constructor(notifier:NotifierService,private dialog: MatDialog,private _fb: FormBuilder,
|
||||
private _qc: QcService,private route: ActivatedRoute,private router: Router, private QcListComponent: QcListComponent) {
|
||||
this.notifier=notifier
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.QcListComponent.showListView(false);
|
||||
this.route.params.subscribe(params => {
|
||||
this.viewID = params['pdid'];
|
||||
});
|
||||
|
||||
this.viewPdDetails(this.viewID);
|
||||
}
|
||||
viewPdDetails(editID:string){
|
||||
this._qc.editPdDetails(editID).subscribe(
|
||||
data => {
|
||||
if (data.status == 200) {
|
||||
this.pdMasterData=data.records.pd_master_details;
|
||||
this.pdApplicantData= data.records.applicants_details;
|
||||
this.pdDocumentsData=data.records.pd_documnets;
|
||||
this.masterPdLogsData=data.records.pd_logs.master;
|
||||
//this.applicantPDLogsData= data.records.pd_logs.master;
|
||||
}
|
||||
}, error => this.errorMessage = <any> error);
|
||||
}
|
||||
|
||||
loadPdListCompoent() {
|
||||
this.destroyType=2;
|
||||
this.router.navigate([ '../../' ], { relativeTo: this.route });
|
||||
this.QcListComponent.pdListLoad(true);
|
||||
}
|
||||
|
||||
editPdMaster(masterData:any){
|
||||
let record = {
|
||||
"records":masterData,
|
||||
"applicantLength": this.pdApplicantData.length
|
||||
}
|
||||
const dialogPDMaster = this.dialog.open(EditPdMasterComponent, {
|
||||
data: record,
|
||||
disableClose: true
|
||||
});
|
||||
dialogPDMaster.afterClosed()
|
||||
.subscribe(dataresult => {
|
||||
// this.notifier.notify('success', 'Successfully allocated.!');
|
||||
this.viewPdDetails(this.viewID)
|
||||
});
|
||||
}
|
||||
editPdApplicant(applicantData:any){
|
||||
let setPdDetails = {
|
||||
"pdID":this.viewID,
|
||||
"records":applicantData
|
||||
}
|
||||
const dialogApplicant = this.dialog.open(EditPdApplicantComponent, {
|
||||
data: setPdDetails,
|
||||
disableClose: true
|
||||
});
|
||||
dialogApplicant.afterClosed()
|
||||
.subscribe(dataresult => {
|
||||
// this.notifier.notify('success', 'Successfully allocated.!');
|
||||
this.viewPdDetails(this.viewID)
|
||||
});
|
||||
}
|
||||
// pd allocation to
|
||||
pdAllocationTo(pdData:any) {
|
||||
if(pdData.fk_pd_type != 2){
|
||||
const dialogRef = this.dialog.open(PdAllocationComponent, {
|
||||
data: pdData,
|
||||
disableClose: true
|
||||
});
|
||||
dialogRef.afterClosed()
|
||||
.subscribe(dataresult => {
|
||||
// this.notifier.notify('success', 'Successfully allocated.!');
|
||||
this.viewPdDetails(this.viewID)
|
||||
});
|
||||
}
|
||||
else if(pdData.fk_pd_type == 2){
|
||||
const dialogRef = this.dialog.open(SmartPdAllocationComponent, {
|
||||
data: pdData,
|
||||
disableClose: true
|
||||
});
|
||||
dialogRef.afterClosed()
|
||||
.subscribe(dataresult => {
|
||||
// this.notifier.notify('success', 'Successfully allocated.!');
|
||||
|
||||
this.viewPdDetails(this.viewID)
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// pd schedule details
|
||||
scheduleDetails(pdData:any){
|
||||
|
||||
const dialogSchedule = this.dialog.open(SchedulePdComponent, {
|
||||
data: pdData,
|
||||
disableClose: true
|
||||
});
|
||||
dialogSchedule.afterClosed()
|
||||
.subscribe(dataresult => {
|
||||
// this.notifier.notify('success', 'Successfully allocated.!');
|
||||
this.viewPdDetails(this.viewID)
|
||||
});
|
||||
}
|
||||
|
||||
// start pd
|
||||
getPDStart(pdID:any){
|
||||
this.destroyType=3;
|
||||
this.router.navigate([ '../../startpd',pdID], { relativeTo: this.route });
|
||||
}
|
||||
ngOnDestroy(): void {
|
||||
if(this.destroyType==1){
|
||||
this.QcListComponent.pdListLoad(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
12
ng6-seed/src/app/quality-check/qc-service/qc.service.spec.ts
Normal file
12
ng6-seed/src/app/quality-check/qc-service/qc.service.spec.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { QcService } from './qc.service';
|
||||
|
||||
describe('QcService', () => {
|
||||
beforeEach(() => TestBed.configureTestingModule({}));
|
||||
|
||||
it('should be created', () => {
|
||||
const service: QcService = TestBed.get(QcService);
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
||||
99
ng6-seed/src/app/quality-check/qc-service/qc.service.ts
Normal file
99
ng6-seed/src/app/quality-check/qc-service/qc.service.ts
Normal file
@ -0,0 +1,99 @@
|
||||
/** Common Import Section */
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs';//for Datatables
|
||||
import { HttpClient,HttpParams } from '@angular/common/http';
|
||||
import { catchError, map } from 'rxjs/operators';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
/** Imported Service Files Are., */
|
||||
import { AwsService } from '../../AwsService/aws.service';
|
||||
|
||||
const currentdate = new Date().toJSON().slice(0,19).replace('T',' ');
|
||||
/** Master Interface */
|
||||
export interface Master {
|
||||
master_id:number;
|
||||
master_name:string;
|
||||
constant_name:string;
|
||||
}
|
||||
@Injectable(
|
||||
{
|
||||
providedIn: 'root'
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
export class QcService {
|
||||
|
||||
//private apiUrl = "http://ssa.sineedge.com/sparqapi/api/";
|
||||
//private apiUrl = "http://192.168.0.5:9999/AWSEC2/sparqapi/api/";
|
||||
private apiUrl = "http://ssa.sineedge.com/sparqapi/api/";
|
||||
MAP_API_KEY: string;
|
||||
MAP_API_URL: string;
|
||||
constructor(private _http: HttpClient,
|
||||
private _aws:AwsService) {
|
||||
this.MAP_API_KEY = 'AIzaSyBtdO5k6CRntAMJCF-H5uZjTCoSGX95cdk'
|
||||
this.MAP_API_URL = `https://maps.googleapis.com/maps/api/geocode/json?key=${this.MAP_API_KEY}&address=`;
|
||||
}
|
||||
|
||||
// get edit row pd details
|
||||
editPdDetails(editId:string):Observable<any>{
|
||||
let httpParams = new HttpParams().set('pdid', editId);
|
||||
return this._http.post<any>(this.apiUrl+"getFullPDDetails",httpParams)
|
||||
.pipe(
|
||||
catchError(this.handleError('operation', []))
|
||||
)
|
||||
}
|
||||
// update pd master details
|
||||
editPdMasterDetails(editData:any,status:string):Observable<any>{
|
||||
editData.pd_status = status;
|
||||
editData.fk_updatedby = this._aws.getlocale();
|
||||
editData.updatedon = currentdate;
|
||||
return this._http.post<any>(this.apiUrl+"updatePDMaster",{records:editData})
|
||||
|
||||
.pipe(
|
||||
catchError(this.handleError('operation', []))
|
||||
)
|
||||
}
|
||||
//load pd template details
|
||||
loadPDTemplates(pdId: string):Observable<any>{
|
||||
const options = pdId ?
|
||||
{ params: new HttpParams().set('pd_id', pdId) } : {};
|
||||
return this._http.get<any[]>(this.apiUrl + "loadFullTemplate",options)
|
||||
.pipe(
|
||||
catchError(this.handleError('operation', []))
|
||||
)
|
||||
}
|
||||
|
||||
// load PD question answers
|
||||
getAnswersForPD(list: any):Observable<any>{
|
||||
let httpParams = new HttpParams();
|
||||
httpParams = httpParams.append("category_id", list.category_id);
|
||||
httpParams = httpParams.append("pd_id", list.pd_id);
|
||||
httpParams = httpParams.append("question_id", list.question_id);
|
||||
httpParams = httpParams.append("template_id", list.template_id);
|
||||
|
||||
return this._http.post<any[]>(this.apiUrl + "getAnswersForPD",httpParams)
|
||||
.pipe(
|
||||
catchError(this.handleError('operation', []))
|
||||
)
|
||||
}
|
||||
|
||||
// save pd answers
|
||||
savePDQuestions(saveData: any): Observable<any> {
|
||||
saveData.createdby = this._aws.getlocale();
|
||||
saveData.fk_createdon = currentdate;
|
||||
// saveData[0].fk_updatedby = this._aws.getlocale();
|
||||
// saveData[0].updatedon = currentdate;
|
||||
|
||||
return this._http.post<any>(this.apiUrl+"savePDQuestions",{"records":saveData})
|
||||
.pipe(
|
||||
catchError(this.handleError('operation', []))
|
||||
)
|
||||
}
|
||||
|
||||
private handleError<T>(operation = 'operation', result?: T) {
|
||||
return (error: any): Observable<T> => {
|
||||
return of(result as T);
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { QualityCheckComponent } from './quality-check.component';
|
||||
import { QcListComponent } from './qc-list/qc-list.component';
|
||||
import { QcViewComponent } from './qc-list/qc-view/qc-view.component';
|
||||
import { QcStartComponent } from './qc-list/qc-start/qc-start.component';
|
||||
|
||||
const routes: Routes =[
|
||||
{
|
||||
path: '',
|
||||
component: QualityCheckComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
pathMatch: 'full',
|
||||
redirectTo: 'qclist'
|
||||
},{
|
||||
path: 'qclist',
|
||||
component: QcListComponent,
|
||||
children: [
|
||||
{
|
||||
path: 'viewpd/:pdid',
|
||||
component: QcViewComponent,
|
||||
},
|
||||
{
|
||||
path: 'startpd/:pdid',
|
||||
component: QcStartComponent,
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class QualityCheckRoutingModule { }
|
||||
@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
@ -0,0 +1,25 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { QualityCheckComponent } from './quality-check.component';
|
||||
|
||||
describe('QualityCheckComponent', () => {
|
||||
let component: QualityCheckComponent;
|
||||
let fixture: ComponentFixture<QualityCheckComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ QualityCheckComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(QualityCheckComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
15
ng6-seed/src/app/quality-check/quality-check.component.ts
Normal file
15
ng6-seed/src/app/quality-check/quality-check.component.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-quality-check',
|
||||
templateUrl: './quality-check.component.html',
|
||||
styleUrls: ['./quality-check.component.scss']
|
||||
})
|
||||
export class QualityCheckComponent implements OnInit {
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
}
|
||||
13
ng6-seed/src/app/quality-check/quality-check.module.spec.ts
Normal file
13
ng6-seed/src/app/quality-check/quality-check.module.spec.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { QualityCheckModule } from './quality-check.module';
|
||||
|
||||
describe('QualityCheckModule', () => {
|
||||
let qualityCheckModule: QualityCheckModule;
|
||||
|
||||
beforeEach(() => {
|
||||
qualityCheckModule = new QualityCheckModule();
|
||||
});
|
||||
|
||||
it('should create an instance', () => {
|
||||
expect(qualityCheckModule).toBeTruthy();
|
||||
});
|
||||
});
|
||||
107
ng6-seed/src/app/quality-check/quality-check.module.ts
Normal file
107
ng6-seed/src/app/quality-check/quality-check.module.ts
Normal file
@ -0,0 +1,107 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';
|
||||
import { NotifierModule, NotifierOptions } from 'angular-notifier';
|
||||
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||
import {
|
||||
MatCardModule,
|
||||
MatIconModule,
|
||||
MatInputModule,
|
||||
MatRadioModule,
|
||||
MatButtonModule,MatTableModule,MatPaginatorModule,
|
||||
MatProgressBarModule,MatDialogModule, MatSortModule,
|
||||
MatToolbarModule,MatSelectModule,
|
||||
MatListModule, MatMenuModule,
|
||||
MatCheckboxModule, MatStepperModule, MatTabsModule,
|
||||
MatExpansionModule, MatSidenavModule, MatButtonToggleModule, MatBadgeModule ,MatTooltipModule
|
||||
} from '@angular/material';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { AgmCoreModule } from '@agm/core';
|
||||
// import completed pd components from personal discussion module
|
||||
import { ManagePdModule } from './../personal-discussion/manage-pd/manage-pd.module';
|
||||
//import qu routing ,and its components
|
||||
import { QualityCheckRoutingModule } from './quality-check-routing.module';
|
||||
import { QualityCheckComponent } from './quality-check.component';
|
||||
import { QcListComponent } from './qc-list/qc-list.component';
|
||||
import { QcViewComponent } from './qc-list/qc-view/qc-view.component';
|
||||
import { PdAllocationComponent } from './../personal-discussion/manage-pd/list-pd/pd-allocation/pd-allocation.component';
|
||||
import { SmartPdAllocationComponent } from './../personal-discussion/manage-pd/list-pd/smart-pd-allocation/smart-pd-allocation.component';
|
||||
import { SchedulePdComponent } from './../personal-discussion/manage-pd/list-pd/schedule-pd/schedule-pd.component';
|
||||
import { EditPdApplicantComponent } from './../personal-discussion/manage-pd/list-pd/edit-pd-applicant/edit-pd-applicant.component';
|
||||
import { EditPdMasterComponent } from './../personal-discussion/manage-pd/list-pd/edit-pd-master/edit-pd-master.component';
|
||||
import { QcService } from './qc-service/qc.service';
|
||||
import { QcStartComponent } from './qc-list/qc-start/qc-start.component';
|
||||
|
||||
/**
|
||||
* Custom angular notifier options
|
||||
*/
|
||||
const customNotifierOptions: NotifierOptions = {
|
||||
position: {
|
||||
horizontal: {
|
||||
position: 'right',
|
||||
distance: 12
|
||||
},
|
||||
vertical: {
|
||||
position: 'top',
|
||||
distance: 32,
|
||||
gap: 10
|
||||
}
|
||||
},
|
||||
theme: 'material',
|
||||
behaviour: {
|
||||
autoHide: 5000,
|
||||
onClick: 'hide',
|
||||
onMouseover: 'pauseAutoHide',
|
||||
showDismissButton: true,
|
||||
stacking: 4
|
||||
},
|
||||
animations: {
|
||||
enabled: true,
|
||||
show: {
|
||||
preset: 'slide',
|
||||
speed: 300,
|
||||
easing: 'ease'
|
||||
},
|
||||
hide: {
|
||||
preset: 'fade',
|
||||
speed: 300,
|
||||
easing: 'ease',
|
||||
offset: 50
|
||||
},
|
||||
shift: {
|
||||
speed: 300,
|
||||
easing: 'ease'
|
||||
},
|
||||
overlap: 150
|
||||
}
|
||||
};
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
QualityCheckRoutingModule,
|
||||
OwlDateTimeModule, OwlNativeDateTimeModule,
|
||||
NotifierModule.withConfig(customNotifierOptions),
|
||||
FlexLayoutModule,
|
||||
MatCardModule,
|
||||
MatIconModule,
|
||||
MatInputModule,
|
||||
MatRadioModule,
|
||||
MatButtonModule,MatTableModule,MatPaginatorModule,
|
||||
MatProgressBarModule,MatDialogModule, MatSortModule,
|
||||
MatToolbarModule,MatSelectModule,MatListModule, MatMenuModule,
|
||||
MatExpansionModule,
|
||||
MatStepperModule,
|
||||
MatTabsModule,
|
||||
MatCheckboxModule,MatSidenavModule, MatButtonToggleModule, MatBadgeModule,MatTooltipModule,
|
||||
FormsModule,
|
||||
ReactiveFormsModule,
|
||||
AgmCoreModule.forRoot({apiKey: 'AIzaSyBtdO5k6CRntAMJCF-H5uZjTCoSGX95cdk'}),
|
||||
ManagePdModule,
|
||||
],
|
||||
declarations: [QualityCheckComponent,QcListComponent, QcViewComponent, QcStartComponent],
|
||||
entryComponents: [PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent],
|
||||
providers : [QcService]
|
||||
})
|
||||
export class QualityCheckModule { }
|
||||
@ -80,6 +80,12 @@ const MENUITEMS : Menu[] = [
|
||||
// children:[
|
||||
// {state:'pdtriggerlist',name:'Pd Trigger Listing'}
|
||||
// ]
|
||||
},
|
||||
{
|
||||
state:'quality_check_discussion',
|
||||
name:'Quality Check',
|
||||
type:'link',
|
||||
icon:'forum',
|
||||
}
|
||||
|
||||
];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user