Merge pull request #584 from dod-ccpo/edit-to-officer
Edit Task Order Officer Info
This commit is contained in:
60
atst/forms/officers.py
Normal file
60
atst/forms/officers.py
Normal file
@@ -0,0 +1,60 @@
|
||||
from flask_wtf import FlaskForm
|
||||
from wtforms.fields import FormField, StringField
|
||||
from wtforms.fields.html5 import TelField
|
||||
from wtforms.validators import Length, Optional
|
||||
|
||||
from atst.forms.validators import IsNumber, PhoneNumber
|
||||
|
||||
from .forms import CacheableForm
|
||||
|
||||
|
||||
class OfficerForm(FlaskForm):
|
||||
first_name = StringField("First Name")
|
||||
last_name = StringField("Last Name")
|
||||
email = StringField("Email")
|
||||
phone_number = TelField("Phone Number", validators=[PhoneNumber()])
|
||||
dod_id = StringField("DoD ID", validators=[Optional(), Length(min=10), IsNumber()])
|
||||
|
||||
|
||||
class EditTaskOrderOfficersForm(CacheableForm):
|
||||
|
||||
contracting_officer = FormField(OfficerForm)
|
||||
contracting_officer_representative = FormField(OfficerForm)
|
||||
security_officer = FormField(OfficerForm)
|
||||
|
||||
OFFICER_PREFIXES = {
|
||||
"contracting_officer": "ko",
|
||||
"contracting_officer_representative": "cor",
|
||||
"security_officer": "so",
|
||||
}
|
||||
OFFICER_INFO_FIELD_NAMES = [
|
||||
"first_name",
|
||||
"last_name",
|
||||
"email",
|
||||
"phone_number",
|
||||
"dod_id",
|
||||
]
|
||||
|
||||
def process(self, formdata=None, obj=None, data=None, **kwargs):
|
||||
if obj:
|
||||
for name, field in self._fields.items():
|
||||
if name in self.OFFICER_PREFIXES:
|
||||
prefix = self.OFFICER_PREFIXES[name]
|
||||
officer_data = {
|
||||
field_name: getattr(obj, prefix + "_" + field_name)
|
||||
for field_name in self.OFFICER_INFO_FIELD_NAMES
|
||||
}
|
||||
field.process(formdata=formdata, data=officer_data)
|
||||
else:
|
||||
field.process(formdata)
|
||||
else:
|
||||
super(EditTaskOrderOfficersForm, self).process(
|
||||
formdata=formdata, obj=obj, data=data, **kwargs
|
||||
)
|
||||
|
||||
def populate_obj(self, obj):
|
||||
for name, field in self._fields.items():
|
||||
if name in self.OFFICER_PREFIXES:
|
||||
prefix = self.OFFICER_PREFIXES[name]
|
||||
for field_name in self.OFFICER_INFO_FIELD_NAMES:
|
||||
setattr(obj, prefix + "_" + field_name, field[field_name].data)
|
@@ -1,11 +1,13 @@
|
||||
from collections import defaultdict
|
||||
from operator import itemgetter
|
||||
|
||||
from flask import g, render_template, url_for
|
||||
from flask import g, redirect, render_template, url_for, request as http_request
|
||||
|
||||
from . import portfolios_bp
|
||||
from atst.database import db
|
||||
from atst.domain.task_orders import TaskOrders
|
||||
from atst.domain.portfolios import Portfolios
|
||||
from atst.forms.officers import EditTaskOrderOfficersForm
|
||||
from atst.models.task_order import Status as TaskOrderStatus
|
||||
|
||||
|
||||
@@ -69,8 +71,40 @@ def view_task_order(portfolio_id, task_order_id):
|
||||
def task_order_invitations(portfolio_id, task_order_id):
|
||||
portfolio = Portfolios.get(g.current_user, portfolio_id)
|
||||
task_order = TaskOrders.get(g.current_user, task_order_id)
|
||||
form = EditTaskOrderOfficersForm(obj=task_order)
|
||||
return render_template(
|
||||
"portfolios/task_orders/invitations.html",
|
||||
portfolio=portfolio,
|
||||
task_order=task_order,
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
@portfolios_bp.route(
|
||||
"/portfolios/<portfolio_id>/task_order/<task_order_id>/invitations",
|
||||
methods=["POST"],
|
||||
)
|
||||
def edit_task_order_invitations(portfolio_id, task_order_id):
|
||||
portfolio = Portfolios.get(g.current_user, portfolio_id)
|
||||
task_order = TaskOrders.get(g.current_user, task_order_id)
|
||||
form = EditTaskOrderOfficersForm(formdata=http_request.form, obj=task_order)
|
||||
|
||||
if form.validate():
|
||||
form.populate_obj(task_order)
|
||||
db.session.add(task_order)
|
||||
db.session.commit()
|
||||
|
||||
return redirect(
|
||||
url_for(
|
||||
"portfolios.task_order_invitations",
|
||||
portfolio_id=portfolio.id,
|
||||
task_order_id=task_order.id,
|
||||
)
|
||||
)
|
||||
else:
|
||||
return render_template(
|
||||
"portfolios/task_orders/invitations.html",
|
||||
portfolio=portfolio,
|
||||
task_order=task_order,
|
||||
form=form,
|
||||
)
|
||||
|
Reference in New Issue
Block a user