Save as draft without draft button

This commit is contained in:
George Drummond 2019-01-28 11:34:49 -05:00
parent 6fef90373b
commit caddfb5ff0
No known key found for this signature in database
GPG Key ID: 296DD6077123BF17
8 changed files with 63 additions and 34 deletions

View File

@ -1,5 +1,4 @@
from sqlalchemy.orm.exc import NoResultFound
from flask import current_app as app
from atst.database import db
@ -93,21 +92,33 @@ class TaskOrders(object):
return task_order
@classmethod
def is_section_complete(cls, task_order, section):
if section in TaskOrders.sections():
def section_completion_status(cls, task_order, section):
if section in TaskOrders.SECTIONS:
passed = []
failed = []
for attr in TaskOrders.SECTIONS[section]:
if getattr(task_order, attr) is None:
return False
if not app.config.get("CLASSIFIED") and attr in ["clin_02", "clin_04"]:
pass
elif not getattr(task_order, attr):
failed.append(attr)
else:
passed.append(attr)
return True
else:
return False
if not failed:
return "complete"
elif passed and failed:
return "draft"
else:
return "incomplete"
@classmethod
def all_sections_complete(cls, task_order):
for section in TaskOrders.SECTIONS.keys():
if not TaskOrders.is_section_complete(task_order, section):
if (
TaskOrders.section_completion_status(task_order, section)
is not "complete"
):
return False
return True

View File

@ -10,7 +10,7 @@ from wtforms.fields import (
)
from wtforms.fields.html5 import DateField, TelField
from wtforms.widgets import ListWidget, CheckboxInput
from wtforms.validators import Length, InputRequired
from wtforms.validators import Length, Required, InputRequired, Optional
from flask_wtf.file import FileAllowed
from atst.forms.validators import IsNumber, PhoneNumber, RequiredIf
@ -31,6 +31,7 @@ class AppInfoForm(CacheableForm):
portfolio_name = StringField(
translate("forms.task_order.portfolio_name_label"),
description=translate("forms.task_order.portfolio_name_description"),
validators=[Required()],
)
scope = TextAreaField(
translate("forms.task_order.scope_label"),
@ -100,25 +101,37 @@ class FundingForm(CacheableForm):
clin_01 = DecimalField(
translate("forms.task_order.clin_01_label"),
validators=[
InputRequired(message=(translate("forms.task_order.clin_validation_error")))
Optional(),
InputRequired(
message=(translate("forms.task_order.clin_validation_error"))
),
],
)
clin_02 = DecimalField(
translate("forms.task_order.clin_02_label"),
validators=[
InputRequired(message=(translate("forms.task_order.clin_validation_error")))
Optional(),
InputRequired(
message=(translate("forms.task_order.clin_validation_error"))
),
],
)
clin_03 = DecimalField(
translate("forms.task_order.clin_03_label"),
validators=[
InputRequired(message=(translate("forms.task_order.clin_validation_error")))
Optional(),
InputRequired(
message=(translate("forms.task_order.clin_validation_error"))
),
],
)
clin_04 = DecimalField(
translate("forms.task_order.clin_04_label"),
validators=[
InputRequired(message=(translate("forms.task_order.clin_validation_error")))
Optional(),
InputRequired(
message=(translate("forms.task_order.clin_validation_error"))
),
],
)
@ -141,7 +154,8 @@ class OversightForm(CacheableForm):
ko_last_name = StringField(translate("forms.task_order.oversight_last_name_label"))
ko_email = StringField(translate("forms.task_order.oversight_email_label"))
ko_phone_number = TelField(
translate("forms.task_order.oversight_phone_label"), validators=[PhoneNumber()]
translate("forms.task_order.oversight_phone_label"),
validators=[Optional(), PhoneNumber()],
)
ko_dod_id = StringField(
translate("forms.task_order.oversight_dod_id_label"),
@ -162,6 +176,7 @@ class OversightForm(CacheableForm):
translate("forms.task_order.oversight_phone_label"),
validators=[
RequiredIf(lambda form: not form._fields.get("am_cor").data),
Optional(),
PhoneNumber(),
],
)
@ -183,7 +198,8 @@ class OversightForm(CacheableForm):
so_last_name = StringField(translate("forms.task_order.oversight_last_name_label"))
so_email = StringField(translate("forms.task_order.oversight_email_label"))
so_phone_number = TelField(
translate("forms.task_order.oversight_phone_label"), validators=[PhoneNumber()]
translate("forms.task_order.oversight_phone_label"),
validators=[Optional(), PhoneNumber()],
)
so_dod_id = StringField(
translate("forms.task_order.oversight_dod_id_label"),

View File

@ -103,8 +103,9 @@ class ShowTaskOrderWorkflow:
if self.task_order:
for section in screen_info:
if TaskOrders.is_section_complete(self.task_order, section["section"]):
section["complete"] = True
section["completion"] = TaskOrders.section_completion_status(
self.task_order, section["section"]
)
return screen_info

View File

@ -107,6 +107,13 @@
padding: 1px 2px;
}
&--draft:before {
background: $color-gold;
border: none;
font-size: $h6-font-size;
mask-image: url('#{$asset-path}/icons/alert.svg');
}
&--incomplete:before {
border: 2px solid $color-gray-light;
}

View File

@ -40,7 +40,6 @@
<div class='action-group'>
<input type='submit' class='usa-button usa-button-primary' value='Save & Continue' />
<input class='usa-button usa-button-secondary' value='Save Draft' />
</div>
{% endblock %}

View File

@ -1,15 +1,7 @@
<div class="progress-menu progress-menu--four">
<ul>
{% for s in screens %}
{% if s.complete %}
{% set step_indicator = 'complete' %}
{% elif loop.index == current %}
{% set step_indicator = 'active' %}
{% else %}
{% set step_indicator = 'incomplete' %}
{% endif %}
<li class="progress-menu__item progress-menu__item--{{ step_indicator }}">
<li class="progress-menu__item progress-menu__item--{{ s.completion }}">
<a
{% set class='' %}
{% if task_order_id %}

View File

@ -12,17 +12,20 @@ from tests.factories import (
)
def test_is_section_complete():
def test_section_completion_status():
dict_keys = [k for k in TaskOrders.SECTIONS.keys()]
section = dict_keys[0]
attrs = TaskOrders.SECTIONS[section].copy()
task_order = TaskOrderFactory.create(**{k: None for k in attrs})
leftover = attrs.pop()
for attr in attrs:
setattr(task_order, attr, "str12345")
assert not TaskOrders.is_section_complete(task_order, section)
assert TaskOrders.section_completion_status(task_order, section) == "draft"
setattr(task_order, leftover, "str12345")
assert TaskOrders.is_section_complete(task_order, section)
assert TaskOrders.section_completion_status(task_order, section) == "complete"
def test_all_sections_complete():

View File

@ -170,9 +170,9 @@ def test_show_task_order_display_screen(task_order):
screens = workflow.display_screens
# every form section is complete
for i in range(2):
assert screens[i]["complete"]
assert screens[i]["completion"] == "complete"
# the review section is not
assert not screens[3].get("complete")
assert not screens[3]["completion"]
def test_update_task_order_with_no_task_order():