[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

SF.net SVN: ledger-smb: [1098] tags



Revision: 1098
          http://svn.sourceforge.net/ledger-smb/?rev=1098&view=rev
Author:   einhverfr
Date:     2007-04-24 15:53:52 -0700 (Tue, 24 Apr 2007)

Log Message:
-----------
tagging 1.2.3

Added Paths:
-----------
    tags/1.2.3/
    tags/1.2.3/BUGS
    tags/1.2.3/Build.PL
    tags/1.2.3/COMPATABILITY
    tags/1.2.3/CONTRIBUTORS
    tags/1.2.3/COPYRIGHT
    tags/1.2.3/Changelog
    tags/1.2.3/INSTALL
    tags/1.2.3/LICENSE
    tags/1.2.3/LedgerSMB/
    tags/1.2.3/LedgerSMB/AA.pm
    tags/1.2.3/LedgerSMB/AM.pm
    tags/1.2.3/LedgerSMB/BP.pm
    tags/1.2.3/LedgerSMB/CA.pm
    tags/1.2.3/LedgerSMB/CP.pm
    tags/1.2.3/LedgerSMB/CT.pm
    tags/1.2.3/LedgerSMB/CreditCard/
    tags/1.2.3/LedgerSMB/CreditCard/Config.pm
    tags/1.2.3/LedgerSMB/CreditCard/TrustCommerce/
    tags/1.2.3/LedgerSMB/CreditCard/TrustCommerce/Config.pm
    tags/1.2.3/LedgerSMB/CreditCard/TrustCommerce.pm
    tags/1.2.3/LedgerSMB/CreditCard.pm
    tags/1.2.3/LedgerSMB/Form.pm
    tags/1.2.3/LedgerSMB/GL.pm
    tags/1.2.3/LedgerSMB/HR.pm
    tags/1.2.3/LedgerSMB/IC.pm
    tags/1.2.3/LedgerSMB/IR.pm
    tags/1.2.3/LedgerSMB/IS.pm
    tags/1.2.3/LedgerSMB/Inifile.pm
    tags/1.2.3/LedgerSMB/JC.pm
    tags/1.2.3/LedgerSMB/Locale.pm
    tags/1.2.3/LedgerSMB/Log.pm
    tags/1.2.3/LedgerSMB/Mailer.pm
    tags/1.2.3/LedgerSMB/Menu.pm
    tags/1.2.3/LedgerSMB/Num2text.pm
    tags/1.2.3/LedgerSMB/OE.pm
    tags/1.2.3/LedgerSMB/OP.pm
    tags/1.2.3/LedgerSMB/PE.pm
    tags/1.2.3/LedgerSMB/PriceMatrix.pm
    tags/1.2.3/LedgerSMB/RC.pm
    tags/1.2.3/LedgerSMB/RP.pm
    tags/1.2.3/LedgerSMB/Session/
    tags/1.2.3/LedgerSMB/Session/DB.pm
    tags/1.2.3/LedgerSMB/Session.pm
    tags/1.2.3/LedgerSMB/Sysconfig.pm
    tags/1.2.3/LedgerSMB/Tax.pm
    tags/1.2.3/LedgerSMB/Taxes/
    tags/1.2.3/LedgerSMB/Taxes/Simple.pm
    tags/1.2.3/LedgerSMB/User.pm
    tags/1.2.3/LedgerSMB/locales.pl
    tags/1.2.3/README.OpenBSD
    tags/1.2.3/README.debian
    tags/1.2.3/README.svn-status
    tags/1.2.3/README.translations
    tags/1.2.3/TODO
    tags/1.2.3/UPGRADE
    tags/1.2.3/VERSION
    tags/1.2.3/admin.pl
    tags/1.2.3/am.pl
    tags/1.2.3/ap.pl
    tags/1.2.3/ar.pl
    tags/1.2.3/bin/
    tags/1.2.3/bin/aa.pl
    tags/1.2.3/bin/admin.pl
    tags/1.2.3/bin/am.pl
    tags/1.2.3/bin/ap.pl
    tags/1.2.3/bin/ar.pl
    tags/1.2.3/bin/arap.pl
    tags/1.2.3/bin/arapprn.pl
    tags/1.2.3/bin/bp.pl
    tags/1.2.3/bin/ca.pl
    tags/1.2.3/bin/cp.pl
    tags/1.2.3/bin/ct.pl
    tags/1.2.3/bin/custom/
    tags/1.2.3/bin/gl.pl
    tags/1.2.3/bin/hr.pl
    tags/1.2.3/bin/ic.pl
    tags/1.2.3/bin/io.pl
    tags/1.2.3/bin/ir.pl
    tags/1.2.3/bin/is.pl
    tags/1.2.3/bin/jc.pl
    tags/1.2.3/bin/login.pl
    tags/1.2.3/bin/menu.pl
    tags/1.2.3/bin/oe.pl
    tags/1.2.3/bin/pe.pl
    tags/1.2.3/bin/pos.pl
    tags/1.2.3/bin/ps.pl
    tags/1.2.3/bin/pw.pl
    tags/1.2.3/bin/rc.pl
    tags/1.2.3/bin/rp.pl
    tags/1.2.3/bp.pl
    tags/1.2.3/ca.pl
    tags/1.2.3/common.pl
    tags/1.2.3/configure_apache.sh
    tags/1.2.3/contrib/
    tags/1.2.3/contrib/replication/
    tags/1.2.3/contrib/replication/README
    tags/1.2.3/contrib/replication/configure-replication.sh
    tags/1.2.3/cp.pl
    tags/1.2.3/css/
    tags/1.2.3/css/ledger-smb-blue.css
    tags/1.2.3/css/ledger-smb-brown.css
    tags/1.2.3/css/ledger-smb-purple.css
    tags/1.2.3/css/ledger-smb-red.css
    tags/1.2.3/css/ledger-smb-yellow.css
    tags/1.2.3/css/ledger-smb.css
    tags/1.2.3/ct.pl
    tags/1.2.3/custom.pl
    tags/1.2.3/dists/
    tags/1.2.3/dists/deb/
    tags/1.2.3/dists/deb/cpan_requisites.txt
    tags/1.2.3/dists/deb/required_debs.txt
    tags/1.2.3/dists/gentoo/
    tags/1.2.3/dists/gentoo/ChangeLog
    tags/1.2.3/dists/gentoo/ledger-smb-1.1.1c.ebuild
    tags/1.2.3/dists/gentoo/ledger-smb-VERSION.ebuild
    tags/1.2.3/dists/gentoo/ledger-smb-httpd-gentoo.conf
    tags/1.2.3/dists/gentoo/metadata.xml
    tags/1.2.3/dists/gentoo/post-install.txt
    tags/1.2.3/dists/rpm/
    tags/1.2.3/dists/rpm/build.sh
    tags/1.2.3/dists/rpm/ledgersmb.spec
    tags/1.2.3/dists/slackware/
    tags/1.2.3/dists/slackware/slack-desc
    tags/1.2.3/dists/source/
    tags/1.2.3/dists/source/build.sh
    tags/1.2.3/dists/win32/
    tags/1.2.3/dists/win32/build.bat
    tags/1.2.3/dists/win32/shebang-activeperl.pl
    tags/1.2.3/dists/win32/shebang-vanilla.pl
    tags/1.2.3/dists/win32/wix/
    tags/1.2.3/dists/win32/wix/apache.wxs
    tags/1.2.3/dists/win32/wix/perl.wxs
    tags/1.2.3/dists/win32/wix/postgresql.wxs
    tags/1.2.3/dists/win32/wix/uuidgen.pl
    tags/1.2.3/dists/win32/wix/uuids
    tags/1.2.3/doc/
    tags/1.2.3/doc/API/
    tags/1.2.3/doc/API/Database
    tags/1.2.3/doc/COPYRIGHT
    tags/1.2.3/doc/LedgerSMB-manual.pdf
    tags/1.2.3/doc/README
    tags/1.2.3/doc/coding-standard.pdf
    tags/1.2.3/doc/coding-standard.tex
    tags/1.2.3/doc/database/
    tags/1.2.3/doc/database/ledgersmb.dia
    tags/1.2.3/doc/database/ledgersmb.dot
    tags/1.2.3/doc/database/ledgersmb.html
    tags/1.2.3/doc/database/ledgersmb.neato
    tags/1.2.3/doc/database/ledgersmb.xml
    tags/1.2.3/doc/database/ledgersmb.zigzag.dia
    tags/1.2.3/doc/faq.html
    tags/1.2.3/doc/html_manual/
    tags/1.2.3/doc/html_manual/LedgerSMB-manual.css
    tags/1.2.3/doc/html_manual/LedgerSMB-manual.html
    tags/1.2.3/doc/html_manual/LedgerSMB-manual0x.png
    tags/1.2.3/doc/html_manual/LedgerSMB-manual1x.png
    tags/1.2.3/doc/html_manual/LedgerSMB-manual2.html
    tags/1.2.3/doc/html_manual/LedgerSMB-manual2x.png
    tags/1.2.3/doc/html_manual/LedgerSMB-manual3.html
    tags/1.2.3/doc/html_manual/LedgerSMB-manual3x.png
    tags/1.2.3/doc/html_manual/LedgerSMB-manual4.html
    tags/1.2.3/doc/html_manual/LedgerSMB-manual4x.png
    tags/1.2.3/doc/html_manual/LedgerSMB-manual5x.png
    tags/1.2.3/doc/html_manual/LedgerSMB-manual6x.png
    tags/1.2.3/doc/manual/
    tags/1.2.3/doc/manual/LedgerSMB-manual.aux
    tags/1.2.3/doc/manual/LedgerSMB-manual.lof
    tags/1.2.3/doc/manual/LedgerSMB-manual.log
    tags/1.2.3/doc/manual/LedgerSMB-manual.out
    tags/1.2.3/doc/manual/LedgerSMB-manual.tex
    tags/1.2.3/doc/manual/LedgerSMB-manual.toc
    tags/1.2.3/doc/manual/LedgerSMB-manual.txt
    tags/1.2.3/doc/manual/ap_workflow_complex.tex
    tags/1.2.3/doc/manual/ap_workflow_ship.tex
    tags/1.2.3/doc/manual/ar_workflow_complex.tex
    tags/1.2.3/doc/manual/ar_workflow_ship.tex
    tags/1.2.3/doc/manual/fdl.tex
    tags/1.2.3/doc/manual/metatron.sty
    tags/1.2.3/doc/manual/simple_ap_workflow.tex
    tags/1.2.3/doc/manual/simple_ar_dataflow.tex
    tags/1.2.3/doc/manual/sl-stack.tex
    tags/1.2.3/doc/release_notes
    tags/1.2.3/doc/samples/
    tags/1.2.3/doc/samples/lsmb01-cli-example.sh
    tags/1.2.3/doc/samples/lsmb02-cli-example.pl
    tags/1.2.3/drivers/
    tags/1.2.3/drivers/pd3000.pl
    tags/1.2.3/favicon.ico
    tags/1.2.3/gl.pl
    tags/1.2.3/hr.pl
    tags/1.2.3/ic.pl
    tags/1.2.3/import_members.pl
    tags/1.2.3/index.html
    tags/1.2.3/ir.pl
    tags/1.2.3/is.pl
    tags/1.2.3/jc.pl
    tags/1.2.3/ledger-smb.eps
    tags/1.2.3/ledger-smb.gif
    tags/1.2.3/ledger-smb.png
    tags/1.2.3/ledger-smb_small.png
    tags/1.2.3/ledgersmb-httpd.conf
    tags/1.2.3/ledgersmb.conf.default
    tags/1.2.3/locale/
    tags/1.2.3/locale/LedgerSMB.pot
    tags/1.2.3/locale/html/
    tags/1.2.3/locale/html/splash.html
    tags/1.2.3/locale/legacy/
    tags/1.2.3/locale/legacy/ch/
    tags/1.2.3/locale/legacy/ch/COPYING
    tags/1.2.3/locale/legacy/ch/LANGUAGE
    tags/1.2.3/locale/legacy/ch/Num2text
    tags/1.2.3/locale/legacy/ch/aa
    tags/1.2.3/locale/legacy/ch/admin
    tags/1.2.3/locale/legacy/ch/all
    tags/1.2.3/locale/legacy/ch/am
    tags/1.2.3/locale/legacy/ch/ap
    tags/1.2.3/locale/legacy/ch/ar
    tags/1.2.3/locale/legacy/ch/arap
    tags/1.2.3/locale/legacy/ch/arapprn
    tags/1.2.3/locale/legacy/ch/bp
    tags/1.2.3/locale/legacy/ch/ca
    tags/1.2.3/locale/legacy/ch/cp
    tags/1.2.3/locale/legacy/ch/ct
    tags/1.2.3/locale/legacy/ch/gl
    tags/1.2.3/locale/legacy/ch/hr
    tags/1.2.3/locale/legacy/ch/ic
    tags/1.2.3/locale/legacy/ch/io
    tags/1.2.3/locale/legacy/ch/ir
    tags/1.2.3/locale/legacy/ch/is
    tags/1.2.3/locale/legacy/ch/jc
    tags/1.2.3/locale/legacy/ch/locales.pl
    tags/1.2.3/locale/legacy/ch/login
    tags/1.2.3/locale/legacy/ch/menu
    tags/1.2.3/locale/legacy/ch/oe
    tags/1.2.3/locale/legacy/ch/pe
    tags/1.2.3/locale/legacy/ch/pos
    tags/1.2.3/locale/legacy/ch/ps
    tags/1.2.3/locale/legacy/ch/pw
    tags/1.2.3/locale/legacy/ch/rc
    tags/1.2.3/locale/legacy/ch/rp
    tags/1.2.3/locale/legacy/co/
    tags/1.2.3/locale/legacy/co/COPYING
    tags/1.2.3/locale/legacy/co/LANGUAGE
    tags/1.2.3/locale/legacy/co/Num2text
    tags/1.2.3/locale/legacy/co/aa
    tags/1.2.3/locale/legacy/co/admin
    tags/1.2.3/locale/legacy/co/all
    tags/1.2.3/locale/legacy/co/am
    tags/1.2.3/locale/legacy/co/ap
    tags/1.2.3/locale/legacy/co/ar
    tags/1.2.3/locale/legacy/co/arap
    tags/1.2.3/locale/legacy/co/arapprn
    tags/1.2.3/locale/legacy/co/bp
    tags/1.2.3/locale/legacy/co/ca
    tags/1.2.3/locale/legacy/co/cp
    tags/1.2.3/locale/legacy/co/ct
    tags/1.2.3/locale/legacy/co/gl
    tags/1.2.3/locale/legacy/co/hr
    tags/1.2.3/locale/legacy/co/ic
    tags/1.2.3/locale/legacy/co/io
    tags/1.2.3/locale/legacy/co/ir
    tags/1.2.3/locale/legacy/co/is
    tags/1.2.3/locale/legacy/co/jc
    tags/1.2.3/locale/legacy/co/locales.pl
    tags/1.2.3/locale/legacy/co/login
    tags/1.2.3/locale/legacy/co/menu
    tags/1.2.3/locale/legacy/co/oe
    tags/1.2.3/locale/legacy/co/pe
    tags/1.2.3/locale/legacy/co/pos
    tags/1.2.3/locale/legacy/co/ps
    tags/1.2.3/locale/legacy/co/pw
    tags/1.2.3/locale/legacy/co/rc
    tags/1.2.3/locale/legacy/co/rp
    tags/1.2.3/locale/legacy/de/
    tags/1.2.3/locale/legacy/de/COPYING
    tags/1.2.3/locale/legacy/de/LANGUAGE
    tags/1.2.3/locale/legacy/de/Num2text
    tags/1.2.3/locale/legacy/de/aa
    tags/1.2.3/locale/legacy/de/admin
    tags/1.2.3/locale/legacy/de/all
    tags/1.2.3/locale/legacy/de/am
    tags/1.2.3/locale/legacy/de/ap
    tags/1.2.3/locale/legacy/de/ar
    tags/1.2.3/locale/legacy/de/arap
    tags/1.2.3/locale/legacy/de/arapprn
    tags/1.2.3/locale/legacy/de/bp
    tags/1.2.3/locale/legacy/de/ca
    tags/1.2.3/locale/legacy/de/cp
    tags/1.2.3/locale/legacy/de/ct
    tags/1.2.3/locale/legacy/de/gl
    tags/1.2.3/locale/legacy/de/hr
    tags/1.2.3/locale/legacy/de/ic
    tags/1.2.3/locale/legacy/de/io
    tags/1.2.3/locale/legacy/de/ir
    tags/1.2.3/locale/legacy/de/is
    tags/1.2.3/locale/legacy/de/jc
    tags/1.2.3/locale/legacy/de/locales.pl
    tags/1.2.3/locale/legacy/de/login
    tags/1.2.3/locale/legacy/de/menu
    tags/1.2.3/locale/legacy/de/oe
    tags/1.2.3/locale/legacy/de/pe
    tags/1.2.3/locale/legacy/de/pos
    tags/1.2.3/locale/legacy/de/ps
    tags/1.2.3/locale/legacy/de/pw
    tags/1.2.3/locale/legacy/de/rc
    tags/1.2.3/locale/legacy/de/rp
    tags/1.2.3/locale/legacy/ee/
    tags/1.2.3/locale/legacy/ee/COPYING
    tags/1.2.3/locale/legacy/ee/LANGUAGE
    tags/1.2.3/locale/legacy/ee/Num2text
    tags/1.2.3/locale/legacy/ee/aa
    tags/1.2.3/locale/legacy/ee/admin
    tags/1.2.3/locale/legacy/ee/all
    tags/1.2.3/locale/legacy/ee/am
    tags/1.2.3/locale/legacy/ee/ap
    tags/1.2.3/locale/legacy/ee/ar
    tags/1.2.3/locale/legacy/ee/arap
    tags/1.2.3/locale/legacy/ee/arapprn
    tags/1.2.3/locale/legacy/ee/bp
    tags/1.2.3/locale/legacy/ee/ca
    tags/1.2.3/locale/legacy/ee/cp
    tags/1.2.3/locale/legacy/ee/ct
    tags/1.2.3/locale/legacy/ee/gl
    tags/1.2.3/locale/legacy/ee/hr
    tags/1.2.3/locale/legacy/ee/ic
    tags/1.2.3/locale/legacy/ee/io
    tags/1.2.3/locale/legacy/ee/ir
    tags/1.2.3/locale/legacy/ee/is
    tags/1.2.3/locale/legacy/ee/jc
    tags/1.2.3/locale/legacy/ee/locales.pl
    tags/1.2.3/locale/legacy/ee/login
    tags/1.2.3/locale/legacy/ee/menu
    tags/1.2.3/locale/legacy/ee/oe
    tags/1.2.3/locale/legacy/ee/pe
    tags/1.2.3/locale/legacy/ee/pos
    tags/1.2.3/locale/legacy/ee/ps
    tags/1.2.3/locale/legacy/ee/pw
    tags/1.2.3/locale/legacy/ee/rc
    tags/1.2.3/locale/legacy/ee/rp
    tags/1.2.3/locale/legacy/es/
    tags/1.2.3/locale/legacy/es/COPYING
    tags/1.2.3/locale/legacy/es/LANGUAGE
    tags/1.2.3/locale/legacy/es/Num2text
    tags/1.2.3/locale/legacy/es/aa
    tags/1.2.3/locale/legacy/es/admin
    tags/1.2.3/locale/legacy/es/all
    tags/1.2.3/locale/legacy/es/am
    tags/1.2.3/locale/legacy/es/ap
    tags/1.2.3/locale/legacy/es/ar
    tags/1.2.3/locale/legacy/es/arap
    tags/1.2.3/locale/legacy/es/arapprn
    tags/1.2.3/locale/legacy/es/bp
    tags/1.2.3/locale/legacy/es/ca
    tags/1.2.3/locale/legacy/es/cp
    tags/1.2.3/locale/legacy/es/ct
    tags/1.2.3/locale/legacy/es/gl
    tags/1.2.3/locale/legacy/es/hr
    tags/1.2.3/locale/legacy/es/ic
    tags/1.2.3/locale/legacy/es/io
    tags/1.2.3/locale/legacy/es/ir
    tags/1.2.3/locale/legacy/es/is
    tags/1.2.3/locale/legacy/es/jc
    tags/1.2.3/locale/legacy/es/locales.pl
    tags/1.2.3/locale/legacy/es/login
    tags/1.2.3/locale/legacy/es/menu
    tags/1.2.3/locale/legacy/es/oe
    tags/1.2.3/locale/legacy/es/pe
    tags/1.2.3/locale/legacy/es/pos
    tags/1.2.3/locale/legacy/es/ps
    tags/1.2.3/locale/legacy/es/pw
    tags/1.2.3/locale/legacy/es/rc
    tags/1.2.3/locale/legacy/es/rp
    tags/1.2.3/locale/legacy/fi/
    tags/1.2.3/locale/legacy/fi/COPYING
    tags/1.2.3/locale/legacy/fi/LANGUAGE
    tags/1.2.3/locale/legacy/fi/aa
    tags/1.2.3/locale/legacy/fi/admin
    tags/1.2.3/locale/legacy/fi/all
    tags/1.2.3/locale/legacy/fi/am
    tags/1.2.3/locale/legacy/fi/ap
    tags/1.2.3/locale/legacy/fi/ar
    tags/1.2.3/locale/legacy/fi/arap
    tags/1.2.3/locale/legacy/fi/arapprn
    tags/1.2.3/locale/legacy/fi/bp
    tags/1.2.3/locale/legacy/fi/ca
    tags/1.2.3/locale/legacy/fi/cp
    tags/1.2.3/locale/legacy/fi/ct
    tags/1.2.3/locale/legacy/fi/gl
    tags/1.2.3/locale/legacy/fi/hr
    tags/1.2.3/locale/legacy/fi/ic
    tags/1.2.3/locale/legacy/fi/io
    tags/1.2.3/locale/legacy/fi/ir
    tags/1.2.3/locale/legacy/fi/is
    tags/1.2.3/locale/legacy/fi/jc
    tags/1.2.3/locale/legacy/fi/locales.pl
    tags/1.2.3/locale/legacy/fi/login
    tags/1.2.3/locale/legacy/fi/menu
    tags/1.2.3/locale/legacy/fi/oe
    tags/1.2.3/locale/legacy/fi/pe
    tags/1.2.3/locale/legacy/fi/pos
    tags/1.2.3/locale/legacy/fi/ps
    tags/1.2.3/locale/legacy/fi/pw
    tags/1.2.3/locale/legacy/fi/rc
    tags/1.2.3/locale/legacy/fi/rp
    tags/1.2.3/locale/legacy/fi_utf/
    tags/1.2.3/locale/legacy/fi_utf/COPYING
    tags/1.2.3/locale/legacy/fi_utf/LANGUAGE
    tags/1.2.3/locale/legacy/fi_utf/aa
    tags/1.2.3/locale/legacy/fi_utf/admin
    tags/1.2.3/locale/legacy/fi_utf/am
    tags/1.2.3/locale/legacy/fi_utf/ap
    tags/1.2.3/locale/legacy/fi_utf/ar
    tags/1.2.3/locale/legacy/fi_utf/arap
    tags/1.2.3/locale/legacy/fi_utf/arapprn
    tags/1.2.3/locale/legacy/fi_utf/bp
    tags/1.2.3/locale/legacy/fi_utf/ca
    tags/1.2.3/locale/legacy/fi_utf/cp
    tags/1.2.3/locale/legacy/fi_utf/ct
    tags/1.2.3/locale/legacy/fi_utf/gl
    tags/1.2.3/locale/legacy/fi_utf/hr
    tags/1.2.3/locale/legacy/fi_utf/ic
    tags/1.2.3/locale/legacy/fi_utf/io
    tags/1.2.3/locale/legacy/fi_utf/ir
    tags/1.2.3/locale/legacy/fi_utf/is
    tags/1.2.3/locale/legacy/fi_utf/jc
    tags/1.2.3/locale/legacy/fi_utf/locales.pl
    tags/1.2.3/locale/legacy/fi_utf/login
    tags/1.2.3/locale/legacy/fi_utf/menu
    tags/1.2.3/locale/legacy/fi_utf/oe
    tags/1.2.3/locale/legacy/fi_utf/pe
    tags/1.2.3/locale/legacy/fi_utf/pos
    tags/1.2.3/locale/legacy/fi_utf/ps
    tags/1.2.3/locale/legacy/fi_utf/pw
    tags/1.2.3/locale/legacy/fi_utf/rc
    tags/1.2.3/locale/legacy/fi_utf/rp
    tags/1.2.3/locale/legacy/ru/
    tags/1.2.3/locale/legacy/ru/COPYING
    tags/1.2.3/locale/legacy/ru/LANGUAGE
    tags/1.2.3/locale/legacy/ru/Num2text
    tags/1.2.3/locale/legacy/ru/aa
    tags/1.2.3/locale/legacy/ru/admin
    tags/1.2.3/locale/legacy/ru/all
    tags/1.2.3/locale/legacy/ru/am
    tags/1.2.3/locale/legacy/ru/ap
    tags/1.2.3/locale/legacy/ru/ar
    tags/1.2.3/locale/legacy/ru/arap
    tags/1.2.3/locale/legacy/ru/arapprn
    tags/1.2.3/locale/legacy/ru/bp
    tags/1.2.3/locale/legacy/ru/ca
    tags/1.2.3/locale/legacy/ru/cp
    tags/1.2.3/locale/legacy/ru/ct
    tags/1.2.3/locale/legacy/ru/gl
    tags/1.2.3/locale/legacy/ru/hr
    tags/1.2.3/locale/legacy/ru/ic
    tags/1.2.3/locale/legacy/ru/io
    tags/1.2.3/locale/legacy/ru/ir
    tags/1.2.3/locale/legacy/ru/is
    tags/1.2.3/locale/legacy/ru/jc
    tags/1.2.3/locale/legacy/ru/locales.pl
    tags/1.2.3/locale/legacy/ru/login
    tags/1.2.3/locale/legacy/ru/menu
    tags/1.2.3/locale/legacy/ru/oe
    tags/1.2.3/locale/legacy/ru/pe
    tags/1.2.3/locale/legacy/ru/pos
    tags/1.2.3/locale/legacy/ru/ps
    tags/1.2.3/locale/legacy/ru/pw
    tags/1.2.3/locale/legacy/ru/rc
    tags/1.2.3/locale/legacy/ru/rp
    tags/1.2.3/locale/legacy/tw_big5/
    tags/1.2.3/locale/legacy/tw_big5/COPYING
    tags/1.2.3/locale/legacy/tw_big5/LANGUAGE
    tags/1.2.3/locale/legacy/tw_big5/aa
    tags/1.2.3/locale/legacy/tw_big5/admin
    tags/1.2.3/locale/legacy/tw_big5/all
    tags/1.2.3/locale/legacy/tw_big5/am
    tags/1.2.3/locale/legacy/tw_big5/ap
    tags/1.2.3/locale/legacy/tw_big5/ar
    tags/1.2.3/locale/legacy/tw_big5/arap
    tags/1.2.3/locale/legacy/tw_big5/arapprn
    tags/1.2.3/locale/legacy/tw_big5/bp
    tags/1.2.3/locale/legacy/tw_big5/ca
    tags/1.2.3/locale/legacy/tw_big5/cp
    tags/1.2.3/locale/legacy/tw_big5/ct
    tags/1.2.3/locale/legacy/tw_big5/gl
    tags/1.2.3/locale/legacy/tw_big5/hr
    tags/1.2.3/locale/legacy/tw_big5/ic
    tags/1.2.3/locale/legacy/tw_big5/io
    tags/1.2.3/locale/legacy/tw_big5/ir
    tags/1.2.3/locale/legacy/tw_big5/is
    tags/1.2.3/locale/legacy/tw_big5/jc
    tags/1.2.3/locale/legacy/tw_big5/locales.pl
    tags/1.2.3/locale/legacy/tw_big5/login
    tags/1.2.3/locale/legacy/tw_big5/menu
    tags/1.2.3/locale/legacy/tw_big5/oe
    tags/1.2.3/locale/legacy/tw_big5/pe
    tags/1.2.3/locale/legacy/tw_big5/pos
    tags/1.2.3/locale/legacy/tw_big5/ps
    tags/1.2.3/locale/legacy/tw_big5/pw
    tags/1.2.3/locale/legacy/tw_big5/rc
    tags/1.2.3/locale/legacy/tw_big5/rp
    tags/1.2.3/locale/legacy/tw_big5/temp
    tags/1.2.3/locale/legacy/ua/
    tags/1.2.3/locale/legacy/ua/COPYING
    tags/1.2.3/locale/legacy/ua/LANGUAGE
    tags/1.2.3/locale/legacy/ua/aa
    tags/1.2.3/locale/legacy/ua/admin
    tags/1.2.3/locale/legacy/ua/all
    tags/1.2.3/locale/legacy/ua/am
    tags/1.2.3/locale/legacy/ua/ap
    tags/1.2.3/locale/legacy/ua/ar
    tags/1.2.3/locale/legacy/ua/arap
    tags/1.2.3/locale/legacy/ua/arapprn
    tags/1.2.3/locale/legacy/ua/bp
    tags/1.2.3/locale/legacy/ua/ca
    tags/1.2.3/locale/legacy/ua/cp
    tags/1.2.3/locale/legacy/ua/ct
    tags/1.2.3/locale/legacy/ua/gl
    tags/1.2.3/locale/legacy/ua/hr
    tags/1.2.3/locale/legacy/ua/ic
    tags/1.2.3/locale/legacy/ua/io
    tags/1.2.3/locale/legacy/ua/ir
    tags/1.2.3/locale/legacy/ua/is
    tags/1.2.3/locale/legacy/ua/jc
    tags/1.2.3/locale/legacy/ua/locales.pl
    tags/1.2.3/locale/legacy/ua/login
    tags/1.2.3/locale/legacy/ua/menu
    tags/1.2.3/locale/legacy/ua/oe
    tags/1.2.3/locale/legacy/ua/pe
    tags/1.2.3/locale/legacy/ua/pos
    tags/1.2.3/locale/legacy/ua/ps
    tags/1.2.3/locale/legacy/ua/pw
    tags/1.2.3/locale/legacy/ua/rc
    tags/1.2.3/locale/legacy/ua/rp
    tags/1.2.3/locale/po/
    tags/1.2.3/locale/po/ar_EG.po
    tags/1.2.3/locale/po/bg.po
    tags/1.2.3/locale/po/ca.po
    tags/1.2.3/locale/po/cs.po
    tags/1.2.3/locale/po/da.po
    tags/1.2.3/locale/po/de.po
    tags/1.2.3/locale/po/de_CH.po
    tags/1.2.3/locale/po/el.po
    tags/1.2.3/locale/po/en.po
    tags/1.2.3/locale/po/en_CA.po
    tags/1.2.3/locale/po/en_GB.po
    tags/1.2.3/locale/po/es.po
    tags/1.2.3/locale/po/es_CO.po
    tags/1.2.3/locale/po/es_EC.po
    tags/1.2.3/locale/po/es_MX.po
    tags/1.2.3/locale/po/es_PA.po
    tags/1.2.3/locale/po/es_PY.po
    tags/1.2.3/locale/po/es_SV.po
    tags/1.2.3/locale/po/es_VE.po
    tags/1.2.3/locale/po/et.po
    tags/1.2.3/locale/po/fi.po
    tags/1.2.3/locale/po/fr.po
    tags/1.2.3/locale/po/fr_BE.po
    tags/1.2.3/locale/po/fr_CA.po
    tags/1.2.3/locale/po/hu.po
    tags/1.2.3/locale/po/id.po
    tags/1.2.3/locale/po/is.po
    tags/1.2.3/locale/po/it.po
    tags/1.2.3/locale/po/lt.po
    tags/1.2.3/locale/po/lv.po
    tags/1.2.3/locale/po/nb.po
    tags/1.2.3/locale/po/nl.po
    tags/1.2.3/locale/po/nl_BE.po
    tags/1.2.3/locale/po/pl.po
    tags/1.2.3/locale/po/pt.po
    tags/1.2.3/locale/po/pt_BR.po
    tags/1.2.3/locale/po/ru.po
    tags/1.2.3/locale/po/sv.po
    tags/1.2.3/locale/po/tr.po
    tags/1.2.3/locale/po/uk.po
    tags/1.2.3/locale/po/zh_CN.po
    tags/1.2.3/locale/po/zh_TW.po
    tags/1.2.3/locale/splash.html
    tags/1.2.3/login.pl
    tags/1.2.3/menu.ini
    tags/1.2.3/menu.pl
    tags/1.2.3/net-setup.pl
    tags/1.2.3/oe.pl
    tags/1.2.3/pe.pl
    tags/1.2.3/pos.conf.pl
    tags/1.2.3/ps.pl
    tags/1.2.3/rc.pl
    tags/1.2.3/rp.pl
    tags/1.2.3/sl2ls.sh
    tags/1.2.3/spool/
    tags/1.2.3/sql/
    tags/1.2.3/sql/Australia_General_0000-chart.sql
    tags/1.2.3/sql/Australia_General_00000-chart.sql
    tags/1.2.3/sql/Austria-chart.sql
    tags/1.2.3/sql/Austria-gifi.sql
    tags/1.2.3/sql/Bahasa-Indonesia_Default-chart.sql
    tags/1.2.3/sql/Belgium-chart.sql
    tags/1.2.3/sql/Belgium-gifi.sql
    tags/1.2.3/sql/Brazil_General-chart.sql
    tags/1.2.3/sql/Canada-English-gifi.sql
    tags/1.2.3/sql/Canada-English_General-chart.sql
    tags/1.2.3/sql/Canada-Quebec-gifi.sql
    tags/1.2.3/sql/Canada-Quebec_General-chart.sql
    tags/1.2.3/sql/Colombia-PUC-chart.sql
    tags/1.2.3/sql/Colombia-PUC-gifi.sql
    tags/1.2.3/sql/Czech-Republic-chart.sql
    tags/1.2.3/sql/Danish_Default-chart.sql
    tags/1.2.3/sql/Default-chart.sql
    tags/1.2.3/sql/Dutch_Default-chart.sql
    tags/1.2.3/sql/Dutch_Standard-chart.sql
    tags/1.2.3/sql/Egypt-chart.sql
    tags/1.2.3/sql/France-chart.sql
    tags/1.2.3/sql/German-Sample-chart.sql
    tags/1.2.3/sql/German-Sample-gifi.sql
    tags/1.2.3/sql/Germany-DATEV-SKR03-chart.sql
    tags/1.2.3/sql/Germany-DATEV-SKR03-gifi.sql
    tags/1.2.3/sql/Germany-SKR03-chart.sql
    tags/1.2.3/sql/Germany-SKR03-gifi.sql
    tags/1.2.3/sql/Hungary-chart.sql
    tags/1.2.3/sql/Hungary-gifi.sql
    tags/1.2.3/sql/Italy-gifi.sql
    tags/1.2.3/sql/Italy_General-chart.sql
    tags/1.2.3/sql/Italy_cc2424-chart.sql
    tags/1.2.3/sql/Latvia-chart.sql
    tags/1.2.3/sql/NAICS.sql
    tags/1.2.3/sql/Norwegian_Default-chart.sql
    tags/1.2.3/sql/Paraguay-chart.sql
    tags/1.2.3/sql/Paraguay-gifi.sql
    tags/1.2.3/sql/Pg-central.sql
    tags/1.2.3/sql/Pg-database.sql
    tags/1.2.3/sql/Poland-chart.sql
    tags/1.2.3/sql/Simplified-Chinese_Default-chart.sql
    tags/1.2.3/sql/Spain-ISO-chart.sql
    tags/1.2.3/sql/Spain-chart.sql
    tags/1.2.3/sql/Sweden-chart.sql
    tags/1.2.3/sql/Sweden-gifi.sql
    tags/1.2.3/sql/Sweden_Agriculture-chart.sql
    tags/1.2.3/sql/Sweden_Church_Society-chart.sql
    tags/1.2.3/sql/Swiss-German-chart.sql
    tags/1.2.3/sql/Swiss-German-gifi.sql
    tags/1.2.3/sql/Traditional-Chinese_Default-chart.sql
    tags/1.2.3/sql/UCOA-Form990-chart.sql
    tags/1.2.3/sql/UCOA-Form990-gifi.sql
    tags/1.2.3/sql/UCOA-Form990EZ-chart.sql
    tags/1.2.3/sql/UCOA-Form990EZ-gifi.sql
    tags/1.2.3/sql/UK_General-chart.sql
    tags/1.2.3/sql/US_General-chart.sql
    tags/1.2.3/sql/US_Manufacturing-chart.sql
    tags/1.2.3/sql/US_Service_Company-chart.sql
    tags/1.2.3/sql/Venezuela_Default-chart.sql
    tags/1.2.3/sql/legacy/
    tags/1.2.3/sql/legacy/Pg-upgrade-1.2.6-1.2.7.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-1.2.7-1.4.0.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-1.4.0-1.6.0.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-1.6.0-1.8.0.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-1.8.0-1.8.4.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-1.8.4-1.8.5.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-1.8.5-2.0.0.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.0.0-2.0.8.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.0.8-2.2.0.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.2.0-2.3.0.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.0-2.3.1.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.1-2.3.3.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.3-2.3.4.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.4-2.3.5.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.5-2.3.6.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.6-2.3.7.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.7-2.3.8.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.8-2.3.9.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.3.9-2.4.2.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.4.2-2.4.3.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.4.3-2.4.4.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.4.4-2.5.0.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.5.0-2.5.2.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.5.2-2.6.0.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.0-2.6.1.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.1-2.6.2.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.12-2.6.17.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.17-2.6.18.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.18-2.6.19.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.2-2.6.3.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.3-2.6.4.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.4-2.6.7.sql
    tags/1.2.3/sql/legacy/Pg-upgrade-2.6.7-2.6.12.sql
    tags/1.2.3/t/
    tags/1.2.3/t/01-load.t
    tags/1.2.3/t/02-number-handling.t
    tags/1.2.3/templates/
    tags/1.2.3/templates/Brazilian_Portuguese-ap_transaction.html
    tags/1.2.3/templates/Brazilian_Portuguese-ap_transaction.tex
    tags/1.2.3/templates/Brazilian_Portuguese-ar_transaction.html
    tags/1.2.3/templates/Brazilian_Portuguese-ar_transaction.tex
    tags/1.2.3/templates/Brazilian_Portuguese-balance_sheet.html
    tags/1.2.3/templates/Brazilian_Portuguese-bin_list.html
    tags/1.2.3/templates/Brazilian_Portuguese-bin_list.tex
    tags/1.2.3/templates/Brazilian_Portuguese-check.tex
    tags/1.2.3/templates/Brazilian_Portuguese-income_statement.html
    tags/1.2.3/templates/Brazilian_Portuguese-invoice.html
    tags/1.2.3/templates/Brazilian_Portuguese-invoice.tex
    tags/1.2.3/templates/Brazilian_Portuguese-logo.eps
    tags/1.2.3/templates/Brazilian_Portuguese-logo.png
    tags/1.2.3/templates/Brazilian_Portuguese-packing_list.html
    tags/1.2.3/templates/Brazilian_Portuguese-packing_list.tex
    tags/1.2.3/templates/Brazilian_Portuguese-pick_list.html
    tags/1.2.3/templates/Brazilian_Portuguese-pick_list.tex
    tags/1.2.3/templates/Brazilian_Portuguese-pos_invoice.txt
    tags/1.2.3/templates/Brazilian_Portuguese-purchase_order.html
    tags/1.2.3/templates/Brazilian_Portuguese-purchase_order.tex
    tags/1.2.3/templates/Brazilian_Portuguese-receipt.tex
    tags/1.2.3/templates/Brazilian_Portuguese-request_quotation.html
    tags/1.2.3/templates/Brazilian_Portuguese-request_quotation.tex
    tags/1.2.3/templates/Brazilian_Portuguese-sales_order.html
    tags/1.2.3/templates/Brazilian_Portuguese-sales_order.tex
    tags/1.2.3/templates/Brazilian_Portuguese-sales_quotation.html
    tags/1.2.3/templates/Brazilian_Portuguese-sales_quotation.tex
    tags/1.2.3/templates/Brazilian_Portuguese-statement.html
    tags/1.2.3/templates/Brazilian_Portuguese-statement.tex
    tags/1.2.3/templates/Brazilian_Portuguese-timecard.html
    tags/1.2.3/templates/Brazilian_Portuguese-timecard.tex
    tags/1.2.3/templates/Brazilian_Portuguese-work_order.html
    tags/1.2.3/templates/Brazilian_Portuguese-work_order.tex
    tags/1.2.3/templates/Danish-ap_transaction.html
    tags/1.2.3/templates/Danish-ap_transaction.tex
    tags/1.2.3/templates/Danish-ar_transaction.html
    tags/1.2.3/templates/Danish-ar_transaction.tex
    tags/1.2.3/templates/Danish-balance_sheet.html
    tags/1.2.3/templates/Danish-bin_list.html
    tags/1.2.3/templates/Danish-bin_list.tex
    tags/1.2.3/templates/Danish-check.tex
    tags/1.2.3/templates/Danish-income_statement.html
    tags/1.2.3/templates/Danish-invoice.html
    tags/1.2.3/templates/Danish-invoice.tex
    tags/1.2.3/templates/Danish-logo.eps
    tags/1.2.3/templates/Danish-logo.png
    tags/1.2.3/templates/Danish-packing_list.html
    tags/1.2.3/templates/Danish-packing_list.tex
    tags/1.2.3/templates/Danish-pick_list.html
    tags/1.2.3/templates/Danish-pick_list.tex
    tags/1.2.3/templates/Danish-pos_invoice.txt
    tags/1.2.3/templates/Danish-purchase_order.html
    tags/1.2.3/templates/Danish-purchase_order.tex
    tags/1.2.3/templates/Danish-receipt.tex
    tags/1.2.3/templates/Danish-request_quotation.html
    tags/1.2.3/templates/Danish-request_quotation.tex
    tags/1.2.3/templates/Danish-sales_order.html
    tags/1.2.3/templates/Danish-sales_order.tex
    tags/1.2.3/templates/Danish-sales_quotation.html
    tags/1.2.3/templates/Danish-sales_quotation.tex
    tags/1.2.3/templates/Danish-statement.html
    tags/1.2.3/templates/Danish-statement.tex
    tags/1.2.3/templates/Danish-timecard.html
    tags/1.2.3/templates/Danish-timecard.tex
    tags/1.2.3/templates/Danish-work_order.html
    tags/1.2.3/templates/Danish-work_order.tex
    tags/1.2.3/templates/Default-ap_transaction.html
    tags/1.2.3/templates/Default-ap_transaction.tex
    tags/1.2.3/templates/Default-ar_transaction.html
    tags/1.2.3/templates/Default-ar_transaction.tex
    tags/1.2.3/templates/Default-balance_sheet.html
    tags/1.2.3/templates/Default-bin_list.html
    tags/1.2.3/templates/Default-bin_list.tex
    tags/1.2.3/templates/Default-check.tex
    tags/1.2.3/templates/Default-income_statement.html
    tags/1.2.3/templates/Default-invoice.html
    tags/1.2.3/templates/Default-invoice.tex
    tags/1.2.3/templates/Default-letterhead.html
    tags/1.2.3/templates/Default-letterhead.tex
    tags/1.2.3/templates/Default-logo.eps
    tags/1.2.3/templates/Default-logo.png
    tags/1.2.3/templates/Default-packing_list.html
    tags/1.2.3/templates/Default-packing_list.tex
    tags/1.2.3/templates/Default-pick_list.html
    tags/1.2.3/templates/Default-pick_list.tex
    tags/1.2.3/templates/Default-pos_invoice.txt
    tags/1.2.3/templates/Default-purchase_order.html
    tags/1.2.3/templates/Default-purchase_order.tex
    tags/1.2.3/templates/Default-receipt.tex
    tags/1.2.3/templates/Default-request_quotation.html
    tags/1.2.3/templates/Default-request_quotation.tex
    tags/1.2.3/templates/Default-sales_order.html
    tags/1.2.3/templates/Default-sales_order.tex
    tags/1.2.3/templates/Default-sales_quotation.html
    tags/1.2.3/templates/Default-sales_quotation.tex
    tags/1.2.3/templates/Default-statement.html
    tags/1.2.3/templates/Default-statement.tex
    tags/1.2.3/templates/Default-timecard.html
    tags/1.2.3/templates/Default-timecard.tex
    tags/1.2.3/templates/Default-work_order.html
    tags/1.2.3/templates/Default-work_order.tex
    tags/1.2.3/templates/Dutch-ap_transaction.html
    tags/1.2.3/templates/Dutch-ap_transaction.tex
    tags/1.2.3/templates/Dutch-ar_transaction.html
    tags/1.2.3/templates/Dutch-ar_transaction.tex
    tags/1.2.3/templates/Dutch-balance_sheet.html
    tags/1.2.3/templates/Dutch-bin_list.html
    tags/1.2.3/templates/Dutch-bin_list.tex
    tags/1.2.3/templates/Dutch-check.tex
    tags/1.2.3/templates/Dutch-income_statement.html
    tags/1.2.3/templates/Dutch-invoice.html
    tags/1.2.3/templates/Dutch-invoice.tex
    tags/1.2.3/templates/Dutch-logo.eps
    tags/1.2.3/templates/Dutch-logo.png
    tags/1.2.3/templates/Dutch-packing_list.html
    tags/1.2.3/templates/Dutch-packing_list.tex
    tags/1.2.3/templates/Dutch-pick_list.html
    tags/1.2.3/templates/Dutch-pick_list.tex
    tags/1.2.3/templates/Dutch-pos_invoice.txt
    tags/1.2.3/templates/Dutch-purchase_order.html
    tags/1.2.3/templates/Dutch-purchase_order.tex
    tags/1.2.3/templates/Dutch-receipt.tex
    tags/1.2.3/templates/Dutch-request_quotation.html
    tags/1.2.3/templates/Dutch-request_quotation.tex
    tags/1.2.3/templates/Dutch-sales_order.html
    tags/1.2.3/templates/Dutch-sales_order.tex
    tags/1.2.3/templates/Dutch-sales_quotation.html
    tags/1.2.3/templates/Dutch-sales_quotation.tex
    tags/1.2.3/templates/Dutch-statement.html
    tags/1.2.3/templates/Dutch-statement.tex
    tags/1.2.3/templates/Dutch-timecard.html
    tags/1.2.3/templates/Dutch-timecard.tex
    tags/1.2.3/templates/Dutch-work_order.html
    tags/1.2.3/templates/Dutch-work_order.tex
    tags/1.2.3/templates/Estonian-ap_transaction.html
    tags/1.2.3/templates/Estonian-ap_transaction.tex
    tags/1.2.3/templates/Estonian-ar_transaction.html
    tags/1.2.3/templates/Estonian-ar_transaction.tex
    tags/1.2.3/templates/Estonian-balance_sheet.html
    tags/1.2.3/templates/Estonian-bin_list.html
    tags/1.2.3/templates/Estonian-bin_list.tex
    tags/1.2.3/templates/Estonian-check.tex
    tags/1.2.3/templates/Estonian-income_statement.html
    tags/1.2.3/templates/Estonian-invoice.html
    tags/1.2.3/templates/Estonian-invoice.tex
    tags/1.2.3/templates/Estonian-letterhead.html
    tags/1.2.3/templates/Estonian-letterhead.tex
    tags/1.2.3/templates/Estonian-logo.eps
    tags/1.2.3/templates/Estonian-logo.png
    tags/1.2.3/templates/Estonian-packing_list.html
    tags/1.2.3/templates/Estonian-packing_list.tex
    tags/1.2.3/templates/Estonian-pick_list.html
    tags/1.2.3/templates/Estonian-pick_list.tex
    tags/1.2.3/templates/Estonian-pos_invoice.txt
    tags/1.2.3/templates/Estonian-purchase_order.html
    tags/1.2.3/templates/Estonian-purchase_order.tex
    tags/1.2.3/templates/Estonian-receipt.tex
    tags/1.2.3/templates/Estonian-request_quotation.html
    tags/1.2.3/templates/Estonian-request_quotation.tex
    tags/1.2.3/templates/Estonian-sales_order.html
    tags/1.2.3/templates/Estonian-sales_order.tex
    tags/1.2.3/templates/Estonian-sales_quotation.html
    tags/1.2.3/templates/Estonian-sales_quotation.tex
    tags/1.2.3/templates/Estonian-statement.html
    tags/1.2.3/templates/Estonian-statement.tex
    tags/1.2.3/templates/Estonian-timecard.html
    tags/1.2.3/templates/Estonian-timecard.tex
    tags/1.2.3/templates/Estonian-work_order.html
    tags/1.2.3/templates/Estonian-work_order.tex
    tags/1.2.3/templates/Estonian_UTF8-ap_transaction.html
    tags/1.2.3/templates/Estonian_UTF8-ap_transaction.tex
    tags/1.2.3/templates/Estonian_UTF8-ar_transaction.html
    tags/1.2.3/templates/Estonian_UTF8-ar_transaction.tex
    tags/1.2.3/templates/Estonian_UTF8-balance_sheet.html
    tags/1.2.3/templates/Estonian_UTF8-bin_list.html
    tags/1.2.3/templates/Estonian_UTF8-bin_list.tex
    tags/1.2.3/templates/Estonian_UTF8-check.tex
    tags/1.2.3/templates/Estonian_UTF8-income_statement.html
    tags/1.2.3/templates/Estonian_UTF8-invoice.html
    tags/1.2.3/templates/Estonian_UTF8-invoice.tex
    tags/1.2.3/templates/Estonian_UTF8-letterhead.html
    tags/1.2.3/templates/Estonian_UTF8-letterhead.tex
    tags/1.2.3/templates/Estonian_UTF8-logo.eps
    tags/1.2.3/templates/Estonian_UTF8-logo.png
    tags/1.2.3/templates/Estonian_UTF8-packing_list.html
    tags/1.2.3/templates/Estonian_UTF8-packing_list.tex
    tags/1.2.3/templates/Estonian_UTF8-pick_list.html
    tags/1.2.3/templates/Estonian_UTF8-pick_list.tex
    tags/1.2.3/templates/Estonian_UTF8-pos_invoice.txt
    tags/1.2.3/templates/Estonian_UTF8-purchase_order.html
    tags/1.2.3/templates/Estonian_UTF8-purchase_order.tex
    tags/1.2.3/templates/Estonian_UTF8-receipt.tex
    tags/1.2.3/templates/Estonian_UTF8-request_quotation.html
    tags/1.2.3/templates/Estonian_UTF8-request_quotation.tex
    tags/1.2.3/templates/Estonian_UTF8-sales_order.html
    tags/1.2.3/templates/Estonian_UTF8-sales_order.tex
    tags/1.2.3/templates/Estonian_UTF8-sales_quotation.html
    tags/1.2.3/templates/Estonian_UTF8-sales_quotation.tex
    tags/1.2.3/templates/Estonian_UTF8-statement.html
    tags/1.2.3/templates/Estonian_UTF8-statement.tex
    tags/1.2.3/templates/Estonian_UTF8-timecard.html
    tags/1.2.3/templates/Estonian_UTF8-timecard.tex
    tags/1.2.3/templates/Estonian_UTF8-work_order.html
    tags/1.2.3/templates/Estonian_UTF8-work_order.tex
    tags/1.2.3/templates/French-ap_transaction.html
    tags/1.2.3/templates/French-ap_transaction.tex
    tags/1.2.3/templates/French-ar_transaction.html
    tags/1.2.3/templates/French-ar_transaction.tex
    tags/1.2.3/templates/French-balance_sheet.html
    tags/1.2.3/templates/French-bin_list.html
    tags/1.2.3/templates/French-bin_list.tex
    tags/1.2.3/templates/French-check.tex
    tags/1.2.3/templates/French-income_statement.html
    tags/1.2.3/templates/French-invoice.html
    tags/1.2.3/templates/French-invoice.tex
    tags/1.2.3/templates/French-logo.eps
    tags/1.2.3/templates/French-logo.png
    tags/1.2.3/templates/French-packing_list.html
    tags/1.2.3/templates/French-packing_list.tex
    tags/1.2.3/templates/French-pick_list.html
    tags/1.2.3/templates/French-pick_list.tex
    tags/1.2.3/templates/French-pos_invoice.txt
    tags/1.2.3/templates/French-purchase_order.html
    tags/1.2.3/templates/French-purchase_order.tex
    tags/1.2.3/templates/French-receipt.tex
    tags/1.2.3/templates/French-request_quotation.html
    tags/1.2.3/templates/French-request_quotation.tex
    tags/1.2.3/templates/French-sales_order.html
    tags/1.2.3/templates/French-sales_order.tex
    tags/1.2.3/templates/French-sales_quotation.html
    tags/1.2.3/templates/French-sales_quotation.tex
    tags/1.2.3/templates/French-statement.html
    tags/1.2.3/templates/French-statement.tex
    tags/1.2.3/templates/French-timecard.html
    tags/1.2.3/templates/French-timecard.tex
    tags/1.2.3/templates/French-work_order.html
    tags/1.2.3/templates/French-work_order.tex
    tags/1.2.3/templates/German-ap_transaction.html
    tags/1.2.3/templates/German-ap_transaction.tex
    tags/1.2.3/templates/German-ar_transaction.html
    tags/1.2.3/templates/German-ar_transaction.tex
    tags/1.2.3/templates/German-balance_sheet.html
    tags/1.2.3/templates/German-bin_list.html
    tags/1.2.3/templates/German-bin_list.tex
    tags/1.2.3/templates/German-check.tex
    tags/1.2.3/templates/German-income_statement.html
    tags/1.2.3/templates/German-invoice.html
    tags/1.2.3/templates/German-invoice.tex
    tags/1.2.3/templates/German-logo.eps
    tags/1.2.3/templates/German-logo.png
    tags/1.2.3/templates/German-packing_list.html
    tags/1.2.3/templates/German-packing_list.tex
    tags/1.2.3/templates/German-pick_list.html
    tags/1.2.3/templates/German-pick_list.tex
    tags/1.2.3/templates/German-pos_invoice.txt
    tags/1.2.3/templates/German-purchase_order.html
    tags/1.2.3/templates/German-purchase_order.tex
    tags/1.2.3/templates/German-receipt.tex
    tags/1.2.3/templates/German-request_quotation.html
    tags/1.2.3/templates/German-request_quotation.tex
    tags/1.2.3/templates/German-sales_order.html
    tags/1.2.3/templates/German-sales_order.tex
    tags/1.2.3/templates/German-sales_quotation.html
    tags/1.2.3/templates/German-sales_quotation.tex
    tags/1.2.3/templates/German-statement.html
    tags/1.2.3/templates/German-statement.tex
    tags/1.2.3/templates/German-timecard.html
    tags/1.2.3/templates/German-timecard.tex
    tags/1.2.3/templates/German-work_order.html
    tags/1.2.3/templates/German-work_order.tex
    tags/1.2.3/templates/Hungarian-ap_transaction.html
    tags/1.2.3/templates/Hungarian-ap_transaction.tex
    tags/1.2.3/templates/Hungarian-ar_transaction.html
    tags/1.2.3/templates/Hungarian-ar_transaction.tex
    tags/1.2.3/templates/Hungarian-balance_sheet.html
    tags/1.2.3/templates/Hungarian-bin_list.html
    tags/1.2.3/templates/Hungarian-bin_list.tex
    tags/1.2.3/templates/Hungarian-check.tex
    tags/1.2.3/templates/Hungarian-income_statement.html
    tags/1.2.3/templates/Hungarian-invoice.html
    tags/1.2.3/templates/Hungarian-invoice.tex
    tags/1.2.3/templates/Hungarian-logo.eps
    tags/1.2.3/templates/Hungarian-logo.png
    tags/1.2.3/templates/Hungarian-packing_list.html
    tags/1.2.3/templates/Hungarian-packing_list.tex
    tags/1.2.3/templates/Hungarian-pick_list.html
    tags/1.2.3/templates/Hungarian-pick_list.tex
    tags/1.2.3/templates/Hungarian-pos_invoice.txt
    tags/1.2.3/templates/Hungarian-purchase_order.html
    tags/1.2.3/templates/Hungarian-purchase_order.tex
    tags/1.2.3/templates/Hungarian-receipt.tex
    tags/1.2.3/templates/Hungarian-request_quotation.html
    tags/1.2.3/templates/Hungarian-request_quotation.tex
    tags/1.2.3/templates/Hungarian-sales_order.html
    tags/1.2.3/templates/Hungarian-sales_order.tex
    tags/1.2.3/templates/Hungarian-sales_quotation.html
    tags/1.2.3/templates/Hungarian-sales_quotation.tex
    tags/1.2.3/templates/Hungarian-statement.html
    tags/1.2.3/templates/Hungarian-statement.tex
    tags/1.2.3/templates/Hungarian-timecard.html
    tags/1.2.3/templates/Hungarian-timecard.tex
    tags/1.2.3/templates/Hungarian-work_order.html
    tags/1.2.3/templates/Hungarian-work_order.tex
    tags/1.2.3/templates/Italian-ap_transaction.html
    tags/1.2.3/templates/Italian-ap_transaction.tex
    tags/1.2.3/templates/Italian-ar_transaction.html
    tags/1.2.3/templates/Italian-ar_transaction.tex
    tags/1.2.3/templates/Italian-balance_sheet.html
    tags/1.2.3/templates/Italian-bin_list.html
    tags/1.2.3/templates/Italian-bin_list.tex
    tags/1.2.3/templates/Italian-check.tex
    tags/1.2.3/templates/Italian-income_statement.html
    tags/1.2.3/templates/Italian-invoice.html
    tags/1.2.3/templates/Italian-invoice.tex
    tags/1.2.3/templates/Italian-logo.eps
    tags/1.2.3/templates/Italian-logo.png
    tags/1.2.3/templates/Italian-packing_list.html
    tags/1.2.3/templates/Italian-packing_list.tex
    tags/1.2.3/templates/Italian-pick_list.html
    tags/1.2.3/templates/Italian-pick_list.tex
    tags/1.2.3/templates/Italian-pos_invoice.txt
    tags/1.2.3/templates/Italian-purchase_order.html
    tags/1.2.3/templates/Italian-purchase_order.tex
    tags/1.2.3/templates/Italian-receipt.tex
    tags/1.2.3/templates/Italian-request_quotation.html
    tags/1.2.3/templates/Italian-request_quotation.tex
    tags/1.2.3/templates/Italian-sales_order.html
    tags/1.2.3/templates/Italian-sales_order.tex
    tags/1.2.3/templates/Italian-sales_quotation.html
    tags/1.2.3/templates/Italian-sales_quotation.tex
    tags/1.2.3/templates/Italian-statement.html
    tags/1.2.3/templates/Italian-statement.tex
    tags/1.2.3/templates/Italian-timecard.html
    tags/1.2.3/templates/Italian-timecard.tex
    tags/1.2.3/templates/Italian-work_order.html
    tags/1.2.3/templates/Italian-work_order.tex
    tags/1.2.3/templates/Norwegian-ap_transaction.html
    tags/1.2.3/templates/Norwegian-ap_transaction.tex
    tags/1.2.3/templates/Norwegian-ar_transaction.html
    tags/1.2.3/templates/Norwegian-ar_transaction.tex
    tags/1.2.3/templates/Norwegian-balance_sheet.html
    tags/1.2.3/templates/Norwegian-bin_list.html
    tags/1.2.3/templates/Norwegian-bin_list.tex
    tags/1.2.3/templates/Norwegian-check.tex
    tags/1.2.3/templates/Norwegian-income_statement.html
    tags/1.2.3/templates/Norwegian-invoice.html
    tags/1.2.3/templates/Norwegian-invoice.tex
    tags/1.2.3/templates/Norwegian-logo.eps
    tags/1.2.3/templates/Norwegian-logo.png
    tags/1.2.3/templates/Norwegian-packing_list.html
    tags/1.2.3/templates/Norwegian-packing_list.tex
    tags/1.2.3/templates/Norwegian-pick_list.html
    tags/1.2.3/templates/Norwegian-pick_list.tex
    tags/1.2.3/templates/Norwegian-pos_invoice.txt
    tags/1.2.3/templates/Norwegian-purchase_order.html
    tags/1.2.3/templates/Norwegian-purchase_order.tex
    tags/1.2.3/templates/Norwegian-receipt.tex
    tags/1.2.3/templates/Norwegian-request_quotation.html
    tags/1.2.3/templates/Norwegian-request_quotation.tex
    tags/1.2.3/templates/Norwegian-sales_order.html
    tags/1.2.3/templates/Norwegian-sales_order.tex
    tags/1.2.3/templates/Norwegian-sales_quotation.html
    tags/1.2.3/templates/Norwegian-sales_quotation.tex
    tags/1.2.3/templates/Norwegian-statement.html
    tags/1.2.3/templates/Norwegian-statement.tex
    tags/1.2.3/templates/Norwegian-timecard.html
    tags/1.2.3/templates/Norwegian-timecard.tex
    tags/1.2.3/templates/Norwegian-work_order.html
    tags/1.2.3/templates/Norwegian-work_order.tex
    tags/1.2.3/templates/Russian-ap_transaction.html
    tags/1.2.3/templates/Russian-ap_transaction.tex
    tags/1.2.3/templates/Russian-ar_transaction.html
    tags/1.2.3/templates/Russian-ar_transaction.tex
    tags/1.2.3/templates/Russian-balance_sheet.html
    tags/1.2.3/templates/Russian-bin_list.html
    tags/1.2.3/templates/Russian-bin_list.tex
    tags/1.2.3/templates/Russian-check.tex
    tags/1.2.3/templates/Russian-income_statement.html
    tags/1.2.3/templates/Russian-invoice.html
    tags/1.2.3/templates/Russian-invoice.tex
    tags/1.2.3/templates/Russian-logo.eps
    tags/1.2.3/templates/Russian-logo.png
    tags/1.2.3/templates/Russian-packing_list.html
    tags/1.2.3/templates/Russian-packing_list.tex
    tags/1.2.3/templates/Russian-pick_list.html
    tags/1.2.3/templates/Russian-pick_list.tex
    tags/1.2.3/templates/Russian-pos_invoice.txt
    tags/1.2.3/templates/Russian-purchase_order.html
    tags/1.2.3/templates/Russian-purchase_order.tex
    tags/1.2.3/templates/Russian-receipt.tex
    tags/1.2.3/templates/Russian-request_quotation.html
    tags/1.2.3/templates/Russian-request_quotation.tex
    tags/1.2.3/templates/Russian-sales_order.html
    tags/1.2.3/templates/Russian-sales_order.tex
    tags/1.2.3/templates/Russian-sales_quotation.html
    tags/1.2.3/templates/Russian-sales_quotation.tex
    tags/1.2.3/templates/Russian-statement.html
    tags/1.2.3/templates/Russian-statement.tex
    tags/1.2.3/templates/Russian-timecard.html
    tags/1.2.3/templates/Russian-timecard.tex
    tags/1.2.3/templates/Russian-work_order.html
    tags/1.2.3/templates/Russian-work_order.tex
    tags/1.2.3/templates/Service-ap_transaction.html
    tags/1.2.3/templates/Service-ap_transaction.tex
    tags/1.2.3/templates/Service-ar_transaction.html
    tags/1.2.3/templates/Service-ar_transaction.tex
    tags/1.2.3/templates/Service-balance_sheet.html
    tags/1.2.3/templates/Service-bin_list.html
    tags/1.2.3/templates/Service-bin_list.tex
    tags/1.2.3/templates/Service-check.tex
    tags/1.2.3/templates/Service-income_statement.html
    tags/1.2.3/templates/Service-invoice.html
    tags/1.2.3/templates/Service-invoice.tex
    tags/1.2.3/templates/Service-logo.eps
    tags/1.2.3/templates/Service-logo.png
    tags/1.2.3/templates/Service-packing_list.html
    tags/1.2.3/templates/Service-packing_list.tex
    tags/1.2.3/templates/Service-pick_list.html
    tags/1.2.3/templates/Service-pick_list.tex
    tags/1.2.3/templates/Service-pos_invoice.txt
    tags/1.2.3/templates/Service-purchase_order.html
    tags/1.2.3/templates/Service-purchase_order.tex
    tags/1.2.3/templates/Service-receipt.tex
    tags/1.2.3/templates/Service-request_quotation.html
    tags/1.2.3/templates/Service-request_quotation.tex
    tags/1.2.3/templates/Service-sales_order.html
    tags/1.2.3/templates/Service-sales_order.tex
    tags/1.2.3/templates/Service-sales_quotation.html
    tags/1.2.3/templates/Service-sales_quotation.tex
    tags/1.2.3/templates/Service-statement.html
    tags/1.2.3/templates/Service-statement.tex
    tags/1.2.3/templates/Service-timecard.html
    tags/1.2.3/templates/Service-timecard.tex
    tags/1.2.3/templates/Service-work_order.html
    tags/1.2.3/templates/Service-work_order.tex
    tags/1.2.3/templates/Spanish_A4-ap_transaction.html
    tags/1.2.3/templates/Spanish_A4-ap_transaction.tex
    tags/1.2.3/templates/Spanish_A4-ar_transaction.html
    tags/1.2.3/templates/Spanish_A4-ar_transaction.tex
    tags/1.2.3/templates/Spanish_A4-balance_sheet.html
    tags/1.2.3/templates/Spanish_A4-bin_list.html
    tags/1.2.3/templates/Spanish_A4-bin_list.tex
    tags/1.2.3/templates/Spanish_A4-check.tex
    tags/1.2.3/templates/Spanish_A4-income_statement.html
    tags/1.2.3/templates/Spanish_A4-invoice.html
    tags/1.2.3/templates/Spanish_A4-invoice.tex
    tags/1.2.3/templates/Spanish_A4-logo.eps
    tags/1.2.3/templates/Spanish_A4-logo.png
    tags/1.2.3/templates/Spanish_A4-packing_list.html
    tags/1.2.3/templates/Spanish_A4-packing_list.tex
    tags/1.2.3/templates/Spanish_A4-pick_list.html
    tags/1.2.3/templates/Spanish_A4-pick_list.tex
    tags/1.2.3/templates/Spanish_A4-pos_invoice.txt
    tags/1.2.3/templates/Spanish_A4-purchase_order.html
    tags/1.2.3/templates/Spanish_A4-purchase_order.tex
    tags/1.2.3/templates/Spanish_A4-receipt.tex
    tags/1.2.3/templates/Spanish_A4-request_quotation.html
    tags/1.2.3/templates/Spanish_A4-request_quotation.tex
    tags/1.2.3/templates/Spanish_A4-sales_order.html
    tags/1.2.3/templates/Spanish_A4-sales_order.tex
    tags/1.2.3/templates/Spanish_A4-sales_quotation.html
    tags/1.2.3/templates/Spanish_A4-sales_quotation.tex
    tags/1.2.3/templates/Spanish_A4-statement.html
    tags/1.2.3/templates/Spanish_A4-statement.tex
    tags/1.2.3/templates/Spanish_A4-timecard.html
    tags/1.2.3/templates/Spanish_A4-timecard.tex
    tags/1.2.3/templates/Spanish_A4-work_order.html
    tags/1.2.3/templates/Spanish_A4-work_order.tex
    tags/1.2.3/templates/Spanish_Letter-ap_transaction.html
    tags/1.2.3/templates/Spanish_Letter-ap_transaction.tex
    tags/1.2.3/templates/Spanish_Letter-ar_transaction.html
    tags/1.2.3/templates/Spanish_Letter-ar_transaction.tex
    tags/1.2.3/templates/Spanish_Letter-balance_sheet.html
    tags/1.2.3/templates/Spanish_Letter-bin_list.html
    tags/1.2.3/templates/Spanish_Letter-bin_list.tex
    tags/1.2.3/templates/Spanish_Letter-check.tex
    tags/1.2.3/templates/Spanish_Letter-income_statement.html
    tags/1.2.3/templates/Spanish_Letter-invoice.html
    tags/1.2.3/templates/Spanish_Letter-invoice.tex
    tags/1.2.3/templates/Spanish_Letter-logo.eps
    tags/1.2.3/templates/Spanish_Letter-logo.png
    tags/1.2.3/templates/Spanish_Letter-packing_list.html
    tags/1.2.3/templates/Spanish_Letter-packing_list.tex
    tags/1.2.3/templates/Spanish_Letter-pick_list.html
    tags/1.2.3/templates/Spanish_Letter-pick_list.tex
    tags/1.2.3/templates/Spanish_Letter-pos_invoice.txt
    tags/1.2.3/templates/Spanish_Letter-purchase_order.html
    tags/1.2.3/templates/Spanish_Letter-purchase_order.tex
    tags/1.2.3/templates/Spanish_Letter-receipt.tex
    tags/1.2.3/templates/Spanish_Letter-request_quotation.html
    tags/1.2.3/templates/Spanish_Letter-request_quotation.tex
    tags/1.2.3/templates/Spanish_Letter-sales_order.html
    tags/1.2.3/templates/Spanish_Letter-sales_order.tex
    tags/1.2.3/templates/Spanish_Letter-sales_quotation.html
    tags/1.2.3/templates/Spanish_Letter-sales_quotation.tex
    tags/1.2.3/templates/Spanish_Letter-statement.html
    tags/1.2.3/templates/Spanish_Letter-statement.tex
    tags/1.2.3/templates/Spanish_Letter-timecard.html
    tags/1.2.3/templates/Spanish_Letter-timecard.tex
    tags/1.2.3/templates/Spanish_Letter-work_order.html
    tags/1.2.3/templates/Spanish_Letter-work_order.tex
    tags/1.2.3/templates/Swedish-ap_transaction.html
    tags/1.2.3/templates/Swedish-ap_transaction.tex
    tags/1.2.3/templates/Swedish-ar_transaction.html
    tags/1.2.3/templates/Swedish-ar_transaction.tex
    tags/1.2.3/templates/Swedish-balance_sheet.html
    tags/1.2.3/templates/Swedish-bin_list.html
    tags/1.2.3/templates/Swedish-bin_list.tex
    tags/1.2.3/templates/Swedish-check.tex
    tags/1.2.3/templates/Swedish-income_statement.html
    tags/1.2.3/templates/Swedish-invoice.html
    tags/1.2.3/templates/Swedish-invoice.tex
    tags/1.2.3/templates/Swedish-logo.eps
    tags/1.2.3/templates/Swedish-logo.png
    tags/1.2.3/templates/Swedish-packing_list.html
    tags/1.2.3/templates/Swedish-packing_list.tex
    tags/1.2.3/templates/Swedish-pick_list.html
    tags/1.2.3/templates/Swedish-pick_list.tex
    tags/1.2.3/templates/Swedish-pos_invoice.txt
    tags/1.2.3/templates/Swedish-purchase_order.html
    tags/1.2.3/templates/Swedish-purchase_order.tex
    tags/1.2.3/templates/Swedish-receipt.tex
    tags/1.2.3/templates/Swedish-request_quotation.html
    tags/1.2.3/templates/Swedish-request_quotation.tex
    tags/1.2.3/templates/Swedish-sales_order.html
    tags/1.2.3/templates/Swedish-sales_order.tex
    tags/1.2.3/templates/Swedish-sales_quotation.html
    tags/1.2.3/templates/Swedish-sales_quotation.tex
    tags/1.2.3/templates/Swedish-statement.html
    tags/1.2.3/templates/Swedish-statement.tex
    tags/1.2.3/templates/Swedish-timecard.html
    tags/1.2.3/templates/Swedish-timecard.tex
    tags/1.2.3/templates/Swedish-work_order.html
    tags/1.2.3/templates/Swedish-work_order.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-ap_transaction.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-ap_transaction.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-ar_transaction.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-ar_transaction.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-balance_sheet.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-bin_list.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-bin_list.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-check.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-income_statement.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-invoice.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-invoice.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-letterhead.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-letterhead.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-logo.eps
    tags/1.2.3/templates/Traditional_Chinese_Big5-logo.png
    tags/1.2.3/templates/Traditional_Chinese_Big5-packing_list.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-packing_list.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-pick_list.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-pick_list.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-pos_invoice.txt
    tags/1.2.3/templates/Traditional_Chinese_Big5-purchase_order.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-purchase_order.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-receipt.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-request_quotation.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-request_quotation.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-sales_order.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-sales_order.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-sales_quotation.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-sales_quotation.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-statement.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-statement.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-timecard.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-timecard.tex
    tags/1.2.3/templates/Traditional_Chinese_Big5-work_order.html
    tags/1.2.3/templates/Traditional_Chinese_Big5-work_order.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-ap_transaction.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-ap_transaction.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-ar_transaction.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-ar_transaction.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-balance_sheet.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-bin_list.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-bin_list.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-check.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-income_statement.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-invoice.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-invoice.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-letterhead.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-letterhead.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-logo.eps
    tags/1.2.3/templates/Traditional_Chinese_UTF8-logo.png
    tags/1.2.3/templates/Traditional_Chinese_UTF8-packing_list.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-packing_list.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-pick_list.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-pick_list.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-pos_invoice.txt
    tags/1.2.3/templates/Traditional_Chinese_UTF8-purchase_order.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-purchase_order.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-receipt.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-request_quotation.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-request_quotation.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-sales_order.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-sales_order.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-sales_quotation.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-sales_quotation.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-statement.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-statement.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-timecard.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-timecard.tex
    tags/1.2.3/templates/Traditional_Chinese_UTF8-work_order.html
    tags/1.2.3/templates/Traditional_Chinese_UTF8-work_order.tex
    tags/1.2.3/templates/demo/
    tags/1.2.3/templates/demo/ap_transaction.html
    tags/1.2.3/templates/demo/ap_transaction.tex
    tags/1.2.3/templates/demo/ar_transaction.html
    tags/1.2.3/templates/demo/ar_transaction.tex
    tags/1.2.3/templates/demo/balance_sheet.html
    tags/1.2.3/templates/demo/bin_list.html
    tags/1.2.3/templates/demo/bin_list.tex
    tags/1.2.3/templates/demo/check.tex
    tags/1.2.3/templates/demo/income_statement.html
    tags/1.2.3/templates/demo/invoice.html
    tags/1.2.3/templates/demo/invoice.tex
    tags/1.2.3/templates/demo/letterhead.html
    tags/1.2.3/templates/demo/letterhead.tex
    tags/1.2.3/templates/demo/logo.eps
    tags/1.2.3/templates/demo/logo.png
    tags/1.2.3/templates/demo/packing_list.html
    tags/1.2.3/templates/demo/packing_list.tex
    tags/1.2.3/templates/demo/pick_list.html
    tags/1.2.3/templates/demo/pick_list.tex
    tags/1.2.3/templates/demo/pos_invoice.txt
    tags/1.2.3/templates/demo/purchase_order.html
    tags/1.2.3/templates/demo/purchase_order.tex
    tags/1.2.3/templates/demo/receipt.tex
    tags/1.2.3/templates/demo/request_quotation.html
    tags/1.2.3/templates/demo/request_quotation.tex
    tags/1.2.3/templates/demo/sales_order.html
    tags/1.2.3/templates/demo/sales_order.tex
    tags/1.2.3/templates/demo/sales_quotation.html
    tags/1.2.3/templates/demo/sales_quotation.tex
    tags/1.2.3/templates/demo/statement.html
    tags/1.2.3/templates/demo/statement.tex
    tags/1.2.3/templates/demo/timecard.html
    tags/1.2.3/templates/demo/timecard.tex
    tags/1.2.3/templates/demo/work_order.html
    tags/1.2.3/templates/demo/work_order.tex
    tags/1.2.3/upgrade-templates.pl
    tags/1.2.3/utils/
    tags/1.2.3/utils/cli/
    tags/1.2.3/utils/cli/ledgersmb_cli.pl
    tags/1.2.3/utils/cli/sample.lsmb
    tags/1.2.3/utils/devel/
    tags/1.2.3/utils/devel/find-use
    tags/1.2.3/utils/fixme/
    tags/1.2.3/utils/fixme/README
    tags/1.2.3/utils/fixme/fixme.pgsql
    tags/1.2.3/utils/notify_short/
    tags/1.2.3/utils/notify_short/GPL.txt
    tags/1.2.3/utils/notify_short/README
    tags/1.2.3/utils/notify_short/config.pl
    tags/1.2.3/utils/notify_short/listener.pl
    tags/1.2.3/utils/pos/
    tags/1.2.3/utils/pos/directnet.pl
    tags/1.2.3/utils/pos/pos-hardware-client-startup-script
    tags/1.2.3/winprint.bat

Added: tags/1.2.3/BUGS
===================================================================
--- tags/1.2.3/BUGS	                        (rev 0)
+++ tags/1.2.3/BUGS	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,9 @@
+Known issues in LedgerSMB 1.2, Beta 1:
+
+Installation/upgrade is not automated yet.
+
+A few known issues with the documentation:
+CLI API docs don't mention cookie handling
+Need better documentation on role of UTF-8
+
+Also intermediate rounding causes issues with discounts because the rounding is applied to 2 decimal places to the unit rather than the extended price.

Added: tags/1.2.3/Build.PL
===================================================================
--- tags/1.2.3/Build.PL	                        (rev 0)
+++ tags/1.2.3/Build.PL	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,40 @@
+use strict;
+use warnings;
+
+use Module::Build;
+
+my $build = Module::Build->new (
+	dist_name => 'LedgerSMB',
+	dist_version => '1.2.2',
+	license => 'GPL',
+	requires => {
+		'perl'				=> '>= 5.8.0',
+		'Data::Dumper'			=> 0,
+		'Locale::Maketext'		=> 0,
+		'Locale::Maketext::Lexicon'	=> '>= 0.56',
+		'MIME::Base64'			=> 0,
+		'Digest::MD5'			=> 0,
+		'HTML::Entities'		=> 0,
+		'DBI'				=> 0,
+		'DBD::Pg'			=> 0,
+		'Math::BigFloat'		=> 0,
+		'IO::File'			=> 0,
+		'Encode'			=> 0,
+		'Locale::Country'		=> 0,
+		'Locale::Language'		=> 0,
+		'Time::Local'			=> 0,
+		'Cwd'				=> 0,
+		'Config::Std'			=> 0,
+		'MIME::Lite'			=> 0,
+		},
+	recommends => {
+		'HTML::LinkExtor'		=> 0,
+		'FileHandle'			=> 0,
+		'Getopt::Long'			=> 0,
+		'Test::More'			=> 0,
+		'Net::TCLink'			=> 0,
+		'Parse::RecDescent'		=> 0,
+		},
+);
+
+$build->create_build_script;

Added: tags/1.2.3/COMPATABILITY
===================================================================
--- tags/1.2.3/COMPATABILITY	                        (rev 0)
+++ tags/1.2.3/COMPATABILITY	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,17 @@
+Known versions of software incompatible with LedgerSMB:
+-------------------------------
+The following PostgreSQL versions suffer from a bug which causes problems with 
+LedgerSMB:  8.2.2, 8.1.7, and 8.0.11
+
+These versions produce an error concerning wrong data types but the error shows 
+that the data types are indeed correct.
+
+-------------------------------
+
+W3M does not handle the <BUTTON> element properly and does not work.
+
+-------------------------------
+
+Pocket Internet Explorer:
+Javascript menus do not work with Pocket IE (on Windows CE).  Use the Lynx 
+interface instead by appending ?path=/bin/lynx to the end of the login.pl url.

Added: tags/1.2.3/CONTRIBUTORS
===================================================================
--- tags/1.2.3/CONTRIBUTORS	                        (rev 0)
+++ tags/1.2.3/CONTRIBUTORS	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,66 @@
+Copyright of individual lines of code may be owned in part or whole by the 
+individual contributors.
+
+Current Core Maintainers of LedgerSMB:
+==================================
+Chris Travers <chris @ metatrontech.com>
+Wrote the inventory activity report, helped with the session handling fix, 
+and other tasks.
+
+Christopher Murtagh <christopher.murtagh @ gmail.com>
+Wrote the session handling fix, has begun reformatting the files to fit the
+current coding standards, and other contributions.
+
+Joshua Drake <jd @ commandprompt . com>
+Contributed database fixes.
+
+Seneca Cunningham <tentra @ gmail.com> 
+Contributed code fixes and support for advanced tax rules.  She has also 
+re-engineered the localization framework.
+
+Jason Rodrigues <jasonjayr+ledgersmb @ gmail.com> provided the logic to force 
+the password change in the admin.pl.  He maintains the Gentoo Ebuilds packages.
+
+Josh Berkus <josh @ agliodbs.com> has helped provide assistance in promotion,
+advocacy, and other assistance.
+
+Other Contributors:
+========================
+Dave van Ginneken <davevg @ gmail.com> fixed many HTML errors and has patched 
+the setup.diff.
+
+Angus Carr <apcarr @ users.sourceforge.net> Has provided some corrections to 
+the documentation.
+
+
+Christopher Browne <cbrowne @ acm.org> provided some corrections to the 
+documentation, the Pg-tables.sql, and a setup file for replication.
+
+Mads Kiilerich <mads @ kiilerich.com> has provided the RPM spec file and
+numerous bug fixes.
+
+Tony Fraser <tony @ sybaspace.com> provided some database fixes.
+
+John Hasler <john @ dhh.gt.org> has provided some double-entry information for
+the manual and miscellaneous documentation corrections.
+
+Louis B. Moore has provided the documentation on the command-line API and helped
+with upgrade scripts.
+
+Rich Walker <rw @ shadowrobot.com> has provided assistance in the dists/deb 
+documentation for Debian installations.
+
+Chifung Fan [email omitted] contributed bugfixes.
+
+Jeff Kowalczyk [email omitted] contributed to the INSTALL documentation.
+Original Authors of SQL-Ledger:
+===================================
+Dieter Simader <dsimader @ sql-ledger.com>
+Original author of SQL-Ledger, on which LedgerSMB is based.  He also owns DWS
+Systems, Inc.
+
+Thomas Bayen <bayen @ gmx.de>
+Antti Kaihola <akaihola @ siba.fi>
+Moritz Bunkus (tex)
+Jim Rawlings <jim @ your-dba.com> 
+

Added: tags/1.2.3/COPYRIGHT
===================================================================
--- tags/1.2.3/COPYRIGHT	                        (rev 0)
+++ tags/1.2.3/COPYRIGHT	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,17 @@
+Copyright (C) 2006
+
+Contributors:
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+

Added: tags/1.2.3/Changelog
===================================================================
--- tags/1.2.3/Changelog	                        (rev 0)
+++ tags/1.2.3/Changelog	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,140 @@
+Changelog for 1.2.4
+* Fixed internal functions avgcost() and lastcost() to not use float (Joshua D)
+
+Changelog for 1.2.3
+* Corrected per-user locale selection (Seneca)
+* Corrected partial commits for invoices and orders (Chris T)
+* Corrected data types for invoice.qty and invoice.allocated in new dbs (CHris T)
+* Corrected suffix error in 1.2.1 to use .sqlc for backups (Joshua D)
+
+Changelog for 1.2.2
+* Corrected sales tax display bug in order entry screen (Chris T)
+* Corrected database update unable to connect (Seneca)
+* Corrected login problems on 1.2.1
+* Corrected INSTALL for [GlobalDBH] (Joshua Drake)
+
+Changelog for LedgerSMB 1.2.1
+* Modifed AM.pm to correctly use globals from ledgersmb.conf (Joshua Drake)
+* Simplified backup functions in AM.pm (Joshua Drake)
+* Corrected serious sales tax posting bug (Chris Travers)
+* Corrected two sales tax display bugs (Chris Travers)
+* Corrected configure_apache.sh not rewriting WORKING_DIR (Chris Travers)
+* Corrected documentation about tax entry (Chris Travers)
+* Corrected logos not printing on PDF/PS invoices (Chris Travers)
+
+Changelog for LedgerSMB 1.2.0
+
+Database:
+* Added script to configure Slony replication (Chris Browne)
+* Added defined primary keys to all tables (Chris T)
+* Database upgrades now use psql (Chris T)
+* Defaults table now uses a simple key->value system (Chris T)
+* Merged Pg-tables, Pg-functions, and Pg-indeces into Pg-database (Chris T)
+
+Security:
+* Added whitelist of allowed directories to file editor (Seneca)
+* Audited All Perl Modules for SQL Injection attacks (Chris T)
+* Forced edited files to have whitelisted extensions and no .. strings (Chris T)
+* Users are now stored in a separate database instead of fs. (Chris M)
+* User database schema now included (Joshua D)
+
+Localization:
+* Moved localization files to standard codes (Seneca)
+* Added cumulative tax support (Seneca)
+* Translations now use Gettext (Seneca)
+* Removed back-translation of function names for i18n (Seneca)
+* Corrected parsing of numbers so that they are multi-run safe (Chris T)
+* Added modular tax calculation support (no modules included yet) (Seneca)
+* Added "1 000.00" number format (Chris T)
+* Buttons are now localization-safe (Seneca)
+
+Code Quality and API:
+* Added logging module (Jason)
+* Added session method abstraction (Chris T)
+* Broke out price matrix calls into PriceMatrix.pm (Chris T)
+* Added $form->callproc($procname, @args) returns @hashrefs (Chris T)
+* Corrected rounding errors (Seneca)
+* Code cleanup and template correction (Chris Murtagh)
+* New template system (Chris T)
+* IC.pm, OE.pm, and IS.pm are aware of custom fields (Chris T)
+* Added LedgerSMB::Sysconfig for site-wide configuration (Chris T)
+* LedgerSMB::IC is aware of custom fields (Chris T)
+* LedgerSMB::PE is aware of custom fields (Chris T)
+* Testing suite added (Seneca)
+* Moved all database calls to $form->{dbh} (CHris T)
+* Form->redirect no longer makes use of exec (Chris T)
+* LedgerSMB::Sysconfig now uses more reasonable ledgersmb.conf optiions (Joshua Drake)
+* Removal of Lock Application (Joshua Drake)
+* Removal of users/ depenency (Joshua Drake)
+
+Packaging:
+* Added first version of rpm spec from Mads Kiilerich (Chris T)
+* Added Gentoo ebuilds documentation and metadata (Jason R)
+
+Point of Sale:
+* Added experimental TrustCommerce credit card processing (Chris T)
+* Merged most of the rest of the SL-POS interface (Chris T)
+* POS register now goes from add invoice to add invoice. (Chris T)
+* Added pole display and separate cash drawer open calls. (Chris T)
+
+User Interface:
+* Moved IS/IR/OE the lineitem column list to the LedgerSMB::Sysconfig Chris T) 
+* Invoice now has an Onhand column (Chris T)
+* Added simple text import function for invoices received (PDT's) (Chris T)
+
+Other:
+* ledger-smb.conf is now an ini file (Seneca)
+* Experimental scripting wrapper in utils/cli (Chris T)
+* doc/database directory now contains postgresql_autodoc output (Chris T)
+
+Changelog for LedgerSMB 1.1.1
+
+* Fixed problem with parts_short trigger not being created
+* Fixed problem with custom fields functions not being created
+* Pg driver is now checked by default. 
+
+Changelog for LedgerSMB 1.1.0
+
+Database
+* Added add_custom_field and drop_custom_field functions.
+	-- will be more integrated into API next version
+* Added utility to partially recover from SQL-Ledger data corruption issues.
+* Primary Key added to acc_trans table
+* DB Updates now use one transaction per update file.
+* FLOAT datatypes removed from database
+* Protection against duplicate transaction id's.
+* Added foreign key constraint to acc_trans.chart_id
+* Database backups now use pg_dump
+* Database creation routines now attempt to add plpgsql to the db if not there.
+* Transaction reversal is now enforced by default
+
+Security
+* One is required to change the admin password when it is blank (on first login etc).
+
+Usability
+* We now support adding custom automation into a custom.pl
+* Setup.pl use is now experimentally supported
+* Disabled editing sub-assemblies in one area where it is unsafe.
+* Utility included for near-real-time parts short email notifications.
+* Fixed Lynx support
+* Batch printing now available for checks
+* Warnings are printed when check stub is truncated
+* Sales Data Report added
+* SL2LS.pl now dies if it cannot open the files with instructions on how to proceed manually
+* Links between admin and login pages
+* Experimental support for Windows printing
+
+Changelog for LedgerSMB v 1.0.0p1
+* Fixed directory transversal/arbitrary code execution vulnerability.
+
+Changelog for LedgerSMB v 1.0.0
+
+(Changes relative to the pre-fork SQL-Ledger 2.6.17)
+
+* Corrected sessionid security hole allowing bypass of login to main application
+* Corrected sessionid security hole allowing one to list logins and more.
+* Changed acc_trans.amount to NUMERIC
+* Tightened browser caching rules to prevent problems with back button.
+* Added an open content manual to the main distribution.
+* New logo. 
+* Began whitespace reformatting of main application.

Added: tags/1.2.3/INSTALL
===================================================================
--- tags/1.2.3/INSTALL	                        (rev 0)
+++ tags/1.2.3/INSTALL	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,316 @@
+Installing LedgerSMB 1.2
+========================
+ 
+This document contains information on how to install LedgerSMB. We
+recommend that the reader start by reading the section on manual
+installation and then start by trying the automated means mentioned
+later.
+ 
+Also this document assumes that the reader is already familiar with the
+release notes. If you have not already done so, please read the
+release_notes file in the doc/ directory.
+ 
+DISTRO AND OS-SPECIFIC NOTES
+============================
+ 
+Debian users should read README.debian
+
+OpenBSD users, please consult the README.OpenBSD
+ 
+For Unix systems, '$' signifies the bash prompt, '=>' the psql prompt. 
+ 
+MANUAL INSTALL
+==============
+ 
+1) Untar in desired location (for example, /usr/local/ledger-smb,
+refered to as LEDGERPATH for the remainder of this INSTALL file).
+LedgerSMB files should be owned by the apache user, apache:apache on
+many systems.
+ 
+2) Create a postgresql admin database role, by convention named
+'ledgersmb':
+ 
+$ createuser --no-superuser --createdb --no-createrole \
+-U postgres --pwprompt --encrypted ledgersmb
+ 
+(\ is a bash line continuation character, this is a single command)
+ 
+The prompted password (referred to as MYROLEPASSWORD) will later be
+used in the DBConnect: string in the configuration file
+'ledger-smb.conf'
+ 
+The equivalent SQL statement to create the ledgersmb role is:
+
+=> CREATE ROLE ledgersmb LOGIN PASSWORD 'MYROLEPASSWORD' NOINHERIT
+CREATEDB;
+ 
+Further commands and database interaction should be conducted using
+the new LedgerSMB admin role 'ledgersmb'.
+ 
+3) Create a central user database, owned by the LedgerSMB admin role,
+'ledgersmb':
+ 
+$ createdb -U ledgersmb -O ledgersmb ledgersmb
+ 
+The equivalent SQL statement is:
+
+=> CREATE DATABASE ledgersmb WITH ENCODING='SQL_ASCII'
+OWNER=ledgersmb;
+ 
+4) On the database that will store your user and session information,
+run the included Pg-central.sql SQL commands to configure the user
+and session tables and functions:
+ 
+$ psql -U ledgersmb -d ledgersmb -f LEDGERPATH/sql/Pg-central.sql
+ 
+(LEDGERPATH is in the location you expanded the release
+tarball file. If you untarred in '/usr/local' then LEDGERPATH will
+be '/usr/local/ledger-smb').
+
+
+NOTE: LedgerSMB's preferred configuration is to store the user and
+session management tables in a separate database from the company
+databases (aka 'datasets', created in admin.pl). If you are already
+working with or prefer to have your user and session tables in one
+company dataset, see further information in the manual.  You must have 
+PLPGSQL installed in the dataset as well.  However that is beyond the
+scope of these instructions.
+
+ 
+5) The SQL commands in step 4) created an LedgerSMB-managed admin user,
+e.g. a row in the users and users_conf table. You must now update the
+'admin' user's password in users_conf from the default password.
+ 
+$ psql -U ledgersmb -d ledgersmb
+ 
+ledgersmb=> UPDATE users_conf SET password = md5('MYPASSWORD')
+WHERE id = 1;
+
+(Change MYPASSWORD to your preferred administrative password, which
+is separate, but can be the same spelling as MYROLEPASSWORD).
+ 
+ledgersmb=> \q
+ 
+ 
+6) Edit the LEDGERPATH/ledger-smb.conf file:
+ 
+a) Copy 'ledger-smb.conf.default' to 'ledger-smb.conf'
+
+b) Make sure to set the section under [globaldbh] to point to the
+central user and session database, using password MYROLEPASSWORD:
+
+[globaldb]
+<<<<<<< .mine
+DBname       = ledgersmb
+DBhost       = localhost
+DBport       = 5432
+DBUserName   = ledgersmb
+DBPassword   = <set me to correct password>
+
+=======
+DBname       = ledgersmb
+DBhost       = localhost
+DBport       = 5432
+DBUserName   = ledgersmb
+DBPassword   = MYROLEPASSWORD
+>>>>>>> .r1061
+ 
+7) Add configuration to Apache:
+ 
+$ sh configure_apache.sh
+ 
+ 
+8) Check Dependencies:
+ 
+The Build.PL script can be used to test for unmet dependencies and
+run other tests. It doesn't install anything yet, but it will tell
+you what you are missing. To check for dependencies, run:
+
+$ perl Build.PL
+
+Missing dependencies can generally be installed via a Linux
+distribution's package manager, or by CPAN. (Build.PL itself uses
+Module::Build, which is available in packages like perl-Module-Build
+or libmodule-build-perl.)
+ 
+Once this is done and dependencies are satisfied, you can check to
+see whether the installation nominally works by running:
+
+$ ./Build test
+
+The test suites currently check to make sure all the perl modules
+load and that a number of numeric tests are passed.
+ 
+Dependencies which are recommended are needed only for specific
+functionality and may not be required in all circumstances. These
+include:
+ 
+* Net::TCLink for credit card processing in a POS environment
+ 
+* Parse::RecDescent for the CLI script host
+ 
+ 
+9) Restart Apache (instructions vary with your Linux distro or operating
+system).
+ 
+ 
+Create Datasets and Users
+=========================
+ 
+1) Create Datasets:
+ 
+Browse to:
+
+http://hostname/ledger-smb/admin.pl
+
+login with 'MYPASSWORD'
+
+Create dataset(s) with:
+
+User: ledgersmb
+Password: MYPASSWORD
+
+Superuser: postgres
+Password: (postgres password)
+
+Create one dataset (a postgresql datatabase) for each separate
+company which will use LedgerSMB for accounting, e.g.:
+
+ledgeracme
+ledgerbigco
+(...)
+ 
+ 
+1) Create User(s) pointing to specific datasets:
+ 
+Browse to:
+
+http://hostname/ledger-smb/admin.pl
+
+login with 'MYPASSWORD'
+
+Create user(s) pointing to a specific dataset (ledgeracme, etc.)
+with database login information:
+
+User: ledgersmb
+Password: MYPASSWORD
+ 
+ 
+Congratulations, you have manually installed LedgerSMB 1.2.
+ 
+ 
+FTP INSTALLATION
+================
+ 
+If you control the server and have shell access, the instructions above
+are preferred over those given here. instead of those given here. This
+is simply a set of notes for those who must install on a shared server.
+ 
+If you do not have access to the server's configuration files install
+LedgerSMB in userspace by ftp'ing all the files to your server.
+ 
+1) Untar ledger-smb in your private_html directory.
+ 
+2) turn on script execution for the folder ledger-smb. You can control
+this with an .htaccess file:
+ 
+Options +ExecCGI
+DirectoryIndex login.pl
+ 
+3) Protect the users directory with an .htpasswd file:
+ 
+order allow,deny
+deny from all
+ 
+4) Protect the templates directory with an .htpasswd file:
+ 
+order allow,deny
+deny from all
+ 
+5) Set up your PostgreSQL database and the tables. The procedure is
+specified above.
+ 
+You will most likely only have access to PostgreSQL with some other
+tools like pgadmin.
+ 
+ 
+TROUBLESHOOTING
+===============
+ 
+Error: Access Denied in admin.pl
+---------------------------------
+ 
+Likely causes:
+ 
+1) The password entered may not match the password set in Manual Install
+step 5). You can repreat that step as often as you need to get login
+to admin.pl working, but in case your 'admin' user is not id=1, try
+using the expanded version of the SQL:
+ 
+ledgersmb==> UPDATE users_conf SET password=mp5('MYPASSWORD')
+WHERE id = (SELECT id FROM user
+WHERE username = 'admin');
+ 
+(Substitute 'MYPASSWORD' for your chosen password).
+ 
+ 
+2) The central database may have been created with a different postgres
+user (role) than you are using for the connection. In this case, you
+may not have permission to access the required database entities.
+
+To correct this, assuming that the admin database role is ledgersmb,
+issue the following commands from psql:
+ 
+ledgersmb==> GRANT ALL ON users TO ledgersmb;
+ledgersmb==> GRANT ALL ON users_id_seq TO ledgersmb;
+ledgersmb==> GRANT ALL ON users_conf TO ledgersmb;
+ledgersmb==> GRANT ALL ON session TO ledgersmb;
+ledgersmb==> GRANT ALL ON session_session_id_seq TO ledgersmb;
+ 
+ 
+Error: "No GlobalDBH Configured or Could not Connect"
+-----------------------------------------------------
+ 
+LedgerSMB 1.2 uses a dedicated connection to the central database for
+user authentication. When the attempt to connect to that database fails,
+the error message above is displayed. In this case, check the following
+parameters under the [globaldbh] of the ledger-smb.conf file.
+ 
+1) DBUserName should match the database user you imported Pg-central
+as (if you followed the instructions above, that would be ledgersmb).
+ 
+2) DBPassword needs to match the database password to used to connect
+to.
+ 
+You can test the above causes by running (from the command line):
+ 
+$ psql -U [DBUserName]
+password: [DBPassword]
+ 
+When you enter the password, it will not show up on the screen.
+ 
+The other line that you should pay attention to is the DBConnect
+line. Parameters in the form of name=value need to match those for
+your host. The following parameters need to be set correctly in that
+line:
+ 
+dbname=ledgersmb (the database you imported Pg-Central.sql into).
+host=localhost (don't change unless you know what you are doing!)
+port=5432 (don't change unless you know what you are doing!)
+ 
+The full line should then be something like:
+
+DBConnect: dbi:Pg:dbname=ledgersmb;host=localhost;port=5432
+ 
+And that section of ledger-smb.conf looks like:
+
+[globaldb]
+DBConnect: dbi:Pg:dbname=ledgersmb;host=localhost;port=5432
+DBUserName: ledgersmb
+DBPassword: MYROLEPASSWORD
+
+
+OTHER ISSUES:
+===================================
+Before submitting a bug, please consult the COMPATABILITY list.  This documents
+which versions of software have known interoperability problems with LedgerSMB.

Added: tags/1.2.3/LICENSE
===================================================================
--- tags/1.2.3/LICENSE	                        (rev 0)
+++ tags/1.2.3/LICENSE	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,355 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>GNU General Public License</TITLE>
+</HEAD>
+
+<BODY BGCOLOR=ffffff>
+
+
+<pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+        Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) 19yy  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+
+</BODY>
+</HTML>
+

Added: tags/1.2.3/LedgerSMB/AA.pm
===================================================================
--- tags/1.2.3/LedgerSMB/AA.pm	                        (rev 0)
+++ tags/1.2.3/LedgerSMB/AA.pm	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,1170 @@
+#=====================================================================
+# LedgerSMB
+# Small Medium Business Accounting software
+# http://www.ledgersmb.org/
+# Copyright (C) 2006
+# This work contains copyrighted information from a number of sources all used
+# with permission.
+#
+# This file contains source code included with or based on SQL-Ledger which
+# is Copyright Dieter Simader and DWS Systems Inc. 2000-2005 and licensed
+# under the GNU General Public License version 2 or, at your option, any later
+# version.  For a full list including contact information of contributors,
+# maintainers, and copyright holders, see the CONTRIBUTORS file.
+#
+# Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork):
+# Copyright (C) 2006
+#
+#  Author: DWS Systems Inc.
+#     Web: http://www.sql-ledger.org
+#
+#  Contributors:
+#
+#
+# See COPYRIGHT file for copyright information
+#======================================================================
+#
+# This file has undergone whitespace cleanup.
+#
+#======================================================================
+#
+# AR/AP backend routines
+# common routines
+#
+#======================================================================
+
+package AA;
+use LedgerSMB::Sysconfig;
+
+sub post_transaction {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    my $query;
+    my $sth;
+
+    my $null;
+    ( $null, $form->{department_id} ) = split( /--/, $form->{department} );
+    $form->{department_id} *= 1;
+
+    my $ml        = 1;
+    my $table     = 'ar';
+    my $buysell   = 'buy';
+    my $ARAP      = 'AR';
+    my $invnumber = "sinumber";
+    my $keepcleared;
+
+    if ( $form->{vc} eq 'vendor' ) {
+        $table     = 'ap';
+        $buysell   = 'sell';
+        $ARAP      = 'AP';
+        $ml        = -1;
+        $invnumber = "vinumber";
+    }
+
+    if ( $form->{currency} eq $form->{defaultcurrency} ) {
+        $form->{exchangerate} = 1;
+    }
+    else {
+        $exchangerate =
+          $form->check_exchangerate( $myconfig, $form->{currency},
+            $form->{transdate}, $buysell );
+
+        $form->{exchangerate} =
+          ($exchangerate)
+          ? $exchangerate
+          : $form->parse_amount( $myconfig, $form->{exchangerate} );
+    }
+
+    my @taxaccounts = split / /, $form->{taxaccounts};
+    my $tax         = 0;
+    my $fxtax       = 0;
+    my $amount;
+    my $diff;
+
+    my %tax = ();
+    my $accno;
+
+    # add taxes
+    foreach $accno (@taxaccounts) {
+        $fxtax += $tax{fxamount}{$accno} =
+          $form->parse_amount( $myconfig, $form->{"tax_$accno"} );
+        $tax += $tax{fxamount}{$accno};
+
+        push @{ $form->{acc_trans}{taxes} },
+          {
+            accno          => $accno,
+            amount         => $tax{fxamount}{$accno},
+            project_id     => undef,
+            fx_transaction => 0
+          };
+
+        $amount = $tax{fxamount}{$accno} * $form->{exchangerate};
+        $tax{amount}{$accno} = $form->round_amount( $amount - $diff, 2 );
+        $diff = $tax{amount}{$accno} - ( $amount - $diff );
+        $amount = $tax{amount}{$accno} - $tax{fxamount}{$accno};
+        $tax += $amount;
+
+        if ( $form->{currency} ne $form->{defaultcurrency} ) {
+            push @{ $form->{acc_trans}{taxes} },
+              {
+                accno          => $accno,
+                amount         => $amount,
+                project_id     => undef,
+                fx_transaction => 1
+              };
+        }
+
+    }
+
+    my %amount      = ();
+    my $fxinvamount = 0;
+    for ( 1 .. $form->{rowcount} ) {
+        $fxinvamount += $amount{fxamount}{$_} =
+          $form->parse_amount( $myconfig, $form->{"amount_$_"} );
+    }
+
+    $form->{taxincluded} *= 1;
+
+    my $i;
+    my $project_id;
+    my $cleared = 0;
+
+    $diff = 0;
+
+    # deduct tax from amounts if tax included
+    for $i ( 1 .. $form->{rowcount} ) {
+
+        if ( $amount{fxamount}{$i} ) {
+
+            if ( $form->{taxincluded} ) {
+                $amount =
+                  ($fxinvamount)
+                  ? $fxtax * $amount{fxamount}{$i} / $fxinvamount
+                  : 0;
+                $amount{fxamount}{$i} -= $amount;
+            }
+
+            # multiply by exchangerate
+            $amount = $amount{fxamount}{$i} * $form->{exchangerate};
+            $amount{amount}{$i} = $form->round_amount( $amount - $diff, 2 );
+            $diff = $amount{amount}{$i} - ( $amount - $diff );
+
+            ( $null, $project_id ) = split /--/, $form->{"projectnumber_$i"};
+            $project_id ||= undef;
+            ($accno) = split /--/, $form->{"${ARAP}_amount_$i"};
+
+            if ($keepcleared) {
+                $cleared = ( $form->{"cleared_$i"} ) ? 1 : 0;
+            }
+
+            push @{ $form->{acc_trans}{lineitems} },
+              {
+                accno          => $accno,
+                amount         => $amount{fxamount}{$i},
+                project_id     => $project_id,
+                description    => $form->{"description_$i"},
+                cleared        => $cleared,
+                fx_transaction => 0
+              };
+
+            if ( $form->{currency} ne $form->{defaultcurrency} ) {
+                $amount = $amount{amount}{$i} - $amount{fxamount}{$i};
+                push @{ $form->{acc_trans}{lineitems} },
+                  {
+                    accno          => $accno,
+                    amount         => $amount,
+                    project_id     => $project_id,
+                    description    => $form->{"description_$i"},
+                    cleared        => $cleared,
+                    fx_transaction => 1
+                  };
+            }
+        }
+    }
+
+    my $invnetamount = 0;
+    for ( @{ $form->{acc_trans}{lineitems} } ) { $invnetamount += $_->{amount} }
+    my $invamount = $invnetamount + $tax;
+
+    # adjust paidaccounts if there is no date in the last row
+    $form->{paidaccounts}--
+      unless ( $form->{"datepaid_$form->{paidaccounts}"} );
+
+    if ( $form->{vc} ne "customer" ) {
+        $form->{vc} = "vendor";
+    }
+
+    my $paid = 0;
+    my $fxamount;
+
+    $diff = 0;
+
+    # add payments
+    for $i ( 1 .. $form->{paidaccounts} ) {
+        $fxamount = $form->parse_amount( $myconfig, $form->{"paid_$i"} );
+
+        if ($fxamount) {
+            $paid += $fxamount;
+
+            $paidamount = $fxamount * $form->{exchangerate};
+
+            $amount = $form->round_amount( $paidamount - $diff, 2 );
+            $diff = $amount - ( $paidamount - $diff );
+
+            $form->{datepaid} = $form->{"datepaid_$i"};
+
+            $paid{fxamount}{$i} = $fxamount;
+            $paid{amount}{$i}   = $amount;
+        }
+    }
+
+    $fxinvamount += $fxtax unless $form->{taxincluded};
+    $fxinvamount = $form->round_amount( $fxinvamount, 2 );
+    $invamount   = $form->round_amount( $invamount,   2 );
+    $paid        = $form->round_amount( $paid,        2 );
+
+    $paid =
+      ( $fxinvamount == $paid )
+      ? $invamount
+      : $form->round_amount( $paid * $form->{exchangerate}, 2 );
+
+    $query = q|
+		SELECT (SELECT value FROM defaults 
+		         WHERE setting_key = 'fxgain_accno_id'), 
+		       (SELECT value FROM defaults
+		         WHERE setting_key = 'fxloss_accno_id')|;
+
+    my ( $fxgain_accno_id, $fxloss_accno_id ) = $dbh->selectrow_array($query);
+
+    ( $null, $form->{employee_id} ) = split /--/, $form->{employee};
+    unless ( $form->{employee_id} ) {
+        ( $form->{employee}, $form->{employee_id} ) = $form->get_employee($dbh);
+    }
+
+    # check if id really exists
+    if ( $form->{id} ) {
+        my $id = $dbh->quote( $form->{id} );
+        $keepcleared = 1;
+        $query       = qq|
+			SELECT id
+			  FROM $table
+			 WHERE id = $id|;
+
+        if ( $dbh->selectrow_array($query) ) {
+
+            # delete detail records
+            $query = qq|
+				DELETE FROM acc_trans
+				 WHERE trans_id = $id|;
+
+            $dbh->do($query) || $form->dberror($query);
+        }
+    }
+    else {
+
+        my $uid = localtime;
+        $uid .= "$$";
+
+        $query = qq|
+			INSERT INTO $table (invnumber)
+			     VALUES ('$uid')|;
+
+        $dbh->do($query) || $form->dberror($query);
+
+        $query = qq|
+			SELECT id FROM $table
+			 WHERE invnumber = '$uid'|;
+
+        ( $form->{id} ) = $dbh->selectrow_array($query);
+    }
+
+    # record last payment date in ar/ap table
+    $form->{datepaid} = $form->{transdate} unless $form->{datepaid};
+    my $datepaid = ($paid) ? qq|'$form->{datepaid}'| : 'NOW';
+
+    $form->{invnumber} = $form->update_defaults( $myconfig, $invnumber )
+      unless $form->{invnumber};
+
+    $query = qq|
+		UPDATE $table 
+		SET invnumber = ?,
+			ordnumber = ?,
+			transdate = ?,
+			$form->{vc}_id = ?,
+			taxincluded = ?,
+			amount = ?,
+			duedate = ?,
+			paid = ?,
+			datepaid = ?,
+			netamount = ?,
+			curr = ?,
+			notes = ?,
+			department_id = ?,
+			employee_id = ?,
+			ponumber = ?
+		WHERE id = ?
+	|;
+
+    my @queryargs = (
+        $form->{invnumber},     $form->{ordnumber},
+        $form->{transdate},     $form->{"$form->{vc}_id"},
+        $form->{taxincluded},   $invamount,
+        $form->{duedate},       $paid,
+        $datepaid,              $invnetamout,
+        $form->{currency},      $form->{notes},
+        $form->{department_id}, $form->{employee_id},
+        $form->{ponumber},      $form->{id}
+    );
+
+    $dbh->prepare($query)->execute(@queryargs) || $form->dberror($query);
+
+    @queries = $form->run_custom_queries( $table, 'INSERT' );
+
+    # update exchangerate
+    my $buy  = $form->{exchangerate};
+    my $sell = 0;
+    if ( $form->{vc} eq 'vendor' ) {
+        $buy  = 0;
+        $sell = $form->{exchangerate};
+    }
+
+    if ( ( $form->{currency} ne $form->{defaultcurrency} ) && !$exchangerate ) {
+        $form->update_exchangerate( $dbh, $form->{currency}, $form->{transdate},
+            $buy, $sell );
+    }
+
+    my $ref;
+
+    # add individual transactions
+    foreach $ref ( @{ $form->{acc_trans}{lineitems} } ) {
+
+        # insert detail records in acc_trans
+        if ( $ref->{amount} ) {
+            $query = qq|
+				INSERT INTO acc_trans 
+				            (trans_id, chart_id, amount, 
+				            transdate, project_id, memo, 
+				            fx_transaction, cleared)
+				    VALUES  (?, (SELECT id FROM chart
+				                  WHERE accno = ?), 
+				            ?, ?, ?, ?, ?, ?)|;
+
+            @queryargs = (
+                $form->{id},            $ref->{accno},
+                $ref->{amount} * $ml,   $form->{transdate},
+                $ref->{project_id},     $ref->{description},
+                $ref->{fx_transaction}, $ref->{cleared}
+            );
+            $dbh->prepare($query)->execute(@queryargs)
+              || $form->dberror($query);
+        }
+    }
+
+    # save taxes
+    foreach $ref ( @{ $form->{acc_trans}{taxes} } ) {
+        if ( $ref->{amount} ) {
+            $query = qq|
+				INSERT INTO acc_trans 
+				            (trans_id, chart_id, amount,
+				            transdate, fx_transaction)
+				     VALUES (?, (SELECT id FROM chart
+					          WHERE accno = ?),
+				            ?, ?, ?)|;
+
+            @queryargs = (
+                $form->{id}, $ref->{accno}, $ref->{amount} * $ml,
+                $form->{transdate}, $ref->{fx_transaction}
+            );
+            $dbh->prepare($query)->execute(@queryargs)
+              || $form->dberror($query);
+        }
+    }
+
+    my $arap;
+
+    # record ar/ap
+    if ( ( $arap = $invamount ) ) {
+        ($accno) = split /--/, $form->{$ARAP};
+
+        $query = qq|
+			INSERT INTO acc_trans 
+			            (trans_id, chart_id, amount, transdate)
+			     VALUES (?, (SELECT id FROM chart
+			                  WHERE accno = ?), 
+			                  ?, ?)|;
+        @queryargs =
+          ( $form->{id}, $accno, $invamount * -1 * $ml, $form->{transdate} );
+
+        $dbh->prepare($query)->execute(@queryargs)
+          || $form->dberror($query);
+    }
+
+    # if there is no amount force ar/ap
+    if ( $fxinvamount == 0 ) {
+        $arap = 1;
+    }
+
+    my $exchangerate;
+
+    # add paid transactions
+    for $i ( 1 .. $form->{paidaccounts} ) {
+
+        if ( $paid{fxamount}{$i} ) {
+
+            ($accno) = split( /--/, $form->{"${ARAP}_paid_$i"} );
+            $form->{"datepaid_$i"} = $form->{transdate}
+              unless ( $form->{"datepaid_$i"} );
+
+            $exchangerate = 0;
+
+            if ( $form->{currency} eq $form->{defaultcurrency} ) {
+                $form->{"exchangerate_$i"} = 1;
+            }
+            else {
+                $exchangerate =
+                  $form->check_exchangerate( $myconfig, $form->{currency},
+                    $form->{"datepaid_$i"}, $buysell );
+
+                $form->{"exchangerate_$i"} =
+                  ($exchangerate)
+                  ? $exchangerate
+                  : $form->parse_amount( $myconfig,
+                    $form->{"exchangerate_$i"} );
+            }
+
+            # if there is no amount
+            if ( $fxinvamount == 0 ) {
+                $form->{exchangerate} = $form->{"exchangerate_$i"};
+            }
+
+            # ar/ap amount
+            if ($arap) {
+                ($accno) = split /--/, $form->{$ARAP};
+
+                # add ar/ap
+                $query = qq|
+					INSERT INTO acc_trans 
+					            (trans_id, chart_id, 
+					            amount,transdate)
+					     VALUES (?, (SELECT id FROM chart
+					                  WHERE accno = ?),
+					            ?, ?)|;
+
+                @queryargs = (
+                    $form->{id}, $accno,
+                    $paid{amount}{$i} * $ml,
+                    $form->{"datepaid_$i"}
+                );
+                $dbh->prepare($query)->execute(@queryargs)
+                  || $form->dberror($query);
+            }
+
+            $arap = $paid{amount}{$i};
+
+            # add payment
+            if ( $paid{fxamount}{$i} ) {
+
+                ($accno) = split /--/, $form->{"${ARAP}_paid_$i"};
+
+                my $cleared = ( $form->{"cleared_$i"} ) ? 1 : 0;
+
+                $amount = $paid{fxamount}{$i};
+                $query  = qq|
+					INSERT INTO acc_trans 
+					            (trans_id, chart_id, amount,
+					            transdate, source, memo, 
+					            cleared)
+					     VALUES (?, (SELECT id FROM chart
+						          WHERE accno = ?),
+					            ?, ?, ?, ?, ?)|;
+
+                @queryargs = (
+                    $form->{id},          $accno,
+                    $amount * -1 * $ml,   $form->{"datepaid_$i"},
+                    $form->{"source_$i"}, $form->{"memo_$i"},
+                    $cleared
+                );
+                $dbh->prepare($query)->execute(@queryargs)
+                  || $form->dberror($query);
+
+                if ( $form->{currency} ne $form->{defaultcurrency} ) {
+
+                    # exchangerate gain/loss
+                    $amount = (
+                        $form->round_amount(
+                            $paid{fxamount}{$i} * $form->{exchangerate}, 2 ) -
+                          $form->round_amount(
+                            $paid{fxamount}{$i} * $form->{"exchangerate_$i"}, 2
+                          )
+                    ) * -1;
+
+                    if ($amount) {
+
+                        my $accno_id =
+                          ( ( $amount * $ml ) > 0 )
+                          ? $fxgain_accno_id
+                          : $fxloss_accno_id;
+
+                        $query = qq|
+							INSERT INTO acc_trans 
+							            (trans_id, 
+							            chart_id, 
+							            amount,
+							            transdate, 
+							            fx_transaction, 
+							            cleared)
+							     VALUES (?, ?, 
+							            ?, 
+							            ?, '1', ?)|;
+
+                        @queryargs = (
+                            $form->{id}, $accno_id,
+                            $amount * $ml,
+                            $form->{"datepaid_$i"}, $cleared
+                        );
+                        $sth = $dbh->prepare($query);
+                        $sth->execute(@queryargs)
+                          || $form->dberror($query);
+                    }
+
+                    # exchangerate difference
+                    $amount = $paid{amount}{$i} - $paid{fxamount}{$i} + $amount;
+
+                    $query = qq|
+						INSERT INTO acc_trans 
+						            (trans_id, chart_id,
+						            amount,
+						            transdate, 
+						            fx_transaction, 
+						            cleared, source)
+						     VALUES (?, (SELECT id 
+						                   FROM chart
+						                  WHERE accno 
+						                        = ?),
+						            ?, ?, 
+						            '1', ?, ?)|;
+
+                    @queryargs = (
+                        $form->{id}, $accno,
+                        $amount * -1 * $ml,
+                        $form->{"datepaid_$i"},
+                        $cleared, $form->{"source_$i"}
+                    );
+                    $sth = $dbh->prepare($query);
+                    $sth->execute(@queryargs)
+                      || $form->dberror($query);
+
+                }
+
+                # update exchangerate record
+                $buy  = $form->{"exchangerate_$i"};
+                $sell = 0;
+
+                if ( $form->{vc} eq 'vendor' ) {
+                    $buy  = 0;
+                    $sell = $form->{"exchangerate_$i"};
+                }
+
+                if ( ( $form->{currency} ne $form->{defaultcurrency} )
+                    && !$exchangerate )
+                {
+
+                    $form->update_exchangerate( $dbh, $form->{currency},
+                        $form->{"datepaid_$i"},
+                        $buy, $sell );
+                }
+            }
+        }
+    }
+
+    # save printed and queued
+    $form->save_status($dbh);
+
+    my %audittrail = (
+        tablename => $table,
+        reference => $form->{invnumber},
+        formname  => 'transaction',
+        action    => 'posted',
+        id        => $form->{id}
+    );
+
+    $form->audittrail( $dbh, "", \%audittrail );
+
+    $form->save_recurring( $dbh, $myconfig );
+
+    my $rc = $dbh->commit;
+
+    $rc;
+
+}
+
+sub delete_transaction {
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database, turn AutoCommit off
+    my $dbh = $form->{dbh};
+
+    my $table = ( $form->{vc} eq 'customer' ) ? 'ar' : 'ap';
+
+    my %audittrail = (
+        tablename => $table,
+        reference => $form->{invnumber},
+        formname  => 'transaction',
+        action    => 'deleted',
+        id        => $form->{id}
+    );
+
+    $form->audittrail( $dbh, "", \%audittrail );
+
+    my $query = qq|DELETE FROM $table WHERE id = $form->{id}|;
+    $dbh->do($query) || $form->dberror($query);
+
+    $query = qq|DELETE FROM acc_trans WHERE trans_id = ?|;
+    $dbh->prepare($query)->execute( $form->{id} ) || $form->dberror($query);
+
+    # get spool files
+    $query = qq|SELECT spoolfile 
+				  FROM status
+				 WHERE trans_id = ?
+				   AND spoolfile IS NOT NULL|;
+
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} ) || $form->dberror($query);
+
+    my $spoolfile;
+    my @spoolfiles = ();
+
+    while ( ($spoolfile) = $sth->fetchrow_array ) {
+        push @spoolfiles, $spoolfile;
+    }
+
+    $sth->finish;
+
+    $query = qq|DELETE FROM status WHERE trans_id = ?|;
+    $dbh->prepare($query)->execute( $form->{id} ) || $form->dberror($query);
+
+    # commit
+    my $rc = $dbh->commit;
+
+    if ($rc) {
+        foreach $spoolfile (@spoolfiles) {
+            unlink "${LedgerSMB::Sysconfig::spool}/$spoolfile" if $spoolfile;
+        }
+    }
+
+    $rc;
+}
+
+sub transactions {
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+    my $null;
+    my $var;
+    my $paid    = "a.paid";
+    my $ml      = 1;
+    my $ARAP    = 'AR';
+    my $table   = 'ar';
+    my $buysell = 'buy';
+    my $acc_trans_join;
+    my $acc_trans_flds;
+
+    if ( $form->{vc} eq 'vendor' ) {
+        $ml      = -1;
+        $ARAP    = 'AP';
+        $table   = 'ap';
+        $buysell = 'sell';
+    }
+
+    ( $form->{transdatefrom}, $form->{transdateto} ) =
+      $form->from_to( $form->{year}, $form->{month}, $form->{interval} )
+      if $form->{year} && $form->{month};
+
+    my @paidargs = ();
+    if ( $form->{outstanding} ) {
+        $paid = qq|
+			SELECT SUM(ac.amount) * -1 * $ml
+			  FROM acc_trans ac
+			  JOIN chart c ON (c.id = ac.chart_id)
+			 WHERE ac.trans_id = a.id
+			       AND (c.link LIKE '%${ARAP}_paid%' 
+			       OR c.link = '')|;
+        if ( $form->{transdateto} ) {
+            $paid .= qq|
+			       AND ac.transdate <= ?|;
+            push @paidargs, $form->{transdateto};
+        }
+        $form->{summary} = 1;
+    }
+
+    if ( !$form->{summary} ) {
+        $acc_trans_flds = qq|
+			, c.accno, ac.source,
+			pr.projectnumber, ac.memo AS description,
+			ac.amount AS linetotal,
+			i.description AS linedescription|;
+
+        $acc_trans_join = qq| 
+			     JOIN acc_trans ac ON (a.id = ac.trans_id)
+			     JOIN chart c ON (c.id = ac.chart_id)
+			LEFT JOIN project pr ON (pr.id = ac.project_id)
+			LEFT JOIN invoice i ON (i.id = ac.invoice_id)|;
+    }
+
+    my $query = qq|
+		   SELECT a.id, a.invnumber, a.ordnumber, a.transdate,
+		          a.duedate, a.netamount, a.amount, ($paid) AS paid,
+		          a.invoice, a.datepaid, a.terms, a.notes,
+		          a.shipvia, a.shippingpoint, e.name AS employee, 
+		          vc.name,
+		          a.$form->{vc}_id, a.till, m.name AS manager, a.curr,
+		          ex.$buysell AS exchangerate, 
+		          d.description AS department, 
+		          a.ponumber $acc_trans_flds
+		     FROM $table a
+		     JOIN $form->{vc} vc ON (a.$form->{vc}_id = vc.id)
+		LEFT JOIN employee e ON (a.employee_id = e.id)
+		LEFT JOIN employee m ON (e.managerid = m.id)
+		LEFT JOIN exchangerate ex ON (ex.curr = a.curr
+		          AND ex.transdate = a.transdate)
+		LEFT JOIN department d ON (a.department_id = d.id) 
+		$acc_trans_join|;
+
+    my %ordinal = (
+        id            => 1,
+        invnumber     => 2,
+        ordnumber     => 3,
+        transdate     => 4,
+        duedate       => 5,
+        datepaid      => 10,
+        shipvia       => 13,
+        shippingpoint => 14,
+        employee      => 15,
+        name          => 16,
+        manager       => 19,
+        curr          => 20,
+        department    => 22,
+        ponumber      => 23,
+        accno         => 24,
+        source        => 25,
+        project       => 26,
+        description   => 27
+    );
+
+    my @a = ( transdate, invnumber, name );
+    push @a, "employee" if $form->{l_employee};
+    push @a, "manager"  if $form->{l_manager};
+    my $sortorder = $form->sort_order( ..hidden.., \%ordinal );
+
+    my $where = "1 = 1";
+    if ( $form->{"$form->{vc}_id"} ) {
+        $where .= qq| AND a.$form->{vc}_id = $form->{"$form->{vc}_id"}|;
+    }
+    else {
+        if ( $form->{ $form->{vc} } ) {
+            $var = $dbh->quote( $form->like( lc $form->{ $form->{vc} } ) );
+            $where .= " AND lower(vc.name) LIKE $var";
+        }
+    }
+
+    for (qw(department employee)) {
+        if ( $form->{$_} ) {
+            ( $null, $var ) = split /--/, $form->{$_};
+            $var = $dbh->quote($var);
+            $where .= " AND a.${_}_id = $var";
+        }
+    }
+
+    for (qw(invnumber ordnumber)) {
+        if ( $form->{$_} ) {
+            $var = $dbh->quote( $form->like( lc $form->{$_} ) );
+            $where .= " AND lower(a.$_) LIKE $var";
+            $form->{open} = $form->{closed} = 0;
+        }
+    }
+    if ( $form->{partsid} ) {
+        my $partsid = $dbh->quote( $form->{partsid} );
+        $where .= " AND a.id IN (select trans_id FROM invoice
+			WHERE parts_id = $partsid)";
+    }
+
+    for (qw(ponumber shipvia notes)) {
+        if ( $form->{$_} ) {
+            $var = $dbh->quote( $form->like( lc $form->{$_} ) );
+            $where .= " AND lower(a.$_) LIKE $var";
+        }
+    }
+
+    if ( $form->{description} ) {
+        if ($acc_trans_flds) {
+            $var = $dbh->quote( $form->like( lc $form->{description} ) );
+            $where .= " AND lower(ac.memo) LIKE $var
+			OR lower(i.description) LIKE $var";
+        }
+        else {
+            $where .= " AND a.id = 0";
+        }
+    }
+
+    if ( $form->{source} ) {
+        if ($acc_trans_flds) {
+            $var = $dbh->quote( $form->like( lc $form->{source} ) );
+            $where .= " AND lower(ac.source) LIKE $var";
+        }
+        else {
+            $where .= " AND a.id = 0";
+        }
+    }
+
+    my $transdatefrom = $dbh->quote( $form->{transdatefrom} );
+    $where .= " AND a.transdate >= $transdatefrom"
+      if $form->{transdatefrom};
+
+    my $transdateto = $dbh->quote( $form->{transdateto} );
+    $where .= " AND a.transdate <= $transdateto" if $form->{transdateto};
+
+    if ( $form->{open} || $form->{closed} ) {
+        unless ( $form->{open} && $form->{closed} ) {
+            $where .= " AND a.amount != a.paid" if ( $form->{open} );
+            $where .= " AND a.amount = a.paid"  if ( $form->{closed} );
+        }
+    }
+
+    if ( $form->{till} ne "" ) {
+        $where .= " AND a.invoice = '1'
+					AND a.till = $form->{till}";
+
+        if ( $myconfig->{role} eq 'user' ) {
+            my $login = $dbh->quote( $form->{login} );
+            $where .= " AND e.login = $login";
+        }
+    }
+
+    if ( $form->{$ARAP} ) {
+        my ($accno) = split /--/, $form->{$ARAP};
+        $accno = $dbh->quote($accno);
+        $where .= qq|
+			AND a.id IN (SELECT ac.trans_id
+			               FROM acc_trans ac
+			               JOIN chart c ON (c.id = ac.chart_id)
+			              WHERE a.id = ac.trans_id
+			                    AND c.accno = $accno)|;
+    }
+
+    if ( $form->{description} ) {
+        $var = $dbh->quote( $form->like( lc $form->{description} ) );
+        $where .= qq|
+			AND (a.id IN (SELECT DISTINCT trans_id
+			                FROM acc_trans
+			               WHERE lower(memo) LIKE '$var')
+			                     OR a.id IN 
+			                     (SELECT DISTINCT trans_id
+			                                 FROM invoice
+			                                WHERE lower(description)
+			                                      LIKE '$var'))|;
+    }
+
+    $query .= "WHERE $where
+			ORDER BY $sortorder";
+    my $sth = $dbh->prepare($query);
+    $sth->execute(@paidargs) || $form->dberror($query);
+
+    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+        $ref->{exchangerate} = 1 unless $ref->{exchangerate};
+
+        if ( $ref->{linetotal} <= 0 ) {
+            $ref->{debit}  = $ref->{linetotal} * -1;
+            $ref->{credit} = 0;
+        }
+        else {
+            $ref->{debit}  = 0;
+            $ref->{credit} = $ref->{linetotal};
+        }
+
+        if ( $ref->{invoice} ) {
+            $ref->{description} ||= $ref->{linedescription};
+        }
+
+        if ( $form->{outstanding} ) {
+            next
+              if $form->round_amount( $ref->{amount}, 2 ) ==
+              $form->round_amount( $ref->{paid}, 2 );
+        }
+
+        push @{ $form->{transactions} }, $ref;
+    }
+
+    $sth->finish;
+    $dbh->commit;
+}
+
+# this is used in IS, IR to retrieve the name
+sub get_name {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # sanitize $form->{vc}
+    if ( $form->{vc} ne 'customer' ) {
+        $form->{vc} = 'vendor';
+    }
+    else {
+        $form->{vc} = 'customer';
+    }
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    my $dateformat = $myconfig->{dateformat};
+
+    if ( $myconfig->{dateformat} !~ /^y/ ) {
+        my @a = split /\W/, $form->{transdate};
+        $dateformat .= "yy" if ( length $a[2] > 2 );
+    }
+
+    if ( $form->{transdate} !~ /\W/ ) {
+        $dateformat = 'yyyymmdd';
+    }
+
+    my $duedate;
+
+    $dateformat = $dbh->quote($dateformat);
+    my $tdate = $dbh->quote( $form->{transdate} );
+    $duedate = ( $form->{transdate} )
+      ? "to_date($tdate, $dateformat) 
+			+ c.terms"
+      : "current_date + c.terms";
+
+    $form->{"$form->{vc}_id"} *= 1;
+
+    # get customer/vendor
+    my $query = qq|
+		   SELECT c.name AS $form->{vc}, c.discount, c.creditlimit, 
+		          c.terms, c.email, c.cc, c.bcc, c.taxincluded,
+		          c.address1, c.address2, c.city, c.state,
+		          c.zipcode, c.country, c.curr AS currency, 
+		          c.language_code, $duedate AS duedate, 
+		          c.notes AS intnotes,
+			  b.discount AS tradediscount, 
+		          b.description AS business,
+		          e.name AS employee, e.id AS employee_id
+		     FROM $form->{vc} c
+		LEFT JOIN business b ON (b.id = c.business_id)
+		LEFT JOIN employee e ON (e.id = c.employee_id)
+		    WHERE c.id = ?|;
+
+    @queryargs = ( $form->{"$form->{vc}_id"} );
+    my $sth = $dbh->prepare($query);
+
+    $sth->execute(@queryargs) || $form->dberror($query);
+
+    $ref = $sth->fetchrow_hashref(NAME_lc);
+
+    if ( $form->{id} ) {
+        for (qw(currency employee employee_id intnotes)) {
+            delete $ref->{$_};
+        }
+    }
+
+    for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
+    $sth->finish;
+
+    my $buysell = ( $form->{vc} eq 'customer' ) ? "buy" : "sell";
+
+    # if no currency use defaultcurrency
+    $form->{currency} =
+      ( $form->{currency} )
+      ? $form->{currency}
+      : $form->{defaultcurrency};
+    $form->{exchangerate} = 0
+      if $form->{currency} eq $form->{defaultcurrency};
+
+    if ( $form->{transdate}
+        && ( $form->{currency} ne $form->{defaultcurrency} ) )
+    {
+        $form->{exchangerate} =
+          $form->get_exchangerate( $dbh, $form->{currency}, $form->{transdate},
+            $buysell );
+    }
+
+    $form->{forex} = $form->{exchangerate};
+
+    # if no employee, default to login
+    ( $form->{employee}, $form->{employee_id} ) = $form->get_employee($dbh)
+      unless $form->{employee_id};
+
+    my $arap = ( $form->{vc} eq 'customer' ) ? 'ar' : 'ap';
+    my $ARAP = uc $arap;
+
+    $form->{creditremaining} = $form->{creditlimit};
+    $query = qq|
+		SELECT SUM(amount - paid)
+		  FROM $arap
+		 WHERE $form->{vc}_id = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{"$form->{vc}_id"} )
+      || $form->dberror($query);
+
+    ( $form->{creditremaining} ) -= $sth->fetchrow_array;
+
+    $sth->finish;
+    if ( $form->{vc} ne "customer" ) {
+        $form->{vc} = 'vendor';
+    }
+
+    $query = qq|
+		SELECT o.amount, (SELECT e.$buysell FROM exchangerate e
+		                   WHERE e.curr = o.curr
+		                         AND e.transdate = o.transdate)
+		  FROM oe o
+		 WHERE o.$form->{vc}_id = ?
+		       AND o.quotation = '0' AND o.closed = '0'|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{"$form->{vc}_id"} ) || $form->dberror($query);
+
+    while ( my ( $amount, $exch ) = $sth->fetchrow_array ) {
+        $exch = 1 unless $exch;
+        $form->{creditremaining} -= $amount * $exch;
+    }
+
+    $sth->finish;
+
+    # get shipto if we did not converted an order or invoice
+    if ( !$form->{shipto} ) {
+
+        for (
+            qw(shiptoname shiptoaddress1 shiptoaddress2
+            shiptocity shiptostate shiptozipcode
+            shiptocountry shiptocontact shiptophone
+            shiptofax shiptoemail)
+          )
+        {
+            delete $form->{$_};
+        }
+
+        ## needs fixing (SELECT *)
+        $query = qq|
+			SELECT * 
+			  FROM shipto
+			 WHERE trans_id = $form->{"$form->{vc}_id"}|;
+
+        $sth = $dbh->prepare($query);
+        $sth->execute || $form->dberror($query);
+
+        $ref = $sth->fetchrow_hashref(NAME_lc);
+        for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
+        $sth->finish;
+    }
+
+    # get taxes
+    $query = qq|
+		SELECT c.accno
+		  FROM chart c
+		  JOIN $form->{vc}tax ct ON (ct.chart_id = c.id)
+		 WHERE ct.$form->{vc}_id = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{"$form->{vc}_id"} ) || $form->dberror($query);
+
+    my %tax;
+
+    while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+        $tax{ $ref->{accno} } = 1;
+    }
+
+    $sth->finish;
+    $transdate = $dbh->quote( $form->{transdate} );
+    my $where = qq|AND (t.validto >= $transdate OR t.validto IS NULL)|
+      if $form->{transdate};
+
+    # get tax rates and description
+    $query = qq|
+		   SELECT c.accno, c.description, t.rate, t.taxnumber
+		     FROM chart c
+		     JOIN tax t ON (c.id = t.chart_id)
+		    WHERE c.link LIKE '%${ARAP}_tax%'
+		          $where
+		 ORDER BY accno, validto|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    $form->{taxaccounts} = "";
+    my %a = ();
+
+    while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+
+        if ( $tax{ $ref->{accno} } ) {
+            if ( not exists $a{ $ref->{accno} } ) {
+                for (qw(rate description taxnumber)) {
+                    $form->{"$ref->{accno}_$_"} = $ref->{$_};
+                }
+                $form->{taxaccounts} .= "$ref->{accno} ";
+                $a{ $ref->{accno} } = 1;
+            }
+        }
+    }
+
+    $sth->finish;
+    chop $form->{taxaccounts};
+
+    # setup last accounts used for this customer/vendor
+    if ( !$form->{id} && $form->{type} !~ /_(order|quotation)/ ) {
+
+        $query = qq|
+			   SELECT c.accno, c.description, c.link, c.category,
+			          ac.project_id, p.projectnumber, 
+			          a.department_id, d.description AS department
+			     FROM chart c
+			     JOIN acc_trans ac ON (ac.chart_id = c.id)
+			     JOIN $arap a ON (a.id = ac.trans_id)
+			LEFT JOIN project p ON (ac.project_id = p.id)
+			LEFT JOIN department d ON (d.id = a.department_id)
+			    WHERE a.$form->{vc}_id = ?
+			          AND a.id IN (SELECT max(id) 
+			                         FROM $arap
+			                        WHERE $form->{vc}_id = 
+			                              ?)
+			|;
+
+        $sth = $dbh->prepare($query);
+        $sth->execute( $form->{"$form->{vc}_id"}, $form->{"$form->{vc}_id"} )
+          || $form->dberror($query);
+
+        my $i = 0;
+
+        while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+            $form->{department}    = $ref->{department};
+            $form->{department_id} = $ref->{department_id};
+
+            if ( $ref->{link} =~ /_amount/ ) {
+                $i++;
+                $form->{"$form->{ARAP}_amount_$i"} =
+                  "$ref->{accno}--$ref->{description}"
+                  if $ref->{accno};
+                $form->{"projectnumber_$i"} =
+                  "$ref->{projectnumber}--" . "$ref->{project_id}"
+                  if $ref->{project_id};
+            }
+
+            if ( $ref->{link} eq $form->{ARAP} ) {
+                $form->{ $form->{ARAP} } = $form->{"$form->{ARAP}_1"} =
+                  "$ref->{accno}--" . "$ref->{description}"
+                  if $ref->{accno};
+            }
+        }
+
+        $sth->finish;
+        $form->{rowcount} = $i if ( $i && !$form->{type} );
+    }
+
+    $dbh->commit;
+}
+
+1;


