mirror of
https://github.com/brmlab/brmbar.git
synced 2025-06-07 21:04:00 +02:00
153 lines
5.6 KiB
Markdown
153 lines
5.6 KiB
Markdown
Quick Guide
|
|
-----------
|
|
|
|
* I want to buy for cash: I scan item's barcode, press **Pay by Cash** and pour
|
|
money into the cash box.
|
|
|
|
* I want to buy from credit: I scan item's barcode, then my barcode.
|
|
(If you don't have your barcode printed out, you can also type your
|
|
username on a physical keyboard.)
|
|
|
|
* I want to put money on credit: press **Charge**, I scan my barcode,
|
|
type some amount, press **Charge** and put money in the cash box.
|
|
|
|
|
|
Advanced Operations
|
|
-------------------
|
|
|
|
* I want to withdraw funds from my (positive) credit:
|
|
Press **Management**, choose **User Mgmt**, scan your barcode,
|
|
press the Withdraw Amount and type the amount. Then take the money
|
|
from the cash box.
|
|
|
|
* I want to stock in some inventory (that's been in brmbar before):
|
|
Press **Management**, **Stock Mgmt**, scan barcode of the item, edit
|
|
the purchase price (or also the selling price and label), press
|
|
**Restock** and enter the quantity of stocked in piece. Press **Save**.
|
|
Toss the bill (if possible with the current written date, to allow
|
|
pairing) to brmbar.
|
|
|
|
* I want to stock in some new inventory: Press **Management**, **Stock
|
|
Mgmt**, press **Add new item**, enter the name, purchase and selling price,
|
|
press **Create**. Then press **Restock**, enter the quantity stocked in.
|
|
Scan the item's barcode and press **Save**. Toss the bill in brmbar.
|
|
|
|
* I want to bill the brmbar with some small expenses like duct tape:
|
|
Press **Management** and **Receipt**. Press **Description** and write
|
|
a brief description of the bill. Press **Edit** near the **Money Amount**
|
|
and enter the amount. Scan *your* barcode. The operation is finished
|
|
by pressing **Create**. Toss bill (inscribed with the current date
|
|
to ease pairing) to brmbar.
|
|
|
|
|
|
General Notes
|
|
-------------
|
|
|
|
The system expects that we take money from the cash box right away.
|
|
If you don't want to (or there is e.g. not enough money), put money
|
|
on your credit account instead (see above). Please always do that
|
|
(never *I'll remember and I'll take money later*) so that there is
|
|
a record that the cash box and system records are not in sync and
|
|
there are no irregularities.
|
|
|
|
To enter text (or numbers too), you can use both the on-screen keyboard
|
|
and the physical keyboard nearby.
|
|
|
|
|
|
Administrative Usage
|
|
--------------------
|
|
|
|
* The most common administrative action you will need to do is adding
|
|
new user (also called debt or credit) accounts. The GUI support for
|
|
this is not implemented yet, but the `brmbar-cli.py` UI allows it:
|
|
|
|
./brmbar-cli.py adduser joehacker
|
|
|
|
Afterwards, print out a barcode saying "joehacker" and stick that
|
|
somewhere nearby; scanning that barcode will allow access to this
|
|
account (and so will typing "joehacker" on a physical keyboard).
|
|
|
|
* If your inventory stock count or cash box amount does not match
|
|
the in-system data, you will need to make a corrective transaction.
|
|
To fix cash amount to reality in which you counted 1234Kč, use
|
|
|
|
./brmbar-cli.py fixcash 1234
|
|
|
|
whereas to fix amount of a particular stock, use
|
|
|
|
./brmbar-cli.py inventory-interactive
|
|
|
|
then scan the item barcode and then enter the right amount.
|
|
|
|
* If you want to view recent transactions, run
|
|
|
|
psql brmbar
|
|
select * from transaction_cashsums;
|
|
|
|
* If you want to undo a transaction, get its id (using the select above)
|
|
and run
|
|
|
|
./brmbar-cli.py undo ID
|
|
|
|
* If you want to get overview of the financial situation, run
|
|
|
|
./brmbar-cli.py stats
|
|
|
|
The following items represent "material", "tangible" assets:
|
|
|
|
* Cash - how much should be in the money box
|
|
* Overflow - how much cash is stored in overflow credit accounts (pockets of admins)
|
|
* Inventory - how much worth (buy price) is the current inventory stock
|
|
|
|
I.e., cash plus overflow plus inventory is how much brmbar is worth
|
|
and cash plus overflow is how much brmbar can spend right now.
|
|
|
|
The following items represent "virtual" accounts which determine
|
|
the logical composition of the assets:
|
|
|
|
* Credit - sum of all credit accounts, i.e. money stored in brmbar by its users;
|
|
i.e. how much of the assets is users' money
|
|
* Profit - accumulated profit made by brmbar on buy/sell margins (but receipts
|
|
and inventory deficits are subtracted); i.e. how much of the assets is brmbar's
|
|
own money
|
|
* Fixups - sum of gains and losses accrued by inventory fixups, i.e. stemming
|
|
from differences between accounting and reality - positive is good, negative
|
|
is bad; this amount is added to profit on consolidation
|
|
|
|
The total worth of the material and virtual accounts should be equal.
|
|
|
|
|
|
Useful SQL queries
|
|
------------------
|
|
|
|
* Compute sum of sold stock:
|
|
|
|
select sum(amount) from transactions
|
|
left join transaction_splits on transaction_splits.transaction = transactions.id
|
|
where description like '% sale %' and side = 'debit';
|
|
|
|
* List of items not covered by inventory check:
|
|
|
|
select * from account_balances
|
|
where id not in (select account from transactions
|
|
left join transaction_splits on transaction_splits.transaction = transactions.id
|
|
where description like '% inventory %')
|
|
and acctype = 'inventory';
|
|
|
|
* List all cash transactions:
|
|
|
|
select time, transactions.id, description, responsible, amount from transactions
|
|
left join transaction_splits on transaction_splits.transaction = transactions.id
|
|
where transaction_splits.account = 1;
|
|
|
|
* List all inventory items ordered by their cummulative worth:
|
|
|
|
select foo.*, foo.rate * -foo.crbalance as worth from
|
|
(select account_balances.*,
|
|
(select exchange_rates.rate from exchange_rates, accounts
|
|
where exchange_rates.target = accounts.currency
|
|
and accounts.id = account_balances.id
|
|
order by exchange_rates.valid_since limit 1) as rate
|
|
from account_balances where account_balances.acctype = 'inventory')
|
|
as foo order by worth;
|
|
|