@csmart/ngc-smart-victim 1.18.6 → 1.18.8
Sign up to get free protection for your applications and to get access to all the features.
- package/karma.conf.js +32 -0
- package/ng-package.json +7 -0
- package/package.json +6 -22
- package/src/lib/caseNote/caseNote.component.css +20 -0
- package/src/lib/caseNote/caseNote.component.html +188 -0
- package/src/lib/caseNote/caseNote.component.ts +265 -0
- package/src/lib/common-dialog/common-dialog.component.css +10 -0
- package/src/lib/common-dialog/common-dialog.component.html +23 -0
- package/src/lib/common-dialog/common-dialog.component.spec.ts +25 -0
- package/src/lib/common-dialog/common-dialog.component.ts +21 -0
- package/src/lib/common-dialog/common-dialog.module.ts +22 -0
- package/src/lib/common-dialog/common-dialog.service.ts +35 -0
- package/src/lib/contact/contact.component.css +20 -0
- package/src/lib/contact/contact.component.html +124 -0
- package/src/lib/contact/contact.component.ts +176 -0
- package/src/lib/email-notification.service.ts +42 -0
- package/src/lib/email.services.ts +51 -0
- package/src/lib/http.service.ts +34 -0
- package/src/lib/intake.service.ts +82 -0
- package/src/lib/loader.service.ts +11 -0
- package/src/lib/safetyPlan/serviceProvider.component.ts +94 -0
- package/src/lib/safetyPlan/victimSafetyPlan.component.css +27 -0
- package/src/lib/safetyPlan/victimSafetyPlan.component.html +85 -0
- package/src/lib/safetyPlan/victimSafetyPlan.component.ts +178 -0
- package/src/lib/safetyPlan/victimSafetyPlanDetail.component.html +234 -0
- package/src/lib/safetyPlan/victimSafetyPlanDetail.component.ts +492 -0
- package/src/lib/shared/app.shared.module.ts +111 -0
- package/src/lib/shared/validators/date.validator.ts +73 -0
- package/src/lib/shared/validators/index.ts +1 -0
- package/src/lib/smart-victim-delete-confirm.component.ts +35 -0
- package/src/lib/smart-victim-detail/smart-victim-detail.component.css +43 -0
- package/src/lib/smart-victim-detail/smart-victim-detail.component.html +869 -0
- package/src/lib/smart-victim-detail/smart-victim-detail.component.spec.ts +25 -0
- package/src/lib/smart-victim-detail/smart-victim-detail.component.ts +1384 -0
- package/src/lib/smart-victim.component.css +192 -0
- package/src/lib/smart-victim.component.html +138 -0
- package/src/lib/smart-victim.component.spec.ts +25 -0
- package/src/lib/smart-victim.component.ts +329 -0
- package/src/lib/smart-victim.model.ts +301 -0
- package/src/lib/smart-victim.module.ts +110 -0
- package/src/lib/smart-victim.service.spec.ts +12 -0
- package/src/lib/smart-victim.service.ts +557 -0
- package/src/lib/victim-routing.module.ts +35 -0
- package/{lib/victimSearch/VictimSearchFilter.d.ts → src/lib/victimSearch/VictimSearchFilter.ts} +9 -7
- package/src/lib/victimSearch/victimSearchForm.component.html +35 -0
- package/src/lib/victimSearch/victimSearchForm.component.ts +41 -0
- package/{public-api.d.ts → src/public-api.ts} +12 -7
- package/src/test.ts +22 -0
- package/tsconfig.lib.json +37 -0
- package/tsconfig.spec.json +17 -0
- package/tslint.json +17 -0
- package/esm2022/csmart-ngc-smart-victim.mjs +0 -5
- package/esm2022/lib/caseNote/caseNote.component.mjs +0 -194
- package/esm2022/lib/common-dialog/common-dialog.component.mjs +0 -23
- package/esm2022/lib/common-dialog/common-dialog.module.mjs +0 -34
- package/esm2022/lib/common-dialog/common-dialog.service.mjs +0 -33
- package/esm2022/lib/contact/contact.component.mjs +0 -140
- package/esm2022/lib/email.services.mjs +0 -42
- package/esm2022/lib/intake.service.mjs +0 -57
- package/esm2022/lib/safetyPlan/serviceProvider.component.mjs +0 -99
- package/esm2022/lib/safetyPlan/victimSafetyPlan.component.mjs +0 -116
- package/esm2022/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +0 -340
- package/esm2022/lib/shared/app.shared.module.mjs +0 -215
- package/esm2022/lib/shared/validators/date.validator.mjs +0 -59
- package/esm2022/lib/shared/validators/index.mjs +0 -2
- package/esm2022/lib/smart-victim-delete-confirm.component.mjs +0 -44
- package/esm2022/lib/smart-victim-detail/smart-victim-detail.component.mjs +0 -1104
- package/esm2022/lib/smart-victim.component.mjs +0 -316
- package/esm2022/lib/smart-victim.model.mjs +0 -133
- package/esm2022/lib/smart-victim.module.mjs +0 -128
- package/esm2022/lib/smart-victim.service.mjs +0 -352
- package/esm2022/lib/victim-routing.module.mjs +0 -41
- package/esm2022/lib/victimSearch/VictimSearchFilter.mjs +0 -3
- package/esm2022/lib/victimSearch/victimSearchForm.component.mjs +0 -38
- package/esm2022/public-api.mjs +0 -11
- package/fesm2022/csmart-ngc-smart-victim.mjs +0 -3263
- package/fesm2022/csmart-ngc-smart-victim.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/caseNote/caseNote.component.d.ts +0 -51
- package/lib/common-dialog/common-dialog.component.d.ts +0 -14
- package/lib/common-dialog/common-dialog.module.d.ts +0 -8
- package/lib/common-dialog/common-dialog.service.d.ts +0 -11
- package/lib/contact/contact.component.d.ts +0 -40
- package/lib/email.services.d.ts +0 -11
- package/lib/intake.service.d.ts +0 -57
- package/lib/safetyPlan/serviceProvider.component.d.ts +0 -19
- package/lib/safetyPlan/victimSafetyPlan.component.d.ts +0 -54
- package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +0 -62
- package/lib/shared/app.shared.module.d.ts +0 -33
- package/lib/shared/validators/date.validator.d.ts +0 -9
- package/lib/shared/validators/index.d.ts +0 -1
- package/lib/smart-victim-delete-confirm.component.d.ts +0 -12
- package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +0 -129
- package/lib/smart-victim.component.d.ts +0 -69
- package/lib/smart-victim.model.d.ts +0 -205
- package/lib/smart-victim.module.d.ts +0 -49
- package/lib/smart-victim.service.d.ts +0 -71
- package/lib/victim-routing.module.d.ts +0 -7
- package/lib/victimSearch/victimSearchForm.component.d.ts +0 -14
@@ -0,0 +1,35 @@
|
|
1
|
+
import { Observable } from 'rxjs';
|
2
|
+
import { CommonDialogComponent } from './common-dialog.component';
|
3
|
+
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
4
|
+
import { Injectable } from '@angular/core';
|
5
|
+
|
6
|
+
@Injectable()
|
7
|
+
export class CommonDialogService {
|
8
|
+
|
9
|
+
constructor(private dialog: MatDialog) { }
|
10
|
+
|
11
|
+
public confirm(title: string, message: string, cmdYesTitle: string, cmdNoTitle: string): Observable<boolean> {
|
12
|
+
|
13
|
+
let dialogRef: MatDialogRef<CommonDialogComponent>;
|
14
|
+
|
15
|
+
dialogRef = this.dialog.open(CommonDialogComponent);
|
16
|
+
dialogRef.componentInstance.title = title;
|
17
|
+
dialogRef.componentInstance.message = message;
|
18
|
+
dialogRef.componentInstance.cmdYesTitle = cmdYesTitle;
|
19
|
+
dialogRef.componentInstance.cmdNoTitle = cmdNoTitle;
|
20
|
+
return dialogRef.afterClosed();
|
21
|
+
}
|
22
|
+
|
23
|
+
public warning(title: string, message: string, cmdOkTitle: string, ): Observable<boolean> {
|
24
|
+
|
25
|
+
let dialogRef: MatDialogRef<CommonDialogComponent>;
|
26
|
+
|
27
|
+
dialogRef = this.dialog.open(CommonDialogComponent);
|
28
|
+
dialogRef.componentInstance.title = title;
|
29
|
+
dialogRef.componentInstance.message = message;
|
30
|
+
dialogRef.componentInstance.cmdYesTitle = cmdOkTitle;
|
31
|
+
|
32
|
+
return dialogRef.afterClosed();
|
33
|
+
}
|
34
|
+
|
35
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
mat-form-field {
|
3
|
+
width: 50%;
|
4
|
+
}
|
5
|
+
.container{
|
6
|
+
margin: 16px;
|
7
|
+
display: grid;
|
8
|
+
grid-template-columns: repeat(1, 1fr);
|
9
|
+
grid-gap: 10px;
|
10
|
+
grid-auto-rows: minmax(50px, auto);
|
11
|
+
justify-items: stretch;
|
12
|
+
}
|
13
|
+
|
14
|
+
.mat-select-content{
|
15
|
+
width:300px;
|
16
|
+
}
|
17
|
+
|
18
|
+
.mat-select-inner{
|
19
|
+
width:290px;
|
20
|
+
}
|
@@ -0,0 +1,124 @@
|
|
1
|
+
|
2
|
+
<mat-card>
|
3
|
+
<mat-card-header>
|
4
|
+
|
5
|
+
</mat-card-header>
|
6
|
+
<mat-card-content>
|
7
|
+
|
8
|
+
<mat-toolbar color="primary">
|
9
|
+
<h4 class="card-header" >Contact detail</h4>
|
10
|
+
</mat-toolbar>
|
11
|
+
<br>
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
<mat-card >
|
16
|
+
<div class='container'>
|
17
|
+
<form [formGroup]="contactForm" #contactDetailForm="ngForm" >
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
<div>
|
22
|
+
<mat-form-field>
|
23
|
+
<mat-label>Contact Date:</mat-label>
|
24
|
+
<input matInput formControlName="contactDate"
|
25
|
+
(click)="contactDate.open()"
|
26
|
+
[matDatepicker]="contactDate"
|
27
|
+
placeholder="Choose a contact date"
|
28
|
+
[(ngModel)]="editContact.contactDate" required>
|
29
|
+
<mat-datepicker-toggle matSuffix [for]="contactDate"></mat-datepicker-toggle>
|
30
|
+
<mat-datepicker #contactDate></mat-datepicker>
|
31
|
+
</mat-form-field>
|
32
|
+
|
33
|
+
<div class="validation-errors">
|
34
|
+
<div
|
35
|
+
class="help-block"
|
36
|
+
*ngIf="
|
37
|
+
contactForm
|
38
|
+
.get('contactDate')
|
39
|
+
.hasError('required') &&
|
40
|
+
(contactForm.get('contactDate').dirty ||
|
41
|
+
contactForm.get('contactDate').touched)">
|
42
|
+
<mat-error>Contact date is
|
43
|
+
<strong>required</strong></mat-error>
|
44
|
+
</div>
|
45
|
+
<div
|
46
|
+
class="help-block"
|
47
|
+
*ngIf="
|
48
|
+
contactForm.get('contactDate').hasError('date') &&
|
49
|
+
(contactForm.get('contactDate').dirty ||
|
50
|
+
contactForm.get('contactDate').touched)">
|
51
|
+
<mat-error >future Date is <strong>not allowed</strong> for contact date</mat-error>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
<div>
|
59
|
+
<mat-form-field>
|
60
|
+
<mat-label>Contact Method:</mat-label>
|
61
|
+
<mat-select placeholder="contactMethod" formControlName="contactMethod" required [(ngModel)]="editContact.victimContactMethodId">
|
62
|
+
<mat-option *ngFor=" let contactMethod of contactMethods" [value]="contactMethod.victimContactMethodId" >{{contactMethod.name}}</mat-option>
|
63
|
+
</mat-select>
|
64
|
+
</mat-form-field>
|
65
|
+
</div>
|
66
|
+
|
67
|
+
<div>
|
68
|
+
<mat-form-field class="mat-select-content">
|
69
|
+
<mat-label>Contact By:</mat-label>
|
70
|
+
<mat-select formControlName="contactBy" required [(ngModel)]="editContact.contactedBy" class="mat-select-inner">
|
71
|
+
<mat-option *ngFor=" let item of staff" [value]="item.staffId" >{{ item.fullName}}</mat-option>
|
72
|
+
</mat-select>
|
73
|
+
</mat-form-field>
|
74
|
+
</div>
|
75
|
+
|
76
|
+
<div>
|
77
|
+
|
78
|
+
<mat-form-field>
|
79
|
+
<mat-label>Comments </mat-label>
|
80
|
+
<textarea
|
81
|
+
matInput
|
82
|
+
placeholder=""
|
83
|
+
required formControlName="comment"
|
84
|
+
[(ngModel)]="editContact.comment"
|
85
|
+
cdkTextareaAutosize
|
86
|
+
#autosize="cdkTextareaAutosize"
|
87
|
+
cdkAutosizeMinRows="1"
|
88
|
+
cdkAutosizeMaxRows="5">
|
89
|
+
</textarea>
|
90
|
+
</mat-form-field>
|
91
|
+
</div>
|
92
|
+
|
93
|
+
<div>
|
94
|
+
<mat-form-field>
|
95
|
+
<mat-label>Next Contact Date: </mat-label>
|
96
|
+
<input matInput formControlName="nextContactDate"
|
97
|
+
(click)="nextContactDate.open()"
|
98
|
+
[matDatepicker]="nextContactDate"
|
99
|
+
placeholder="Choose a next contact date"
|
100
|
+
[(ngModel)]="editContact.nextContactDate" required>
|
101
|
+
<mat-datepicker-toggle matSuffix [for]="nextContactDate"></mat-datepicker-toggle>
|
102
|
+
<mat-datepicker #nextContactDate></mat-datepicker>
|
103
|
+
</mat-form-field>
|
104
|
+
</div>
|
105
|
+
|
106
|
+
<div>
|
107
|
+
<!-- <button mat-raised-button color="primary" (click)="saveContact()" [disabled]="!contactForm.form.valid" >Save</button> -->
|
108
|
+
<button mat-raised-button color="primary" (click)="saveContact()" [disabled]="!contactForm.valid" >Save</button>
|
109
|
+
<button mat-raised-button color="primary" >Cancel</button>
|
110
|
+
<button mat-raised-button color="primary" (click)="back()" >Back</button>
|
111
|
+
</div>
|
112
|
+
|
113
|
+
</form>
|
114
|
+
</div>
|
115
|
+
</mat-card>
|
116
|
+
|
117
|
+
|
118
|
+
<br>
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
</mat-card-content>
|
124
|
+
</mat-card>
|
@@ -0,0 +1,176 @@
|
|
1
|
+
import { Component, OnInit,Inject,OnChanges, Input, Output, EventEmitter,AfterViewInit } from '@angular/core';
|
2
|
+
import { NgcSmartVictimService } from '../smart-victim.service';
|
3
|
+
import { UntypedFormControl, UntypedFormGroup, FormBuilder,Validators } from '@angular/forms';
|
4
|
+
import { CommonDialogService} from '.././common-dialog/common-dialog.service';
|
5
|
+
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
|
6
|
+
import { SelectedOffender, LoginStaff } from '@csmart/ngc-smart-core';
|
7
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
8
|
+
import { Contact} from '../smart-victim.model';
|
9
|
+
import { SmartAuthService } from '@csmart/ngc-smart-core';
|
10
|
+
import { dateValidator,passDateValidator,dateLessThan } from '../shared/validators';
|
11
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
12
|
+
|
13
|
+
@Component({
|
14
|
+
templateUrl: './contact.component.html',
|
15
|
+
styleUrls: ['./contact.component.css'],
|
16
|
+
})
|
17
|
+
export class ContactComponent implements OnInit,AfterViewInit {
|
18
|
+
|
19
|
+
offenderId: number;
|
20
|
+
loginStaff: LoginStaff;
|
21
|
+
contact: Contact;
|
22
|
+
editContact: Contact = <Contact>{};
|
23
|
+
errorMessage: string;
|
24
|
+
contactMethods: any[];
|
25
|
+
contactBy: any[];
|
26
|
+
result: any;
|
27
|
+
victimName: string;
|
28
|
+
staffId: number;
|
29
|
+
victimId: number;
|
30
|
+
hiddenAddNewFlag: boolean;
|
31
|
+
contactForm: UntypedFormGroup;
|
32
|
+
private sub: any;
|
33
|
+
staff: any = {};
|
34
|
+
|
35
|
+
constructor(
|
36
|
+
|
37
|
+
private _victimServicesComponent: NgcSmartVictimService,
|
38
|
+
//private commonDialogService: CommonDialogService,
|
39
|
+
public snackBar: MatSnackBar,
|
40
|
+
private route: ActivatedRoute,
|
41
|
+
private router: Router,
|
42
|
+
private smartAuthService: SmartAuthService,
|
43
|
+
|
44
|
+
) {
|
45
|
+
this.contactForm = new UntypedFormGroup({
|
46
|
+
//contactDate: new FormControl(),
|
47
|
+
contactDate:new UntypedFormControl('', Validators.compose([
|
48
|
+
dateValidator() ])),
|
49
|
+
|
50
|
+
contactMethod: new UntypedFormControl(),
|
51
|
+
contactBy: new UntypedFormControl(),
|
52
|
+
comment: new UntypedFormControl(),
|
53
|
+
nextContactDate: new UntypedFormControl()
|
54
|
+
});
|
55
|
+
}
|
56
|
+
|
57
|
+
ngAfterViewInit() {
|
58
|
+
this.smartAuthService.setPermission('Victim', this.route.snapshot);
|
59
|
+
}
|
60
|
+
|
61
|
+
ngOnInit() {
|
62
|
+
var data = this.route.snapshot.data;
|
63
|
+
this.loginStaff = data.loginStaff;
|
64
|
+
this.staffId = this.loginStaff.staffId;
|
65
|
+
|
66
|
+
this.staff = [
|
67
|
+
{
|
68
|
+
staffId: this.loginStaff.staffId,
|
69
|
+
fullName: this.loginStaff.firstName + ' ' + this.loginStaff.lastName,
|
70
|
+
},
|
71
|
+
];
|
72
|
+
|
73
|
+
|
74
|
+
this.sub = this.route.params.subscribe(params => {
|
75
|
+
this.victimId = params['victimId'];
|
76
|
+
console.log('my this.victimId');
|
77
|
+
console.log(this.victimId);
|
78
|
+
|
79
|
+
});
|
80
|
+
|
81
|
+
|
82
|
+
this._victimServicesComponent.getContactMethods().subscribe(
|
83
|
+
(items: any) => {
|
84
|
+
this.contactMethods = items;
|
85
|
+
console.log('this.contactMethods');
|
86
|
+
console.log(this.contactMethods);
|
87
|
+
}
|
88
|
+
);
|
89
|
+
|
90
|
+
// this._victimServicesComponent.getContactBys().subscribe(
|
91
|
+
// (items: any) => {
|
92
|
+
// this.contactBy= items;
|
93
|
+
// }
|
94
|
+
// );
|
95
|
+
|
96
|
+
|
97
|
+
// this._victimServicesComponent.getContacts(this.victimId).subscribe(
|
98
|
+
// caseNoteList => {
|
99
|
+
|
100
|
+
// this.caseNoteList = caseNoteList;
|
101
|
+
|
102
|
+
// }
|
103
|
+
// );
|
104
|
+
|
105
|
+
}
|
106
|
+
onEditContact(victimContactId: number){
|
107
|
+
|
108
|
+
// this.hiddenDetailFlag =false;
|
109
|
+
// this.hiddenAddNewFlag = true;
|
110
|
+
|
111
|
+
// this.addDisableFlag = true;
|
112
|
+
// this.editCaseNote = this.caseNoteList.find(x => x.victimCaseNoteId === victimCaseNoteId);
|
113
|
+
|
114
|
+
}
|
115
|
+
|
116
|
+
// onDeleteCaseNote(victimCaseNoteId: number){
|
117
|
+
// this.commonDialogService
|
118
|
+
// .confirm('', 'Do you want to delete this case note?', 'Yes', 'No')
|
119
|
+
// .subscribe(res => {this.result = res;
|
120
|
+
// if (this.result) {
|
121
|
+
// this._victimServicesComponent.deleteCaseNote(victimCaseNoteId, this.staffId)
|
122
|
+
// .subscribe(result => {
|
123
|
+
// this.snackBar.open('delete Successfully !', '', { duration: 3000,});
|
124
|
+
|
125
|
+
// this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(
|
126
|
+
// caseNoteList => {
|
127
|
+
// this.caseNoteList = caseNoteList;
|
128
|
+
|
129
|
+
// }
|
130
|
+
// );
|
131
|
+
// }
|
132
|
+
// );
|
133
|
+
// }
|
134
|
+
|
135
|
+
// });
|
136
|
+
// }
|
137
|
+
onAddNew(){
|
138
|
+
|
139
|
+
// this.editCas.caseNoteDate = null;
|
140
|
+
// this.editCaseNote.contactTypeId = null;
|
141
|
+
// this.editCaseNote.victimContactPurposeId = null;
|
142
|
+
// this.editCaseNote.comment = null;
|
143
|
+
}
|
144
|
+
back(){
|
145
|
+
|
146
|
+
|
147
|
+
this.router.navigate(['victimDetail', this.victimId ]);
|
148
|
+
}
|
149
|
+
|
150
|
+
saveContact(){
|
151
|
+
|
152
|
+
const contact: Contact = {
|
153
|
+
victimId:this.victimId,
|
154
|
+
victimContactId: 0,
|
155
|
+
contactDate: this.editContact.contactDate,
|
156
|
+
victimContactMethodId: this.editContact.victimContactMethodId,
|
157
|
+
contactMethod: null,
|
158
|
+
contactedByName: null,
|
159
|
+
contactedBy: this.editContact.contactedBy,
|
160
|
+
comment: this.editContact.comment,
|
161
|
+
nextContactDate: this.editContact.nextContactDate,
|
162
|
+
modifiedBy: this.staffId,
|
163
|
+
|
164
|
+
};
|
165
|
+
this._victimServicesComponent.addContact(contact).subscribe(
|
166
|
+
result => {
|
167
|
+
this.snackBar.open('Saved Successfully !', '', {
|
168
|
+
duration: 3000,
|
169
|
+
});
|
170
|
+
|
171
|
+
this.router.navigate(['victimDetail', this.victimId ]);
|
172
|
+
}
|
173
|
+
);
|
174
|
+
}
|
175
|
+
|
176
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import { HttpClient } from "@angular/common/http";
|
2
|
+
import { Observable } from "rxjs";
|
3
|
+
import { map } from "rxjs/operators";
|
4
|
+
import { Injectable } from "@angular/core";
|
5
|
+
import { environment } from "../environments/environment";
|
6
|
+
|
7
|
+
@Injectable()
|
8
|
+
export class EmailNotificationService {
|
9
|
+
constructor(private http: HttpClient) {}
|
10
|
+
|
11
|
+
createEmail(
|
12
|
+
emailTemplateId: string,
|
13
|
+
parameters: string,
|
14
|
+
modifiedBy: number
|
15
|
+
): Observable<any> {
|
16
|
+
const mutationString = `
|
17
|
+
mutation {
|
18
|
+
createEmail(
|
19
|
+
input: {
|
20
|
+
emailTemplateId: "${emailTemplateId}"
|
21
|
+
parameters: "${parameters}"
|
22
|
+
modifiedBy: ${modifiedBy}
|
23
|
+
}
|
24
|
+
) {
|
25
|
+
message
|
26
|
+
data {
|
27
|
+
emailQueueId
|
28
|
+
recipient
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
`;
|
33
|
+
|
34
|
+
return this.http
|
35
|
+
.post<any>(environment.smartApiUrl, { query: mutationString })
|
36
|
+
.pipe(
|
37
|
+
map(({ data }) => {
|
38
|
+
return data.createEmail;
|
39
|
+
})
|
40
|
+
);
|
41
|
+
}
|
42
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { Apollo } from 'apollo-angular';
|
3
|
+
import { Observable } from 'rxjs';
|
4
|
+
import gql from 'graphql-tag';
|
5
|
+
|
6
|
+
@Injectable({
|
7
|
+
providedIn: 'root',
|
8
|
+
})
|
9
|
+
export class EmailService {
|
10
|
+
constructor(private apollo: Apollo) {}
|
11
|
+
|
12
|
+
createCaseNoteEmail(
|
13
|
+
templateId: string,
|
14
|
+
offenderId: number,
|
15
|
+
modifiedBy: number,
|
16
|
+
) : Observable<any> {
|
17
|
+
|
18
|
+
return this.createEmail(
|
19
|
+
templateId,
|
20
|
+
`{\\"offenderId\\": ${offenderId}}`,
|
21
|
+
modifiedBy,
|
22
|
+
);
|
23
|
+
|
24
|
+
}
|
25
|
+
|
26
|
+
|
27
|
+
createEmail(
|
28
|
+
emailTemplateId: string,
|
29
|
+
parameters: string,
|
30
|
+
modifiedBy: number,
|
31
|
+
): Observable<any> {
|
32
|
+
const mutation = `mutation {
|
33
|
+
createEmail(input: {
|
34
|
+
emailTemplateId: "${emailTemplateId}"
|
35
|
+
parameters: "${parameters}"
|
36
|
+
modifiedBy: ${modifiedBy}
|
37
|
+
}) {
|
38
|
+
message
|
39
|
+
data {
|
40
|
+
emailQueueId
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}`;
|
44
|
+
console.log(mutation);
|
45
|
+
return this.apollo.mutate({
|
46
|
+
mutation: gql`
|
47
|
+
${mutation}
|
48
|
+
`,
|
49
|
+
});
|
50
|
+
}
|
51
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
import { throwError as observableThrowError, Observable, throwError } from 'rxjs';
|
3
|
+
import { Injectable } from '@angular/core';
|
4
|
+
import { HttpClient, HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http';
|
5
|
+
import { catchError, finalize, map } from 'rxjs/operators';
|
6
|
+
import { LoaderService } from './loader.service';
|
7
|
+
|
8
|
+
export enum ResponseContentType {
|
9
|
+
Blob, Json
|
10
|
+
}
|
11
|
+
|
12
|
+
@Injectable()
|
13
|
+
export class HttpService {
|
14
|
+
|
15
|
+
constructor(private http: HttpClient,
|
16
|
+
private loaderService: LoaderService
|
17
|
+
) { }
|
18
|
+
|
19
|
+
private handleError(error: HttpErrorResponse) {
|
20
|
+
return throwError(() => new Error(error.message));
|
21
|
+
}
|
22
|
+
private showLoader(): void {
|
23
|
+
this.loaderService.display(true);
|
24
|
+
}
|
25
|
+
private hideLoader(): void {
|
26
|
+
this.loaderService.display(false);
|
27
|
+
}
|
28
|
+
public sendEmailTemplate(emailTemplateId: string, data: any, staffId: number) : Observable<any> {
|
29
|
+
return this.sendEmail({ emailTemplateId: emailTemplateId, emailParams: JSON.stringify(data), staffId: staffId, CaseDocumentIds: '' });
|
30
|
+
}
|
31
|
+
private sendEmail(data: any) : Observable<any> {
|
32
|
+
return this.http.post('https://smart-service-offender-uat.azurewebsites.net/v1/', + '/Emails/', data).pipe();
|
33
|
+
}
|
34
|
+
}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
2
|
+
import { Observable } from 'rxjs';
|
3
|
+
import { map, filter } from 'rxjs/operators';
|
4
|
+
import { Injectable,Inject } from '@angular/core';
|
5
|
+
import { SMART_OFFENDER_SERVICE_URL} from './smart-victim.model';
|
6
|
+
|
7
|
+
|
8
|
+
const headers = new Headers({ 'Content-Type': 'application/json' });
|
9
|
+
@Injectable({
|
10
|
+
providedIn: 'root'
|
11
|
+
})
|
12
|
+
export class IntakeServicesComponent {
|
13
|
+
//serviceData = environment.smartOffenderServiceUrl;
|
14
|
+
constructor(private http: HttpClient,
|
15
|
+
@Inject(SMART_OFFENDER_SERVICE_URL) private smartOffenderServiceUrl: string,
|
16
|
+
) {}
|
17
|
+
getIntakeByOffender(offenderId: any): Observable<Intake> {
|
18
|
+
return this.http
|
19
|
+
.get<Intake>(this.smartOffenderServiceUrl + 'IntakeBasic/offender/' + offenderId)
|
20
|
+
.pipe();
|
21
|
+
}
|
22
|
+
|
23
|
+
updateIntakeSteps(
|
24
|
+
offenderId: number,
|
25
|
+
intakeStepStatus: IntakeStepStatusModel,
|
26
|
+
) {
|
27
|
+
return this.http.put(
|
28
|
+
this.smartOffenderServiceUrl + '/IntakeStepStatus/' + offenderId,
|
29
|
+
intakeStepStatus,
|
30
|
+
);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
export interface Intake {
|
35
|
+
intakeId: number;
|
36
|
+
offenderId: number;
|
37
|
+
intakeOffenderReportStatusId?: any;
|
38
|
+
startDate: string;
|
39
|
+
endDate?: any;
|
40
|
+
assignmentId?: any;
|
41
|
+
modifiedBy: number;
|
42
|
+
}
|
43
|
+
|
44
|
+
export interface IntakeStepStatus {
|
45
|
+
intakeStepStatusId: number;
|
46
|
+
intakeId: number;
|
47
|
+
intakeStepId: string;
|
48
|
+
completedDate: Date;
|
49
|
+
modifiedBy: number;
|
50
|
+
}
|
51
|
+
|
52
|
+
export interface IntakeStepStatusModel
|
53
|
+
{
|
54
|
+
offenderId: number;
|
55
|
+
intakeStepId: string;
|
56
|
+
modifiedBy: number;
|
57
|
+
}
|
58
|
+
|
59
|
+
export class IntakeStep{
|
60
|
+
public static PhysicalInformation = "PHYSIN";
|
61
|
+
public static Photo = "PHOTOS";
|
62
|
+
public static HousingInformation = "HOUSE";
|
63
|
+
public static DocketInformation = "DOCKET";
|
64
|
+
public static Alias = "ALIAS";
|
65
|
+
public static IntakeBasicInformation = "INTKBI";
|
66
|
+
public static ContactInformation = "CONTCT";
|
67
|
+
public static DeceasedInformation = "DEATH";
|
68
|
+
public static DriversLicense = "DRVLIC";
|
69
|
+
public static EmploymentInformation = "EMPLOY";
|
70
|
+
public static GangAffiliation = "GANG";
|
71
|
+
public static HealthInsurance = "HLTHINS";
|
72
|
+
public static Identification = "IDNTFCTN";
|
73
|
+
public static InternetIdentifier = "INTERNETID";
|
74
|
+
public static MilitaryService = "MLTSVC";
|
75
|
+
public static School = "SCHOOL";
|
76
|
+
public static SelectiveService = "SLCTVSVC";
|
77
|
+
public static Vehicle = "VEHICLE";
|
78
|
+
public static VictimInformation = "VICTIM";
|
79
|
+
public static WarrantInformation = "WARRNT";
|
80
|
+
public static RunningRecord = "RUNREC";
|
81
|
+
public static Signature = "SIGN";
|
82
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
3
|
+
|
4
|
+
@Injectable()
|
5
|
+
export class LoaderService {
|
6
|
+
public status: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
|
7
|
+
|
8
|
+
display(value: boolean) {
|
9
|
+
this.status.next(value);
|
10
|
+
}
|
11
|
+
}
|
@@ -0,0 +1,94 @@
|
|
1
|
+
import { Component, OnInit, Inject } from '@angular/core';
|
2
|
+
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
3
|
+
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
4
|
+
import { ProvidersDialogData} from '../smart-victim.model';
|
5
|
+
import { NgcSmartVictimService } from '../smart-victim.service';
|
6
|
+
|
7
|
+
|
8
|
+
@Component({
|
9
|
+
selector: 'app-service-provider',
|
10
|
+
template: `
|
11
|
+
<h1 mat-dialog-title> {{data.serviceType}}</h1>
|
12
|
+
<div mat-dialog-content class="main" [formGroup]="spForm">
|
13
|
+
<mat-form-field>
|
14
|
+
<mat-label>service provider</mat-label>
|
15
|
+
|
16
|
+
<mat-select formControlName="voteeProviderId">
|
17
|
+
<mat-option
|
18
|
+
*ngFor="let providerOption of programProviders"
|
19
|
+
[value]="providerOption.victimProgramProviderId">{{ providerOption.victimProgramProvider }}
|
20
|
+
</mat-option>
|
21
|
+
</mat-select>
|
22
|
+
|
23
|
+
</mat-form-field>
|
24
|
+
|
25
|
+
</div>
|
26
|
+
<div mat-dialog-actions class="actions">
|
27
|
+
<button mat-raised-button color="primary" (click)="cancel()" cdkFocusInitial>
|
28
|
+
Cancel Change
|
29
|
+
</button>
|
30
|
+
<button mat-raised-button color="primary" [mat-dialog-close]="spForm.value" >
|
31
|
+
Save Change
|
32
|
+
</button>
|
33
|
+
</div>
|
34
|
+
`,
|
35
|
+
styles: [
|
36
|
+
`
|
37
|
+
.main {
|
38
|
+
width: 100%;
|
39
|
+
display: flex;
|
40
|
+
flex-direction: column;
|
41
|
+
}
|
42
|
+
|
43
|
+
.actions{
|
44
|
+
display: flex;
|
45
|
+
}
|
46
|
+
`,
|
47
|
+
],
|
48
|
+
})
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
export class SeriveProviderComponent implements OnInit {
|
53
|
+
spForm: UntypedFormGroup;
|
54
|
+
programProviders:[];
|
55
|
+
|
56
|
+
constructor(
|
57
|
+
private formBuilder: UntypedFormBuilder,
|
58
|
+
public dialogRef: MatDialogRef<SeriveProviderComponent>,
|
59
|
+
private _victimServicesComponent: NgcSmartVictimService,
|
60
|
+
@Inject(MAT_DIALOG_DATA) public data: ProvidersDialogData,
|
61
|
+
) {
|
62
|
+
|
63
|
+
|
64
|
+
this.spForm = this.formBuilder.group({
|
65
|
+
voteeProviderId: [''],
|
66
|
+
|
67
|
+
});
|
68
|
+
}
|
69
|
+
|
70
|
+
cancel() {
|
71
|
+
this.dialogRef.close();
|
72
|
+
}
|
73
|
+
|
74
|
+
ngOnInit() {
|
75
|
+
console.log('data.providerCollections')
|
76
|
+
console.log(this.data);
|
77
|
+
console.log(this.data.serviceTypeId);
|
78
|
+
|
79
|
+
this._victimServicesComponent.getvVictimServiceTypeProgramProviders().subscribe(
|
80
|
+
(items: any) => {
|
81
|
+
this.programProviders = items.filter( (y) => (y.victimServiceTypeId === this.data.serviceTypeId));
|
82
|
+
console.log('this.programProviders');
|
83
|
+
console.log(this.programProviders);
|
84
|
+
}
|
85
|
+
);
|
86
|
+
|
87
|
+
this.spForm.get('voteeProviderId').valueChanges.subscribe(voteeProviderId => {
|
88
|
+
console.log('voteeProviderId in service provider component.')
|
89
|
+
console.log(voteeProviderId)
|
90
|
+
|
91
|
+
|
92
|
+
})
|
93
|
+
}
|
94
|
+
}
|