Giter Club home page Giter Club logo

posys's Introduction

Posys Build Status

A Point of Sale system for the modern age.

Installation

If installing on windows, you may need --msvs_version=<your_vs_version> to install the printer module correctly. It's really finnicky.

  • clone the repository
  • install postgresql
  • npm install -g ionic
  • npm install
  • create src/server/server.config.json (sample below)
  • npm run migrate:latest (set up the database)
  • npm run seed:run (get some sample data in the db to work with)
  • npm start:server (in one terminal)
  • npm start (in another terminal)

Sample server.config.json

{
  "server": {
    "port": 8080
  },
  "db": {
    "hostname": "localhost",
    "username": "postgres",
    "password": "postgres",
    "database": "posys"
  }
}

Further setup is done at runtime.

Building For Electron

You should just be able to run npm run build:osx:dev or npm run build:win:dev. There is a task for dist/asar but there are currently some issues with it.

Screenshots

See a gallery on imgur.

Hardware Recommendations

  • A barcode scanner (this application makes heavy use of an "omni search" input which allows for text entry even when not focused, to facilitate quick lookup of items - a barcode scanner is used in testing and makes the interface significantly easier to use)
  • A receipt printer (STAR or Epson-compatible)

posys's People

Contributors

seiyria avatar autalyst avatar manuelrauber avatar

Stargazers

 avatar  avatar coundia avatar Andy avatar ksm avatar Matovu Ronald avatar JeanC Ch. H. avatar  avatar Shaharyar Kirmani avatar Bhanu Harsha Pasam avatar  avatar Geoffrey Adams avatar Suzanne avatar qing he avatar Shivam Mishra avatar Mahmoud Aljabary avatar Tom Noogen avatar KJ JOSE avatar Linko avatar  avatar B avatar Zach Russell avatar Jonathan Lopez avatar Scott Hardin avatar Alex Steffes avatar Victor Dyotte avatar Doug Grubba avatar UUTAN avatar Max Lynch avatar  avatar

Watchers

Tom Noogen avatar  avatar James Cloos avatar JeanC Ch. H. avatar oajmi avatar  avatar

posys's Issues

Create binaries

