public bool UtworzTowar(TowarModel towarModel) { using (Session s = hm.Session.Login.CreateSession(false, true)) { var tw = TowaryModule.GetInstance(s); using (ITransaction t = s.Logout(true)) { var nowyTowar = new Towar() { Nazwa = towarModel.Nazwa, Kod = towarModel.Kod, EAN = towarModel.EAN }; tw.Towary.AddRow(nowyTowar); nowyTowar.Jednostka = tw.Jednostki.WgKodu[towarModel.Jednostka]; var defCeny = tw.DefinicjeCen.WgNazwy["Podstawowa"]; nowyTowar.Jednostka = tw.Jednostki.WgKodu[towarModel.Jednostka]; nowyTowar.Ceny[tw.DefinicjeCen.WgNazwy["Podstawowa"]].Netto = new Soneta.Types.DoubleCy(towarModel.Cena, "PLN"); t.Commit(); } s.Save(); } return(true); }
private View initView() { var tm = TowaryModule.GetInstance(_session); var view = tm.Towary.CreateView(); view.Context = Context.Empty.Clone(_session); view.NewRowType = typeof(Towar); return(view); }
private SubTable initDatasource() { var tm = TowaryModule.GetInstance(_session); var tkey = tm.Towary.PrimaryKey; var condition = RowCondition.Empty; condition &= new FieldCondition.Equal("Typ", TypTowaru.Towar); condition &= new FieldCondition.Equal("Features.Synchronizowany", true); return(tkey[condition]); }
protected View ViewCreate(WParams pars) { var condUlubione = RowCondition.Empty; var rc = RowCondition.Empty; var tm = TowaryModule.GetInstance(pars.Context.Session); var view = tm.Towary.CreateView(); if (pars.KontaktOsoba == null) { condUlubione &= new FieldCondition.Null("Zapis", true); } else { condUlubione &= new FieldCondition.Equal("Zapis", pars.KontaktOsoba); } rc &= new FieldCondition.Equal("Blokada", false); rc &= new FieldCondition.Exists("TowaryUlubione", "Towar", condUlubione); view.Condition &= rc; return(view); }
public IHttpActionResult Get(Guid guid) { try { using (Session session = EnovaClient.Login.CreateSession(true, false)) { TowaryModule tm = TowaryModule.GetInstance(session); Towar towar = tm.Towary[guid]; if (towar != null) { return(Ok(towar.ToDto())); } return(NotFound()); } } catch (Soneta.Business.RowNotFoundException) { return(NotFound()); } }
public void GenerujInwentaryzacje() { HandelModule handelModule = HandelModule.GetInstance(Session); TowaryModule towaryModule = TowaryModule.GetInstance(Session); MagazynyModule magazynyModule = MagazynyModule.GetInstance(Session); using (ITransaction tran = Session.Logout(true)) { DokumentHandlowy dokument = new DokumentHandlowy(); // Nowy dokument należy związać z definicją dokumentu // handlowego. W tym przypadku wyszukujemy definicje wyszukujemy // z kolekcji standardowych definicji. dokument.Definicja = handelModule.DefDokHandlowych.Inwentaryzacja; dokument.Magazyn = magazynyModule.Magazyny.Firma; handelModule.DokHandlowe.AddRow(dokument); Towar towar = towaryModule.Towary.WgKodu["BIKINI"]; 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(); } } tran.Commit(); } // Dokument ten znajduje się w buforze, więc żeby stany magazynowe // mogły być zmodyfikowane należy zatwierdzić ten wygenerowany // właśnie dokument. }
public async Task <IHttpActionResult> GetPriceForCustomer(Guid productGuid, Guid customerGuid) { using (Session session = EnovaClient.Login.CreateSession(true, false)) { TowaryModule tm = TowaryModule.GetInstance(session); CRMModule cm = CRMModule.GetInstance(session); Towar towar = tm.Towary[productGuid]; Kontrahent kontrahent = cm.Kontrahenci[customerGuid]; var worker = new CenyKontrahentaWorker(); worker.Towar = towar; worker.Kontrahent = kontrahent; worker.DefinicjaCeny = tm.DefinicjeCen["Hurtowa"]; return(Ok(new ProductPriceInfo { ProductGuid = productGuid, CustomerGuid = customerGuid, Price = (decimal)worker.NettoPrzedRabatem.Value, Rebate = worker.Rabat })); } }
public void GenerujPrzyjecieMagazynowe(Context context) { // Metoda tworzy nowy dokument PZ2 wypełniając go przykładowymi // pozycjami // Rozpoczęcie tworzenia dokumentu (w ogóle operacji na logice // biznesowej) polega na utworzeniu obiektu sesji (Session), // w którym będą odbywać się poszczególne operacje. // Pierwszy parametr określa, czy sesja jest tylko do odczytu // danych, drugi parametr, czy sesja będzie modyfikować ustawienia // konfiguracyjne (tj. definicje dokumentów, jednostki, // definicje cen, itp). Standardowo obydwa parametry dajemy false. using (Session session = context.Login.CreateSession(false, false)) { // Po utworzeniu sesji dobrze jest sobie przygotować odpowiednie // zmienne reprezentujące poszczególne moduły programu w tej sesji. // Wystarczy przygotwać tylko te moduły, które będą nam potrzebne. HandelModule handelModule = HandelModule.GetInstance(session); TowaryModule towaryModule = TowaryModule.GetInstance(session); MagazynyModule magazynyModule = MagazynyModule.GetInstance(session); CRMModule CRMModule = CRMModule.GetInstance(session); // Wszystkie operacje wykonujemy w transakcji sesji, którą należy // na początku otworzyć. W transakcji możemy wskazać czy będą // robione zmiany w danych. using (ITransaction tran = session.Logout(true)) { // Następnie należy utworzyć nowy obiekt reprezentujący dokument // handlowy (nagłówek dokumentu) DokumentHandlowy dokument = new DokumentHandlowy(); // Nowy dokument nalezy również związać z definicją dokumentu // handlowego. W tym przypadku wyszukujemy definicje wyszukujemy // wg jej symbolu "PZ 2". DefDokHandlowego definicja = handelModule.DefDokHandlowych.WgSymbolu["PZ 2"]; if (definicja == null) { throw new InvalidOperationException("Nieznaleziona definicja dokumentu PZ 2."); } dokument.Definicja = definicja; // Dokument należy też przypisać do magazynu, do którego będzie // przyjmowany towar. Poniżej przypisywany jest standardowy // magazyn programu "Firma". dokument.Magazyn = magazynyModule.Magazyny.Firma; // Ale można wyszukać magazyn np wg symbolu // dokument.Magazyn = mm.Magazyny.WgSymbol["MAG1"]; // Oraz dodajemy nowo utworzony dokument do aktualnej sesji handelModule.DokHandlowe.AddRow(dokument); // Przyjęcie magazynowe PZ 2 wymaga również przypisania kontrahenta, // od którego towaru jest przyjmowany. // Przykład prezentuje przypisanie dokumentowi kontrahenta // o kodzie "ABC". Kontrahent kontrahent = CRMModule.Kontrahenci.WgKodu["ABC"]; if (kontrahent == null) { throw new InvalidOperationException("Nieznaleziony kontrahent o kodzie ABC."); } dokument.Kontrahent = kontrahent; // W kartotece towarów wyszukać towar. Przykład poniżej // prezentuje wyszukanie towaru wg kodu EAN "2000000000022". // Ponieważ w kartotece może znajdować się wiele towarów o tym // samym kodzie, wybrany zostanie pierwszy z nich. Towar towar = towaryModule.Towary.WgEAN["2000000000954"].GetNext(); if (towar != null) { // Utworzyć nową transakcję dla każdej pozycji osobno using (var tranPozycji = session.Logout(true)) { // Utworzyć nowy obiekt pozycji dokumentu handlowego, który // zostanie dodany do sesji PozycjaDokHandlowego pozycja = new PozycjaDokHandlowego(dokument); handelModule.PozycjeDokHan.AddRow(pozycja); // Przypisać towar do nowo utworzonej pozycji dokumentu, czyli // wskazać, który towar ma być przyjęty do magazynu pozycja.Towar = towar; // W pozycji dokumentu należy jeszcze wprowadzić ilość // towaru przyjmowanego na magazyn. Ilość reprezentowana jest // przez liczbę 10 będącą wartością ilości (pierwszy parametr) // oraz jednostkę opisującą tę ilość (drugi parametr). Jeżeli // jednostka jest null, to przyjmowana jest jednostka z // karty towarowej. // Poniżej znajduje się również wykomentowany przykład, w // którym w sposób jawny jest wskazanie na jednostkę w metrach. pozycja.Ilosc = new Quantity(10, null); // pozycja.Ilosc = new Quantity(10, "m"); // Pozycji dokumentu należy również przypisać cenę w jakiej // będzie on wprowadzany do magazynu (cena zakupu). // Poniżej przypisywana jest cena w PLN. Dlatego nie jest // wyspecyfikowany drugi parametr określający walutę ceny. pozycja.Cena = new DoubleCy(12.34); // Poszczególnym pozycją można przypisać również dodatkowe // cechy, które zależne są od konfiguracji programu. Przykład // pokazuje jak ustawić cechę z numerem beli. // // pozycja.Features["Numer beli"] = "123456"; // Na każdej pozycji dokumentu należy zatwierdzić osobną // transakcję metodą CommitUI tranPozycji.CommitUI(); } } // Dokumentowi podobnie jak pozycji dokumentu również można // przypisać dodatkowe cechy zależne od konfiguracji programu. // Przykład pokazuje jak ustawić cechę z lokalizacją. // // dokument.Features["Lokalizacja"] = "AB/12"; // Po dokonaniu wszystkich operacji na dokumencie można ten // dokument wprowadzić (zatwierdzić), co powoduje zabezpieczenie // przed przypadkową edycją tego dokumentu oraz przeniesienie go // do ewidencji dokumentów księgowych. dokument.Stan = StanDokumentuHandlowego.Zatwierdzony; // Wszystkie operacje zostały poprawnie zakończone i zapewne // chcemy zatwierdzić transakcję sesji. tran.Commit(); } // Powyższe operacje były wykonywane na sesji, czyli w pamięci. // Teraz należy rezultat prac zapisać do bazy danych. session.Save(); } // I to wszystko. Dokument PZ znajduje się w bazie. }
public TowarWebApi(Session session) { getTowar = new GetTowarInfo(session); hm = HandelModule.GetInstance(session); tw = TowaryModule.GetInstance(session); }
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 Towar GetTowar(string ean) { var towaryModule = TowaryModule.GetInstance(session); return(towaryModule.Towary.WgEAN[ean].GetFirst()); }
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)); }
public string WyswietlTowary() { // Przygotować zmienną do gromadzenia wyników StringBuilder sb = new StringBuilder(); // Towary znajdują się w module Towary, ale kontrahenci // też się przydadzą TowaryModule towaryModule = TowaryModule.GetInstance(Session); CRMModule CRMModule = CRMModule.GetInstance(Session); // Następnie odczytujemy obiekt reprezentujący tabele // wszystkich towarów znajdujących się w bazie danych Towary towary = towaryModule.Towary; // Jeżeli chcemy przeglądnąć wszystkie towary to // można wykorzystać enumerator w celu ich przeglądnięcia. // Przeglądanie będzie odbywać się wg nazwy towaru. // Zostanie wyciągnięta mało ciekawa statystyka. int suma = 0; foreach (Towar towar in towary.WgNazwy) { // Tutaj można umieścić kod przetwarzający towar suma += towar.Nazwa.Length; } sb.AppendLine(string.Format( "Suma długości nazw wszystkich towarów: {0} znaków", suma)); // Częściej zdarza się jednak, że chcemy wyszukać towary // spełniające pewne warunki, które najlepiej gdyby liczyły się // na serwerze SQL. W tym celu należy uzyskać obiekt widoku view. View view = towary.CreateView(); // I założyć filtr, np tylko towary o cesze 'Kolor' // równiej wartości 'Czerwony'. Warunek zakładany jest wówczas // gdy cecha 'Kolor' w ogóle istnieje. if (towary.FeatureDefinitions.Contains("Kolor")) { view.Condition &= new FieldCondition.Equal("Features.Kolor", "Czerwony"); } // Można również zakładać warunki na pola będące referencjami // do innych obiektów. // Dołóżmy jeszcze warunek, dla towarów pochodzących od dostawcy // 'ABC', o ile taki kontrahent istnieje w bazie. Kontrahent kontrahentABC = CRMModule.Kontrahenci.WgKodu["ABC"]; if (kontrahentABC != null) { view.Condition &= new FieldCondition.Equal("Dostawca", kontrahentABC); } // Teraz możemy przeglądnąć otrzymaną listę foreach (Towar towar in view) { sb.AppendLine(string.Format("Kod={0}, Nazwa={1}", towar.Kod, towar.Nazwa)); } // Zwracamy rezultat return(sb.ToString()); }