[NTG-context] Discussion: correspondence with ConTeXt

Peter Münster pmlists at free.fr
Thu Apr 17 22:59:27 CEST 2008


On Thu, Apr 17 2008, Taco Hoekwater wrote:

>    * Quite a bit of correspondence is invoices and quotes,
>      with automatic calculations in them (VAT etc).

Hello Taco,

Quite funny: Just 3 days ago, I wrote t-invoice.tex for my personal needs,
just 1 command and very very simple:
\startInvoice
\invoiceItem[description=Ballon eau chaude, price={5063,4 + 1115,87}]
\invoiceItem[description=Vase d'expansion, price={386,25}]
\invoiceItem[description=Plan d'implantation du bâtiment, price={257,14}]
\invoiceItem[description=Branchement d'eau, price={2891,62}]
\stopInvoice

\stopInvoice prints the total.



Here the definitions (can be enhanced and/or wikified):

\startluacode
-- namespace
thirddata = thirddata or { }
thirddata.invoices = {}
thirddata.invoices.total = 0
thirddata.invoices.pos = 1

-- get price with right format
-- p: the price
-- return price with right format
function thirddata.invoices.format(p)
	local s = string.format("%.2f", p)
	s = s:gsub("%.", ",")
	return s
end

-- print new item
-- d: the description
-- p: the price
function thirddata.invoices.new_item(d, p)
	thirddata.invoices.total = thirddata.invoices.total + p
	tex.print("\\bTR\\bTD" .. string.format("%03d", thirddata.invoices.pos) ..
		  "\\eTD\\bTD " .. d .. "\\eTD\\bTD " ..
		  thirddata.invoices.format(p) .. "\\eTD\\eTR")
	thirddata.invoices.pos = thirddata.invoices.pos + 1
end
\stopluacode

\def\invoiceItem{\dosingleargument\doinvoiceItem}
\def\doinvoiceItem[#1]{\getparameters[IV][#1]
  \ctxlua{thirddata.invoices.new_item("\IVdescription",
    \ctxlua{local s = string.gsub("\IVprice", ",", "."); tex.print(s)})}}

\def\invoiceTotal{%
  \ctxlua{tex.print(thirddata.invoices.format(thirddata.invoices.total))}}

\def\startInvoice{\start
  \setupTABLE[frame=off,textwidth=\textwidth,option=stretch]
  \setupTABLE[r][first][bottomframe=on]
  \setupTABLE[r][2,last][top=\blank]
  \setupTABLE[c][first,2][align=flushleft]
  \setupTABLE[c][last][align={flushright,lohi}]
  \bTABLE\bTR\bTH Position \eTH\bTH Description \eTH\bTH Prix \eTH\eTR}

\def\stopInvoice{\bTR\bTD[nc=2,align=flushright]Total:\eTD
  \bTD \invoiceTotal\eTD\eTR\eTABLE\stop}


Cheers, Peter

-- 
http://pmrb.free.fr/contact/



More information about the ntg-context mailing list