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/", 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)