cfone/app/home/routes.py
2021-09-22 23:46:35 -04:00

255 lines
8.2 KiB
Python

# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""
from sqlalchemy import exc
from app.home import blueprint
from flask import current_app,render_template, redirect, url_for, request,flash
from flask_login import login_required, current_user
from app import login_manager
from jinja2 import TemplateNotFound
from datetime import datetime,timedelta
from app.base.models import *
from app.home.ws_forms import CreateWsForm, CreateWsNodeForm,ShareWs,BidForm,BidCommentForm
@blueprint.route('/index')
@login_required
def index():
return render_template('index.html', segment='index')
# @blueprint.route('/<template>')
# @login_required
# def route_template(template):
# try:
# if not template.endswith( '.html' ):
# template += '.html'
# # Detect the current page
# segment = get_segment( request )
# # Serve the file (if exists) from app/templates/FILE.html
# return render_template( template, segment=segment )
# except TemplateNotFound:
# return render_template('page-404.html'), 404
# except:
# return render_template('page-500.html'), 500
# # Helper - Extract current page name from request
# def get_segment( request ):
# try:
# segment = request.path.split('/')[-1]
# if segment == '':
# segment = 'index'
# return segment
# except:
# return None
@blueprint.before_app_request
def before_request():
if current_user.is_authenticated:
current_user.last_seen = datetime.utcnow()
db.session.commit()
@blueprint.route("/books/")
# @cache.cached(300)
def display_books():
books = [book for book in Book.query.all()]
current_app.logger.info("Displaying all books.")
return render_template("books.htm", books=books)
@blueprint.route("/authors/")
# @cache.cached(300)
def display_authors():
authors = [author for author in Author.query.all()]
current_app.logger.info("Displaying all authors.")
return render_template("authors.htm", authors=authors)
@blueprint.route("/ws/")
@login_required
# @cache.cached(300)
def show_ws():
# ws = [ws for ws in Group.query.all()]
ws = Group.get_ws_by_user(current_user.id)
current_app.logger.info("get ws for users." +str(ws))
return render_template("ws.htm", ws=ws, segment='index')
@blueprint.route("/ws/nodes/", methods=['GET'])
# @cache.cached(300)
@login_required
def show_ws_nodes():
ws_id = request.args.get('ws_id')
# ws = [ws for ws in Group.query.all()]
ws_pst = Node.get_nodes_by_user(current_user.id, ws_id)
current_app.logger.info("get nodes_post for users."+ str(ws_pst))
return render_template("ws_nodes.htm", ws=ws_pst,ws_id=ws_id, segment='index')
@blueprint.route("/ws/nodes/bids")
# @cache.cached(300)
@login_required
def show_ws_nodes_bids():
post_id = request.args.get('post_id')
# ws = [ws for ws in Group.query.all()]
res_node_bid = (
db.session.query(Node).join(Node.accessed_by).join(Group.members).filter(User.id == 1).filter(Node.id ==post_id).all()
)
ws = Node.get_comments(post_id)
current_app.logger.info("ws for users.")
return render_template("ws_nodes_bids.htm", ws=ws,ws0=ws[0],ws1=ws[1],ws2=ws[2],post_id=post_id,postn=res_node_bid, segment='index')
@blueprint.route("/ws/create", methods=["GET", "POST"])
# @roles_required("admin")
def create_ws():
form = CreateWsForm(request.form)
if request.method == "POST" and form.validate():
my_user = User.query.filter_by(id=current_user.id).first()
frm_ws_name = form.ws_name.data
current_app.logger.info("Adding a new author %s.", (frm_ws_name))
add_ws = Group(
ws_name=frm_ws_name,
owner_id=current_user.id,
members =[my_user]
)
try:
db.session.add(add_ws)
db.session.commit()
# cache.clear()
flash("Author successfully created.")
except exc.SQLAlchemyError as e:
flash("Author was not created.")
current_app.logger.error(e)
return redirect(url_for("home_blueprint.create_ws"))
return redirect(url_for("home_blueprint.show_ws"))
return render_template("create_ws.htm", form=form, segment='index')
@blueprint.route("/ws/nodes/create", methods=["GET", "POST"])
# @roles_required("admin")
@login_required
def create_ws_node():
ws_id = request.args.get('ws_id')
form = CreateWsNodeForm(request.form)
if request.method == "POST" and form.validate():
# my_user = User.query.filter_by(id=1).first()
# my_grp = Group.query.filter_by(group_id=form.nd_ws_id.data).first()
frm_nd_title = form.nd_title.data
frm_nd_desc = form.nd_desc.data
frm_nd_amount = form.nd_amount.data
frm_nd_ws_id = form.nd_ws_id.data
my_grp = Group.query.filter_by(group_id=frm_nd_ws_id).first()
current_app.logger.info("Adding a new node %s.", (form))
add_ws_node = Node(
post_name=frm_nd_title,
post_desc=frm_nd_desc,
post_budget=frm_nd_amount,
owner_id=current_user.id,
accessed_by =[my_grp]
)
print(add_ws_node)
try:
db.session.add(add_ws_node)
db.session.commit()
# cache.clear()
flash("Node was successfully created.")
except exc.SQLAlchemyError as e:
flash("Author was not created.")
current_app.logger.error(e)
print(e)
return redirect(url_for("home_blueprint.create_ws_node",ws_id=ws_id))
return redirect(url_for("home_blueprint.show_ws_nodes",ws_id=frm_nd_ws_id))
return render_template("create_ws_node.htm", form=form,ws_id=ws_id, segment='index')
@blueprint.route("/ws/share", methods=["GET", "POST"])
# @roles_required("admin")
@login_required
def share_ws():
ws_id = request.args.get('ws_id')
form = ShareWs(request.form)
if request.method == "POST" and form.validate():
frm_usr_name = form.usr_name.data
# my_user = User.query.filter_by(id=current_user.id).first()
my_user = User.query.filter_by(username=frm_usr_name).first()
my_grp = Group.query.filter_by(group_id=form.nd_ws_id.data).first()
# add_ws = Group(
# # ws_name=frm_ws_name,
# owner_id=current_user.id,
# members =[my_user]
# )
my_grp.members.append(my_user)
try:
db.session.add(my_grp)
db.session.commit()
# cache.clear()
flash("Author successfully created.")
except exc.SQLAlchemyError as e:
flash("Author was not created.")
current_app.logger.error(e)
return redirect(url_for("home_blueprint.create_ws"))
return redirect(url_for("home_blueprint.show_ws"))
return render_template("share_ws.htm", form=form,ws_id=ws_id, segment='index')
@blueprint.route("/ws/nodes/bids/create", methods=["GET", "POST"])
# @roles_required("admin")
@login_required
def create_ws_node_bids():
ws_id = request.args.get('ws_id')
post_id = request.args.get('post_id')
form = BidForm(request.form)
if request.method == "POST" and form.validate():
my_user = User.query.filter_by(id=current_user.id).first()
bid_cmt = Comment(
message="$$$ "+form.bid_note.data,
owner_id=current_user.id,
post_id=form.bid_post_id.data
)
bid = Bid(
bid_amount=form.bid_amount.data,
bid_note=form.bid_note.data,
owner_id=current_user.id,
post_id=form.bid_post_id.data
)
try:
db.session.add(bid)
db.session.add(bid_cmt)
db.session.commit()
# cache.clear()
flash("Bid successfully created.")
except exc.SQLAlchemyError as e:
flash("Bid was not created.")
current_app.logger.error(e)
return redirect(url_for("home_blueprint.show_ws_nodes",post_id=post_id))
return redirect(url_for("home_blueprint.show_ws_nodes_bids",post_id=form.bid_post_id.data))
return render_template("create_bid.htm", form=form,ws_id=ws_id,post_id=post_id, segment='index')