public void GenerujRozliczenie() { KasaModule kasaModule = KasaModule.GetInstance(Session); foreach (var kontrahent in Kontrahenci) { Wplata wpłata = null; Naleznosc należność = null; SubTable st = kasaModule.RozrachunkiIdx.WgPodmiot[kontrahent, Date.MaxValue]; foreach (RozrachunekIdx idx in st) { if (idx.Typ == TypRozrachunku.Wpłata && wpłata == null) { wpłata = (Wplata)idx.Dokument; } if (idx.Typ == TypRozrachunku.Należność && należność == null && !idx.Dokument.Bufor) { należność = (Naleznosc)idx.Dokument; } if (wpłata != null && należność != null) { break; } } if (wpłata == null || należność == null) { throw new InvalidOperationException(string.Format("Nieznalezione wpłata lub należność dla kontrahenta {0}", kontrahent.Nazwa)); } using (ITransaction t = Session.Logout(true)) { RozliczenieSP rozliczenie = new RozliczenieSP(należność, wpłata); kasaModule.RozliczeniaSP.AddRow(rozliczenie); t.Commit(); } } }
public void GenerujFakture() { HandelModule handelModule = HandelModule.GetInstance(Session); TowaryModule towaryModule = TowaryModule.GetInstance(Session); MagazynyModule magazynyModue = MagazynyModule.GetInstance(Session); CRMModule CRMModule = CRMModule.GetInstance(Session); KasaModule kasaModule = KasaModule.GetInstance(Session); using (ITransaction tran = Session.Logout(true)) { DokumentHandlowy dokument = new DokumentHandlowy(); dokument.Definicja = handelModule.DefDokHandlowych.FakturaSprzedaży; dokument.Magazyn = magazynyModue.Magazyny.Firma; handelModule.DokHandlowe.AddRow(dokument); Kontrahent kontrahent = CRMModule.Kontrahenci.WgKodu["ABC"]; if (kontrahent == null) { throw new InvalidOperationException("Nieznaleziony kontrahent o kodzie ABC."); } dokument.Kontrahent = kontrahent; Towar towar = towaryModule.Towary.WgKodu["MONTAZ"]; if (towar != null) { using (var tranPozycji = Session.Logout(true)) { PozycjaDokHandlowego pozycja = new PozycjaDokHandlowego(dokument); handelModule.PozycjeDokHan.AddRow(pozycja); pozycja.Towar = towar; pozycja.Ilosc = new Quantity(10, null); pozycja.Cena = new DoubleCy(12.34); tranPozycji.CommitUI(); } } // Modyfikacja płatności // Standradowo dokument ma wygenerowaną przez system jedną płatność. Zmienimy w niej // sposób zapłaty, domyślną ewidencję oraz termin płatności. // Jeżeli chcemy mieć więcej niż jedną płatność, to zmniejszamy kwotę w instniejącej // i dodajemy kolejne płatności aż do zrównoważenia kwoty płatności i dokumentu. // Dodatkowo, jeżeli generujemy płatność gotówkową, to dodamy do niej informację // o zapłacieniu i odpowiedni wpis na raport kasowy (musi być założony i niezatwierdzony). // Wymuszamy przeliczenie zdarzeń. W przeciwnym razie sumy mogą być nieaktualne. // Normalnie robi to za nas UI. Session.Events.Invoke(); Naleznosc gotowka = null; Naleznosc przelew = null; // Pobieramy isntniejacą płatność. System zrobił na pewno jedną (o ile wartość // dokumentu jest różna od zera). // Możemy też płatność usunąć i odtworzyć dokładnie tak samo jak to jest // robione z dodatkową płatnością. Naleznosc platnosc = (Naleznosc)dokument.Platnosci.GetNext(); if (Params.Gotowka && Params.Przelew) { Currency kwota = platnosc.Kwota; platnosc.Kwota = platnosc.Kwota / 2; gotowka = platnosc; // Tworzymy nowy obiekt należności przelew = new Naleznosc(dokument); // Dodajemy go do tabeli Platnosci kasaModule.Platnosci.AddRow(przelew); // Ustawiamy kwotę przelew.Kwota = kwota - gotowka.Kwota; } else if (Params.Gotowka) { gotowka = platnosc; } else if (Params.Przelew) { przelew = platnosc; } // Mamy już potrzebne płatności. Teraz musimy im zmodyfikować sposób zapłaty, // ewidencję SP oraz termin płatności. // Najpier przelew if (przelew != null) { // Wyszukujemy sposób zapłaty. Na szczęście dla gotówki mamy standardowy. // Możemy też szukać wg nazwy lub Guid. przelew.SposobZaplaty = kasaModule.SposobyZaplaty.Przelew; // Szukamy ewidencję SP przelew.EwidencjaSP = kasaModule.EwidencjeSP.WgNazwy["Firmowy rachunek bankowy"]; // I termin płatności przelew.TerminDni = 21; } if (gotowka != null) { // Wyszukujemy sposób zapłaty. Na szczęście dla gotówki mamy standardowy. // Możemy też szukać wg nazwy lub Guid. gotowka.SposobZaplaty = kasaModule.SposobyZaplaty.Gotówka; // Szukamy ewidencję SP gotowka.EwidencjaSP = kasaModule.EwidencjeSP.WgNazwy["Kasa gotówkowa"]; // I termin płatności gotowka.TerminDni = 0; // Pozostaje to teraz zapłacić. // Szukamy raportu kasowego. Musi być istnieć i być otwarty lub // nie istnieć i mieć flagę automatyczny. // Oczywiście ewidencja SP musi być typu kasa. RaportESP raport = ((Kasa)gotowka.EwidencjaSP).NowyRaport(dokument, dokument.Data); // Tworzymy nowy dokument wpłaty Wplata wpłata = new Wplata(dokument, raport); // Dodajemy go do tabeli kasaModule.Zaplaty.AddRow(wpłata); // Ustawiamy podmiot (taki jak w należności) wpłata.Podmiot = dokument.Kontrahent; // ... sposób zapłaty wpłata.SposobZaplaty = gotowka.SposobZaplaty; // ... opis wystawrczy zainicjować, zostanie przeliczony podczas zapisu wpłata.Opis = "?"; // Oraz oczywiście kwotę wpłata.Kwota = gotowka.Kwota; // Wpłata z należnością zostaną rozliczone podczas zatwierdzania dokumentu } dokument.Stan = StanDokumentuHandlowego.Zatwierdzony; tran.Commit(); } }
public IHttpActionResult Post(DokumentHandlowySaveDataRequestDto request) { if (ModelState.IsValid) { try { DokumentHandlowy dokumentHandlowy = null; using (Session session = EnovaClient.Login.CreateSession(false, false)) { HandelModule hm = HandelModule.GetInstance(session); CRMModule cm = CRMModule.GetInstance(session); MagazynyModule mm = MagazynyModule.GetInstance(session); TowaryModule tm = TowaryModule.GetInstance(session); KasaModule km = KasaModule.GetInstance(session); using (ITransaction t = session.Logout(true)) { dokumentHandlowy = new DokumentHandlowy(); var definicja = hm.DefDokHandlowych[request.DefinicjaGuid]; dokumentHandlowy.Definicja = definicja; var magazyn = request.MagazynGuid.HasValue ? mm.Magazyny[request.MagazynGuid.Value] : mm.Magazyny.Firma; dokumentHandlowy.Magazyn = magazyn; hm.DokHandlowe.AddRow(dokumentHandlowy); request.Features?.Foreach((feature) => { dokumentHandlowy.Features[feature.Name] = feature.Value; }); Kontrahent kontrahent = cm.Kontrahenci[request.KontrahentGuid]; dokumentHandlowy.Kontrahent = kontrahent; foreach (var pozDto in request.Pozycje) { Towar towar = tm.Towary[pozDto.TowarGuid]; PozycjaDokHandlowego pozycja = new PozycjaDokHandlowego(dokumentHandlowy); hm.PozycjeDokHan.AddRow(pozycja); pozycja.Towar = towar; pozycja.Ilosc = new Quantity(pozDto.Ilosc); if (pozDto.CenaNetto.HasValue) { pozycja.Cena = new Soneta.Types.DoubleCy(pozDto.CenaNetto.Value); } if (pozDto.Rabat.HasValue) { pozycja.Rabat = new Percent(pozDto.Rabat.Value / 100M); } } session.Events.Invoke(); if (request.Platnosci?.Any() ?? false) { var naleznosc = (Naleznosc)dokumentHandlowy.Platnosci.GetNext(); var pozostalaKwota = naleznosc.Kwota; request.Platnosci?.Foreach((platnoscDto) => { if (naleznosc == null) { naleznosc = new Naleznosc(dokumentHandlowy); km.Platnosci.AddRow(naleznosc); } if (platnoscDto.SposobZaplaty.HasValue) { switch (platnoscDto.SposobZaplaty.Value) { case SposobZaplatyDto.Gotowka: naleznosc.SposobZaplaty = km.SposobyZaplaty.Gotówka; break; case SposobZaplatyDto.Przelew: naleznosc.SposobZaplaty = km.SposobyZaplaty.Przelew; break; } } if (platnoscDto.Kwota.HasValue) { naleznosc.Kwota = platnoscDto.Kwota.Value; pozostalaKwota -= platnoscDto.Kwota.Value; } else { naleznosc.Kwota = pozostalaKwota; pozostalaKwota = 0; } if (platnoscDto.TerminDni.HasValue) { naleznosc.TerminDni = platnoscDto.TerminDni.Value; } if (naleznosc.SposobZaplaty == km.SposobyZaplaty.Gotówka && naleznosc.TerminDni == 0) { RaportESP raport = ((Kasa)naleznosc.EwidencjaSP).NowyRaport(dokumentHandlowy, dokumentHandlowy.Data); Wplata wplata = new Wplata(dokumentHandlowy, raport); km.Zaplaty.AddRow(wplata); wplata.Podmiot = dokumentHandlowy.Kontrahent; wplata.SposobZaplaty = naleznosc.SposobZaplaty; wplata.Opis = "?"; wplata.Kwota = naleznosc.Kwota; } naleznosc = null; }); } session.Events.Invoke(); dokumentHandlowy.Stan = StanDokumentuHandlowego.Zatwierdzony; t.Commit(); } session.Save(); } return(Ok(new ResponseDto(dokumentHandlowy))); } catch (FeatureRequiredVerifier ex) { return(BadRequest(ex.Description)); } catch (Exception ex) { return(BadRequest(ex.ToString())); } } return(BadRequest(ModelState)); }