dbojdo / wFirma

wFirma SDK
MIT License
14 stars 15 forks source link

Vat id nullable #28

Closed mgralikowski closed 2 years ago

mgralikowski commented 2 years ago

VAT to int - reprezentacja liczbowa, a co bardziej prawidłowe - po prostu ID typu stawki. Niestety nie jest możliwe wystawić faktury "zw" stąd sugestia, aby zrobić VAT nullable, ponieważ wtedy dziedziczony jest z modelu Good, więc rozwiązuje to problem , przynajmniej w moim przypadku. Docelowo pewnie by trzeba przemyśleć czy ten atrybut ogólnie jest prawidłowy, i nie powinien to być bardziej vat_code.

mgralikowski commented 2 years ago

Jest szansa na szybki accept, to tylko = null w konstruktorze?

mgralikowski commented 2 years ago

Ale null nie ma na celu ustawienie ZW, a jest to po prostu przyjęcie stawki automatycznie, na podstawie stawki dodawanego produktu/usługi w katalogu. Wtedy katalog produktów jest źródłem informacji o VAT, co jest bardziej wygodne w ogóle, ponieważ nie musimy powielać tej informacji każdorazowo.

Co do samych stawek to najbardziej prawidłowym podejściem jest używane identyfikatorów numerycznych, które pobierane są ze wspomnianego endpointa. Już to u siebie aplikacji właśnie obsłużyłem - użytkownik ma tę długą (warto wywalić kilka archiwalnych stawek) listę jako select, i zapisuje id np. 233 co właśnie jest stawką zw. Stawka 23% ma id 222, przez chwilę myślałem, że te id odzwierciedlają stawkę (że to takie "kody"), ale raczej to czysty przypadek.

Pewnie dla wygody dali możliwość alternatywną, aby szybko ustalić stawkę 23%, bez konieczności hardcodowania identyfikatora stawki. Zwykle mi te podejście wystarczało, bo pewnie w 90%< projektach taką potrzebujemy.

jacekkow commented 2 years ago

@mgralikowski - nie rozumiem do końca co chcesz zrobić.

Niestety nie jest możliwe wystawić faktury "zw" stąd sugestia, aby zrobić VAT nullable, ponieważ wtedy dziedziczony jest z modelu Good

Ale null nie ma na celu ustawienie ZW, a jest to po prostu przyjęcie stawki automatycznie, na podstawie stawki dodawanego produktu/usługi w katalogu.

Chcesz wystawić fakturę na podstawie towaru zdefiniowanego w magazynie, tak?

Jeśli tak, to do poprawy jest klasa InvoicesContent, a nie Good. Tam metoda fromGoodId powinna przyjmować null dla argumentów $price i $vat (do sprawdzenia czy to działa).

Good (czyli właśnie produkt w katalogu) stawkę powinien mieć zawsze, choćby było to ZW (nie null).

mgralikowski commented 2 years ago

Faktycznie, chyba złego commita puściłem.

Mam tak lokalnie:

    public static function fromGoodId(GoodId $id, $count, $price, $vat = null, Discount $discount = null, $lumpcode = null)
    {
        return new self(
            null,
            $vat,
            null,
            $count,
            $price,
            $id,
            $discount,
            $lumpcode
        );
    }

i to działa, bo do tej pory tak sobie pomagałem "patchem". Zerknę na te nowe zmiany, czy ten fix dalej będzie potrzebny.

dbojdo commented 2 years ago

Faktycznie, chyba złego commita puściłem.

Mam tak lokalnie:

    public static function fromGoodId(GoodId $id, $count, $price, $vat = null, Discount $discount = null, $lumpcode = null)
    {
        return new self(
            null,
            $vat,
            null,
            $count,
            $price,
            $id,
            $discount,
            $lumpcode
        );
    }

i to działa, bo do tej pory tak sobie pomagałem "patchem". Zerknę na te nowe zmiany, czy ten fix dalej będzie potrzebny.

W metodzie InvoiceContent::fromGoodId argument $vat nie ma przypisanego typu, więc możesz przekazać zarówno null, ZW, czy cokolwiek innego. Żadna zmiana nie jest tu potrzebna jak sądzę.

dbojdo commented 2 years ago

@mgralikowski @jacekkow zamykam ten PR. Zrobiłem rebase w nowym branchu: https://github.com/dbojdo/wFirma/pull/29

mgralikowski commented 2 years ago

Faktycznie, chyba złego commita puściłem. Mam tak lokalnie:

    public static function fromGoodId(GoodId $id, $count, $price, $vat = null, Discount $discount = null, $lumpcode = null)
    {
        return new self(
            null,
            $vat,
            null,
            $count,
            $price,
            $id,
            $discount,
            $lumpcode
        );
    }

i to działa, bo do tej pory tak sobie pomagałem "patchem". Zerknę na te nowe zmiany, czy ten fix dalej będzie potrzebny.

W metodzie InvoiceContent::fromGoodId argument $vat nie ma przypisanego typu, więc możesz przekazać zarówno null, ZW, czy cokolwiek innego. Żadna zmiana nie jest tu potrzebna jak sądzę.

No tak, faktycznie umknęło, bo zwykle pracuje na php 8, pełnym typowaniu i strict mode. Nie mniej jednak, danie default + komentarz, wyraźnie zasygnalizuje bądź co bądź - ciekawe działanie z tym dziedziczeniem ;)