Signed-off-by: Adrian Hinz <ahinz@voicetelecom.pl>

This commit is contained in:
Adrian Hinz 2016-10-05 15:54:56 +02:00
parent 65683128fb
commit 59f446271e
8 changed files with 300 additions and 21 deletions

View File

@ -8,7 +8,13 @@ class InvoicesController < ApplicationController
end
def new
@invoice = Invoice.new(date: Date.today)
@invoice = Invoice.new(date: Date.today, date_of_payment: Date.today + 14.days)
inv = Invoice.where('date > ?', Date.new(Date.today.year,1,1)).last
if !inv.blank?
nr = inv.number
new_nr = (nr.split("/")[0].to_i + 1).to_s + "/" + nr.split("/")[1]
@invoice.number = new_nr
end
@user_firms = current_user.user_firms
@customers = current_user.customers
end
@ -28,7 +34,7 @@ class InvoicesController < ApplicationController
def edit
@invoice = Invoice.find(params[:id])
@user_firms = current_user.user_firms
@customers = current_user.customers
@customers = current_user.customers
end
def update

View File

@ -25,13 +25,73 @@ module ApplicationHelper
def errors_to_html(errors)
ret = '<div class="row"><div class="col-lg-12 col-md-12 panel-danger"><div class="content-box-header panel-heading"><div class="panel-title">'
ret += I18n.t('activerecord.errors.messages.record_invalid', errors: errors.count)
ret += I18n.t("activerecord.errors.messages.record_invalid", errors: errors.count)
ret += '</div></div><div class="content-box-large box-with-header" style="background:#f9dddd"><ul>'
errors.full_messages.each do |msg|
ret += "<li>#{msg}</li>"
end
ret += '</ul></div></div></div>'
ret += "</ul></div></div></div>"
ret
end
def decimal_to_word(dec)
singles = ["", " #{I18n.t('numbers.one')}", " #{I18n.t('numbers.two')}", " #{I18n.t('numbers.three')}", " #{I18n.t('numbers.four')}",
" #{I18n.t('numbers.five')}", " #{I18n.t('numbers.six')}", " #{I18n.t('numbers.seven')}", " #{I18n.t('numbers.eight')}", " #{I18n.t('numbers.nine')}"]
teens = ["", " #{I18n.t('numbers.eleven')}", " #{I18n.t('numbers.twelve')}", " #{I18n.t('numbers.thirteen')}", " #{I18n.t('numbers.fourteen')}",
" #{I18n.t('numbers.fifteen')}", " #{I18n.t('numbers.sixteen')}", " #{I18n.t('numbers.seventeen')}", " #{I18n.t('numbers.eighteen')}", " #{I18n.t('numbers.nineteen')}"]
tens = ["", " #{I18n.t('numbers.ten')}", " #{I18n.t('numbers.twenty')}", " #{I18n.t('numbers.thirty')}", " #{I18n.t('numbers.fourty')}",
" #{I18n.t('numbers.fifty')}", " #{I18n.t('numbers.sixty')}", " #{I18n.t('numbers.seventy')}", " #{I18n.t('numbers.eighty')}", " #{I18n.t('numbers.ninety')}"]
hundreds = ["", " #{I18n.t('numbers.hundred')}", " #{I18n.t('numbers.two_hundred')}", " #{I18n.t('numbers.three_hundred')}", " #{I18n.t('numbers.four_hundred')}",
" #{I18n.t('numbers.five_hundred')}", " #{I18n.t('numbers.six_hundred')}", " #{I18n.t('numbers.seven_hudred')}", " #{I18n.t('numbers.eight_hundred')}", " #{I18n.t('numbers.nine_hundred')}"]
groups = Array.new
groups << ["" ,"" ,""]
groups << [" #{I18n.t('numbers.thousand')}" ," #{I18n.t('numbers.thousand1')}" ," #{I18n.t('numbers.thousand2')}"]
groups << [" #{I18n.t('numbers.milion')}" ," #{I18n.t('numbers.milion1')}" ," #{I18n.t('numbers.milion2')}"]
groups << [" #{I18n.t('numbers.miliard')}"," #{I18n.t('numbers.miliard1')}"," #{I18n.t('numbers.miliard2')}"]
groups << [" #{I18n.t('numbers.bilion')}" ," #{I18n.t('numbers.bilion1')}" ," #{I18n.t('numbers.bilion2')}"]
groups << [" #{I18n.t('numbers.biliard')}"," #{I18n.t('numbers.biliard1')}"," #{I18n.t('numbers.biliard2')}"]
groups << [" #{I18n.t('numbers.trylion')}"," #{I18n.t('numbers.trylion1')}"," #{I18n.t('numbers.trylion2')}"]
ret = ""
number = dec.to_i
rest = (dec * 100) % 100
if number == 0
ret = "#{I18n.t('numbers.zero')}"
else
if number < 0
sign = "#{I18n.t('numbers.minus')}"
number = -number
else
sign = ""
end
g = 0
while number != 0
s = (number % 1000) / 100
d = (number % 100) / 10
j = (number % 10)
if d == 1 && j > 0
n = j
d = 0
j = 0
else
n = 0
end
if j == 1 && s+d+n == 0
k = 0
elsif j == 2 || j == 3 || j == 4
k = 1
else
k = 2
end
ret = hundreds[s] + tens[d] + teens[n] + singles[j] + groups[g][k] + ret
g = g + 1
number = number / 1000
end
end
ret = sign + ret
ret += " PLN #{rest.to_i}/100"
return ret
end
end

