PolishInvoicer Code Climate Build Status

PolishInvoicer gem creates polish invoices and proforms as HTML or PDF files. Gem description will be in polish language because of specific case of this gem.

Gem jest zgodny z nową ustawą o podatku VAT, która weszła w życie z dniem 1 stycznia 2017.

Krótkie podsumowanie zmian w wystawianiu faktur.

Installation

Add this line to your application's Gemfile:

gem 'polish_invoicer'

And then execute:

$ bundle

Or install it yourself as:

$ gem install polish_invoicer

Przykład użycia

Generowanie proformy

require 'polish_invoicer'

invoice = PolishInvoicer::Invoice.new(
  number: '1/2014',                       # numer faktury
  create_date: Date.today,                # data wystawienia
  trade_date: Date.today,                 # data wykonania usługi
  seller: ['Systemy Internetowe S.A.',    # dane sprzedawcy
           'ul. Jasna 10',
           '12-345 Kraków'],
  seller_nip: '123-456-78-90',            # NIP sprzedawcy
  buyer: ['Mała Firma sp. z o.o.',        # dane nabywcy
          'ul. Czerwona 20/4',
          '10-043 Olsztyn'],
  buyer_nip: '987-654-32-10',             # NIP nabywcy
  item_name: 'Usługi programistyczne',    # nazwa usługi
  price: 3500,                            # cena (domyślnie brutto)
  payment_date: Date.today + 14,          # data płatności
  proforma: true,                         # znacznik proformy
  paid: false,                            # znacznik opłacenia usługi
)
if invoice.valid?
  invoice.save_to_html('/path/to/proforma.html')
  invoice.save_to_pdf('/path/to/proforma.pdf')
else
  puts invoice.errors.inspect
end

Wygenerowana proforma

Generowanie faktury

invoice.proforma = false
invoice.paid = true
invoice.save_to_html('/path/to/invoice.html')
invoice.save_to_pdf('/path/to/invoice.pdf')

Wygenerowana faktura

Opis wszystkich dostępnych parametrów

Parametry wymagane

:number,              # numer faktury (string)
:create_date,         # data wystawienia faktury (date)
:trade_date,          # data sprzedaży (date)
:seller,              # adres sprzedawcy (tablica stringów)
:seller_nip,          # NIP sprzedawcy (string)
:buyer,               # adres nabywcy (tablica stringów)
:item_name,           # nazwa usługi (string)
:price,               # cena w złotych (float)
:payment_date,        # termin płatności (date)

Parametry wymagane z ustawionymi wartościami domyślnymi

:gross_price,         # znacznik rodzaju ceny (netto/brutto) (boolean)
                      # wartość domyślna: true, czyli brutto
:vat,                 # stawka vat (integer ze zbioru [23, 8, 5, 0, -1]
                      # -1 oznacza zwolniony z VAT
                      # wartość domyślna: 23
:paid,                # znacznik opłacenia usługi (boolean)
                      # wartość domyślna: true, czyli opłacona
:proforma,            # znacznik faktury pro-forma (boolean)
                      # wartość domyślna: false
:payment_type,        # rodzaj płatności (string)
                      # wartość domyślna: 'Przelew'

Parametry dodatkowe

:buyer_nip,           # NIP nabywcy (string)
:recipient,           # odbiorca faktury (tablica stringów)    
:comments,            # uwagi (string lub tablica stringów)
:pkwiu,               # numer PKWiU (string)
:no_vat_reason,       # podstawa prawna zwolnienia z VAT (string)
:footer,              # treść umieszczana w stopce faktury (string)

Parametry systemowe

:template_path,       # ścieżka do własnego szablonu faktury
:logger,              # możliwość ustawienia loggera
                      # podczas użycia w aplikacji Rails
                      # logger ustawia się automatycznie
:wkhtmltopdf_path     # ścieżka do polecenia wkhtmltopdf
:wkhtmltopdf_command  # komenda wywołania polecenia wkhtmltopdf
                      # bez podawania plików html i pdf

Walidacja parametrów i obsługa błędów

Zmienna invoice z poprzedniego przykładu.

invoice.create_date = Date.today
invoice.trade_date = Date.today - 60
invoice.vat = 1
invoice.valid?
puts invoice.errors.inspect
{
  :vat=>"Stawka VAT spoza listy dopuszczalnych wartości",
  :create_date=>"Data wystawienia nie może być późniejsza niż 15 dzień następnego miesiąca po wykonaniu usługi"
}

Dodatkowe metody

net_value     # obliczona wartość netto
vat_value     # obliczona kwota VAT
gross_value   # obliczona wartość brutto
to_hash       # hash przekazywany do szablonu faktury

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request