Skocz do zawartości

Subiekt Nexo API - generowanie korekty i ustawienie przedpłaty

Polecane posty

Otrzymujemy błąd w sytuacji gdy chcemy wygenerować korektę i ustawić przedpłatę.

image.png.905a2b4c6946dc6a7a08afdb5ed593b1.png

 

 

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

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
×
×
  • Dodaj nową pozycję...