diff --git a/stoptime.rb b/stoptime.rb index 407cdcb..ebe0c78 100644 --- a/stoptime.rb +++ b/stoptime.rb @@ -193,6 +193,7 @@ module StopTime::Models # [email] email address (String) # [phone] phone number (String) # [hourly_rate] default hourly rate (Float) + # [time_specification] whether the customer requires time specifications (TrueClass/FalseClass) # [created_at] time of creation (Time) # [updated_at] time of last update (Time) # @@ -358,6 +359,8 @@ module StopTime::Models # [id] unique identification number (Fixnum) # [number] invoice number (Fixnum) # [paid] flag whether the invoice has been paid (TrueClass/FalseClass) + # [include_specification] flag whether the invoice should include a time + # specification (TrueClass/FalseClass) # [created_at] time of creation (Time) # [updated_at] time of last update (Time) # @@ -694,6 +697,18 @@ module StopTime::Models end end + class TimeSpecificationSupport < V 1.95 # :nodoc: + def self.up + add_column(Customer.table_name, :time_specification, :boolean) + add_column(Invoice.table_name, :include_specification, :boolean) + end + + def self.down + remove_column(Customer.table_name, :time_specification) + remove_column(Invoice.table_name, :include_specification) + end + end + end # StopTime::Models # = The Stop… Camping Time! controllers @@ -836,6 +851,7 @@ module StopTime::Controllers attrs.each do |attr| @customer[attr] = @input[attr] end + @customer.time_specification = @input.has_key? "time_specification" @customer.save if @customer.invalid? @errors = @customer.errors @@ -1040,6 +1056,7 @@ module StopTime::Controllers invoice = Invoice.create(:number => number) invoice.customer = Customer.find(customer_id) invoice.company_info = CompanyInfo.last + invoice.include_specification = invoice.customer.time_specification # Handle the hourly rated tasks first by looking at the selected time # entries. @@ -1127,6 +1144,7 @@ module StopTime::Controllers def post(customer_id, invoice_number) invoice = Invoice.find_by_number(invoice_number) invoice.paid = @input.has_key? "paid" + invoice.include_specification = @input.has_key? "include_specification" invoice.save redirect R(CustomersNInvoicesX, customer_id, invoice_number) @@ -1804,6 +1822,12 @@ module StopTime::Views _form_input_with_label("Phone number", "phone", :tel) _form_input_with_label("Financial contact", "financial_contact", :text) _form_input_with_label("Default hourly rate", "hourly_rate", :text) + div.control_group do + label.control_label "Time specifications?" + div.controls do + _form_input_checkbox("time_specification") + end + end div.form_actions do button.btn.btn_primary @button.capitalize, :type => "submit", :name => @button, :value => @button.capitalize @@ -2018,6 +2042,12 @@ module StopTime::Views _form_input_checkbox("paid") end end + div.control_group do + label.control_label "Include specification?" + div.controls do + _form_input_checkbox("include_specification") + end + end div.form_actions do button.btn.btn_primary "Update", :type => :submit, :name => "update", :value => "Update" diff --git a/templates/invoice.tex.erb b/templates/invoice.tex.erb index cdc2692..aacabee 100644 --- a/templates/invoice.tex.erb +++ b/templates/invoice.tex.erb @@ -1,4 +1,4 @@ -\documentclass[a4paper,12pt,oneside,dutch]{isodoc} +\documentclass[a4paper,oneside,dutch]{isodoc} % rubber: clean <%= @number %>.out @@ -61,6 +61,8 @@ <% end %><% unless @company.vatno.blank? %> vatno=<%= @company.vatno %>, <% end %><% unless @company.chamber.blank? %> chamber=<%= @company.chamber %> <% end %>} +\setlength{\parindent}{0pt} +\setlength{\parskip}{\medskipamount} <% if @company.bank_name.present? %> \renewcommand{\accountnotext}{<%= @company.bank_name %> rekeningnr} @@ -88,6 +90,13 @@ \newcommand{\ihtotal}[1]{\cmidrule[.05em]{4-4}% \textbf{\totaltext}&&&\textbf{\currency~#1}} +\newenvironment{istable}% + {\vskip1em\tabularx{\linewidth}{@{}X@{\quad}l@{\qquad}r@{}} + \descriptiontext&Datum&Aantal uur\ML}% + {\endtabularx} +\newcommand{\istask}[1]{\textbf{#1}\\} +\newcommand{\isitem}[3]{\quad #1\\} + \begin{document} \invoice{ @@ -122,10 +131,34 @@ \end{ihtable} \vspace{2em} +<% if @invoice.include_specification? +%> Zie bijlage op de volgende pagina voor een nadere specificatie.\\[1em]<%end %> Ik verzoek u vriendelijk het verschuldigde bedrag binnen 30 dagen na factuurdatum over te maken onder vermelding van het factuurnummer. \\ \accountdata } +<% if @invoice.include_specification? %>{ + \newpage + + {\bfseries\scshape\Large Specificatie} + + Hieronder volgt een specificatie van gemaakte uren per taak per + uitgevoerde activiteit. + + \begin{istable} + <% @invoice.tasks.each do |task| +%> \istask{<%= task.comment_or_name %>}<% + task.time_entries.each do |time_entry| %> + \isitem{<%= time_entry.comment || "Geen opmerking" %>}% + {<%= time_entry.date.to_date %>}% + {<%= number_with_precision(time_entry.hours_total) %>}<% + end %>\\[\medskipamount]<% + end %> + \end{istable} + \label{LastPageOf\thelettercount} +<% end %>} +\letter{} + \end{document}