taxtank-core 0.28.71 → 0.28.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,35 +1,40 @@
1
1
  import { AbstractForm } from '../abstract.form';
2
- import { SoleInvoiceItem } from '../../models';
3
- import { FormArray, FormControl, Validators } from '@angular/forms';
2
+ import { SoleInvoice, SoleInvoiceItem } from '../../models';
3
+ import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
4
4
  import { SoleInvoiceItemForm } from './sole-invoice-item.form';
5
5
  import { plainToClass } from 'class-transformer';
6
6
  import { SoleInvoiceTaxTypeEnum } from '../../db/Enums/sole-invoice-tax-type.enum';
7
- import merge from 'lodash/merge';
7
+ /**
8
+ * Form is divided into two groups, since the creation of Sole invoice takes place in two steps:
9
+ * a common invoice data and sole invoice items.
10
+ */
8
11
  export class SoleInvoiceForm extends AbstractForm {
9
12
  constructor(invoice, soleDetailsGST,
10
13
  // default template to be preselected
11
14
  defaultTemplate) {
12
15
  super({
13
- dateFrom: new FormControl(invoice.dateFrom || new Date(), Validators.required),
14
- dateTo: new FormControl(invoice.dateTo, Validators.required),
16
+ commonData: new FormGroup({
17
+ dateFrom: new FormControl(invoice.dateFrom || new Date(), Validators.required),
18
+ dateTo: new FormControl(invoice.dateTo, Validators.required),
19
+ payer: new FormControl(invoice.payer, Validators.required),
20
+ taxType: new FormControl(invoice.taxType, Validators.required),
21
+ bankAccount: new FormControl(invoice.bankAccount, Validators.required),
22
+ reference: new FormControl(invoice.reference)
23
+ }),
15
24
  items: new FormArray((invoice.items || [plainToClass(SoleInvoiceItem, {})]).map((item) => new SoleInvoiceItemForm(item))),
16
- payer: new FormControl(invoice.payer, Validators.required),
17
- taxType: new FormControl(invoice.taxType, Validators.required),
18
- bankAccount: new FormControl(invoice.bankAccount, Validators.required),
19
- reference: new FormControl(invoice.reference)
20
25
  }, invoice);
21
26
  this.invoice = invoice;
22
27
  this.soleDetailsGST = soleDetailsGST;
23
28
  this.defaultTemplate = defaultTemplate;
24
29
  // we need invoice template only for new invoices
25
30
  if (!invoice.id) {
26
- this.addControl('template', new FormControl(this.defaultTemplate));
31
+ (this.commonData).addControl('template', new FormControl(this.defaultTemplate));
27
32
  this.updateTemplateRelatedFields(this.defaultTemplate);
28
33
  }
29
34
  // invoice.taxType is always NONE ('No Tax') when soleDetails.isGST === false
30
35
  if (!this.soleDetailsGST) {
31
- this.get('taxType').setValue(SoleInvoiceTaxTypeEnum.NO_TAX);
32
- this.get('taxType').disable();
36
+ this.commonData.get('taxType').setValue(SoleInvoiceTaxTypeEnum.NO_TAX);
37
+ this.commonData.get('taxType').disable();
33
38
  // Items isGST is not available when invoice.taxType === NONE ('No Tax')
34
39
  this.items.controls.forEach((itemForm) => {
35
40
  this.disableItemGST(itemForm);
@@ -49,8 +54,8 @@ export class SoleInvoiceForm extends AbstractForm {
49
54
  this.listenItemChartAccountsChanges(itemForm);
50
55
  });
51
56
  }
52
- // nothing to listen if template field is not учшые (edit invoice case)
53
- if (this.contains('template')) {
57
+ // nothing to listen if template field is not exist (edit invoice case)
58
+ if ((this.commonData).contains('template')) {
54
59
  this.listenTemplateChanges();
55
60
  }
56
61
  }
@@ -67,15 +72,20 @@ export class SoleInvoiceForm extends AbstractForm {
67
72
  this.items.removeAt(index);
68
73
  }
69
74
  submit(data = {}) {
70
- // @TODO Alex TT-2190: move child custom forms submit to Abstract Form
71
- const items = this.items.controls.map((control) => control.submit());
72
- return super.submit(merge(data, { items }));
75
+ this.submitted = true;
76
+ this.markAllAsTouched();
77
+ if (!this.disabled && !this.valid) {
78
+ return null;
79
+ }
80
+ const invoiceInstance = this.currentValue;
81
+ this.onSubmit.emit(invoiceInstance);
82
+ return invoiceInstance;
73
83
  }
74
84
  /**
75
85
  * Update default values from selected invoice template
76
86
  */
77
87
  listenTemplateChanges() {
78
- this.get('template').valueChanges.subscribe((template) => {
88
+ this.commonData.get('template').valueChanges.subscribe((template) => {
79
89
  this.updateTemplateRelatedFields(template);
80
90
  });
81
91
  }
@@ -83,7 +93,7 @@ export class SoleInvoiceForm extends AbstractForm {
83
93
  * GST is not available for items when invoice.taxType === NONE
84
94
  */
85
95
  listenTaxTypeChanges() {
86
- this.get('taxType').valueChanges.subscribe((type) => {
96
+ this.commonData.get('taxType').valueChanges.subscribe((type) => {
87
97
  this.items.controls.forEach((itemForm) => {
88
98
  const chartAccounts = itemForm.get('chartAccounts').value;
89
99
  // Item GST is available when invoice.taxType !== NONE ('No Tax')
@@ -96,18 +106,18 @@ export class SoleInvoiceForm extends AbstractForm {
96
106
  });
97
107
  }
98
108
  updateTemplateRelatedFields(template) {
99
- this.get('bankAccount').setValue(template.bankAccount);
100
- const dateFrom = this.get('dateFrom').value;
109
+ this.commonData.get('bankAccount').setValue(template.bankAccount);
110
+ const dateFrom = this.commonData.get('dateFrom').value;
101
111
  if (dateFrom) {
102
- this.get('dateTo').setValue(new Date(dateFrom.getTime() + template.termTime));
112
+ this.commonData.get('dateTo').setValue(new Date(dateFrom.getTime() + template.termTime));
103
113
  }
104
114
  // invoice.taxType is always 'No Tax' when soleDetails.isGST = false and not available for changing
105
115
  if (this.soleDetailsGST) {
106
- this.get('taxType').setValue(template.taxType);
116
+ this.commonData.get('taxType').setValue(template.taxType);
107
117
  }
108
118
  }
109
119
  /**
110
- * GST availability depends of chart accounts isGST flag
120
+ * GST availability depends on chart accounts isGST flag
111
121
  */
112
122
  listenItemChartAccountsChanges(itemForm) {
113
123
  itemForm.get('chartAccounts').valueChanges.subscribe((chartAccounts) => {
@@ -131,5 +141,15 @@ export class SoleInvoiceForm extends AbstractForm {
131
141
  itemForm.get('isGST').setValue(true);
132
142
  itemForm.get('isGST').enable();
133
143
  }
144
+ get commonData() {
145
+ return this.get('commonData');
146
+ }
147
+ /**
148
+ * Rewrite abstract form getter to flat "commonData" field, which is not in the class
149
+ */
150
+ get currentValue() {
151
+ const formRawValue = this.getRawValue();
152
+ return plainToClass(SoleInvoice, Object.assign({}, this.model, Object.assign(Object.assign({}, formRawValue.commonData), { items: formRawValue.items })));
153
+ }
134
154
  }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sZS1pbnZvaWNlLmZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvZm9ybXMvc29sZS9zb2xlLWludm9pY2UuZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFlLGVBQWUsRUFBdUIsTUFBTSxjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUdqQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxZQUF5QjtJQUM1RCxZQUNVLE9BQW9CLEVBQ3BCLGNBQXVCO0lBQy9CLHFDQUFxQztJQUM3QixlQUFvQztRQUU1QyxLQUFLLENBQUM7WUFDSixRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDOUUsTUFBTSxFQUFFLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM1RCxLQUFLLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxtQkFBbUIs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LENBQUMsUUFBNkI7UUFDakQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdEZvcm0gfSBmcm9tICcuLi9hYnN0cmFjdC5mb3JtJztcbmltcG9ydCB7IFNvbGVJbnZvaWNlLCBTb2xlSW52b2ljZUl0ZW0sIFNvbGVJbnZvaWNlVGVtcGxhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNvbGVJbnZvaWNlSXRlbUZvcm0gfSBmcm9tICcuL3NvbGUtaW52b2ljZS1pdGVtLmZvcm0nO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgSUV2ZW50TGlzdGVuZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2V2ZW50LWxpc3RlbmVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTb2xlSW52b2ljZVRheFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZGIvRW51bXMvc29sZS1pbnZvaWNlLXRheC10eXBlLmVudW0nO1xuaW1wb3J0IG1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSc7XG5pbXBvcnQgeyBDaGFydEFjY291bnRzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoYXJ0LWFjY291bnRzL2NoYXJ0LWFjY291bnRzJztcblxuZXhwb3J0IGNsYXNzIFNvbGVJbnZvaWNlRm9ybSBleHRlbmRzIEFic3RyYWN0Rm9ybTxTb2xlSW52b2ljZT4gaW1wbGVtZW50cyBJRXZlbnRMaXN0ZW5lciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW52b2ljZTogU29sZUludm9pY2UsXG4gICAgcHJpdmF0ZSBzb2xlRGV0YWlsc0dTVDogYm9vbGVhbixcbiAgICAvLyBkZWZhdWx0IHRlbXBsYXRlIHRvIGJlIHByZXNlbGVjdGVkXG4gICAgcHJpdmF0ZSBkZWZhdWx0VGVtcGxhdGU6IFNvbGVJbnZvaWNlVGVtcGxhdGUsXG4gICkge1xuICAgIHN1cGVyKHtcbiAgICAgIGRhdGVGcm9tOiBuZXcgRm9ybUNvbnRyb2woaW52b2ljZS5kYXRlRnJvbSB8fCBuZXcgRGF0ZSgpLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIGRhdGVUbzogbmV3IEZvcm1Db250cm9sKGludm9pY2UuZGF0ZVRvLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIGl0ZW1zOiBuZXcgRm9ybUFycmF5KChpbnZvaWNlLml0ZW1zIHx8IFtwbGFpblRvQ2xhc3MoU29sZUludm9pY2VJdGVtLCB7fSldKS5tYXAoKGl0ZW06IFNvbGVJbnZvaWNlSXRlbSkgPT4gbmV3IFNvbGVJbnZvaWNlSXRlbUZvcm0oaXRlbSkpKSxcbiAgICAgIHBheWVyOiBuZXcgRm9ybUNvbnRyb2woaW52b2ljZS5wYXllciwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICB0YXhUeXBlOiBuZXcgRm9ybUNvbnRyb2woaW52b2ljZS50YXhUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIGJhbmtBY2NvdW50OiBuZXcgRm9ybUNvbnRyb2woaW52b2ljZS5iYW5rQWNjb3VudCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICByZWZlcmVuY2U6IG5ldyBGb3JtQ29udHJvbChpbnZvaWNlLnJlZmVyZW5jZSlcbiAgICB9LCBpbnZvaWNlKTtcblxuICAgIC8vIHdlIG5lZWQgaW52b2ljZSB0ZW1wbGF0ZSBvbmx5IGZvciBuZXcgaW52b2ljZXNcbiAgICBpZiAoIWludm9pY2UuaWQpIHtcbiAgICAgIHRoaXMuYWRkQ29udHJvbCgndGVtcGxhdGUnLCBuZXcgRm9ybUNvbnRyb2wodGhpcy5kZWZhdWx0VGVtcGxhdGUpKTtcblxuICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZVJlbGF0ZWRGaWVsZHModGhpcy5kZWZhdWx0VGVtcGxhdGUpO1xuICAgIH1cblxuICAgIC8vIGludm9pY2UudGF4VHlwZSBpcyBhbHdheXMgTk9ORSAoJ05vIFRheCcpIHdoZW4gc29sZURldGFpbHMuaXNHU1QgPT09IGZhbHNlXG4gICAgaWYgKCF0aGlzLnNvbGVEZXRhaWxzR1NUKSB7XG4gICAgICB0aGlzLmdldCgndGF4VHlwZScpLnNldFZhbHVlKFNvbGVJbnZvaWNlVGF4VHlwZUVudW0uTk9fVEFYKTtcbiAgICAgIHRoaXMuZ2V0KCd0YXhUeXBlJykuZGlzYWJsZSgpO1xuXG4gICAgICAvLyBJdGVtcyBpc0dTVCBpcyBub3QgYXZhaWxhYmxlIHdoZW4gaW52b2ljZS50YXhUeXBlID09PSBOT05FICgnTm8gVGF4JylcbiAgICAgIHRoaXMuaXRlbXMuY29udHJvbHMuZm9yRWFjaCgoaXRlbUZvcm06IFNvbGVJbnZvaWNlSXRlbUZvcm0pID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlSXRlbUdTVChpdGVtRm9ybSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RlbkV2ZW50cygpO1xuICB9XG5cbiAgZ2V0IGl0ZW1zKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICAvLyBubyBuZWVkIHRvIGxpc3RlbiB0YXggdHlwZSBhbmQgaXRlbXMgY2hhcnQgYWNjb3VudHMgY2hhbmdlcyB3aGVuIHNvbGVEZXRhaWxzLmlzR1NUID09PSBmYWxzZVxuICAgIC8vIGJlY2F1c2UgaW52b2ljZSB0YXggdHlwZSBhbHdheXMgJ05vIFRheCcgaW4gdGhpcyBjYXNlIGFuZCBub3QgYXZhaWxhYmxlIGZvciBjaGFuZ2luZ1xuICAgIGlmICh0aGlzLnNvbGVEZXRhaWxzR1NUKSB7XG4gICAgICB0aGlzLmxpc3RlblRheFR5cGVDaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuaXRlbXMuY29udHJvbHMuZm9yRWFjaCgoaXRlbUZvcm06IFNvbGVJbnZvaWNlSXRlbUZvcm0pID0+IHtcbiAgICAgICAgdGhpcy5saXN0ZW5JdGVtQ2hhcnRBY2NvdW50c0NoYW5nZXMoaXRlbUZvcm0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gbm90aGluZyB0byBsaXN0ZW4gaWYgdGVtcGxhdGUgZmllbGQgaXMgbm90INGD0YfRiNGL0LUgKGVkaXQgaW52b2ljZSBjYXNlKVxuICAgIGlmICh0aGlzLmNvbnRhaW5zKCd0ZW1wbGF0ZScpKSB7XG4gICAgICB0aGlzLmxpc3RlblRlbXBsYXRlQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEl0ZW0oKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUZvcm06IFNvbGVJbnZvaWNlSXRlbUZvcm0gPSBuZXcgU29sZUludm9pY2VJdGVtRm9ybShwbGFpblRvQ2xhc3MoU29sZUludm9pY2VJdGVtLCB7fSkpO1xuICAgIC8vIG5vIG5lZWQgdG8gbGlzdGVuIGl0ZW1zIGNoYXJ0IGFjY291bnRzIGNoYW5nZXMgd2hlbiBzb2xlRGV0YWlscy5pc0dTVCA9PT0gZmFsc2VcbiAgICAvLyBiZWNhdXNlIGludm9pY2UgdGF4IHR5cGUgYWx3YXlzICdObyBUYXgnIGluIHRoaXMgY2FzZSBhbmQgbm90IGF2YWlsYWJsZSBmb3IgY2hhbmdpbmdcbiAgICBpZiAodGhpcy5zb2xlRGV0YWlsc0dTVCkge1xuICAgICAgdGhpcy5saXN0ZW5JdGVtQ2hhcnRBY2NvdW50c0NoYW5nZXMoaXRlbUZvcm0pO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMucHVzaChpdGVtRm9ybSk7XG4gIH1cblxuICByZW1vdmVJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHN1Ym1pdChkYXRhOiBvYmplY3QgPSB7fSk6IFNvbGVJbnZvaWNlIHtcbiAgICAvLyBAVE9ETyBBbGV4IFRULTIxOTA6IG1vdmUgY2hpbGQgY3VzdG9tIGZvcm1zIHN1Ym1pdCB0byBBYnN0cmFjdCBGb3JtXG4gICAgY29uc3QgaXRlbXM6IFNvbGVJbnZvaWNlSXRlbVtdID0gdGhpcy5pdGVtcy5jb250cm9scy5tYXAoKGNvbnRyb2w6IFNvbGVJbnZvaWNlSXRlbUZvcm0pID0+IGNvbnRyb2wuc3VibWl0KCkpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnN1Ym1pdChtZXJnZShkYXRhLCB7aXRlbXN9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRlZmF1bHQgdmFsdWVzIGZyb20gc2VsZWN0ZWQgaW52b2ljZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5UZW1wbGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5nZXQoJ3RlbXBsYXRlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodGVtcGxhdGU6IFNvbGVJbnZvaWNlVGVtcGxhdGUpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGVSZWxhdGVkRmllbGRzKHRlbXBsYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHU1QgaXMgbm90IGF2YWlsYWJsZSBmb3IgaXRlbXMgd2hlbiBpbnZvaWNlLnRheFR5cGUgPT09IE5PTkVcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVGF4VHlwZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5nZXQoJ3RheFR5cGUnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh0eXBlOiBTb2xlSW52b2ljZVRheFR5cGVFbnVtKSA9PiB7XG4gICAgICB0aGlzLml0ZW1zLmNvbnRyb2xzLmZvckVhY2goKGl0ZW1Gb3JtOiBTb2xlSW52b2ljZUl0ZW1Gb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYXJ0QWNjb3VudHM6IENoYXJ0QWNjb3VudHMgPSBpdGVtRm9ybS5nZXQoJ2NoYXJ0QWNjb3VudHMnKS52YWx1ZTtcblxuICAgICAgICAvLyBJdGVtIEdTVCBpcyBhdmFpbGFibGUgd2hlbiBpbnZvaWNlLnRheFR5cGUgIT09IE5PTkUgKCdObyBUYXgnKVxuICAgICAgICBpZiAodHlwZSAhPT0gU29sZUludm9pY2VUYXhUeXBlRW51bS5OT19UQVggJiYgY2hhcnRBY2NvdW50cz8uaXNHU1QgKSB7XG4gICAgICAgICAgdGhpcy5lbmFibGVJdGVtR1NUKGl0ZW1Gb3JtKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc2FibGVJdGVtR1NUKGl0ZW1Gb3JtKTtcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGVtcGxhdGVSZWxhdGVkRmllbGRzKHRlbXBsYXRlOiBTb2xlSW52b2ljZVRlbXBsYXRlKTogdm9pZCB7XG4gICAgdGhpcy5nZXQoJ2JhbmtBY2NvdW50Jykuc2V0VmFsdWUodGVtcGxhdGUuYmFua0FjY291bnQpO1xuXG4gICAgY29uc3QgZGF0ZUZyb206IERhdGUgPSB0aGlzLmdldCgnZGF0ZUZyb20nKS52YWx1ZTtcbiAgICBpZiAoZGF0ZUZyb20pIHtcbiAgICAgIHRoaXMuZ2V0KCdkYXRlVG8nKS5zZXRWYWx1ZShuZXcgRGF0ZShkYXRlRnJvbS5nZXRUaW1lKCkgKyB0ZW1wbGF0ZS50ZXJtVGltZSkpO1xuICAgIH1cblxuICAgIC8vIGludm9pY2UudGF4VHlwZSBpcyBhbHdheXMgJ05vIFRheCcgd2hlbiBzb2xlRGV0YWlscy5pc0dTVCA9IGZhbHNlIGFuZCBub3QgYXZhaWxhYmxlIGZvciBjaGFuZ2luZ1xuICAgIGlmICh0aGlzLnNvbGVEZXRhaWxzR1NUKSB7XG4gICAgICB0aGlzLmdldCgndGF4VHlwZScpLnNldFZhbHVlKHRlbXBsYXRlLnRheFR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHU1QgYXZhaWxhYmlsaXR5IGRlcGVuZHMgb2YgY2hhcnQgYWNjb3VudHMgaXNHU1QgZmxhZ1xuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5JdGVtQ2hhcnRBY2NvdW50c0NoYW5nZXMoaXRlbUZvcm06IFNvbGVJbnZvaWNlSXRlbUZvcm0pOiB2b2lkIHtcbiAgICBpdGVtRm9ybS5nZXQoJ2NoYXJ0QWNjb3VudHMnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChjaGFydEFjY291bnRzOiBDaGFydEFjY291bnRzKSA9PiB7XG4gICAgICAvLyBpdGVtLmlzR1NUIGlzIGF2YWlsYWJsZSBvbmx5IHdoZW4gaXRlbS5jaGFydEFjY291bnRzLmlzR1NUID09PSB0cnVlLCBzb2xlRGV0YWlscy5pc0dTVCA9PT0gdHJ1ZSBhbmQgaW52b2ljZS50YXhUeXBlICE9PSBOT05FICgnTm8gVGF4JylcbiAgICAgIGlmICh0aGlzLnNvbGVEZXRhaWxzR1NUICYmIGNoYXJ0QWNjb3VudHMuaXNHU1QgJiYgIXRoaXMuY3VycmVudFZhbHVlLmlzTm9UYXgoKSkge1xuICAgICAgICB0aGlzLmVuYWJsZUl0ZW1HU1QoaXRlbUZvcm0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlzYWJsZUl0ZW1HU1QoaXRlbUZvcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlSXRlbUdTVChpdGVtRm9ybTogU29sZUludm9pY2VJdGVtRm9ybSk6IHZvaWQge1xuICAgIGl0ZW1Gb3JtLmdldCgnaXNHU1QnKS5zZXRWYWx1ZShmYWxzZSk7XG4gICAgaXRlbUZvcm0uZ2V0KCdpc0dTVCcpLmRpc2FibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgR1NUIGZpZWxkIGZvciBwYXNzZWQgaXRlbSBmb3JtLiBWYWx1ZSBpcyBhbHdheXMgdHJ1ZSBieSBkZWZhdWx0IGJlY2F1c2Ugb25seSBjYXNlIHdoZW4gdGhpcyBmaWVsZCBpcyBlbmFibGVkIGlzXG4gICAqIHdoZW4gQ2hhcnRBY2NvdW50cy5pc0dTVCA9PT0gdHJ1ZSwgc28gd2UganVzdCB1c2UgZGVmYXVsdCB2YWx1ZSBmcm9tIGNoYXJ0QWNjb3VudHMuaXNHU1RcbiAgICovXG4gIHByaXZhdGUgZW5hYmxlSXRlbUdTVChpdGVtRm9ybTogU29sZUludm9pY2VJdGVtRm9ybSk6IHZvaWQge1xuICAgIGl0ZW1Gb3JtLmdldCgnaXNHU1QnKS5zZXRWYWx1ZSh0cnVlKTtcbiAgICBpdGVtRm9ybS5nZXQoJ2lzR1NUJykuZW5hYmxlKCk7XG4gIH1cbn1cbiJdfQ==
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sZS1pbnZvaWNlLmZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvZm9ybXMvc29sZS9zb2xlLWludm9pY2UuZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFHbkY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsWUFBeUI7SUFDNUQsWUFDVSxPQUFvQixFQUNwQixjQUF1QjtJQUMvQixxQ0FBcUM7SUFDN0IsZUFBb0M7UUFFNUMsS0FBSyxDQUFDO1lBQ0osVUFBVSxFQUFFLElBQUksU0FBUyxDQUFDO2dCQUN4QixRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzlFLE1BQU0sRUFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzVELEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzFELE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxF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QUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUE2QjtRQUNsRCxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxhQUFhLENBQUMsUUFBNkI7UUFDakQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBYyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksWUFBWTtRQUNkLE1BQU0sWUFBWSxHQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUU3QyxPQUFPLFlBQVksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FDNUMsRUFBRSxFQUNGLElBQUksQ0FBQyxLQUFLLGtDQUNOLFlBQVksQ0FBQyxVQUFVLEtBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLElBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Rm9ybSB9IGZyb20gJy4uL2Fic3RyYWN0LmZvcm0nO1xuaW1wb3J0IHsgU29sZUludm9pY2UsIFNvbGVJbnZvaWNlSXRlbSwgU29sZUludm9pY2VUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTb2xlSW52b2ljZUl0ZW1Gb3JtIH0gZnJvbSAnLi9zb2xlLWludm9pY2UtaXRlbS5mb3JtJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IElFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ldmVudC1saXN0ZW5lci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU29sZUludm9pY2VUYXhUeXBlRW51bSB9IGZyb20gJy4uLy4uL2RiL0VudW1zL3NvbGUtaW52b2ljZS10YXgtdHlwZS5lbnVtJztcbmltcG9ydCB7IENoYXJ0QWNjb3VudHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2hhcnQtYWNjb3VudHMvY2hhcnQtYWNjb3VudHMnO1xuXG4vKipcbiAqIEZvcm0gaXMgZGl2aWRlZCBpbnRvIHR3byBncm91cHMsIHNpbmNlIHRoZSBjcmVhdGlvbiBvZiBTb2xlIGludm9pY2UgdGFrZXMgcGxhY2UgaW4gdHdvIHN0ZXBzOlxuICogYSBjb21tb24gaW52b2ljZSBkYXRhIGFuZCBzb2xlIGludm9pY2UgaXRlbXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTb2xlSW52b2ljZUZvcm0gZXh0ZW5kcyBBYnN0cmFjdEZvcm08U29sZUludm9pY2U+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGludm9pY2U6IFNvbGVJbnZvaWNlLFxuICAgIHByaXZhdGUgc29sZURldGFpbHNHU1Q6IGJvb2xlYW4sXG4gICAgLy8gZGVmYXVsdCB0ZW1wbGF0ZSB0byBiZSBwcmVzZWxlY3RlZFxuICAgIHByaXZhdGUgZGVmYXVsdFRlbXBsYXRlOiBTb2xlSW52b2ljZVRlbXBsYXRlLFxuICApIHtcbiAgICBzdXBlcih7XG4gICAgICBjb21tb25EYXRhOiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgZGF0ZUZyb206IG5ldyBGb3JtQ29udHJvbChpbnZvaWNlLmRhdGVGcm9tIHx8IG5ldyBEYXRlKCksIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBkYXRlVG86IG5ldyBGb3JtQ29udHJvbChpbnZvaWNlLmRhdGVUbywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIHBheWVyOiBuZXcgRm9ybUNvbnRyb2woaW52b2ljZS5wYXllciwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIHRheFR5cGU6IG5ldyBGb3JtQ29udHJvbChpbnZvaWNlLnRheFR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBiYW5rQWNjb3VudDogbmV3IEZvcm1Db250cm9sKGludm9pY2UuYmFua0FjY291bnQsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICByZWZlcmVuY2U6IG5ldyBGb3JtQ29udHJvbChpbnZvaWNlLnJlZmVyZW5jZSlcbiAgICAgIH0pLFxuICAgICAgaXRlbXM6IG5ldyBGb3JtQXJyYXkoKGludm9pY2UuaXRlbXMgfHwgW3BsYWluVG9DbGFzcyhTb2xlSW52b2ljZUl0ZW0sIHt9KV0pLm1hcCgoaXRlbTogU29sZUludm9pY2VJdGVtKSA9PiBuZXcgU29sZUludm9pY2VJdGVtRm9ybShpdGVtKSkpLFxuICAgIH0sIGludm9pY2UpO1xuXG4gICAgLy8gd2UgbmVlZCBpbnZvaWNlIHRlbXBsYXRlIG9ubHkgZm9yIG5ldyBpbnZvaWNlc1xuICAgIGlmICghaW52b2ljZS5pZCkge1xuICAgICAgKHRoaXMuY29tbW9uRGF0YSkuYWRkQ29udHJvbCgndGVtcGxhdGUnLCBuZXcgRm9ybUNvbnRyb2wodGhpcy5kZWZhdWx0VGVtcGxhdGUpKTtcblxuICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZVJlbGF0ZWRGaWVsZHModGhpcy5kZWZhdWx0VGVtcGxhdGUpO1xuICAgIH1cblxuICAgIC8vIGludm9pY2UudGF4VHlwZSBpcyBhbHdheXMgTk9ORSAoJ05vIFRheCcpIHdoZW4gc29sZURldGFpbHMuaXNHU1QgPT09IGZhbHNlXG4gICAgaWYgKCF0aGlzLnNvbGVEZXRhaWxzR1NUKSB7XG4gICAgICB0aGlzLmNvbW1vbkRhdGEuZ2V0KCd0YXhUeXBlJykuc2V0VmFsdWUoU29sZUludm9pY2VUYXhUeXBlRW51bS5OT19UQVgpO1xuICAgICAgdGhpcy5jb21tb25EYXRhLmdldCgndGF4VHlwZScpLmRpc2FibGUoKTtcblxuICAgICAgLy8gSXRlbXMgaXNHU1QgaXMgbm90IGF2YWlsYWJsZSB3aGVuIGludm9pY2UudGF4VHlwZSA9PT0gTk9ORSAoJ05vIFRheCcpXG4gICAgICB0aGlzLml0ZW1zLmNvbnRyb2xzLmZvckVhY2goKGl0ZW1Gb3JtOiBTb2xlSW52b2ljZUl0ZW1Gb3JtKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUl0ZW1HU1QoaXRlbUZvcm0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5saXN0ZW5FdmVudHMoKTtcbiAgfVxuXG4gIGdldCBpdGVtcygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgLy8gbm8gbmVlZCB0byBsaXN0ZW4gdGF4IHR5cGUgYW5kIGl0ZW1zIGNoYXJ0IGFjY291bnRzIGNoYW5nZXMgd2hlbiBzb2xlRGV0YWlscy5pc0dTVCA9PT0gZmFsc2VcbiAgICAvLyBiZWNhdXNlIGludm9pY2UgdGF4IHR5cGUgYWx3YXlzICdObyBUYXgnIGluIHRoaXMgY2FzZSBhbmQgbm90IGF2YWlsYWJsZSBmb3IgY2hhbmdpbmdcbiAgICBpZiAodGhpcy5zb2xlRGV0YWlsc0dTVCkge1xuICAgICAgdGhpcy5saXN0ZW5UYXhUeXBlQ2hhbmdlcygpO1xuXG4gICAgICB0aGlzLml0ZW1zLmNvbnRyb2xzLmZvckVhY2goKGl0ZW1Gb3JtOiBTb2xlSW52b2ljZUl0ZW1Gb3JtKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdGVuSXRlbUNoYXJ0QWNjb3VudHNDaGFuZ2VzKGl0ZW1Gb3JtKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIG5vdGhpbmcgdG8gbGlzdGVuIGlmIHRlbXBsYXRlIGZpZWxkIGlzIG5vdCBleGlzdCAoZWRpdCBpbnZvaWNlIGNhc2UpXG4gICAgaWYgKCh0aGlzLmNvbW1vbkRhdGEpLmNvbnRhaW5zKCd0ZW1wbGF0ZScpKSB7XG4gICAgICB0aGlzLmxpc3RlblRlbXBsYXRlQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEl0ZW0oKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUZvcm06IFNvbGVJbnZvaWNlSXRlbUZvcm0gPSBuZXcgU29sZUludm9pY2VJdGVtRm9ybShwbGFpblRvQ2xhc3MoU29sZUludm9pY2VJdGVtLCB7fSkpO1xuICAgIC8vIG5vIG5lZWQgdG8gbGlzdGVuIGl0ZW1zIGNoYXJ0IGFjY291bnRzIGNoYW5nZXMgd2hlbiBzb2xlRGV0YWlscy5pc0dTVCA9PT0gZmFsc2VcbiAgICAvLyBiZWNhdXNlIGludm9pY2UgdGF4IHR5cGUgYWx3YXlzICdObyBUYXgnIGluIHRoaXMgY2FzZSBhbmQgbm90IGF2YWlsYWJsZSBmb3IgY2hhbmdpbmdcbiAgICBpZiAodGhpcy5zb2xlRGV0YWlsc0dTVCkge1xuICAgICAgdGhpcy5saXN0ZW5JdGVtQ2hhcnRBY2NvdW50c0NoYW5nZXMoaXRlbUZvcm0pO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMucHVzaChpdGVtRm9ybSk7XG4gIH1cblxuICByZW1vdmVJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHN1Ym1pdChkYXRhOiBvYmplY3QgPSB7fSk6IFNvbGVJbnZvaWNlIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMudmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGludm9pY2VJbnN0YW5jZTogU29sZUludm9pY2UgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KGludm9pY2VJbnN0YW5jZSk7XG4gICAgICByZXR1cm4gaW52b2ljZUluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkZWZhdWx0IHZhbHVlcyBmcm9tIHNlbGVjdGVkIGludm9pY2UgdGVtcGxhdGVcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVGVtcGxhdGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29tbW9uRGF0YS5nZXQoJ3RlbXBsYXRlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodGVtcGxhdGU6IFNvbGVJbnZvaWNlVGVtcGxhdGUpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGVSZWxhdGVkRmllbGRzKHRlbXBsYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHU1QgaXMgbm90IGF2YWlsYWJsZSBmb3IgaXRlbXMgd2hlbiBpbnZvaWNlLnRheFR5cGUgPT09IE5PTkVcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVGF4VHlwZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb21tb25EYXRhLmdldCgndGF4VHlwZScpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHR5cGU6IFNvbGVJbnZvaWNlVGF4VHlwZUVudW0pID0+IHtcbiAgICAgIHRoaXMuaXRlbXMuY29udHJvbHMuZm9yRWFjaCgoaXRlbUZvcm06IFNvbGVJbnZvaWNlSXRlbUZvcm0pID0+IHtcbiAgICAgICAgY29uc3QgY2hhcnRBY2NvdW50czogQ2hhcnRBY2NvdW50cyA9IGl0ZW1Gb3JtLmdldCgnY2hhcnRBY2NvdW50cycpLnZhbHVlO1xuXG4gICAgICAgIC8vIEl0ZW0gR1NUIGlzIGF2YWlsYWJsZSB3aGVuIGludm9pY2UudGF4VHlwZSAhPT0gTk9ORSAoJ05vIFRheCcpXG4gICAgICAgIGlmICh0eXBlICE9PSBTb2xlSW52b2ljZVRheFR5cGVFbnVtLk5PX1RBWCAmJiBjaGFydEFjY291bnRzPy5pc0dTVCApIHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUl0ZW1HU1QoaXRlbUZvcm0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzYWJsZUl0ZW1HU1QoaXRlbUZvcm0pO1xuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUZW1wbGF0ZVJlbGF0ZWRGaWVsZHModGVtcGxhdGU6IFNvbGVJbnZvaWNlVGVtcGxhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1vbkRhdGEuZ2V0KCdiYW5rQWNjb3VudCcpLnNldFZhbHVlKHRlbXBsYXRlLmJhbmtBY2NvdW50KTtcblxuICAgIGNvbnN0IGRhdGVGcm9tOiBEYXRlID0gdGhpcy5jb21tb25EYXRhLmdldCgnZGF0ZUZyb20nKS52YWx1ZTtcbiAgICBpZiAoZGF0ZUZyb20pIHtcbiAgICAgIHRoaXMuY29tbW9uRGF0YS5nZXQoJ2RhdGVUbycpLnNldFZhbHVlKG5ldyBEYXRlKGRhdGVGcm9tLmdldFRpbWUoKSArIHRlbXBsYXRlLnRlcm1UaW1lKSk7XG4gICAgfVxuXG4gICAgLy8gaW52b2ljZS50YXhUeXBlIGlzIGFsd2F5cyAnTm8gVGF4JyB3aGVuIHNvbGVEZXRhaWxzLmlzR1NUID0gZmFsc2UgYW5kIG5vdCBhdmFpbGFibGUgZm9yIGNoYW5naW5nXG4gICAgaWYgKHRoaXMuc29sZURldGFpbHNHU1QpIHtcbiAgICAgIHRoaXMuY29tbW9uRGF0YS5nZXQoJ3RheFR5cGUnKS5zZXRWYWx1ZSh0ZW1wbGF0ZS50YXhUeXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR1NUIGF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uIGNoYXJ0IGFjY291bnRzIGlzR1NUIGZsYWdcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuSXRlbUNoYXJ0QWNjb3VudHNDaGFuZ2VzKGl0ZW1Gb3JtOiBTb2xlSW52b2ljZUl0ZW1Gb3JtKTogdm9pZCB7XG4gICAgaXRlbUZvcm0uZ2V0KCdjaGFydEFjY291bnRzJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoY2hhcnRBY2NvdW50czogQ2hhcnRBY2NvdW50cykgPT4ge1xuICAgICAgLy8gaXRlbS5pc0dTVCBpcyBhdmFpbGFibGUgb25seSB3aGVuIGl0ZW0uY2hhcnRBY2NvdW50cy5pc0dTVCA9PT0gdHJ1ZSwgc29sZURldGFpbHMuaXNHU1QgPT09IHRydWUgYW5kIGludm9pY2UudGF4VHlwZSAhPT0gTk9ORSAoJ05vIFRheCcpXG4gICAgICBpZiAodGhpcy5zb2xlRGV0YWlsc0dTVCAmJiBjaGFydEFjY291bnRzLmlzR1NUICYmICF0aGlzLmN1cnJlbnRWYWx1ZS5pc05vVGF4KCkpIHtcbiAgICAgICAgdGhpcy5lbmFibGVJdGVtR1NUKGl0ZW1Gb3JtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpc2FibGVJdGVtR1NUKGl0ZW1Gb3JtKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUl0ZW1HU1QoaXRlbUZvcm06IFNvbGVJbnZvaWNlSXRlbUZvcm0pOiB2b2lkIHtcbiAgICBpdGVtRm9ybS5nZXQoJ2lzR1NUJykuc2V0VmFsdWUoZmFsc2UpO1xuICAgIGl0ZW1Gb3JtLmdldCgnaXNHU1QnKS5kaXNhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIEdTVCBmaWVsZCBmb3IgcGFzc2VkIGl0ZW0gZm9ybS4gVmFsdWUgaXMgYWx3YXlzIHRydWUgYnkgZGVmYXVsdCBiZWNhdXNlIG9ubHkgY2FzZSB3aGVuIHRoaXMgZmllbGQgaXMgZW5hYmxlZCBpc1xuICAgKiB3aGVuIENoYXJ0QWNjb3VudHMuaXNHU1QgPT09IHRydWUsIHNvIHdlIGp1c3QgdXNlIGRlZmF1bHQgdmFsdWUgZnJvbSBjaGFydEFjY291bnRzLmlzR1NUXG4gICAqL1xuICBwcml2YXRlIGVuYWJsZUl0ZW1HU1QoaXRlbUZvcm06IFNvbGVJbnZvaWNlSXRlbUZvcm0pOiB2b2lkIHtcbiAgICBpdGVtRm9ybS5nZXQoJ2lzR1NUJykuc2V0VmFsdWUodHJ1ZSk7XG4gICAgaXRlbUZvcm0uZ2V0KCdpc0dTVCcpLmVuYWJsZSgpO1xuICB9XG5cbiAgZ2V0IGNvbW1vbkRhdGEoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ2NvbW1vbkRhdGEnKSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICAvKipcbiAgICogUmV3cml0ZSBhYnN0cmFjdCBmb3JtIGdldHRlciB0byBmbGF0IFwiY29tbW9uRGF0YVwiIGZpZWxkLCB3aGljaCBpcyBub3QgaW4gdGhlIGNsYXNzXG4gICAqL1xuICBnZXQgY3VycmVudFZhbHVlKCk6IFNvbGVJbnZvaWNlIHtcbiAgICBjb25zdCBmb3JtUmF3VmFsdWU6IGFueSA9IHRoaXMuZ2V0UmF3VmFsdWUoKTtcblxuICAgIHJldHVybiBwbGFpblRvQ2xhc3MoU29sZUludm9pY2UsIE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHRoaXMubW9kZWwsXG4gICAgICB7Li4uZm9ybVJhd1ZhbHVlLmNvbW1vbkRhdGEsIGl0ZW1zOiBmb3JtUmF3VmFsdWUuaXRlbXN9XG4gICAgKSk7XG4gIH1cbn1cbiJdfQ==
@@ -5,6 +5,24 @@ export class BasReport extends BasReportBase {
5
5
  get taxWithheldTotal() {
6
6
  return this.taxWithheldSalary + this.taxWithheldNoABN;
7
7
  }
8
+ get paygTaxInstalmentOwedToATO() {
9
+ return this.paygTaxInstalment > 0 ? this.paygTaxInstalment : 0;
10
+ }
11
+ get paygTaxInstalmentOwedByATO() {
12
+ return this.paygTaxInstalment < 0 ? Math.abs(this.paygTaxInstalment) : 0;
13
+ }
14
+ get fuelTaxCreditOwedToATO() {
15
+ return this.fuelTaxCredit < 0 ? this.fuelTaxCredit : 0;
16
+ }
17
+ get fuelTaxCreditOwedByATO() {
18
+ return this.fuelTaxCredit > 0 ? Math.abs(this.fuelTaxCredit) : 0;
19
+ }
20
+ get owesToATO() {
21
+ return this.incomeGST + this.taxWithheldTotal + this.paygTaxInstalmentOwedToATO + this.fuelTaxCreditOwedToATO;
22
+ }
23
+ get owedByATO() {
24
+ return this.expenseGST + this.paygTaxInstalmentOwedByATO + this.fuelTaxCreditOwedByATO;
25
+ }
8
26
  /**
9
27
  * GST payable to the ATO, or refundable from the ATO in case it's negative
10
28
  */
@@ -18,4 +36,4 @@ __decorate([
18
36
  __decorate([
19
37
  Type(() => Date)
20
38
  ], BasReport.prototype, "dateTo", void 0);
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzLXJlcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9tb2RlbHMvc29sZS9iYXMtcmVwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxJQUFJLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUV2QyxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFPMUMsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNoSCxDQUFDO0NBQ0Y7QUFmQztJQURDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7MkNBQ0Y7QUFHZjtJQURDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7eUNBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNSZXBvcnQgYXMgQmFzUmVwb3J0QmFzZSB9IGZyb20gXCIuLi8uLi9kYi9Nb2RlbHMvc29sZS9iYXMtcmVwb3J0XCI7XG5pbXBvcnQge1R5cGV9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcblxuZXhwb3J0IGNsYXNzIEJhc1JlcG9ydCBleHRlbmRzIEJhc1JlcG9ydEJhc2Uge1xuICBAVHlwZSgoKSA9PiBEYXRlKVxuICBkYXRlRnJvbTogRGF0ZTtcblxuICBAVHlwZSgoKSA9PiBEYXRlKVxuICBkYXRlVG86IERhdGU7XG5cbiAgZ2V0IHRheFdpdGhoZWxkVG90YWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YXhXaXRoaGVsZFNhbGFyeSArIHRoaXMudGF4V2l0aGhlbGROb0FCTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHU1QgcGF5YWJsZSB0byB0aGUgQVRPLCBvciByZWZ1bmRhYmxlIGZyb20gdGhlIEFUTyBpbiBjYXNlIGl0J3MgbmVnYXRpdmVcbiAgICovXG4gIGdldCBnc3QoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pbmNvbWVHU1QgLSB0aGlzLmV4cGVuc2VHU1QgKyB0aGlzLnRheFdpdGhoZWxkVG90YWwgKyB0aGlzLnBheWdUYXhJbnN0YWxtZW50IC0gdGhpcy5mdWVsVGF4Q3JlZGl0O1xuICB9XG59XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzLXJlcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9tb2RlbHMvc29sZS9iYXMtcmVwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxJQUFJLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUV2QyxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFPMUMsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLDBCQUEwQjtRQUM1QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUFJLDBCQUEwQjtRQUM1QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDaEgsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3pGLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNoSCxDQUFDO0NBQ0Y7QUF2Q0M7SUFEQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDOzJDQUNGO0FBR2Y7SUFEQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO3lDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzUmVwb3J0IGFzIEJhc1JlcG9ydEJhc2UgfSBmcm9tIFwiLi4vLi4vZGIvTW9kZWxzL3NvbGUvYmFzLXJlcG9ydFwiO1xuaW1wb3J0IHtUeXBlfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5cbmV4cG9ydCBjbGFzcyBCYXNSZXBvcnQgZXh0ZW5kcyBCYXNSZXBvcnRCYXNlIHtcbiAgQFR5cGUoKCkgPT4gRGF0ZSlcbiAgZGF0ZUZyb206IERhdGU7XG5cbiAgQFR5cGUoKCkgPT4gRGF0ZSlcbiAgZGF0ZVRvOiBEYXRlO1xuXG4gIGdldCB0YXhXaXRoaGVsZFRvdGFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGF4V2l0aGhlbGRTYWxhcnkgKyB0aGlzLnRheFdpdGhoZWxkTm9BQk47XG4gIH1cblxuICBnZXQgcGF5Z1RheEluc3RhbG1lbnRPd2VkVG9BVE8oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXlnVGF4SW5zdGFsbWVudCA+IDAgPyB0aGlzLnBheWdUYXhJbnN0YWxtZW50IDogMDtcbiAgfVxuXG4gIGdldCBwYXlnVGF4SW5zdGFsbWVudE93ZWRCeUFUTygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBheWdUYXhJbnN0YWxtZW50IDwgMCA/IE1hdGguYWJzKHRoaXMucGF5Z1RheEluc3RhbG1lbnQpIDogMDtcbiAgfVxuXG4gIGdldCBmdWVsVGF4Q3JlZGl0T3dlZFRvQVRPKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZnVlbFRheENyZWRpdCA8IDAgPyB0aGlzLmZ1ZWxUYXhDcmVkaXQgOiAwO1xuICB9XG5cbiAgZ2V0IGZ1ZWxUYXhDcmVkaXRPd2VkQnlBVE8oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mdWVsVGF4Q3JlZGl0ID4gMCA/IE1hdGguYWJzKHRoaXMuZnVlbFRheENyZWRpdCkgOiAwO1xuICB9XG5cbiAgZ2V0IG93ZXNUb0FUTygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmluY29tZUdTVCArIHRoaXMudGF4V2l0aGhlbGRUb3RhbCArIHRoaXMucGF5Z1RheEluc3RhbG1lbnRPd2VkVG9BVE8gKyB0aGlzLmZ1ZWxUYXhDcmVkaXRPd2VkVG9BVE87XG4gIH1cblxuICBnZXQgb3dlZEJ5QVRPKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXhwZW5zZUdTVCArIHRoaXMucGF5Z1RheEluc3RhbG1lbnRPd2VkQnlBVE8gKyB0aGlzLmZ1ZWxUYXhDcmVkaXRPd2VkQnlBVE87XG4gIH1cblxuICAvKipcbiAgICogR1NUIHBheWFibGUgdG8gdGhlIEFUTywgb3IgcmVmdW5kYWJsZSBmcm9tIHRoZSBBVE8gaW4gY2FzZSBpdCdzIG5lZ2F0aXZlXG4gICAqL1xuICBnZXQgZ3N0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5jb21lR1NUIC0gdGhpcy5leHBlbnNlR1NUICsgdGhpcy50YXhXaXRoaGVsZFRvdGFsICsgdGhpcy5wYXlnVGF4SW5zdGFsbWVudCAtIHRoaXMuZnVlbFRheENyZWRpdDtcbiAgfVxufVxuIl19
@@ -6,6 +6,7 @@ import merge from 'lodash/merge';
6
6
  import { map } from 'rxjs/operators';
7
7
  import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
8
8
  import { AppEvent } from '../../../../models/event/app-event';
9
+ import last from 'lodash/last';
9
10
  import * as i0 from "@angular/core";
10
11
  export class SoleInvoiceService extends RestService {
11
12
  constructor() {
@@ -30,6 +31,16 @@ export class SoleInvoiceService extends RestService {
30
31
  sendEmail(invoice) {
31
32
  return this.http.post(`${this.environment.apiV2}/${this.url}/${invoice.id}/send`, {});
32
33
  }
34
+ /**
35
+ * Return the next number from the last invoice.
36
+ * Basically needed to create a new invoice to show its number when the invoice has not yet been sent to the backend
37
+ */
38
+ getNewInvoiceNumber() {
39
+ if (!this.cache) {
40
+ return 0;
41
+ }
42
+ return last(this.cache).number + 1;
43
+ }
33
44
  }
34
45
  SoleInvoiceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SoleInvoiceService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
35
46
  SoleInvoiceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SoleInvoiceService, providedIn: 'root' });
@@ -39,4 +50,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
39
50
  providedIn: 'root'
40
51
  }]
41
52
  }] });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sZS1pbnZvaWNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9zb2xlL3NvbGUtaW52b2ljZS9zb2xlLWludm9pY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFMUYsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBSzlELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxXQUF5QztJQUhqRjs7UUFJRSxlQUFVLEdBQXVCLFdBQVcsQ0FBQztRQUM3QyxRQUFHLEdBQVcsZUFBZSxDQUFDO1FBQzlCLFlBQU8sR0FBWSxJQUFJLENBQUM7S0F1QnpCO0lBckJDLFlBQVksQ0FBQyxPQUFvQixFQUFFLE1BQStCO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFDNUQsMENBQTBDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQW9CLEVBQUUsUUFBa0I7UUFDOUMsMENBQTBDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUM1RixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsZ0JBQTZCLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUU5RyxPQUFPLGdCQUFnQixDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQW9CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDOztnSEF6QlUsa0JBQWtCO29IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTb2xlSW52b2ljZSBhcyBTb2xlSW52b2ljZUJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9Nb2RlbHMvc29sZS9zb2xlLWludm9pY2UnO1xuaW1wb3J0IHsgU29sZUludm9pY2UsIERvY3VtZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IFNvbGVJbnZvaWNlU3RhdHVzZXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvRW51bXMvc29sZS1pbnZvaWNlLXN0YXR1c2VzLmVudW0nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU29sZUludm9pY2VTZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8U29sZUludm9pY2VCYXNlLCBTb2xlSW52b2ljZT4ge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgU29sZUludm9pY2UgPSBTb2xlSW52b2ljZTtcbiAgdXJsOiBzdHJpbmcgPSAnc29sZS1pbnZvaWNlcyc7XG4gIGlzSHlkcmE6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHVwZGF0ZVN0YXR1cyhpbnZvaWNlOiBTb2xlSW52b2ljZSwgc3RhdHVzOiBTb2xlSW52b2ljZVN0YXR1c2VzRW51bSk6IE9ic2VydmFibGU8U29sZUludm9pY2U+IHtcbiAgICBjb25zdCB1cGRhdGVkSW52b2ljZSA9IE9iamVjdC5hc3NpZ24oe30sIGludm9pY2UsIHtzdGF0dXN9KTtcbiAgICAvLyB1c2UgaWQgb25seSB0byBhdm9pZCB1bmV4cGVjdGVkIGNoYW5nZXNcbiAgICByZXR1cm4gdGhpcy51cGRhdGUodXBkYXRlZEludm9pY2UpO1xuICB9XG5cbiAgcHVibGlzaChpbnZvaWNlOiBTb2xlSW52b2ljZSwgZG9jdW1lbnQ6IERvY3VtZW50KTogT2JzZXJ2YWJsZTxTb2xlSW52b2ljZT4ge1xuICAgIC8vIHVzZSBpZCBvbmx5IHRvIGF2b2lkIHVuZXhwZWN0ZWQgY2hhbmdlc1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZShtZXJnZSh7fSwgaW52b2ljZSwgeyBkb2N1bWVudCwgc3RhdHVzOiBTb2xlSW52b2ljZVN0YXR1c2VzRW51bS5QRU5ESU5HIH0pKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChwdWJsaXNoZWRJbnZvaWNlOiBTb2xlSW52b2ljZSkgPT4ge1xuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uU09MRV9JTlZPSUNFX1BVQkxJU0hFRCwgcHVibGlzaGVkSW52b2ljZSkpO1xuXG4gICAgICAgIHJldHVybiBwdWJsaXNoZWRJbnZvaWNlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2VuZEVtYWlsKGludm9pY2U6IFNvbGVJbnZvaWNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7aW52b2ljZS5pZH0vc2VuZGAsIHt9KTtcbiAgfVxufVxuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sZS1pbnZvaWNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9zb2xlL3NvbGUtaW52b2ljZS9zb2xlLWludm9pY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFMUYsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUQsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDOztBQUsvQixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsV0FBeUM7SUFIakY7O1FBSUUsZUFBVSxHQUF1QixXQUFXLENBQUM7UUFDN0MsUUFBRyxHQUFXLGVBQWUsQ0FBQztRQUM5QixZQUFPLEdBQVksSUFBSSxDQUFDO0tBbUN6QjtJQWpDQyxZQUFZLENBQUMsT0FBb0IsRUFBRSxNQUErQjtRQUNoRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQzVELDBDQUEwQztRQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFvQixFQUFFLFFBQWtCO1FBQzlDLDBDQUEwQztRQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDNUYsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGdCQUE2QixFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFFOUcsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFvQjtRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDOztnSEFyQ1Usa0JBQWtCO29IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTb2xlSW52b2ljZSBhcyBTb2xlSW52b2ljZUJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9Nb2RlbHMvc29sZS9zb2xlLWludm9pY2UnO1xuaW1wb3J0IHsgU29sZUludm9pY2UsIERvY3VtZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IFNvbGVJbnZvaWNlU3RhdHVzZXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvRW51bXMvc29sZS1pbnZvaWNlLXN0YXR1c2VzLmVudW0nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCBsYXN0IGZyb20gJ2xvZGFzaC9sYXN0JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU29sZUludm9pY2VTZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8U29sZUludm9pY2VCYXNlLCBTb2xlSW52b2ljZT4ge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgU29sZUludm9pY2UgPSBTb2xlSW52b2ljZTtcbiAgdXJsOiBzdHJpbmcgPSAnc29sZS1pbnZvaWNlcyc7XG4gIGlzSHlkcmE6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHVwZGF0ZVN0YXR1cyhpbnZvaWNlOiBTb2xlSW52b2ljZSwgc3RhdHVzOiBTb2xlSW52b2ljZVN0YXR1c2VzRW51bSk6IE9ic2VydmFibGU8U29sZUludm9pY2U+IHtcbiAgICBjb25zdCB1cGRhdGVkSW52b2ljZSA9IE9iamVjdC5hc3NpZ24oe30sIGludm9pY2UsIHtzdGF0dXN9KTtcbiAgICAvLyB1c2UgaWQgb25seSB0byBhdm9pZCB1bmV4cGVjdGVkIGNoYW5nZXNcbiAgICByZXR1cm4gdGhpcy51cGRhdGUodXBkYXRlZEludm9pY2UpO1xuICB9XG5cbiAgcHVibGlzaChpbnZvaWNlOiBTb2xlSW52b2ljZSwgZG9jdW1lbnQ6IERvY3VtZW50KTogT2JzZXJ2YWJsZTxTb2xlSW52b2ljZT4ge1xuICAgIC8vIHVzZSBpZCBvbmx5IHRvIGF2b2lkIHVuZXhwZWN0ZWQgY2hhbmdlc1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZShtZXJnZSh7fSwgaW52b2ljZSwgeyBkb2N1bWVudCwgc3RhdHVzOiBTb2xlSW52b2ljZVN0YXR1c2VzRW51bS5QRU5ESU5HIH0pKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChwdWJsaXNoZWRJbnZvaWNlOiBTb2xlSW52b2ljZSkgPT4ge1xuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uU09MRV9JTlZPSUNFX1BVQkxJU0hFRCwgcHVibGlzaGVkSW52b2ljZSkpO1xuXG4gICAgICAgIHJldHVybiBwdWJsaXNoZWRJbnZvaWNlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2VuZEVtYWlsKGludm9pY2U6IFNvbGVJbnZvaWNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7aW52b2ljZS5pZH0vc2VuZGAsIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5leHQgbnVtYmVyIGZyb20gdGhlIGxhc3QgaW52b2ljZS5cbiAgICogQmFzaWNhbGx5IG5lZWRlZCB0byBjcmVhdGUgYSBuZXcgaW52b2ljZSB0byBzaG93IGl0cyBudW1iZXIgd2hlbiB0aGUgaW52b2ljZSBoYXMgbm90IHlldCBiZWVuIHNlbnQgdG8gdGhlIGJhY2tlbmRcbiAgICovXG4gIGdldE5ld0ludm9pY2VOdW1iZXIoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuY2FjaGUpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0KHRoaXMuY2FjaGUpLm51bWJlciArIDE7XG4gIH1cbn1cbiJdfQ==
@@ -4202,6 +4202,24 @@ class BasReport extends BasReport$1 {
4202
4202
  get taxWithheldTotal() {
4203
4203
  return this.taxWithheldSalary + this.taxWithheldNoABN;
4204
4204
  }
4205
+ get paygTaxInstalmentOwedToATO() {
4206
+ return this.paygTaxInstalment > 0 ? this.paygTaxInstalment : 0;
4207
+ }
4208
+ get paygTaxInstalmentOwedByATO() {
4209
+ return this.paygTaxInstalment < 0 ? Math.abs(this.paygTaxInstalment) : 0;
4210
+ }
4211
+ get fuelTaxCreditOwedToATO() {
4212
+ return this.fuelTaxCredit < 0 ? this.fuelTaxCredit : 0;
4213
+ }
4214
+ get fuelTaxCreditOwedByATO() {
4215
+ return this.fuelTaxCredit > 0 ? Math.abs(this.fuelTaxCredit) : 0;
4216
+ }
4217
+ get owesToATO() {
4218
+ return this.incomeGST + this.taxWithheldTotal + this.paygTaxInstalmentOwedToATO + this.fuelTaxCreditOwedToATO;
4219
+ }
4220
+ get owedByATO() {
4221
+ return this.expenseGST + this.paygTaxInstalmentOwedByATO + this.fuelTaxCreditOwedByATO;
4222
+ }
4205
4223
  /**
4206
4224
  * GST payable to the ATO, or refundable from the ATO in case it's negative
4207
4225
  */
@@ -10484,6 +10502,16 @@ class SoleInvoiceService extends RestService {
10484
10502
  sendEmail(invoice) {
10485
10503
  return this.http.post(`${this.environment.apiV2}/${this.url}/${invoice.id}/send`, {});
10486
10504
  }
10505
+ /**
10506
+ * Return the next number from the last invoice.
10507
+ * Basically needed to create a new invoice to show its number when the invoice has not yet been sent to the backend
10508
+ */
10509
+ getNewInvoiceNumber() {
10510
+ if (!this.cache) {
10511
+ return 0;
10512
+ }
10513
+ return last(this.cache).number + 1;
10514
+ }
10487
10515
  }
10488
10516
  SoleInvoiceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SoleInvoiceService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
10489
10517
  SoleInvoiceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SoleInvoiceService, providedIn: 'root' });
@@ -16062,31 +16090,37 @@ class SoleInvoiceItemForm extends AbstractForm {
16062
16090
  }
16063
16091
  }
16064
16092
 
16093
+ /**
16094
+ * Form is divided into two groups, since the creation of Sole invoice takes place in two steps:
16095
+ * a common invoice data and sole invoice items.
16096
+ */
16065
16097
  class SoleInvoiceForm extends AbstractForm {
16066
16098
  constructor(invoice, soleDetailsGST,
16067
16099
  // default template to be preselected
16068
16100
  defaultTemplate) {
16069
16101
  super({
16070
- dateFrom: new FormControl(invoice.dateFrom || new Date(), Validators.required),
16071
- dateTo: new FormControl(invoice.dateTo, Validators.required),
16102
+ commonData: new FormGroup({
16103
+ dateFrom: new FormControl(invoice.dateFrom || new Date(), Validators.required),
16104
+ dateTo: new FormControl(invoice.dateTo, Validators.required),
16105
+ payer: new FormControl(invoice.payer, Validators.required),
16106
+ taxType: new FormControl(invoice.taxType, Validators.required),
16107
+ bankAccount: new FormControl(invoice.bankAccount, Validators.required),
16108
+ reference: new FormControl(invoice.reference)
16109
+ }),
16072
16110
  items: new FormArray((invoice.items || [plainToClass(SoleInvoiceItem, {})]).map((item) => new SoleInvoiceItemForm(item))),
16073
- payer: new FormControl(invoice.payer, Validators.required),
16074
- taxType: new FormControl(invoice.taxType, Validators.required),
16075
- bankAccount: new FormControl(invoice.bankAccount, Validators.required),
16076
- reference: new FormControl(invoice.reference)
16077
16111
  }, invoice);
16078
16112
  this.invoice = invoice;
16079
16113
  this.soleDetailsGST = soleDetailsGST;
16080
16114
  this.defaultTemplate = defaultTemplate;
16081
16115
  // we need invoice template only for new invoices
16082
16116
  if (!invoice.id) {
16083
- this.addControl('template', new FormControl(this.defaultTemplate));
16117
+ (this.commonData).addControl('template', new FormControl(this.defaultTemplate));
16084
16118
  this.updateTemplateRelatedFields(this.defaultTemplate);
16085
16119
  }
16086
16120
  // invoice.taxType is always NONE ('No Tax') when soleDetails.isGST === false
16087
16121
  if (!this.soleDetailsGST) {
16088
- this.get('taxType').setValue(SoleInvoiceTaxTypeEnum.NO_TAX);
16089
- this.get('taxType').disable();
16122
+ this.commonData.get('taxType').setValue(SoleInvoiceTaxTypeEnum.NO_TAX);
16123
+ this.commonData.get('taxType').disable();
16090
16124
  // Items isGST is not available when invoice.taxType === NONE ('No Tax')
16091
16125
  this.items.controls.forEach((itemForm) => {
16092
16126
  this.disableItemGST(itemForm);
@@ -16106,8 +16140,8 @@ class SoleInvoiceForm extends AbstractForm {
16106
16140
  this.listenItemChartAccountsChanges(itemForm);
16107
16141
  });
16108
16142
  }
16109
- // nothing to listen if template field is not учшые (edit invoice case)
16110
- if (this.contains('template')) {
16143
+ // nothing to listen if template field is not exist (edit invoice case)
16144
+ if ((this.commonData).contains('template')) {
16111
16145
  this.listenTemplateChanges();
16112
16146
  }
16113
16147
  }
@@ -16124,15 +16158,20 @@ class SoleInvoiceForm extends AbstractForm {
16124
16158
  this.items.removeAt(index);
16125
16159
  }
16126
16160
  submit(data = {}) {
16127
- // @TODO Alex TT-2190: move child custom forms submit to Abstract Form
16128
- const items = this.items.controls.map((control) => control.submit());
16129
- return super.submit(merge(data, { items }));
16161
+ this.submitted = true;
16162
+ this.markAllAsTouched();
16163
+ if (!this.disabled && !this.valid) {
16164
+ return null;
16165
+ }
16166
+ const invoiceInstance = this.currentValue;
16167
+ this.onSubmit.emit(invoiceInstance);
16168
+ return invoiceInstance;
16130
16169
  }
16131
16170
  /**
16132
16171
  * Update default values from selected invoice template
16133
16172
  */
16134
16173
  listenTemplateChanges() {
16135
- this.get('template').valueChanges.subscribe((template) => {
16174
+ this.commonData.get('template').valueChanges.subscribe((template) => {
16136
16175
  this.updateTemplateRelatedFields(template);
16137
16176
  });
16138
16177
  }
@@ -16140,7 +16179,7 @@ class SoleInvoiceForm extends AbstractForm {
16140
16179
  * GST is not available for items when invoice.taxType === NONE
16141
16180
  */
16142
16181
  listenTaxTypeChanges() {
16143
- this.get('taxType').valueChanges.subscribe((type) => {
16182
+ this.commonData.get('taxType').valueChanges.subscribe((type) => {
16144
16183
  this.items.controls.forEach((itemForm) => {
16145
16184
  const chartAccounts = itemForm.get('chartAccounts').value;
16146
16185
  // Item GST is available when invoice.taxType !== NONE ('No Tax')
@@ -16153,18 +16192,18 @@ class SoleInvoiceForm extends AbstractForm {
16153
16192
  });
16154
16193
  }
16155
16194
  updateTemplateRelatedFields(template) {
16156
- this.get('bankAccount').setValue(template.bankAccount);
16157
- const dateFrom = this.get('dateFrom').value;
16195
+ this.commonData.get('bankAccount').setValue(template.bankAccount);
16196
+ const dateFrom = this.commonData.get('dateFrom').value;
16158
16197
  if (dateFrom) {
16159
- this.get('dateTo').setValue(new Date(dateFrom.getTime() + template.termTime));
16198
+ this.commonData.get('dateTo').setValue(new Date(dateFrom.getTime() + template.termTime));
16160
16199
  }
16161
16200
  // invoice.taxType is always 'No Tax' when soleDetails.isGST = false and not available for changing
16162
16201
  if (this.soleDetailsGST) {
16163
- this.get('taxType').setValue(template.taxType);
16202
+ this.commonData.get('taxType').setValue(template.taxType);
16164
16203
  }
16165
16204
  }
16166
16205
  /**
16167
- * GST availability depends of chart accounts isGST flag
16206
+ * GST availability depends on chart accounts isGST flag
16168
16207
  */
16169
16208
  listenItemChartAccountsChanges(itemForm) {
16170
16209
  itemForm.get('chartAccounts').valueChanges.subscribe((chartAccounts) => {
@@ -16188,6 +16227,16 @@ class SoleInvoiceForm extends AbstractForm {
16188
16227
  itemForm.get('isGST').setValue(true);
16189
16228
  itemForm.get('isGST').enable();
16190
16229
  }
16230
+ get commonData() {
16231
+ return this.get('commonData');
16232
+ }
16233
+ /**
16234
+ * Rewrite abstract form getter to flat "commonData" field, which is not in the class
16235
+ */
16236
+ get currentValue() {
16237
+ const formRawValue = this.getRawValue();
16238
+ return plainToClass(SoleInvoice, Object.assign({}, this.model, Object.assign(Object.assign({}, formRawValue.commonData), { items: formRawValue.items })));
16239
+ }
16191
16240
  }
16192
16241
 
16193
16242
  class SoleInvoiceTemplateForm extends AbstractForm {