summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/manual/LedgerSMB-manual.txt3749
1 files changed, 3749 insertions, 0 deletions
diff --git a/doc/manual/LedgerSMB-manual.txt b/doc/manual/LedgerSMB-manual.txt
new file mode 100644
index 00000000..9a00a16b
--- /dev/null
+++ b/doc/manual/LedgerSMB-manual.txt
@@ -0,0 +1,3749 @@
+TITLE: Ledger-SMB Manual v. 1.2
+AUTHOR: The LedgerSMB Core Team
+
+The LedgerSMB Core Team
+Copyright 2006 The LedgerSMB Core Team. Permission
+is granted to copy, distribute and/or modify this document under the
+terms of the GNU Free Documentation License, Version 1.2 or any later
+version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of
+the license is included in the section entitled
+"GNU Free Documentation License" (Appendix fdl).
+
+
+
+
+
+
+
+
+
+PART: Ledger-SMB and Business Processes
+
+Ledger-SMB and Business Processes
+
+
+SECTION: Introduction to Ledger-SMB
+
+Introduction to Ledger-SMB
+
+
+SUBSECTION: Why Ledger-SMB
+
+Why Ledger-SMB
+
+
+SUBSUBSECTION: Advantages of Ledger-SMB
+
+Advantages of Ledger-SMB
+
+ Flexibility and Central Management
+ Accessibility over the Internet (for some users)
+ Relatively open data format
+ Integration with other tools
+ Excellent accounting options for Linux users
+ Open Source
+ Flexible, open framework that can be extended or modified to fit
+your business.
+ Security-conscious development community.
+
+SUBSUBSECTION: Key Features
+
+Key Features
+
+ Accounts Receivable
+
+ Track sales by customer
+ Issue Invoices, Statements, Receipts, and more
+ Do job costing and time entry for customer projects
+ Manage sales orders and quotations
+ Ship items from sales orders
+ Accounts Payable
+
+ Track purchases and debts by vendor
+ Issue RFQ's Purchase Orders, etc.
+ Track items received from purchase orders
+ Budgeting
+
+ Track expenditures and income across multiple departments
+ Track all transactions across departments
+ Check Printing
+
+ Customize template for any check form
+ General Ledger
+ Inventory Management
+
+ Track sales and orders of parts
+ Track cost of goods sold using First In/First Out method
+ List all parts below reorder point
+ Track ordering requirements
+ Track, ship, receive, and transfer parts to and from multiple warehouses
+ Localization
+
+ Provide Localized Translations for Part Descriptions
+ Provide Localized Templates for Invoices, Orders, Checks, and more
+ Select language per customer, invoice, order, etc.
+ Manufacturing
+
+ Track cost of goods sold for manufactured goods (assemblies)
+ Create assemblies and stock assemblies, tracking materials on hand
+ Multi-company/Multiuser
+
+ One isolated database per company
+ Users can have localized systems independent of company data set
+ Point of Sale
+
+ Run multiple cash registers against main Ledger-SMB installation
+ Suitable for retail stores and more
+ Credit card processing via TrustCommerce
+ Supports some POS hardware out of the box including:
+
+ Logic Controls PD3000 pole displays (serial or parallel)
+ Basic text-based receipt printers
+ Keyboard wedge barcode scanners
+ Keyboard wedge magnetic card readers
+ Printer-attached cash drawers
+ Price Matrix
+
+ Track different prices for vendors and customers across the board
+ Provide discounts to groups of customers per item or across the board
+ Store vendors' prices independent of the other last cost in the parts
+record
+ Reporting
+
+ Supports all basic financial statements
+ Easily display customer history, sales data, and additional information
+ Open framework allows for ODBC connections to be used to generate
+reports using third party reporting tools.
+ Tax
+
+ Supports Retail Sales Tax and Value Added Tax type systems
+ Flexible framework allows one to customize reports to change the tax
+reporting framework to meet any local requirement.
+
+SUBSECTION: Limitations of Ledger-SMB
+
+Limitations of Ledger-SMB
+
+ No payroll module (Payroll must be done manually)
+ Some integration limitations
+ Further development/maintenance requires a knowledge of a relatively
+broad range of technologies
+
+SUBSECTION: System Requirements of Ledger-SMB
+
+System Requirements of Ledger-SMB
+
+ PostgreSQL
+ A CGI-enabled Web Server (for example, Apache)
+ Perl 5.8.x
+ An operating system which supports the above software (usually Linux,
+though Windows, MacOS X, etc. do work)
+
+ (optional) is required to create PDF or Postscript invoices
+ The following CPAN modules:
+
+ Data::Dumper
+ Locale::Maketext
+ Locale::Maketext::Lexicon
+ MIME::Base64
+ Digest::MD5
+ HTML::Entities
+ DBI
+ DBD::Pg
+ Math::BigFloat
+ IO::File
+ Encode
+ Locale::Country
+ Locale::Language
+ Time::Local
+ Cwd
+ Config::Std
+ MIME::Lite
+
+SECTION: User Account and Database Administration Basics
+
+User Account and Database Administration Basics
+
+These functions are accessed via the admin.pl script in the
+installed directory of Ledger-SMB.
+
+
+SUBSECTION: Companies and Datasets
+
+Companies and Datasets
+
+Ledger-SMB stores its information in locale-specific data sets. When
+a dataset is created, it sets various defaults such as currency, a
+basic chart of accounts setup, and so forth. Note that the default
+setup is for Canada, where the author of the software resides.
+
+Datasets are stored as PostgreSQL databases. The application
+is designed with the idea that each dataset will represent exactly
+one company. If a customer is working with multiple companies, he/she
+must create a dataset to for each.
+
+When creating a dataset, the application asks for both a username and a
+superusername. If the superuser's information is not filled in, Ledger-SMB will
+attempt to populate an existing dataset, but if this information is filled in,
+the program will log into the PostgreSQL cluster with the superusername and
+password, create the database, and attempt to add Plpgsql to it.
+
+SUBSECTION: How to Create a User
+
+How to Create a User
+
+Users are created by going to the admin.pl page and clicking on `
+"Add
+User.`
+" One then fills out the form and when it is saved,
+the user is created.
+
+
+SUBSECTION: Permissions
+
+Permissions
+
+The permissions system is not rigorously enforced within Ledger-SMB,
+in the sense that the permissions API is generally not used in the
+application itself. Instead permissions are used to enable/disable
+menu options. Setting an enforcement of such permissions would require
+some custom programming at the present time. Most organizations, however,
+find that the current system is adequate.
+
+The checkboxes which are marked enable menu entries. Those that are
+unchecked disable those entries on the menu.
+
+
+SUBSECTION: User Account Types
+
+User Account Types
+
+ User is a general user of the system
+ Managers often are able to see a larger amount of data
+ Administrators have full access to the system
+
+SUBSECTION: Other Features
+
+Other Features
+
+ Lock System allows one to lock users out of the system while maintenance
+is performed. This is only necessary during upgrades or maintenance
+which results in the RDBMS being offline.
+ Change Admin Password changes the administrative password.
+ Logout terminates the admin session.
+
+SECTION: Chart of Accounts
+
+Chart of Accounts
+
+The Chart of Accounts provides a basic overview of the logical structure
+of the accounting program. One can customize this chart to allow for
+tracking of different sorts of information.
+
+
+SUBSECTION: Introduction to Double Entry Bookkeeping
+
+Introduction to Double Entry Bookkeeping
+In order to set up your chart of accounts in LedgerSMB you will need to
+understand a bit about double entry bookkeeping. This section provides a
+brief overview of the essential concepts. There is a list of references
+for further reading at the end.
+
+SUBSUBSECTION: Business Entity
+
+Business Entity
+You don't want to mix your personal expenses and income with that of the
+business or you will not be able to tell how much money it is making (if
+any). For the same reason you will want to keep track of how much money
+you put into and take out of the business so you will want to set up a
+completely seperate set of records for it and treat it almost as if it had
+a life of its own.
+
+SUBSUBSECTION: Double Entry
+
+Double Entry
+Examples:
+ When you buy you pay money and receive goods.
+ When you sell you get money and give goods.
+ When you borrow you get money and give a promise to pay it back.
+ When you lend you give money and get a promise to pay it back.
+ When you sell on credit you give goods and get a promise to pay.
+ When you buy on credit you give a promise to pay and get goods.
+
+You need to record both sides of each transaction: thus double entry.
+Furthermore, you want to organize your entries, recording those having to
+do with money in one place, value of goods bought and sold in another,
+money owed in yet another, etc. Hence you create accounts, and record each
+half of each transaction in an appropriate account. Of course, you won't
+have to actually record the amount in more than one place yourself: the
+program takes care of that.
+
+SUBSUBSECTION: Accounts
+
+Accounts
+
+[Assets] Valuable stuff the business owns such as money and
+goods available for sale
+[Liabilities] Debts owned by the business such as bank loans and unpaid
+bills
+[Equity or Capital] What would be left for the owner if all the assets were
+converted to money and all the liabilities paid off ("Share Capital" on the
+LedgerSMB default chart of accounts: not to be confused with "Capital Assets".)
+[Revenue] Income from business activity: increases Equity
+[Expense] The light bill, the cost of goods sold, etc: decreases Equity
+
+All other accounts are subdivisions of these. The relationship between the
+top-level accounts is often stated in the form of the Accounting Equation
+(don't worry: you won't have to solve it):
+
+Assets = Liabilities + Equity + (Revenue - Expense)
+
+You won't actually use this equation while doing your bookkeeping, but it's
+a useful tool for understanding how the system works.
+
+SUBSUBSECTION: Debits and Credits
+
+Debits and Credits
+
+Traditional paper accounting systems used a two-column form in which all
+increases went in one column and all deceases in the other. For asset and
+expense accounts increases went in the left column and decreases in the
+right. For liability and capital accounts decreases went in the left
+column and increases in the right. Looking at the accounting equation we
+see that assets are on the left, so it is logical that asset increases
+would go on the left. Libilities, capital, and revenue are on the right so
+it is logical that their increase would go on the right. Expenses,
+however, are on the right, so why do their increases go on the left?
+Because expenses are subtracted from the right side of the equation and so
+expense increases decrease the right side of the equation.
+
+Entries in the left column of the traditional form are called debits, while
+entries on the right are called credits. Neither is "negative".
+
+ Debits increase assets
+ Debits increase expense
+ Credits increase liabilities
+ Credits increase capital
+ Credits increase revenue
+
+Examples:
+
+You go to the bank and make a deposit. The teller tells you that he is
+going to credit your account. This is correct: your account is money the
+bank owes you and so is a liability from their point of view. Your deposit
+increased this liability and so they will credit it. They will make an
+equal debit to their cash account. When you return you will debit your
+bank deposits account because you have increased that asset and credit cash
+on hand because you have decreased that one.
+
+
+SUBSUBSECTION: Accrual
+
+Accrual
+
+Early accounting systems were usually run on a cash basis. One generally did
+not consider money owed to affect the financial health of a company, so expenses
+posted when paid as did income.
+
+The problem with this approach is that it becomes very difficult or impossible
+to truly understand the exact nature of the financial health of a business. One
+cannot get the full picture of the financial health of a business because
+outstanding debts are not considered. Futhermore, this does not allow for
+revenue to be tied to cost effectively, so it becomes difficult to assess how
+profitable a given activity truly is.
+
+To solve this problem, accrual-based systems were designed. The basic principle
+is that income and expense should be posted as they are incurred, or accrued.
+This allows one to track income relative to expense for specific projects or
+operations, and make better decisions about which activities will help one
+maximize profitability.
+
+To show how these systems differ, imagine that you bill a customer for time and
+materials for a project you have just completed. The customer pays the bill
+after 30 days. In a cash based system, you would post the income at the time
+when the customer pays, while in an accrual system, the income is posted at the
+time when the project is completed.
+
+SUBSUBSECTION: References
+
+References
+
+http://www.accounting-and-bookkeeping-tips.com/learning-accounting/accounting-basics-credit.htm
+
+Discussion of debits and credits as well as links to other accounting subjects.
+
+
+ http://www.computer-consulting.com/accttips.htm
+
+Discussion of double entry bookkeeping.
+
+
+ http://www.minnesota.com/~tom/sql-ledger/howtos/
+
+A short glossary, some links, and a FAQ (which makes the "credit=negative
+number" error). The FAQ focuses on SQL-Ledger, LedgerSMB's ancestor.
+
+
+ http://bitscafe.com/pub2/etp/sql-ledger-notes
+#expenses\
+Some notes on using SQL-Ledger (LedgerSMB's ancestor).
+
+
+ http://en.wikipedia.org/wiki/List
+
+Wikipedia articles on accounting.
+
+
+ http://www.bized.ac.uk/learn/accounting/financial/index.htm
+
+Basic accounting tutorial.
+
+
+ http://www.asset-analysis.com/glossary/glo.html
+
+Financial dictionary and glossary.
+
+
+ http://www.geocities.com/chapleaucree/educational/FinanceHandbook.html
+
+Financial glossary.
+
+
+ http://www.quickmba.com/accounting/fin/
+
+Explanation of fundamentals of accounting, including good discussions
+of debits and credits and of double-entry.
+
+
+SUBSECTION: General Guidelines on Numbering Accounts
+
+General Guidelines on Numbering Accounts
+
+In general, most drop-down boxes in Ledger-SMB order the accounts
+by account number. Therefore by setting appropriate account numbers,
+one can affect the default values.
+
+A second consideration is to try to keep things under each heading
+appropriate to that heading. Thus setting an account number for a
+bank loan account in the assets category is not generally advisable.
+
+
+SUBSECTION: Adding/Modifying Accounts
+
+Adding/Modifying Accounts
+
+These features are listed under System- Chart of Accounts.
+One can list the accounts and click on the account number to modify
+them or click on the `
+"add account`\" option to create
+new accounts.
+
+ Headings are just broad categories and do not store values themselves,
+while accounts are used to store the transactional information.
+ One cannot have an account that is a summary account (like AR)
+and also has another function.
+ GIFI is mostly of interest to Canadian customers but it can be used
+to create reports of account hierarchies.
+
+SUBSECTION: Listing Account Balances and Transactions
+
+Listing Account Balances and Transactions
+
+One can list the account balances via the Reports- Chart
+of Accounts report. Clicking on the account number will provide a
+ledger for that account.
+
+
+SECTION: Administration
+
+Administration
+
+This section covers other (non-Chart of Accounts) aspects to the
+setup of the Ledger-SMB accounting package. These are generally accessed
+in the System submenu.
+
+
+SUBSECTION: Taxes, Defaults, and Preferences
+
+Taxes, Defaults, and Preferences
+One of the new features in 1.2 is the modular sales tax system and the simple
+sales tax module. This allows one to install different tax modules and then
+select which taxes are applied by which programming modules. The sales tax
+module has access to everything on the submitted form so it is able to make
+complex determinations on what is taxable based on arbitrary criteria.
+
+The tax rules drop-down box allows one to select any installed tax module
+(LedgerSMB 1.2 ships only with the simple module), while the ordering is an
+integer which allows one to specify a tax run which occurs on the form after
+any rules with lower entries in this box. This allows for compounding of sales tax (for example, when PST applies to the total and GST as well).
+
+SUBSUBSECTION: Adding A Sales Tax Account
+
+Adding A Sales Tax Account
+
+Sales Tax is collected on behalf of a state or national government
+by the individual store. Thus a sales tax account is a liability--
+it represents money owed by the business to the government.
+
+To add a sales tax account, create an account in the Chart of Accounts
+as a liability account, check all of the `
+"tax`\" checkboxes,
+and answer the following question as `
+"yes:`\"
+
+`
+"Include this account on the customer/vendor forms to flag
+customer/vendor as taxable?`
+"
+
+Once this account is created, one can set the tax amount.
+
+
+SUBSUBSECTION: Setting a Sales Tax Amount
+
+Setting a Sales Tax Amount
+
+Go to System- Defaults and the tax account will be listed
+near the bottom of the page. The rate can be set there.
+
+
+SUBSUBSECTION: Default Account Setup
+
+Default Account Setup
+
+These accounts are the default accounts for part creation and foreign
+exchange tracking.
+
+
+SUBSUBSECTION: Currency Setup
+
+Currency Setup
+
+The US accounts list this as USD:CAD:EUR. One can add other currencies
+in here, such as IDR (Indonesian Rupiah), etc. Currencies are separated
+by colons.
+
+
+SUBSUBSECTION: Sequence Settings
+
+Sequence Settings
+
+These sequences are used to generate user identifiers for quotations,
+invoices, and the like. If an identifier is not added, the next number
+will be used.
+
+A common application is to set invoices, etc. to start at 1000 in
+order to hide the number of issued invoices from a customer.
+
+Leading zeros are preserved. Other special values which can be embedded using
+$<$?lsmb ?$>$ tags include:
+
+[DATE] expands to the current date
+[YYMMDD] expands to a six-digit version of the date. The components of
+this date can be re-arranged in any order, so MMDDYY, DDMMYY,
+or even just MMYY are all options.
+[NAME] expands to the name of the customer or vendor
+[BUSINESS] expands to the type of business assigned to the customer or
+ventor.
+[DESCRIPTION] expands to the description of the part. Valid only for parts.
+[ITEM] expands to the item field. Valid only for parts.
+[PERISCOPE] expands to the partsgroup. Valid only for parts.
+[PHONE] expands to the telephoen number for customers and vendors.
+
+SUBSECTION: Audit Control
+
+Audit Control
+
+Auditability is a core concern of the architects of any accounting
+system. Such ensures that any modification to the accounting information
+leaves a trail which can be followed to determine the nature of the
+change. Audits can help ensure that the data in the accounting system
+is meaningful and accurate, and that no foul play (such as embezzlement)
+is occurring.
+
+
+SUBSUBSECTION: Explaining transaction reversal
+
+Explaining transaction reversal
+
+In paper accounting systems, it was necessary to have a means to authoritatively
+track corrections of mistakes. The means by which this was done was
+known as `
+"transaction reversal.`\"
+
+When a mistake would be made, one would then reverse the transaction
+and then enter it in correctly. For example, let us say that an office
+was renting space for
+$300 per month. Let us say that they inadvertently
+entered it in as a
+$200 expense.
+
+The original transaction would be:
+
+Account & Debit & Credit
+5760 Rent & $200 &
+2100 Accounts Payable & & $200
+
+The reversal would be:
+
+Account & Debit & Credit
+5760 Rent & & $200
+2100 Accounts Payable & $200 &
+
+
+This would be followed by re-entering the rent data with the correct
+numbers. This was meant to ensure that one did not erase data from
+the accounting books (and as such that erasing data would be a sign
+of foul play).
+
+Ledger-SMB has a capability to require such reversals if the business
+deems this to be necessary. When this option is enabled, existing
+transactions cannot be modified and one will need to post reversing
+transactions to void existing transactions before posting corrected
+ones.
+
+Most accountants prefer this means to other audit trails because it
+is well proven and understood by them.
+
+
+SUBSUBSECTION: Close books option
+
+Close books option
+
+You cannot alter a transaction that was entered before the closing date.
+
+
+SUBSUBSECTION: Audit Trails
+
+Audit Trails
+
+This option stores additional information in the database to help
+auditors trace individual transactions. The information stored, however,
+is limited and it is intended to be supplemental to other auditing
+facilities.
+
+The information added includes which table stored the record, which
+employee entered the information, which form was used, and what the
+action was. No direct financial information is included.
+
+
+SUBSECTION: Departments
+
+Departments
+
+Departments are logical divisions of a business. They allow for budgets
+to be prepared for the individual department as well as the business
+as a whole. This allows larger businesses to use Ledger-SMB to meet
+their needs.
+
+
+SUBSUBSECTION: Cost v Profit Centers.
+
+Cost v Profit Centers.
+
+In general business units are divided into cost and profit centers.
+Cost centers are generally regarded as business units where the business
+expects to lose money and profit centers are where they expect to
+gain money. For example, the legal department in most companies is
+a cost center.
+
+One of the serious misunderstandings people run up against is that
+Ledger-SMB tends to more narrowly define cost and profit centers than
+most businesses do. In Ledger-SMB a cost center is any department
+of the business that does not issue AR transactions. Although many
+businesses may have cost centers (like technical support) where customer
+fees may subsidize the cost of providing the service, in Ledger-SMB,
+these are profit centers.
+
+Ledger-SMB will not allow cost centers to be associated with AR transactions.
+So if you want this functionality, you must create the department
+as a profit center.
+
+
+SUBSECTION: Warehouses
+
+Warehouses
+
+Ledger-SMB has the ability to track inventory by warehouse. Inventory
+items can be moved between warehouses, and shipped from any warehouse
+where the item is in stock. We will explore this concept more later.
+
+
+SUBSECTION: Languages
+
+Languages
+
+Languages allow for goods and services to be translated so that one
+can maintain offices in different countries and allow for different
+goods and service descriptions to be translated to different languages
+for localization purposes.
+
+
+SUBSECTION: Types of Businesses
+
+Types of Businesses
+
+One can create types of businesses and then give them discounts across
+the board. For example, one might give a firm that uses one's services
+as a subcontractor a 10
+
+
+
+SUBSECTION: Misc.
+
+Misc.
+
+
+SUBSUBSECTION: GIFI
+
+GIFI
+
+GIFI is a requirement for Canadian customers. This feature allows
+one to link accounts with Canadian tax codes to simplify the reporting
+process. Some European countries now use a similar system.
+
+People that don't otherwise have a use for GIFI can use it to create reports
+which agregate accounts together.
+
+SUBSUBSECTION: SIC
+
+SIC
+
+Standard Industrial Classification is a way of tracking the type of
+business that a vendor or customer is in. For example, an accountant
+would have an SIC of 8721 while a graphic design firm would have an
+SIC of 7336. The classification is hierarchical so one could use this
+field for custom reporting and marketing purposes.
+
+
+SUBSUBSECTION: Overview of Template Editing
+
+Overview of Template Editing
+
+The templates for invoices, orders, and the like can be edited from
+within Ledger-SMB. The submenus within the System submenu such as
+HTML Templates, Text Templates and templates provide access
+to this functionality.
+
+
+SUBSUBSECTION: Year-end
+
+Year-end
+
+Although the Year-end functionality in Ledger-SMB is very useful,
+it does not entirely make the process simple and painless. One must
+still manually enter adjustments prior to closing the books. The extent
+to which these adjustments are necessary for any given business is
+a matter best discussed with an accountant.
+
+The standard way books are normally closed at the end of the year
+is by moving all adjusted
+Adjustments would be entered via the General Ledger. The exact process
+is beyond the scope of this document, however.
+ income and expenses to an equity account usually called `
+"Retained
+Earnings.`
+" Assets and liabilities are not moved. Equity drawing/dividend
+accounts are also moved, but the investment accounts are not. The
+reasoning behind this process is that one wants a permanent record
+of the amount invested in a business, but any dividends ought not
+to count against their recipients when new investors are brought on
+board.
+
+Ledger-SMB automatically moves all income and expense into the specified
+year-end/retained earnings account. It does not move the drawing account,
+and this must be done manually, nor does it automate the process of
+making adjustments.
+
+Contrary to its name, this function can close the books at any time,
+though this would likely be of limited use.
+
+
+SUBSECTION: Options in the ledger-smb.conf
+
+Options in the ledger-smb.conf
+
+The ledger-smb.conf configures the software by assigning site-wide
+variables. Most of these should be left alone unless one knows what
+one is doing. However, on some systems some options might need to
+be changed, so all options are presented here for reference:
+
+[templates] is the directory where the templates are stored.
+[sendmail] is the command to use to send a message. It must read the
+email from standard input.
+[language] allows one to set the language for the login screen and
+admin page.
+[latex] tells Ledger-SMB whether is installed. is
+required for generating Postscript and PDF invoices and the like.
+[Environmental variables] can be set here too. One
+can add paths for searching for , etc.
+[Printers] section can be used to set a hash table of printers for the software.
+The primary example is
+
+$[$printers$]$
+
+Default = lpr
+
+Color = lpr -PEpson
+\%
+ However, this can use any program that can accept print documents
+(in Postscript) from standard input, so there are many more possibilities.
+
+
+SECTION: Goods and Services
+
+Goods and Services
+
+The Goods and Services module will focus on the definition of goods
+and services and the related accounting concepts.
+
+
+SUBSECTION: Basic Terms
+
+Basic Terms
+
+ [COGS] is Cost of Goods Sold. When an item is sold, then the expense
+of its purchase is accrued as attached to the income of the sale.
+ [List] Price is the recommended retail price.
+ [Markup] is the percentage increase that is applied to the last
+cost to get the sell price.
+ [ROP] is re-order point. Items with fewer in stock than this will
+show up on short reports.
+ [Sell] Price is the price at which the item is sold.
+
+SUBSECTION: The Price Matrix
+
+The Price Matrix
+
+It is possible to set different prices for different groups of customers,
+or for different customers individually. Similarly, one can track
+different prices from different vendors along with the required lead
+time for an order.
+
+
+SUBSECTION: Pricegroups
+
+Pricegroups
+
+Pricegroups are used to help determine the discount a given customer
+may have.
+
+
+SUBSECTION: Groups
+
+Groups
+
+Groups represent a way of categorizing POS items for a touchscreen
+environment. It is not fully functional yet, but is sufficient that
+with some stylesheet changes, it could be made to work.
+
+
+SUBSECTION: Labor/Overhead
+
+Labor/Overhead
+
+Labor/overhead is usually used for tracking manufacturing expenses.
+It is not directly billed to a customer. It is associated with an
+expense/Cost of Goods Sold (COGS) account.
+
+
+SUBSECTION: Services
+
+Services
+
+Services include any labor that is billed directly to the customer.
+It is associated with an expense/COGS account and an income account.
+Services can be associated with sales tax.
+
+
+SUBSUBSECTION: Shipping and Handling as a Service
+
+Shipping and Handling as a Service
+
+One approach to dealing with shipping and handling is to add it as
+a service. Create a service called ``Shipping and Handling'',
+with a sell price
+$1 per unit, and a 0\% markup. Bill it as \$1 per
+unit. This allows one to add the exact amount of shipping and handling
+as necessary.
+
+
+SUBSECTION: Parts
+
+Parts
+
+A part is any single item you might purchase and either might resell
+or use in manufacturing an assembly. It is linked to an expense/COGS
+account, an income account, and an inventory account. Parts can be
+associated with sales tax.
+
+
+SUBSECTION: Assemblies and Manufacturing
+
+Assemblies and Manufacturing
+
+Manufacturers order parts but they sell the products of their efforts.
+Ledger-SMB supports manufacturing using the concept of assemblies.
+An assembly is any product which is manufactured on site. It consists
+of a selection of parts, services, and/or labor and overhead. Assemblies
+are treated as parts in most other regards.
+
+However, one cannot order assemblies from vendors. One must instead
+order the components and stock them once they are manufactured.
+
+
+SUBSUBSECTION: Stocking Assemblies
+
+Stocking Assemblies
+
+One stocks assemblies in the Stock Assembly entry on the Goods and
+Services submenu. When an assembly is stocked the inventory is adjusted
+properly.
+
+The Check Inventory option will cause Ledger-SMB to refuse to stock
+an assembly if the inventory required to produce the assembly would
+drop the part below the reorder point.
+
+
+SUBSECTION: Reporting
+
+Reporting
+
+
+SUBSUBSECTION: All Items and Parts Reports
+
+All Items and Parts Reports
+
+The All Items report provides a unified view of assemblies, parts, services,
+and labor for the company, while the Parts report confines it to parts.
+
+Types of reports are:
+
+ [Active] lists all items not marked as obsolete.
+ [On] Hand lists current inventory .
+ [Short] Lists all items which are stocked below their ROP.
+ [Obsolete] Lists all items which are marked as obsolete.
+ [Orphaned] Lists all items which have never had a transaction associated
+with them.
+One can also list these goods by invoice, order, or quotation.
+
+For best results, it is a good idea to enter some AR and AP data before
+running these reports.
+
+
+SUBSUBSECTION: Requirements
+
+Requirements
+
+This report is designed to assist managers determine the quantities
+of goods to order and/or stock. It compares the quantity on hand with
+the activity in a given time frame and provides a list of goods which
+need to be ordered and the relevant quantity.
+
+
+SUBSUBSECTION: Services and Labor
+
+Services and Labor
+
+This is similar to the Parts and All Items menu but only supports
+Active, Obsolete, and Orphaned reports.
+
+
+SUBSUBSECTION: Assemblies
+
+Assemblies
+
+This is similar to the Parts and All Items reports but it also provides
+an ability to list individual items in the assemblies as well.
+
+AP Invoices, Purchase Orders, and RFQ's are not available on this
+report.
+
+
+SUBSUBSECTION: Groups and Pricegroups
+
+Groups and Pricegroups
+
+These reports provide a simple interface for locating groups and pricegroups.
+The report types are similar to what they are for services.
+
+
+SUBSECTION: Translations
+
+Translations
+
+One can add translations so that they show up in the customer's native
+language in the issued invoice.
+
+To issue translations, one must have languages defined. One can then
+add translations to descriptions and part groups.
+
+
+SUBSECTION: How Cost of Goods Sold is tracked
+
+How Cost of Goods Sold is tracked
+
+Cost of Goods Sold is tracked on a First-In, First-out (FIFO) basis.
+When a part is purchased, its cost is recorded in the database. The
+cost of the item is then added to the inventory asset account. When
+the good is sold, the cost of the item is moved to the cost of goods
+sold account.
+
+This means that one must actually provide invoices for all goods entered
+at their actual cost. If one enters in
+$0 for the cost, the cost
+of goods sold will also be
+$0 when the item is sold. We will cover
+this entire process in more depth after we cover the AP and AR units
+below.
+
+
+SECTION: AP
+
+AP
+
+
+SUBSECTION: Basic AP Concepts
+
+Basic AP Concepts
+
+The Accounts Payable module tracks all financial commitments that
+the company makes to other businesses. This includes rent, utilities,
+etc. as well as orders of goods and services.
+
+
+SUBSECTION: Vendors
+
+Vendors
+
+A vendor is any business that the company agrees to pay money to.
+
+One can enter vendor information under AP- Vendors-
+Add Vendor. The vendor list can be searched under AP-
+Vendors- Reports- Search.
+
+Enter start and end-dates for each vendor. This will make searches
+and drop-down boxes faster when some vendors are no longer actively
+supporting your company.
+
+A few fields that need explanation are:
+
+ [BIC] Bank Identifier Code is often the same as the S.W.I.F.T.
+code. This is a code for the bank a customer uses for automated money
+transfers.
+ [IBAN] International Bank Account Number is related to the BIC
+and is used for cross-border automated money transfers.
+ [Terms] is the number of days one has to pay the invoice.
+ [Vendor] Number is automatically generated.
+
+SUBSECTION: AP Transactions
+
+AP Transactions
+
+AP Transactions are generally used for items other than goods and
+services. Utilities, rent, travel expenses, etc. could be entered
+in as an AP transaction.
+
+If the item is paid partially or in full when the transaction is entered,
+one can add payments to the payment section.
+
+All other payments can and should be entered under cash payment (below).
+
+The PO Number and Order Number fields are generally used to track
+associations with purchase orders sent to vendors, etc. These fields
+can be helpful for adding misc. expenses to orders for reporting purposes.
+
+The department drop-down box appears when one has created one or more
+departments. A transaction is not required to be associated with a
+department, but one can use this feature for budget tracking.
+
+With AP Transactions, there is no option for internal notes. All notes
+will appear on any printed version of the transaction.
+
+Note: Printing a transaction does not post it. No data is committed
+until the invoice is posted.
+
+
+SUBSECTION: AP Invoices
+
+AP Invoices
+
+AP Invoices are used to enter in the receipt of goods and services.
+Goods and services are deemed entered into the inventory when they
+are invoiced.
+
+This screen is reasonably similar to the AP Transaction Screen, though
+the part entry section is a bit different.
+
+The AP Invoice section has a capacity to separate internal notes from
+notes printed on the invoice. Note, however, that since these are
+received invoices, it is rare that one needs this ability.
+
+Note that Ledger-SMB can search for partial part numbers or descriptions.
+
+Also if you have a group you can use this to select the part.
+
+To remove a line item from an invoice or order, delete the partnumber
+and click update.
+
+
+SUBSUBSECTION: Correcting an AP Invoice
+
+Correcting an AP Invoice
+
+If an invoice is entered improperly, the methods used to correct it
+will vary depending on whether transaction reversal is enforced or
+not. If transaction reversal is not enforced, one can simply correct
+the invoice or transaction and repost. Note, however, that this violates
+generally accepted accounting principles.
+
+If transaction reversal is in effect, one needs to create a duplicate
+invoice with exactly opposite values entered. If one part was listed as
+received, then one should enter a negative one for the quantity. Then one
+can enter the invoice number as the same as the old one. Add an R to the
+end to show that it is a reversing transaction. Once this is posted, one can
+enter the invoice correctly.
+
+
+SUBSECTION: Cash payment And Check Printing
+
+Cash payment And Check Printing
+
+It is a bad idea to repost invoices/transactions just to enter a payment.
+The Cash- Payment window allows one to enter payments against
+AP invoices or transactions.
+
+The printing capability can be used to print checks. The default template
+is NEBS 9085, though you can use 9082 as well (as Quickbooks does).
+
+The source field is used to store an identifying number of the source
+document, such as the check number. One must select the item to have
+it paid, and then enter the amount. One can then print a check.
+
+
+SUBSUBSECTION: Rapid Payment Entry Screen
+
+Rapid Payment Entry Screen
+
+One can also use the rapid payment entry screen to print multiple
+checks. However, this does not allow you to print the multiple checks
+to the screen as a separate document is created for each check. In
+this event, one must print directly to a printer as postscript.
+
+
+SUBSECTION: Transaction/Invoice Reporting
+
+Transaction/Invoice Reporting
+
+
+SUBSUBSECTION: Transactions Report
+
+Transactions Report
+
+This report is designed to help you locate AP transactions based on
+various criteria. One can search by vendor, invoice number, department,
+and the like. One can even search by the shipping method.
+
+The summary button will show what was placed where, while the details
+button will show all debits and credits associated with the transaction.
+
+To view the invoice, click on the invoice number. In the detail view,
+to view the account transactions as a whole, click on the account
+number.
+
+Open invoices are ones not fully paid off, while closed invoices
+are those that have been paid.
+
+
+SUBSUBSECTION: Outstanding Report
+
+Outstanding Report
+
+The outstanding report is designed to help you locate AP transactions
+that are not paid yet. The ID field is mostly useful for locating
+the specific database record if a duplicate invoice number exists.
+
+
+SUBSUBSECTION: AP Aging Report
+
+AP Aging Report
+
+This report can tell you how many invoices are past due and by how
+much.
+
+A summary report just shows vendors while a detail report shows individual
+invoices.
+
+
+SUBSUBSECTION: Tax Paid and Non-taxable Report
+
+Tax Paid and Non-taxable Report
+
+These reports have known issues. It is better to use the GL reports and filter
+accordingly.
+
+SUBSECTION: Vendor Reporting
+
+Vendor Reporting
+
+
+SUBSUBSECTION: Vendor Search
+
+Vendor Search
+
+The Vendor Search screen can be used to locate vendors or AP transactions
+associated with those vendors.
+
+The basic types of reports are:
+
+ [All] Lists all vendors
+ [Active] Lists those vendors currently active
+ [Inactive] Lists those vendors who are currently inactive. time
+frame.
+ [Orphaned] Lists those vendors who do not have transactions associated
+with them. These vendors can be deleted.
+One can include purchase orders, Requests for Quotations, AP invoices,
+and AP transactions on this report as well if they occur between the
+from and to dates.
+
+
+SUBSUBSECTION: Vendor History
+
+Vendor History
+
+This report can be used to obtain information about the past goods
+and services ordered or received from vendors. One can find quantities,
+partnumber, and sell prices on this report. This facility can be used
+to search RFQ's, Purchase Orders, and AP Invoices.
+
+
+SECTION: AR
+
+AR
+
+
+SUBSECTION: Customers
+
+Customers
+
+Customers are entered in using the AR- Customers-
+Add Customer menu.
+
+The salesperson is autopopulated with the current user who is logged
+in. Otherwise, it looks fairly similar to the Vendor input screen.
+Customers, like vendors can be assigned languages, but it is more
+important to do so because invoices will be printed and sent to them.
+
+The credit limit field can be used to assign an amount that one is
+willing to do for a customer on credit.
+
+
+SUBSUBSECTION: Customer Price Matrix
+
+Customer Price Matrix
+
+The price list button can be used to enter specific discounts to the
+customer, and groups of customers can be assigned a pricegroup for
+the purpose of offering specific discounts on specific parts to the
+customer. Such discounts can be temporary or permanent.
+
+
+SUBSECTION: AR Transactions
+
+AR Transactions
+
+AR Transactions are where one can add moneys owed the business by
+customers. One can associate these transactions with income accounts,
+and add payments if the item is paid when the invoice is issued.
+
+The PO number field is used to track the PO that the customer sent.
+This makes it easier to find items when a customer is asking for clarification
+on a bill, for example.
+
+
+SUBSECTION: AR Invoices
+
+AR Invoices
+
+AR Invoices are designed to provide for the delivery of goods and
+services to customers. One would normally issue these invoices at
+the time when the everything has been done that is necessary to get
+paid by the customer.
+
+As with AP invoices, one can search for matches to partial part numbers
+and descriptions, and enter initial payments at this screen.
+
+
+SUBSECTION: Cash Receipt
+
+Cash Receipt
+
+The Cash- Receipt screen allows you to accept prepayments
+from customers or pay single or multiple invoices after they have
+been posted. One can print a receipt, however the current templates
+seem to be based on check printing templates and so are unsuitable
+for this purpose. This presents a great opportunity for improvement.
+
+
+SUBSUBSECTION: Cash Receipts for multiple customers
+
+Cash Receipts for multiple customers
+
+The cash- receipts screen allows you to accept payments
+on all open customer invoices of all customers at once. One could
+print (directly to a printer only) all receipts to be sent out if
+this was desired.
+
+
+SUBSECTION: AR Transaction Reporting
+
+AR Transaction Reporting
+
+The AR Outstanding report is almost identical to the AP Outstanding
+report and is not covered in any detail in this document.
+
+
+SUBSUBSECTION: AR Transactions Report
+
+AR Transactions Report
+
+This is almost identical to the AP Transactions Report.
+
+If a customer's PO has been associated with this transaction, one
+can search under this field as well.
+
+
+SUBSUBSECTION: AR Aging Report
+
+AR Aging Report
+
+This report is almost identical to the AP Aging report, with the exception
+that one can print up statements for customer accounts that are overdue.
+One more application is to calculate interest based on balance owed
+so that these can be entered as AR transactions associated with the
+customer.
+
+
+SUBSECTION: Customer Reporting
+
+Customer Reporting
+
+These reports are almost identical to the AP Vendor reports and are
+not discussed in these notes.
+
+
+SECTION: Projects
+
+Projects
+
+
+SUBSECTION: Project Basics
+
+Project Basics
+
+A project is a logical collection of AR and AP transactions, orders,
+and the like that allow one to better manage specific service or product
+offerings. Ledger-SMB does not offer comprehensive project management
+capabilities, and projects are only used here as they relate to accounting.
+
+One can also add translated descriptions to the project names as well.
+
+
+SUBSECTION: Timecards
+
+Timecards
+
+Timecards allow one to track time entered on specific services. These
+can then be used to generate invoices for the time entered.
+
+The non-chargeable is the number of hours that are not billed on the
+invoice.
+
+One can then generate invoices based on this information.
+
+The project field is not optional.
+
+
+SUBSECTION: Projects and Invoices
+
+Projects and Invoices
+
+One can select the project id for line items of both AR and AP invoices.
+These will then be tracked against the project itself.
+
+
+SUBSECTION: Reporting
+
+Reporting
+
+
+SUBSUBSECTION: Timecard Reporting
+
+Timecard Reporting
+
+The Timecard Report allows one to search for timecards associated
+with one or more projects. One can then use the total time in issuing
+invoices (this is not automated yet).
+
+
+SUBSUBSECTION: Project Transaction Reporting
+
+Project Transaction Reporting
+
+The Standard or GIFI options can be used to create different reports
+(for example, for Canadian Tax reporting purposes).
+
+This report brings up a summary that looks sort of like a chart of
+accounts. Of one clicks on the account numbers, one can see the transactions
+associated with the project.
+
+
+SUBSUBSECTION: List of Projects
+
+List of Projects
+
+This provides a simple way of searching for projects to edit or modify.
+
+
+SUBSECTION: Possibilities for Using Projects
+
+Possibilities for Using Projects
+
+ One can use them similar to departments for tracking work done for
+a variety of customers.
+ One can use them for customer-specific projects, such as this training.
+
+SECTION: Quotations and Order Management
+
+Quotations and Order Management
+
+This unit will introduce the business processes that Ledger-SMB allows.
+These processes are designed to allow various types of businesses
+to manage their orders and allow for rudimentary customer relationship
+management processes to be built around this software. In this section,
+we will introduce the work flow options that many businesses may use
+in their day-to-day use of the software.
+
+
+SUBSECTION: Sales Orders
+
+Sales Orders
+
+Sales orders represent orders from customers that have not been delivered
+or shipped yet. These orders can be for work in the future, for
+back ordered products, or work in progress. A sales order can be generated
+form an AR invoice or from a quotation automatically.
+
+
+SUBSECTION: Quotations
+
+Quotations
+
+Quotations are offers made to a customer but to which the customer
+has not committed to the work. Quotations can be created from Sales
+orders or AR Invoice automatically.
+
+
+SUBSECTION: Shipping
+
+Shipping
+
+The Shipping module (Shipping- Shipping) allows one to
+ship portions or entireties of existing sales orders, printing pick
+lists and packing slips.
+
+One can then generate invoices for those parts that were shipped.
+
+In general, one will be more likely to use these features if they
+have multiple warehouses that they ship from. More likely most customers
+will just generate invoices from orders.
+
+
+SUBSECTION: AR Work Flow
+
+AR Work Flow
+
+
+SUBSUBSECTION: Service Example
+
+Service Example
+
+A customer contacts your firm and asks for a quote on some services.
+Your company would create a quotation for the job and email it to
+the customer or print it and mail it. Once the customer agrees to
+pay, one creates a sales order from the quotation.
+
+When the work is completed, the sales order is converted into a sales
+invoice and this is presented to the customer as a bill.
+
+Note that in some cases, this procedure may be shortened. If the customer
+places an order without asking for a quotation and is offered a verbal
+quote, then one might merely prepare the sales order.
+
+
+
+
+
+CAPTION: Simple AR Service Invoice Workflow Example
+
+Simple AR Service Invoice Workflow Example
+
+simple_ar_dataflow
+
+
+
+SUBSUBSECTION: Single Warehouse Example
+
+Single Warehouse Example
+
+A customer contacts your firm and asks for a quotation for shipping
+a part. You would create the quotation and when you get confirmation,
+convert it to an order. Once the parts are in place you could go to
+shipping and ship the part.
+
+The billing department can then generate the invoice from the sales
+order based on what merchandise has been shipped and mail it to the
+customer.
+
+Note that this requires that you have the part in your inventory.
+
+
+
+
+
+CAPTION: AR Workflow with Shipping
+
+AR Workflow with Shipping
+
+ar_workflow_ship
+
+
+
+SUBSUBSECTION: Multiple Warehouse Example
+
+Multiple Warehouse Example
+
+A customer contacts your firm and asks for a quotation for a number
+of different parts. You would create a quotation and when you get
+confirmation, convert it to a sales order. When you go to ship the item,
+you would select the warehouse in the drop-down menu, and select the
+parts to ship. One would repeat with other warehouses until the entire
+order is shipped.
+
+Then the billing department would go to the sales order and generate
+the invoice. It would then be mailed to the customer.
+
+
+
+
+
+CAPTION: Complex AR Workflow with Shipping
+
+Complex AR Workflow with Shipping
+
+ar_workflow_complex
+
+
+
+SUBSECTION: Requests for Quotation (RFQ)
+
+Requests for Quotation (RFQ)
+
+A request for quotation would be a formal document one might submit
+to a vendor to ask for a quote on a product or service they might
+offer. These can be generated from Purchase Orders or AP Invoices.
+
+
+SUBSECTION: Purchase Orders
+
+Purchase Orders
+
+A purchase order is a confirmation that is issued to the vendor to
+order the product or service. Many businesses will require a purchase
+order with certain terms in order to begin work on a product. These
+can be generated from RFQ's or AP Invoices.
+
+
+SUBSECTION: Receiving
+
+Receiving
+
+The Shipping- Receiving screen allows you to track the
+parts received from an existing purchase order. Like shipping, it
+does not post an invoice but tracks the received parts in the order.
+
+
+SUBSECTION: AP Work Flow
+
+AP Work Flow
+
+
+SUBSUBSECTION: Bookkeeper entering the received items, order completed in full
+
+Bookkeeper entering the received items, order completed in full
+
+Your company inquires about the price of a given good or service from
+another firm. You submit an RFQ to the vendor, and finding that the
+price is reasonable, you convert it to an order, adjust the price
+to what they have quoted, and save it. When the goods are delivered
+you convert the order into an AP invoice and post it.
+
+
+
+
+
+CAPTION: Simple AP Workflow
+
+Simple AP Workflow
+
+simple_ap_workflow
+
+
+
+SUBSUBSECTION: Bookkeeper entering received items, order completed in part
+
+Bookkeeper entering received items, order completed in part
+
+Your company inquires about the price of a given good or service from
+another firm, You submit an RFQ to the vendor, and finding that the
+price is acceptable, you convert it into an order, adjusting the price
+to what they have quoted, and save it. When some of the goods are
+received, you open up the purchase order, enter the number of parts
+received, convert that order into an invoice, and post it. Repeat
+until all parts are received.
+
+
+
+
+
+CAPTION: AP Workflow with Receiving
+
+AP Workflow with Receiving
+
+ap_workflow_ship
+
+
+
+SUBSUBSECTION: Receiving staff entering items
+
+Receiving staff entering items
+
+Your company inquires about the price of a given good or service from
+another firm, You submit an RFQ to the vendor, and finding that the
+price is acceptable, you convert it into an order, adjusting the price
+to what they have quoted, and save it. When some or all of the goods
+are received, the receiving staff goes to Shipping-Receiving, locates
+the purchase order, and fills in the number of items received.
+
+The bookkeeper can then determine when all items have been received
+and post the invoice at that time.
+
+
+
+
+
+CAPTION: Complex AP Workflow
+
+Complex AP Workflow
+
+ap_workflow_complex
+
+
+
+SUBSECTION: Generation and Consolidation
+
+Generation and Consolidation
+
+
+SUBSUBSECTION: Generation
+
+Generation
+
+The Generation screen allows you to generate Purchase Orders based
+on sales orders. One selects the sales orders one wants to use, and
+clicks `
+"Generate Purchase Orders.`\" Then one selects
+clicks on the parts to order, adjusts the quantity if necessary, and
+clicks `
+"Select Vendor.`\" This process is repeated
+for every vendor required. Then the Generate Orders button is clicked.
+
+
+SUBSUBSECTION: Consolidation
+
+Consolidation
+
+One can consolidate sales and/or purchase orders using this screen.
+For the consolidation to work you must have more than one order associated
+with the relevant customer or vendor.
+
+
+SUBSECTION: Reporting
+
+Reporting
+
+The reporting functionality in the order management is largely limited
+to the ability to locate purchase orders, sales orders, RFQ's, and
+quotations.
+
+
+SUBSECTION: Shipping Module: Transferring Inventory between Warehouses
+
+Shipping Module: Transferring Inventory between Warehouses
+
+One can transfer inventory between warehouses if necessary by using
+the Shipping- Transfer Inventory screen.
+
+
+SECTION: HR
+
+HR
+
+The HR module is currently limited to tracking employees for and their
+start and end dates. It has very little other functionality. One could
+build payroll systems that could integrate with it however.
+
+
+SECTION: POS
+
+POS
+
+LedgerSMB 1.2 includes a number of components merged from Metatron Technology
+Consulting's SL-POS. Although it is still not a perfect solution, it is greatly improved in both workflow and hardware support. It is suitable for retail
+establishments at the moment.
+
+SUBSECTION: Sales Screen
+
+Sales Screen
+
+The sales screen looks very much like a normal invoice entry screen
+with a few differences.
+
+ The discount text field is not available, nor is the unit field..
+ The next part number is automatically focused when the data loads
+for rapid data entry.
+ Hot keys for the buttons are Alt-U for update, Alt-P for print, Alt-O
+for post, and Alt-R for print and post.
+ Part Groups appear at the bottom of the screen.
+ Alt-N moves the cursor to the next free payment line.
+
+SUBSECTION: Possibilities for Data Entry
+
+Possibilities for Data Entry
+
+ Barcode scanners can be used to scan items in as they are being rung
+in.
+ One could use touch screens, though this would ideally require some
+custom stylesheets to make it efficient.
+
+SUBSECTION: Hardware Support
+
+Hardware Support
+
+As LedgerSMB is a web-based application, the web browser usually
+does not allow the page to write to arbitrary files. Therefore hardware
+support for pole displays, etc. is not readily possible from the application
+itself. LedgerSMB gets around this limitation by using an additional set of
+network sockets from the server to the client to control its hardware. This
+naturally requires that other software is also running on the client.
+
+Notes for specific types of hardware are as follows:
+
+ [Touch] screens: The default stylesheet is not really usable from
+a touchscreen as the items are often too small. One would need to
+modify the stylesheets to ensure that the relevant items would be
+reasonable. Setting down the resolution would also help.
+ [Receipt] Printers: ESC/POS printers generally work in text mode.
+Control sequences can be embedded in the template as necessary.
+ [Pole] Displays: Generally supported. Only the Logic Controls PD3000 is
+supported out of the box, but making this work for other models ought to be
+trivial.
+ [Cash] Drawers: These should be attached to the printer. The control
+codes is then specified in the pos.conf.pl so that the command is sent to the
+printer when the open till button is pushed.
+ [Barcode] Scanners: Most customers use decoded barcode scanners
+through a keyboard wedge interface. This allows them to scan items
+as if they were typing them on the keyboard.
+
+SUBSECTION: Reports
+
+Reports
+
+
+SUBSUBSECTION: Open Invoices
+
+Open Invoices
+
+The POS- Open screen allows one to find any POS receipts
+that are not entirely paid off.
+
+
+SUBSUBSECTION: Receipts
+
+Receipts
+
+The POS- Receipts screen allows one to bring up a basic
+record of the POS terminals. It is not sufficient for closing the
+till, however, though it may help for reconciliation.
+
+The till column is the last component or octet of the terminal's IP
+address. Therefore it is a good idea to try to avoid having IP addresses
+where the last octet is the same.
+
+All entries are grouped by date and source in this report.
+
+
+SECTION: General Ledger
+
+General Ledger
+
+
+SUBSECTION: GL Basics
+
+GL Basics
+
+The General Ledger is the heart of Ledger-SMB. Indeed, Ledger-SMB
+is designed to be as close as possible to a software equivalent of
+a paper-based accounting program (but with no difference between the
+General Ledger and General Journal).
+
+
+SUBSUBSECTION: Paper-based accounting systems and the GL
+
+Paper-based accounting systems and the GL
+
+In order to understand the principle of the General Ledger, one must
+have a basic understanding of the general process of bookkeeping using
+double-entry paper-based accounting systems.
+
+Normally when a transaction would be recorded, it would first be recorded
+in the `
+"General Journal`\" which would contain detailed
+information about the transaction, notes, etc. Then the entries from
+the General Journal would be transcribed to the General Ledger, where
+one could keep closer tabs on what was going on in each account.
+
+In the general journal, all transactions are listed chronologically
+with whatever commentary is deemed necessary, while in the general
+ledger each account has its own page and transactions are recorded
+in a simple and terse manner. The General Journal is the first place
+the transaction is recorded and the General Ledger is the last.
+
+At the end of the accounting period, the GL transactions would be
+summarized into a trial balance and this would be used for creating
+financial statements and closing the books at the end of the year.
+
+
+SUBSUBSECTION: Double Entry Examples on Paper
+
+Double Entry Examples on Paper
+
+Let us say that John starts his business with an initial investment
+of
+$10,000.
+
+This is recorded in the General Journal as follows (in this example,
+suppose it is page 1):
+
+
+Date & Accounts and Explanation & Ref & DEBIT & CREDIT
+March 1 & Checking Account & 1060 & 10000.00 &
+ & John Doe Capital & 3011 & & 10000.00
+ & John Doe began a business & & &
+ & with an investment of & & &
+ & $10000 & & &
+
+
+
+
+This would then be transcribed into two pages of the General Ledger.
+The first page might be the Checking Account page:
+
+
+
+DATE & EXPLANATION & REF. & DEBITS & DATE & EXPLANATION & REF. & CREDITS
+March 1 & & J1 & 10000.00 & & & &
+
+
+
+
+On the John Doe Capital page, we would add a similar entry:
+
+
+
+DATE & EXPLANATION & REF. & DEBITS & DATE & EXPLANATION & REF. & CREDITS
+ & & & & March 1 & & J1 & 10000.00
+
+
+
+
+SUBSUBSECTION: The GL in Ledger-SMB
+
+The GL in Ledger-SMB
+
+The paper-based accounting procedure works well when one is stuck
+with paper recording requirements but it has one serious deficiency---
+all of this transcribing creates an opportunity for errors.
+
+Relational databases relieve the need for such transcription as it
+is possible to store everything physically in a way similar to the
+way a General Journal is used in the paper-based systems and then
+present the same information in ways which are more closely related
+to the General Ledger book.
+
+This is the exact way that the General Ledger is used in Ledger-SMB.
+The actual data is entered and stored as if it was a general journal,
+and then the data can be presented in any number of different ways.
+
+All modules of Ledger-SMB that involve COA accounts store their data
+in the General Ledger (it is a little more complex than this but this
+is very close to the actual mechanism).
+
+
+SUBSECTION: Cash Transfer
+
+Cash Transfer
+
+The simplest form of GL entry in Ledger-SMB is the Cash-
+Transfer screen. This screen shows two transaction lines, and fields
+for reference, department, description, and notes.
+
+The field descriptions are as follows:
+
+ [Reference] refers to the source document for the transfer. One
+can use transfer sheets, bank receipt numbers, etc for this field.
+ [Description] is optional but really should be filled in. It ought
+to be a description of the transaction.
+ [Notes] provide supplemental information for the transaction.
+ [FX] indicates whether foreign exchange is a factor in this transaction.
+ [Debit] indicates money going into the asset account.
+ [Credit] indicates money coming out of the asset account.
+ [Source] is the source document for that portion of the transaction.
+ [Memo] lists additional information as necessary.
+ [Project] allows you to assign this line to a project.
+The credit and debit options seem to be the opposite of what one would
+think of concerning one's bank account. The reason is that your bank
+statement is done from the bank's point of view. Your bank account balance
+is an asset to you and therefor you show it as having a debit balance, but
+to the bank it is money they owe you and so they show it as having a credit
+balance.
+
+Note that in this screen, when an item is updated, it will reduce
+the number of lines to those already filled in plus an extra line
+for the new line in the data entry.
+
+
+SUBSECTION: GL Transactions
+
+GL Transactions
+
+The GL Transaction screen (General Ledger- Add Transaction)
+is identical to the Cash Transfer screen with the exception that it
+starts with nine lines instead of two. Otherwise, they are identical.
+
+Again, one must be careful with debits and credits. Often it is easy
+to get confused. It is generally worth while to go back to the principle
+that one tracks them with regard to their impact on the equity accounts.
+So expenses are credits because they debit the equity accounts, and
+income is a debit because it credits the retained earning equity account.
+
+
+SUBSECTION: Payroll as a GL transaction
+
+Payroll as a GL transaction
+
+Currently payroll must be done as a GL transaction. The attempts to
+create a payroll system that would ship with LSMB have largely stalled.
+
+Most customers running their businesses will have an idea of how to
+do this.
+
+
+
+
+
+CAPTION: Payroll as a GL Transaction (Purely fictitious numbers)
+
+Payroll as a GL Transaction (Purely fictitious numbers)
+
+[Table, & separates fields, 5 fields per row. ]
+Account &
+Debit &
+Credit &
+5101 Wages and Salaries &
+500 &
+
+2032 Accrued Wages &
+&
+450
+2033 Fed. Income Tax wthd &
+&
+30
+2034 State Inc. Tax. wthd &
+&
+15
+2035 Social Security wthd &
+&
+3
+2036 Medicare wthd &
+&
+2
+2032 Accrued Wages &
+450 &
+
+1060 Checking Acct &
+&
+450
+
+
+
+
+SUBSECTION: Reconciliation
+
+Reconciliation
+
+To reconcile an account (say, when one would get a checking account
+statement), one would go to cash/reconciliation, and check off the
+items that have cleared. One can then attempt to determine where any
+errors lie by comparing the total on the statement with the total
+that LSMB generates.
+
+This can be done for other accounts too, such as petty cash.
+Petty cash denotes a drawer of cash that is used to pay small expenses.
+When an expense is paid, it is recorded on a slip of paper that is
+stored for reconciliation purposes.
+
+
+
+SUBSECTION: Reports
+
+Reports
+
+The most flexible report in Ledger-SMB is the GL report because it
+has access to the entire set of financial transactions of a business.
+Every invoice posted, payment made or received, etc. can be located
+here.
+
+The search criteria include:
+
+ [Reference] is the invoice number, or other reference number associated
+with the transaction.
+ [Source] is the field related to the source document number in
+a payment or other transaction.
+Source documents are things like receipts, canceled checks, etc. that
+can be used to verify the existence and nature of a transaction.
+
+ [Memo] relates to the memo field on a payment.
+ [Department] can be used to filter results by department.
+ [Account] Type can be used to filter results by type of account
+(Asset, Liability, etc.)
+ [Description] can be used to filter by GL description or by
+customer/vendor name.
+The actual format of the report looks more like what one would expect
+in a paper accounting system's general journal than a general ledger
+per se. A presentation of the data that is more like the paper general
+ledger is found in the Chart of Accounts report.
+
+
+SUBSUBSECTION: GL as access to almost everything else
+
+GL as access to almost everything else
+
+The GL reports can be used to do all manner of things. One can determine,
+for example, which AP invoice or transaction was paid with a certain
+check number or which invoice by a specific customer was paid by a specific
+check number.
+
+
+SECTION: Recurring Transactions
+
+Recurring Transactions
+
+Any transaction or invoice may be repeated a number of times in regular
+intervals. To schedule any GL, AR, or AP transaction or invoice, click
+the schedule button.
+
+In general the reference number should be left blank as this will
+force Ledger-SMB to create a new invoice or transaction number for
+each iteration. The rest of the options are self-explanatory. Note
+that a blank number if iterations will result in no recurrences of
+the transaction.
+
+To process the recurring transactions, click on the Recurring Transactions
+option on the main menu select the ones you want to process and click
+`
+"Process Transactions.`\"
+
+
+SECTION: Financial Statements and Reports
+
+Financial Statements and Reports
+
+Financial statements and reports are a very important part of any
+accounting system. Accountants and business people rely on these reports
+to determine the financial soundness of the business and its prospects
+for the next accounting period.
+
+
+SUBSECTION: Cash v. Accrual Basis
+
+Cash v. Accrual Basis
+
+Financial statements, such as the Income Statement and Balance Sheet
+can be prepared either on a cash or accrual basis. In cash-basis accounting,
+the income is deemed earned when the customer pays it, and the expenses
+are deemed incurred when the business pays them.
+
+There are a number of problems with cash-basis accounting from a business
+point of view. The most serious is that one can misrepresent the wellbeing
+of a business by paying a large expense after a deadline. Thus cash-basis
+accounting does not allow one to accurately pair the income with the
+related expense as these are recorded at different times. If one cannot
+accurately pair the income with the related expense, then financial
+statements cannot be guaranteed to tell one much of anything about
+the well-being of the business.
+
+In accrual basis accounting, income is considered earned when the
+invoice is posted, and expenses are considered incurred at the time
+when the goods or services are delivered to the business. This way,
+one can pair the income made from the sale of a product with the expense
+incurred in bringing that product to sale. This pairing allows for
+greater confidence in business reporting.
+
+
+SUBSECTION: Viewing the Chart of Accounts and Transactions
+
+Viewing the Chart of Accounts and Transactions
+
+The Reports-- Chart of Accounts will provide the chart
+of accounts along with current totals in each account.
+
+If you click on an account number, you will get a screen that allows
+you to filter out transactions in that account by various criteria.
+One can also include AR/AP, and Subtotal in the report.
+
+The report format is similar to that of a paper-based general ledger.
+
+
+SUBSECTION: Trial Balance
+
+Trial Balance
+
+
+SUBSUBSECTION: The Paper-based function of a Trial Balance
+
+The Paper-based function of a Trial Balance
+
+In paper-based accounting systems, the accountant at the end of the
+year would total up the debits and credits in every account and transfer
+them onto another sheet called the trial balance. The accountant would
+check to determine that the total debits and credits were equal and
+would then transfer this information onto the financial statements.
+It was called a trial balance because it was the main step at which
+the error-detection capabilities of double-entry accounting systems
+were used.
+
+
+SUBSUBSECTION: Running the Trial Balance Report
+
+Running the Trial Balance Report
+
+This report is located under Reports -- Trial Balance.
+One can filter out items by date, accounting period, or department.
+One can run the report by accounts or using GIFI classifications to
+group accounts together.
+
+From this report, you can click on the account number and see all
+transactions on the trial balance as well as whether or not they have
+been reconciled.
+
+
+SUBSUBSECTION: What if the Trial Balance doesn't Balance?
+
+What if the Trial Balance doesn't Balance?
+
+If the trial balance does not balance, get technical support immediately.
+This usually means that transactions were not entered properly. Some
+may have been out of balance, or some may have gone into non-existent
+accounts (believe it or not, Ledger-SMB does not check this latter
+issue).
+
+
+SUBSUBSECTION: Trial Balance as a Summary of Account Activity
+
+Trial Balance as a Summary of Account Activity
+
+The trial balance offers a glance at the total activity in every account.
+It can provide a useful look at financial activity at a glance for
+the entire business.
+
+
+SUBSUBSECTION: Trial Balance as a Budget Planning Tool
+
+Trial Balance as a Budget Planning Tool
+
+By filtering out departments, one can determine what a department
+earned and spent during a given financial interval. This can be used
+in preparing budgets for the next accounting period.
+
+
+SUBSECTION: Income Statement
+
+Income Statement
+
+The Income Statement is another tool that can be used to assist with
+budgetary planning as well as provide information on the financial
+health of a business.
+
+The report is run from Reports-- Income Statement. The
+report preparation screen shows the following fields:
+
+ [Department] allows you to run reports for individual departments.
+This is useful for budgetary purposes.
+ [Project] allows you to run reports on individual projects. This
+can show how profitable a given project was during a given time period.
+ [From] and To allow you to select arbitrary from and to dates.
+ [Period] allows you to specify a standard accounting period.
+ [Compare to] fields allow you to run a second report for comparison
+purposes for a separate range of dates or accounting period.
+ [Decimalplaces] allows you to display numbers to a given precision.
+ [Method] allows you to select between accrual and cash basis reports.
+ [Include] in Report provides various options for reporting.
+ [Accounts] allows you to run GIFI reports instead of the standard
+ones.
+The report shows all income and expense accounts with activity during
+the period when the report is run, the balances accrued during the
+period, as well as the total income and expense at the bottom of each
+section. The total expense is subtracted from the total income to
+provide the net income during the period. If there is a loss, it appears
+in parentheses.
+
+
+SUBSUBSECTION: Uses of an Income Statement
+
+Uses of an Income Statement
+
+The income statement provides a basic snapshot of the overall ability
+of the business to make money. It is one of the basic accounting statements
+and is required, for example, on many SEC forms for publicly traded
+firms.
+
+Additionally, businessmen use the income statement to look at overall
+trends in the ability of the business to make money. One can compare
+a given month, quarter, or year with a year prior to look for trends
+so that one can make adjustments in order to maximize profit.
+
+Finally, these reports can be used to provide a look at each department's
+performance and their ability to work within their budget. One can
+compare a department or project's performance to a year prior and
+look for patterns that can indicate problems or opportunities that
+need to be addressed.
+
+
+SUBSECTION: Balance Sheet
+
+Balance Sheet
+
+The balance sheet is the second major accounting statement supported
+by Ledger-SMB. The balance sheet provides a snapshot of the current
+financial health of the business by comparing assets, liabilities,
+and equity.
+
+In essence the balance sheet is a statement of the current state of
+owner equity. Traditionally, it does not track changes in owner equity
+in the same way the Statement of Owner Equity does.
+
+The Balance Sheet report preparation screen is much simpler than the
+Income Statement screen. Balance sheets don't apply to projects, but
+they do apply to departments. Also, unlike an income statement, a
+balance sheet is fixed for a specific date in time. Therefore one
+does not need to select a period.
+
+The fields in creating a balance sheet are:
+
+ [Department] allows you to run separate balance sheets for each
+department.
+ [As] at specifies the date. If blank this will be the current date.
+ [Compare to] specifies the date to compare the balance sheet to.
+ [Decimalplaces] specifies the number of decimal places to use.
+ [Method] selects between cash and accrual basis.
+ [Include] in report allows you to select supplemental information
+on the report.
+ [Accounts] allows you to select between standard and GIFI reports.
+The balance sheet lists all asset, liability, and equity accounts
+with a balance. Each category has a total listed, and the total of
+the equity and liability accounts is also listed.
+
+The total assets should be equal to the sum of the totals of the liability
+and equity accounts.
+
+
+SUBSECTION: What if the Balance Sheet doesn't balance?
+
+What if the Balance Sheet doesn't balance?
+
+Get technical support immediately, This may indicate that out of balance
+transactions were entered or that transactions did not post properly.
+
+
+SUBSECTION: No Statement of Owner Equity?
+
+No Statement of Owner Equity?
+
+The Statement of Owner Equity is the one accounting statement that
+Ledger-SMB does not support. However, it can be simulated by running
+a balance sheet at the end of the time frame in question and comparing
+it to the beginning. One can check this against an income statement
+for the period in question to verify its accuracy. The statement of
+owner equity is not as commonly used now as it once was.
+
+
+SECTION: The Template System
+
+The Template System
+
+Ledger-SMB allows most documents to be generated according to a template
+system. This allows financial statements, invoices, orders, and the
+like to be customized to meet the needs of most businesses. Company
+logos can be inserted, the format can be radically altered, one can
+print letters to be included with checks to vendors instead of the
+checks themselves, and the like. In the end, there is very little
+that cannot be accomplished regarding modification of these documents
+with the template system.
+
+One can define different templates for different languages, so that
+a customer in Spain gets a different invoice than a customer in Canada.
+
+
+SUBSECTION: Text Templates
+
+Text Templates
+
+The only template that uses a text-only format is the POS receipt.
+This example provides the simplest way to understand the template
+system.
+
+The first two lines are:
+
+
+
+
+
+
+
+The first line tells Ledger-SMB to print the company name as passed
+to it via a variable, centered, with a page width of 40 characters.
+The second line does the same thing with the address.
+
+These variables are usually passed to the invoice using form fields
+(hidden or otherwise) in the submitting web page. The printing script,
+however, can disable some of these fields or add others via database
+lookups and the like.
+
+In all types of templates, variable substitution occurs between
+
+and
+
+width but these are really only useful in text templates.
+
+
+SUBSECTION: HTML Templates
+
+HTML Templates
+
+The following templates exist in HTML format:
+
+ Income Statement
+ Balance Sheet
+ Invoice (AR)
+ AR Transaction
+ AP Transaction
+ Packing List
+ Pick List
+ Sales Order
+ Work Order
+ Purchase Order
+ Bin List
+ Statement
+ Quotation
+ RFQ
+ Time Card
+These templates can be edited by an HTML editor. However, it is generally
+recommended that one back up templates first. The reason is that some
+HTML editors will fully re-parse the HTML and save it back without
+what they see as invalid tags. Most editors, however, will save the
+variable substitution tags because similar tags are also used by Microsoft's
+active server pages.
+
+Finally, some editors are known to mangle formatting, so many problems
+can be avoided by ensuring that one has a backup of the templates,
+especially if they have already been customized.
+
+
+SUBSECTION: LaTeX Templates
+
+
+ Templates
+
+The following templates, by default, are available in
+ :
+
+ Invoice
+ AR Transaction
+ AP Transaction
+ Packing List
+ Pick List
+ Sales Order
+ Work Order
+ Purchase Order
+ Bin List
+ Statement
+ Check
+ Receipt
+ Quotation
+ RFQ
+ Time Card
+
+ templates allow one to generate PDF and postscript documents
+and print directly to a postscript-enabled printer or print software
+(like CUPS).
+
+
+ templates can be edited using a standard text editor (like
+vim or emacs), or using a synchronous
+ implementation such
+as .
+
+
+SUBSUBSECTION: What is LaTeX ?
+
+What is LaTeX?
+
+
+LaTeX (pronounced LAY-tech) is an extension on the TeX typesetting
+system. It largely consists of a set of macros that allow one to focus
+on the structure of the document while letting the
+ engine
+do the heavy lifting in terms of determining the optimal formatting
+for the page.
+ is used in a large number of academic journals
+(including those of the American Mathematics Association). It is available
+at http://www.tug.org and is included in most Linux distributions.
+
+Like HTML,
+ uses plain text documents to store the formatting
+information and then when the document is rendered, attempts to fit
+it onto a page.
+supports the concept of stylesheets, allowing one to separate content
+from format, and this feature is used in many higher-end applications,
+like journal publication.
+
+Unlike HTML,
+ is a complete though simple programming language
+that allows one to redefine internals of the system for formatting
+purposes.
+
+This document is written in .
+
+
+SUBSUBSECTION: Using LyX to Edit LaTeX Templates
+
+Using to Edit
+ Templates
+
+ is a synchronous
+ editor that runs on Windows, UNIX/Linux,
+and Mac OS X. It requires an installed -2e implementation
+and can be obtained at http://www.lyx.org. Like the most common
+
+ implementations, it is open source and is included with most
+Linux distributions.
+
+SUBSECTION: Customizing Logos
+
+Customizing Logos
+
+
+ requires different formats of logos depending on whether
+the document is going to be generated as a PDF or as postscript. Postscript
+requires an embedded postscript graphic, while PDF requires any type
+of graphic other than embedded postscript. Usually one uses a PNG's
+for PDF's, though GIF's could be used as well. The logo for a
+ document
+resides in the users directory.
+
+HTML documents can have logos in many different formats. PNG's are
+generally preferred for printing reasons. The image can be stored
+anywhere and merely referenced in the HTML.
+
+Note: Always test the an invoice with images to ensure that
+the rest of the page format is not thrown off by it.
+
+
+SUBSECTION: How are They Stored in the Filesystem?
+
+How are They Stored in the Filesystem?
+
+The template directory (`
+"templates`\" in the root
+Ledger-SMB install directory) contains all the root templates used
+by Ledger-SMB. These follow a naming convention of COAType-templatename.ext
+where COAType is the type of dataset that was created when the user
+was created, templatename is the name of the template, and ext is
+either txt, html, or tex (for text, html, and
+ respectively).
+
+Inside this directory are one or more subdirectories where the relevant
+templates have been copied as default language templates for the user.
+Many users can use the same user directory (which bears the name of
+the Ledger-SMB username). Within this directory are more subdirectories
+for translated templates, one for each language created.
+
+
+SUBSECTION: Upgrade Issues
+
+Upgrade Issues
+
+When Ledger-SMB is upgraded, the templates are not replaced. This
+is designed to prevent the upgrade script from overwriting changes
+made during the course of customizing the templates.
+
+Occasionally, however, the data model changes in a way which can cause
+the templates to stop printing certain information. When information
+that was showing up before an upgrade stops showing up, one can either
+upgrade the templates by copying the source template over the existing
+one, or one can edit the template to make the change.
+
+SECTION: An Introduction to the CLI
+
+An Introduction to the CLI
+
+SUBSECTION: Conventions
+
+Conventions
+
+The command-line API will be referred to as the API.
+
+SUBSECTION: Preliminaries
+
+Preliminaries
+
+Logging into Ledger-SMB (1.2+) updates a row in the users table
+containing your account configuration defaults and other information.
+The implication for API users of LSMB is that you must login as part
+of running API scripts. For security purposes, it is recommended that
+scripts prompt for a password rather than storing it.
+
+All scripts included in the documentation can also be found in the doc/samples
+directory.
+
+Consider a simple example:
+
+ cd /usr/local/ledger-smb
+./ct.pl "login=name
+&path=bin\&password=xxxxx\&action=search\&db=customer"
+
+The cd command moves your terminal session's current working directory into
+the main Ledger-SMB directory. Then the Ledger-SMB perl script ct.pl is called
+with one long line as an argument. The argument is really several variable=value pairs
+separated by ampersands (
+&). The value for the login variable is the username
+that Ledger-SMB is to use, and the value for the password variable is the plaintext password.
+
+To build our examples we will use a username of "clarkkent" who has a password
+of "lOis,lAn3".
+
+ cd /usr/local/ledger-smb
+./ct.pl "login=clarkkent
+&path=bin\&password=lOis,lAn3\&action=search\&db=customer"
+
+If we execute these commands we will get the html for the search form for
+the customer database. This result isn't useful in itself, but it shows we
+are on the right track.
+
+
+SUBSECTION: First Script: lsmb01-cli-example.sh
+
+First Script: lsmb01-cli-example.sh
+
+With a working example, we can start to build reproducible routines that we can grow
+to do some useful work.
+
+This is a bash script which:
+
+ 1. sets NOW to the current working directory
+ 2. prompts for and reads your Ledger-SMB login
+ 3. prompts for and reads (non-echoing) your Ledger-SMB password
+ 4. changes directory to /usr/local/ledger-smb
+ 5. constructs login and logout commands and a transaction command
+ 6. logins into ledger-smb (in a real program, output would be checked for
+ success or failure)
+ 7. executes the transaction
+ 8. logs out of ledger-smb (although this is not necessary)
+ 9. returns to the original working directory
+10. exits
+
+Running lsmb01-cli-example.sh produces:
+
+
+$ lsmb01-cli-example.sh
+
+Ledger-SMB login: clarkkent
+
+Ledger-SMB password:
+
+<body>
+
+<form method=post action=ct.pl>
+
+<input type=hidden name=db value=customer>
+
+<table width=100
+ <tr>
+ <th class=listtop>Search</th>
+.
+.
+.
+
+A script like this would work well for simple batch transactions, but
+bash is not a very friendly language for application programming.
+
+
+A nicer solution would be to use a language such as perl to drive the
+command line API.
+
+SUBSUBSECTION: Script 1 (Bash)
+
+Script 1 (Bash)
+#!/bin/bash
+#######################################################################
+#
+# lsmb01-cli-example.sh
+# Copyright (C) 2006. Louis B. Moore
+#
+# $Id: $
+#
+# 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.
+#
+#######################################################################
+
+NOW=`pwd`
+
+echo -n "Ledger-SMB login: "
+read LSLOGIN
+echo
+
+echo -n "Ledger-SMB password: "
+stty -echo
+read LSPWD
+stty echo
+echo
+
+ARG="login=$LSLOGIN&password=$LSPWD&path=bin&action=search&db=customer"
+
+LGIN="login=$LSLOGIN&password=$LSPWD&path=bin&action=login"
+LGOT="login=$LSLOGIN&password=$LSPWD&path=bin&action=logout"
+
+cd /usr/local/ledger-smb
+
+./login.pl $LGIN 2>&1 > /dev/null
+./ct.pl $ARG
+./login.pl $LGOT 2>&1 > /dev/null
+
+cd $NOW
+
+exit 0
+
+
+SUBSECTION: Second Script: lsmb02-cli-example.pl
+
+Second Script: lsmb02-cli-example.pl
+
+Our second script is written in perl and logs you in but it still uses the API
+in its simplest form, that is, it builds commands and then executes them. This
+type of script can be used for more complex solutions than the simple bash script
+above, though it is still fairly limited. If your needs require, rather than have
+the script build and then execute the commands it could be written to generate a
+shell script which is executed by hand.
+
+This script begins by prompting for your Ledger-SMB login and password. Using
+the supplied values a login command is constructed and passed into the runLScmd
+subroutine. runLScmd changes directory to /usr/local/ledger-smb/ for the length
+of the subroutine. It formats the command and executes it and returns both the
+output and error information to the caller in a scalar.
+
+The script checks to see if there was an error in the login, exiting if there was.
+
+Next, the script reads some records which are stored in the program following the
+ token. It takes each record in turn, formats it then feeds each transaction
+through runLScmd and looks at the results for a string that signals success.
+
+Once all the transactions are processed, runLScmd is called one last time to
+logout and the script exits.
+
+SUBSUBSECTION: Script 2 (Perl)
+
+Script 2 (Perl)
+#!/usr/bin/perl -w
+#
+# File: lsmb02-cli-example.pl
+# Environment: Ledger-SMB 1.2.0+
+# Author: Louis B. Moore
+#
+# Copyright (C) 2006 Louis B. Moore
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Revision:
+# $Id$
+#
+#
+
+use File::chdir;
+use HTML::Entities;
+
+
+print "-SMB login: ";
+my $login = <STDIN>;
+chomp($login);
+
+
+print "-SMB password: ";
+system("stty -echo");
+my $pwd = <STDIN>;
+system("stty echo");
+chomp($pwd);
+print "";
+
+$cmd = "login=" . $login . '&password=' . $pwd . '&path=bin&action=login';
+
+$signin = runLScmd("./login.pl",$cmd);
+
+if ( $signin =~ m/Error:/ )
+
+ print " error";
+ exit;
+
+
+
+
+while (<main::DATA>)
+
+ chomp;
+ @rec = split(/
+|/);
+
+ $arg = 'path=bin/mozilla&login=' . $login . '&password=' . $pwd .
+ '&action=' . escape(substr($rec[0],0,35)) .
+ '&db=' . $rec[1] .
+ '&name=' . escape(substr($rec[2],0,35)) .
+ '&vendornumber=' . $rec[3] .
+ '&address1=' . escape(substr($rec[4],0,35)) .
+ '&address2=' . escape(substr($rec[5],0,35)) .
+ '&city=' . escape(substr($rec[6],0,35)) .
+ '&state=' . escape(substr($rec[7],0,35)) .
+ '&zipcode=' . escape(substr($rec[8],0,35)) .
+ '&country=' . escape(substr($rec[9],0,35)) .
+ '&phone=' . escape(substr($rec[10],0,20)) .
+ '&tax_2150=1' .
+ '&taxaccounts=2150' .
+ '&taxincluded=0' .
+ '&terms=0';
+
+ $rc=runLScmd("./ct.pl",$arg);
+
+ if ($rc =~ m/Vendor saved!/)
+
+ print "$rec[2] SAVED";
+
+ else
+
+ print "$rec[2] ERROR";
+
+
+
+
+
+
+$cmd = "login=" . $login . '&password=' . $pwd . '&path=bin&action=logout';
+
+$signin = runLScmd("./login.pl",$cmd);
+
+if ( $signin =~ m/Error:/ )
+
+ print " error";
+
+
+
+exit;
+
+
+#*******************************************************
+# Subroutines
+#*******************************************************
+
+
+sub runLScmd
+
+ my $cmd = shift;
+ my $args = shift;
+ my $i = 0;
+ my $results;
+
+ local $CWD = "/usr/local/ledger-smb/";
+
+ $cmd = $cmd . "
+"" . $args . "\"";
+
+ $results = `$cmd 2>&1`;
+
+ return $results;
+
+
+
+sub escape
+
+ my $str = shift;
+
+ if ($str)
+
+ decode_entities($str);
+ $str =~ s/([^a-zA-Z0-9_.-])/sprintf("
+
+
+ return $str;
+
+
+
+
+#*******************************************************
+# Record Format
+#*******************************************************
+#
+# action | db | name | vendornumber | address1 | address2 | city | state | zipcode | country | phone
+#
+
+__END__
+save|vendor|Parts are Us|1377|238 Riverview|Suite 11|Cheese Head|WI|56743|USA|555-123-3322|
+save|vendor|Widget Heaven|1378|41 S. Riparian Way||Show Me|MO|39793|USA|555-231-3309|
+save|vendor|Consolidated Spackle|1379|1010 Binary Lane|Dept 1101|Beverly Hills|CA|90210|USA|555-330-7639 x772|
+
+
+
+
+
+
+
+PART: Technical Overview
+
+Technical Overview
+
+
+SECTION: Basic Architecture
+
+Basic Architecture
+
+Ledger-SMB is a web-based Perl program that interfaces with PostgreSQL
+using the relevant Perl modules. The code is well partitioned, and
+the main operation modules are written in an object oriented way.
+
+
+SUBSECTION: The Software Stack
+
+The Software Stack
+
+
+ fig-sl-stack sl-stack.tex
+
+
+CAPTION: The Ledger-SMB software stack in a Typical Implementation
+
+The Ledger-SMB software stack in a Typical Implementation
+
+
+Ledger-SMB runs in a Perl interpreter. I do not currently know if
+it is possible to run it with Perl2C or other language converters
+to run in other environments. However, except for high-capacity environments,
+Perl is a good language choice for this sort of program.
+
+Ledger-SMB used to support DB2 and Oracle as well as PostgreSQL. However,
+currently some of the functionality is implemented using PostgreSQL
+user-defined functions. These would need to be ported to other database
+managers in order to make the software work on these. It should not
+be too hard, but the fact that it has not been done yet may mean that
+there is no real demand for running the software under other RDBMS's.
+
+One can substitute other web servers for Apache. Normally Ledger-SMB
+is run as a CGI program but it may be possible to run it in the web
+server process (note that this may not be entirely thread-safe).
+
+The operating system can be any that supports a web server and Perl
+(since PostgreSQL need not run on the same system). However, there
+are a few issues running Ledger-SMB on Windows (most notably in trying
+to get Postscript documents to print properly).
+
+On the client side, any web-browser will work. Currently, the layout
+is different for Lynx (which doesn't support frames), and the layout
+is not really useful under eLinks (the replacement for Lynx which
+does support frames). Some functionality requires Javascript to work
+properly, though the application is usable without these features.
+
+
+SUBSECTION: Capacity Planning
+
+Capacity Planning
+
+Some companies may ask how scalable Ledger-SMB is. In general, it
+is assumed that few companies are going to have a need for a high-concurrency
+accounting system. However, with all the features available in Ledger-SMB,
+the staff that may have access to some of the application may be senior
+enough to make the question worthwhile.
+
+This question also becomes more important when companies might look
+at integrating Ledger-SMB with a CRM solution, online store, or other
+environment. This section looks at a number of the known issues and
+their solutions.
+
+
+SUBSUBSECTION: Scalability Strategies
+
+Scalability Strategies
+
+Ledger-SMB is a fairly standard web-based application. However,
+sometimes the database schema changes during upgrades. In these cases,
+it becomes impossible to use different versions of the software against
+the same database version safely. Ledger-SMB checks the version of
+the database and if the version is higher than the version of the
+software that is running, will refuse to run.
+
+Therefore although one strategy might be to run several front-end
+web servers with Ledger-SMB, in reality this can be a bit of a problem.
+One solution is to take half of the front-end servers off-line while
+doing the initial upgrade, and then take the other offline to upgrade
+when these are brought back online.
+
+The database manager is less scalable in the sense that one cannot
+just add more database servers and expect to carry on as normal. However,
+aside from the known issues listed below, there are few performance
+issues with it. If complex reports are necessary, these can be moved
+to a replica database (perhaps using Slony-I).
+
+If this solution is insufficient for database scalability, one might
+be able to move staff who do not need real-time access to new entries
+onto a PG-Pool/Slony-I cluster where new transactions are entered
+on the master and other data is looked up on the replica. In certain
+circumstances, one can also offload a number of other queries from
+the master database in order to minimize the load. Ledger-SMB has
+very few issues in the scalability of the application.
+
+
+SUBSUBSECTION: Database Maintenance
+
+Database Maintenance
+
+PostgreSQL uses a technique called Multi-version Concurrency Control
+(MVCC) to provide a snapshot of the database at the beginning of a
+statement or transaction (depending on the transaction isolation level).
+When a row is updated, PostgreSQL leaves the old row in the database,
+and inserts a new version of that row into the table. Over time, unless
+those old rows are removed, performance can degrade as PostgreSQL
+has to search through all the old versions of the row in order to
+determine which one ought to be the current one.
+
+Due to the way the SQL statements are executed in Ledger-SMB, most
+inserts will also create a dead row.
+
+A second problem occurs in that each transaction is given a transaction
+id. These id's are numbered using 32-bit integers. If the transaction
+id wraps around (prior to 8.1), data from transactions that appear
+(due to the wraparound) to be in the future suddenly becomes inaccessible.
+This problem was corrected in PostgreSQL 8.1, where the database will
+refuse to accept new transactions if the transaction ID gets too close
+to a wraparound. So while the problem is not as serious in 8.1, the
+application merely becomes inaccessible rather than displaying apparent
+data loss. Wraparound would occur after about a billion transactions
+between all databases running on that instance of PostgreSQL.
+
+Prior to 8.1, the main way to prevent both these problems was to run
+a periodic vacuumdb command from cron (UNIX/Linux) or the task scheduler
+(Windows). In 8.1 or later, autovacuum capabilities are part of the
+back-end and can be configured with the database manager. See the
+PostgreSQL documentation for treatment of these subjects.
+
+In general, if performance appears to be slowly degrading, one should
+try to run vacuumdb -z from the shell in order to attempt to reclaim
+space and provide the planner with accurate information about the
+size and composition of the tables. If this fails, then one can go
+to other methods of determining the bottleneck and what to do about
+it.
+
+
+SUBSUBSECTION: Known issues
+
+Known issues
+
+The PostgreSQL planner assumes a minimum page size of ten pages for
+a physically empty table. The reasoning behind this choice is that
+a table could grow rapidly and one could end up with bad database
+performance if the planner assumes a very small table.
+
+However, if you end up with joins between a very large table with
+millions of rows and a physically empty table, one can end up with
+a very bad query plan. In this case, the planner will choose a nested
+loop join and run through this loop for every row in the large table.
+As a result, performance will suddenly drop once the large table becomes
+too large to effectively do index scans of the join criteria on both
+tables. This problem most often occurs when people have no warehouses,
+departments, or projects defined and are running systems with a large
+number of transactions (such as a point of sale environment).
+
+Last time I saw this problem, the server would wait for thirty seconds
+to display a new point of sale screen while the server CPU activity
+would spike to 100
+
+
+One solution is to define one warehouse, department, and project,
+and then run vacuumdb -z from the shell to force the planner to acknowledge
+these tables as single-row tables. The other option is to go into
+the source code and edit the database queries to omit unused tables.
+
+
+SECTION: Customization Possibilities
+
+Customization Possibilities
+
+Ledger-SMB is designed to be customized relatively easily and rapidly.
+In general, the source code is well written and compartmentalized.
+This section covers the basic possibilities involving customization.
+
+
+SUBSECTION: Brief Guide to the Source Code
+
+Brief Guide to the Source Code
+
+Ledger-SMB is an application with over 34000 lines of code. While
+it is not possible to cover the entire application here, a brief overview
+of the source code is in order.
+
+In the root of the install directory, one will find a setup.pl program,
+a number of other .pl programs, and a number of directories. The setup.pl
+program is used to update or install Ledger-SMB. The other .pl programs
+provide a basic set of services for the framework (including authentication)
+and then pass the work on to the data entry screen file in the bin
+directory.
+
+The bin directory contains another directory for each terminal type.
+The main two offered are lynx and mozilla. Lynx would be used for
+web browsers that do not support frames and is ideal for a text-mode
+VGA terminal. Mozilla is the terminal type used for most other web
+browsers. The perl files within these directories provides the user
+interface of the software.
+
+The css directory in the root install directory contains CSS documents
+to provide various stylesheets one can select for changing various
+aspects of the look and feel of the application.
+
+The locale directory contains translation files that Ledger-SMB uses
+to translate between different languages. One could add translations
+to these files if necessary.
+
+The LSMB directory is where the Perl modules reside that provide the
+core business logic in Ledger-SMB. These modules provide functionality
+such as form handling, email capabilities, and access to the database
+through its at least partially object oriented API.
+
+Finally, the sql directory provides the database schemas and upgrade
+scripts.
+
+
+SUBSECTION: Data Entry Screens
+
+Data Entry Screens
+
+One can customize the data entry screens to optimize work flow, display
+additional information, etc.
+
+
+SUBSUBSECTION: Examples
+
+Examples
+
+We set up hot keys for payment lines, automatically focused the keyboard
+on the last partnumber field, removed separate print and post buttons
+to ensure that invoices were always printed and posted together, and
+removed the ability to print to the screen, and even the ability to
+scan items in when an invoice was received (using a portable data
+terminal) and import this data into Ledger-SMB. Finally we added the
+ability to reconcile the till online in a paperless manner.
+
+For another customer, we added the ability to print AR invoices in
+plain text format and added templates (based on the POS sales template)
+to do this.
+
+
+SUBSECTION: Extensions
+
+Extensions
+
+One can add functionality to the Perl modules in the LSMB directory
+and often add missing functions easily.
+
+
+SUBSUBSECTION: Examples
+
+Examples
+
+For one customer, we added a module to take data from a portable data
+terminal collected when inventory items were taken and use that to
+add shrinkage and loss adjustments. We also extended the parts model
+to add a check id flag (for alcohol sales) and added this flag to
+the user interface.
+
+For another customer, we added a complex invoice/packing slip tracking
+system that allowed one to track all the printed documents associated
+with an order or invoice.
+
+
+SUBSECTION: Templates
+
+Templates
+
+As noted before templates can be modified or extended, though sometimes
+this involves extending the user interface scripts. Most templates
+are easy enough to modify.
+
+
+SUBSUBSECTION: Examples
+
+Examples
+
+For one customer we added text-only invoices for AR and AP transactions/Invoices
+and an ability to use Javascript in them to automatically print them
+on load.
+
+
+SUBSECTION: Reports
+
+Reports
+
+The fact that all the data is available within the database manager
+is a huge advantage of Ledger-SMB over Quickbooks and the like. The
+rapid development of reports allows for one to easily develop reports
+of any sort within Ledger-SMB.
+
+
+SUBSUBSECTION: Examples
+
+Examples
+
+For one customer, we developed a report of parts sold and received
+during arbitrary time frames. The report allows one to go back and
+look up the invoices involved.
+
+
+SECTION: Integration Possibilities
+
+Integration Possibilities
+
+An open database system and programming API allows for many types
+of integration. There are some challenges, but in the end, one can
+integrate a large number of tools.
+
+
+SUBSECTION: Reporting Tools
+
+Reporting Tools
+
+Any reporting tool which can access the PostgreSQL database can be
+used with Ledger-SMB for custom reporting. These can include programs
+like Microsoft Access and Excel (using the ODBC drivers), PgAccess
+(A PostgreSQL front-end written in TCL/Tk with a similar feel to Access),
+Rekall, Crystal Reports, OpenOffice and more.
+
+
+SUBSUBSECTION: Examples
+
+Examples
+
+We have created spreadsheets of the summaries of activity by day and
+used the ODBC driver to import these into Excel. Excel can also read
+HTML tables, so one can use PostgreSQL to create an HTML table of
+the result and save it with a .xls extension so that Windows opens
+it with Excel. These could then be served via the same web server
+that serves Ledger-SMB.
+
+
+SUBSECTION: Line of Business Tools on PostgreSQL
+
+Line of Business Tools on PostgreSQL
+
+Various line of business tools have been written using PostgreSQL
+in large part due to the fact that it is far more mature than MySQL
+in areas relating to data integrity enforcement, transactional processing,
+and the like. These tools can be integrated with Ledger-SMB in various
+ways. One could integrate this program with the HERMES CRM framework,
+for example.
+
+
+SUBSUBSECTION: Known Issues
+
+Known Issues
+
+Ledger-SMB uses a single 'id' sequence across many tables. At the
+same time it is expected that these tables do not have identical id
+values in their records as they are used as a sort of pseudo-foreign
+key by the acc table which stores the financial transaction
+information.
+
+If the integration solution does not keep this in mind, it is possible
+to create a situation where the account transactions are ambiguously
+associated with a number of different types of financial transactions.
+This would lead to a large number of problems.
+
+
+SUBSUBSECTION: Strategies
+
+Strategies
+
+In general, it is advisable to run all such programs that benefit
+from integration in the same database but under different schemas.
+This allows PostgreSQL to become the main method of synchronizing
+the data in real time. However, sometimes this can require dumping
+the database, recreating the tables etc. in a different schema and
+importing the data back into Ledger-SMB.
+
+One possibility for this sort of integration is to use database triggers
+to replicate the data between the applications in real-time. This
+can avoid the main issue of duplicate id's. One issue that can occur
+however relates to updates. If one updates a customer record in HERMES,
+for example, how do we know which record to update in Ledger-SMB?
+There are solutions to this problem but they do require some forethought.
+
+A second possibility is to use views to allow one application to present
+the data from the other as its own. This can be cleaner regarding
+update issues, but it can also pose issues regarding duplicate id
+fields.
+
+
+SUBSUBSECTION: Examples
+
+Examples
+
+Others have integrated L'ane POS and Ledger-SMB in order to make it
+work better with touch screen devices. Still others have successfully
+integrated Ledger-SMB and Interchange. In both cases, I believe that
+triggers were used to perform the actual integration.
+
+
+SUBSECTION: Line of Business Tools on other RDBMS's
+
+Line of Business Tools on other RDBMS's
+
+Often there are requests to integrate Ledger-SMB with applications
+like SugarCRM, OSCommerce, and other applications running on MySQL
+or other database managers. This is a far more complex field and it
+requires a great deal more effort than integrating applications within
+the same database.
+
+
+SUBSUBSECTION: Strategies
+
+Strategies
+
+Real-time integration is not always possible. MySQL does
+not support the SQL extension SQL/MED (Management of External Data) that
+supports non-MySQL data sources so it is not possible to replicate the
+data in real-time. Therefore
+one generally resorts to integrating the system using time-based updates.
+Replication may be somewhat error-prone unless the database manager
+supports triggers (first added to MySQL in 5.0) or other mechanisms
+to ensure that all changed records can be detected and replicated.
+In general, it is usually advisable to add two fields to the record--
+one that shows the insert time and one that shows the last update.
+
+Additionally, I would suggest adding additional information to the
+Ledger-SMB tables so that you can track the source record from the
+other application in the case of an update.
+
+In general, one must write replication scripts that dump the information
+from one and add it to the other. This must go both ways.
+
+
+SUBSUBSECTION: Integration Products and Open Source Projects
+
+Integration Products and Open Source Projects
+
+While many people write Perl scripts to accomplish the replication,
+an open source project exists called DBI-Link. This package requires
+PL/Perl to be installed in PostgreSQL, and it allows PostgreSQL to
+present any data accessible via Perl's DBI framework as PostgreSQL
+tables. DBI-Link can be used to allow PostgreSQL to pull the data
+from MySQL or other database managers.
+
+DBI-Link can simplify the replication process by reducing the operation
+to a set of SQL queries.
+
+
+SECTION: Customization Guide
+
+Customization Guide
+
+This section is meant to provide a programmer with an understanding
+of the technologies enough information to get up to speed quickly
+and minimize the time spent familiarizing themselves with the software.
+Topics in this section are listed in order of complexity. As it appeals
+to a narrower audience than previous discussions of this topic, it
+is listed separately.
+
+
+SUBSECTION: General Information
+
+General Information
+
+The main framework scripts (the ar.pl, ap.pl, etc. scripts found in
+the root of the installation directory) handle such basic features
+as instantiating the form object, ensuring that the user is logged
+in, and the like. They then pass the execution off to the user interface
+script (usually in the bin/mozilla directory).
+
+Ledger-SMB in many ways may look sort of object oriented in its design,
+but in reality, it is far more data-driven than object oriented. The
+Form object is used largely as a global symbol table and also as a
+collection of fundamental routines for things like database access.
+It also breaks down the query string into sets of variables which
+are stored in its attribute hash table.
+
+In essence one can and often will store all sorts of data structures
+in the primary Form object. These can include almost anything. It
+is not uncommon to see lists of hashes stored as attributes to a Form
+object.
+
+
+SUBSECTION: Customizing Templates
+
+Customizing Templates
+
+Templates are used to generate printed checks, invoices, receipts,
+and more in Ledger-SMB. Often the format of these items does not fit
+a specific set of requirements and needs to be changed. This document
+will not include or HTML instruction, but will include a
+general introduction to editing templates. Also, this is not intended
+to function as a complete reference.
+
+Template instructions are contained in tags ?lsmb and ?.
+The actual parsing is done by the parse function in LSMB/Form.pm.
+
+
+SUBSUBSECTION: Page Breaks in \LaTeX{}
+
+Page Breaks in
+
+The first tag one will see with
+ templates is ?lsmb pagebreak
+num1 num2 num3 ?
+
+ num1 represents characters per line
+ num2 represents lines on first page
+ num3 represents lines on second page.
+The pagebreak block is terminated by ?lsmb end pagebreak ?.
+Any text within the pagebreak block is ignored by the template.
+
+
+SUBSUBSECTION: Conditionals
+
+Conditionals
+
+ ?lsmb if not varname ? tells the parser to
+include the next block only if varname was posted by the submitting
+form (or set via the form hash elsewhere in the scripts). The block
+ends with ?lsmb end varname ?
+ ?lsmb if varname ? tells the parser to include the
+block if varname was posted in the submitting form (or set via
+the form hash elsewhere in the scripts). The block ends with ?lsmb end
+varname ?
+ Lines conditionals are otherwise ignored by the parser.
+ Conditionals cannot be nested, but IF's can be nested inside loops.
+
+SUBSUBSECTION: Loops
+
+Loops
+
+?lsmb foreach varname ? is used to iterate through
+a list of vars set by the user interface system (usually one of the
+files under bin/mozilla (or otherwise). The block is repeated for
+each varname in a list. Block ends with ?lsmb end varname ?
+
+
+SUBSUBSECTION: File Inclusion
+
+File Inclusion
+
+ Files may be included with the syntax ?lsmb include template
+?
+where templatename is the name of the template within the current
+template directory (usually templates/
+$username/). Note that for \
+templates, the input or include functionalities might be better suited for many
+many things.
+ Cannot be used with conditionals
+ Filenames cannot use slashes (/) or .. due to directory transversal
+considerations.
+ Files can force other files to be included, but the same file cannot
+be included more than once.
+
+SUBSUBSECTION: Cross-referencing and multiple passes of \LaTeX{}
+
+Cross-referencing and multiple passes of
+
+In
+ cross-references require two passes with latex to resolve.
+This is because the type is set page by page and the program really
+doesn't know on which page a given reference will fall. This becomes
+an even larger issue where floats are concerned as they can move between
+pages for formatting reasons.
+
+In rare cases, cross-references may point at incorrect pages even
+with two passes (if the inclusion of the cross-reference data moves
+the object to another page). In this case you will need to use three
+passes of
+ in order to have accurate references.
+
+Ledger-SMB as of the time of this writing (2.6.8) only makes one pass
+at the
+ file. To force it to make more than one pass, open
+Form.pm with your favorite text editor. Look for the line:
+
+system(`
+"latex --interaction=nonstopmode \$self-$$
+tmpfile$$
+
+ \$ self-$$ tmpfile$$
+.err`
+");
+
+Duplicate this line for two passes, or add two copies if you need
+three passes.
+
+
+SUBSUBSECTION: Variable Substitution
+
+Variable Substitution
+
+The following format is used for variable substitution:
+
+ ?lsmb varname options ? Options are one or more
+(whitespace separated) of:
+
+ align=left/right/center
+ width=chars where chars is the width in characters before wrapping
+ offset=chars where chars is the number of spaces to (depending on
+alignment).
+
+SUBSECTION: Customizing Forms
+
+Customizing Forms
+
+Data entry forms and other user interface pieces are in the bin directory.
+In Ledger-SMB 1.0.0 and later, symlinks are not generally used.
+
+Each module is identified with a two letter combination: ar, ap, cp,
+etc. These combinations are generally explained in the comment headers
+on each file.
+
+Execution in these files begins with the function designated by the
+form->$$action$$ variable. This variable is usually
+derived from configuration parameters in the menu.ini or the name
+of the button that was clicked on to submit the previous page. Due
+to localization requirements, the following process is used to determine
+the appropriate action taken:
+
+The
+$locale- getsub routine is called. This routine
+checks the locale package to determine if the value needs to be translated
+back into an appropriate LSMB function. If not, the variable is lower-cased,
+and all spaces are converted into underscores.
+
+In general there is no substitute for reading the code to understand
+how this can be customized and how one might go about doing this.
+
+
+SUBSECTION: Customizing Modules
+
+Customizing Modules
+
+The Perl Modules (.pm files) in the LedgerSMB directory contain the
+main business logic of the application including all database access.
+Most of the modules are relatively easy to follow, but the code quality
+leaves something to be desired. The API calls themselves are
+likely to be replaced in the future, so work on documenting API calls is
+now focused solely on those calls that are considered to be stable.
+At the moment, the best place to request information on the API's is on
+the Developmers' Email List (ledger-smb-devel@lists.sourceforge.net).
+
+Many of these modules have a fair bit of dormant code in them which
+was written for forthcoming features, such as payroll and bills of
+materials.
+
+One can add a new module through the normal means and connect it to
+other existing modules.
+
+
+SUBSUBSECTION: Database Access
+
+Database Access
+
+The
+$form object provides two methods for accessing the database.
+The
+$form- dbconnect(\%myconfig) method commits each
+individual statement as its own transaction. The
+$form-
+dbconnect(
+
+these functions are thin wrappers around the standard Perl DBI operations.
+
+
+SUBSECTION: CLI Examples
+
+CLI Examples
+Louis Moore contributed some SQL-Ledger CLI examples that still work for
+LedgerSMB. You can find his page at http://www.sql-ledger.org/cgi-bin/nav.pl?page=contrib/moore.html&title=Louis
+
+
+
+
+
+PART: Appendix
+
+Appendix
+
+
+
+
+
+
+SECTION: Where to Go for More Information
+
+Where to Go for More Information
+
+There are a couple of relevant sources of information on Ledger-SMB
+in particular.
+
+The most important resources are the LedgerSMB web site
+(http://www.ledgersmb.org) and the email lists found at our Sourceforge
+site.
+
+In addition, it is generally recommended that the main bookkeeper
+of a company using Ledger-SMB work through at least one accounting
+textbook. Which textbook is not as important as the fact that a textbook
+is used.
+
+
+SECTION: Quick Tips
+
+Quick Tips
+
+
+SUBSECTION: Understanding Shipping Addresses and Carriers
+
+Understanding Shipping Addresses and Carriers
+
+Each customer can have a default shipping address. This address is
+displayed prominantly in the add new customer screen. To change the
+shipping address for a single order, one can use the ship to button
+at the bottom of the quote, order, or invoice screen.
+
+The carrier can be noted in the Ship Via field. However, this is a
+freeform field and is largely used as commentary (or instructions
+for the shipping crew).
+
+
+SUBSECTION: Handling bad debts
+
+Handling bad debts
+
+In the event that a customer's check bounces or a collection requirement
+is made, one can flag the customer's account by setting the credit
+limit to a negative number.
+
+If a debt needs to be written off, one can either use the allowance
+method (by writing it against the contra asset account of `
+"Allowance
+for Bad Debts`
+" or using the direct writeoff method where
+it is posted as an expense.
+
+
+SECTION: Step by Steps for Vertical Markets
+
+Step by Steps for Vertical Markets
+
+
+SUBSECTION: Common Installation Errors
+
+Common Installation Errors
+
+ Ledger-SMB is generally best installed in its own directory outside
+of the wwwroot directory. While it is possible to install it inside
+the wwwroot directory, the instructions and the faq don't cover the
+common problems here.
+ When the chart of accounts (COA) is altered such that it is no longer
+set up with appropriate items, you can make it impossible to define
+goods and services properly. In general, until you are familiar with
+the software, it is best to rename and add accounts rather than deleting
+them.
+
+SUBSECTION: Retail With Light Manufacturing
+
+Retail With Light Manufacturing
+
+For purposes of this example we will use a business that assembles
+computers and sells them on a retail store.
+
+ Install Ledger-SMB.
+ Set preferences, and customize chart of accounts.
+
+ Before customizing the COA it is suggested that you consult an accountant.
+ Define Goods, Labor, and Services as raw parts ordered from the vendors.
+
+ These are located under the goods and services menu node.
+ Define assemblies.
+
+ These are also located under goods and services.
+ Component goods and services must be defined prior to creating assembly.
+ Enter an AP Invoice to populate inventory with proper raw materials.
+
+ One must generally add a generic vendor first. The vendor is added
+under AP- Vendors- Add Vendor.
+ To pay an AP invoice like a check, go to cash-$>$payment. Fill out
+approrpiate fields and click print.
+
+ Note that one should select an invoice and enter in the payment amount
+in the appropriate line of the invoice list. If you add amounts to
+the master amount list, you will find that they are added to the amount
+paid on the invoice as a prepayment.
+ The source field is the check number.
+ Stock assemblies
+ One can use AR Invoices or the POS interface to sell goods and services.
+
+ Sales Invoice
+
+ Can be generated from orders or quotations
+ Cannot include labor/overhead except as part of an assembly
+ One can make the mistake of printing the invoice and forgetting to
+post it. In this event, the invoice does not officially exist in the
+accounting system.
+ For new customers, you must add the customer first (under AR-
+Customers- Add Customer.
+ POS Interface
+
+ Cannot include labor/overhead except as part of an assembly
+ Printing without posting is often even easier in the POS because of
+the rapid workflow. Yet it is just as severe a problem.
+ Ecommerce and Mail Order Operations
+
+ See the shipping workflow documentation above.
+ Customers are set up by going to AR- Customers-
+Add Customer (or the equivalent localized translation). The appropriate
+fields are filled out and the buttons are used at the bottom to save
+the record and optionally use it to create an invoice, etc.
+
+ Saving a customer returns to the customer screen. After the appropriate
+invoice, transaction, etc. is entered and posted, Ledger-SMB will
+return to the add customer screen.
+ One can use the requirements report to help determine what parts need
+to be ordered though one cannot generate PO's directly from this report.
+Note, the needs of Ledger-SMB are mostly useful for light manufacturing
+operations (assembling computers, for example). More manufacturing
+capabilities are expected to be released in the next version.
+
+A custom assembly is a bit difficult to make. One must add the assembly
+prior to invoice (this is not true of goods and services). If the
+assembly is based on a different assembly but may cost more (due to
+non-standard parts) you can load the old assembly using Goods and
+Services- Reports- Assemblies and then make
+necessary changes (including to the SKU/Partnumber) and save it as
+new.
+
+Then one can add it to the invoice.
+
+
+SECTION: Glossary
+
+Glossary
+
+ [BIC] Bank Identifier Code is often the same as the S.W.I.F.T.
+code. This is a code for the bank a customer uses for automated money
+transfers.
+ [COGS] is Cost of Goods Sold. When an item is sold, then the expense
+of its purchase is accrued as attached to the income of the sale.
+It is tracked as COGS.
+ [Credit] : A logical transactional unit in double entry accounting.
+It is the opposite of a debit. Credits affect different account types
+as follows:
+
+ [Equity] : Credits are added to the account when money is invested
+in the business.
+ [Asset] : Credits are added when money is deducted from an asset
+account.
+ [Liability] : Credits are added when money is owed to the business
+account.
+ [Income] : Credits are added when income is earned.
+ [Expense] : Credits are used to apply adjustments at the end of
+accounting periods to indicate that not all the expense for an AP
+transaction has been fully accrued.
+ [Debit] : A logical transactional unit in double entry accounting
+systems. It is the opposite of a credit. Debits affect different account
+types as follows:
+
+ [Equity] : Debits are added when money is paid to business owners.
+ [Asset] : Debits are added when money is added to an account.
+ [Liability] : Debits are added when money that is owed is paid
+off.
+ [Income] : Debits are used to temporarily adjust income to defer
+unearned income to the next accounting period.
+ [Expense] : Debits are added as expenses are incurred.
+ [IBAN] International Bank Account Number is related to the BIC
+and is used for cross-border automated money transfers.
+ [List] Price is the recommended retail price.
+ [Markup] is the percentage increase that is applied to the last
+cost to get the sell price.
+ [ROP] Re-order point. Items with fewer in stock than this will
+show up on short reports.
+ [Sell] Price is the price at which the item is sold.
+ [SKU] Stock Keeping Unit: a number designating a specific product.
+ [Source] Document : a paper document that can be used as evidence
+that a transaction occurred. Source documents can include canceled
+checks, receipts, credit card statements and the like.
+ [Terms] is the number of days one has to pay the invoice. Most
+businesses abbreviate the terms as Net n where n is the number of
+days. For example, Net 30 means the customer has 30 days to pay the
+net due on an invoice before it is late and incurs late fees. Sometimes
+you will see 2 10 net 30 or similar. This means 2
+
+10 days but due within 30 days in any case.
+fdl.tex