Coder Social home page Coder Social logo

crem's Introduction

CREM

Convention Resource Event Management

Purpose

This web app will help a small team of convention organizers schedule a huge number of events for a highly-diverse multi-track convention, such as Penguicon, identifying all resource conflicts.

Penguicon has about 500 events over a single weekend, in about seventeen different tracks, each track with its own organizer.

For years, Penguicon has planned its schedule using two systems, and kept them in sync manually.

In a spreadsheet, we represented rooms as columns, and times as rows, so we can catch conflicts. But that doesn't store the event description, the topics, whether or not it is "just an idea"/"probably happening"/"confirmed", and other important data.

A database allowed us to store and present a schedule with all the details associated with each event. But the databases we have used could not catch conflicts in which two events are scheduled in the same room at the same time, or a presenter in two places at one time, or duplicated events or presenters.

We are creating C.R.E.M. because we need one solution which stores all the data we use, and also alerts us to conflicts.

Prerequisites

To develop for this project, you will need node, grunt, and bower. Download node from https://nodejs.org/en/download/ and install it.

Then use this on the command line for node package manager (npm) to install bower and grunt: npm install -g bower grunt-cli

Note: If you install node from a repository, it may be installed as nodejs rather than node, which will cause problems with subsequent steps in this procedure. To make sure that the node command will work correctly, enter the command node --help. You should see options for running node. If instead you see an error indicating that the command was not found, you will need to create a symbolic link from node to nodejs. (The steps to do this depend on your operating system.)

Installation

In the project directory, execute ./install.sh (on Mac or Linux), or install.bat (on Windows). This step only needs to be performed once.

This will do two things. First it will create a Python virtual environment called venv and install a version of Python in it.

Note: one of the python packages installed is bcrypt, which requires the libffi system package. If you are running a debian-based distribution such as Ubuntu, you would install libffi-dev with the command:

sudo apt-get install libffi-dev

The second thing will be to run bower install which will install a folder app/static/lib full of Javascript third-party dependencies.

We won't change the contents of third-party dependencies; instead we will only edit bower.json which determines which versions of dependencies we will use, managed by Bower.

If you install CREM in a production environment, be sure to update the value of SECRET_KEY in secretkeys.py. (See the documentation in secretkeys.py for an explanation of how to do this.)

Activating the Virtual Environment

The steps below require that you activate the virtual environment.

In Linux, activate the virtual environment with the command:

source venv/bin/activate

In Windows, activate the virtual environment with the command:

venv\Scripts\activate

Creating the Database

Activate the virtual environment as described above. Then create the database with the command:

python db_create.py

If you have already previously run this command, you will see the file app.db.

Adding Test Data

Activate the virtual environment as described above. Then add test data to the database with the command:

python dev/add_testdata.py

Running the Application

Activate the virtual environment as described above. Then start the application with the command:

python run.py

The application will now appear at http://localhost:5000.

crem's People

Contributors

bruce-webber avatar mattarnold avatar alis0nc avatar kamni avatar lmorchard avatar

Stargazers

 avatar Whats_in_name avatar Cylithria Dubois avatar James H. avatar

Watchers

 avatar  avatar  avatar James Cloos avatar James H. avatar Cylithria Dubois avatar

crem's Issues

Conflict Catching

When an event is set to Active (that is, it is not canceled) and has a conflict, it will have a red background and a warning icon.

Conflicts include:

-another event has one of this event's people in a different place during the same time slot
-another event is in the same room during the same time slot

For the event's listing on the schedule view, the entire div row for that event will have a red background.

In the grid view (in which columns are rooms and rows are time slots), the event's cell in the grid will have a red background.

Authentication

Only show the site to those who log in with a Google authentication. We are fortunate that we only have to authenticate a specified whitelist of users who are selected by the Head of Programming (our admin user) to do work for Penguicon.

A user's email will always be a Penguicon email address (which is a GMail address) such as tech @penguicon.org. Therefore, Google sign-in should (we hope) work for all users. https://developers.google.com/identity/sign-in/web/build-button

The front of the email address serves as a track name, and the user's username. Email = username = track name.

There will be one user who is an exception, programming @penguicon.org, who is the admin user and not associated with any particular track.

Implementation

On all routes, implement the @login_required decorator from the Flask-Login extension

from flask.ext.login import login_required

Then route ('/') to view whichever track is coordinated by the logged-in user. Examples:

I log in as tech @penguicon.org: '/' -> '/tech' I see the list of Tech track events.

I log in as something which does not correspond to a track, such as programming @penguicon.org: '/' -> '/admin' which is an administration page. If it is not a Penguicon email address, deny access to the site, and route the user to a page which gives plentiful contact information with which to get help.

Each user, having logged in, may then use the navigation to surf to any page they wish. The above routing only determines their default homepage, in order to show them what is most relevant to their responsibilities.

Page doesn't use angular-local-storage

Currently home-controller.js and admin-controller.js doing all the work, and schedule.factory.js isn't using local storage. Ideally both the home and admin controllers should be sharing schedule.factory.js so it's not repeating work or hitting the backend if local storage is there.

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.