Open farzinmonsef opened 4 years ago
.angulardoc.json .editorconfig .gitignore \angular.json \browserslist \Dir1.txt \filenames.vbs \Jenkinsfile \karma.conf.js \package-lock.json \package-lock.json.2204078569 \package.json \README.md \ssh.exe.stackdump \tsconfig.app.json \tsconfig.json \tsconfig.spec.json \tslint.json
\dist\LegalWeb\web.config
\e2e\protractor.conf.js \e2e\tsconfig.json
\e2e\src\app.e2e-spec.ts \e2e\src\app.po.ts
\src\index.html \src\main.ts \src\polyfills.ts \src\proxy.config.json \src\styles.css \src\test.ts \src\web.config
\src\app\app-routing.ts \src\app\app.component.css \src\app\app.component.html \src\app\app.component.spec.ts \src\app\app.component.ts \src\app\app.module.ts
\src\app\components\master\footer\footer.component.css \src\app\components\master\footer\footer.component.html \src\app\components\master\footer\footer.component.spec.ts \src\app\components\master\footer\footer.component.ts
\src\app\components\master\header\header.component.css \src\app\components\master\header\header.component.html \src\app\components\master\header\header.component.spec.ts \src\app\components\master\header\header.component.ts
\src\app\components\master\home\home.component.css \src\app\components\master\home\home.component.html \src\app\components\master\home\home.component.spec.ts \src\app\components\master\home\home.component.ts
\src\app\components\master\navbar\navbar.component.spec.ts \src\app\components\master\navbar\navbar.component.ts
\src\app\components\shared\app.config.service.ts \src\app\components\shared\requestObject.ts \src\app\components\shared\responseObject.ts
\src\app\components\survey\survey.module.ts
\src\app\components\survey\details\details.component.css \src\app\components\survey\details\details.component.html \src\app\components\survey\details\details.component.spec.ts \src\app\components\survey\details\details.component.ts \src\app\components\survey\details\details.service.spec.ts \src\app\components\survey\details\details.service.ts
\src\app\components\survey\details\model\AttributeNameEnum.ts \src\app\components\survey\details\model\detailsmodel.ts \src\app\components\survey\details\model\recognitions.ts \src\app\components\survey\details\model\StatusEnum.ts \src\app\components\survey\details\model\surveyDetail.ts
\src\app\components\survey\email\email.component.css \src\app\components\survey\email\email.component.html \src\app\components\survey\email\email.component.spec.ts \src\app\components\survey\email\email.component.ts \src\app\components\survey\email\email.service.ts
\src\app\components\survey\email\model\email.ts \src\app\components\survey\email\model\respondents.ts
\src\app\components\survey\list\surveylist.component.css \src\app\components\survey\list\surveylist.component.html \src\app\components\survey\list\surveylist.component.spec.ts \src\app\components\survey\list\surveylist.component.ts \src\app\components\survey\list\surveylist.service.ts
\src\app\components\survey\list\models\SurveyInformation.ts
\src\app\components\survey\preview\preview.component.css \src\app\components\survey\preview\preview.component.html \src\app\components\survey\preview\preview.component.spec.ts \src\app\components\survey\preview\preview.component.ts
\src\app\components\survey\questions\questions.component.css \src\app\components\survey\questions\questions.component.html \src\app\components\survey\questions\questions.component.spec.ts \src\app\components\survey\questions\questions.component.ts \src\app\components\survey\questions\questions.service.ts
\src\app\components\survey\questions\model\masterquestionapi.ts \src\app\components\survey\questions\model\questionapi.ts \src\app\components\survey\questions\model\questions.ts
\src\app\components\survey\respondent-tracking\respondent-tracking.component.css \src\app\components\survey\respondent-tracking\respondent-tracking.component.html \src\app\components\survey\respondent-tracking\respondent-tracking.component.spec.ts \src\app\components\survey\respondent-tracking\respondent-tracking.component.ts \src\app\components\survey\respondent-tracking\respondent-tracking.service.spec.ts \src\app\components\survey\respondent-tracking\respondent-tracking.service.ts
\src\app\components\survey\respondent-tracking\enum\SurveyActions.ts
\src\app\components\survey\respondent-tracking\model\recipient-reminder.ts \src\app\components\survey\respondent-tracking\model\SurveyRecipientInformation.ts \src\app\components\survey\respondent-tracking\model\SurveyRecipientUpdateStatus.ts
\src\app\components\survey\stepper\stepper.component.css \src\app\components\survey\stepper\stepper.component.html \src\app\components\survey\stepper\stepper.component.spec.ts \src\app\components\survey\stepper\stepper.component.ts \src\app\components\survey\stepper\stepper.service.ts
\src\app\components\surveyrespondent\surveyrespondent.component.css \src\app\components\surveyrespondent\surveyrespondent.component.html \src\app\components\surveyrespondent\surveyrespondent.component.spec.ts \src\app\components\surveyrespondent\surveyrespondent.component.ts \src\app\components\surveyrespondent\surveyrespondent.service.spec.ts \src\app\components\surveyrespondent\surveyrespondent.service.ts
\src\app\components\surveyrespondent\models\attribute-name.spec.ts \src\app\components\surveyrespondent\models\attribute-name.ts \src\app\components\surveyrespondent\models\question.spec.ts \src\app\components\surveyrespondent\models\question.ts \src\app\components\surveyrespondent\models\survey-attribute.ts \src\app\components\surveyrespondent\models\survey-master-question-answers.ts \src\app\components\surveyrespondent\models\survey-question-answer.spec.ts \src\app\components\surveyrespondent\models\survey-question-answer.ts \src\app\components\surveyrespondent\models\survey-question.spec.ts \src\app\components\surveyrespondent\models\survey-question.ts \src\app\components\surveyrespondent\models\survey-recipient.spec.ts \src\app\components\surveyrespondent\models\survey-recipient.ts \src\app\components\surveyrespondent\models\survey-recognition-question-answer.spec.ts \src\app\components\surveyrespondent\models\survey-recognition-question-answer.ts \src\app\components\surveyrespondent\models\survey-recognition.ts \src\app\components\surveyrespondent\models\survey.ts
\src\app\interceptors\credential.interceptor.ts \src\app\interceptors\httpError.interceptor.ts \src\app\interceptors\HttpLogging.Interceptor.ts
\src\assets.gitkeep
\src\assets\config\config.json
\src\assets\fonts\Connections-Bold.css \src\assets\fonts\Connections-Bold.eot \src\assets\fonts\Connections-Bold.html \src\assets\fonts\Connections-Bold.svg \src\assets\fonts\Connections-Bold.ttf \src\assets\fonts\Connections-Bold.woff \src\assets\fonts\Connections-BoldItalic.css \src\assets\fonts\Connections-BoldItalic.eot \src\assets\fonts\Connections-BoldItalic.html \src\assets\fonts\Connections-BoldItalic.svg \src\assets\fonts\Connections-BoldItalic.ttf \src\assets\fonts\Connections-BoldItalic.woff \src\assets\fonts\Connections-Italic.css \src\assets\fonts\Connections-Italic.eot \src\assets\fonts\Connections-Italic.html \src\assets\fonts\Connections-Italic.svg \src\assets\fonts\Connections-Italic.ttf \src\assets\fonts\Connections-Italic.woff \src\assets\fonts\Connections.css \src\assets\fonts\Connections.eot \src\assets\fonts\Connections.html \src\assets\fonts\Connections.svg \src\assets\fonts\Connections.ttf \src\assets\fonts\Connections.woff
\src\assets\images\backto_2x.png \src\assets\images\bigblue.png \src\assets\images\bofa-favicon.ico \src\assets\images\BofA-logo.svg \src\assets\images\export.png \src\assets\images\hallowblue.png \src\assets\images\icon_alert.svg \src\assets\images\icon_checkmark.svg \src\assets\images\icon_document.svg \src\assets\images\icon_share.svg \src\assets\images\icon_sign_edit.svg \src\assets\images\littleblue.png \src\assets\images\solidgrey.png
\src\assets\styles\bootstrap.min.css \src\assets\styles\kendo.custom.css \src\assets\styles\styles.css
\src\environments\environment.prod.ts \src\environments\environment.ts
import { Component, OnInit } from '@angular/core'; import { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms'; import { EmailModel } from '../email/model/email'; import { RespondentsModel } from '../email/model/respondents'; import { EmailService } from '../email/email.service'; import { FileInfo, UploadEvent, RemoveEvent, FileRestrictions, SuccessEvent, SelectEvent } from '@progress/kendo-angular-upload'; import { AppConfig } from '../../shared/app.config.service'; import { DetailsService } from '../details/details.service'; import { ResponseObject } from '../../shared/responseObject'; import { GridDataResult, DataStateChangeEvent } from '@progress/kendo-angular-grid'; import { SortDescriptor, orderBy, process, State } from '@progress/kendo-data-query';
@Component({ selector: 'app-email', templateUrl: './email.component.html', styleUrls: ['./email.component.css'] })
export class EmailComponent implements OnInit {
surveyId: any;
createdEmailId: number;
attachment: FileInfo;
private webApiServerUrl: string;
myFiles: Array
respondentFiles: FileInfo; respondentslist: RespondentsModel[]; respondenthasfile: boolean = false; attachmenthasfile: boolean = false; respondentSaveUrl: string;
selectedTab: boolean = true; currentSurvey: number = 2; public respondentGridData: GridDataResult; emailDetail: EmailModel;
constructor(private formBuilder: FormBuilder, private detailsService: DetailsService, private emailService: EmailService, private appConfig: AppConfig) { this.webApiServerUrl = appConfig.webApiServerUrl; }
public sort: SortDescriptor[] = [{ field: 'Name', dir: 'asc' }];
public state: State = { skip: 0, filter: { logic: 'and', filters: [] } };
emailForm = new FormGroup({ Subject: new FormControl(''), Body: new FormControl(''), ContactInfo: new FormControl(''), myUpload: new FormControl('') });
public attachmentUploadRestrictions: FileRestrictions = { maxFileSize: 5242880, allowedExtensions: [".pdf"] };
public respondentRestrictions: FileRestrictions = { allowedExtensions: [".xls", ".xlsx"] };
public attachmentSelectEventHandler(e: SelectEvent): void { }
attachmentSuccessEventHandler(e: SuccessEvent) { if (e.operation === 'upload') { e.files.forEach((file) => this.myFiles.push(file)); } else if (e.operation === 'remove') { } this.attachmenthasfile = true; }
attachmentUploadEventHandler(e: UploadEvent) { e.data = { GuidValue: e.files[0].uid, SurveyId: this.surveyId }; }
attachmentRemoveEventHandler(e: RemoveEvent) { e.data = { GuidValue: e.files[0].uid, SurveyId: this.surveyId }; this.myFiles.pop(); }
respondentsuccessEventHandler(e: SuccessEvent) { if (e.operation == 'upload') { this.respondentslist = e.response.body.baseResponseList; this.respondentGridData = e.response.body.baseResponseList; this.respondenthasfile = true; } if (e.operation == 'remove') { } }
respondentuploadEventHandler(e: UploadEvent) { e.data = { GuidValue: e.files[0].uid, SurveyId: this.surveyId } }
backtodetails() { if (this.selectedTab == false) { this.selectedTab = true; } }
ngOnInit() { this.createdEmailId = 0; this.detailsService.currentData.subscribe(data => this.surveyId = data); this.fileUploadCount = 0; this.uploadSaveUrl = this.webApiServerUrl + 'SurveyAttachment/SaveTemplate'; this.uploadRemoveUrl = this.webApiServerUrl + 'SurveyAttachment/RemoveTemplate'; this.respondentSaveUrl = this.webApiServerUrl + 'SurveyRecipients/' + this.surveyId + '/Post';
this.emailForm = this.formBuilder.group({
Subject: ['', Validators.maxLength(255)],
Body: ['', Validators.maxLength(4000)],
ContactInfo: ['', Validators.maxLength(1000)]
});
if (this.surveyId > 0) {
this.emailService.getEmailDetail(this.surveyId).subscribe(emailModel => {
let lstEmail = emailModel.baseResponseList;
this.createdEmailId = lstEmail[0].emailId;
this.loadEmail(lstEmail);
});
this.emailService.getRespondents(this.surveyId).subscribe(respondents => {
this.respondentslist = respondents.baseResponseList;
this.loadRespondents();
});
this.emailService.getAttachments(this.surveyId).subscribe(attachments => {
for (let dbFile of attachments.baseResponseList) {
this.myFiles.push({ name: dbFile.fileName });
this.attachmenthasfile = true;
}
});
}
}
private loadEmail(lstEmail: EmailModel[]): void { this.emailForm = this.formBuilder.group({ Subject: lstEmail[0].subject, Body: lstEmail[0].body, ContactInfo: lstEmail[0].contactInfo, }); }
public dataStateChange(state: DataStateChangeEvent): void { this.state = state; this.respondentGridData = process(this.respondentslist, this.state); }
public sortChange(sort: SortDescriptor[]): void { this.sort = sort; this.loadRespondents(); }
private loadRespondents(): void { this.respondentGridData = process(this.respondentslist, this.state); }
get form() { return this.emailForm.controls; }
onSubmit() {
this.submitted = true;
if (this.emailForm.invalid) {
return false;
}
let email = new EmailModel(this.emailForm.value);
email.SurveyId = this.surveyId;
if (this.createdEmailId > 0) {
email.emailId = this.createdEmailId;
}
this.emailService.SaveEmail(email).subscribe(
(newSurvey: ResponseObject
//let result = this.emailService.SaveEmail(email).subscribe();
} }
import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { AppConfig } from '../../shared/app.config.service'; import { Observable, of } from 'rxjs'; import { EmailModel } from './model/email'; import { ResponseObject } from '../../shared/responseObject'; import { RequestObject } from '../../shared/requestObject'; import { RespondentsModel } from './model/respondents'; import { tap, catchError } from 'rxjs/operators'; import { FileInfo } from '@progress/kendo-angular-upload';
@Injectable({ providedIn: 'root' })
export class EmailService{ private webApiServerUrl: string;
constructor(private http: HttpClient, private appConfig: AppConfig) {
this.webApiServerUrl = appConfig.webApiServerUrl;
}
public SaveEmail(email: EmailModel): Observable<ResponseObject<EmailModel>> {
let requestObject = this.createRequestObjectFromEmail(email);
let apiEndpoint = `${this.webApiServerUrl}SurveyEmail`;
return this.http.post<ResponseObject<EmailModel>>(apiEndpoint, requestObject);
}
private createRequestObjectFromEmail(email: EmailModel): RequestObject<EmailModel[]> {
let emailArray = new Array<EmailModel>();
emailArray.push(email);
let request : RequestObject<EmailModel[]> =
{
baseItem: emailArray
};
return request;
}
getRespondents(surveyId: number): Observable<ResponseObject<RespondentsModel>> {
const cmd = 'SurveyRecipient/' + surveyId;
const result = this.http.get<ResponseObject<RespondentsModel>>(this.webApiServerUrl + cmd)
.pipe(
tap(
response => console.log('respondents retrieved')),
catchError(this.handleError<ResponseObject<RespondentsModel>>('getRespondents'))
);
return result;
}
getAttachments(surveyId: number): Observable<ResponseObject
getEmailDetail(surveyId: number): Observable<ResponseObject
private handleError
export class EmailModel{ Subject: string = ''; Body: string = ''; ContactInfo: string = ''; SurveyId: number; emailId: number;
subject: string; body: string; contactInfo: string;
constructor(init?: Partial
export class RespondentsModel{
personNumber: number;
firstName: string = '';
lastNane: string = '';
email: string = '';
awarenessDate: string = '';
statusCode: string = '';
constructor(init?: Partial
.input-wide { width: 500px; }
.form-input-group { padding-bottom: 5px; }
.backtodetailsbutton{ float: right; padding: 10px; margin: 5px; }
.k-grid-header th.k-header{ background-color: #012169 !important; color: #ffffff !important; }
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { tap } from 'rxjs/operators';
@Injectable({ providedIn: 'root' }) export class AppConfig { private _webApiServerUrl: string; private _environment: string;
constructor(private http: HttpClient) { }
public get webApiServerUrl(): string { return this._webApiServerUrl; }
public get environment(): string { return this._environment; }
public loadEnviroment() { switch (this._environment) { case ('LOCAL'): this._webApiServerUrl = "http://localhost:49584/api/"; break; case ('DEV'): this._webApiServerUrl = "http://ah-1074742-001.sdi.corp.bankofamerica.com:8003/api/";
break;
case ('UAT'):
this._webApiServerUrl = "tbd";
break;
case ('CIT'):
this._webApiServerUrl = "tbd";
break;
case ('PROD'):
this._webApiServerUrl = "tbd";
break;
}
}
public loadFromFile(filePath: string): Promise
return this.http.get<any>(filePath).pipe(tap(data => {
that._environment = data.env.name;
this.loadEnviroment();
})).toPromise();
}
}
export interface RequestObject
export interface ResponseObject
All files