Exemple #1
0
        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 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.
        }
Exemple #3
0
 private System.Collections.Generic.IEnumerable <Obrot> GetSalesInPeriod()
 => MagazynyModule.GetInstance(Session)
 .Obroty.WgTowar
 .Where(o => FromTo.Contains(o.Data));
        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();
            }
        }
Exemple #5
0
        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));
        }