"New stable"
This commit is contained in:
236
tetastock.py
236
tetastock.py
@@ -4,7 +4,11 @@
|
||||
import math
|
||||
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from functools import wraps
|
||||
|
||||
########################################################################
|
||||
# App settings
|
||||
########################################################################
|
||||
app = Flask(__name__)
|
||||
app.config.from_pyfile('config.py')
|
||||
app.secret_key = '446307a5f61c2bb810436b2ee0f903f2'
|
||||
@@ -12,6 +16,9 @@ app.debug = True
|
||||
app.static_url_path='/static'
|
||||
db = SQLAlchemy(app)
|
||||
|
||||
########################################################################
|
||||
# Database
|
||||
########################################################################
|
||||
class Stock_users(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
mail = db.Column(db.Text, nullable=False)
|
||||
@@ -47,6 +54,62 @@ class Stock_kit_compositions(db.Model):
|
||||
component_id = db.Column(db.Integer, db.ForeignKey('Stock_componants.id'), nullable=False)
|
||||
component_quantity = db.Column(db.Integer, nullable=False)
|
||||
|
||||
def resume_session(func):
|
||||
@wraps(func)
|
||||
def check(*args, **kwargs):
|
||||
# default
|
||||
limit = 8
|
||||
offset = 0
|
||||
nexthop = offset + limit
|
||||
prevhop = offset
|
||||
sort = 'reference'
|
||||
order = 'asc'
|
||||
order_refresh = 0
|
||||
c_empty = ''
|
||||
c_provider = 1
|
||||
if not 'c_limit' in session:
|
||||
session['c_limit'] = limit
|
||||
if not 'c_offest' in session:
|
||||
session['c_offset'] = offset
|
||||
if not 'c_sort' in session:
|
||||
session['c_sort'] = sort
|
||||
if not 'c_order' in session:
|
||||
session['c_order'] = order
|
||||
if not 'c_order_refresh' in session:
|
||||
session['c_order_refresh'] = order_refresh
|
||||
if not 'c_nexthop' in session:
|
||||
session['c_nexthop'] = nexthop
|
||||
if not 'c_prevhop' in session:
|
||||
session['c_prevhop'] = prevhop
|
||||
if not 'c_reference' in session:
|
||||
session['c_reference'] = c_empty
|
||||
if not 'c_designation' in session:
|
||||
session['c_designation'] = c_empty
|
||||
if not 'c_place' in session:
|
||||
session['c_place'] = c_empty
|
||||
if not 'c_provider' in session:
|
||||
session['c_provider'] = c_provider
|
||||
# Cookies/session sync
|
||||
for key in request.cookies:
|
||||
try:
|
||||
session[key] = int(str(request.cookies[key]))
|
||||
except ValueError:
|
||||
# Value is not an int, will be treated as string
|
||||
session[key] = str(request.cookies[key])
|
||||
if key != 'session':
|
||||
print '+', key, request.cookies[key]
|
||||
|
||||
# Switch sort order
|
||||
if session['c_order_refresh'] == 1:
|
||||
refresh = {'desc': 'asc', 'asc': 'desc'}
|
||||
session['c_order'] = refresh[session['c_order']]
|
||||
session['c_order_refresh'] = 0
|
||||
return func(*args, **kwargs)
|
||||
return check
|
||||
|
||||
########################################################################
|
||||
# Routes
|
||||
########################################################################
|
||||
@app.errorhandler(404)
|
||||
def page_not_found(e):
|
||||
return render_template('error.html'), 404
|
||||
@@ -59,58 +122,22 @@ def authenticate():
|
||||
########################################################################
|
||||
# Componants
|
||||
########################################################################
|
||||
@app.route('/componants', methods=['GET', 'POST'])
|
||||
def get_componants():
|
||||
if not session or not session['plop']:
|
||||
session['plop']='plip'
|
||||
limit = 8
|
||||
offset = 0
|
||||
sort = 'reference'
|
||||
order = 'asc'
|
||||
norder = 'desc'
|
||||
print '*', sort
|
||||
if len(request.args):
|
||||
if 'offset' in request.args:
|
||||
offset = request.args['offset']
|
||||
if 's' in request.args:
|
||||
sort = request.args['s']
|
||||
if 'o' in request.args:
|
||||
order = request.args['o']
|
||||
try:
|
||||
offset = int(offset)
|
||||
except ValueError:
|
||||
offset = 0
|
||||
providers = Stock_providers.query.order_by(Stock_providers.name).all()
|
||||
row_count = db.session.query(Stock_componants.id).count()
|
||||
page_count = int(math.ceil(row_count / float(limit)))
|
||||
page = int(math.ceil(float(offset + 1) / float(limit)))
|
||||
nexthop = offset + limit
|
||||
if nexthop > row_count - 1:
|
||||
nexthop = offset
|
||||
prevhop = offset - limit
|
||||
if prevhop < 0:
|
||||
prevhop = 0
|
||||
if order == 'asc':
|
||||
norder = 'desc'
|
||||
componants = Stock_componants.query.order_by(getattr(Stock_componants, sort)).offset(offset).limit(limit).all()
|
||||
else:
|
||||
norder = 'asc'
|
||||
componants = Stock_componants.query.order_by(getattr(Stock_componants, sort).desc()).offset(offset).limit(limit).all()
|
||||
return render_template('componants.html',
|
||||
componants=componants,
|
||||
providers = providers,
|
||||
offset=offset,
|
||||
nexthop=nexthop,
|
||||
prevhop=prevhop,
|
||||
page_count=page_count,
|
||||
page=page,
|
||||
sort=sort,
|
||||
order=order,
|
||||
norder=norder)
|
||||
|
||||
## Main ##
|
||||
@app.route('/componants', methods=['GET', 'POST'])
|
||||
@resume_session
|
||||
def get_componants():
|
||||
providers = Stock_providers.query.order_by(Stock_providers.name).all()
|
||||
return render_template('componants.html',
|
||||
providers=providers,
|
||||
reference=session['c_reference'],
|
||||
designation=session['c_designation'],
|
||||
place=session['c_place'],
|
||||
provider_id=session['c_provider'])
|
||||
|
||||
## Componant edition ##
|
||||
@app.route('/componants/<componant_id>')
|
||||
def get_componant(componant_id):
|
||||
print session['plop']
|
||||
try:
|
||||
componant_id = int(componant_id)
|
||||
except ValueError as e:
|
||||
@@ -123,30 +150,9 @@ def get_componant(componant_id):
|
||||
return render_template('componant.html', componant=componant, providers=providers, provider=provider)
|
||||
return render_template('error.html'), 404
|
||||
|
||||
@app.route('/componants/delete/<componant_id>')
|
||||
def delete_componant(componant_id):
|
||||
try:
|
||||
componant_id = int(componant_id)
|
||||
except ValueError as e:
|
||||
return render_template('error.html'), 404
|
||||
Stock_componants.query.filter_by(id=componant_id).delete()
|
||||
db.session.commit()
|
||||
return get_componants()
|
||||
|
||||
@app.route('/componants/new/<componant_id>')
|
||||
def add_componant(componant_id):
|
||||
return render_template('wip.html')
|
||||
|
||||
@app.route('/componants/in/<componant_id>')
|
||||
def in_componants():
|
||||
return render_template('wip.html')
|
||||
|
||||
@app.route('/componants/out/<componant_id>')
|
||||
def out_componants():
|
||||
return render_template('wip.html')
|
||||
|
||||
@app.route('/componant/update/<componant_id>', methods=['POST'])
|
||||
def update_componants(componant_id):
|
||||
## Componant update ##
|
||||
@app.route('/componants/update/<componant_id>', methods=['POST'])
|
||||
def update_componant(componant_id):
|
||||
field = request.form['field']
|
||||
value = request.form['value']
|
||||
if field and value:
|
||||
@@ -158,6 +164,90 @@ def update_componants(componant_id):
|
||||
return 'KO'
|
||||
return 'OK'
|
||||
|
||||
## Componant deletion ##
|
||||
@app.route('/componants/delete/<componant_id>')
|
||||
def delete_componant(componant_id):
|
||||
try:
|
||||
componant_id = int(componant_id)
|
||||
except ValueError as e:
|
||||
return render_template('error.html'), 404
|
||||
Stock_componants.query.filter_by(id=componant_id).delete()
|
||||
db.session.commit()
|
||||
return get_componants()
|
||||
|
||||
## Componant creation ##
|
||||
@app.route('/componants/new/<componant_id>')
|
||||
def add_componant(componant_id):
|
||||
return render_template('wip.html')
|
||||
|
||||
## Componants stock in ##
|
||||
@app.route('/componants/in/<componant_id>')
|
||||
def in_componants():
|
||||
return render_template('wip.html')
|
||||
|
||||
## Componants stock out ##
|
||||
@app.route('/componants/out/<componant_id>')
|
||||
def out_componants():
|
||||
return render_template('wip.html')
|
||||
|
||||
## Componants update result set
|
||||
@app.route('/componants/update', methods=['POST'])
|
||||
@resume_session
|
||||
def update_componants():
|
||||
# search by reference
|
||||
like = '%'+str(session['c_reference'])+'%'
|
||||
componants = Stock_componants.query.filter(Stock_componants.reference.like(like))
|
||||
# search by designation
|
||||
like = '%'+str(session['c_designation'])+'%'
|
||||
componants = componants.filter(Stock_componants.designation.like(like))
|
||||
# search by place
|
||||
like = '%'+str(session['c_place'])+'%'
|
||||
componants = componants.filter(Stock_componants.place.like(like))
|
||||
# search by provider
|
||||
if session['c_provider'] > 0:
|
||||
componants = componants.filter_by(provider_id=session['c_provider'])
|
||||
# Pages calculation
|
||||
row_count = componants.count()
|
||||
session['c_pagecount'] = int(math.ceil(row_count / float(session['c_limit'])))
|
||||
session['c_page'] = int(math.ceil(float(float(session['c_offset']) + 1) / float(session['c_limit'])))
|
||||
if session['c_page'] > session['c_pagecount']:
|
||||
session['c_page'] = session['c_pagecount']
|
||||
session['c_offset'] = 0
|
||||
print "*****", componants.count(), session['c_pagecount'], session['c_page']
|
||||
session['c_nexthop'] = session['c_offset'] + session['c_limit']
|
||||
if session['c_nexthop'] > row_count - 1:
|
||||
session['c_nexthop'] = int(session['c_offset'])
|
||||
session['c_prevhop'] = int(session['c_offset']) - session['c_limit']
|
||||
if session['c_prevhop'] < 0:
|
||||
session['c_prevhop'] = 0
|
||||
# Sorting
|
||||
sort = getattr(Stock_componants, session['c_sort'])
|
||||
if session['c_order'] == 'desc':
|
||||
sort = getattr(Stock_componants, session['c_sort']).desc()
|
||||
componants = componants.order_by(sort)
|
||||
# Applying offset
|
||||
componants = componants.offset(session['c_offset'])
|
||||
# Applying limit
|
||||
componants = componants.limit(session['c_limit'])
|
||||
# Get result
|
||||
componants = componants.all()
|
||||
|
||||
response = app.make_response(render_template('result.html',
|
||||
componants=componants,
|
||||
offset=session['c_offset'] ,
|
||||
nexthop=session['c_nexthop'],
|
||||
prevhop=session['c_prevhop'],
|
||||
page_count=session['c_pagecount'],
|
||||
page=session['c_page'],
|
||||
sort=session['c_sort'],
|
||||
order=session['c_order'],
|
||||
row_count=row_count))
|
||||
for key in session:
|
||||
response.set_cookie(key, value=str(session[key]))
|
||||
if key != 'session':
|
||||
print '++', key, session[key]
|
||||
return response
|
||||
|
||||
|
||||
########################################################################
|
||||
# Kits
|
||||
|
||||
Reference in New Issue
Block a user