You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
11 KiB
223 lines
11 KiB
from flask import render_template, url_for, flash, redirect, request, Blueprint, session
|
|
from minibase import db
|
|
from minibase.config import themeMinibase, globalVars
|
|
from minibase.project.forms import selectProjectForm, projectUpdateForm, projectRegisterForm
|
|
from minibase.project.forms import selectElementForm, elementUpdateForm, elementRegisterForm
|
|
import minibase.database.utils as dbUtils
|
|
from minibase.database.models import Project, Project_element
|
|
# Declaring a blueprint
|
|
project = Blueprint('project', __name__)
|
|
|
|
|
|
@project.route("/select_project", methods=['GET', 'POST'])
|
|
def select_project():
|
|
if globalVars.selectedCompany: # If a company is sected
|
|
form = selectProjectForm()
|
|
form.project.choices = [(row.id, row.name) for row in dbUtils.getProjectOfSelectedCompany()]
|
|
if form.validate_on_submit():
|
|
dbUtils.setSelectedProject(form.project.data)
|
|
if form.submit_to_element.data: # To tertermin wjhic submit button was pressed
|
|
return redirect(url_for('project.select_element'))
|
|
else:
|
|
return redirect(url_for('project.show_project', projectId=form.project.data))
|
|
|
|
return render_template('project/select_project.html',
|
|
title='Select Project Name for : ' + globalVars.selectedCompany.name,
|
|
theme=themeMinibase,
|
|
globalVars=globalVars,
|
|
form=form)
|
|
else:
|
|
flash(f'{"Please selecet a company first"}', 'warning')
|
|
return redirect(url_for('company.select_company'))
|
|
|
|
|
|
@project.route("/show_project/<int:projectId>", methods=['GET', 'POST'])
|
|
def show_project(projectId):
|
|
if projectId: # If a company is sected
|
|
form = projectUpdateForm()
|
|
# I can't use globalVars here for sqlAlchemy to be able to make a session an sql query must be made and returned
|
|
project = dbUtils.getProject(projectId)
|
|
image_file = url_for('static', filename='pics/' + project.image_file)
|
|
notes = dbUtils.getSelectedProjectNotes()
|
|
elements = dbUtils.getSelectedProjectElements()
|
|
# To initiate choises as a list allow us to match it with the id's
|
|
form.responsible.choices = [(row.id, row.name +' '+row.last_name) for row in dbUtils.getEmployeesOfSelectedCompany()]
|
|
form.status.choices = [(row.id, row.name) for row in dbUtils.getProjectStatuses()]
|
|
form.industry.choices = [(row.id, row.name) for row in dbUtils.getIndustryNames()]
|
|
|
|
if form.validate_on_submit():
|
|
project.description = form.description.data
|
|
project.industry_id = int(form.industry.data)
|
|
project.status_id = int(form.status.data)
|
|
project.owner_id = int(form.responsible.data)
|
|
project.qte_prototype = form.qtePrototype.data
|
|
project.qte_start = form.qteStart.data
|
|
project.qte_production = form.qteProduction.data
|
|
project.date_prototype = form.datePrototype.data
|
|
project.date_start = form.dateStart.data
|
|
project.date_production = form.dateProduction.data
|
|
db.session.add(project)
|
|
db.session.commit()
|
|
flash(f'{"Project Updated"}', 'success')
|
|
return redirect(url_for('project.show_project'))
|
|
elif request.method == 'GET':
|
|
form.responsible.data = str(project.owner_id)
|
|
form.status.data = str(project.status.id)
|
|
form.industry.data = str(project.industry_id)
|
|
form.description.data = project.description
|
|
form.qtePrototype.data = project.qte_prototype
|
|
form.qteStart.data = project.qte_start
|
|
form.qteProduction.data = project.qte_production
|
|
form.datePrototype.data = project.date_prototype
|
|
form.dateStart.data = project.date_start
|
|
form.dateProduction.data = project.date_production
|
|
|
|
return render_template('project/show_project.html',
|
|
title=project.belongs_to.name + ' : ' + project.name,
|
|
companyName=project.belongs_to.name,
|
|
projectName=project.name,
|
|
projectId=project.id,
|
|
notes=notes,
|
|
elements=elements,
|
|
image_file=image_file,
|
|
theme=themeMinibase,
|
|
globalVars=globalVars,
|
|
form=form)
|
|
else:
|
|
flash(f'{"Please selecet a project first"}', 'warning')
|
|
return redirect(url_for('project.select_project'))
|
|
|
|
|
|
@project.route("/register_project", methods=['GET', 'POST'])
|
|
def register_project():
|
|
form = projectRegisterForm()
|
|
form.company.choices = [(row.id, row.name) for row in dbUtils.getCompanies()]
|
|
form.status.choices = [(row.id, row.name) for row in dbUtils.getProjectStatuses()]
|
|
form.industry.choices = [(row.id, row.name) for row in dbUtils.getIndustryNames()]
|
|
|
|
if form.validate_on_submit():
|
|
flash(f'{"Project Updated"}', 'success')
|
|
project = Project(
|
|
name=form.name.data,
|
|
company_id=form.company.data,
|
|
description=form.description.data,
|
|
industry_id=form.industry.data,
|
|
status_id=form.status.data,
|
|
qte_prototype=form.qtePrototype.data,
|
|
qte_start=form.qteStart.data,
|
|
qte_production=form.qteProduction.data,
|
|
date_prototype=form.datePrototype.data,
|
|
date_start=form.dateStart.data,
|
|
date_production=form.dateProduction.data)
|
|
# Adds project to the database
|
|
db.session.add(project)
|
|
db.session.commit()
|
|
# Prepares the globalVars for redirection.
|
|
dbUtils.setSelectedCompany(form.company.data)
|
|
projectId = dbUtils.getProjectId(globalVars.selectedCompany.id, form.name.data)
|
|
# Prepares the globalVars for redirection.
|
|
dbUtils.setSelectedProject(projectId)
|
|
flash(f'{"Project Registered"}', 'success')
|
|
# Wihtout the selectedProject and selectedCompny Varibale the redirect would give an error
|
|
return redirect(url_for('project.show_project'))
|
|
|
|
return render_template('register_form.html',
|
|
title="Register Project",
|
|
theme=themeMinibase,
|
|
globalVars=globalVars,
|
|
form=form)
|
|
|
|
|
|
@project.route("/select_element", methods=['GET', 'POST'])
|
|
def select_element():
|
|
if globalVars.selectedProject: # If a project is sected
|
|
form = selectElementForm()
|
|
form.element.choices = [(row.id, row.name) for row in dbUtils.getSelectedProjectElements()]
|
|
if form.validate_on_submit():
|
|
dbUtils.setSelectedElement(form.element.data)
|
|
return redirect(url_for('project.show_element', elementId=form.element.data))
|
|
|
|
return render_template('project/select_element.html',
|
|
title='Select Project Element for : ' + globalVars.selectedProject.name,
|
|
theme=themeMinibase,
|
|
globalVars=globalVars,
|
|
form=form)
|
|
else:
|
|
flash(f'{"Please selecet a project"}', 'warning')
|
|
return redirect(url_for('project.select_project'))
|
|
|
|
|
|
@project.route("/show_element/<int:elementId>", methods=['GET', 'POST'])
|
|
def show_element(elementId):
|
|
if elementId: # If a company is sected
|
|
form = elementUpdateForm()
|
|
element = dbUtils.getElement(elementId)
|
|
form.status.choices = [(row.id, row.name) for row in dbUtils.getProjectStatuses()]
|
|
form.company_to_ship.choices = [(row.id, row.name) for row in dbUtils.getCompanies()]
|
|
form.owner.choices = [(row.id, row.name + ' ' + row.last_name) for row in dbUtils.getCompanyEmployees(element.project.id)]
|
|
|
|
if form.validate_on_submit():
|
|
element.description = form.description.data
|
|
element.qte_per_project = form.qtePerProject.data
|
|
element.status_id = form.status.data
|
|
element.company_ship_to_id = form.company_to_ship.data
|
|
element.owner_id = form.owner.data
|
|
db.session.add(element)
|
|
db.session.commit()
|
|
flash(f'{"Element Updated"}', 'success')
|
|
return redirect(url_for('project.show_element', elementId=element.id))
|
|
elif request.method == 'GET':
|
|
form.description.data = element.description
|
|
form.qtePerProject.data = element.qte_per_project
|
|
form.status.data = str(element.status_id)
|
|
form.company_to_ship.data = str(element.company_ship_to_id)
|
|
form.owner.data = str(element.owner_id)
|
|
return render_template('register_form.html',
|
|
title=element.name,
|
|
theme=themeMinibase,
|
|
globalVars=globalVars,
|
|
form=form)
|
|
|
|
return render_template('register_form.html',
|
|
title=element.name,
|
|
theme=themeMinibase,
|
|
globalVars=globalVars,
|
|
form=form)
|
|
else:
|
|
flash(f'{"Element Id is missing"}', 'warning')
|
|
return redirect(url_for('project.show_project'))
|
|
|
|
@project.route("/register_element", methods=['GET', 'POST'])
|
|
def register_element():
|
|
if globalVars.selectedCompany: # If a company is sected
|
|
form = elementRegisterForm()
|
|
form.project.choices = [(row.id, row.name) for row in dbUtils.getProjectOfSelectedCompany()]
|
|
form.status.choices = [(row.id, row.name) for row in dbUtils.getProjectStatuses()]
|
|
form.company_to_ship.choices = [(row.id, row.name) for row in dbUtils.getCompanies()]
|
|
form.owner.choices = [(row.id, row.name + ' ' + row.last_name) for row in dbUtils.getCompanyEmployees(globalVars.selectedCompany.id)]
|
|
|
|
if form.validate_on_submit():
|
|
element = Project_element(
|
|
project_id=form.project.data,
|
|
name=form.name.data,
|
|
description=form.description.data,
|
|
qte_per_project=form.qtePerProject.data,
|
|
status_id=form.status.data,
|
|
company_ship_to_id=form.company_to_ship.data,
|
|
owner_id=form.owner.data)
|
|
db.session.add(element)
|
|
db.session.commit()
|
|
dbUtils.setSelectedProject(form.project.data)
|
|
elementId = dbUtils.getElementIdFromProject(form.project.data, form.name.data)
|
|
flash(f'{"Element Registered "}', 'success')
|
|
return redirect(url_for('project.show_element', elementId=element.id))
|
|
|
|
return render_template('register_form.html',
|
|
title="Register Element",
|
|
theme=themeMinibase,
|
|
globalVars=globalVars,
|
|
form=form)
|
|
else:
|
|
flash(f'{"TO register a project element you need to select a company first"}', 'warning')
|
|
return redirect(url_for('company.select_company'))
|