dbojdo / wFirma

wFirma SDK
MIT License
13 stars 15 forks source link

Invoice with no content #7

Closed Qrzysio closed 4 years ago

Qrzysio commented 4 years ago

Należy rozważyć zablokowanie możliwości tworzenia faktur bez żadnych pozycji. wfirma nie pozwala na dodanie faktury bez żadnego produktu. Ma to sens, gdyż nie sprzedając nic, nie powinniśmy wystawić faktury.

W skrypcie jednak można pominąć dodawanie produktów do faktury poprzez metodę addInvoiceContent() i nie otrzymamy błędu podczas ostatecznego kroku tworzenia dokumentu.

Poniższy mechanizm więc zadziała:

$api = $apiFactory->invoicesApi();

// add a new invoice
$invoice = \Webit\WFirmaSDK\Invoices\Invoice::forContractor(
    new Contractor(
        'client name',
        'alt name',
        '1234565432', // vat no
        null, // regon
        new InvoiceAddress(
            'ul. Mokra 12',
            '01-006',
            'Warszawa',
            'PL'
        )
    )
);

/*
$invoice->addInvoiceContent(
    InvoicesContent::fromName(
        'some stuff',
        'szt.',
        3,
        123.32,
        23
    )
);
*/

$invoice = $api->add($invoice);

W ten sposób powstanie faktura z jedną pozycją, pomimo tego, że nie wpisaliśmy żadnej. Pozycja będzie miała cenę netto 1 zł, a jej nazwa będzie brzmieć __empty.

image

Dobrze byłoby, gdyby skrypt zwracał błąd w przypadku braku pozycji na fakturze. Myślę, że warto to rozważyć.

dbojdo commented 4 years ago

Należy zastanowić się, jakie jest zadanie tej biblioteki.

Zawsze mocno rozgraniczam warstwę niskopoziomowego klienta (wrappera na API) od konkretnego przypadku użycia. Jak widać, API pozwala na utworzenie takiej "pustej" faktury, ze wszystkimi tego konsekwencjami, zatem klient nie powinien blokować takiej możliwości. Decyzja o tym, czy zablokować taką możliwość powinna być podjęta "wyżej".

Aplikacja zawsze powinna mieć swoją warstwę abstrakcji (wrapper na bibliotekę klienta) i to tam powinno się podejmować decyzję, w jaki sposób chce się korzystać z Klienta.