timelessis's People
Forkers
krzyk bkuzmic marceloamadeu ammaratef45 vatavuk blackout314 amihaiemil carlosmiranda ekondrashev lastk amritlamsal123 salgadobreno volley97 ebercamargo vladimirryzhkov soin08 rohitpokhrel1 horoscopes 5l1v3r1 a269chtimelessis's Issues
models.py:7-11: Continue implementation. Employees should...
The puzzle 4-49d25317
from #4 has to be resolved:
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.
poster.py:9-10: Create a job using cron that will...
The puzzle 23-80456a24
from #23 has to be resolved:
The puzzle was created by Vatavuk 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.
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.
views.py:2-5: Continue implementing login(),...
The puzzle 5-b6c5b635
from #5 has to be resolved:
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.
models.py:8-10: Continue implementation. Locations should...
The puzzle 10-5d67d6d0
from #10 has to be resolved:
https://github.com/timelesslounge/timelessis/blob/master/timeless/models.py#L8-L10
The puzzle was created by @amihaiemil on 25-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.
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.
__init__.py:3-6: Setup a pre-commit git hook, to forbid...
The puzzle 48-20105c4a
from #48 has to be resolved:
The puzzle was created by @amihaiemil on 30-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.
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?
SMS Notification class
Develop a new class to send notifications via SMS using RedSMS.
models.py:12-18: Create constructor for Employee model....
The puzzle 4-6ceceaee
from #4 has to be resolved:
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:39-41: Implement TimestampMixin, like in the...
The puzzle 3-3e61ed39
from #3 has to be resolved:
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:
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
Update README with more information about local setup
Update README to provide more information:
- More detailed setup of development environment
- split setup and dependency install as separate chapters
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:
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)
- 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
Add pylint to Rultor
Right now, it is possible to run
pylint timeless
to see all code smells in the project.
To enforce code to have a cerain quality, I would like to add pylint check in Rultor during merge and stop merging if total quality is below a certain threshold (passed as parameter).
This is an exmple on how it could be done: https://stackoverflow.com/questions/50944575/how-to-set-a-pylint-score-threshold
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.
models.py:8-11: Continue implementation. Floors should...
The puzzle 11-dae961e8
from #11 has to be resolved:
The puzzle was created by @amihaiemil on 25-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.
scheme_condition.py:9-11: Continue implementation as in...
The puzzle 18-e4de0db5
from #18 has to be resolved:
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:
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:
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;
poster.py:28-30: Implement auth process following the...
The puzzle 23-30e93e1c
from #23 has to be resolved:
The puzzle was created by Vatavuk 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.
Setup Integration tests for models
In order to properly test models, we will have to setup integration tests with database.
Here is an example of how to do this:
https://pypi.org/project/pytest-flask-sqlalchemy/
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.
models.py:36-38: Create management pages for Companies to...
The puzzle 3-8de36b15
from #3 has to be resolved:
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.
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.