Property changes on: tags/1.2.3/LedgerSMB/AA.pm
___________________________________________________________________
Name: svn:executable
   + *

Added: tags/1.2.3/LedgerSMB/AM.pm
===================================================================
--- tags/1.2.3/LedgerSMB/AM.pm	                        (rev 0)
+++ tags/1.2.3/LedgerSMB/AM.pm	2007-04-24 22:53:52 UTC (rev 1098)
@@ -0,0 +1,1863 @@
+#=====================================================================
+# LedgerSMB
+# Small Medium Business Accounting software
+# http://www.ledgersmb.org/
+#
+# Copyright (C) 2006
+# This work contains copyrighted information from a number of sources all used
+# with permission.
+#
+# This file contains source code included with or based on SQL-Ledger which
+# is Copyright Dieter Simader and DWS Systems Inc. 2000-2005 and licensed
+# under the GNU General Public License version 2 or, at your option, any later
+# version.  For a full list including contact information of contributors,
+# maintainers, and copyright holders, see the CONTRIBUTORS file.
+#
+# Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork):
+# Copyright (C) 2000
+#
+#  Author: DWS Systems Inc.
+#     Web: http://www.sql-ledger.org
+#
+#  Contributors: Jim Rawlings <..hidden..>
+#
+#======================================================================
+#
+# This file has undergone whitespace cleanup.
+#
+#======================================================================
+#
+# Administration module
+#    Chart of Accounts
+#    template routines
+#    preferences
+#
+#======================================================================
+
+package AM;
+use LedgerSMB::Tax;
+use LedgerSMB::Sysconfig;
+
+sub get_account {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    my $dbh = $form->{dbh};
+
+    my $query = qq|
+		SELECT accno, description, charttype, gifi_accno,
+		       category, link, contra
+		  FROM chart
+		 WHERE id = ?|;
+
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} ) || $form->dberror($query);
+
+    my $ref = $sth->fetchrow_hashref(NAME_lc);
+    for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
+    $sth->finish;
+
+    # get default accounts
+    $query = qq|
+		SELECT (SELECT value FROM defaults
+		         WHERE setting_key = 'inventory_accno_id')
+		       AS inventory_accno_id,
+		       (SELECT value FROM defaults
+		         WHERE setting_key = 'income_accno_id')
+		       AS income_accno_id, 
+		       (SELECT value FROM defaults
+		         WHERE setting_key = 'expense_accno_id')
+		       AS expense_accno_id,
+		       (SELECT value FROM defaults
+		         WHERE setting_key = 'fxgain_accno_id')
+		       AS fxgain_accno_id, 
+		       (SELECT value FROM defaults
+		         WHERE setting_key = 'fxloss_accno_id')
+		       AS fxloss_accno_id|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    $ref = $sth->fetchrow_hashref(NAME_lc);
+    for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
+    $sth->finish;
+
+    # check if we have any transactions
+    $query = qq|
+		SELECT trans_id 
+		  FROM acc_trans
+		 WHERE chart_id = ? 
+		 LIMIT 1|;
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} );
+    ( $form->{orphaned} ) = $sth->fetchrow_array();
+    $form->{orphaned} = !$form->{orphaned};
+
+    $dbh->commit;
+}
+
+sub save_account {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database, turn off AutoCommit
+    my $dbh = $form->{dbh};
+
+    $form->{link} = "";
+    foreach my $item (
+        $form->{AR},        $form->{AR_amount},  $form->{AR_tax},
+        $form->{AR_paid},   $form->{AP},         $form->{AP_amount},
+        $form->{AP_tax},    $form->{AP_paid},    $form->{IC},
+        $form->{IC_income}, $form->{IC_sale},    $form->{IC_expense},
+        $form->{IC_cogs},   $form->{IC_taxpart}, $form->{IC_taxservice}
+      )
+    {
+        $form->{link} .= "${item}:" if ($item);
+    }
+
+    chop $form->{link};
+
+    # strip blanks from accno
+    for (qw(accno gifi_accno)) { $form->{$_} =~ s/( |')//g }
+
+    foreach my $item (qw(accno gifi_accno description)) {
+        $form->{$item} =~ s/-(-+)/-/g;
+        $form->{$item} =~ s/ ( )+/ /g;
+    }
+
+    my $query;
+    my $sth;
+
+    $form->{contra} *= 1;
+
+    my @queryargs;
+    @queryargs = (
+        $form->{accno},      $form->{description}, $form->{charttype},
+        $form->{gifi_accno}, $form->{category},    $form->{"link"},
+        $form->{contra}
+    );
+
+    # if we have an id then replace the old record
+    if ( $form->{id} ) {
+        $query = qq|
+			UPDATE chart SET accno = ?,
+			       description = ?,
+			       charttype = ?,
+			       gifi_accno = ?,
+			       category = ?,
+			       link = ?,
+			       contra = ?
+			 WHERE id = ?|;
+        push @queryargs, $form->{id};
+    }
+    else {
+        $query = qq|
+			INSERT INTO chart 
+                                    (accno, description, charttype, 
+			            gifi_accno, category, link, contra)
+			     VALUES (?, ?, ?, ?, ?, ?, ?)|;
+    }
+
+    $sth = $dbh->prepare($query);
+    $sth->execute(@queryargs) || $form->dberror($query);
+    $sth->finish;
+
+    $chart_id = $dbh->quote( $form->{id} );
+
+    if ( !$form->{id} ) {
+
+        # get id from chart
+        $query = qq|
+			SELECT id
+			FROM   chart
+			WHERE  accno = ?|;
+
+        $sth = $dbh->prepare($query);
+        $sth->execute( $form->{accno} );
+        ($chart_id) = $sth->fetchrow_array();
+        $sth->finish;
+    }
+
+    if (   $form->{IC_taxpart}
+        || $form->{IC_taxservice}
+        || $form->{AR_tax}
+        || $form->{AP_tax} )
+    {
+
+        # add account if it doesn't exist in tax
+        $query = qq|SELECT chart_id
+					  FROM tax
+					 WHERE chart_id = $chart_id|;
+
+        my ($tax_id) = $dbh->selectrow_array($query);
+
+        # add tax if it doesn't exist
+        unless ($tax_id) {
+            $query = qq|INSERT INTO tax (chart_id, rate)
+							 VALUES ($chart_id, 0)|;
+
+            $dbh->do($query) || $form->dberror($query);
+        }
+
+    }
+    else {
+
+        # remove tax
+        if ( $form->{id} ) {
+            $query = qq|DELETE FROM tax
+							  WHERE chart_id = $form->{id}|;
+
+            $dbh->do($query) || $form->dberror($query);
+        }
+    }
+
+    # commit
+    my $rc = $dbh->commit;
+
+    $rc;
+}
+
+sub delete_account {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database, turn off AutoCommit
+    my $dbh = $form->{dbh};
+    my $sth;
+    my $query = qq|
+		SELECT count(*)
+		  FROM acc_trans
+		 WHERE chart_id = ?|;
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} );
+    my ($rowcount) = $sth->fetchrow_array();
+
+    if ($rowcount) {
+        $form->error( "Cannot delete accounts with associated transactions!" );
+    }
+
+    # delete chart of account record
+    $query = qq|
+		DELETE FROM chart
+		      WHERE id = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} ) || $form->dberror($query);
+
+    # set inventory_accno_id, income_accno_id, expense_accno_id to defaults
+    $query = qq|
+		UPDATE parts
+		   SET inventory_accno_id = (SELECT value::int
+		                               FROM defaults
+					      WHERE setting_key = 
+							'inventory_accno_id')
+		 WHERE inventory_accno_id = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} ) || $form->dberror($query);
+
+    for (qw(income_accno_id expense_accno_id)) {
+        $query = qq|
+			UPDATE parts
+			   SET $_ = (SELECT value::int
+			               FROM defaults
+			              WHERE setting_key = '$_')
+			 WHERE $_ = ?|;
+
+        $sth = $dbh->prepare($query);
+        $sth->execute( $form->{id} ) || $form->dberror($query);
+        $sth->finish;
+    }
+
+    foreach my $table (qw(partstax customertax vendortax tax)) {
+        $query = qq|
+			DELETE FROM $table
+			      WHERE chart_id = ?|;
+
+        $sth = $dbh->prepare($query);
+        $sth->execute( $form->{id} ) || $form->dberror($query);
+        $sth->finish;
+    }
+
+    # commit and redirect
+    my $rc = $dbh->commit;
+
+    $rc;
+}
+
+sub gifi_accounts {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    my $query = qq|
+		  SELECT accno, description
+		    FROM gifi
+		ORDER BY accno|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+        push @{ $form->{ALL} }, $ref;
+    }
+
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub get_gifi {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+    my $sth;
+
+    my $query = qq|
+		SELECT accno, description
+		  FROM gifi
+		 WHERE accno = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{accno} ) || $form->dberror($query);
+    ( $form->{accno}, $form->{description} ) = $sth->fetchrow_array();
+
+    $sth->finish;
+
+    # check for transactions
+    $query = qq|
+		SELECT count(*) 
+		  FROM acc_trans a
+		  JOIN chart c ON (a.chart_id = c.id)
+		  JOIN gifi g ON (c.gifi_accno = g.accno)
+		 WHERE g.accno = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{accno} ) || $form->dberror($query);
+    ($numrows) = $sth->fetchrow_array;
+    if ( ( $numrows * 1 ) == 0 ) {
+        $form->{orphaned} = 1;
+    }
+    else {
+        $form->{orphaned} = 0;
+    }
+
+    $dbh->commit;
+
+}
+
+sub save_gifi {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    my $dbh = $form->{dbh};
+
+    $form->{accno} =~ s/( |')//g;
+
+    foreach my $item (qw(accno description)) {
+        $form->{$item} =~ s/-(-+)/-/g;
+        $form->{$item} =~ s/ ( )+/ /g;
+    }
+
+    my @queryargs = ( $form->{accno}, $form->{description} );
+
+    # id is the old account number!
+    if ( $form->{id} ) {
+        $query = qq|
+			UPDATE gifi 
+			   SET accno = ?,
+			       description = ?
+			 WHERE accno = ?|;
+        push @queryargs, $form->{id};
+
+    }
+    else {
+        $query = qq|
+			INSERT INTO gifi (accno, description)
+			     VALUES (?, ?)|;
+    }
+
+    $sth = $dbh->prepare($query);
+    $sth->execute(@queryargs) || $form->dberror;
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub delete_gifi {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    # id is the old account number!
+    $query = qq|
+		DELETE FROM gifi
+		      WHERE accno = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} ) || $form->dberror($query);
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub warehouses {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $form->sort_order();
+    my $query = qq|
+		  SELECT id, description
+		    FROM warehouse
+		ORDER BY description $form->{direction}|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+        push @{ $form->{ALL} }, $ref;
+    }
+
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub get_warehouse {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+    my $sth;
+
+    my $query = qq|
+		SELECT description
+		  FROM warehouse
+		 WHERE id = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} ) || $form->dberror($query);
+    ( $form->{description} ) = $sth->fetchrow_array;
+    $sth->finish;
+
+    # see if it is in use
+    $query = qq|
+		SELECT count(*) 
+		  FROM inventory
+		 WHERE warehouse_id = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} );
+
+    ( $form->{orphaned} ) = $sth->fetchrow_array;
+    if ( ( $form->{orphaned} * 1 ) == 0 ) {
+        $form->{orphaned} = 1;
+    }
+    else {
+        $form->{orphaned} = 0;
+    }
+
+    $dbh->commit;
+}
+
+sub save_warehouse {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    my $sth;
+    my @queryargs = ( $form->{description} );
+
+    $form->{description} =~ s/-(-)+/-/g;
+    $form->{description} =~ s/ ( )+/ /g;
+
+    if ( $form->{id} ) {
+        $query = qq|
+			UPDATE warehouse 
+			   SET description = ?
+			 WHERE id = ?|;
+        push @queryargs, $form->{id};
+    }
+    else {
+        $query = qq|
+			INSERT INTO warehouse (description)
+			     VALUES (?)|;
+    }
+
+    $sth = $dbh->prepare($query);
+    $sth->execute(@queryargs) || $form->dberror($query);
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub delete_warehouse {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $query = qq|
+		DELETE FROM warehouse
+		      WHERE id = ?|;
+
+    $dbh->prepare($query)->execute( $form->{id} ) || $form->dberror($query);
+    $dbh->commit;
+
+}
+
+sub departments {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $form->sort_order();
+    my $query = qq|SELECT id, description, role
+					 FROM department
+				 ORDER BY description $form->{direction}|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+        push @{ $form->{ALL} }, $ref;
+    }
+
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub get_department {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+    my $sth;
+
+    my $query = qq|
+		SELECT description, role
+		  FROM department
+		 WHERE id = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} );
+    ( $form->{description}, $form->{role} ) = $sth->fetchrow_array;
+    $sth->finish;
+
+    for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
+
+    # see if it is in use
+    $query = qq|
+		SELECT count(*) 
+		  FROM dpt_trans
+		 WHERE department_id = ? |;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} );
+    ( $form->{orphaned} ) = $sth->fetchrow_array;
+    if ( ( $form->{orphaned} * 1 ) == 0 ) {
+        $form->{orphaned} = 1;
+    }
+    else {
+        $form->{orphaned} = 0;
+    }
+
+    $dbh->commit;
+}
+
+sub save_department {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $form->{description} =~ s/-(-)+/-/g;
+    $form->{description} =~ s/ ( )+/ /g;
+    my $sth;
+    my @queryargs = ( $form->{description}, $form->{role} );
+    if ( $form->{id} ) {
+        $query = qq|
+			UPDATE department 
+			   SET description = ?,
+			       role = ?
+			 WHERE id = ?|;
+        push @queryargs, $form->{id};
+
+    }
+    else {
+        $query = qq|
+			INSERT INTO department (description, role)
+			     VALUES (?, ?)|;
+    }
+
+    $sth = $dbh->prepare($query);
+    $sth->execute(@queryargs) || $form->dberror($query);
+    $dbh->commit;
+
+}
+
+sub delete_department {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $query = qq|
+		DELETE FROM department
+		      WHERE id = ?|;
+
+    $dbh->prepare($query)->execute( $form->{id} );
+    $dbh->commit;
+
+}
+
+sub business {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $form->sort_order();
+    my $query = qq|
+		  SELECT id, description, discount
+		    FROM business
+		ORDER BY description $form->{direction}|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+        push @{ $form->{ALL} }, $ref;
+    }
+
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub get_business {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    my $query = qq|
+		SELECT description, discount
+		  FROM business
+		 WHERE id = ?|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute( $form->{id} );
+    ( $form->{description}, $form->{discount} ) = $sth->fetchrow_array();
+    $dbh->commit;
+
+}
+
+sub save_business {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $form->{description} =~ s/-(-)+/-/g;
+    $form->{description} =~ s/ ( )+/ /g;
+    $form->{discount} /= 100;
+
+    my $sth;
+    my @queryargs = ( $form->{description}, $form->{discount} );
+
+    if ( $form->{id} ) {
+        $query = qq|
+			UPDATE business 
+			   SET description = ?,
+			       discount = ?
+			 WHERE id = ?|;
+        push @queryargs, $form->{id};
+
+    }
+    else {
+        $query = qq|INSERT INTO business (description, discount)
+						 VALUES (?, ?)|;
+    }
+
+    $dbh->prepare($query)->execute(@queryargs) || $form->dberror($query);
+    $dbh->commit;
+
+}
+
+sub delete_business {
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $query = qq|
+		DELETE FROM business
+		      WHERE id = ?|;
+
+    $dbh->prepare($query)->execute( $form->{id} ) || $form->dberror($query);
+    $dbh->commit;
+
+}
+
+sub sic {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $form->{sort} = "code" unless $form->{sort};
+    my @a = qw(code description);
+
+    my %ordinal = (
+        code        => 1,
+        description => 3
+    );
+
+    my $sortorder = $form->sort_order( ..hidden.., \%ordinal );
+
+    my $query = qq|SELECT code, sictype, description
+					 FROM sic
+				 ORDER BY $sortorder|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+        push @{ $form->{ALL} }, $ref;
+    }
+
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub get_sic {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    my $query = qq|
+		SELECT code, sictype, description
+		  FROM sic
+		 WHERE code = | . $dbh->quote( $form->{code} );
+
+    my $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    my $ref = $sth->fetchrow_hashref(NAME_lc);
+    for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
+
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub save_sic {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    foreach my $item (qw(code description)) {
+        $form->{$item} =~ s/-(-)+/-/g;
+    }
+    my $sth;
+    @queryargs = ( $form->{code}, $form->{sictype}, $form->{description} );
+
+    # if there is an id
+    if ( $form->{id} ) {
+        $query = qq|
+			UPDATE sic 
+			   SET code = ?,
+			       sictype = ?,
+			       description = ?
+			 WHERE code = ?)|;
+        push @queryargs, $form->{id};
+
+    }
+    else {
+        $query = qq|
+		INSERT INTO sic (code, sictype, description)
+		     VALUES (?, ?, ?)|;
+
+    }
+
+    $dbh->prepare($query)->execute(@queryargs) || $form->dberror($query);
+    $dbh->commit;
+
+}
+
+sub delete_sic {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $query = qq|
+		DELETE FROM sic
+		      WHERE code = ?|;
+
+    $dbh->prepare($query)->execute( $form->{code} );
+    $dbh->commit;
+
+}
+
+sub language {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $form->{sort} = "code" unless $form->{sort};
+    my @a = qw(code description);
+
+    my %ordinal = (
+        code        => 1,
+        description => 2
+    );
+
+    my $sortorder = $form->sort_order( ..hidden.., \%ordinal );
+
+    my $query = qq|
+		  SELECT code, description
+		    FROM language
+		ORDER BY $sortorder|;
+
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+        push @{ $form->{ALL} }, $ref;
+    }
+
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub get_language {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    ## needs fixing (SELECT *...)
+    my $query = qq|
+		SELECT *
+		  FROM language
+		 WHERE code = ?|;
+
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $form->{code} ) || $form->dberror($query);
+
+    my $ref = $sth->fetchrow_hashref(NAME_lc);
+
+    for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
+
+    $sth->finish;
+    $dbh->commit;
+
+}
+
+sub save_language {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $form->{code} =~ s/ //g;
+
+    foreach my $item (qw(code description)) {
+        $form->{$item} =~ s/-(-)+/-/g;
+        $form->{$item} =~ s/ ( )+/-/g;
+    }
+    my $sth;
+    my @queryargs = ( $form->{code}, $form->{description} );
+
+    # if there is an id
+    if ( $form->{id} ) {
+        $query = qq|
+			UPDATE language 
+			   SET code = ?,
+			       description = ?
+			 WHERE code = ?|;
+        push @queryargs, $form->{id};
+
+    }
+    else {
+        $query = qq|
+			INSERT INTO language (code, description)
+			     VALUES (?, ?)|;
+    }
+
+    $dbh->prepare($query)->execute(@queryargs) || $form->dberror($query);
+    $dbh->commit;
+
+}
+
+sub delete_language {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    # connect to database
+    my $dbh = $form->{dbh};
+
+    $query = qq|
+		DELETE FROM language
+		      WHERE code = | . $dbh->quote( $form->{code} );
+
+    $dbh->do($query) || $form->dberror($query);
+    $dbh->{dbh};
+
+}
+
+sub recurring_transactions {
+
+    my ( $self, $myconfig, $form ) = @_;
+
+    my $dbh = $form->{dbh};
+
+    my $query = qq|SELECT value FROM defaults where setting_key = 'curr'|;
+
+    my ($defaultcurrency) = $dbh->selectrow_array($query);
+    $defaultcurrency = $dbh->quote( $defaultcurrency =~ s/:.*//g );
+
+    $form->{sort} ||= "nextdate";
+    my @a         = ( $form->{sort} );
+    my $sortorder = $form->sort_order( ..hidden.. );
+
+    $query = qq|
+		   SELECT 'ar' AS module, 'ar' AS transaction, a.invoice,
+		          n.name AS description, a.amount,
+		          s.*, se.formname AS recurringemail,
+		          sp.formname AS recurringprint,
+		          s.nextdate - current_date AS overdue, 
+		          'customer' AS vc,
+		          ex.buy AS exchangerate, a.curr,
+	                  (s.nextdate IS NULL OR s.nextdate > s.enddate) 
+                          AS expired
+		     FROM recurring s
+		     JOIN ar a ON (a.id = s.id)
+		     JOIN customer n ON (n.id = a.customer_id)
+		LEFT JOIN recurringemail se ON (se.id = s.id)
+		LEFT JOIN recurringprint sp ON (sp.id = s.id)
+		LEFT JOIN exchangerate ex 
+		          ON (ex.curr = a.curr AND a.transdate = ex.transdate)
+
+		    UNION
+
+		  SELECT 'ap' AS module, 'ap' AS transaction, a.invoice,
+		          n.name AS description, a.amount,
+		          s.*, se.formname AS recurringemail,
+		          sp.formname AS recurringprint,
+		          s.nextdate - current_date AS overdue, 'vendor' AS vc,
+		          ex.sell AS exchangerate, a.curr,
+		          (s.nextdate IS NULL OR s.nextdate > s.enddate) 
+		          AS expired
+		     FROM recurring s
+		     JOIN ap a ON (a.id = s.id)
+		     JOIN vendor n ON (n.id = a.vendor_id)
+		LEFT JOIN recurringemail se ON (se.id = s.id)
+		LEFT JOIN recurringprint sp ON (sp.id = s.id)
+		LEFT JOIN exchangerate ex ON 
+		          (ex.curr = a.curr AND a.transdate = ex.transdate)
+
+		    UNION
+
+		   SELECT 'gl' AS module, 'gl' AS transaction, FALSE AS invoice,
+		          a.description, (SELECT SUM(ac.amount) 
+		     FROM acc_trans ac 
+		    WHERE ac.trans_id = a.id 
+		      AND ac.amount > 0) AS amount,
+		          s.*, se.formname AS recurringemail,
+		          sp.formname AS recurringprint,
+		          s.nextdate - current_date AS overdue, '' AS vc,
+		          '1' AS exchangerate, $defaultcurrency AS curr,
+		          (s.nextdate IS NULL OR s.nextdate > s.enddate) 
+		          AS expired
+		     FROM recurring s
+		     JOIN gl a ON (a.id = s.id)
+		LEFT JOIN recurringemail se ON (se.id = s.id)
+		LEFT JOIN recurringprint sp ON (sp.id = s.id)
+
+		    UNION
+
+		   SELECT 'oe' AS module, 'so' AS transaction, FALSE AS invoice,
+		          n.name AS description, a.amount,
+		          s.*, se.formname AS recurringemail,
+		          sp.formname AS recurringprint,
+		          s.nextdate - current_date AS overdue, 
+		          'customer' AS vc,
+		          ex.buy AS exchangerate, a.curr,
+		          (s.nextdate IS NULL OR s.nextdate > s.enddate) 
+		          AS expired
+		     FROM recurring s
+		     JOIN oe a ON (a.id = s.id)
+		     JOIN customer n ON (n.id = a.customer_id)
+		LEFT JOIN recurringemail se ON (se.id = s.id)
+		LEFT JOIN recurringprint sp ON (sp.id = s.id)
+		LEFT JOIN exchangerate ex ON 
+		          (ex.curr = a.curr AND a.transdate = ex.transdate)
+		    WHERE a.quotation = '0'
+
+		    UNION
+
+		   SELECT 'oe' AS module, 'po' AS transaction, FALSE AS invoice,
+		          n.name AS description, a.amount,
+		          s.*, se.formname AS recurringemail,
+		          sp.formname AS recurringprint,
+		          s.nextdate - current_date AS overdue, 'vendor' AS vc,
+		          ex.sell AS exchangerate, a.curr,
+		          (s.nextdate IS NULL OR s.nextdate > s.enddate) 
+		          AS expired
+		     FROM recurring s
+		     JOIN oe a ON (a.id = s.id)
+		     JOIN vendor n ON (n.id = a.vendor_id)
+		LEFT JOIN recurringemail se ON (se.id = s.id)
+		LEFT JOIN recurringprint sp ON (sp.id = s.id)
+		LEFT JOIN exchangerate ex ON 
+		          (ex.curr = a.curr AND a.transdate = ex.transdate)
+		    WHERE a.quotation = '0'
+
+		 ORDER BY $sortorder|;
+
+    my $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    my $id;
+    my $transaction;
+    my %e = ();
+    my %p = ();
+
+    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+
+        $ref->{exchangerate} ||= 1;
+
+        if ( $ref->{id} != $id ) {
+
+            if (%e) {

@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.