This is CODE128 which may not be what you want if you are trying to print barcodes for retail purposes. In the US you would want to use UPC-E (for those reading from Europe, this is similar to EAN there). Different barcode scanners encode information differently so using the wrong type will result in problems.

Business-flow-wise, typically you take an order before everything is done necessary for the transaction to hit the books, and convert it to an invoice when everything that has been done for the income to be realized has happened. This typically means:

1) Goods or services are delivered
2) Any approval/error checking the business requires has happened

One big thing in 1.4 is that approval for invoices is possible so instead of two steps you can actually have three (goods ordered, invoice pending approval, and approved/posted to the books).

An other expl:
A sales invoice hits the books, and represents a financial transaction.

A sales order does not show up in the books. It's upstream of any financial transaction, and so anything on it will not be reflected in any financial report or have any transactions on any of the account charts.

So orders are more for managing your workflow. Invoices are for accounting. Your accountants probably do not care about your orders -- all they care about are invoices.

An other example:
A sales order is what I write down when you want to buy something from me. You ask me to ship you 10,000 staples next week. When I actually do ship you the 10,000 stables, I generate an invoice to go with it. Before I ship, I have no receivable asset, but I have 10,000 stables. After I ship, I have a receivable asset posted, but I don't have the 10,000 staples.

If this happens between 10am and 2pm, not a huge difference. If it happens between noon on Dec. 31 and I ship on Jan 4, the next year, this might matter.

Unless I post the order, my factory floor might not actually produce the 10,000 staples, or they shipping department might ship the last 10,000 staples to someone else.

But I'm glad to be able to deny your conclusion above: the system will search on any partial match, both on the customer number or on the customer name. So, there's no need to spell them quite exactly.

Also, if you want the drop downs back, there's a setting in the System -> Defaults screen (third item below the currency settings input box; "Max per dropdown"). If you enter 99999 into that (assuming you don't have that many customers), you'll be presented the selection list you're used to.

Yes, its Open source. The tools we use (Perl, PostsgreSQL, Apache ++) is also Open source. Open source means that the source code of the software is available for free to everyone and you can modify the code and distribute it yourself. https://en.wikipedia.org/wiki/Open_source

Look for a place to contribute. This means not only programming, but also documentation, theme design, art work, or architectural design. Join the mailing list.

First of all, you need to backup all your company databases followed by an upgrade of your PostgreSQL installation. There are plenty of places on the web to explain how to do that. The high-level process is to install the two versions in parallel and run the pg_upgradecluster command.

When the technical upgrade has succeeded, however, you're not ready to see the performance improvements promised by the 8.4+ versions of PostgreSQL with respect to the menu-generation. This is because the database doesn't automatically use the new 8.4+ code definitions.

To take advantage of the performance improvements of 8.4+, you'll need to re-run setup.pl on all your company databases. With each of the databases, you can clean up after having run setup.pl: the tablefunc contrib is no longer required, meaning you can

psql -U ledgersmb -d -f /uninstall_tablefunc.sql

On my own database I needed to run the above command three times to make it stop reporting "ERROR: Can't DROP because other objects depend on it." (On each round the number of other errors increased: on each round the number of objects successfully being dropped increased.)

That should do it. You should have a clean 8.4+ PostgreSQL database with LedgerSMB.

Q: This particular merchant runs Windows. I don't think they have a pole display, though I can check. Ideally, it would be great to accommodate, with or without pole display. If it runs better on Linux, going forward I would propose Linux workstations for new merchants.

Ok. Let's first explain what the problems we have to solve are, then discuss the solutions that are bundled.

In general web browsers are engineered so that malicious sites can't access your computer's hardware. In general we don't want to change the browser (for example with an add-on) to make it do this because there might be a capacity for abuse elsewhere. So things like receipt printers, pole displays, cash drawers, and barcode scanners cannot be directly be accessed by the browser. This makes a web-based point of sale rather challenging, but we have solutions to these problems. The solutions though are only tested on Linux. On Windows they will require slight modification and I would recommend some extra testing. Backup/fallback methods are discussed below as well.

What we do instead preferably is to turn the point of sale terminal into a server for the point of sale hardware. Scripts to do this (written in Bash) are in the utils/pos directory of the LedgerSMB installation. the client-side script is pos-hardware-client-startup-script which basically fires up netcat and listens for data to redirect to a hardware port. You probably want to use firewall software to limit this traffic to approved servers. The ports are configurable on both ends. On the LedgerSMB side, see the pos.conf.pl.

