Witam.
Czy może mi ktoś w końcu wyjaśnić, jak idiocie, jak zmienne w Angular 5 (TypeScript) działają?
Mam obiekt typu Dokument
:
export class Dokument {
ID:number;
KodNabywcy:string;
KodOdbiorcy:string;
KodPlatnika:string;
NumerDokumentu:string;
Numerator:number;
TypDokumentu:number;
DataWystawienia:string;
DataOperacji:string;
TerminPlatnosci:string;
FormaPlatnosci:number;
Bufor:number;
LiczonyOd:number;
VAT:number;
Netto:number;
Brutto:number;
Waluta:string;
Pozycje:any[];
}
Ten dokument posiada tablice Pozycje
, które uzupełniam za pomocą okienka modal z wypełnioną tabelką towarami z użyciem datatables i jego multiselect.
Dodawanie wybranych pozycji:
addNewPozycje() {
var table = $('#towaryTable').DataTable();
let rows = table.rows('.selected').data();
let tempPozycje = [];
for (let i = 0; i < rows.length; i++) {
const element = rows[i];
let kod = element[1];
this.api.GetTowarDoDokumentu(kod, this.dokument.KodNabywcy).subscribe((result) => { // z api ściągam więcej info na temat tego towaru
tempPozycje.push(result[0]); // do tymczasowej tablicy dodaje sobie rekordy jakie przyjdą z API
}, (error) => console.log(error), () => {
});
}
this.dokument.Pozycje = tempPozycje;
this.przeliczWartoscDokumentu(this.dokument.LiczonyOd); // tutaj liczę wartość dokumentu na podstawie podanych pozycji
console.log(this.dokument.Pozycje); // konsola wyrzuca mi poprawną tablice elementów w tym miejscu
$('#new-event-modal').modal('hide');
table.rows().deselect();
}
Funkcja liczenia wartości dokumentu, która Pozycje.length
ma równe 0:
przeliczWartoscDokumentu(typ: number) {
this.dokument.Brutto = 0;
this.dokument.Netto = 0;
let rabat = 0;
console.log(this.dokument.Pozycje.length); // length = 0... Why?!
for (let i = 0; i < this.dokument.Pozycje.length; i++) {
const pozycja = this.dokument.Pozycje[i];
if (typ == 1) {
pozycja.Cena = this.obliczCeneNetto(pozycja.Cena, pozycja.Stawka);
}
else {
pozycja.Cena = pozycja.Cena;
}
pozycja.Wartosc = this.round(pozycja.Ilosc * pozycja.Cena);
if (pozycja.Stawka == 0) {
pozycja.Netto = pozycja.Wartosc;
pozycja.Brutto = pozycja.Wartosc;
}
else {
if (typ == 2) {
pozycja.Brutto = pozycja.Wartosc;
pozycja.Netto = this.obliczCeneNetto(pozycja.Wartosc, pozycja.Stawka);
}
else if (typ == 1) {
pozycja.Netto = pozycja.Wartosc;
pozycja.Brutto = this.obliczCeneBrutto(pozycja.Wartosc, pozycja.Stawka);
}
}
this.dokument.Brutto += pozycja.Brutto;
this.dokument.Netto += pozycja.Netto;
this.dokument.VAT = this.round(this.round(this.dokument.Brutto) - this.round(this.dokument.Netto));
}
}