It should:

  • have an easy installation process (an installer would be good, but possibly infeasible)
  • make sure links open in a browser window (electron/electron#1344)
  • ensure reports open in a new window (bug - try to create an empty html file and serve that)
  • ensure report save works (help here)
  • run knex migrations on startup (this will first require some settings to be set in tech settings - possibly, require a restart of the application when database information is changed)
  • allow for easy updating (either just run a new binary, or have an in-app updater -- probably the former)
  • capture the path of the installed postgres and create a db (posys) after installation
  • using the path, write a backup script bat file and register it as a scheduled task (it should take in a custom path of where to write the data)
  • fix page title for every page

Allow for returns

Add a new button to the right side that is basically "return items"

Flip prices to negatives.

Group promos by time period

Should have an "in the future" section, a "currently going" section, and "in the past" section

Should have toggles to show/hide these.

error logging

log all errors from the server side AND CLIENT SIDE

there should be a logger function that does this, and intercepts everything. if e.data is present it should mark it as a warning (and warning should be in the columns) and they should be filterable by error and warning

Reporting

Should have X reports:

  • Flex layout should squish/scroll correctly
  • Allow custom reports to be saved underneath the existing report structure
  • Should pop up results in a new window somehow
  • Reports should have a header that includes:
    • Store Name
    • Store Id
    • Date of report creation [VERIFY]
    • Options to generate report
    • Dates active (or just one timestamp if the start and end are the same)
  • Generic Time picker
    • Should allow for choosing dates like "this quarter" "this year" "this week" "this month"
    • Should use this component to handle easy stuff like the above
    • Should probably be split up into several components:
      • "Current" "Previous" | "Quarter", "Year", "Month", "Week", "Day" | (or a custom date range to start and end, toggled with a checkbox)
  • Column Chooser
    • Should allow for rearranging of columns displayed in report
      • StockItem Display:
        • Name
        • SKU
        • OU
        • Taxable
        • Cost
        • Quantity
      • Invoice Display:
        • Purchase Method
        • Purchase Time
        • Purchase Price
        • Tax Collected
        • Cash Given
        • Items Sold
        • Promotions Applied
  • Group By/Options
    • Add "sort by" checkboxes to all columns, disable if column inactive, only one can be active
    • Add a "group by" checkbox to OU
    • Add a "filter by OU" option above old inventory, sales, taxes, CI, RR
    • Add a "show totals" option to Old Inventory, Sales, Taxes, Current Inventory, Reorder Report
  • Old Inventory
    • Filter by Item(s) [SKU or OU]
    • Filter by generic time picker
    • StockItem Display
  • Sales
    • Filter by Item(s) [SKU or OU]
    • Filter by generic time picker
    • Invoice Display
    • Option to sort/group by OU and show totals
  • Taxes
    • Filter by Item(s) [SKU or OU]
    • Filter by generic time picker
    • Invoice Display
  • Current Inventory
    • Filter by Item(s) [SKU or OU]
    • StockItem Display
  • Reorder Report
    • Filter by Item(s) [SKU or OU]
    • StockItem Display
  • Voided Report
    • Filter by generic time picker
    • Invoice Display

fix tax calculation

not sure how, but when point of sale gives a promo to an item the tax goes all wonky. perhaps it should say what item is applied to a particular promo, or they should be tied together somehow to fix the tax value

Create seed data

Should be a bunch of items that do or do not exist, probably using some real barcodes and some fake ones.

There should also be a "real" seed data file including:

  • Unspecified (OU)
  • Home Base (Location)

Import/export inventory

Importing inventory should require a spreadsheet (csv, tsv, xls, whatever). It would trigger a popup that allows users to map columns in the spreadsheet to fields on the inventory item. This would allow them to be named realistically whatever in the spreadsheet, and so long as the items have the required data it would work.

Possibly, this might need to be done in a web worker. Whether it gets processed on the client or server is not certain yet, either. If it can be done line by line, it should probably be done on the client, though.

sync settings

settings should have their own api route to change/get/etc and should be stored as a json file on the server (ignored in version control)

log all actions server-side

use header:
console.log(req.header('X-Location'));
console.log(req.header('X-Terminal'));

there should be a logger function that takes in a request object and spits out relevant data into the logs

vendor changes

instead of having a stock id and a vendor cost, change it to be this:

  • vendor name
  • vendor id
  • vendor cost
  • is preferred (star next to name)

and allow people to have multiple vendors per item.

clean up display on windows

buttons are needlessly squished for some reason and there are scrollbars everywhere (mostly ugly horizontal ones)

audit log viewer

allow for viewing all logged actions and information about them in the system view

Keep track of item quantity per location

make a join table for quantity/location (probably the smartest choice) (I am opting for this choice because it would take a small transformation to turn the array into a hash, but it would work much better for quantity updates like incrementing). also, make these model functions - that way the model can handle getting the respective data on its own and it can just be joined in as necessary. updating the quantity will probably be the only thing that needs to be messed with

things that would need to update:

  • everything
  • reports
  • reports will need a new "show all locations" option which would do just that
  • show all quantity button in inventory to show location and quantity at, sorted by quantity

UX improvements

Basically, an ionic2 wishlist:

  • left/right arrows for sliders
  • left/right/up/down arrow for datetime picker
  • mousewheel for datetime picker

Create temporary promotions

The popup item "Discount" should create a temporary discount applied only to that item. They should also be removable.

OmniSearch: popup search results instead of requiring them to be weaved into template

This is needed in the following locations:

  • quick import
  • promotion management

This would close #8 if it were globally implemented (it should be, and showSearchResults should be removed, probably, because it can be confusing - however, search results should still be emitted and handled correctly). The popup should be optional and should only show up if there is more than one search result, and it would allow users to choose a result out of the popup.

Allow for putting a transaction on hold

This would require a new field on an invoice that marks the transaction as held. If it's held, items should not be deducted when put into the DB, but kept anyway. It should be possible to resume a transaction obviously. There should be a big button in the invoice viewer (top row) that says "RESUME THIS TRANSACTION" and there should also be some color coding or something in the rows.

Also, the "Void" field on invoices should be changed to "Status" where it can be one of: Complete, Void, On Hold.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.