MALMan

From VoidWarranties - Hackerspace Antwerp, Belgium
(Difference between revisions)
Jump to: navigation, search
(Kassa)
(Move some listed todo items to github's issue tracker)
 
(48 intermediate revisions by 6 users not shown)
Line 3: Line 3:
 
|Category=Coding
 
|Category=Coding
 
|Logo=Coding.gif
 
|Logo=Coding.gif
|Participants=Koert, User:Warddr, Koen,
+
|Participants=Koert, User:Warddr, Koen, Berz,
 
|Locations=Den Bunker,
 
|Locations=Den Bunker,
|Short description=MALMan en VWCR herschrijven
+
|Short description=MALMan herschrijven
 
}}
 
}}
 
=Omschrijving=
 
=Omschrijving=
MALMan moet in de eerste plaats een tool worden om onze boekhouding te doen, ons ledenbestand te beheren, een inventaris bij te houden.
+
MALMan (Members Accounting Library Management) moet in de eerste plaats een tool worden om:
Eventueel kunnen we de kassa hierin verwerken, aangezien die toch gebruik maakt van dezelfde database.
+
* [M] ons ledenbestand te beheren
 +
* [A] onze boekhouding te doen
 +
* [L] een inventaris bij te houden.
 +
 
 +
Hoewel de kassa een apart programma is (vwcr) zit het mee in de repository van MALMan omdat het nauw verbonden is met MALMan (o.a. dezelfde database).
 
Het zou ook tof zijn als we ergens een plaats hadden om gegevens bij te houden waar leden aan moeten kunnen, maar die we liever niet gewoon op de wiki zetten (logins voor verschillende systemen bijvoorbeeld).
 
Het zou ook tof zijn als we ergens een plaats hadden om gegevens bij te houden waar leden aan moeten kunnen, maar die we liever niet gewoon op de wiki zetten (logins voor verschillende systemen bijvoorbeeld).
  
Line 50: Line 54:
  
 
===Kassa===
 
===Kassa===
Niet dringend, misschien zelfs helemaal niet nodig (als we VWCR aanpassen).
+
De kassa wordt niet geïntegreerd in MALMan maar VWCR wordt herschreven. Er zou in MALMan wel een api komen waar VWCR gebruik van kan maken.
Als we ervoor kiezen om VWCR te behouden, zou ik ervoor kiezen om JCR (de kassa van Josto) te gebruiken als basis en die aan te passen.  De functionaliteit JCR ligt dichter bij wat de leden op dit ogenblik verwachten van de kassa.
+
 
* Drank cash kunnen betalen
 
* Drank cash kunnen betalen
 
* Drank van account kunnen betalen
 
* Drank van account kunnen betalen
Line 57: Line 60:
 
* Kunnen zien voor hoeveel geld er gedronken is
 
* Kunnen zien voor hoeveel geld er gedronken is
 
* Kunnen zien hoeveel daarvan we aan Josto moeten betalen
 
* Kunnen zien hoeveel daarvan we aan Josto moeten betalen
 +
* Kunnen zien hoeveel drank er in de de space aanwezig is/zou moeten zijn
 
* De stock kunnen aanvullen
 
* De stock kunnen aanvullen
  
Line 63: Line 67:
 
In het verleden is er al een paar keer geopperd om daar MALMan voor te gebruiken, aangezien dat er daar altijd (in theorie dan toch) de recentste lijst in zit van wie daar dan aan moet kunnen en alle leden daar toch al (in theorie dan toch) een login voor hebben.
 
In het verleden is er al een paar keer geopperd om daar MALMan voor te gebruiken, aangezien dat er daar altijd (in theorie dan toch) de recentste lijst in zit van wie daar dan aan moet kunnen en alle leden daar toch al (in theorie dan toch) een login voor hebben.
  
=Status=
+
===Uitleningen===
pré-kinderschoenen-fase
+
* Een plaats om bij te houden wat aan wie is uitgeleend (bijvoorbeeld boeken of zo)
 +
 
 +
=MALMan v2=
 +
 
 +
== Implementatie ==
 +
MALMan is a wsgi webapp that can be served by webservers with wsgi support (Apache, nginx). We use make use of Flask, a lightweight web application framework written in Python and based on the Werkzeug WSGI toolkit and Jinja2 template engine. We complement this with several Flask plugins:
 +
