Fix request_new
This commit is contained in:
parent
8d477003db
commit
42cdf17ab6
@ -64,7 +64,7 @@ def make_app(config, deps, **kwargs):
|
|||||||
RequestNew,
|
RequestNew,
|
||||||
{
|
{
|
||||||
"page": "requests_new",
|
"page": "requests_new",
|
||||||
"requests_client": deps["requests_client"],
|
"db_session": deps["db_session"],
|
||||||
"fundz_client": deps["fundz_client"],
|
"fundz_client": deps["fundz_client"],
|
||||||
},
|
},
|
||||||
name="request_new",
|
name="request_new",
|
||||||
@ -74,7 +74,7 @@ def make_app(config, deps, **kwargs):
|
|||||||
RequestNew,
|
RequestNew,
|
||||||
{
|
{
|
||||||
"page": "requests_new",
|
"page": "requests_new",
|
||||||
"requests_client": deps["requests_client"],
|
"db_session": deps["db_session"],
|
||||||
"fundz_client": deps["fundz_client"],
|
"fundz_client": deps["fundz_client"],
|
||||||
},
|
},
|
||||||
name="request_form_new",
|
name="request_form_new",
|
||||||
@ -84,7 +84,7 @@ def make_app(config, deps, **kwargs):
|
|||||||
RequestNew,
|
RequestNew,
|
||||||
{
|
{
|
||||||
"page": "requests_new",
|
"page": "requests_new",
|
||||||
"requests_client": deps["requests_client"],
|
"db_session": deps["db_session"],
|
||||||
"fundz_client": deps["fundz_client"],
|
"fundz_client": deps["fundz_client"],
|
||||||
},
|
},
|
||||||
name="request_form_update",
|
name="request_form_update",
|
||||||
|
@ -72,10 +72,10 @@ class Requests(object):
|
|||||||
|
|
||||||
@tornado.gen.coroutine
|
@tornado.gen.coroutine
|
||||||
def submit(self, request):
|
def submit(self, request):
|
||||||
request.status_events.append(StatusEvent(new_status="submitted"))
|
request.status_events.append(RequestStatusEvent(new_status="submitted"))
|
||||||
|
|
||||||
if Requests.should_auto_approve(request):
|
if Requests.should_auto_approve(request):
|
||||||
request.status_events.append(StatusEvent(new_status="approved"))
|
request.status_events.append(RequestStatusEvent(new_status="approved"))
|
||||||
|
|
||||||
self.db_session.add(request)
|
self.db_session.add(request)
|
||||||
self.db_session.commit()
|
self.db_session.commit()
|
||||||
@ -99,7 +99,7 @@ class Requests(object):
|
|||||||
request.body = deep_merge(request_delta, request.body)
|
request.body = deep_merge(request_delta, request.body)
|
||||||
|
|
||||||
if Requests.should_allow_submission(request):
|
if Requests.should_allow_submission(request):
|
||||||
request.status_events.append(StatusEvent(new_status="pending_submission"))
|
request.status_events.append(RequestStatusEvent(new_status="pending_submission"))
|
||||||
|
|
||||||
# Without this, sqlalchemy won't notice the change to request.body,
|
# Without this, sqlalchemy won't notice the change to request.body,
|
||||||
# since it doesn't track dictionary mutations by default.
|
# since it doesn't track dictionary mutations by default.
|
||||||
|
@ -9,17 +9,16 @@ from atst.forms.review import ReviewForm
|
|||||||
|
|
||||||
|
|
||||||
class RequestNew(BaseHandler):
|
class RequestNew(BaseHandler):
|
||||||
def initialize(self, page, requests_client, fundz_client):
|
def initialize(self, page, db_session, fundz_client):
|
||||||
self.page = page
|
self.page = page
|
||||||
self.requests_client = requests_client
|
self.requests_repo = Requests(db_session)
|
||||||
self.fundz_client = fundz_client
|
self.fundz_client = fundz_client
|
||||||
|
|
||||||
@tornado.gen.coroutine
|
|
||||||
def get_existing_request(self, request_id):
|
def get_existing_request(self, request_id):
|
||||||
if request_id is None:
|
if request_id is None:
|
||||||
return {}
|
return None
|
||||||
request = yield self.requests_client.get("/requests/{}".format(request_id))
|
request = self.requests_repo.get(request_id)
|
||||||
return request.json
|
return request
|
||||||
|
|
||||||
@tornado.web.authenticated
|
@tornado.web.authenticated
|
||||||
@tornado.gen.coroutine
|
@tornado.gen.coroutine
|
||||||
@ -28,9 +27,9 @@ class RequestNew(BaseHandler):
|
|||||||
screen = int(screen)
|
screen = int(screen)
|
||||||
post_data = self.request.arguments
|
post_data = self.request.arguments
|
||||||
current_user = self.get_current_user()
|
current_user = self.get_current_user()
|
||||||
existing_request = yield self.get_existing_request(request_id)
|
existing_request = self.get_existing_request(request_id)
|
||||||
jedi_flow = JEDIRequestFlow(
|
jedi_flow = JEDIRequestFlow(
|
||||||
self.requests_client,
|
self.requests_repo,
|
||||||
self.fundz_client,
|
self.fundz_client,
|
||||||
screen,
|
screen,
|
||||||
post_data=post_data,
|
post_data=post_data,
|
||||||
@ -50,24 +49,21 @@ class RequestNew(BaseHandler):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if jedi_flow.validate():
|
if jedi_flow.validate():
|
||||||
response = yield jedi_flow.create_or_update_request()
|
request = jedi_flow.create_or_update_request()
|
||||||
if response.ok:
|
valid = yield jedi_flow.validate_warnings()
|
||||||
valid = yield jedi_flow.validate_warnings()
|
if valid:
|
||||||
if valid:
|
if jedi_flow.next_screen > len(jedi_flow.screens):
|
||||||
if jedi_flow.next_screen > len(jedi_flow.screens):
|
where = "/requests"
|
||||||
where = "/requests"
|
|
||||||
else:
|
|
||||||
where = self.application.default_router.reverse_url(
|
|
||||||
"request_form_update", jedi_flow.next_screen, jedi_flow.request_id
|
|
||||||
)
|
|
||||||
self.redirect(where)
|
|
||||||
else:
|
else:
|
||||||
self.render(
|
where = self.application.default_router.reverse_url(
|
||||||
"requests/screen-%d.html.to" % int(screen),
|
"request_form_update", jedi_flow.next_screen, jedi_flow.request_id
|
||||||
**rerender_args
|
|
||||||
)
|
)
|
||||||
|
self.redirect(where)
|
||||||
else:
|
else:
|
||||||
self.set_status(response.code)
|
self.render(
|
||||||
|
"requests/screen-%d.html.to" % int(screen),
|
||||||
|
**rerender_args
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self.render(
|
self.render(
|
||||||
"requests/screen-%d.html.to" % int(screen),
|
"requests/screen-%d.html.to" % int(screen),
|
||||||
@ -81,15 +77,10 @@ class RequestNew(BaseHandler):
|
|||||||
request = None
|
request = None
|
||||||
|
|
||||||
if request_id:
|
if request_id:
|
||||||
response = yield self.requests_client.get(
|
request = self.requests_repo.get(request_id)
|
||||||
"/requests/{}".format(request_id),
|
|
||||||
raise_error=False,
|
|
||||||
)
|
|
||||||
if response.ok:
|
|
||||||
request = response.json
|
|
||||||
|
|
||||||
jedi_flow = JEDIRequestFlow(
|
jedi_flow = JEDIRequestFlow(
|
||||||
self.requests_client, self.fundz_client, screen, request, request_id=request_id
|
self.requests_repo, self.fundz_client, screen, request, request_id=request_id
|
||||||
)
|
)
|
||||||
|
|
||||||
self.render(
|
self.render(
|
||||||
@ -108,7 +99,7 @@ class RequestNew(BaseHandler):
|
|||||||
class JEDIRequestFlow(object):
|
class JEDIRequestFlow(object):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
requests_client,
|
requests_repo,
|
||||||
fundz_client,
|
fundz_client,
|
||||||
current_step,
|
current_step,
|
||||||
request=None,
|
request=None,
|
||||||
@ -117,7 +108,7 @@ class JEDIRequestFlow(object):
|
|||||||
current_user=None,
|
current_user=None,
|
||||||
existing_request=None,
|
existing_request=None,
|
||||||
):
|
):
|
||||||
self.requests_client = requests_client
|
self.requests_repo = requests_repo
|
||||||
self.fundz_client = fundz_client
|
self.fundz_client = fundz_client
|
||||||
|
|
||||||
self.current_step = current_step
|
self.current_step = current_step
|
||||||
@ -145,8 +136,13 @@ class JEDIRequestFlow(object):
|
|||||||
|
|
||||||
@tornado.gen.coroutine
|
@tornado.gen.coroutine
|
||||||
def validate_warnings(self):
|
def validate_warnings(self):
|
||||||
|
existing_request_data = (
|
||||||
|
self.existing_request
|
||||||
|
and self.existing_request.body.get(self.form_section)
|
||||||
|
) or None
|
||||||
|
|
||||||
valid = yield self.form.perform_extra_validation(
|
valid = yield self.form.perform_extra_validation(
|
||||||
self.existing_request.get('body', {}).get(self.form_section),
|
existing_request_data,
|
||||||
self.fundz_client,
|
self.fundz_client,
|
||||||
)
|
)
|
||||||
return valid
|
return valid
|
||||||
@ -171,15 +167,15 @@ class JEDIRequestFlow(object):
|
|||||||
|
|
||||||
if self.request:
|
if self.request:
|
||||||
if self.form_section == "review_submit":
|
if self.form_section == "review_submit":
|
||||||
data = self.request["body"]
|
data = self.request.body
|
||||||
else:
|
else:
|
||||||
data = self.request["body"].get(self.form_section, {})
|
data = self.request.body.get(self.form_section, {})
|
||||||
|
|
||||||
return defaultdict(lambda: defaultdict(lambda: 'Input required'), data)
|
return defaultdict(lambda: defaultdict(lambda: 'Input required'), data)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def can_submit(self):
|
def can_submit(self):
|
||||||
return self.request and self.request["status"] != "incomplete"
|
return self.request and self.request.status != "incomplete"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def next_screen(self):
|
def next_screen(self):
|
||||||
@ -222,19 +218,12 @@ class JEDIRequestFlow(object):
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
@tornado.gen.coroutine
|
|
||||||
def create_or_update_request(self):
|
def create_or_update_request(self):
|
||||||
request_data = {
|
request_data = {
|
||||||
"creator_id": self.current_user["id"],
|
self.form_section: self.form.data
|
||||||
"request": {self.form_section: self.form.data},
|
|
||||||
}
|
}
|
||||||
if self.request_id:
|
if self.request_id:
|
||||||
response = yield self.requests_client.patch(
|
self.requests_repo.update(self.request_id, request_data)
|
||||||
"/requests/{}".format(self.request_id), json=request_data
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
response = yield self.requests_client.post("/requests", json=request_data)
|
request = self.requests_repo.create(self.current_user["id"], request_data)
|
||||||
self.request = response.json
|
self.request_id = request.id
|
||||||
self.request_id = self.request["id"]
|
|
||||||
|
|
||||||
return response
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user