Git Product home page Git Product logo

timelessis's People

Contributors

amihaiemil avatar ammaratef45 avatar bkuzmic avatar carlosmiranda avatar ebercamargo avatar ekondrashev avatar emilianodellacasa avatar krzyk avatar marceloamadeu avatar pablopaul avatar paulodamaso avatar rultor avatar salgadobreno avatar soin08 avatar vladimirryzhkov avatar vryazanov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

timelessis's Issues

models.py:7-11: Continue implementation. Employees should...

The puzzle 4-49d25317 from #4 has to be resolved:

https://github.com/timelesslounge/timelessis/blob/9d766c68177563543f6cee80591ce186345d0816/employees/models.py#L7-L11

The puzzle was created by Boris Kuzmic on 26-Jan-19.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Comment of the day

For the Reservation module, it is required to create a new simple model called Comment, that will be displayed on the Timeline view (that will be developed in a future issue).

The main attributes of this model are:

  • id
  • employee_id
  • description
  • date
  • created_on
  • updated_on

The date attribute will be used to decide when to show the comment on the Timeline view (only for a single day).

Comments should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column.

Table model

The Table model represents the tables that are part of the Location. The Table model should also contain a reference to a Floor model (defined in #11).

These are the main attributes:

  • Id
  • Table name (unique in the same location);
  • floor_id (link to Floor)
  • X-axis table coordinate
  • Y-axis table coordinate
  • Table height
  • Table width
  • Table status (available / unavailable / removed)
  • Max Capacity
  • Multi-reservation flag (if a table can fit > 1 reservation)
  • PlayStation tag (if a table has a PlayStation)

Tables should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column.

Table management page should be accessed by the Location and Floor pages.

Role model

Employee may have one or more roles assigned, determining what the employee can do inside the application.

These are the predefined roles for the application:

  • Administrator
  • Owner
  • Director
  • Manager
  • Location Admin
  • Master
  • Cleaner
  • Intern
  • Candidate

These are the main attributes:

  • id
  • name
  • flag "works on shift"
  • company_id

Roles should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column.

The privileges for each role will be defined in a future issue.

Create script for regular backups

Create a script to be run in cron to backup (and restore) production DB.

The script will upload the backup to a Google Drive account.

Deploy scripts to staging server using Rultor

We need to develop a script using Rultor to deploy and run the webapp in a staging server.

As a reference, in this phase we will use a Digital Ocean Droplet

The script shall:

  • accept an input param as tag;
  • verify that the test runs smoothly;
  • git tag;
  • copy code on remote server;
  • create database (if not existing);
  • run migrations;
  • set env variables and restart the server;
  • add scripts in cron (like the one created in #47)
  • verify the webapplication is running;

Why do we keep models in one file?

According to this, all DB models should be declared into one single file, models.py. Is this the norm in the Python world?

I find it messy and, in the beginning (until all models are done) there will be a lot of conflicts.

Don't push migrations manually

Since migration problems will occure more often as people start adding more and more models, I propose not to push migrations manually. I would drop creating migrations on every change/add of model (add them to git ignore). Instead, I would use rultor to create migration file after each release. WDYT?

models.py:12-18: Create constructor for Employee model....

The puzzle 4-6ceceaee from #4 has to be resolved:

https://github.com/timelesslounge/timelessis/blob/9d766c68177563543f6cee80591ce186345d0816/employees/models.py#L12-L18

The puzzle was created by Boris Kuzmic on 26-Jan-19.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

models.py:29-31: Continue implementation as in #17....

The puzzle 17-965ca61a from #17 has to be resolved:

https://github.com/timelesslounge/timelessis/blob/e9d82cbeba7cb2a26d78a1ead6b501a2cbac3e5b/schemetypes/models.py#L29-L31

The puzzle was created by @amihaiemil on 29-Jan-19.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Access management

In order for the employees to access the webapp, we should provide the access system.

These are the functions that shall be developed:

  • login (by username and password defined in Employee model, see #4);
  • logout;
  • activation link sent by email upon account creation (developed in #4)
  • forgotten password;

The login page shall have the following elements:

  • Logo
  • Caption “Login Page”
  • username
  • password
  • Login Button

Forgotten password page should be similar in structure.

Once user has logged in we will redirect to his/her profile page, containing

  • a navbar at the top left (that should appear in all internal pages);
  • "Profile" menu item;
  • "Logout" menu item;
  • Employee name minified (ex. "John S.")

SchemeType attributes for Table model

In this issue, the developer shall add the attributes SchemeType for Table model

These are the attributes that will be added:

Table:

  • minimum capacity;
  • deposit per hour;

Create app skeleton

We need to create the skeleton for the webapp.

The skeleton should have following requirements:

use Python as programming language;
use Flask as framework;
provide a "Hello World" page;
have a first well structured test suite;
include PDD;
include Rultor for deploy;

Employee privileges for Administration

The privileges for TimelessIs application are based on the Role(s) an Employee may have. This should be implemented in a module that can be seamlessly integrated in Flask and can dictate what the user can do and what can't.

These are the main privileges for the Administration module (by Role):

  • Administrator
    • Add / Modify / Archive Locations
    • Create / modify / activate / deactivate accounts for all Locationspots Employees
    • View All Employee profiles
  • Owner
    • Create / modify / activate / deactivate accounts for all Employee associated with owned Company;
    • Create / modify / delete Locations associated with owned Company;
    • View self-profile
    • View Employee profiles associated with owned Company;
  • Director
    • Create / modify / activate / deactivate accounts for all managers, masters, interns associated with Company he/she belongs to;
    • Create / modify / delete Locations associated with owned Company;
    • View self-profile
    • View profiles of managers, masters, interns associated with Company he/she belongs to;
  • Manager
    • Create / modify / activate / deactivate accounts for all managers, masters, interns associated with Company he/she belongs to;
    • View self-profile
    • View profiles of managers, masters, interns associated with Company he/she belongs to;
  • Location Admin
    • Only reservation table access (Developed in a future issue)
  • Master / Intern /Others
    • View self-profile
    • Modify own account

Settings page

A Setting page should be developed for the reservation module. A model for Settings should also be developed and data stored on the database.

  • default duration of a Reservation (developed in #27); this value should be shown as default upon a Reservation creation;
  • default deposit amount of a Reservation; this value should be shown as default upon a Reservation creation;
  • flag for activating SMS notification;
  • threshold time after sending an SMS;
  • time window to apply a greeting in the SMS notification (Good morning / Good afternoon / Good evening based on current time);
  • sex (applicable only for Russian language);
  • name (Placeholder);

views.py:6-9: Implement before_app_request function that...

The puzzle 5-5e1a2150 from #5 has to be resolved:

https://github.com/timelesslounge/timelessis/blob/e0d7aea5984654c017bebd3326c091fb861d8e98/auth/views.py#L6-L9

The puzzle was created by Boris Kuzmic on 28-Jan-19.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

SchemeType attributes for Locations

In this issue, the developer shall add the attributes SchemeType for Location model.

These are the attributes that will be added:

  • working hours;
  • closed days;

Location model

The Location model represents a bar that is part of the Company (each company may have more Locations).

These are the main attributes of the model:

  • Id
  • Name
  • Unique Code (alphanumeric)
  • company_id
  • Country
  • Region
  • City
  • Address
  • Longitude
  • Latitude
  • Type (franchise, network)
  • Status (Active/Closed)
  • Comment

Locations should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column.

Employee Model

Employee model represents the employee of each company and the account accessing the webapp.

Those are the base attributes:

  • Id
  • First Name
  • Last Name
  • Username
  • Phone Number
  • Birth Date
  • Registration Date
  • Account Status (Activated / Not Activated)
  • User Status (Working / Fired)
  • Email
  • Password (hashed+salted)
  • Individual pin-code (4 digits, unique key)
  • Comment
  • company_id
  • created_on
  • updated_on

Employees should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column. Other possible actions on the Employees should be:

  • Activate/Deactivate button;
  • Fire button;

The page/window for creating a new User must contain fields for entering all of User's attributes, except

  • Registration Date - set automatically (current date)
  • Account Status - the default is Not Activated;
  • User Status - the default is Working
  • Password - generated automatically and sent to the User’s email (specified in the field "Email")
  • Individual pin-code - is similar to “Password”. PIN codes of Users must be unique within the network of spots they are involved in

Floor model

The Floor model represents each fllor that is part of a given Location (as defined in #10).

These are the main attributes:

  • Id
  • Location_id
  • description

Floors should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column.

Floor management page should be accessed by the Location page.

Caching

In order to provide fast response to HTTPS requests, we should add to TimlessIS application support for caching using Redis.

It's up to the developer how to implement caching, but the solution provided should be easy and effective.

scheme_condition.py:9-11: Continue implementation as in...

The puzzle 18-e4de0db5 from #18 has to be resolved:

https://github.com/timelesslounge/timelessis/blob/f048a2d8692813197c6ec08bbaaa0c3a2550bf76/db/schemetypes/scheme_condition.py#L9-L11

The puzzle was created by @amihaiemil on 26-Jan-19.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Tests have unnecessary global dependencies

Currently, testing of models is done through pytest.fixture by injecting concrete models. We are instantiating model object with some test data in conftest.py and then we execute assertions on it in test_models.py.

I believe we shouldn't use fixtures like this firstly because there is no need for them in these scenarios. Fixtures should be used to inject additional dependencies that tests may need, such as db connection or some additional resources and not to inject the object under test. Secondly, tests are now hard to read because of information spreading and they are not well isolated (because of global dependencies).

I propose to refactor tests under test_models.py to simply instantiate model objects directly in tests.

views.py:10-12: Continue implementing Settings page for...

The puzzle 32-d70f7c1c from #32 has to be resolved:

https://github.com/timelesslounge/timelessis/blob/b787c79b7a9416c612c10714a080e57058bcf008/reservations/views.py#L10-L12

The puzzle was created by Vlad Arefev on 29-Jan-19.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Poster integration for Location model

In this first step, we need to synchronize TimelessIs database with an existing database managed by Poster application. The API description can be found at the following address:

https://dev.joinposter.com/en/docs/api#introduction

In this issue a job will be created to sync data for the Location model, using the appropriate API:

  • the job will be run using cron on a daily base;
  • a new attribute poster_id will be added to the Location model, to store there the id of the BE in Poster;
  • a new attribute synchronized_on will be added to the Location model;
  • data coming from Poster has priority upon data stored in our database (for now);
  • while solving this issue, take into account that other jobs will be developed for other models in Timeless, so try to develop reusable code;

Set up Dockerfile

To avoid project deployment on a personal OS, I suggest to set up Dockerfile with docker-compose.yml.

  • In Dockerfile we should make all preparations for our application container (set up python, install dependencies, etc)
  • docker-compose.yml should contain application and postgres containers at this moment.
  • Command docker-compose up should run flask application.

API to retrieve Reservations

An API endpoint should be created to retrieve a list of reservations (developed in #27) in JSON format, based on following parameters:

  • location;
  • date;

The API should be password protected and linked to a specific Company (developed in #3), that will be used to filter out all data not belonging to that company.

Company Model

Timeless IS manages different companies (i.e. bar franchises), each company has its own users having different roles and privileges. The company is the base Business Entity to which almost any other BE refers to.

Those are its base attributes:

  • id (Primary Key)
  • name (Unique)
  • code (Unique)
  • address
  • created_on
  • updated_on

Companies should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column.

Table Shape Model

The Table Shape model represents the shape a Table can have.

The main attributes are:

  • Id
  • Description (Unique)
  • Picture/Raster
  • company_id

Table Shape should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column.

In this issue, a table_shape_id should be also added to Table model (developed in #12) and managed/viewed.

models.py:7-9: Continue implementation. Table Shape...

The puzzle 13-e94c1888 from #13 has to be resolved:

https://github.com/timelesslounge/timelessis/blob/664b147135ef22415eb5f876b8762e33123cc80b/restaurants/models.py#L7-L9

The puzzle was created by @amihaiemil on 29-Jan-19.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Poster Integration for Table model

In this first step, we need to synchronize TimelessIs database with an existing database managed by Poster application. The API description can be found at the following address:

https://dev.joinposter.com/en/docs/api#introduction

In this issue a job will be created to sync data for the Table model, using the appropriate API:

  • the job will be run using cron on a daily base;
  • a new attribute poster_id will be added to the Table model, to store there the id of the BE in Poster;
  • a new attribute synchronized_on will be added to the Table model;
  • data coming from Poster has priority upon data stored in our database (for now);
  • try reusing code taken from issue #23

Migrations are broken

I'm trying to run python manage.py db upgrade on empty db and get these:

(venv) MBP-Vlad:timelessis vladarefev$ python manage.py db upgrade
/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
  """)
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 503a67df3f7f, empty message
INFO  [alembic.runtime.migration] Running upgrade 503a67df3f7f -> be62103a5fd6, empty message
INFO  [alembic.runtime.migration] Running upgrade be62103a5fd6 -> 4e1a909ab513, empty message
INFO  [alembic.runtime.migration] Running upgrade 4e1a909ab513 -> 4d7589fae495, empty message
INFO  [alembic.runtime.migration] Running upgrade 4d7589fae495 -> 79f280c6c1f4, empty message
INFO  [alembic.runtime.migration] Running upgrade 79f280c6c1f4 -> 0d17ec999973, empty message
ERROR [alembic.env] (psycopg2.ProgrammingError) column "address" of relation "companies" already exists
 [SQL: 'ALTER TABLE companies ADD COLUMN address VARCHAR'] (Background on this error at: http://sqlalche.me/e/f405)
Traceback (most recent call last):
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1230, in _execute_context
    cursor, statement, parameters, context
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 536, in do_execute
    cursor.execute(statement, parameters)
psycopg2.ProgrammingError: column "address" of relation "companies" already exists


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 13, in <module>
    MANAGER.run()
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/flask_script/__init__.py", line 417, in run
    result = self.handle(argv[0], argv[1:])
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/flask_script/__init__.py", line 386, in handle
    res = handle(*args, **config)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/flask_script/commands.py", line 216, in __call__
    return self.run(*args, **kwargs)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/flask_migrate/__init__.py", line 95, in wrapped
    f(*args, **kwargs)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/flask_migrate/__init__.py", line 280, in upgrade
    command.upgrade(config, revision, sql=sql, tag=tag)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/command.py", line 276, in upgrade
    script.run_env()
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/script/base.py", line 475, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/util/pyfiles.py", line 90, in load_python_file
    module = load_module_py(module_id, path)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/util/compat.py", line 156, in load_module_py
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "migrations/env.py", line 91, in <module>
    run_migrations_online()
  File "migrations/env.py", line 84, in run_migrations_online
    raise exception
  File "migrations/env.py", line 81, in run_migrations_online
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/runtime/environment.py", line 839, in run_migrations
    self.get_context().run_migrations(**kw)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/runtime/migration.py", line 361, in run_migrations
    step.migration_fn(**kw)
  File "/Users/vladarefev/timelessis/migrations/versions/0d17ec999973_.py", line 21, in upgrade
    op.add_column('companies', sa.Column('address', sa.String(), nullable=True))
  File "<string>", line 8, in add_column
  File "<string>", line 3, in add_column
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/operations/ops.py", line 1904, in add_column
    return operations.invoke(op)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/operations/base.py", line 345, in invoke
    return fn(self, operation)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/operations/toimpl.py", line 131, in add_column
    operations.impl.add_column(table_name, column, schema=schema)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/ddl/impl.py", line 230, in add_column
    self._exec(base.AddColumn(table_name, column, schema=schema))
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/alembic/ddl/impl.py", line 134, in _exec
    return conn.execute(construct, *multiparams, **params)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 974, in execute
    return meth(self, multiparams, params)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/sql/ddl.py", line 72, in _execute_on_connection
    return connection._execute_ddl(self, multiparams, params)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1036, in _execute_ddl
    compiled,
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1234, in _execute_context
    e, statement, parameters, cursor, context
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1452, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 296, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 276, in reraise
    raise value.with_traceback(tb)
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1230, in _execute_context
    cursor, statement, parameters, context
  File "/Users/vladarefev/timelessis/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 536, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) column "address" of relation "companies" already exists
 [SQL: 'ALTER TABLE companies ADD COLUMN address VARCHAR'] (Background on this error at: http://sqlalche.me/e/f405)
(venv) MBP-Vlad:timelessis vladarefev$ 

Scheme Type Model

Scheme Type model is a special feature of Timeless IS, designed to given more flexibilities to some models.

Essentialy, Scheme Type is a complex data type that can be assigned to any model defined in TimelessIS, allowing certain attributes to have a default value at certain conditions, but this value could change based for example on the day or time of the day.

For example, a Table model could require a given Deposit price during the weekdays and a different one (higher) during weekend.

These are the attributes:

  • Id
  • Description (Unique)
  • Default value (Mandatory)
  • ValueType (Can be any type supported by python)
  • Sets of conditions (This will be developed issue #18)

SchemeType should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column.

Poster integration for Customer model

In this first step, we need to synchronize TimelessIs database with an existing database managed by Poster application. The API description can be found at the following address:

https://dev.joinposter.com/en/docs/api#introduction

In this issue a job will be created to sync data for a new model called Customer (that will be also developed in this issue), using the appropriate API.

The main attributes of the Customer model are:

  • Identifier
  • Name
  • Last Name
  • Phone
  • poster_id
  • created_on
  • updated_on
  • synchronized_on

These are the features for the import job:

  • the job will be run using cron on a daily base;
  • data coming from Poster has priority upon data stored in our database (for now);
  • try reusing code taken from issue #23

Reservation model

The Reservation model represents the reservations that can be made for a given Table (developed in #12) at a given Location (developed in #10).

Those are the main attributes for the model:

  • Id
  • Start Time
  • End Time
  • Duration
  • Customer Identifier
  • Table Identifiers
  • Number of persons
  • Comment
  • Status (See reservtion lifecycle in the README file)
  • created_on
  • updated_on

In this issue just an index and a view page will be developed to list all reservations, as a different one will be created to create/edit reservations. In the index page there should be also a function to delete the reservation (after confirmation). In the index page it should be possible to sort and filter for every column.

Also, when developing this please take note of the following features:

  • Reservation Management module should be deployed on separate subdomain;
  • One reservation can contain multiple tables;

Item model

The Item model represents an inventory object that can be given to Employees or stored in a Location

These are the main attributes:

  • Id
  • Name
  • Stock Date (Item added to warehouse)
  • Comment
  • company_id

Items should store its historic data (i.e. XL Shirt was in Location until yesterday, then today John Smith received it) in a separate table, with starting and ending time (if ending is missing, the item is currently in that place).

Companies should have its own management pages to list, create, edit and delete them. In the index page it should be possible to sort and filter for every column. A new function to assign items to users should be developed as well (in User management pages).

SchemeCondition model

The SchemeCondition model is strictly bound to SchemeType model (developed in #17), representing the conditions at which the default value stored in the SchemeType model can change (see issue #17 for an example).

These are the main attributes:

  • Id
  • Value
  • Priority
  • Start Time
  • End Time
  • Set of weekdays
  • Set of month days
  • Set of dates

The possibility to create/edit/delete the conditions shall be made inside SchemeType page for consistency.

Need a definition for string quotes

According to String quotes section in PEP:

In Python, single-quoted strings and double-quoted strings are the same. This PEP does not make a recommendation for this. Pick a rule and stick to it. When a string contains single or double quote characters, however, use the other one to avoid backslashes in the string. It improves readability.

We do not have defined which character to use, so we have a both of them being used in our files, violationg this rule. Let's define which character to use (' or ") and replace the other one in all files

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.