* flask-sqlalchemy: SQL toolkit and Object Relational Mapper, deals with the database.
 +
* flask-wtf: generated and validates HTML forms, protection against CSRF.
 +
* flask-login: user session management: logging in, logging out, and remembering users’ sessions
 +
* flask-principal: adds permissions and roles
 +
* flask-security: integrates multiple extensions to implement common security mechanisms.
 +
* flask-mail: sending email
 +
* flask-upload: uploading files
 +
 
 +
== API ==
 +
MALMan exposes a RESTful api to be used by the cash register. These resources are secured with HTTP Basic Auth, as defined in MALMan's config.
 +
 
 +
{| class="wikitable"
 +
|-
 +
! URI !! method !! args !! use
 +
|-
 +
|style=white-space:nowrap| /api/stock
 +
| GET
 +
| None
 +
| Returns active stockitems as a json formatted array.
 +
|-
 +
|style=white-space:nowrap| /api/user
 +
| GET
 +
| None
 +
| Returns members with positive bar accounts as a json formatted array.
 +
|-
 +
|style=white-space:nowrap| /api/user/<user_id>
 +
| GET
 +
| password, as a query string parameter
 +
| Returns a user's account balance as a float if user and password match, returns "False" otherwise.
 +
|-
 +
|style=white-space:nowrap| /api/purchase
 +
| POST
 +
| item_id & user_id (optional), as POST data key-value pairs 
 +
| Registers a purchase in the bar log. Link it to the users bar account or a cash transaction depending on if a user is specified.
 +
|}
 +
 
 +
== To do ==
 +
We mainly use Github to track issues are migrating this list to: https://github.com/voidwarranties/MALMan/issues?state=open
 +
 
 +
=== UX ===
 +
* write a decent confirmation email upon registration
 +
* add notifications for certain events
 +
** membership request is accepted
 +
** notify members with member managment role of membership requests
 +
** notify members with finances role of reimbursement requests
 +
* add filtering to tables where needed
 +
** bar log
 +
** cash log
 +
* improve graphical design
 +
** use symbolic icons
 +
* make vield failing validation more visible
 +
** add a red border around the input element
 +
* improve the menu: the current page is not discernable in the menu
 +
 
 +
=== bugs ===
 +
* if you upload multiple files at once, and one has an extension that is not whitelisted the validator does not work and you will get an werkzeug error.
 +
* we don't save whom a user payed when he files a reimbursement request
 +
 
 +
=== code cleanup ===
 +
* somehow the textarea tag around the motivation field is sent along and written to the DB. these tags are then stripped in the view by using the striptag filter. This doesn't happen when using the TextAreaField outside flask_security
 +
* The content of confirmation flashes is often incorrect, check the way we construct these messages when processing POSTs
 +
* checklist:
 +
** all HTML, CSS & javascript validates
 +
** consistent whitespace in produced HTML
 +
** code duplication is kept to a minimum, recurring blocks of code are replaced by functions
 +
** the number of times we read from the DB is kept to a minimum
 +
** the number of times we write to the DB (db.session.commit()) is kept to a minimum
 +
** all POST request return an HTTP 302 redirrect (to prevent data from being submitted twice if users refresh the page)
 +
** all POSTs are validated by form.validate_on_submit()
 +
** the necessary validators are assigned to every form field
 +
** all input elements are defined by WTF instead of in the html template
 +
** check the way forms are initialized and fields are dynamically set
 +
 
 +
== Roadmap ==
 +
 
 +
===1.96===
 +
Goal: feature parity with MALMan 1
 +
exceptions: kasboeken, dagboeken (if requestes, we have two weeks to produce these)
 +
 
 +
=== 1.97 ===
 +
Goal: MALMan is usable for all its intended purpuses.
 +
 
 +
 
 +
=== 1.98 ===
 +
Goal: MALMan has a decent user interface.
 +
 
 +
=== 1.99 ===
 +
Close all outstanding bugs, refactoring, final security check.
 +
 
 +
=== 2.0 ===
 +
Work completed!
 +
 
 +
== bugs ==
 +
