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.

135 lines
6.6 KiB

from flask import render_template, url_for, flash, redirect, request, Blueprint
from flask_login import login_required, current_user
import minibase.theme as theme
from minibase.blueprints.company.models import Companies
from minibase.blueprints.geography.models import City
import minibase.blueprints.database.utils as dbUtils
import minibase.blueprints.main.utils as mainUtils
import minibase.blueprints.geography.utils as geoUtils
import minibase.blueprints.company.utils as companyUtils
from minibase.blueprints.company.forms import updateCompanyForm, addCompanyForm
# Declaring a blueprint
company = Blueprint('company', __name__, template_folder='templates')
@company.route("/list", methods=['GET', 'POST'])
def list():
page=request.args.get('page', 1, type=int)
table=dbUtils.table_printable_paginate(Companies, page, 20, 'account/', 'id')
return(render_template('view.html', theme=theme, table=table, title="Companies"))
@company.route("/account/<int:companyId>", methods=['GET', 'POST'])
@login_required
def account(companyId):
if companyId:
company = Companies.query.get_or_404(companyId)
form = updateCompanyForm()
form.country.choices = [(row.id, row.name) for row in geoUtils.queryCountryNamesWithDefault(company.country_id)]
# This is for the htmx implementation. please be careful how of there is data we switch the funtion needed
if form.country.data:
form.city.choices = [(row.id, row.name) for row in geoUtils.queryCityNamesWithCountryId(form.country.data)]
form.state.choices = [(row.id, row.name) for row in geoUtils.queryStateNamesWithCountryId(form.country.data)]
else:
form.city.choices = [(row.id, row.name) for row in geoUtils.queryCityNamesWithCountryIdWithDefault(company.city_id, company.country_id)]
form.state.choices = [(row.id, row.name) for row in geoUtils.queryStateNamesWithCountryIdWithDefault(company.state_id, company.country_id)]
form.industry.choices = [(row.id, row.name) for row in mainUtils.queryIndustryNamesWithDefault(company.industry_id)]
form.legal_entity.choices = [(row.id, row.name) for row in companyUtils.queryLegalEntityNamesWithDefault(company.legal_entity_id)]
form.type.choices = [(row.id, row.name) for row in companyUtils.queryTypeNamesWithDefault(company.type_id)]
form.relation.choices = [(row.id, row.name) for row in companyUtils.queryRelationNamesWithDefault(company.relation_id)]
form.status.choices = [(row.id, row.name) for row in companyUtils.queryStatusNamesWithDefault(company.status_id)]
if form.validate_on_submit():
if form.picture.data:
picture_file = mainUtils.save_picture(form.picture.data)
company.image_file = picture_file
company.name = form.name.data
company.website = form.website.data
company.country_id = form.country.data
company.city_id = form.city.data
company.state_id = form.state.data
company.post_code = form.post_code.data
company.street = form.street.data
company.street_no = form.street_no.data
company.industry_id = form.industry.data
company.legal_entity_id = form.legal_entity.data
company.type_id = form.type.data
company.relation_id = form.relation.data
company.status_id = form.status.data
company.comment = form.comment.data
dbUtils.dbCommit()
flash('Company Has been successfully updated', 'success')
return redirect(url_for('company.account', companyId=companyId))
elif request.method == 'GET':
form.name.data = company.name
form.website.data = company.website
form.country.data = company.country_id
form.city.data = company.city_id
form.state.data = company.state_id
form.post_code.data = company.post_code
form.street.data = company.street
form.street_no.data = company.street_no
form.legal_entity.data = company.legal_entity.name
form.type.data = company.type.name
form.comment.data = company.comment
image_file = url_for('static', filename='pics/' + companyUtils.queryImageById(companyId))
return render_template('company/account.html',
theme=theme,
image_file=image_file,
form=form)
else:
flash('You need to select a company id', 'alarm')
return redirect(url_for('company.list'))
@company.route("/add", methods=['GET', 'POST'])
@login_required
def add():
form = addCompanyForm()
form.country.choices = [(row.id, row.name) for row in geoUtils.queryCountryNames()]
# This is for the htmx implementation. please be careful how of there is data we switch the funtion needed
if form.country.data:
form.city.choices = [(row.id, row.name) for row in geoUtils.queryCityNamesWithCountryId(form.country.data)]
form.state.choices = [(row.id, row.name) for row in geoUtils.queryStateNamesWithCountryId(form.country.data)]
else:
form.city.choices = []
form.state.choices = []
form.industry.choices = [(row.id, row.name) for row in mainUtils.queryIndustryNames()]
form.legal_entity.choices = [(row.id, row.name) for row in companyUtils.queryLegalEntityNames()]
form.type.choices = [(row.id, row.name) for row in companyUtils.queryTypeNames()]
form.relation.choices = [(row.id, row.name) for row in companyUtils.queryRelationNames()]
form.status.choices = [(row.id, row.name) for row in companyUtils.queryStatusNames()]
if form.validate_on_submit():
company = Companies(
name = form.name.data,
website = form.website.data,
country_id = form.country.data,
city_id = form.city.data,
state_id = form.state.data,
post_code = form.post_code.data,
street = form.street.data,
street_no = form.street_no.data,
industry_id = form.industry.data,
legal_entity_id = form.legal_entity.data,
type_id = form.type.data,
relation_id = form.relation.data,
status_id = form.status.data,
comment = form.comment.data)
dbUtils.dbAddAndCommit(company)
flash('Company Has been successfully added', 'success')
return redirect(url_for('company.list'))
return render_template('edit.html',
title="Add Company",
theme=theme,
form=form)