The other is directnet.pl which is used to send printable documents over this (and to the POS printer on the other side). This is designed to be a low-latency alternative to using CUPS and the like. It redirects pole display logic usually to a serial port, and the printer logic to a parallel port.

This means you can use any printer that accepts ESC/POS and it will send signals to open the cash drawer (programmable in the pos.conf.pl) if the cash drawer is the kind that plugs into the printer. You can also use a pole display although currently we only have drivers for the LC3000 by Logic Controls. The drivers are really easy to write though. Feel free to ask for help or contribute one.

Barcode scanners and magnetic stripe readers need to come into the computer as keyboard input. Typically this means a keyboard wedge interface for magstripe readers, and either a keyboard interface for a barcode scanner, or a barcode scanner attached to a POS keyboard with a built-in barcode decoder. I have had better luck with the latter in terms of long-term maintenance, but they both work.

On to the pos.conf.pl. The default values here are in the pos.conf.pl.template, so please cp pos.conf.pl.template pos.conf.pl

For the miost part this defines a single variable for storing the information called $pos_config. Keys for this and their significance are:

rem_host: Remote host to send pole display/printer info to. By default this is the remote host. However if you are running X11 applications remotely you may have to change this.

pd_host; Host for the pole display. Defaults to rem_host
pd_port: Port for the pole display. Defaults to 6601
pd_proto: Protocol for pd. Either 'tcp' or 'udp' defaulting to udp.

rp_host
rp_port
rp_proto

Same as pd_* above but for printer

rp_cash_open: The code to open the printer. Defaults to those for the Epson U220D iirc, which is binary string of values 27, 112, 0, 25, 250

coa_prefix: prefix for the till amounts. If you have a till '16' and a coa_prefix of 1300, the till account will be 1300.16. This account must exist or you will get errors.

$pos_sources is used to define memo fields for different types of payment. You can customize this as you want.

$pos_source_default is the default for the sources drop down.

curren is the currency
breakdown covers your currency denominations. Used in closing. I dont know if you want to add a 0.5 as 50 cent piece there since those are rare.

till_type is either the 'cashier' meaning the employee id becomes the till number or 'terminal' in which the last octet of the IP address becomes the till number. If you need to customize this handling you can do so underneath the request to stop editing at a certain point.

Advanced options include

source_accno_override used to override cash account handling of various sources (such as gift certs for example)

disable_tables is no longer necessary. But you can use this if you aren't using projects and/or departments. It defaults to disabling everything.

If the directnet approach for printing does not work for you you can comment out the printer definition at the bottom of the pos.conf.pl and set up cups to process and send the file to the workstation to be printed. This adds a few seconds often, however, so where directnet works, it is preferred especially in time-critical point of sale environments.

I found something very interesting. I created a test HTML page containing solely text called testpage.html. I dropped this file in two locations. One in the Apache root directory (/srv/www/htdocs/) and the other in the ledgersmb directory (/user/local/ledgersmb/). I changed ownership of the file to wwwrun:www. I then ran the following tests:

It seems to be choking on page loads for files that reside in the ledgersmb directory. My ledgersmb-httpd.conf is located in my ledgersmb directory at /usr/local/ledgersmb. I had added my "Include /usr/local/ledgersmb/ledgersmb-httpd.conf" to the bottom of default-server.conf.

I believe I have solved the issue. I am still testing just to make sure, but it appears that my issue was in ledgersmb-httpd.conf. In the section where by default you "Allow from localhost", I had changed to the following adding two additional "Allow from" statements so that I could connect remotely to Ledgersmb:

Order Deny, Allow
Allow from 127.0.0.1
Allow from localhost
Allow from 192.168.1
Deny from All

It appears that it was struggling with the multiple "Allow from" statements. Based on Apache documentation I believe I should have been able to do it this way, but I decided to change it to the following, using just one "Allow from" statement and separating the addresses with spaces, and my performance issue cleared up. This is what my modified version that works looks like:

Order Deny, Allow
Allow from 192.168.1 localhost 127.0.0.1
Deny from All

I manage several companies on LedgerSMB, can I login to any of these companies with one user? Applies to LedgerSMB 1.3.x --> V. 0.1 - 22. Nov 2011

I have 100 companies though on my system and decide to change my password, wouldn't I have to change it a 100 times (one for each company)? What would be the best approach to setting up a user that could be used on several companies (databases)?

In LedgerSMB all your users are database users in PostgreSQL. All PostgreSQL users do not have access to login with LedgerSMB on each company database(s). LedgerSMB has to give access to each user as an LedgerSMB application user, even if the user have PostgreSQL superuser rights on the database level.

