Mam w aplikacji 4 pola:
netValue x quantity x vatRate = grossValueAdded
i chciałbym zrobić tak, żeby w przypadku zmiany jednej z nich pozostałe pola aktualizowały się dynamicznie (czyli zmieniając netValue, quantity lub vatRate aktualizowała się wartość grossValueAdded, a aktualizując grossValueAdded zmieniała się netValue). Wymyśliłem coś takiego jak poniżej i zasadniczo to działa oprócz sytuacji, w której przeliczam z grossValueAdded na netValue, bo wtedy prawdopodobnie ze względu na zaokrąglenia te wartości zaczynają w nieskończonej pętli maleć do zera. W jaki sposób wytłumić te zmiany?
this.subscriptionServiceItemForm.controls["netValue"].valueChanges.pipe(
debounceTime(100))
.subscribe((ngModelChange) => {
this.subscriptionServiceItem.grossValueAdded = this.roundUp((this.subscriptionServiceItem.netValue * this.subscriptionServiceItem.quantity) * (1 + (this.subscriptionServiceItem.vatRate / 100)));
});
this.subscriptionServiceItemForm.controls["quantity"].valueChanges.pipe(
debounceTime(100))
.subscribe((ngModelChange) => {
if (Number.isInteger(this.subscriptionServiceItem.quantity))
this.subscriptionServiceItem.grossValueAdded = this.roundUp((this.subscriptionServiceItem.netValue * this.subscriptionServiceItem.quantity) * (1 + (this.subscriptionServiceItem.vatRate / 100)));
});
this.subscriptionServiceItemForm.controls["vatRate"].valueChanges.pipe(
debounceTime(100))
.subscribe((ngModelChange) => {
this.subscriptionServiceItem.grossValueAdded = this.roundUp((this.subscriptionServiceItem.netValue * this.subscriptionServiceItem.quantity) * (1 + (this.subscriptionServiceItem.vatRate / 100)));
});
this.subscriptionServiceItemForm.controls["grossValueAdded"].valueChanges.pipe(
debounceTime(100))
.subscribe((ngModelChange) => {
//this.subscriptionServiceItemForm.controls['netValue'].patchValue(this.subscriptionServiceItemForm.controls['netValue'].value, { emitEvent: false });
this.subscriptionServiceItem.netValue = this.subscriptionServiceItem.grossValueAdded / (1 + (this.subscriptionServiceItem.vatRate / 100)) / this.subscriptionServiceItem.quantity;
//this.subscriptionServiceItemForm.controls['netValue'].patchValue(this.subscriptionServiceItemForm.controls['netValue'].value, { emitEvent: true });
});