Krzysztof Salwa 0 Napisano 12 Grudnia 2022 Udostępnij Napisano 12 Grudnia 2022 w Subiekt Nexo API - generowanie korekty i ustawienie przedpłaty Otrzymujemy błąd w sytuacji gdy chcemy wygenerować korektę i ustawić przedpłatę. Poniżej sposób w jaki próbujemy to wykonać IDokumentySprzedazy dokumentySprzedazy = sfera.PodajObiektTypu<IDokumentySprzedazy>(); IKorektyDokumentowSprzedazy korektyDokumentowSprzedazy = sfera.PodajObiektTypu<IKorektyDokumentowSprzedazy>(); DokumentDS fs = dokumentySprzedazy.Dane.Wszystkie() .Where(x => x.Id == Id).FirstOrDefault(); Pobieram dane dokumentu który będzie modyfikowany. using (IKorektaDokumentuSprzedazy kfs = korektyDokumentowSprzedazy.Utworz(fs.Konfiguracja)) { kfs.Dane.DokumentKorygowany = fs; Generuj korygowany dokument var kwotaPlatnosci = 0m; foreach (var platnosc in fs.PlatnosciDokumentow) { kwotaPlatnosci += platnosc.KwotaPlatnosci; } var brakujacaKwota = kfs.Dane.Wartosc.BruttoPoRabacie - kwotaPlatnosci; var platnosci = fs.PlatnosciDokumentow.ToList(); var sumaPlatnosci = platnosci.Sum(x => x.KwotaPlatnosci); Przeliczam kwotę do zapłaty. PlatnoscDokumentu nowaPlatnosc; for (int j = 0; j < platnosci.Count; j++) { fs.PlatnosciDokumentow.Remove(platnosci[j]); } Usuwam poprzednie płatności oraz tworzę potrzebną zmienną do dodawanie płatności. W przypadku wybrania przedpłaty: nowaPlatnosc = platnosci.Where(x => x.RodzajPlatnosci == (byte)RodzajPlatnosci.Przedplata).FirstOrDefault(); Sprawdzam czy dana płatność występowała na dokumencie jeżeli nie: if (nowaPlatnosc == null) { var iRozrachunki = sfera.PodajObiektTypu<IRozrachunki>(); var rozrachunek = iRozrachunki.Dane.Wszystkie() .Where(x => x.Id == documentModel.IdRozrachunku && x.KwotaNierozliczona >= Math.Abs(brakujacaKwota + sumaPlatnosci)) .FirstOrDefault(); if (rozrachunek == null) { throw new Exception("Nie znaleziona rozrachunku"); } nowaPlatnosc = sfera.PodajObiektTypu<PlatnoscDokumentu>(); nowaPlatnosc.PozycjaHarmonogramuRozrachunku = sfera.PodajObiektTypu<PozycjaHarmonogramuRozrachunku>(); nowaPlatnosc.PozycjaHarmonogramuRozrachunku.RodzajPlatnosci = (int)RodzajPlatnosci.Przedplata; nowaPlatnosc.PozycjaHarmonogramuRozrachunku.UstawWartoscPola("Rozrachunek", rozrachunek); nowaPlatnosc.PozycjaHarmonogramuRozrachunku.UstawWartoscPola("Rozrachunek_Id", rozrachunek.Id); nowaPlatnosc.PozycjaHarmonogramuRozrachunku.Kwota = rozrachunek.Kwota; nowaPlatnosc.PozycjaHarmonogramuRozrachunku.KwotaPozostala = rozrachunek.KwotaPozostala; nowaPlatnosc.PozycjaHarmonogramuRozrachunku.KwotaNierozliczona = rozrachunek.KwotaNierozliczona; } Sprawdzam czy istnieje rozrachunek z którego mógłbym pobrać płatności. Sprawdzanie następuje po Id oraz kwocie nierozliczonej większej od tej wymaganej. Tworzę nową Płatność Dokumentu oraz Pozycja Harmonogramu Rozrachunku która jest argumentem dla metody Dodaj Przedpłatę. kfs.Przelicz(); kfs.Platnosci.DodajPrzedplate(nowaPlatnosc.PozycjaHarmonogramuRozrachunku, Math.Abs(brakujacaKwota + sumaPlatnosci)); Dodaje przedpłatę na podstawie Pozycja Harmonogramu Rozrachunku oraz brakującej kwoty if (kfs.Zapisz()) { txOdp.Text = kfs.Dane.NumerWewnetrzny.PelnaSygnatura; } Dokument jest zapisywany Link to postu
Wojciech Szopiński 227 Napisano 13 Grudnia 2022 Udostępnij Napisano 13 Grudnia 2022 w Subiekt Nexo API - generowanie korekty i ustawienie przedpłaty Kod ustawiający przedpłatę jest błędny gdyż linia: nowaPlatnosc.PozycjaHarmonogramuRozrachunku = sfera.PodajObiektTypu<PozycjaHarmonogramuRozrachunku>(); Próbuje w polu PozycjaHarmonogramuRozrachunku ustawić NOWĄ niezapisaną pozycję harmonogramu rozrachunku i to jest źródłem błędu. Należy z encji rozrachunku pobrać odpowiednią pozycję harmonogramu i ją ustawić w w.w. polu. Link to postu
Polecane posty