You can add the Postgresql user to be a LedgerSMB application user when you make an new database or after the database is created. If you import the account into all the other databases, the password management is consistent cross the databases. However, you are not guaranteed the same permissions on all databases. You could have one set on one database and another set on another.

Fast route: User get "Manage Users" or "Full Permissons" access to LedgerSMB Use setup.pl to create company database number 1 with ledgersmbdbadm user. Add a normal application user in the proses ("Enter User" screen) example: your_100_db_user_name

Use setup.pl to create company database number 2, 3, 4... with ledgersmbadm user (or a special admin user for each db). Import the normal application user you made in database 1 ("Enter User" screen in setup.pl) Username: your_100_db_user_name Password: Do not set a password. Leave it blank Import : Yes Fill inn first name, last name and select Country and assign permissions.

You can also add the user to the db later: System->Admin Users->Add Users Username: your_100_db_user_name Password: Only set a password in the firstdb. Leave it blank in db 2, 3, 4.. Import : Yes Fill inn first name, last name and select Contry and assign permissions.

If you add the users later you have the opions to add only the permissions the user needs to do a spesific task.

Technical solution: From LedgeSMB use this user to setup the database you create a databaseuser with Superuser priviliges. CREATE USER ledgersmbdbadm WITH superuser password 'somepassword';

When you create the db: Use setup.pl to make the company database(es). Use the ledgersmbdbadm user to login to create the company database (first screen) and add a new user on the ("Enter User" screen) Username: your_100_db_user_name Password: Do not set a password. Leave it blank Import : Yes Fill inn first name, last name and select Contry and assign permissions.

You can add the user to the db later: System->Admin Users->Add Users Username: your_100_db_user_name Password: Do not set a password. Leave it blank Import : Yes Fill inn first name, last name and select Contry and assign permissions.

If you add the users later you have the opions to add only the permissions the user needs to do a spesific task.

From irc: ehu: you can run without it, just slower. ehu: but you can install it and rid yourself of the error reported.

Install Math:BigInt:GMP to get rid of the message.

Debian: apt-get install libmath-bigint-gmp-perl

Ubuntu 10.4 LTS: sudo apt-get install libmath-bigint-gmp-perl

RPM (Centos, Redhat...) perl-Math-BigInt-GMP is available from the rpmforge repository - http://repoforge.org/

