raspibo / eventman Goto Github PK
View Code? Open in Web Editor NEWYour friendly manager of attendees at an event
License: Apache License 2.0
Your friendly manager of attendees at an event
License: Apache License 2.0
Opening the page of an existing person, a dictionary for every event in the database is returned, complete with all the attendees. It should be enough to have the edited person, in that list.
Currently date and times are converted into Date object, but not shown nicely.
Probably, a directive must be written.
Print label for attendees.
On the event info page, we can make the normal workflow faster cleaning the query field after a person is marked as attending (or a new person is added) and moving the focus back to the input field.
After we've solved #37, translate strings into Italian.
Introduce more debugging, both in AngularJS and in Tornado web.
Searching for a person using a numeric value in the query returns no results
EG: https://127.0.0.1:5242/events/5732317c59689a07a15e4ce2/persons?order_nr=497997715
When a person is added or removed from the list of registered persons or the list of attendees to an avent, we should show a notification.
Remove the current dropdown to select the sort order and use icons in the column titles.
The 'danger' icon used to show false boolean items is not shown.
It should be possible to bind the web server to a specific address.
Once a person is marked as attending using the QR Code scanner, any browser that is open on the event's info page should be updated to reflect the new status.
Show the name of the current user.
Using a barcode reader, we should be able to set arbitrary fields of persons attending an event (see #35).
Begin and end times are not stored, if "save" is not clicked for each one.
Using custom actions (#22), introduce a checkbox (boolean field) for subscriptions to a newsletter.
Widgets style must be unified and improved.
Consider the use of Font Awesome: https://fortawesome.github.io/
Identify the cups settings required to print with our Dymo labels printer.
Events can't be sorted by begin date.
Introduce a custom logo and a footer with copyright notice.
After the libraries update, the messages to (un)mark the presence of an attendee are no longer shown.
Update AngularJS and related libraries.
Whenever possible, use the minified version.
Pressing logout on the top right bar, no logout
In our showcase environment imported persons are not associated to events.
To better support the QR Code and Barcode scanners, we should introduce a generic controller that will be used to set an arbitrary field to a given value.
When an unauthenticated user is redirected to the /login url, the "next" parameter is populated by tornado with the original path, which could be used for a proper redirection upon successful login.
To reproduce:
You will not able to edit it to modify his/her information.
When the list of attendees contains long names, the column order icons can ends on a new line. This should be avoided.
Introduce the possibility to add custom fields of various kind (text, date, time, boolean, email and so on) to persons and events.
We need to introduce a Settings page.
Right now, it will be used to configure the custom fields (see #22) and edit users and passwords.
introduce user authentication.
It will be base on username/password stored in the MongoDB database.
Since the changes introduced for #86, adding or removing an attendee is not synced.
In the list of events, future ones should be on top.
Another option, is to have just one, duplicated, "Next event" on top, above an "All events" table.
Toggling a boolean value for an attendee (like "attended"), performances suffer, due to the fact that the whole list of persons is reloaded.
We should just send back the changed value, and also communicate it over the WebSocket.
Introduce a way to execute commands when some conditions occurs.
For example, a script could be executed when a person is marked as attendee of an event.
Proposed implementation:
Be sure the handle this with coroutines.
Use English words for CSV fields.
A QR Code scanner (a separated process or daemon) will be used to mark persons as attendees.
A new controller is needed to manage this workflow.
See the https://github.com/raspibo/event_man project.
Triggers should receive the name of user logged in on the web GUI in the WEB_USER environment variable.
switch from HTTP to HTTPS.
The list of events can contain more information, like the number of registered persons and attendees.
Some destructive actions (like deleting an event) should be confirmed using a modal window.
Instead of importing a CSV file, Evenbrite provides some easy to use API, that can be used to import registered persons.
Right now, the 'attended' attribute is set client-side, and not calling the backend. This prevents the triggers to run.
Currently, events emitted by a client are received and processed both locally and from the websocket.
The websocket message should be ignored.
When try to register an attendant using long ebqrcode values es:
http://localhost:5242/events/552590580025e836ebc92ed4/persons/?ebqrcode=411254200519698130001
{"attended": true, "checkin_datetime": "2015-04-22T17:41:38Z"}
MongoDB return an overflow error on int field
OverflowError: MongoDB can only handle up to 8-byte ints
Some key values (especially the ones prepended by $) are no longer valid with MongoDB 2.6, leading to a server side exception. This happens adding a new attendee.
Another example, editing a datetime setting, the value is set but on console we get:
[E 160409 18:35:56 web:1496] Uncaught exception POST /events/57092f65dff0d704314b4ed1 (::1)
HTTPServerRequest(protocol='http', host='localhost:5242', method='POST', uri='/events/57092f65dff0d704314b4ed1', version='HTTP/1.1', remote_ip='::1', headers={'Origin': 'http://localhost:5242', 'Content-Length': '199', 'Accept-Language': 'en-US,en;q=0.8,it;q=0.6', 'Accept-Encoding': 'gzip, deflate', 'Host': 'localhost:5242', 'Accept': 'application/json, text/plain, /', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.108 Chrome/49.0.2623.108 Safari/537.36', 'Dnt': '1', 'Connection': 'keep-alive', 'Referer': 'http://localhost:5242/', 'Cookie': 'org.cups.sid=2c73cdc5fc32b1864ed7a36c5c76aaba; user="2|1:0|10:1460214844|4:user|12:cmVtb3RlMQ==|30cb585baa2ae173a6a3a9b36e0909fccf9f0c365ce31134dd54db954d488fbe"', 'Content-Type': 'application/json;charset=UTF-8'})
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/tornado/web.py", line 1415, in _execute
result = yield result
File "/usr/lib/python2.7/dist-packages/tornado/gen.py", line 870, in run
value = future.result()
File "/usr/lib/python2.7/dist-packages/tornado/concurrent.py", line 215, in result
raise_exc_info(self._exc_info)
File "/usr/lib/python2.7/dist-packages/tornado/gen.py", line 215, in wrapper
result = func(_args, *_kwargs)
File "eventman_server.py", line 59, in my_wrapper
return original_wrapper(self, _args, *_kwargs)
File "/usr/lib/python2.7/dist-packages/tornado/web.py", line 2721, in wrapper
return method(self, _args, *kwargs)
File "eventman_server.py", line 226, in post
merged, newData = self.db.update(self.collection, id, data)
File "/home/da/git/eventman/backend.py", line 227, in update
update={operator: data}, full_response=True, new=True, upsert=create)
File "/home/da/.local/lib/python2.7/site-packages/pymongo/collection.py", line 1738, in find_and_modify
*_kwargs)
File "/home/da/.local/lib/python2.7/site-packages/pymongo/database.py", line 439, in command
uuid_subtype, compile_re, *_kwargs)[0]
File "/home/da/.local/lib/python2.7/site-packages/pymongo/database.py", line 345, in _command
msg, allowable_errors)
File "/home/da/.local/lib/python2.7/site-packages/pymongo/helpers.py", line 182, in _check_command_response
raise OperationFailure(msg % errmsg, code, response)
OperationFailure: command SON([('findAndModify', u'events'), ('query', {'_id': ObjectId('57092f65dff0d704314b4ed1')}), ('update', {'$set': {u'begin-time': u'2016-04-09T15:35:30.236Z', u'$resolved': True, u'title': u'nexto', u'end-date': u'2016-05-13T22:00:00.000Z', u'begin-date': u'2016-05-13T22:00:00.000Z', u'$promise': {}}}), ('new', True), ('upsert', True)]) on namespace eventman.$cmd failed: exception: The dollar ($) prefixed field '$promise' in '$promise' is not valid for storage.
We should improve the performances of the filter query.
Maybe we can delay the search after enough chars are entered, or after a small delay since the last char entered.
Strings ready to be translated must be extracted and the i18n.js file updated.
There seems to be some existing project, but it must be verified if we can use it: https://github.com/angular-translate/grunt-angular-translate
A test suite for both AngularJS and Tornado web would be nice.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.