[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
SF.net SVN: ledger-smb: [1099] tags
- Subject: SF.net SVN: ledger-smb: [1099] tags
- From: ..hidden..
- Date: Tue, 24 Apr 2007 16:35:48 -0700
Revision: 1099
http://svn.sourceforge.net/ledger-smb/?rev=1099&view=rev
Author: einhverfr
Date: 2007-04-24 16:35:45 -0700 (Tue, 24 Apr 2007)
Log Message:
-----------
Tagging 1.2.4
Added Paths:
-----------
tags/1.2.4/
tags/1.2.4/BUGS
tags/1.2.4/Build.PL
tags/1.2.4/COMPATABILITY
tags/1.2.4/CONTRIBUTORS
tags/1.2.4/COPYRIGHT
tags/1.2.4/Changelog
tags/1.2.4/INSTALL
tags/1.2.4/LICENSE
tags/1.2.4/LedgerSMB/
tags/1.2.4/LedgerSMB/AA.pm
tags/1.2.4/LedgerSMB/AM.pm
tags/1.2.4/LedgerSMB/BP.pm
tags/1.2.4/LedgerSMB/CA.pm
tags/1.2.4/LedgerSMB/CP.pm
tags/1.2.4/LedgerSMB/CT.pm
tags/1.2.4/LedgerSMB/CreditCard/
tags/1.2.4/LedgerSMB/CreditCard/Config.pm
tags/1.2.4/LedgerSMB/CreditCard/TrustCommerce/
tags/1.2.4/LedgerSMB/CreditCard/TrustCommerce/Config.pm
tags/1.2.4/LedgerSMB/CreditCard/TrustCommerce.pm
tags/1.2.4/LedgerSMB/CreditCard.pm
tags/1.2.4/LedgerSMB/Form.pm
tags/1.2.4/LedgerSMB/GL.pm
tags/1.2.4/LedgerSMB/HR.pm
tags/1.2.4/LedgerSMB/IC.pm
tags/1.2.4/LedgerSMB/IR.pm
tags/1.2.4/LedgerSMB/IS.pm
tags/1.2.4/LedgerSMB/Inifile.pm
tags/1.2.4/LedgerSMB/JC.pm
tags/1.2.4/LedgerSMB/Locale.pm
tags/1.2.4/LedgerSMB/Log.pm
tags/1.2.4/LedgerSMB/Mailer.pm
tags/1.2.4/LedgerSMB/Menu.pm
tags/1.2.4/LedgerSMB/Num2text.pm
tags/1.2.4/LedgerSMB/OE.pm
tags/1.2.4/LedgerSMB/OP.pm
tags/1.2.4/LedgerSMB/PE.pm
tags/1.2.4/LedgerSMB/PriceMatrix.pm
tags/1.2.4/LedgerSMB/RC.pm
tags/1.2.4/LedgerSMB/RP.pm
tags/1.2.4/LedgerSMB/Session/
tags/1.2.4/LedgerSMB/Session/DB.pm
tags/1.2.4/LedgerSMB/Session.pm
tags/1.2.4/LedgerSMB/Sysconfig.pm
tags/1.2.4/LedgerSMB/Tax.pm
tags/1.2.4/LedgerSMB/Taxes/
tags/1.2.4/LedgerSMB/Taxes/Simple.pm
tags/1.2.4/LedgerSMB/User.pm
tags/1.2.4/Makefile.PL
tags/1.2.4/README.OpenBSD
tags/1.2.4/README.debian
tags/1.2.4/README.svn-status
tags/1.2.4/README.translations
tags/1.2.4/TODO
tags/1.2.4/UPGRADE
tags/1.2.4/VERSION
tags/1.2.4/admin.pl
tags/1.2.4/am.pl
tags/1.2.4/ap.pl
tags/1.2.4/ar.pl
tags/1.2.4/bin/
tags/1.2.4/bin/aa.pl
tags/1.2.4/bin/admin.pl
tags/1.2.4/bin/am.pl
tags/1.2.4/bin/ap.pl
tags/1.2.4/bin/ar.pl
tags/1.2.4/bin/arap.pl
tags/1.2.4/bin/arapprn.pl
tags/1.2.4/bin/bp.pl
tags/1.2.4/bin/ca.pl
tags/1.2.4/bin/cp.pl
tags/1.2.4/bin/ct.pl
tags/1.2.4/bin/custom/
tags/1.2.4/bin/gl.pl
tags/1.2.4/bin/hr.pl
tags/1.2.4/bin/ic.pl
tags/1.2.4/bin/io.pl
tags/1.2.4/bin/ir.pl
tags/1.2.4/bin/is.pl
tags/1.2.4/bin/jc.pl
tags/1.2.4/bin/login.pl
tags/1.2.4/bin/menu.pl
tags/1.2.4/bin/oe.pl
tags/1.2.4/bin/pe.pl
tags/1.2.4/bin/pos.pl
tags/1.2.4/bin/ps.pl
tags/1.2.4/bin/pw.pl
tags/1.2.4/bin/rc.pl
tags/1.2.4/bin/rp.pl
tags/1.2.4/bp.pl
tags/1.2.4/ca.pl
tags/1.2.4/common.pl
tags/1.2.4/configure_apache.sh
tags/1.2.4/contrib/
tags/1.2.4/contrib/replication/
tags/1.2.4/contrib/replication/README
tags/1.2.4/contrib/replication/configure-replication.sh
tags/1.2.4/cp.pl
tags/1.2.4/css/
tags/1.2.4/css/ledger-smb-blue.css
tags/1.2.4/css/ledger-smb-brown.css
tags/1.2.4/css/ledger-smb-purple.css
tags/1.2.4/css/ledger-smb-red.css
tags/1.2.4/css/ledger-smb-yellow.css
tags/1.2.4/css/ledger-smb.css
tags/1.2.4/ct.pl
tags/1.2.4/custom.pl
tags/1.2.4/dists/
tags/1.2.4/dists/deb/
tags/1.2.4/dists/deb/cpan_requisites.txt
tags/1.2.4/dists/deb/required_debs.txt
tags/1.2.4/dists/gentoo/
tags/1.2.4/dists/gentoo/ChangeLog
tags/1.2.4/dists/gentoo/ledger-smb-1.1.1c.ebuild
tags/1.2.4/dists/gentoo/ledger-smb-VERSION.ebuild
tags/1.2.4/dists/gentoo/ledger-smb-httpd-gentoo.conf
tags/1.2.4/dists/gentoo/metadata.xml
tags/1.2.4/dists/gentoo/post-install.txt
tags/1.2.4/dists/rpm/
tags/1.2.4/dists/rpm/build.sh
tags/1.2.4/dists/rpm/ledgersmb.spec
tags/1.2.4/dists/slackware/
tags/1.2.4/dists/slackware/slack-desc
tags/1.2.4/dists/source/
tags/1.2.4/dists/source/build.sh
tags/1.2.4/dists/win32/
tags/1.2.4/dists/win32/build.bat
tags/1.2.4/dists/win32/shebang-activeperl.pl
tags/1.2.4/dists/win32/shebang-vanilla.pl
tags/1.2.4/dists/win32/wix/
tags/1.2.4/dists/win32/wix/apache.wxs
tags/1.2.4/dists/win32/wix/perl.wxs
tags/1.2.4/dists/win32/wix/postgresql.wxs
tags/1.2.4/dists/win32/wix/uuidgen.pl
tags/1.2.4/dists/win32/wix/uuids
tags/1.2.4/doc/
tags/1.2.4/doc/API/
tags/1.2.4/doc/API/Database
tags/1.2.4/doc/COPYRIGHT
tags/1.2.4/doc/LedgerSMB-manual.pdf
tags/1.2.4/doc/README
tags/1.2.4/doc/coding-standard.pdf
tags/1.2.4/doc/coding-standard.tex
tags/1.2.4/doc/database/
tags/1.2.4/doc/database/ledgersmb.dia
tags/1.2.4/doc/database/ledgersmb.dot
tags/1.2.4/doc/database/ledgersmb.html
tags/1.2.4/doc/database/ledgersmb.neato
tags/1.2.4/doc/database/ledgersmb.xml
tags/1.2.4/doc/database/ledgersmb.zigzag.dia
tags/1.2.4/doc/faq.html
tags/1.2.4/doc/html_manual/
tags/1.2.4/doc/html_manual/LedgerSMB-manual.css
tags/1.2.4/doc/html_manual/LedgerSMB-manual.html
tags/1.2.4/doc/html_manual/LedgerSMB-manual0x.png
tags/1.2.4/doc/html_manual/LedgerSMB-manual1x.png
tags/1.2.4/doc/html_manual/LedgerSMB-manual2.html
tags/1.2.4/doc/html_manual/LedgerSMB-manual2x.png
tags/1.2.4/doc/html_manual/LedgerSMB-manual3.html
tags/1.2.4/doc/html_manual/LedgerSMB-manual3x.png
tags/1.2.4/doc/html_manual/LedgerSMB-manual4.html
tags/1.2.4/doc/html_manual/LedgerSMB-manual4x.png
tags/1.2.4/doc/html_manual/LedgerSMB-manual5x.png
tags/1.2.4/doc/html_manual/LedgerSMB-manual6x.png
tags/1.2.4/doc/manual/
tags/1.2.4/doc/manual/LedgerSMB-manual.aux
tags/1.2.4/doc/manual/LedgerSMB-manual.lof
tags/1.2.4/doc/manual/LedgerSMB-manual.log
tags/1.2.4/doc/manual/LedgerSMB-manual.out
tags/1.2.4/doc/manual/LedgerSMB-manual.tex
tags/1.2.4/doc/manual/LedgerSMB-manual.toc
tags/1.2.4/doc/manual/LedgerSMB-manual.txt
tags/1.2.4/doc/manual/ap_workflow_complex.tex
tags/1.2.4/doc/manual/ap_workflow_ship.tex
tags/1.2.4/doc/manual/ar_workflow_complex.tex
tags/1.2.4/doc/manual/ar_workflow_ship.tex
tags/1.2.4/doc/manual/fdl.tex
tags/1.2.4/doc/manual/metatron.sty
tags/1.2.4/doc/manual/simple_ap_workflow.tex
tags/1.2.4/doc/manual/simple_ar_dataflow.tex
tags/1.2.4/doc/manual/sl-stack.tex
tags/1.2.4/doc/release_notes
tags/1.2.4/doc/samples/
tags/1.2.4/doc/samples/lsmb01-cli-example.sh
tags/1.2.4/doc/samples/lsmb02-cli-example.pl
tags/1.2.4/drivers/
tags/1.2.4/drivers/pd3000.pl
tags/1.2.4/favicon.ico
tags/1.2.4/gl.pl
tags/1.2.4/hr.pl
tags/1.2.4/ic.pl
tags/1.2.4/import_members.pl
tags/1.2.4/index.html
tags/1.2.4/ir.pl
tags/1.2.4/is.pl
tags/1.2.4/jc.pl
tags/1.2.4/ledger-smb.eps
tags/1.2.4/ledger-smb.gif
tags/1.2.4/ledger-smb.png
tags/1.2.4/ledger-smb_small.png
tags/1.2.4/ledgersmb-httpd.conf
tags/1.2.4/ledgersmb.conf.default
tags/1.2.4/locale/
tags/1.2.4/locale/LedgerSMB.pot
tags/1.2.4/locale/html/
tags/1.2.4/locale/html/splash.html
tags/1.2.4/locale/legacy/
tags/1.2.4/locale/legacy/ch/
tags/1.2.4/locale/legacy/ch/COPYING
tags/1.2.4/locale/legacy/ch/LANGUAGE
tags/1.2.4/locale/legacy/ch/Num2text
tags/1.2.4/locale/legacy/ch/aa
tags/1.2.4/locale/legacy/ch/admin
tags/1.2.4/locale/legacy/ch/all
tags/1.2.4/locale/legacy/ch/am
tags/1.2.4/locale/legacy/ch/ap
tags/1.2.4/locale/legacy/ch/ar
tags/1.2.4/locale/legacy/ch/arap
tags/1.2.4/locale/legacy/ch/arapprn
tags/1.2.4/locale/legacy/ch/bp
tags/1.2.4/locale/legacy/ch/ca
tags/1.2.4/locale/legacy/ch/cp
tags/1.2.4/locale/legacy/ch/ct
tags/1.2.4/locale/legacy/ch/gl
tags/1.2.4/locale/legacy/ch/hr
tags/1.2.4/locale/legacy/ch/ic
tags/1.2.4/locale/legacy/ch/io
tags/1.2.4/locale/legacy/ch/ir
tags/1.2.4/locale/legacy/ch/is
tags/1.2.4/locale/legacy/ch/jc
tags/1.2.4/locale/legacy/ch/locales.pl
tags/1.2.4/locale/legacy/ch/login
tags/1.2.4/locale/legacy/ch/menu
tags/1.2.4/locale/legacy/ch/oe
tags/1.2.4/locale/legacy/ch/pe
tags/1.2.4/locale/legacy/ch/pos
tags/1.2.4/locale/legacy/ch/ps
tags/1.2.4/locale/legacy/ch/pw
tags/1.2.4/locale/legacy/ch/rc
tags/1.2.4/locale/legacy/ch/rp
tags/1.2.4/locale/legacy/co/
tags/1.2.4/locale/legacy/co/COPYING
tags/1.2.4/locale/legacy/co/LANGUAGE
tags/1.2.4/locale/legacy/co/Num2text
tags/1.2.4/locale/legacy/co/aa
tags/1.2.4/locale/legacy/co/admin
tags/1.2.4/locale/legacy/co/all
tags/1.2.4/locale/legacy/co/am
tags/1.2.4/locale/legacy/co/ap
tags/1.2.4/locale/legacy/co/ar
tags/1.2.4/locale/legacy/co/arap
tags/1.2.4/locale/legacy/co/arapprn
tags/1.2.4/locale/legacy/co/bp
tags/1.2.4/locale/legacy/co/ca
tags/1.2.4/locale/legacy/co/cp
tags/1.2.4/locale/legacy/co/ct
tags/1.2.4/locale/legacy/co/gl
tags/1.2.4/locale/legacy/co/hr
tags/1.2.4/locale/legacy/co/ic
tags/1.2.4/locale/legacy/co/io
tags/1.2.4/locale/legacy/co/ir
tags/1.2.4/locale/legacy/co/is
tags/1.2.4/locale/legacy/co/jc
tags/1.2.4/locale/legacy/co/locales.pl
tags/1.2.4/locale/legacy/co/login
tags/1.2.4/locale/legacy/co/menu
tags/1.2.4/locale/legacy/co/oe
tags/1.2.4/locale/legacy/co/pe
tags/1.2.4/locale/legacy/co/pos
tags/1.2.4/locale/legacy/co/ps
tags/1.2.4/locale/legacy/co/pw
tags/1.2.4/locale/legacy/co/rc
tags/1.2.4/locale/legacy/co/rp
tags/1.2.4/locale/legacy/de/
tags/1.2.4/locale/legacy/de/COPYING
tags/1.2.4/locale/legacy/de/LANGUAGE
tags/1.2.4/locale/legacy/de/Num2text
tags/1.2.4/locale/legacy/de/aa
tags/1.2.4/locale/legacy/de/admin
tags/1.2.4/locale/legacy/de/all
tags/1.2.4/locale/legacy/de/am
tags/1.2.4/locale/legacy/de/ap
tags/1.2.4/locale/legacy/de/ar
tags/1.2.4/locale/legacy/de/arap
tags/1.2.4/locale/legacy/de/arapprn
tags/1.2.4/locale/legacy/de/bp
tags/1.2.4/locale/legacy/de/ca
tags/1.2.4/locale/legacy/de/cp
tags/1.2.4/locale/legacy/de/ct
tags/1.2.4/locale/legacy/de/gl
tags/1.2.4/locale/legacy/de/hr
tags/1.2.4/locale/legacy/de/ic
tags/1.2.4/locale/legacy/de/io
tags/1.2.4/locale/legacy/de/ir
tags/1.2.4/locale/legacy/de/is
tags/1.2.4/locale/legacy/de/jc
tags/1.2.4/locale/legacy/de/locales.pl
tags/1.2.4/locale/legacy/de/login
tags/1.2.4/locale/legacy/de/menu
tags/1.2.4/locale/legacy/de/oe
tags/1.2.4/locale/legacy/de/pe
tags/1.2.4/locale/legacy/de/pos
tags/1.2.4/locale/legacy/de/ps
tags/1.2.4/locale/legacy/de/pw
tags/1.2.4/locale/legacy/de/rc
tags/1.2.4/locale/legacy/de/rp
tags/1.2.4/locale/legacy/ee/
tags/1.2.4/locale/legacy/ee/COPYING
tags/1.2.4/locale/legacy/ee/LANGUAGE
tags/1.2.4/locale/legacy/ee/Num2text
tags/1.2.4/locale/legacy/ee/aa
tags/1.2.4/locale/legacy/ee/admin
tags/1.2.4/locale/legacy/ee/all
tags/1.2.4/locale/legacy/ee/am
tags/1.2.4/locale/legacy/ee/ap
tags/1.2.4/locale/legacy/ee/ar
tags/1.2.4/locale/legacy/ee/arap
tags/1.2.4/locale/legacy/ee/arapprn
tags/1.2.4/locale/legacy/ee/bp
tags/1.2.4/locale/legacy/ee/ca
tags/1.2.4/locale/legacy/ee/cp
tags/1.2.4/locale/legacy/ee/ct
tags/1.2.4/locale/legacy/ee/gl
tags/1.2.4/locale/legacy/ee/hr
tags/1.2.4/locale/legacy/ee/ic
tags/1.2.4/locale/legacy/ee/io
tags/1.2.4/locale/legacy/ee/ir
tags/1.2.4/locale/legacy/ee/is
tags/1.2.4/locale/legacy/ee/jc
tags/1.2.4/locale/legacy/ee/locales.pl
tags/1.2.4/locale/legacy/ee/login
tags/1.2.4/locale/legacy/ee/menu
tags/1.2.4/locale/legacy/ee/oe
tags/1.2.4/locale/legacy/ee/pe
tags/1.2.4/locale/legacy/ee/pos
tags/1.2.4/locale/legacy/ee/ps
tags/1.2.4/locale/legacy/ee/pw
tags/1.2.4/locale/legacy/ee/rc
tags/1.2.4/locale/legacy/ee/rp
tags/1.2.4/locale/legacy/es/
tags/1.2.4/locale/legacy/es/COPYING
tags/1.2.4/locale/legacy/es/LANGUAGE
tags/1.2.4/locale/legacy/es/Num2text
tags/1.2.4/locale/legacy/es/aa
tags/1.2.4/locale/legacy/es/admin
tags/1.2.4/locale/legacy/es/all
tags/1.2.4/locale/legacy/es/am
tags/1.2.4/locale/legacy/es/ap
tags/1.2.4/locale/legacy/es/ar
tags/1.2.4/locale/legacy/es/arap
tags/1.2.4/locale/legacy/es/arapprn
tags/1.2.4/locale/legacy/es/bp
tags/1.2.4/locale/legacy/es/ca
tags/1.2.4/locale/legacy/es/cp
tags/1.2.4/locale/legacy/es/ct
tags/1.2.4/locale/legacy/es/gl
tags/1.2.4/locale/legacy/es/hr
tags/1.2.4/locale/legacy/es/ic
tags/1.2.4/locale/legacy/es/io
tags/1.2.4/locale/legacy/es/ir
tags/1.2.4/locale/legacy/es/is
tags/1.2.4/locale/legacy/es/jc
tags/1.2.4/locale/legacy/es/locales.pl
tags/1.2.4/locale/legacy/es/login
tags/1.2.4/locale/legacy/es/menu
tags/1.2.4/locale/legacy/es/oe
tags/1.2.4/locale/legacy/es/pe
tags/1.2.4/locale/legacy/es/pos
tags/1.2.4/locale/legacy/es/ps
tags/1.2.4/locale/legacy/es/pw
tags/1.2.4/locale/legacy/es/rc
tags/1.2.4/locale/legacy/es/rp
tags/1.2.4/locale/legacy/fi/
tags/1.2.4/locale/legacy/fi/COPYING
tags/1.2.4/locale/legacy/fi/LANGUAGE
tags/1.2.4/locale/legacy/fi/aa
tags/1.2.4/locale/legacy/fi/admin
tags/1.2.4/locale/legacy/fi/all
tags/1.2.4/locale/legacy/fi/am
tags/1.2.4/locale/legacy/fi/ap
tags/1.2.4/locale/legacy/fi/ar
tags/1.2.4/locale/legacy/fi/arap
tags/1.2.4/locale/legacy/fi/arapprn
tags/1.2.4/locale/legacy/fi/bp
tags/1.2.4/locale/legacy/fi/ca
tags/1.2.4/locale/legacy/fi/cp
tags/1.2.4/locale/legacy/fi/ct
tags/1.2.4/locale/legacy/fi/gl
tags/1.2.4/locale/legacy/fi/hr
tags/1.2.4/locale/legacy/fi/ic
tags/1.2.4/locale/legacy/fi/io
tags/1.2.4/locale/legacy/fi/ir
tags/1.2.4/locale/legacy/fi/is
tags/1.2.4/locale/legacy/fi/jc
tags/1.2.4/locale/legacy/fi/locales.pl
tags/1.2.4/locale/legacy/fi/login
tags/1.2.4/locale/legacy/fi/menu
tags/1.2.4/locale/legacy/fi/oe
tags/1.2.4/locale/legacy/fi/pe
tags/1.2.4/locale/legacy/fi/pos
tags/1.2.4/locale/legacy/fi/ps
tags/1.2.4/locale/legacy/fi/pw
tags/1.2.4/locale/legacy/fi/rc
tags/1.2.4/locale/legacy/fi/rp
tags/1.2.4/locale/legacy/fi_utf/
tags/1.2.4/locale/legacy/fi_utf/COPYING
tags/1.2.4/locale/legacy/fi_utf/LANGUAGE
tags/1.2.4/locale/legacy/fi_utf/aa
tags/1.2.4/locale/legacy/fi_utf/admin
tags/1.2.4/locale/legacy/fi_utf/am
tags/1.2.4/locale/legacy/fi_utf/ap
tags/1.2.4/locale/legacy/fi_utf/ar
tags/1.2.4/locale/legacy/fi_utf/arap
tags/1.2.4/locale/legacy/fi_utf/arapprn
tags/1.2.4/locale/legacy/fi_utf/bp
tags/1.2.4/locale/legacy/fi_utf/ca
tags/1.2.4/locale/legacy/fi_utf/cp
tags/1.2.4/locale/legacy/fi_utf/ct
tags/1.2.4/locale/legacy/fi_utf/gl
tags/1.2.4/locale/legacy/fi_utf/hr
tags/1.2.4/locale/legacy/fi_utf/ic
tags/1.2.4/locale/legacy/fi_utf/io
tags/1.2.4/locale/legacy/fi_utf/ir
tags/1.2.4/locale/legacy/fi_utf/is
tags/1.2.4/locale/legacy/fi_utf/jc
tags/1.2.4/locale/legacy/fi_utf/locales.pl
tags/1.2.4/locale/legacy/fi_utf/login
tags/1.2.4/locale/legacy/fi_utf/menu
tags/1.2.4/locale/legacy/fi_utf/oe
tags/1.2.4/locale/legacy/fi_utf/pe
tags/1.2.4/locale/legacy/fi_utf/pos
tags/1.2.4/locale/legacy/fi_utf/ps
tags/1.2.4/locale/legacy/fi_utf/pw
tags/1.2.4/locale/legacy/fi_utf/rc
tags/1.2.4/locale/legacy/fi_utf/rp
tags/1.2.4/locale/legacy/ru/
tags/1.2.4/locale/legacy/ru/COPYING
tags/1.2.4/locale/legacy/ru/LANGUAGE
tags/1.2.4/locale/legacy/ru/Num2text
tags/1.2.4/locale/legacy/ru/aa
tags/1.2.4/locale/legacy/ru/admin
tags/1.2.4/locale/legacy/ru/all
tags/1.2.4/locale/legacy/ru/am
tags/1.2.4/locale/legacy/ru/ap
tags/1.2.4/locale/legacy/ru/ar
tags/1.2.4/locale/legacy/ru/arap
tags/1.2.4/locale/legacy/ru/arapprn
tags/1.2.4/locale/legacy/ru/bp
tags/1.2.4/locale/legacy/ru/ca
tags/1.2.4/locale/legacy/ru/cp
tags/1.2.4/locale/legacy/ru/ct
tags/1.2.4/locale/legacy/ru/gl
tags/1.2.4/locale/legacy/ru/hr
tags/1.2.4/locale/legacy/ru/ic
tags/1.2.4/locale/legacy/ru/io
tags/1.2.4/locale/legacy/ru/ir
tags/1.2.4/locale/legacy/ru/is
tags/1.2.4/locale/legacy/ru/jc
tags/1.2.4/locale/legacy/ru/locales.pl
tags/1.2.4/locale/legacy/ru/login
tags/1.2.4/locale/legacy/ru/menu
tags/1.2.4/locale/legacy/ru/oe
tags/1.2.4/locale/legacy/ru/pe
tags/1.2.4/locale/legacy/ru/pos
tags/1.2.4/locale/legacy/ru/ps
tags/1.2.4/locale/legacy/ru/pw
tags/1.2.4/locale/legacy/ru/rc
tags/1.2.4/locale/legacy/ru/rp
tags/1.2.4/locale/legacy/tw_big5/
tags/1.2.4/locale/legacy/tw_big5/COPYING
tags/1.2.4/locale/legacy/tw_big5/LANGUAGE
tags/1.2.4/locale/legacy/tw_big5/aa
tags/1.2.4/locale/legacy/tw_big5/admin
tags/1.2.4/locale/legacy/tw_big5/all
tags/1.2.4/locale/legacy/tw_big5/am
tags/1.2.4/locale/legacy/tw_big5/ap
tags/1.2.4/locale/legacy/tw_big5/ar
tags/1.2.4/locale/legacy/tw_big5/arap
tags/1.2.4/locale/legacy/tw_big5/arapprn
tags/1.2.4/locale/legacy/tw_big5/bp
tags/1.2.4/locale/legacy/tw_big5/ca
tags/1.2.4/locale/legacy/tw_big5/cp
tags/1.2.4/locale/legacy/tw_big5/ct
tags/1.2.4/locale/legacy/tw_big5/gl
tags/1.2.4/locale/legacy/tw_big5/hr
tags/1.2.4/locale/legacy/tw_big5/ic
tags/1.2.4/locale/legacy/tw_big5/io
tags/1.2.4/locale/legacy/tw_big5/ir
tags/1.2.4/locale/legacy/tw_big5/is
tags/1.2.4/locale/legacy/tw_big5/jc
tags/1.2.4/locale/legacy/tw_big5/locales.pl
tags/1.2.4/locale/legacy/tw_big5/login
tags/1.2.4/locale/legacy/tw_big5/menu
tags/1.2.4/locale/legacy/tw_big5/oe
tags/1.2.4/locale/legacy/tw_big5/pe
tags/1.2.4/locale/legacy/tw_big5/pos
tags/1.2.4/locale/legacy/tw_big5/ps
tags/1.2.4/locale/legacy/tw_big5/pw
tags/1.2.4/locale/legacy/tw_big5/rc
tags/1.2.4/locale/legacy/tw_big5/rp
tags/1.2.4/locale/legacy/tw_big5/temp
tags/1.2.4/locale/legacy/ua/
tags/1.2.4/locale/legacy/ua/COPYING
tags/1.2.4/locale/legacy/ua/LANGUAGE
tags/1.2.4/locale/legacy/ua/aa
tags/1.2.4/locale/legacy/ua/admin
tags/1.2.4/locale/legacy/ua/all
tags/1.2.4/locale/legacy/ua/am
tags/1.2.4/locale/legacy/ua/ap
tags/1.2.4/locale/legacy/ua/ar
tags/1.2.4/locale/legacy/ua/arap
tags/1.2.4/locale/legacy/ua/arapprn
tags/1.2.4/locale/legacy/ua/bp
tags/1.2.4/locale/legacy/ua/ca
tags/1.2.4/locale/legacy/ua/cp
tags/1.2.4/locale/legacy/ua/ct
tags/1.2.4/locale/legacy/ua/gl
tags/1.2.4/locale/legacy/ua/hr
tags/1.2.4/locale/legacy/ua/ic
tags/1.2.4/locale/legacy/ua/io
tags/1.2.4/locale/legacy/ua/ir
tags/1.2.4/locale/legacy/ua/is
tags/1.2.4/locale/legacy/ua/jc
tags/1.2.4/locale/legacy/ua/locales.pl
tags/1.2.4/locale/legacy/ua/login
tags/1.2.4/locale/legacy/ua/menu
tags/1.2.4/locale/legacy/ua/oe
tags/1.2.4/locale/legacy/ua/pe
tags/1.2.4/locale/legacy/ua/pos
tags/1.2.4/locale/legacy/ua/ps
tags/1.2.4/locale/legacy/ua/pw
tags/1.2.4/locale/legacy/ua/rc
tags/1.2.4/locale/legacy/ua/rp
tags/1.2.4/locale/po/
tags/1.2.4/locale/po/ar_EG.po
tags/1.2.4/locale/po/bg.po
tags/1.2.4/locale/po/ca.po
tags/1.2.4/locale/po/cs.po
tags/1.2.4/locale/po/da.po
tags/1.2.4/locale/po/de.po
tags/1.2.4/locale/po/de_CH.po
tags/1.2.4/locale/po/el.po
tags/1.2.4/locale/po/en.po
tags/1.2.4/locale/po/en_CA.po
tags/1.2.4/locale/po/en_GB.po
tags/1.2.4/locale/po/es.po
tags/1.2.4/locale/po/es_CO.po
tags/1.2.4/locale/po/es_EC.po
tags/1.2.4/locale/po/es_MX.po
tags/1.2.4/locale/po/es_PA.po
tags/1.2.4/locale/po/es_PY.po
tags/1.2.4/locale/po/es_SV.po
tags/1.2.4/locale/po/es_VE.po
tags/1.2.4/locale/po/et.po
tags/1.2.4/locale/po/fi.po
tags/1.2.4/locale/po/fr.po
tags/1.2.4/locale/po/fr_BE.po
tags/1.2.4/locale/po/fr_CA.po
tags/1.2.4/locale/po/hu.po
tags/1.2.4/locale/po/id.po
tags/1.2.4/locale/po/is.po
tags/1.2.4/locale/po/it.po
tags/1.2.4/locale/po/lt.po
tags/1.2.4/locale/po/lv.po
tags/1.2.4/locale/po/nb.po
tags/1.2.4/locale/po/nl.po
tags/1.2.4/locale/po/nl_BE.po
tags/1.2.4/locale/po/pl.po
tags/1.2.4/locale/po/pt.po
tags/1.2.4/locale/po/pt_BR.po
tags/1.2.4/locale/po/ru.po
tags/1.2.4/locale/po/sv.po
tags/1.2.4/locale/po/tr.po
tags/1.2.4/locale/po/uk.po
tags/1.2.4/locale/po/zh_CN.po
tags/1.2.4/locale/po/zh_TW.po
tags/1.2.4/locale/splash.html
tags/1.2.4/login.pl
tags/1.2.4/menu.ini
tags/1.2.4/menu.pl
tags/1.2.4/net-setup.pl
tags/1.2.4/oe.pl
tags/1.2.4/pe.pl
tags/1.2.4/pos.conf.pl
tags/1.2.4/ps.pl
tags/1.2.4/rc.pl
tags/1.2.4/rp.pl
tags/1.2.4/sl2ls.sh
tags/1.2.4/spool/
tags/1.2.4/sql/
tags/1.2.4/sql/Australia_General_0000-chart.sql
tags/1.2.4/sql/Australia_General_00000-chart.sql
tags/1.2.4/sql/Austria-chart.sql
tags/1.2.4/sql/Austria-gifi.sql
tags/1.2.4/sql/Bahasa-Indonesia_Default-chart.sql
tags/1.2.4/sql/Belgium-chart.sql
tags/1.2.4/sql/Belgium-gifi.sql
tags/1.2.4/sql/Brazil_General-chart.sql
tags/1.2.4/sql/Canada-English-gifi.sql
tags/1.2.4/sql/Canada-English_General-chart.sql
tags/1.2.4/sql/Canada-Quebec-gifi.sql
tags/1.2.4/sql/Canada-Quebec_General-chart.sql
tags/1.2.4/sql/Colombia-PUC-chart.sql
tags/1.2.4/sql/Colombia-PUC-gifi.sql
tags/1.2.4/sql/Czech-Republic-chart.sql
tags/1.2.4/sql/Danish_Default-chart.sql
tags/1.2.4/sql/Default-chart.sql
tags/1.2.4/sql/Dutch_Default-chart.sql
tags/1.2.4/sql/Dutch_Standard-chart.sql
tags/1.2.4/sql/Egypt-chart.sql
tags/1.2.4/sql/France-chart.sql
tags/1.2.4/sql/German-Sample-chart.sql
tags/1.2.4/sql/German-Sample-gifi.sql
tags/1.2.4/sql/Germany-DATEV-SKR03-chart.sql
tags/1.2.4/sql/Germany-DATEV-SKR03-gifi.sql
tags/1.2.4/sql/Germany-SKR03-chart.sql
tags/1.2.4/sql/Germany-SKR03-gifi.sql
tags/1.2.4/sql/Hungary-chart.sql
tags/1.2.4/sql/Hungary-gifi.sql
tags/1.2.4/sql/Italy-gifi.sql
tags/1.2.4/sql/Italy_General-chart.sql
tags/1.2.4/sql/Italy_cc2424-chart.sql
tags/1.2.4/sql/Latvia-chart.sql
tags/1.2.4/sql/NAICS.sql
tags/1.2.4/sql/Norwegian_Default-chart.sql
tags/1.2.4/sql/Paraguay-chart.sql
tags/1.2.4/sql/Paraguay-gifi.sql
tags/1.2.4/sql/Pg-central.sql
tags/1.2.4/sql/Pg-database.sql
tags/1.2.4/sql/Poland-chart.sql
tags/1.2.4/sql/Simplified-Chinese_Default-chart.sql
tags/1.2.4/sql/Spain-ISO-chart.sql
tags/1.2.4/sql/Spain-chart.sql
tags/1.2.4/sql/Sweden-chart.sql
tags/1.2.4/sql/Sweden-gifi.sql
tags/1.2.4/sql/Sweden_Agriculture-chart.sql
tags/1.2.4/sql/Sweden_Church_Society-chart.sql
tags/1.2.4/sql/Swiss-German-chart.sql
tags/1.2.4/sql/Swiss-German-gifi.sql
tags/1.2.4/sql/Traditional-Chinese_Default-chart.sql
tags/1.2.4/sql/UCOA-Form990-chart.sql
tags/1.2.4/sql/UCOA-Form990-gifi.sql
tags/1.2.4/sql/UCOA-Form990EZ-chart.sql
tags/1.2.4/sql/UCOA-Form990EZ-gifi.sql
tags/1.2.4/sql/UK_General-chart.sql
tags/1.2.4/sql/US_General-chart.sql
tags/1.2.4/sql/US_Manufacturing-chart.sql
tags/1.2.4/sql/US_Service_Company-chart.sql
tags/1.2.4/sql/Venezuela_Default-chart.sql
tags/1.2.4/sql/legacy/
tags/1.2.4/sql/legacy/Pg-upgrade-1.2.6-1.2.7.sql
tags/1.2.4/sql/legacy/Pg-upgrade-1.2.7-1.4.0.sql
tags/1.2.4/sql/legacy/Pg-upgrade-1.4.0-1.6.0.sql
tags/1.2.4/sql/legacy/Pg-upgrade-1.6.0-1.8.0.sql
tags/1.2.4/sql/legacy/Pg-upgrade-1.8.0-1.8.4.sql
tags/1.2.4/sql/legacy/Pg-upgrade-1.8.4-1.8.5.sql
tags/1.2.4/sql/legacy/Pg-upgrade-1.8.5-2.0.0.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.0.0-2.0.8.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.0.8-2.2.0.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.2.0-2.3.0.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.0-2.3.1.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.1-2.3.3.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.3-2.3.4.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.4-2.3.5.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.5-2.3.6.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.6-2.3.7.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.7-2.3.8.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.8-2.3.9.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.3.9-2.4.2.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.4.2-2.4.3.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.4.3-2.4.4.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.4.4-2.5.0.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.5.0-2.5.2.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.5.2-2.6.0.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.0-2.6.1.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.1-2.6.2.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.12-2.6.17.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.17-2.6.18.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.18-2.6.19.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.2-2.6.3.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.3-2.6.4.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.4-2.6.7.sql
tags/1.2.4/sql/legacy/Pg-upgrade-2.6.7-2.6.12.sql
tags/1.2.4/t/
tags/1.2.4/t/01-load.t
tags/1.2.4/t/02-number-handling.t
tags/1.2.4/templates/
tags/1.2.4/templates/Brazilian_Portuguese-ap_transaction.html
tags/1.2.4/templates/Brazilian_Portuguese-ap_transaction.tex
tags/1.2.4/templates/Brazilian_Portuguese-ar_transaction.html
tags/1.2.4/templates/Brazilian_Portuguese-ar_transaction.tex
tags/1.2.4/templates/Brazilian_Portuguese-balance_sheet.html
tags/1.2.4/templates/Brazilian_Portuguese-bin_list.html
tags/1.2.4/templates/Brazilian_Portuguese-bin_list.tex
tags/1.2.4/templates/Brazilian_Portuguese-check.tex
tags/1.2.4/templates/Brazilian_Portuguese-income_statement.html
tags/1.2.4/templates/Brazilian_Portuguese-invoice.html
tags/1.2.4/templates/Brazilian_Portuguese-invoice.tex
tags/1.2.4/templates/Brazilian_Portuguese-logo.eps
tags/1.2.4/templates/Brazilian_Portuguese-logo.png
tags/1.2.4/templates/Brazilian_Portuguese-packing_list.html
tags/1.2.4/templates/Brazilian_Portuguese-packing_list.tex
tags/1.2.4/templates/Brazilian_Portuguese-pick_list.html
tags/1.2.4/templates/Brazilian_Portuguese-pick_list.tex
tags/1.2.4/templates/Brazilian_Portuguese-pos_invoice.txt
tags/1.2.4/templates/Brazilian_Portuguese-purchase_order.html
tags/1.2.4/templates/Brazilian_Portuguese-purchase_order.tex
tags/1.2.4/templates/Brazilian_Portuguese-receipt.tex
tags/1.2.4/templates/Brazilian_Portuguese-request_quotation.html
tags/1.2.4/templates/Brazilian_Portuguese-request_quotation.tex
tags/1.2.4/templates/Brazilian_Portuguese-sales_order.html
tags/1.2.4/templates/Brazilian_Portuguese-sales_order.tex
tags/1.2.4/templates/Brazilian_Portuguese-sales_quotation.html
tags/1.2.4/templates/Brazilian_Portuguese-sales_quotation.tex
tags/1.2.4/templates/Brazilian_Portuguese-statement.html
tags/1.2.4/templates/Brazilian_Portuguese-statement.tex
tags/1.2.4/templates/Brazilian_Portuguese-timecard.html
tags/1.2.4/templates/Brazilian_Portuguese-timecard.tex
tags/1.2.4/templates/Brazilian_Portuguese-work_order.html
tags/1.2.4/templates/Brazilian_Portuguese-work_order.tex
tags/1.2.4/templates/Danish-ap_transaction.html
tags/1.2.4/templates/Danish-ap_transaction.tex
tags/1.2.4/templates/Danish-ar_transaction.html
tags/1.2.4/templates/Danish-ar_transaction.tex
tags/1.2.4/templates/Danish-balance_sheet.html
tags/1.2.4/templates/Danish-bin_list.html
tags/1.2.4/templates/Danish-bin_list.tex
tags/1.2.4/templates/Danish-check.tex
tags/1.2.4/templates/Danish-income_statement.html
tags/1.2.4/templates/Danish-invoice.html
tags/1.2.4/templates/Danish-invoice.tex
tags/1.2.4/templates/Danish-logo.eps
tags/1.2.4/templates/Danish-logo.png
tags/1.2.4/templates/Danish-packing_list.html
tags/1.2.4/templates/Danish-packing_list.tex
tags/1.2.4/templates/Danish-pick_list.html
tags/1.2.4/templates/Danish-pick_list.tex
tags/1.2.4/templates/Danish-pos_invoice.txt
tags/1.2.4/templates/Danish-purchase_order.html
tags/1.2.4/templates/Danish-purchase_order.tex
tags/1.2.4/templates/Danish-receipt.tex
tags/1.2.4/templates/Danish-request_quotation.html
tags/1.2.4/templates/Danish-request_quotation.tex
tags/1.2.4/templates/Danish-sales_order.html
tags/1.2.4/templates/Danish-sales_order.tex
tags/1.2.4/templates/Danish-sales_quotation.html
tags/1.2.4/templates/Danish-sales_quotation.tex
tags/1.2.4/templates/Danish-statement.html
tags/1.2.4/templates/Danish-statement.tex
tags/1.2.4/templates/Danish-timecard.html
tags/1.2.4/templates/Danish-timecard.tex
tags/1.2.4/templates/Danish-work_order.html
tags/1.2.4/templates/Danish-work_order.tex
tags/1.2.4/templates/Default-ap_transaction.html
tags/1.2.4/templates/Default-ap_transaction.tex
tags/1.2.4/templates/Default-ar_transaction.html
tags/1.2.4/templates/Default-ar_transaction.tex
tags/1.2.4/templates/Default-balance_sheet.html
tags/1.2.4/templates/Default-bin_list.html
tags/1.2.4/templates/Default-bin_list.tex
tags/1.2.4/templates/Default-check.tex
tags/1.2.4/templates/Default-income_statement.html
tags/1.2.4/templates/Default-invoice.html
tags/1.2.4/templates/Default-invoice.tex
tags/1.2.4/templates/Default-letterhead.html
tags/1.2.4/templates/Default-letterhead.tex
tags/1.2.4/templates/Default-logo.eps
tags/1.2.4/templates/Default-logo.png
tags/1.2.4/templates/Default-packing_list.html
tags/1.2.4/templates/Default-packing_list.tex
tags/1.2.4/templates/Default-pick_list.html
tags/1.2.4/templates/Default-pick_list.tex
tags/1.2.4/templates/Default-pos_invoice.txt
tags/1.2.4/templates/Default-purchase_order.html
tags/1.2.4/templates/Default-purchase_order.tex
tags/1.2.4/templates/Default-receipt.tex
tags/1.2.4/templates/Default-request_quotation.html
tags/1.2.4/templates/Default-request_quotation.tex
tags/1.2.4/templates/Default-sales_order.html
tags/1.2.4/templates/Default-sales_order.tex
tags/1.2.4/templates/Default-sales_quotation.html
tags/1.2.4/templates/Default-sales_quotation.tex
tags/1.2.4/templates/Default-statement.html
tags/1.2.4/templates/Default-statement.tex
tags/1.2.4/templates/Default-timecard.html
tags/1.2.4/templates/Default-timecard.tex
tags/1.2.4/templates/Default-work_order.html
tags/1.2.4/templates/Default-work_order.tex
tags/1.2.4/templates/Dutch-ap_transaction.html
tags/1.2.4/templates/Dutch-ap_transaction.tex
tags/1.2.4/templates/Dutch-ar_transaction.html
tags/1.2.4/templates/Dutch-ar_transaction.tex
tags/1.2.4/templates/Dutch-balance_sheet.html
tags/1.2.4/templates/Dutch-bin_list.html
tags/1.2.4/templates/Dutch-bin_list.tex
tags/1.2.4/templates/Dutch-check.tex
tags/1.2.4/templates/Dutch-income_statement.html
tags/1.2.4/templates/Dutch-invoice.html
tags/1.2.4/templates/Dutch-invoice.tex
tags/1.2.4/templates/Dutch-logo.eps
tags/1.2.4/templates/Dutch-logo.png
tags/1.2.4/templates/Dutch-packing_list.html
tags/1.2.4/templates/Dutch-packing_list.tex
tags/1.2.4/templates/Dutch-pick_list.html
tags/1.2.4/templates/Dutch-pick_list.tex
tags/1.2.4/templates/Dutch-pos_invoice.txt
tags/1.2.4/templates/Dutch-purchase_order.html
tags/1.2.4/templates/Dutch-purchase_order.tex
tags/1.2.4/templates/Dutch-receipt.tex
tags/1.2.4/templates/Dutch-request_quotation.html
tags/1.2.4/templates/Dutch-request_quotation.tex
tags/1.2.4/templates/Dutch-sales_order.html
tags/1.2.4/templates/Dutch-sales_order.tex
tags/1.2.4/templates/Dutch-sales_quotation.html
tags/1.2.4/templates/Dutch-sales_quotation.tex
tags/1.2.4/templates/Dutch-statement.html
tags/1.2.4/templates/Dutch-statement.tex
tags/1.2.4/templates/Dutch-timecard.html
tags/1.2.4/templates/Dutch-timecard.tex
tags/1.2.4/templates/Dutch-work_order.html
tags/1.2.4/templates/Dutch-work_order.tex
tags/1.2.4/templates/Estonian-ap_transaction.html
tags/1.2.4/templates/Estonian-ap_transaction.tex
tags/1.2.4/templates/Estonian-ar_transaction.html
tags/1.2.4/templates/Estonian-ar_transaction.tex
tags/1.2.4/templates/Estonian-balance_sheet.html
tags/1.2.4/templates/Estonian-bin_list.html
tags/1.2.4/templates/Estonian-bin_list.tex
tags/1.2.4/templates/Estonian-check.tex
tags/1.2.4/templates/Estonian-income_statement.html
tags/1.2.4/templates/Estonian-invoice.html
tags/1.2.4/templates/Estonian-invoice.tex
tags/1.2.4/templates/Estonian-letterhead.html
tags/1.2.4/templates/Estonian-letterhead.tex
tags/1.2.4/templates/Estonian-logo.eps
tags/1.2.4/templates/Estonian-logo.png
tags/1.2.4/templates/Estonian-packing_list.html
tags/1.2.4/templates/Estonian-packing_list.tex
tags/1.2.4/templates/Estonian-pick_list.html
tags/1.2.4/templates/Estonian-pick_list.tex
tags/1.2.4/templates/Estonian-pos_invoice.txt
tags/1.2.4/templates/Estonian-purchase_order.html
tags/1.2.4/templates/Estonian-purchase_order.tex
tags/1.2.4/templates/Estonian-receipt.tex
tags/1.2.4/templates/Estonian-request_quotation.html
tags/1.2.4/templates/Estonian-request_quotation.tex
tags/1.2.4/templates/Estonian-sales_order.html
tags/1.2.4/templates/Estonian-sales_order.tex
tags/1.2.4/templates/Estonian-sales_quotation.html
tags/1.2.4/templates/Estonian-sales_quotation.tex
tags/1.2.4/templates/Estonian-statement.html
tags/1.2.4/templates/Estonian-statement.tex
tags/1.2.4/templates/Estonian-timecard.html
tags/1.2.4/templates/Estonian-timecard.tex
tags/1.2.4/templates/Estonian-work_order.html
tags/1.2.4/templates/Estonian-work_order.tex
tags/1.2.4/templates/Estonian_UTF8-ap_transaction.html
tags/1.2.4/templates/Estonian_UTF8-ap_transaction.tex
tags/1.2.4/templates/Estonian_UTF8-ar_transaction.html
tags/1.2.4/templates/Estonian_UTF8-ar_transaction.tex
tags/1.2.4/templates/Estonian_UTF8-balance_sheet.html
tags/1.2.4/templates/Estonian_UTF8-bin_list.html
tags/1.2.4/templates/Estonian_UTF8-bin_list.tex
tags/1.2.4/templates/Estonian_UTF8-check.tex
tags/1.2.4/templates/Estonian_UTF8-income_statement.html
tags/1.2.4/templates/Estonian_UTF8-invoice.html
tags/1.2.4/templates/Estonian_UTF8-invoice.tex
tags/1.2.4/templates/Estonian_UTF8-letterhead.html
tags/1.2.4/templates/Estonian_UTF8-letterhead.tex
tags/1.2.4/templates/Estonian_UTF8-logo.eps
tags/1.2.4/templates/Estonian_UTF8-logo.png
tags/1.2.4/templates/Estonian_UTF8-packing_list.html
tags/1.2.4/templates/Estonian_UTF8-packing_list.tex
tags/1.2.4/templates/Estonian_UTF8-pick_list.html
tags/1.2.4/templates/Estonian_UTF8-pick_list.tex
tags/1.2.4/templates/Estonian_UTF8-pos_invoice.txt
tags/1.2.4/templates/Estonian_UTF8-purchase_order.html
tags/1.2.4/templates/Estonian_UTF8-purchase_order.tex
tags/1.2.4/templates/Estonian_UTF8-receipt.tex
tags/1.2.4/templates/Estonian_UTF8-request_quotation.html
tags/1.2.4/templates/Estonian_UTF8-request_quotation.tex
tags/1.2.4/templates/Estonian_UTF8-sales_order.html
tags/1.2.4/templates/Estonian_UTF8-sales_order.tex
tags/1.2.4/templates/Estonian_UTF8-sales_quotation.html
tags/1.2.4/templates/Estonian_UTF8-sales_quotation.tex
tags/1.2.4/templates/Estonian_UTF8-statement.html
tags/1.2.4/templates/Estonian_UTF8-statement.tex
tags/1.2.4/templates/Estonian_UTF8-timecard.html
tags/1.2.4/templates/Estonian_UTF8-timecard.tex
tags/1.2.4/templates/Estonian_UTF8-work_order.html
tags/1.2.4/templates/Estonian_UTF8-work_order.tex
tags/1.2.4/templates/French-ap_transaction.html
tags/1.2.4/templates/French-ap_transaction.tex
tags/1.2.4/templates/French-ar_transaction.html
tags/1.2.4/templates/French-ar_transaction.tex
tags/1.2.4/templates/French-balance_sheet.html
tags/1.2.4/templates/French-bin_list.html
tags/1.2.4/templates/French-bin_list.tex
tags/1.2.4/templates/French-check.tex
tags/1.2.4/templates/French-income_statement.html
tags/1.2.4/templates/French-invoice.html
tags/1.2.4/templates/French-invoice.tex
tags/1.2.4/templates/French-logo.eps
tags/1.2.4/templates/French-logo.png
tags/1.2.4/templates/French-packing_list.html
tags/1.2.4/templates/French-packing_list.tex
tags/1.2.4/templates/French-pick_list.html
tags/1.2.4/templates/French-pick_list.tex
tags/1.2.4/templates/French-pos_invoice.txt
tags/1.2.4/templates/French-purchase_order.html
tags/1.2.4/templates/French-purchase_order.tex
tags/1.2.4/templates/French-receipt.tex
tags/1.2.4/templates/French-request_quotation.html
tags/1.2.4/templates/French-request_quotation.tex
tags/1.2.4/templates/French-sales_order.html
tags/1.2.4/templates/French-sales_order.tex
tags/1.2.4/templates/French-sales_quotation.html
tags/1.2.4/templates/French-sales_quotation.tex
tags/1.2.4/templates/French-statement.html
tags/1.2.4/templates/French-statement.tex
tags/1.2.4/templates/French-timecard.html
tags/1.2.4/templates/French-timecard.tex
tags/1.2.4/templates/French-work_order.html
tags/1.2.4/templates/French-work_order.tex
tags/1.2.4/templates/German-ap_transaction.html
tags/1.2.4/templates/German-ap_transaction.tex
tags/1.2.4/templates/German-ar_transaction.html
tags/1.2.4/templates/German-ar_transaction.tex
tags/1.2.4/templates/German-balance_sheet.html
tags/1.2.4/templates/German-bin_list.html
tags/1.2.4/templates/German-bin_list.tex
tags/1.2.4/templates/German-check.tex
tags/1.2.4/templates/German-income_statement.html
tags/1.2.4/templates/German-invoice.html
tags/1.2.4/templates/German-invoice.tex
tags/1.2.4/templates/German-logo.eps
tags/1.2.4/templates/German-logo.png
tags/1.2.4/templates/German-packing_list.html
tags/1.2.4/templates/German-packing_list.tex
tags/1.2.4/templates/German-pick_list.html
tags/1.2.4/templates/German-pick_list.tex
tags/1.2.4/templates/German-pos_invoice.txt
tags/1.2.4/templates/German-purchase_order.html
tags/1.2.4/templates/German-purchase_order.tex
tags/1.2.4/templates/German-receipt.tex
tags/1.2.4/templates/German-request_quotation.html
tags/1.2.4/templates/German-request_quotation.tex
tags/1.2.4/templates/German-sales_order.html
tags/1.2.4/templates/German-sales_order.tex
tags/1.2.4/templates/German-sales_quotation.html
tags/1.2.4/templates/German-sales_quotation.tex
tags/1.2.4/templates/German-statement.html
tags/1.2.4/templates/German-statement.tex
tags/1.2.4/templates/German-timecard.html
tags/1.2.4/templates/German-timecard.tex
tags/1.2.4/templates/German-work_order.html
tags/1.2.4/templates/German-work_order.tex
tags/1.2.4/templates/Hungarian-ap_transaction.html
tags/1.2.4/templates/Hungarian-ap_transaction.tex
tags/1.2.4/templates/Hungarian-ar_transaction.html
tags/1.2.4/templates/Hungarian-ar_transaction.tex
tags/1.2.4/templates/Hungarian-balance_sheet.html
tags/1.2.4/templates/Hungarian-bin_list.html
tags/1.2.4/templates/Hungarian-bin_list.tex
tags/1.2.4/templates/Hungarian-check.tex
tags/1.2.4/templates/Hungarian-income_statement.html
tags/1.2.4/templates/Hungarian-invoice.html
tags/1.2.4/templates/Hungarian-invoice.tex
tags/1.2.4/templates/Hungarian-logo.eps
tags/1.2.4/templates/Hungarian-logo.png
tags/1.2.4/templates/Hungarian-packing_list.html
tags/1.2.4/templates/Hungarian-packing_list.tex
tags/1.2.4/templates/Hungarian-pick_list.html
tags/1.2.4/templates/Hungarian-pick_list.tex
tags/1.2.4/templates/Hungarian-pos_invoice.txt
tags/1.2.4/templates/Hungarian-purchase_order.html
tags/1.2.4/templates/Hungarian-purchase_order.tex
tags/1.2.4/templates/Hungarian-receipt.tex
tags/1.2.4/templates/Hungarian-request_quotation.html
tags/1.2.4/templates/Hungarian-request_quotation.tex
tags/1.2.4/templates/Hungarian-sales_order.html
tags/1.2.4/templates/Hungarian-sales_order.tex
tags/1.2.4/templates/Hungarian-sales_quotation.html
tags/1.2.4/templates/Hungarian-sales_quotation.tex
tags/1.2.4/templates/Hungarian-statement.html
tags/1.2.4/templates/Hungarian-statement.tex
tags/1.2.4/templates/Hungarian-timecard.html
tags/1.2.4/templates/Hungarian-timecard.tex
tags/1.2.4/templates/Hungarian-work_order.html
tags/1.2.4/templates/Hungarian-work_order.tex
tags/1.2.4/templates/Italian-ap_transaction.html
tags/1.2.4/templates/Italian-ap_transaction.tex
tags/1.2.4/templates/Italian-ar_transaction.html
tags/1.2.4/templates/Italian-ar_transaction.tex
tags/1.2.4/templates/Italian-balance_sheet.html
tags/1.2.4/templates/Italian-bin_list.html
tags/1.2.4/templates/Italian-bin_list.tex
tags/1.2.4/templates/Italian-check.tex
tags/1.2.4/templates/Italian-income_statement.html
tags/1.2.4/templates/Italian-invoice.html
tags/1.2.4/templates/Italian-invoice.tex
tags/1.2.4/templates/Italian-logo.eps
tags/1.2.4/templates/Italian-logo.png
tags/1.2.4/templates/Italian-packing_list.html
tags/1.2.4/templates/Italian-packing_list.tex
tags/1.2.4/templates/Italian-pick_list.html
tags/1.2.4/templates/Italian-pick_list.tex
tags/1.2.4/templates/Italian-pos_invoice.txt
tags/1.2.4/templates/Italian-purchase_order.html
tags/1.2.4/templates/Italian-purchase_order.tex
tags/1.2.4/templates/Italian-receipt.tex
tags/1.2.4/templates/Italian-request_quotation.html
tags/1.2.4/templates/Italian-request_quotation.tex
tags/1.2.4/templates/Italian-sales_order.html
tags/1.2.4/templates/Italian-sales_order.tex
tags/1.2.4/templates/Italian-sales_quotation.html
tags/1.2.4/templates/Italian-sales_quotation.tex
tags/1.2.4/templates/Italian-statement.html
tags/1.2.4/templates/Italian-statement.tex
tags/1.2.4/templates/Italian-timecard.html
tags/1.2.4/templates/Italian-timecard.tex
tags/1.2.4/templates/Italian-work_order.html
tags/1.2.4/templates/Italian-work_order.tex
tags/1.2.4/templates/Norwegian-ap_transaction.html
tags/1.2.4/templates/Norwegian-ap_transaction.tex
tags/1.2.4/templates/Norwegian-ar_transaction.html
tags/1.2.4/templates/Norwegian-ar_transaction.tex
tags/1.2.4/templates/Norwegian-balance_sheet.html
tags/1.2.4/templates/Norwegian-bin_list.html
tags/1.2.4/templates/Norwegian-bin_list.tex
tags/1.2.4/templates/Norwegian-check.tex
tags/1.2.4/templates/Norwegian-income_statement.html
tags/1.2.4/templates/Norwegian-invoice.html
tags/1.2.4/templates/Norwegian-invoice.tex
tags/1.2.4/templates/Norwegian-logo.eps
tags/1.2.4/templates/Norwegian-logo.png
tags/1.2.4/templates/Norwegian-packing_list.html
tags/1.2.4/templates/Norwegian-packing_list.tex
tags/1.2.4/templates/Norwegian-pick_list.html
tags/1.2.4/templates/Norwegian-pick_list.tex
tags/1.2.4/templates/Norwegian-pos_invoice.txt
tags/1.2.4/templates/Norwegian-purchase_order.html
tags/1.2.4/templates/Norwegian-purchase_order.tex
tags/1.2.4/templates/Norwegian-receipt.tex
tags/1.2.4/templates/Norwegian-request_quotation.html
tags/1.2.4/templates/Norwegian-request_quotation.tex
tags/1.2.4/templates/Norwegian-sales_order.html
tags/1.2.4/templates/Norwegian-sales_order.tex
tags/1.2.4/templates/Norwegian-sales_quotation.html
tags/1.2.4/templates/Norwegian-sales_quotation.tex
tags/1.2.4/templates/Norwegian-statement.html
tags/1.2.4/templates/Norwegian-statement.tex
tags/1.2.4/templates/Norwegian-timecard.html
tags/1.2.4/templates/Norwegian-timecard.tex
tags/1.2.4/templates/Norwegian-work_order.html
tags/1.2.4/templates/Norwegian-work_order.tex
tags/1.2.4/templates/Russian-ap_transaction.html
tags/1.2.4/templates/Russian-ap_transaction.tex
tags/1.2.4/templates/Russian-ar_transaction.html
tags/1.2.4/templates/Russian-ar_transaction.tex
tags/1.2.4/templates/Russian-balance_sheet.html
tags/1.2.4/templates/Russian-bin_list.html
tags/1.2.4/templates/Russian-bin_list.tex
tags/1.2.4/templates/Russian-check.tex
tags/1.2.4/templates/Russian-income_statement.html
tags/1.2.4/templates/Russian-invoice.html
tags/1.2.4/templates/Russian-invoice.tex
tags/1.2.4/templates/Russian-logo.eps
tags/1.2.4/templates/Russian-logo.png
tags/1.2.4/templates/Russian-packing_list.html
tags/1.2.4/templates/Russian-packing_list.tex
tags/1.2.4/templates/Russian-pick_list.html
tags/1.2.4/templates/Russian-pick_list.tex
tags/1.2.4/templates/Russian-pos_invoice.txt
tags/1.2.4/templates/Russian-purchase_order.html
tags/1.2.4/templates/Russian-purchase_order.tex
tags/1.2.4/templates/Russian-receipt.tex
tags/1.2.4/templates/Russian-request_quotation.html
tags/1.2.4/templates/Russian-request_quotation.tex
tags/1.2.4/templates/Russian-sales_order.html
tags/1.2.4/templates/Russian-sales_order.tex
tags/1.2.4/templates/Russian-sales_quotation.html
tags/1.2.4/templates/Russian-sales_quotation.tex
tags/1.2.4/templates/Russian-statement.html
tags/1.2.4/templates/Russian-statement.tex
tags/1.2.4/templates/Russian-timecard.html
tags/1.2.4/templates/Russian-timecard.tex
tags/1.2.4/templates/Russian-work_order.html
tags/1.2.4/templates/Russian-work_order.tex
tags/1.2.4/templates/Service-ap_transaction.html
tags/1.2.4/templates/Service-ap_transaction.tex
tags/1.2.4/templates/Service-ar_transaction.html
tags/1.2.4/templates/Service-ar_transaction.tex
tags/1.2.4/templates/Service-balance_sheet.html
tags/1.2.4/templates/Service-bin_list.html
tags/1.2.4/templates/Service-bin_list.tex
tags/1.2.4/templates/Service-check.tex
tags/1.2.4/templates/Service-income_statement.html
tags/1.2.4/templates/Service-invoice.html
tags/1.2.4/templates/Service-invoice.tex
tags/1.2.4/templates/Service-logo.eps
tags/1.2.4/templates/Service-logo.png
tags/1.2.4/templates/Service-packing_list.html
tags/1.2.4/templates/Service-packing_list.tex
tags/1.2.4/templates/Service-pick_list.html
tags/1.2.4/templates/Service-pick_list.tex
tags/1.2.4/templates/Service-pos_invoice.txt
tags/1.2.4/templates/Service-purchase_order.html
tags/1.2.4/templates/Service-purchase_order.tex
tags/1.2.4/templates/Service-receipt.tex
tags/1.2.4/templates/Service-request_quotation.html
tags/1.2.4/templates/Service-request_quotation.tex
tags/1.2.4/templates/Service-sales_order.html
tags/1.2.4/templates/Service-sales_order.tex
tags/1.2.4/templates/Service-sales_quotation.html
tags/1.2.4/templates/Service-sales_quotation.tex
tags/1.2.4/templates/Service-statement.html
tags/1.2.4/templates/Service-statement.tex
tags/1.2.4/templates/Service-timecard.html
tags/1.2.4/templates/Service-timecard.tex
tags/1.2.4/templates/Service-work_order.html
tags/1.2.4/templates/Service-work_order.tex
tags/1.2.4/templates/Spanish_A4-ap_transaction.html
tags/1.2.4/templates/Spanish_A4-ap_transaction.tex
tags/1.2.4/templates/Spanish_A4-ar_transaction.html
tags/1.2.4/templates/Spanish_A4-ar_transaction.tex
tags/1.2.4/templates/Spanish_A4-balance_sheet.html
tags/1.2.4/templates/Spanish_A4-bin_list.html
tags/1.2.4/templates/Spanish_A4-bin_list.tex
tags/1.2.4/templates/Spanish_A4-check.tex
tags/1.2.4/templates/Spanish_A4-income_statement.html
tags/1.2.4/templates/Spanish_A4-invoice.html
tags/1.2.4/templates/Spanish_A4-invoice.tex
tags/1.2.4/templates/Spanish_A4-logo.eps
tags/1.2.4/templates/Spanish_A4-logo.png
tags/1.2.4/templates/Spanish_A4-packing_list.html
tags/1.2.4/templates/Spanish_A4-packing_list.tex
tags/1.2.4/templates/Spanish_A4-pick_list.html
tags/1.2.4/templates/Spanish_A4-pick_list.tex
tags/1.2.4/templates/Spanish_A4-pos_invoice.txt
tags/1.2.4/templates/Spanish_A4-purchase_order.html
tags/1.2.4/templates/Spanish_A4-purchase_order.tex
tags/1.2.4/templates/Spanish_A4-receipt.tex
tags/1.2.4/templates/Spanish_A4-request_quotation.html
tags/1.2.4/templates/Spanish_A4-request_quotation.tex
tags/1.2.4/templates/Spanish_A4-sales_order.html
tags/1.2.4/templates/Spanish_A4-sales_order.tex
tags/1.2.4/templates/Spanish_A4-sales_quotation.html
tags/1.2.4/templates/Spanish_A4-sales_quotation.tex
tags/1.2.4/templates/Spanish_A4-statement.html
tags/1.2.4/templates/Spanish_A4-statement.tex
tags/1.2.4/templates/Spanish_A4-timecard.html
tags/1.2.4/templates/Spanish_A4-timecard.tex
tags/1.2.4/templates/Spanish_A4-work_order.html
tags/1.2.4/templates/Spanish_A4-work_order.tex
tags/1.2.4/templates/Spanish_Letter-ap_transaction.html
tags/1.2.4/templates/Spanish_Letter-ap_transaction.tex
tags/1.2.4/templates/Spanish_Letter-ar_transaction.html
tags/1.2.4/templates/Spanish_Letter-ar_transaction.tex
tags/1.2.4/templates/Spanish_Letter-balance_sheet.html
tags/1.2.4/templates/Spanish_Letter-bin_list.html
tags/1.2.4/templates/Spanish_Letter-bin_list.tex
tags/1.2.4/templates/Spanish_Letter-check.tex
tags/1.2.4/templates/Spanish_Letter-income_statement.html
tags/1.2.4/templates/Spanish_Letter-invoice.html
tags/1.2.4/templates/Spanish_Letter-invoice.tex
tags/1.2.4/templates/Spanish_Letter-logo.eps
tags/1.2.4/templates/Spanish_Letter-logo.png
tags/1.2.4/templates/Spanish_Letter-packing_list.html
tags/1.2.4/templates/Spanish_Letter-packing_list.tex
tags/1.2.4/templates/Spanish_Letter-pick_list.html
tags/1.2.4/templates/Spanish_Letter-pick_list.tex
tags/1.2.4/templates/Spanish_Letter-pos_invoice.txt
tags/1.2.4/templates/Spanish_Letter-purchase_order.html
tags/1.2.4/templates/Spanish_Letter-purchase_order.tex
tags/1.2.4/templates/Spanish_Letter-receipt.tex
tags/1.2.4/templates/Spanish_Letter-request_quotation.html
tags/1.2.4/templates/Spanish_Letter-request_quotation.tex
tags/1.2.4/templates/Spanish_Letter-sales_order.html
tags/1.2.4/templates/Spanish_Letter-sales_order.tex
tags/1.2.4/templates/Spanish_Letter-sales_quotation.html
tags/1.2.4/templates/Spanish_Letter-sales_quotation.tex
tags/1.2.4/templates/Spanish_Letter-statement.html
tags/1.2.4/templates/Spanish_Letter-statement.tex
tags/1.2.4/templates/Spanish_Letter-timecard.html
tags/1.2.4/templates/Spanish_Letter-timecard.tex
tags/1.2.4/templates/Spanish_Letter-work_order.html
tags/1.2.4/templates/Spanish_Letter-work_order.tex
tags/1.2.4/templates/Swedish-ap_transaction.html
tags/1.2.4/templates/Swedish-ap_transaction.tex
tags/1.2.4/templates/Swedish-ar_transaction.html
tags/1.2.4/templates/Swedish-ar_transaction.tex
tags/1.2.4/templates/Swedish-balance_sheet.html
tags/1.2.4/templates/Swedish-bin_list.html
tags/1.2.4/templates/Swedish-bin_list.tex
tags/1.2.4/templates/Swedish-check.tex
tags/1.2.4/templates/Swedish-income_statement.html
tags/1.2.4/templates/Swedish-invoice.html
tags/1.2.4/templates/Swedish-invoice.tex
tags/1.2.4/templates/Swedish-logo.eps
tags/1.2.4/templates/Swedish-logo.png
tags/1.2.4/templates/Swedish-packing_list.html
tags/1.2.4/templates/Swedish-packing_list.tex
tags/1.2.4/templates/Swedish-pick_list.html
tags/1.2.4/templates/Swedish-pick_list.tex
tags/1.2.4/templates/Swedish-pos_invoice.txt
tags/1.2.4/templates/Swedish-purchase_order.html
tags/1.2.4/templates/Swedish-purchase_order.tex
tags/1.2.4/templates/Swedish-receipt.tex
tags/1.2.4/templates/Swedish-request_quotation.html
tags/1.2.4/templates/Swedish-request_quotation.tex
tags/1.2.4/templates/Swedish-sales_order.html
tags/1.2.4/templates/Swedish-sales_order.tex
tags/1.2.4/templates/Swedish-sales_quotation.html
tags/1.2.4/templates/Swedish-sales_quotation.tex
tags/1.2.4/templates/Swedish-statement.html
tags/1.2.4/templates/Swedish-statement.tex
tags/1.2.4/templates/Swedish-timecard.html
tags/1.2.4/templates/Swedish-timecard.tex
tags/1.2.4/templates/Swedish-work_order.html
tags/1.2.4/templates/Swedish-work_order.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-ap_transaction.html
tags/1.2.4/templates/Traditional_Chinese_Big5-ap_transaction.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-ar_transaction.html
tags/1.2.4/templates/Traditional_Chinese_Big5-ar_transaction.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-balance_sheet.html
tags/1.2.4/templates/Traditional_Chinese_Big5-bin_list.html
tags/1.2.4/templates/Traditional_Chinese_Big5-bin_list.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-check.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-income_statement.html
tags/1.2.4/templates/Traditional_Chinese_Big5-invoice.html
tags/1.2.4/templates/Traditional_Chinese_Big5-invoice.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-letterhead.html
tags/1.2.4/templates/Traditional_Chinese_Big5-letterhead.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-logo.eps
tags/1.2.4/templates/Traditional_Chinese_Big5-logo.png
tags/1.2.4/templates/Traditional_Chinese_Big5-packing_list.html
tags/1.2.4/templates/Traditional_Chinese_Big5-packing_list.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-pick_list.html
tags/1.2.4/templates/Traditional_Chinese_Big5-pick_list.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-pos_invoice.txt
tags/1.2.4/templates/Traditional_Chinese_Big5-purchase_order.html
tags/1.2.4/templates/Traditional_Chinese_Big5-purchase_order.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-receipt.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-request_quotation.html
tags/1.2.4/templates/Traditional_Chinese_Big5-request_quotation.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-sales_order.html
tags/1.2.4/templates/Traditional_Chinese_Big5-sales_order.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-sales_quotation.html
tags/1.2.4/templates/Traditional_Chinese_Big5-sales_quotation.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-statement.html
tags/1.2.4/templates/Traditional_Chinese_Big5-statement.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-timecard.html
tags/1.2.4/templates/Traditional_Chinese_Big5-timecard.tex
tags/1.2.4/templates/Traditional_Chinese_Big5-work_order.html
tags/1.2.4/templates/Traditional_Chinese_Big5-work_order.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-ap_transaction.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-ap_transaction.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-ar_transaction.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-ar_transaction.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-balance_sheet.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-bin_list.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-bin_list.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-check.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-income_statement.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-invoice.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-invoice.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-letterhead.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-letterhead.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-logo.eps
tags/1.2.4/templates/Traditional_Chinese_UTF8-logo.png
tags/1.2.4/templates/Traditional_Chinese_UTF8-packing_list.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-packing_list.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-pick_list.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-pick_list.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-pos_invoice.txt
tags/1.2.4/templates/Traditional_Chinese_UTF8-purchase_order.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-purchase_order.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-receipt.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-request_quotation.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-request_quotation.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-sales_order.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-sales_order.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-sales_quotation.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-sales_quotation.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-statement.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-statement.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-timecard.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-timecard.tex
tags/1.2.4/templates/Traditional_Chinese_UTF8-work_order.html
tags/1.2.4/templates/Traditional_Chinese_UTF8-work_order.tex
tags/1.2.4/templates/demo/
tags/1.2.4/templates/demo/ap_transaction.html
tags/1.2.4/templates/demo/ap_transaction.tex
tags/1.2.4/templates/demo/ar_transaction.html
tags/1.2.4/templates/demo/ar_transaction.tex
tags/1.2.4/templates/demo/balance_sheet.html
tags/1.2.4/templates/demo/bin_list.html
tags/1.2.4/templates/demo/bin_list.tex
tags/1.2.4/templates/demo/check.tex
tags/1.2.4/templates/demo/income_statement.html
tags/1.2.4/templates/demo/invoice.html
tags/1.2.4/templates/demo/invoice.tex
tags/1.2.4/templates/demo/letterhead.html
tags/1.2.4/templates/demo/letterhead.tex
tags/1.2.4/templates/demo/logo.eps
tags/1.2.4/templates/demo/logo.png
tags/1.2.4/templates/demo/packing_list.html
tags/1.2.4/templates/demo/packing_list.tex
tags/1.2.4/templates/demo/pick_list.html
tags/1.2.4/templates/demo/pick_list.tex
tags/1.2.4/templates/demo/pos_invoice.txt
tags/1.2.4/templates/demo/purchase_order.html
tags/1.2.4/templates/demo/purchase_order.tex
tags/1.2.4/templates/demo/receipt.tex
tags/1.2.4/templates/demo/request_quotation.html
tags/1.2.4/templates/demo/request_quotation.tex
tags/1.2.4/templates/demo/sales_order.html
tags/1.2.4/templates/demo/sales_order.tex
tags/1.2.4/templates/demo/sales_quotation.html
tags/1.2.4/templates/demo/sales_quotation.tex
tags/1.2.4/templates/demo/statement.html
tags/1.2.4/templates/demo/statement.tex
tags/1.2.4/templates/demo/timecard.html
tags/1.2.4/templates/demo/timecard.tex
tags/1.2.4/templates/demo/work_order.html
tags/1.2.4/templates/demo/work_order.tex
tags/1.2.4/upgrade-templates.pl
tags/1.2.4/utils/
tags/1.2.4/utils/cli/
tags/1.2.4/utils/cli/ledgersmb_cli.pl
tags/1.2.4/utils/cli/sample.lsmb
tags/1.2.4/utils/devel/
tags/1.2.4/utils/devel/find-use
tags/1.2.4/utils/fixme/
tags/1.2.4/utils/fixme/README
tags/1.2.4/utils/fixme/fixme.pgsql
tags/1.2.4/utils/notify_short/
tags/1.2.4/utils/notify_short/GPL.txt
tags/1.2.4/utils/notify_short/README
tags/1.2.4/utils/notify_short/config.pl
tags/1.2.4/utils/notify_short/listener.pl
tags/1.2.4/utils/pos/
tags/1.2.4/utils/pos/directnet.pl
tags/1.2.4/utils/pos/pos-hardware-client-startup-script
tags/1.2.4/winprint.bat
Added: tags/1.2.4/BUGS
===================================================================
--- tags/1.2.4/BUGS (rev 0)
+++ tags/1.2.4/BUGS 2007-04-24 23:35:45 UTC (rev 1099)
@@ -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.4/Build.PL
===================================================================
--- tags/1.2.4/Build.PL (rev 0)
+++ tags/1.2.4/Build.PL 2007-04-24 23:35:45 UTC (rev 1099)
@@ -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.48',
+ '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,
+ 'Test::More' => 0,
+ },
+ recommends => {
+ 'HTML::LinkExtor' => 0,
+ 'FileHandle' => 0,
+ 'Getopt::Long' => 0,
+ 'Net::TCLink' => 0,
+ 'Parse::RecDescent' => 0,
+ },
+);
+
+$build->create_build_script;
Added: tags/1.2.4/COMPATABILITY
===================================================================
--- tags/1.2.4/COMPATABILITY (rev 0)
+++ tags/1.2.4/COMPATABILITY 2007-04-24 23:35:45 UTC (rev 1099)
@@ -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.4/CONTRIBUTORS
===================================================================
--- tags/1.2.4/CONTRIBUTORS (rev 0)
+++ tags/1.2.4/CONTRIBUTORS 2007-04-24 23:35:45 UTC (rev 1099)
@@ -0,0 +1,70 @@
+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.
+
+Matt S Trout, <mst @ shadowcatsystems.co.uk> CPAN: MSTROUT,
+IRC: mst#irc.perl.org contributed the initial Makefile.PL
+
+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.4/COPYRIGHT
===================================================================
--- tags/1.2.4/COPYRIGHT (rev 0)
+++ tags/1.2.4/COPYRIGHT 2007-04-24 23:35:45 UTC (rev 1099)
@@ -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.4/Changelog
===================================================================
--- tags/1.2.4/Changelog (rev 0)
+++ tags/1.2.4/Changelog 2007-04-24 23:35:45 UTC (rev 1099)
@@ -0,0 +1,148 @@
+Changelog for 1.2.4
+* Fixed internal functions avgcost() and lastcost() to not use float (Joshua D)
+* Fixed error posting vendor invoice with fraction costs. (Chris M)
+* Fixed sales tax display issue on invoice/order entry screen (Chris T)
+* Fixed inconsistant error when setting to recur 0 times (Chris T)
+* Fixed Access Denied when sending email (CHris T)
+* Added Makefile.PL as optional means of dependency checking (experimental, Chris T)
+* Updated INSTALL file to use correct globaldbh syntax (Chris T)
+* Updated UNGRADE file to recommend reading INSTALL first (Chris T)
+
+
+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.4/INSTALL
===================================================================
--- tags/1.2.4/INSTALL (rev 0)
+++ tags/1.2.4/INSTALL 2007-04-24 23:35:45 UTC (rev 1099)
@@ -0,0 +1,318 @@
+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]
+DBname = ledgersmb
+DBhost = localhost
+DBport = 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.4/LICENSE
===================================================================
--- tags/1.2.4/LICENSE (rev 0)
+++ tags/1.2.4/LICENSE 2007-04-24 23:35:45 UTC (rev 1099)
@@ -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.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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.
+
+ <signature of Ty Coon>, 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.4/LedgerSMB/AA.pm
===================================================================
--- tags/1.2.4/LedgerSMB/AA.pm (rev 0)
+++ tags/1.2.4/LedgerSMB/AA.pm 2007-04-24 23:35:45 UTC (rev 1099)
@@ -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.4/LedgerSMB/AA.pm
___________________________________________________________________
Name: svn:executable
+ *
Added: tags/1.2.4/LedgerSMB/AM.pm
===================================================================
--- tags/1.2.4/LedgerSMB/AM.pm (rev 0)
+++ tags/1.2.4/LedgerSMB/AM.pm 2007-04-24 23:35:45 UTC (rev 1099)
@@ -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
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.