def edit(company_id: int = None): """Create, view or edit a company.""" # Select company. if company_id: company = company_service.find_company_by_id(company_id) else: company = Company() form = init_form(CompanyForm, obj=company) # Add locations. locations = Location.query.order_by('address').order_by('city') form.location_id.choices = \ [(l.id, l.address + ', ' + l.city) for l in locations] form.contact_id.choices = \ [(c.id, c.name) for c in Contact.query.filter_by().order_by('name')] if form.validate_on_submit(): if not company.id and Company.query.filter( Company.name == form.name.data).count(): flash(_('Name "%s" is already in use.' % form.name.data), 'danger') return render_template('company/edit.htm', company=company, form=form) company.name = form.name.data company.description = form.description.data company.contract_start_date = form.contract_start_date.data company.contract_end_date = form.contract_end_date.data company.location = Location.query.get(form.location_id.data) company.contact = Contact.query.get(form.contact_id.data) company.website = form.website.data if request.files['file']: logo = request.files['file'] _file = file_service.add_file(FileCategory.COMPANY_LOGO, logo, logo.filename) company.logo_file_id = _file.id db.session.add(company) db.session.commit() flash(_('Company "%s" saved.' % company.name), 'success') return redirect(url_for('company.view', company_id=company.id)) return render_template('company/edit.htm', company=company, form=form)
def create(company_id=None): # Select company. if company_id: company = Company.query.get_or_404(company_id) else: company = Company() data = {} data["name"] = company.name data["description"] = company.description data["contract_start_date"] = company.contract_start_date data["contract_end_date"] = company.contract_end_date data["website"] = company.website # Select locations. if company.location_id: location = Location.query.get(company.location_id) else: location = Location() data['location_city'] = location.city data['location_country'] = location.country data['location_address'] = location.address data['location_zip'] = location.zip data['location_postoffice_box'] = location.postoffice_box data['location_email'] = location.email data['location_phone_nr'] = location.phone_nr if company.contact_id: contact = Contact.query.get(company.contact_id) else: contact = Contact() data['contact_name'] = contact.name data['contact_email'] = contact.email data['contact_phone_nr'] = contact.phone_nr form = init_form(NewCompanyForm, data=data) if form.validate_on_submit(): if not contact.id and Contact.query.filter( Contact.name == form.contact_name.data).count(): flash(_('Contact name "%s" is already in use.' % form.contact_name.data), 'danger') return render_template('company/create.htm', company=company, form=form) if not contact.id and Contact.query.filter( Contact.email == form.contact_email.data).count(): flash(_('Contact email "%s" is already in use.' % form.contact_email.data), 'danger') return render_template('company/create.htm', company=company, form=form) contact.name = form.contact_name.data contact.email = form.contact_email.data contact.phone_nr = form.contact_phone_nr.data # Create or update to contact db.session.add(contact) db.session.commit() # Create or update to location location.city = form.location_city.data location.country = form.location_country.data location.address = form.location_address.data location.zip = form.location_zip.data location.postoffice_box = form.location_postoffice_box.data location.email = form.location_email.data location.phone_nr = form.location_phone_nr.data db.session.add(location) db.session.commit() # if not company.id and Company.query.filter( Company.name == form.name.data).count(): flash(_('Name "%s" is already in use.' % form.name.data), 'danger') return render_template('company/edit.htm', company=company, form=form) company.name = form.name.data company.description = form.description.data company.contract_start_date = form.contract_start_date.data company.contract_end_date = form.contract_end_date.data company.location = location company.contact = contact company.website = form.website.data if request.files['file']: logo = request.files['file'] _file = file_service.add_file(FileCategory.COMPANY_LOGO, logo, logo.filename) company.logo_file = _file db.session.add(company) db.session.commit() flash(_('Company "%s" saved.' % company.name), 'success') return redirect(url_for('company.view', company_id=company.id)) else: flash_form_errors(form) return render_template('company/create.htm', company=company, form=form)