* when using the flask dev server a werkzeug 411 error will be displayed when uploading a file larger than we allow. This doesn't occur when serving as a WSGI app and is a bug in flask.
  
=To Do=
+
= Code share omgeving =
euh, alles :)
+
*De code komt op github: https://github.com/voidwarranties/MALMan (er komt nog een kleine howto over hoe je dit kan gebruiken). Annoniem kan je lezen, mensen die willen contributen kunnen een pull request aanmaken.
* Een taal of een aantal talen kiezen om het ding in te schrijven
+
* Uitdokteren hoe het spul moet werken, ism de werkgroep boekhouding
+
* Een plek zoeken om de code bij te houden, met version control
+

Latest revision as of 16:01, 8 June 2013


MALMan
What:
MALMan herschrijven
Coding.gif
Participants:
Koert, User:Warddr, Koen, Berz
Category:
Coding
Locations:
Den Bunker

Contents

Omschrijving

MALMan (Members Accounting Library Management) moet in de eerste plaats een tool worden om:

Hoewel de kassa een apart programma is (vwcr) zit het mee in de repository van MALMan omdat het nauw verbonden is met MALMan (o.a. dezelfde database). Het zou ook tof zijn als we ergens een plaats hadden om gegevens bij te houden waar leden aan moeten kunnen, maar die we liever niet gewoon op de wiki zetten (logins voor verschillende systemen bijvoorbeeld).

Wishlist

Boekhouding

Het belangrijkste aspect van MALMan: onze boekhouding kunnen bijhouden.

Ledenbestand

Heel dringend want in de huidige MALMan werkt dit voor geen meter, waardoor er vanalles misloopt... Een deftig ledenbestand hebben is naast gemakkelijk ook tamelijk wettelijk verplicht. We hebben ook een plek nodig om bij te houden wie wat mag doen in MALMan, dit is daar de meest voor de hand liggende plek voor.

Inventaris

Niet het dringendste deel van MALMan, maar ik zou het er uiteindelijk toch graag in hebben, voor de jaarrekening en de stock van de kassa hebben we sowieso toch een iets in die richting nodig.

Kassa

De kassa wordt niet geïntegreerd in MALMan maar VWCR wordt herschreven. Er zou in MALMan wel een api komen waar VWCR gebruik van kan maken.

Plek om niet-voor-iedereen-toegankelijke informatie bij te houden

We hebben een plek nodig om informatie bij te houden (zoals logins) waar alleen leden aan moeten kunnen. In het verleden is er al een paar keer geopperd om daar MALMan voor te gebruiken, aangezien dat er daar altijd (in theorie dan toch) de recentste lijst in zit van wie daar dan aan moet kunnen en alle leden daar toch al (in theorie dan toch) een login voor hebben.

Uitleningen

MALMan v2

Implementatie

MALMan is a wsgi webapp that can be served by webservers with wsgi support (Apache, nginx). We use make use of Flask, a lightweight web application framework written in Python and based on the Werkzeug WSGI toolkit and Jinja2 template engine. We complement this with several Flask plugins:

API

MALMan exposes a RESTful api to be used by the cash register. These resources are secured with HTTP Basic Auth, as defined in MALMan's config.

URI method args use
/api/stock GET None Returns active stockitems as a json formatted array.
/api/user GET None Returns members with positive bar accounts as a json formatted array.
/api/user/<user_id> GET password, as a query string parameter Returns a user's account balance as a float if user and password match, returns "False" otherwise.
/api/purchase POST item_id & user_id (optional), as POST data key-value pairs Registers a purchase in the bar log. Link it to the users bar account or a cash transaction depending on if a user is specified.

To do

We mainly use Github to track issues are migrating this list to: https://github.com/voidwarranties/MALMan/issues?state=open

UX

bugs

code cleanup

Roadmap

1.96

Goal: feature parity with MALMan 1 exceptions: kasboeken, dagboeken (if requestes, we have two weeks to produce these)

1.97

Goal: MALMan is usable for all its intended purpuses.


1.98

Goal: MALMan has a decent user interface.

1.99

Close all outstanding bugs, refactoring, final security check.

2.0

Work completed!

bugs

Code share omgeving

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
Content Creation
Belgian Spaces