From irc: haso: The setup script do not check for it. ... Should it ? ehu: well, since you can run without, I don't think so. ehu: do you? haso: It could be an informed option. ehu: well, that's indeed an idea. ehu: it's in the install file for debian and RH, I think.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! You are attempting to make a LaTeX format from a source file
! That is more than five years old.
!
! If you enter to scroll past this message then the format
! will be built, but please consider obtaining newer source files
! before continuing to build LaTeX.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! LaTeX source files more than 5 years old!.
l.545 ...aTeX source files more than 5 years old!}
?
! Emergency stop.
l.545 ...aTeX source files more than 5 years old!}
No pages of output.
Transcript written on xelatex.log.
Error: `xetex -ini -jobname=xelatex -progname=xelatex -etex xelatex.ini' failed
###############################################################################
fmtutil: Error! Not all formats have been built successfully.
Visit the log files in directory
/var/lib/texmf/web2c
for details.
###############################################################################
This is a summary of all `failed' messages and warnings:
`xetex -ini -jobname=xelatex -progname=xelatex -etex xelatex.ini' failed

This is confirmed to be a problem on CentOS 6, Scientific Linux 6, Red Hat Enterprise Linux 6, and Fedora Core 13.

SSL support on Apache is handled by configuring Apache. For having LedgerSMB connect to PostgreSQL using SSL, you can set the PGSSLMODE environment variable to 'require' in the ledgersmb.conf. Note that by default, LedgerSMB will try to connect to PostgreSQL via SSL and fall back to unsecured connections if this is not available.

We highly recommend using SSL for any access to LedgerSMB over the network.

Adding support for other database management systems would require that the database logic be coded to the least common denominator. We have decided that we want to eventually allow add-ons in different languages, and thus the database becomes the only point where we can enforce accounting logic consistantly across all parts of the application. Porting and maintaining such logic across database systems is not feasible for this project.

Additionally PostgreSQL is an outstanding RDBMS and we have no desire to move from it.

The table below lists the compatibility of LedgerSMB versions with PostgreSQL versions. Products for which support has ceased due to End-of-Life date being reached are not listed and should not be used.

PostgreSQL compatibility

PostgreSQL

1.3.x

1.4.x

1.5 planned

8.4

yes

no

no

9.0

yes

yes

no

9.1

yes

yes

yes

9.2

yes

yes

yes

9.3

yes

yes

yes

9.4

yes

yes

yes

Versions 1.0, 1.1 and 1.2 are not in this table due to the fact that they're past End of Life.

The short answer is that TeX doesn't know how to deal with UTF-8 (or rather non-ASCII) characters. XeTeX has been designed to work around these limitations. The easiest way to generate PDFs is to install Xe(La)TeX and use the 'xedemo' templates - these templates have been 'ported' from LaTeX to XeLaTeX.

Distribution specific install instructions listed below.

Debian / Ubuntu

Install texlive-xetex that includes xelatex

apt-get install texlive-xetex

but you need to patch LaTeX::DriverInstall liblatex-{driver,encode,table}-perl for latex

LedgerSMB xelatex configuration

Install xelatex and change the LedgerSMB configuration from the menu:System -> System Defaults -> Templates directoryChange to "xedemo"

Change a path

From the mailing list: (Chris Travers)Right now, I am open to suggestions on a better approach, as the Template::Latex api's don't seem to work to do this, but I resorted to changing the paths in LaTeX::Driver::Paths directly (find the location with locate LaTeX/Driver/Paths.pm). This file gets written at installation time for the LaTeX::Driver module and so I consider it reasonably editable.

Code reference to LedgerSMB

The templates use the Template Toolkit scripting language to generate actual content.
Depending on the typesetting language, the files use
* HTML;
* (Xe)LaTeX; or
* plain text
as the typesetting system.

While LaTeX and XeLaTeX are extremely similar, some differences exist, mainly in the area of font selection and document preamble.

The basic idea is that everything you can learn from the web about translating with gettext applies to LedgerSMB's gettext translation as well, with the note that you should be able to find a recent POT file in the repository next to the source code for the latest development version (trunk) and the latest stable release (1.3).

We don't know enough about the ideosyncracies with your laws to evaluate that. But quite frankly Free Software sometimes poses an issue with local regulation. If you go with LedgerSMB, I'd recommend working with us to detail any shortcomings and get those resolved.

You can help us to make a list over "X country" laws and LedgerSMB shortcomings according your countrys law.

Submit your patches ( “diff file” through the Sourceforge project tracker. If you are going to do somewhat largish changes, it's best to discuss how to do them on the developers list. That increases chances for acceptance which is in general the best solution for you and the lsmb community.

As of 1.3.7 the backup functionality moved to setup.pl, the database administration interface.

Login with your ledgersmb database user / admin user. This can't be done using your normal LedgerSMB login account since it doesn't have enough rights to backup db and roles. The default address for setup.pl is http://localhost/ledgersmb/setup.pl.

The setup.pl backup facility consists of two parts:

Backup of the data (parts, customers, accounting records, etc)

Backup of the roles (your login accounts and rights)

The backup can be mailed to an e-mail account, or you can download it with your browser, depending on your output selection in the backup screen.

The PDF and PS invoices are generated using a program called LaTeX which handles the layout and typesetting. The actual LaTeX files are creating using Template Toolkit with extensions for LaTeX. These extensions are in the Template::Latex package available from CPAN. The software then generates a LaTeX file which is then processed to create a PDF or PS.

Typically the first thing to do is to install a LaTeX distribution like TexLive (distributed with many Linux distributions and available for OSX and Windows). This provides LaTeX and many of the modules needed. In general I recommend that if your distro has a texlive-extras package that you install this too.

After this is installed, you must then install Template::Latex. This can be done by typing on the command line:

Note: Debian & Ubuntu look below.

cpan Template::Latex

This will also install a number of dependencies including LaTeX::Driver, which will need to know where your LaTeX binaries are. It is usually pretty good at finding them.

If things go wrong and you can't get it to work, the following commands may provide useful diagnostic information when requesting help:

Sort term solution: It's not optimal for a UPC management but it solves the immediate problem:

Add a space separated list with the barcodes to the partnumber field

The partnumber is the "Number" filed on the same line as "Description" in the "Add Part" page. And yes, "space separated list" works in the POS interface. (If you scan one of the codes in the space separated list )

Here's how the partnumber and description fields work ----------------------------------------------------------------- It searches for any substring match for the entry. If there is only one match it populates and moves on If there are no matches it asks you if you want to create one If there are multiple matches it gives you a list to choose from same on the invoice screens

Long term solution: ------------------------ - add a UPC field to the makemodel table.

I have successfully installed LegerSMB and logged in. However, no matter the type of user (i.e. administrator, supervisor or user) the access control of them is always the same. I cannot amend the user access control rights. Therefore many functions such as amending the chart of account are not working. Are there any error on my installation? Thx [Chris Travers : the Role field in 1.2 affects some aspects of reports but not much more than that. use the check boxes to show/hide menu items. In 1.3, the roles are significantly different.]

In 1.3.x : Go to the System -> Admin Users -> Search users page, click "Search" and select "[edit]" for the user you're trying to change.

You'll be presented with a long list of authorizations that can be assigned to the user.

Magic Characters in passwords: The legacy code from SQL-Ledger has some issues with parsing passwords that contain either the equals sign ("=") or the ampersand (&). This is gradually being resolved in the LedgerSMB codebase but for now avoid using either of these characters in your passwords. The issue is that the equals and ampersand characters are used as delimiters in query strings and posted content - this is being worked on so should not be an issue "soon".

Googlebait: Symptoms of this include "Error! Cannot connect to datasource" and "no database driver specified and DBI_DSN env var not set at LedgerSMB/Form.pm" (suspect this is for admin password).

Browser plugin The noscript Firefox plugin can prevent the Super-user login and Password box from being created. Disable noscript on your login page.

Password "popup" Installed in a fresh install of Ubuntu. All seemed fine on in the evening when I went home for the weekend. (I was able to login) Now when I login I get an other password request popup opening with: A username and password are being requested by http://127.0.0.1. The site says: "LedgerSMB"

The likely issue here is that the initial password creation temporarily valid, with the idea that the individual setting the password may not be the application user. Consequently the password has expired and you cannot log in.

To solve the Password "popup", you can do one of a couple things: By: Chris Travers

1) You can locate your pg_hba.conf file and change the authentication type to "trust" briefly while logging in and changing your password. This requires telling PostgreSQL to reload its files (or restarting PostgreSQL)

2) You can log into PostgreSQL with something like: sudo -u postgres psql and then change the expiration date. (on Centos or Red Hat su to the postgres user and run psql: su - postgres) Something like:

ALTER USER 'myusername' WITH VALID UNTIL '2011-11-09';

Then when you log in, you should be able to change your password under the preferences screen or if it will expire within a week, it should pop up that screen when you log in, with a warning on top.

REST -- we are working on it. (1. Nov 2011) Check developer mailing list and latest code. Other language independent API--- we have it for the new code in the form of discoverable SQL interfaces, and are working on rewriting the rest with that in mind

Web service API's discussion is ongoing on the development mailing list. Join and contribute

From the users mailinglist (2011.05.22): Nigel Titley has an operational bridge working between Oscommerce and LedgerSMB. He is happy to throw into the pot, especially once the Ledgersmb RESTful interface comes out of the woodwork. It transfers new orders, new parts and new customers across from OSCommerce to LedgerSMB, handling multiple currencies and it updates the OSCommerce inventory from LedgerSMB. It runs as a regular cron job.http://ledgersmb-oscom.svn.sourceforge.net/viewvc/ledgersmb-oscom/trunk/...

If you find yourself in this situation, the answer is to create a 0 (null) payment: Select both the voiding and the voided invoice in the Cash->Payment (or Cash->Receipt) screen. This will clear the invoices against each other with a net-zero result.

Unfortunately, the LedgerSMB 1.3 version doesn't automatically clear a voiding invoice against a voided invoice upon posting of the former. The workflow described works around this issue.

LedgerSMB can tie product sales to a tax class so that VAT can automatically be split off into the required VAT accounts on a sale, and when cancelling an invoice, automatically perform the reverse bookings.

Each product can be 'attached' to an account and the associated % will be applied automatically.

Quite a few users find some of the terminology and accounting processes a little confusing at first. Some of the more popular small business accounting packages tend to hide these aspects of book-keeping from users for simplicity, so with the current user interface there is often some new ideas to grasp.

First step is the manual - the LedgerSMB manual is free and highly recommended reading.

If you would like some background on general accounting practices, there is an (unassociated) tutorial So, you want to learn Bookkeeping" which seems a good place to start.

Another excellent resource is second-hand book stores. Lots of MBA studends sell off their textbooks (presumably to finance their first business rather than pay of gambling debts) so second-hand bookstores will often have very good texts on accounting at bargain prices - these can make great reference books.

Finally it would be remiss not to recommend securing the services of an accountant to help you out with the finer points from time to time, should you feel the need or have a legal obligation to do so.

Active support

Version 1.3 and higher are under active development and are supported by the community.

End of life

LedgerSMB versions 1.0, 1.1 and 1.2 won't be maintained any further due to the fact that there are some known security issues which can't be fixed. If you're looking for help on how to use these versions, please try mailing the users mailing list. If you're looking someone to create bugfixes, please check with one of the parties providing commercial support.