View File

@ -4,26 +4,26 @@
<%= raw errors_to_html(@invoice.errors) %>
<% end %>
<div class="form-group">
<div class="col-sm-3"></div>
<%= f.label :number, class: "col-sm-2 control-label" %>
<div class="col-sm-10">
<div class="col-sm-4">
<%= f.text_field :number, class: "form-control", placeholder: 'Numer faktury' %>
</div>
<div class="col-sm-3"></div>
</div>
<div class="form-group">
<%= f.label :user_firm, class: "col-sm-2 control-label" %>
<div class="col-sm-10">
<div class="col-sm-4">
<%= f.select :user_firm_id, @user_firms.collect {|uf| [ uf.name, uf.id ] }, {}, {class: "form-control"} %>
</div>
</div>
<div class="form-group">
<%= f.label :customer, class: "col-sm-2 control-label" %>
<div class="col-sm-10">
<div class="col-sm-4">
<%= f.select :customer_id, @customers.collect {|c| [ c.name, c.id ] }, {include_blank: true}, {class: "form-control"} %>
</div>
</div>
<div class="form-group">
<%= f.label :date, class: "col-sm-2 control-label" %>
<div class="col-sm-10">
<div class="col-sm-4">
<div class="input-group date">
<%= f.text_field :date, class: "form-control datepicker", placeholder: 'Data wystawienia' %>
<span class="input-group-addon">
@ -32,6 +32,16 @@
</span>
</div>
</div>
<%= f.label :date_of_payment, class: "col-sm-2 control-label" %>
<div class="col-sm-4">
<div class="input-group date">
<%= f.text_field :date_of_payment, class: "form-control datepicker", placeholder: 'Data wystawienia' %>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar">
</span>
</span>
</div>
</div>
</div>
<div class="form-group">
@ -43,7 +53,6 @@
$(function() {
// Bootstrap DateTimePicker v4
$('.datepicker').datetimepicker({
useCurrent: true,
locale: 'pl',
format: 'YYYY-MM-DD'
});

View File

@ -1,15 +1,160 @@
<div class="row">
<div class="col-md-12">
<div class="content-box-large">
<div class="panel-heading">
<div class="panel-title">Faktura VAT</div>
</div>
<div class="panel-heading"></div>
<div class="panel-body">
Ut tristique adipiscing mauris, sit amet suscipit metus porta quis. Donec dictum tincidunt erat, eu blandit ligula. Nam sit amet dolor sapien. Quisque velit erat, congue sed suscipit vel, feugiat sit amet enim. Suspendisse interdum enim at mi tempor commodo. Sed tincidunt sed tortor eu scelerisque. Donec luctus malesuada vulputate. Nunc vel auctor metus, vel adipiscing odio. Aliquam aliquet rhoncus libero, at varius nisi pulvinar nec. Aliquam erat volutpat. Donec ut neque mi. Praesent enim nisl, bibendum vitae ante et, placerat pharetra magna. Donec facilisis nisl turpis, eget facilisis turpis semper non. Maecenas luctus ligula tincidunt iasdsd vitae ante et,
<br><br>
Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque sed consectetur erat. Maecenas in elementum libero. Sed consequat pellentesque ultricies. Ut laoreet vehicula nisl sed placerat. Duis posuere lectus n, eros et hendrerit pellentesque, ante magna condimentum sapien, eget ultrices eros libero non orci. Etiam varius diam lectus.
<br><br>
<div class="row">
<div class="col-md-8"></div>
<div class="col-md-4">
<div class="row">
<div class="col-md-6">Miejsce wystawienia</div><div class="col-md-6"><b><%= 'Rumia' %></b></div>
</div>
<div class="row">
<div class="col-md-6">Data wystawienia</div><div class="col-md-6"><b><%= @invoice.date %></b></div>
</div>
<div class="row">
<div class="col-md-6">Data sprzedaży</div><div class="col-md-6"><b><%= @invoice.date %></b></div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12"><h1>&nbsp;</h1></div>
</div>
<div class="row">
<div class="col-md-4"></div><div class="col-md-4"><h1>Faktura VAT nr <%= @invoice.number %></h1></div><div class="col-md-4"></div>
</div>
<div class="row">
<div class="col-md-12"><h1>&nbsp;</h1></div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row">
<div class="col-md-12"><h3><b>Sprzedawca:</b></h3></div>
</div>
<div class="row">
<div class="col-md-12"><h4><%= @invoice.user_firm.name %></h4></div>
</div>
<div class="row">
<div class="col-md-12"><h4><%= @invoice.user_firm.street %></h4></div>
</div>
<div class="row">
<div class="col-md-12"><h4><%= @invoice.user_firm.postcode %> <%= @invoice.user_firm.city %></h4></div>
</div>
<div class="row">
<div class="col-md-12"><h4>NIP: <%= @invoice.user_firm.nip %></h4></div>
</div>
</div>
<div class="col-md-6">
<div class="row">
<div class="col-md-12"><h3><b>Nabywca:</b></h3></div>
</div>
<div class="row">
<div class="col-md-12"><h4><%= @invoice.customer.name %></h4></div>
</div>
<div class="row">
<div class="col-md-12"><h4><%= @invoice.customer.street %></h4></div>
</div>
<div class="row">
<div class="col-md-12"><h4><%= @invoice.customer.postcode %> <%= @invoice.user_firm.city %></h4></div>
</div>
<div class="row">
<div class="col-md-12"><h4>NIP: <%= @invoice.customer.nip %></h4></div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12"><h1>&nbsp;</h1></div>
</div>
<div class="row">
<div class="col-md-12">
<table class="table table-bordered">
<thead>
<tr>
<th>Lp</th>
<th>Nazwa towaru/usługi</th>
<th>PKWiU</th>
<th>Ilość</th>
<th>j.m.</th>
<th>Cena netto</th>
<th>%VAT</th>
<th>Wartość netto</th>
<th>Kwota VAT</th>
<th>Wartość brutto</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Usługa transportowa</td>
<td></td>
<td class="text-right">1</td>
<td class="text-right">szt.</td>
<td class="text-right">10 000,00</td>
<td class="text-right">23%</td>
<td class="text-right">10 000,00</td>
<td class="text-right">2 300,00</td>
<td class="text-right">12 300,00</td>
</tr>
<tr>
<td>2</td>
<td>Usługa informatyczna</td>
<td></td>
<td class="text-right">1</td>
<td class="text-right">szt.</td>
<td class="text-right">10 000,00</td>
<td class="text-right">23%</td>
<td class="text-right">10 000,00</td>
<td class="text-right">2 300,00</td>
<td class="text-right">12 300,00</td>
</tr>
<tr>
<td>3</td>
<td>Usługa towarowa</td>
<td></td>
<td class="text-right">1</td>
<td class="text-right">szt.</td>
<td class="text-right">10 000,00</td>
<td class="text-right">23%</td>
<td class="text-right">10 000,00</td>
<td class="text-right">2 300,00</td>
<td class="text-right">12 300,00</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-md-6"></div>
<div class="col-md-6">
<table class="table table-bordered">
<thead>
<tr class="info">
<th>Podsumowanie wg stawki VAT</th>
<th>Wartość netto</th>
<th>Kwota VAT</th>
<th>Wartość brutto</th>
</tr>
</thead>
<tbody>
<tr>
<td>Podatek VAT 23%</td>
<td class="text-right">30 000,00</td>
<td class="text-right">6 900,00</td>
<td class="text-right">36 900,00</td>
</tr>
<tr>
<td><b>Razem:</b></td>
<td class="text-right"><b>30 000,00<b></td>
<td class="text-right"><b>6 900,00<b></td>
<td class="text-right"><b>36 900,00<b></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -19,7 +19,7 @@
<% @invoices.each do |invoice| %>
<tr>
<td><%= invoice.number %></td>
<td><%= link_to invoice.number, invoice_path(invoice) %></td>
<td><%= invoice.customer.name %></td>
<td><%= number_with_precision(invoice.netto_amount, precision: 2) %></td>
<td><%= invoice.date %></td>

View File

@ -1,4 +1,4 @@
<div class="col-lg-8 col-md-12 panel-default">
<div class="col-lg-12 col-md-12 panel-default">
<div class="content-box-header panel-heading">
<div class="panel-title">Nowa faktura</div>
<div class="panel-options">

View File

@ -20,6 +20,8 @@
</div>
</div>
<div class="content-box-large box-with-header">
<%= decimal_to_word(127786.9) %><br />
<%= decimal_to_word(599.99) %><br />
Pellentesque luctus quam quis consequat vulputate. Sed sit amet diam ipsum. <br>
</div>
</div>

View File

@ -252,3 +252,60 @@ pl:
long: "%B %d, %Y %H:%M"
short: "%d %b %H:%M"
pm: po południu
numbers:
minus: 'minus'
zero: 'zero'
one: 'jeden'
two: 'dwa'
three: 'trzy'
four: 'cztery'
five: 'pięć'
six: 'sześć'
seven: 'siedem'
eight: 'osiem'
nine: 'dziewięć'
eleven: 'jedenaście'
twelve: 'dwanaście'
thirteen: 'trzynaście'
fourteen: 'czternaście'
fifteen: 'piętnaście'
sixteen: 'szesnaście'
seventeen: 'siedemnaście'
eighteen: 'osiemnaście'
nineteen: 'dziewiętnaście'
ten: 'dziesięć'
twenty: 'dwadzieścia'
thirty: 'trzydzieści'
fourty: 'czterdzieści'
fifty: 'pięćdziesiąt'
sixty: 'sześćdziesiąt'
seventy: 'siedemdziesiąt'
eighty: 'osiemdziesiąt'
ninety: 'dziewięćdziesiąt'
hundred: 'sto'
two_hudred: 'dwieście'
three_hundred: 'trzysta'
four_hundred: 'czterysta'
five_hundred: 'pięćset'
six_hundred: 'sześćset'
seven_hudred: 'siedemset'
eight_hundred: 'osiemset'
nine_hundred: 'dziewięćset'
thousand: 'tysiąc'
thousand1: 'tysiące'
thousand2: 'tysięcy'
milion: 'milion'
milion1: 'miliony'
milion2: 'milionów'
miliard: 'miliard'
miliard1: 'miliardy'
miliard2: 'miliardów'
bilion: 'bilion'
bilion1: 'biliony'
bilion2: 'bilionów'
biliard: 'biliard'
biliard1: 'biliardy'
biliard2: 'biliardów'
trylion: 'trylion'
trylion1: 'tryliony'
trylion2: 'tryliardów'