Features Download
From: Chris Travers <chris.travers-Re5JQEeQqe8AvxtiuMwx3w <at> public.gmane.org>
Subject: Re: POS, was: "Re: Bug in 1.3.20 (development)"
Newsgroups: gmane.comp.finance.ledger.smb.user
Date: Wednesday 18th July 2012 09:24:43 UTC (over 4 years ago)
On Tue, Jul 17, 2012 at 4:38 AM, Brian Wolf

>  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
> 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

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.


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.

close_cash_accno:  Cash account to put closing cash into.  Must exist by
closing time.

$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.

Best Wishes,
Chris Travers
CD: 4ms