]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-field.component.ts
LP2061136 - Stamping 1405 DB upgrade script
[Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / reporter / simple / sr-field.component.ts
1 import {Component, Input, Output, EventEmitter, OnInit} from '@angular/core';
2 import {IdlObject} from '@eg/core/idl.service';
3 import {OrgService} from '@eg/core/org.service';
4 import {AuthService} from '@eg/core/auth.service';
5 import {SimpleReporterService} from './simple-reporter.service';
6
7 @Component({
8     selector: 'eg-sr-field',
9     templateUrl: './sr-field.component.html',
10     styleUrls: ['./sr-field.component.css'],
11 })
12 export class SRFieldComponent implements OnInit {
13
14     operators = [];
15     transforms = [];
16     wsContextOrgs = [];
17     linkedIdlBaseQuery = {};
18
19     @Input() field: IdlObject = null;
20     @Output() fieldChange = new EventEmitter<IdlObject>();
21     @Input() withAlias = false;
22     @Input() editAlias = true;
23     @Input() withTransforms = false;
24     @Input() withOperators = false;
25     @Input() withValueInput = false;
26     @Input() withSelect = false;
27     @Input() withDeselect = false;
28     @Input() withSortDirection = false;
29     @Output() selectEvent = new EventEmitter();
30     @Output() deselectEvent = new EventEmitter();
31     @Input() selected = false;
32     @Input() withUpDown = false;
33     @Output() upEvent = new EventEmitter();
34     @Output() downEvent = new EventEmitter();
35     @Input() disableUp = false;
36     @Input() disableDown = false;
37
38     constructor(
39         private org: OrgService,
40         private auth: AuthService,
41         private srSvc: SimpleReporterService
42     ) {
43     }
44
45     ngOnInit() {
46
47         if ( this.withTransforms ) {
48             this.transforms = this.srSvc.getTransformsForDatatype(this.field.datatype);
49         }
50
51         if ( this.withOperators ) {
52             this.operators = this.srSvc.getOperatorsForDatatype(this.field.datatype);
53         }
54
55         this.wsContextOrgs = this.org.fullPath(this.auth.user().ws_ou(), true);
56         if (this.field.org_filter_field) {
57             this.linkedIdlBaseQuery[this.field.org_filter_field] = this.wsContextOrgs;
58         }
59     }
60
61     clearFilterValue() {
62         this.field.filter_value = this.field.operator.arity > 1 ? [] : null;
63         delete this.field._org_family_includeAncestors;
64         delete this.field._org_family_includeDescendants;
65         delete this.field._org_family_primaryOrgId;
66     }
67
68     operatorChange($event) {
69         const new_op = this.srSvc.getOperatorByName($event.target.value);
70         if (new_op.arity !== this.field.operator.arity) { // param count of the old and new ops are different
71             this.field.operator = new_op;
72             this.clearFilterValue(); // clear the filter value
73         } else {
74             this.field.operator = new_op;
75         }
76         this.fieldChange.emit(this.field);
77     }
78
79     transformChange($event) {
80         const new_transform = this.srSvc.getTransformByName($event.target.value);
81
82         if (new_transform.final_datatype) { // new has a final_datatype
83             if (this.field.transform.final_datatype) { // and so does old
84                 if (new_transform.final_datatype !== this.field.transform.final_datatype) { // and they're different
85                     this.clearFilterValue(); // clear
86                 }
87             } else if (new_transform.final_datatype !== this.field.datatype) { // old does not, and base is different from new
88                 this.clearFilterValue(); // clear
89             }
90         } else if (this.field.transform.final_datatype) {// old has a final_datatype, new doesn't
91             if (this.field.transform.final_datatype !== this.field.datatype) { // and it's different from the base type
92                 this.clearFilterValue(); // clear
93             }
94         }
95
96         this.field.transform = new_transform;
97         if (new_transform.final_datatype) {
98             this.operators = this.srSvc.getOperatorsForDatatype(new_transform.final_datatype);
99         } else {
100             this.operators = this.srSvc.getOperatorsForDatatype(this.field.datatype);
101         }
102
103         this.selectEvent.emit();
104         this.fieldChange.emit(this.field);
105     }
106
107     firstBetweenValue($event) {
108         if (!Array.isArray(this.field.filter_value)) {
109             this.field.filter_value = [];
110         }
111         this.field.filter_value[0] = $event;
112         this.fieldChange.emit(this.field);
113     }
114
115     secondBetweenValue($event) {
116         if (!Array.isArray(this.field.filter_value)) {
117             this.field.filter_value = [];
118         }
119         this.field.filter_value[1] = $event;
120         this.fieldChange.emit(this.field);
121     }
122
123     setSingleValue($event) {
124         if (Array.isArray(this.field.filter_value)) {
125             this.field.filter_value = null;
126         }
127         this.field.filter_value = $event;
128         this.fieldChange.emit(this.field);
129     }
130
131     getBracketListValue(list_value) {
132         let output = '{';
133         if (Array.isArray(list_value)) {
134             list_value.forEach((v, i) => {
135                 if (i > 0) {
136                     output += ',';
137                 }
138                 output += v;
139             });
140         }
141         output += '}';
142         return output;
143     }
144
145     setOrgFamilyValue($event) {
146         this.field.filter_value = this.getBracketListValue($event.orgIds);
147         this.field._org_family_includeAncestors = $event.includeAncestors;
148         this.field._org_family_includeDescendants = $event.includeDescendants;
149         this.field._org_family_primaryOrgId = $event.primaryOrgId;
150         this.fieldChange.emit(this.field);
151     }
152
153     setBracketListValue($event) {
154         if (Array.isArray(this.field.filter_value)) {
155             this.field.filter_value = null;
156         }
157         let valstr = $event;
158         valstr = valstr.replace(/^{/, '');
159         valstr = valstr.replace(/}$/, '');
160         const ids = valstr.split(',');
161         this.field.filter_value = [...ids];
162         this.fieldChange.emit(this.field);
163     }
164
165     directionChange($event) {
166         this.field['direction'] = $event.target.value;
167         this.fieldChange.emit(this.field);
168     }
169
170     selectAction() {
171         this.selectEvent.emit();
172     }
173
174     deselectAction() {
175         this.deselectEvent.emit();
176     }
177
178     upAction() {
179         this.upEvent.emit();
180     }
181
182     downAction() {
183         this.downEvent.emit();
184     }
185
186 }
187