From df16d3d531840ec42b3bedb35d90d72ffaeca8a0 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 21 Jul 2015 11:08:17 -0700 Subject: [PATCH 001/116] Resolve MUWM-2792 create grad request mock data for javerage and jinter. --- .../api/committee_id_000018235_status_active | 1 + .../api/committee_id_000083856_status_active | 77 +++++++++++++++++++ .../students/v1/api/leave_id_000018235 | 1 + .../students/v1/api/leave_id_000083856 | 29 +++++++ .../students/v1/api/petition_id_000018235 | 1 + .../students/v1/api/petition_id_000083856 | 11 +++ ...est_id_000018235_exclude_past_quarter_true | 19 +++++ ...est_id_000083856_exclude_past_quarter_true | 62 +++++++++++++++ 8 files changed, 201 insertions(+) create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000018235_status_active create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000018235 create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000018235 create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000018235_exclude_past_quarter_true create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000018235_status_active b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000018235_status_active new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000018235_status_active @@ -0,0 +1 @@ +[] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active new file mode 100644 index 0000000000..dae85e1f4a --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active @@ -0,0 +1,77 @@ +[ + {"committeeType":"Advisor", + "dept":"Anthropology", + "degreeType":"Master Of Public Health (Epidemiology)", + "majorFullName":"ANTH", + "status":"active", + "startDate":"2012-12-07T08:26:14.77", + "endDate":null, + "members":[{"nameFirst":"Bet", + "nameLast":"Duncan", + "memberType":"member", + "status":"active", + "dept":"Anthropology", + "email":"bbb@u.washington.edu"} + ] + }, + {"committeeType":"Master's Committee", + "dept":"Epidemiology - Public Health", + "degreeType":"Master Of Public Health (Epidemiology)", + "majorFullName":"EPI", + "status":"active", + "startDate":"2012-11-14T00:00:00", + "endDate":null, + "members":[{"nameFirst":"Nina L.", + "nameLast":"Patrick", + "memberType":"chair", + "status":"active", + "dept":"Epidemiology - Public Health", + "email":"nnn@u.washington.edu"}, + {"nameFirst":"Louis", + "nameLast":"Vivian", + "memberType":"member", + "status":"active", + "dept":"Ministry of Health, Peru", + "email":"lll@oge.sld.pe"}, + {"nameFirst":"Bet", + "nameLast":"Duncan", + "memberType":"member", + "status":"active", + "dept":"Anthropology", + "email":"bbb@u.washington.edu"} + ] + }, + {"committeeType":"Doctoral Supervisory Committee", + "dept":"Anthropology", + "degreeType":"Doctor Of Philosophy (Anthropology)", + "majorFullName":"ANTH", + "status":"active", + "startDate":"2013-06-07T00:00:00", + "endDate":null, + "members":[{"nameFirst":"Bet", + "nameLast":"Duncan", + "memberType":"chair", + "status":"active", + "dept":"Anthropology", + "email":"bbb@u.washington.edu"}, + {"nameFirst":"Malinda", + "nameLast":"Korry", + "memberType":"gsr", + "status":"active", + "dept":"Health Services - Public Health", + "email":""}, + {"nameFirst":"Steve M.", + "nameLast":"Goodman", + "memberType":"chair", + "status":"active", + "dept":"Anthropology", + "email":"sss@u.washington.edu"}, + {"nameFirst":"James T.", + "nameLast":"Pfeiffer", + "memberType":"member", + "status":"active", + "dept":"Global Health", + "email":"jjj@uw.edu"} + ] + } +] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000018235 b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000018235 new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000018235 @@ -0,0 +1 @@ +[] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 new file mode 100644 index 0000000000..86b729b6fd --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 @@ -0,0 +1,29 @@ +[ + { + "leaveReason":"Dissertation/Thesis research/writing", + "submitDate":"2012-09-10T09:40:03.36", + "status":"paid", + "quarters":[{"year":2012, + "quarter":"autumn"}]}, + {"leaveReason":"Dissertation/Thesis research/writing", + "submitDate":"2013-01-02T12:05:14.37", + "status":"paid", + "quarters":[{"year":2013, + "quarter":"winter"}]}, + {"leaveReason":"Dissertation/Thesis research/writing", + "submitDate":"2013-09-19T08:55:36.517", + "status":"paid", + "quarters":[{"year":2013, + "quarter":"autumn"}]}, + {"leaveReason":"Dissertation/Thesis research/writing", + "submitDate":"2014-01-02T15:03:28.01", + "status":"paid", + "quarters":[{"year":2014, + "quarter":"winter"}]}, + {"leaveReason":"Dissertation/Thesis research/writing", + "submitDate":"2014-03-31T11:32:48.583", + "status":"paid", + "quarters":[{"year":2014, + "quarter":"spring"}] + } +] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000018235 b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000018235 new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000018235 @@ -0,0 +1 @@ +[] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 new file mode 100644 index 0000000000..849e7a3b99 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 @@ -0,0 +1,11 @@ +[ + {"description":"Doctoral degree - Extend ten year limit", + "submitDate":"2015-03-26T16:32:28.64", + "deptRecommend":"Approve", + "gradSchoolDecision":"Approved"}, + {"description":"Doctoral degree - Extend ten year limit", + "submitDate":"2014-03-26T13:24:58.633", + "deptRecommend":"Approve", + "gradSchoolDecision":"Approved" + } +] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000018235_exclude_past_quarter_true b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000018235_exclude_past_quarter_true new file mode 100644 index 0000000000..f57a84be6a --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000018235_exclude_past_quarter_true @@ -0,0 +1,19 @@ +[ + { + "syskey":18235, + "requestId":104700, + "requestType":"Masters Request", + "degreeTitle":"Master Of Science In Computational Finance & Risk Management", + "majorFullName":"Computational Finance & Risk Management", + "status":"Awaiting Dept Action (Final Exam)", + "examPlace":null, + "examDate":null, + "targetAwardYear":2013, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2013-04-14T17:41:26.937", + "major":"CFRM", + "pathway":5, + "degreeLevel":2, + "degreeType":6 + } +] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true new file mode 100644 index 0000000000..1837951293 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true @@ -0,0 +1,62 @@ +[ + {"syskey":83856, + "requestId":101502, + "requestType":"Masters Request", + "degreeTitle":"Master Of Landscape Architecture/Master Of Architecture", + "majorFullName":"Landscape Arch/Architecture (Concurrent)", + "status":"Awaiting Dept Action (Final Exam)", + "examPlace":null, + "examDate":null, + "targetAwardYear":2015, + "targetAwardQuarter":"winter", + "requestSubmitDate":"2015-03-11T20:53:32.733", + "major":"LA ARC", + "pathway":0, + "degreeLevel":2, + "degreeType":7}, + {"syskey":83856, + "requestId":101518, + "requestType":"Masters Request", + "degreeTitle":"Master Of Architecture", + "majorFullName":"Architecture", + "status":"Withdrawn", + "examPlace":null, + "examDate":null, + "targetAwardYear":2015, + "targetAwardQuarter":"winter", + "requestSubmitDate":"2015-03-12T17:17:23.183", + "major":"ARCH", + "pathway":0, + "degreeLevel":2, + "degreeType":7}, + {"syskey":83856, + "requestId":102782, + "requestType":"Masters Request", + "degreeTitle":"Master Of Architecture", + "majorFullName":"Architecture", + "status":"Recommended by Dept", + "examPlace":null, + "examDate":null, + "targetAwardYear":2015, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2015-03-30T15:38:12.907", + "major":"ARCH", + "pathway":0, + "degreeLevel":2, + "degreeType":7}, + {"syskey":83856, + "requestId":102785, + "requestType":"Masters Request", + "degreeTitle":"Master Of Landscape Architecture", + "majorFullName":"Landscape Architecture", + "status":"Recommended by Dept", + "examPlace":null, + "examDate":null, + "targetAwardYear":2015, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2015-03-30T15:40:25.007", + "major":"L ARCH", + "pathway":0, + "degreeLevel":2, + "degreeType":7} +] From f114e69749aa67ef6a76f72bd8dd4ad26a15d20f Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 21 Jul 2015 11:11:41 -0700 Subject: [PATCH 002/116] Give jinter an unique StudentSystemKey. --- .../student/v5/person/9136CCB8F66711D5BE060004AC494F31.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/resources/sws/file/student/v5/person/9136CCB8F66711D5BE060004AC494F31.json b/myuw_mobile/resources/sws/file/student/v5/person/9136CCB8F66711D5BE060004AC494F31.json index cd3cd0de65..7c7af9a366 100644 --- a/myuw_mobile/resources/sws/file/student/v5/person/9136CCB8F66711D5BE060004AC494F31.json +++ b/myuw_mobile/resources/sws/file/student/v5/person/9136CCB8F66711D5BE060004AC494F31.json @@ -28,7 +28,7 @@ "Resident":null, "StudentName":"Chakrabarti,Japendra", "StudentNumber":"1233334", -"StudentSystemKey":"000083856", +"StudentSystemKey":"000018235", "TestScore":{"Href":"\/student\/v5\/testscore\/9136CCB8F66711D5BE060004AC494F31.json", "RegID":"9136CCB8F66711D5BE060004AC494F31"}, "UWNetID":"jinter", From 590ed92de694b42578c33883b048f6cd2366e947 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 21 Jul 2015 11:18:42 -0700 Subject: [PATCH 003/116] Resolve MUWM-2793 - create grad api. --- myuw_mobile/dao/grad.py | 98 +++++++++++++++++++++++++++++++++ myuw_mobile/test/api/grad.py | 101 ++++++++++++++++++++++++++++++++++ myuw_mobile/test/dao/grad.py | 50 +++++++++++++++++ myuw_mobile/tests.py | 2 + myuw_mobile/urls.py | 3 + myuw_mobile/views/api/grad.py | 42 ++++++++++++++ 6 files changed, 296 insertions(+) create mode 100644 myuw_mobile/dao/grad.py create mode 100644 myuw_mobile/test/api/grad.py create mode 100644 myuw_mobile/test/dao/grad.py create mode 100644 myuw_mobile/views/api/grad.py diff --git a/myuw_mobile/dao/grad.py b/myuw_mobile/dao/grad.py new file mode 100644 index 0000000000..ce5429d63a --- /dev/null +++ b/myuw_mobile/dao/grad.py @@ -0,0 +1,98 @@ +""" +This class encapsulates the interactions with +the Grad School request resource. +""" + +import logging +import traceback +from restclients.grad.degree import get_degree_by_regid +from restclients.grad.committee import get_committee_by_regid +from restclients.grad.leave import get_leave_by_regid +from restclients.grad.petition import get_petition_by_regid +from myuw_mobile.logger.logback import log_exception +from myuw_mobile.dao.pws import get_regid_of_current_user + + +logger = logging.getLogger(__name__) + + +def get_grad_degree_for_current_user(): + """ + returns json data of grad degree requests + for the current user + """ + + try: + return get_degree_by_regid(get_regid_of_current_user()) + except Exception: + log_exception(logger, + "get_grad_degree_for_current_user", + traceback.format_exc()) + return None + + +def get_grad_committee_for_current_user(): + """ + returns json data of grad degree requests + for the current user + """ + + try: + return get_committee_by_regid(get_regid_of_current_user()) + except Exception: + log_exception(logger, + "get_grad_committee_for_current_user", + traceback.format_exc()) + return None + + +def get_grad_leave_for_current_user(): + """ + returns json data of grad degree requests + for the current user + """ + + try: + return get_leave_by_regid(get_regid_of_current_user()) + except Exception: + log_exception(logger, + "get_grad_leave_for_current_user", + traceback.format_exc()) + return None + + +def get_grad_petition_for_current_user(): + """ + returns json data of grad degree requests + for the current user + """ + + try: + return get_petition_by_regid(get_regid_of_current_user()) + except Exception: + log_exception(logger, + "get_grad_petition_for_current_user", + traceback.format_exc()) + return None + + +def get_json(degree, committee, leave, petition): + if degree is None and committee is None and\ + leave is None and petition is None: + return None + + return { + "degrees": json_data(degree), + "committees": json_data(committee), + "leaves": json_data(leave), + "petitions": json_data(petition) + } + + +def json_data(req_data): + if req_data is None or len(req_data) == 0: + return None + result = [] + for item in req_data: + result.append(item.json_data()) + return result diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py new file mode 100644 index 0000000000..8b2c376740 --- /dev/null +++ b/myuw_mobile/test/api/grad.py @@ -0,0 +1,101 @@ +import json +from unittest2 import skipIf +from datetime import datetime +from django.test.utils import override_settings +from django.test import TestCase +from django.test.client import Client +from django.core.urlresolvers import reverse +from myuw_mobile.test.api import missing_url, get_user, get_user_pass + + +FDAO_SWS = 'restclients.dao_implementation.sws.File' +Session = 'django.contrib.sessions.middleware.SessionMiddleware' +Common = 'django.middleware.common.CommonMiddleware' +CsrfView = 'django.middleware.csrf.CsrfViewMiddleware' +Auth = 'django.contrib.auth.middleware.AuthenticationMiddleware' +RemoteUser = 'django.contrib.auth.middleware.RemoteUserMiddleware' +Message = 'django.contrib.messages.middleware.MessageMiddleware' +XFrame = 'django.middleware.clickjacking.XFrameOptionsMiddleware' +UserService = 'userservice.user.UserServiceMiddleware' +AUTH_BACKEND = 'django.contrib.auth.backends.ModelBackend' + + +@override_settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + MIDDLEWARE_CLASSES=(Session, + Common, + CsrfView, + Auth, + RemoteUser, + Message, + XFrame, + UserService, + ), + AUTHENTICATION_BACKENDS=(AUTH_BACKEND,) + ) +class TestGrad(TestCase): + def setUp(self): + self.client = Client() + + @skipIf(missing_url("myuw_home"), "myuw urls not configured") + def test_javerage(self): + url = reverse("myuw_grad_api") + get_user('javerage') + self.client.login(username='javerage', + password=get_user_pass('javerage')) + response = self.client.get(url) + self.assertEquals(response.status_code, 200) + self.assertIsNotNone(response.content) + data = json.loads(response.content) + + self.assertIsNotNone(data.get("degrees")) + self.assertEquals(len(data["degrees"]), 4) + degree = data["degrees"][0] + self.assertEqual(degree["req_type"], "Masters Request") + self.assertEqual(degree["submit_date"], "2015-03-11T20:53:32") + self.assertEqual( + degree["degree_title"], + "Master Of Landscape Architecture/Master Of Architecture") + self.assertEqual(degree["major_full_name"], + "Landscape Arch/Architecture (Concurrent)") + self.assertEqual(degree["status"], + "Awaiting Dept Action (Final Exam)") + self.assertIsNone(degree["exam_place"]) + self.assertIsNone(degree["exam_date"]) + self.assertEqual(degree["target_award_year"], 2015) + self.assertEqual(degree["target_award_quarter"], "Winter") + + self.assertIsNotNone(data.get("committees")) + self.assertEquals(len(data["committees"]), 3) + committee = data["committees"][0] + self.assertEqual(committee['committee_type'], "Advisor") + self.assertEqual(committee['status'], "active") + self.assertEqual(committee['dept'], "Anthropology") + self.assertEqual(committee['degree_title'], None) + self.assertEqual(committee['degree_type'], + "Master Of Public Health (Epidemiology)") + self.assertEqual(committee['major_full_name'], "ANTH") + self.assertEqual(committee['start_date'], + "2012-12-07T08:26:14") + self.assertEqual(len(committee['members']), 1) + + self.assertIsNotNone(data.get("leaves")) + self.assertEquals(len(data["leaves"]), 5) + leave = data["leaves"][0] + self.assertEqual(leave['reason'], + "Dissertation/Thesis research/writing") + self.assertEqual(leave['submit_date'], + "2012-09-10T09:40:03") + self.assertEqual(leave['status'], "paid") + self.assertEqual(len(leave['terms']), 1) + self.assertEqual(leave['terms'][0]['quarter'], "Autumn") + self.assertEqual(leave['terms'][0]['year'], 2012) + + self.assertIsNotNone(data.get("petitions")) + self.assertEquals(len(data["petitions"]), 2) + petition = data["petitions"][0] + self.assertEqual(petition['description'], + "Doctoral degree - Extend ten year limit") + self.assertEqual(petition['submit_date'], + "2015-03-26T16:32:28") + self.assertEqual(petition['dept_recommend'], "Approve") + self.assertEqual(petition['gradschool_decision'], "Approved") diff --git a/myuw_mobile/test/dao/grad.py b/myuw_mobile/test/dao/grad.py new file mode 100644 index 0000000000..23859651ac --- /dev/null +++ b/myuw_mobile/test/dao/grad.py @@ -0,0 +1,50 @@ +from django.test import TestCase +from django.conf import settings +from myuw_mobile.dao.grad import get_grad_degree_for_current_user,\ + get_grad_committee_for_current_user, get_grad_leave_for_current_user,\ + get_grad_petition_for_current_user, get_json +from django.test.client import RequestFactory + + +FDAO_PWS = 'restclients.dao_implementation.pws.File' +FDAO_SWS = 'restclients.dao_implementation.sws.File' +FDAO_GRA = 'restclients.dao_implementation.grad.File' + + +class TestGrad(TestCase): + + def test_get_grad_degree_for_current_user(self): + with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, + RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + now_request.session = {} + degree_reqs = get_grad_degree_for_current_user() + self.assertIsNone(degree_reqs) + + def test_get_grad_committee_for_current_user(self): + with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, + RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + now_request.session = {} + committee_reqs = get_grad_committee_for_current_user() + self.assertIsNone(committee_reqs) + + def test_get_grad_leave_for_current_user(self): + with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, + RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + now_request.session = {} + leave_reqs = get_grad_leave_for_current_user() + self.assertIsNone(leave_reqs) + + def test_get_grad_petition_for_current_user(self): + with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, + RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + now_request.session = {} + petition_reqs = get_grad_petition_for_current_user() + self.assertIsNone(petition_reqs) diff --git a/myuw_mobile/tests.py b/myuw_mobile/tests.py index a09e7888d6..1d13837959 100644 --- a/myuw_mobile/tests.py +++ b/myuw_mobile/tests.py @@ -11,6 +11,7 @@ from myuw_mobile.test.dao.canvas import TestCanvas from myuw_mobile.test.dao.card_display_dates import TestDisplayValues from myuw_mobile.test.userservice_validation import TestValidation +from myuw_mobile.test.dao.grad import TestGrad from myuw_mobile.test.dao.hfs import TestHFS from myuw_mobile.test.dao.library import TestLibrary from myuw_mobile.test.dao.building import TestBuildings @@ -21,6 +22,7 @@ from myuw_mobile.test.api.schedule import TestSchedule as APISchedule from myuw_mobile.test.api.books import TestBooks from myuw_mobile.test.api.cur_books import TestCurBooks +from myuw_mobile.test.api.grad import TestGrad from myuw_mobile.test.api.hfs import TestHFS as TestHFSAPI from myuw_mobile.test.api.profile import TestProfile from myuw_mobile.test.api.library import TestLibrary as TestLibraryAPI diff --git a/myuw_mobile/urls.py b/myuw_mobile/urls.py index 56c99d3b9e..d1ae23256b 100644 --- a/myuw_mobile/urls.py +++ b/myuw_mobile/urls.py @@ -4,6 +4,7 @@ from myuw_mobile.views.api.finance import Finance from myuw_mobile.views.api.hfs import HfsBalances from myuw_mobile.views.api.future_schedule import StudClasScheFutureQuar +from myuw_mobile.views.api.grad import MyGrad from myuw_mobile.views.api.library import MyLibInfo from myuw_mobile.views.api.profile import MyProfile from myuw_mobile.views.api.category_links import CategoryLinks @@ -37,6 +38,8 @@ name="myuw_links_api"), url(r'^api/v1/finance/$', login_required(Finance().run), name="myuw_finance_api"), + url(r'^api/v1/grad/$', login_required(MyGrad().run), + name="myuw_grad_api"), url(r'^api/v1/hfs/$', login_required(HfsBalances().run), name="myuw_hfs_api"), url(r'^api/v1/library/$', login_required(MyLibInfo().run), diff --git a/myuw_mobile/views/api/grad.py b/myuw_mobile/views/api/grad.py new file mode 100644 index 0000000000..9a2c11e8f1 --- /dev/null +++ b/myuw_mobile/views/api/grad.py @@ -0,0 +1,42 @@ +import logging +from django.http import HttpResponse +import json +from myuw_mobile.views.rest_dispatch import RESTDispatch, data_not_found +from myuw_mobile.dao.grad import get_grad_degree_for_current_user,\ + get_grad_committee_for_current_user, get_grad_leave_for_current_user,\ + get_grad_petition_for_current_user, get_json +# from myuw_mobile.dao.notice import get_grad_notices +from myuw_mobile.logger.timer import Timer +from myuw_mobile.logger.logresp import log_data_not_found_response +from myuw_mobile.logger.logresp import log_success_response + + +class MyGrad(RESTDispatch): + """ + Performs actions on resource at /api/v1/grad/. + """ + + def GET(self, request): + """ + GET returns 200 with the student account balances + of the current user + """ + + timer = Timer() + logger = logging.getLogger(__name__) + degree_reqs = get_grad_degree_for_current_user() + committee_reqs = get_grad_committee_for_current_user() + leave_reqs = get_grad_leave_for_current_user() + petition_reqs = get_grad_petition_for_current_user() + + if degree_reqs is None and committee_reqs is None and\ + leave_reqs is None and petition_reqs is None: + log_data_not_found_response(logger, timer) + return data_not_found() + + log_success_response(logger, timer) + grad_json_data = get_json(degree_reqs, committee_reqs, + leave_reqs, petition_reqs) + logger.debug(grad_json_data) + + return HttpResponse(json.dumps(grad_json_data)) From 885a801d1049ed6b7d88972f68fc8606a1ba69b9 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 21 Jul 2015 13:46:30 -0700 Subject: [PATCH 004/116] Initial checkin for resolving MUWM-3133 --- myuw_mobile/static/js/card/mygrad.js | 38 ++++ myuw_mobile/static/js/landing.js | 1 + myuw_mobile/static/js/ws_data.js | 29 ++++ myuw_mobile/templates/base_mobile.html | 1 + .../templates/handlebars/card/mygrad.html | 164 ++++++++++++++++++ myuw_mobile/templates/index.html | 1 + 6 files changed, 234 insertions(+) create mode 100644 myuw_mobile/static/js/card/mygrad.js create mode 100644 myuw_mobile/templates/handlebars/card/mygrad.html diff --git a/myuw_mobile/static/js/card/mygrad.js b/myuw_mobile/static/js/card/mygrad.js new file mode 100644 index 0000000000..5c7f80a504 --- /dev/null +++ b/myuw_mobile/static/js/card/mygrad.js @@ -0,0 +1,38 @@ +var MyGradCard = { + name: 'MyGradCard', + dom_target: undefined, + + render_init: function() { + WSData.fetch_mygrad_data(MyGradCard.render_upon_data, MyGradCard.show_error); + }, + + render_upon_data: function() { + if (!MyGradCard._has_all_data()) { + return; + } + MyGradCard._render(WSData.mygrad_data()); + }, + + _render: function (mygrad_data) { + var source = $("#mygrad_card_content").html(); + var template = Handlebars.compile(source); + if (!mygrad_data.degrees && !mygrad_data.committees && !mygrad_data.leaves && !mygrad_data.petitions) { + MyGradCard.dom_target.hide(); + } + else { + MyGradCard.dom_target.html(template(mygrad_data)); + } + }, + + _has_all_data: function () { + if (WSData.mygrad_data()) { + return true; + } + return false; + }, + + show_error: function() { + MyGradCard.dom_target.html(CardWithError.render("MyGrad")); + } + +}; diff --git a/myuw_mobile/static/js/landing.js b/myuw_mobile/static/js/landing.js index ff466accd6..a435d56782 100644 --- a/myuw_mobile/static/js/landing.js +++ b/myuw_mobile/static/js/landing.js @@ -32,6 +32,7 @@ var Landing = { TuitionCard, CriticalInfoCard, InternationalStuCard, + MyGradCard, LibraryCard, AcademicCard, EventsCard, diff --git a/myuw_mobile/static/js/ws_data.js b/myuw_mobile/static/js/ws_data.js index baf66313d9..3189d7636d 100644 --- a/myuw_mobile/static/js/ws_data.js +++ b/myuw_mobile/static/js/ws_data.js @@ -9,6 +9,7 @@ WSData = { _library_data: null, _tuition_data: null, _grade_data: {}, + _mygrad_data: null, _notice_data: null, _instructor_data: {}, _link_data: null, @@ -141,6 +142,10 @@ WSData = { return WSData._link_data; }, + mygrad_data: function() { + return WSData._mygrad_data; + }, + notice_data: function() { return WSData._notice_data; }, @@ -558,6 +563,30 @@ WSData = { } }, + fetch_mygrad_data: function(callback, err_callback, args) { + if (WSData._mygrad_data === null) { + $.ajax({ + url: "/mobile/api/v1/grad/", + dataType: "JSON", + + type: "GET", + accepts: {html: "text/html"}, + success: function(results) { + WSData._mygrad_data = results; + callback.apply(null, args); + }, + error: function(xhr, status, error) { + err_callback.call(null, status, error); + } + }); + } + else { + window.setTimeout(function() { + callback.apply(null, args); + }, 0); + } + }, + fetch_tuition_data: function(callback, err_callback, args) { if (WSData._tuition_data === null) { $.ajax({ diff --git a/myuw_mobile/templates/base_mobile.html b/myuw_mobile/templates/base_mobile.html index 10a580a596..62e877e841 100644 --- a/myuw_mobile/templates/base_mobile.html +++ b/myuw_mobile/templates/base_mobile.html @@ -174,6 +174,7 @@

Categorized Resources

+ diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html new file mode 100644 index 0000000000..a34b7d9db5 --- /dev/null +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -0,0 +1,164 @@ +{% load templatetag_handlebars %} + {% tplhandlebars "mygrad_card_content" %} + +
+

MyGrad

+ +
    + {{#if petitions }} +
  • +

    Petition Request

    + +
      + {{ #each petitions}} +
    • +
      + Description: +
      +
      + {{description}} +
      +
      + Dept Recommend: +
      +
      + {{dept_recommend}} +
      +
      + GradSchool Decision: +
      +
      + {{gradschool_decision}} +
      +
      + Submit date: +
      +
      + {{toFriendlyDate submit_date}} +
      +
    • + {{/each}} +
    +
  • + {{/if}} + + {{#if leaves }} +
  • +

    Leave Request

    + +
      + {{ #each leaves}} +
    • +
      + Reason: +
      +
      + {{reason}} +
      +
      + Status: +
      +
      + {{status}} +
      +
      + Submit date: +
      +
      + {{submit_date}} +
      +
      + Quarters: +
      +
      +
        + {{ #each terms}} +
      • + + {{year}}, {{quarter}} + +
      • + {{/each}} +
      +
      +
    • + {{/each}} +
    +
  • + {{/if}} + + {{#if degrees }} +
  • +

    Degree Request

    + +
      + {{ #each degrees}} +
    • +
      + Request type: +
      +
      + {{req_type}} +
      +
      + Degree Title: +
      +
      + {{degree_title}} +
      +
      + Status: +
      +
      + {{status}} + +
      +
      + Award Year, Quarter: +
      +
      + + {{target_award_year}}, {{target_award_quarter}} + +
      +
    • + {{/each}} +
    +
  • + {{/if}} + + {{#if committees }} +
  • +

    Committees Request

    + +
      + {{ #each committees}} +
    • +
      + {{committee_type}} +
      + +
      +
        + {{ #each members}} +
      • + {{member_type}} + {{dept}} + {{first_name}} {{last_name}} + {{email}} +
      • + {{/each}} +
      +
      + +
    • + {{/each}} +
    + +
  • + {{/if}} + +
+
+ + {% endtplhandlebars %} diff --git a/myuw_mobile/templates/index.html b/myuw_mobile/templates/index.html index 49d5ccf75b..34f77cf58e 100644 --- a/myuw_mobile/templates/index.html +++ b/myuw_mobile/templates/index.html @@ -15,6 +15,7 @@ {% include "handlebars/card/grade.html" %} {% include "handlebars/card/hfs.html" %} {% include "handlebars/card/library.html" %} + {% include "handlebars/card/mygrad.html" %} {% include "handlebars/card/loading.html" %} {% include "handlebars/card/no_course.html" %} {% include "handlebars/card/pce_tuition.html" %} From ae7fd9d85e8df165129135c81ed70897771a6db6 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 21 Jul 2015 17:08:51 -0700 Subject: [PATCH 005/116] Resolve MUWM-3159 add MyGrad proxy in myuw_mobile. --- myuw_mobile/templates/supporttools/custom_sidebar_links.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/myuw_mobile/templates/supporttools/custom_sidebar_links.html b/myuw_mobile/templates/supporttools/custom_sidebar_links.html index 2c864ff8f3..185e3a267d 100644 --- a/myuw_mobile/templates/supporttools/custom_sidebar_links.html +++ b/myuw_mobile/templates/supporttools/custom_sidebar_links.html @@ -27,6 +27,11 @@

Web Services

  • Canvas Web Service
  • {% endif %} + {% url 'restclients.views.proxy' 'grad' 'index.html' as grad_url %} + {% if grad_url %} +
  • MyGrad Request Web Service
  • + {% endif %} + {% url 'restclients.views.proxy' 'iasystem' 'index.html' as ias_url %} {% if ias_url %}
  • IASystem Web Service
  • From 670b9c8cc1fe2565fd3246bf4d4ce1f3ad7c39ff Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Fri, 24 Jul 2015 15:45:55 -0700 Subject: [PATCH 006/116] formatting and styling petition requests --- myuw_mobile/static/css/mobile.less | 12 ++++ .../templates/handlebars/card/mygrad.html | 61 +++++++++---------- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 59eaff7aa9..661211cb4b 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -623,6 +623,18 @@ body { // --- END NEW STUDENT CHECKLIST CARDS --- + + // graduate student content card + div#MyGradCard { + ul.recommendation-list { list-style-type: none; padding-left: 0; + .card-badge-value { font-size: 14px; font-weight: bold; } + } + + } + + + // end graduate student content card + // registration card diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index a34b7d9db5..65945348a4 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -2,45 +2,42 @@ {% tplhandlebars "mygrad_card_content" %}
    -

    MyGrad

    - -
      + + {{#if petitions }} -
    • -

      Petition Request

      +
      +

      Petition Requests

      -
        +
          {{ #each petitions}} -
        • -
          - Description: -
          -
          - {{description}} -
          -
          - Dept Recommend: -
          -
          - {{dept_recommend}} -
          -
          - GradSchool Decision: -
          -
          - {{gradschool_decision}} -
          -
          - Submit date: -
          -
          - {{toFriendlyDate submit_date}} +
        • +
          +

          {{description}}

          +
            +
          • +
            +
            Department Recommendation
            +
            +
            + {{dept_recommend}} +
            +
          • +
          • +
            +
            Graduate School Decision
            +
            +
            + {{gradschool_decision}} +
            +
          • +
        • {{/each}}
        - +
      {{/if}} + {{#if leaves }}
    • @@ -158,7 +155,7 @@

      Committees Request

    • {{/if}} -
    +
    {% endtplhandlebars %} From 70f1825f1242699bc005c985ffe76915497cc424 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Fri, 24 Jul 2015 16:03:57 -0700 Subject: [PATCH 007/116] formatting and styling leave requests --- myuw_mobile/static/css/mobile.less | 6 +-- .../templates/handlebars/card/mygrad.html | 54 ++++++------------- 2 files changed, 19 insertions(+), 41 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 661211cb4b..ac49b4c9ea 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -626,10 +626,8 @@ body { // graduate student content card div#MyGradCard { - ul.recommendation-list { list-style-type: none; padding-left: 0; - .card-badge-value { font-size: 14px; font-weight: bold; } - } - + ul.recommendation-list { list-style-type: none; padding-left: 0; } + .card-badge-value { font-size: 14px; font-weight: normal; } } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index 65945348a4..ea46f4d217 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -39,49 +39,29 @@
    Graduate School Decision
    {{/if}} + {{#if leaves }} -
  • -

    Leave Request

    +
    +

    Leave Requests

    -
      +
        {{ #each leaves}} -
      • -
        - Reason: -
        -
        - {{reason}} -
        -
        - Status: -
        -
        - {{status}} -
        -
        - Submit date: -
        -
        - {{submit_date}} -
        -
        - Quarters: -
        -
        -
          - {{ #each terms}} -
        • - - {{year}}, {{quarter}} - -
        • - {{/each}} -
        -
        +
      • +
        +

        + {{reason}}, {{ #each terms}}{{quarter}} {{year}}{{/each}} +

        +
        + Status +
        +
        + {{status}} +
        +
      • {{/each}}
      - +
    {{/if}} {{#if degrees }} From e56d8d199ca48a0a48673cfede57963a522e24d8 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Fri, 24 Jul 2015 16:33:19 -0700 Subject: [PATCH 008/116] formatting and styling degree requests --- .../templates/handlebars/card/mygrad.html | 50 +++++++------------ 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index ea46f4d217..12babd916c 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -63,46 +63,32 @@

    {{/if}} - + + + {{#if degrees }} -
  • -

    Degree Request

    +
    +

    Degree and Exam Requests

    -
      +
        {{ #each degrees}} -
      • -
        - Request type: -
        -
        - {{req_type}} -
        -
        - Degree Title: -
        -
        - {{degree_title}} -
        -
        - Status: -
        -
        - {{status}} - -
        -
        - Award Year, Quarter: -
        -
        - - {{target_award_year}}, {{target_award_quarter}} - +
      • +
        +

        {{degree_title}}, {{target_award_quarter}} {{target_award_year}}

        +
        + Status +
        +
        + {{status}} +
      • {{/each}}
      - +
    {{/if}} + + {{#if committees }}
  • From b641e61d1f9cd3280da3f7d6ac48592222d256e3 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Fri, 24 Jul 2015 17:04:14 -0700 Subject: [PATCH 009/116] formatting and layout of committees lists --- myuw_mobile/static/css/mobile.less | 2 +- .../templates/handlebars/card/mygrad.html | 41 ++++++++----------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index ac49b4c9ea..017d7fe349 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -626,7 +626,7 @@ body { // graduate student content card div#MyGradCard { - ul.recommendation-list { list-style-type: none; padding-left: 0; } + ul { list-style-type: none; padding-left: 0; } .card-badge-value { font-size: 14px; font-weight: normal; } } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index 12babd916c..990acc9f8f 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -87,38 +87,31 @@

    {{degree_title}}, {{target_award_quarter}} {{target_award_year}}

    {{/if}} + - - + {{#if committees }} -
  • -

    Committees Request

    +
    +

    Your Committees

    -
      +
        {{ #each committees}} -
      • -
        - {{committee_type}} -
        - -
        -
          - {{ #each members}} -
        • - {{member_type}} - {{dept}} - {{first_name}} {{last_name}} - {{email}} -
        • - {{/each}} -
        -
        - +
      • +

        {{committee_type}}

        +
          + {{ #each members}} +
        • + {{first_name}} {{last_name}}, {{member_type}} + {{dept}} + {{email}} +
        • + {{/each}} +
      • {{/each}}
      - +
    {{/if}} From c190502625c13c96e9d37b823de02a482262de30 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Mon, 27 Jul 2015 16:10:27 -0700 Subject: [PATCH 010/116] fiddling with headers and styles on requests and statuses for grad content --- myuw_mobile/static/css/mobile.less | 12 ++++-- .../templates/handlebars/card/mygrad.html | 37 ++++++++++++------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 017d7fe349..d1337f905f 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -482,12 +482,12 @@ body { .card_list { list-style: none; padding-left: 0; } .card-badge { padding: 8px 10px 10px 0px; position: relative; - .card-badge-label { display: block; font-weight: bold; line-height: 35px; } + .card-badge-label { display: block; font-weight: bold; } .card-badge-action { display: block; font-weight: normal; line-height: 35px; margin-top: -10px; a { display: block; } } - .card-badge-value { display: block; font-size: 22px; font-weight: bold; line-height: 35px; text-align: right; } + .card-badge-value { display: block; font-size: 22px; font-weight: bold; text-align: right; } .card-badge-note { font-weight: normal; color: #888; margin-top: 35px; position: absolute; bottom: -3px; font-size: 12px; } } } @@ -627,7 +627,13 @@ body { // graduate student content card div#MyGradCard { ul { list-style-type: none; padding-left: 0; } - .card-badge-value { font-size: 14px; font-weight: normal; } + .card-badge { + h5 { font-weight: bold; } + } + .card-badge-value { font-size: 14px; } + .card-badge-label { font-weight: normal; } + span.qtr-yr { font-family: 'Roboto', sans-serif; font-weight: 400; color: #444 !important; font-size: 16px !important; margin-top: 5px; } + } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index 990acc9f8f..2677d106b3 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -2,21 +2,21 @@ {% tplhandlebars "mygrad_card_content" %}
    - +

    Graduate Status

    {{#if petitions }}
    -

    Petition Requests

    +

    Petition Requests

      {{ #each petitions}}
    • -

      {{description}}

      +
      {{description}}
      • -
        Department Recommendation
        + Department Recommendation
        {{dept_recommend}} @@ -24,7 +24,7 @@
        Department Recommendation
      • -
        Graduate School Decision
        + Graduate School Decision
        {{gradschool_decision}} @@ -42,15 +42,16 @@
        Graduate School Decision
        {{#if leaves }}
        -

        Leave Requests

        +

        Leave Requests

          {{ #each leaves}}
        • -

          - {{reason}}, {{ #each terms}}{{quarter}} {{year}}{{/each}} -

          +
          + {{reason}} 
          + {{ #each terms}}{{quarter}} {{year}}{{/each}} +
          Status
          @@ -68,13 +69,15 @@

          {{#if degrees }}
          -

          Degree and Exam Requests

          +

          Degree and Exam Requests

            {{ #each degrees}}
          • -

            {{degree_title}}, {{target_award_quarter}} {{target_award_year}}

            +
            {{degree_title}} 
            + {{target_award_quarter}} {{target_award_year}} +
            Status
            @@ -89,15 +92,23 @@

            {{degree_title}}, {{target_award_quarter}} {{target_award_year}}

            {{/if}} +
            + +
            + +
            Show Committees [insert disclosure here]
            + {{#if committees }}
            -

            Your Committees

            +

            Your Committees

              {{ #each committees}}
            • -

              {{committee_type}}

              +
              {{committee_type}}
                {{ #each members}}
              • From 6b269a408e66c5e329c5f3e8584c5ede49293e38 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Tue, 28 Jul 2015 09:43:10 -0700 Subject: [PATCH 011/116] more styling for committee lists --- myuw_mobile/static/css/mobile.less | 12 +++++++++--- myuw_mobile/templates/handlebars/card/mygrad.html | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index d1337f905f..bdc88ec4b9 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -627,13 +627,19 @@ body { // graduate student content card div#MyGradCard { ul { list-style-type: none; padding-left: 0; } - .card-badge { + #petition-reqs, #leave-reqs, #degree-reqs { + h4 { margin-bottom: 0px; } + h5 { font-weight: bold; margin-top: 0px;} + } + #committee_reqs { h5 { font-weight: bold; } + ul.card-list ul { + padding-bottom: 10px; + } } .card-badge-value { font-size: 14px; } .card-badge-label { font-weight: normal; } - span.qtr-yr { font-family: 'Roboto', sans-serif; font-weight: 400; color: #444 !important; font-size: 16px !important; margin-top: 5px; } - + } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index 2677d106b3..c975fc3284 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -112,7 +112,7 @@
                {{committee_type}}
                  {{ #each members}}
                • - {{first_name}} {{last_name}}, {{member_type}} + {{first_name}} {{last_name}}, {{member_type}} {{dept}} {{email}}
                • From 3bdb0508f0d1c3283eb91db2cc000b6ed596ffd3 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Tue, 28 Jul 2015 13:33:50 -0700 Subject: [PATCH 012/116] changing committee lists to an ol, fixing some padding --- myuw_mobile/static/css/mobile.less | 3 ++- myuw_mobile/templates/handlebars/card/mygrad.html | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index bdc88ec4b9..54ea7df0c2 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -626,7 +626,7 @@ body { // graduate student content card div#MyGradCard { - ul { list-style-type: none; padding-left: 0; } + ul, ol { list-style-type: none; padding-left: 0; } #petition-reqs, #leave-reqs, #degree-reqs { h4 { margin-bottom: 0px; } h5 { font-weight: bold; margin-top: 0px;} @@ -636,6 +636,7 @@ body { ul.card-list ul { padding-bottom: 10px; } + li.committee-member { padding-bottom: 8px; } } .card-badge-value { font-size: 14px; } .card-badge-label { font-weight: normal; } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index c975fc3284..34c1cc1f98 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -109,15 +109,15 @@

                  Your Committees

                  {{ #each committees}}
                • {{committee_type}}
                  -
                    +
                      {{ #each members}} -
                    1. - {{first_name}} {{last_name}}, {{member_type}} +
                    2. + {{first_name}} {{last_name}}, {{member_type}} {{dept}} {{email}}
                    3. {{/each}} -
                  +
                • {{/each}}
                From 45ec0a7f4e0804e989ac43acda57377fd85c0e1a Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 28 Jul 2015 15:23:47 -0700 Subject: [PATCH 013/116] Resolve MUWM-3177 - Only show committee member type if it is not just member. --- myuw_mobile/static/js/card/mygrad.js | 12 ++++++++++-- myuw_mobile/templates/handlebars/card/mygrad.html | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/myuw_mobile/static/js/card/mygrad.js b/myuw_mobile/static/js/card/mygrad.js index 5c7f80a504..4f3085c574 100644 --- a/myuw_mobile/static/js/card/mygrad.js +++ b/myuw_mobile/static/js/card/mygrad.js @@ -18,10 +18,18 @@ var MyGradCard = { var template = Handlebars.compile(source); if (!mygrad_data.degrees && !mygrad_data.committees && !mygrad_data.leaves && !mygrad_data.petitions) { MyGradCard.dom_target.hide(); + return; } - else { - MyGradCard.dom_target.html(template(mygrad_data)); + + for (var i = 0; i < mygrad_data.committees.length; i += 1) { + var members = mygrad_data.committees[i].members; + for (var j = 0; j < members.length; j += 1) { + if (members[j].member_type === "member") { + members[j].member_type = null; + } + } } + MyGradCard.dom_target.html(template(mygrad_data)); }, _has_all_data: function () { diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index 34c1cc1f98..c0210c9c8a 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -112,7 +112,7 @@
                {{committee_type}}
                  {{ #each members}}
                1. - {{first_name}} {{last_name}}, {{member_type}} + {{first_name}} {{last_name}}{{#if member_type}}, {{member_type}}{{/if}} {{dept}} {{email}}
                2. From 27db71b8d20f4112f4be67936ea9b0e6287549fc Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 28 Jul 2015 15:38:55 -0700 Subject: [PATCH 014/116] Fix bug my last commit 45ec0a7 - handle the case where committee is null. --- myuw_mobile/static/js/card/mygrad.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/myuw_mobile/static/js/card/mygrad.js b/myuw_mobile/static/js/card/mygrad.js index 4f3085c574..26843a90ff 100644 --- a/myuw_mobile/static/js/card/mygrad.js +++ b/myuw_mobile/static/js/card/mygrad.js @@ -20,12 +20,13 @@ var MyGradCard = { MyGradCard.dom_target.hide(); return; } - - for (var i = 0; i < mygrad_data.committees.length; i += 1) { - var members = mygrad_data.committees[i].members; - for (var j = 0; j < members.length; j += 1) { - if (members[j].member_type === "member") { - members[j].member_type = null; + if (mygrad_data.committees !== null) { + for (var i = 0; i < mygrad_data.committees.length; i += 1) { + var members = mygrad_data.committees[i].members; + for (var j = 0; j < members.length; j += 1) { + if (members[j].member_type === "member") { + members[j].member_type = null; + } } } } From a941a3d3cc4bd665e9e9b34155f601e5867445c3 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 28 Jul 2015 16:07:06 -0700 Subject: [PATCH 015/116] Resolve MUWM-3178 - Add commas in the leave quarters if there are multiple --- .../file/services/students/v1/api/leave_id_000083856 | 4 +++- myuw_mobile/static/js/handlebars-helpers.js | 9 +++++++++ myuw_mobile/templates/handlebars/card/mygrad.html | 10 +++++----- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 index 86b729b6fd..6824a18ec8 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 @@ -23,7 +23,9 @@ {"leaveReason":"Dissertation/Thesis research/writing", "submitDate":"2014-03-31T11:32:48.583", "status":"paid", - "quarters":[{"year":2014, + "quarters":[{"year":2013, + "quarter":"autumn"}, + {"year":2014, "quarter":"spring"}] } ] diff --git a/myuw_mobile/static/js/handlebars-helpers.js b/myuw_mobile/static/js/handlebars-helpers.js index b89c8411d3..4d21318099 100644 --- a/myuw_mobile/static/js/handlebars-helpers.js +++ b/myuw_mobile/static/js/handlebars-helpers.js @@ -373,3 +373,12 @@ Handlebars.registerHelper('greater_than', function(value1, value2, options) { return options.fn(this); } }); + +Handlebars.registerHelper('not_first', function(index, block) { + // display block if the index greater than 0 + if (arguments.length < 2) + throw new Error("Handlebars Helper not_first needs 1 parameter"); + if(parseInt(index) > 0) { + return block.fn(this); + } +}); diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index c0210c9c8a..4442e9dd14 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -50,7 +50,7 @@

                  Leave Requests

                  {{reason}} 
                  - {{ #each terms}}{{quarter}} {{year}}{{/each}} + {{#each terms}}{{#not_first @index}}, {{/not_first}}{{quarter}} {{year}}{{/each}}
                  Status @@ -94,14 +94,14 @@
                  {{degree_title}} 
                  - -
                  Show Committees [insert disclosure here]
                  - + {{#if committees }} +
                  Show Committees [insert disclosure here]
                  +

                  Your Committees

                  From 048fcd6deb1202bb683c10f6d6fcf13b78c30820 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 28 Jul 2015 16:22:40 -0700 Subject: [PATCH 016/116] committee members ordered by Chair, GSR and then alphabetical by last name. --- .../students/v1/api/committee_id_000083856_status_active | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active index dae85e1f4a..599b17f593 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active @@ -22,19 +22,19 @@ "startDate":"2012-11-14T00:00:00", "endDate":null, "members":[{"nameFirst":"Nina L.", - "nameLast":"Patrick", + "nameLast":"Fitzpatrick", "memberType":"chair", "status":"active", "dept":"Epidemiology - Public Health", "email":"nnn@u.washington.edu"}, {"nameFirst":"Louis", - "nameLast":"Vivian", + "nameLast":"ReVivian", "memberType":"member", "status":"active", "dept":"Ministry of Health, Peru", "email":"lll@oge.sld.pe"}, {"nameFirst":"Bet", - "nameLast":"Duncan", + "nameLast":"Shell-Duncan", "memberType":"member", "status":"active", "dept":"Anthropology", From 745608c9a77053accb8c2b0278cbd61a3629299d Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 30 Jul 2015 14:15:16 -0700 Subject: [PATCH 017/116] Resolve MUWM-3184 - put committee inside a dsclosure. --- myuw_mobile/static/js/card/mygrad.js | 26 +++++++++++++++++++ .../templates/handlebars/card/mygrad.html | 9 ++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/myuw_mobile/static/js/card/mygrad.js b/myuw_mobile/static/js/card/mygrad.js index 26843a90ff..1eef41720f 100644 --- a/myuw_mobile/static/js/card/mygrad.js +++ b/myuw_mobile/static/js/card/mygrad.js @@ -31,6 +31,7 @@ var MyGradCard = { } } MyGradCard.dom_target.html(template(mygrad_data)); + MyGradCard.add_events(); }, _has_all_data: function () { @@ -40,6 +41,31 @@ var MyGradCard = { return false; }, + add_events: function() { + $("#toggle_grad_committees").on("click", function(ev) { + ev.preventDefault(); + $("#grad_committee_reqs").toggleClass("slide-show"); + var card = $(ev.target).closest("[data-type='card']"); + + if ($("#grad_committee_reqs").hasClass("slide-show")) { + $("#toggle_grad_committees").text("HIDE COMMITTEES"); + $("#toggle_grad_committees").attr("title", "Hide Committees"); + $("#grad_committee_reqs").attr("aria-hidden", "false"); + window.myuw_log.log_card(card, "expand"); + } + else { + $("#toggle_grad_committees").text("SHOW COMMITTEES"); + $("#toggle_grad_committees").attr("title", "Expand to show Committees"); + $("#grad_committee_reqs").attr("aria-hidden", "true"); + window.myuw_log.log_card(card, "collapse"); + + setTimeout(function() { + $("#toggle_grad_committees").text("SHOW COMMITTEES"); + }, 700); + } + }); + }, + show_error: function() { MyGradCard.dom_target.html(CardWithError.render("MyGrad")); } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index 4442e9dd14..ab855fcdc0 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -100,16 +100,14 @@
                  {{degree_title}} 
                  {{#if committees }} -
                  Show Committees [insert disclosure here]
                  - -
                  + + {{/if}} From 69b98d88ed43c28690e8aad34e6aafe8e33b2679 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 30 Jul 2015 14:42:03 -0700 Subject: [PATCH 018/116] Resolve MUWM-3186 - approved leave. --- .../grad/file/services/students/v1/api/leave_id_000083856 | 2 +- myuw_mobile/templates/handlebars/card/mygrad.html | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 index 6824a18ec8..cf7f80450f 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 @@ -22,7 +22,7 @@ "quarter":"winter"}]}, {"leaveReason":"Dissertation/Thesis research/writing", "submitDate":"2014-03-31T11:32:48.583", - "status":"paid", + "status":"approved", "quarters":[{"year":2013, "quarter":"autumn"}, {"year":2014, diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index ab855fcdc0..f0e6bd74a8 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -56,7 +56,10 @@
                  Status
                  - {{status}} + {{status}} + {{#equal status 'approved'}} + Pay + {{/equal}}
                  From 4b6e154611e974a0805d1db22b193d4ea405b20c Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 31 Jul 2015 10:31:05 -0700 Subject: [PATCH 019/116] Resolve MUWM-3188 - petition status --- .../students/v1/api/petition_id_000083856 | 23 ++++++++++++++++++- myuw_mobile/static/js/card/mygrad.js | 15 ++++++++++-- .../templates/handlebars/card/mygrad.html | 7 +++++- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 index 849e7a3b99..eda238b529 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 @@ -1,8 +1,29 @@ [ {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2015-03-26T16:32:28.64", - "deptRecommend":"Approve", + "deptRecommend":"Pending", + "gradSchoolDecision":"Pending"}, + + {"description":"Doctoral degree - Extend ten year limit", + "submitDate":"2015-03-26T16:32:28.64", + "deptRecommend":"Withdraw", + "gradSchoolDecision":"Withdraw"}, + + {"description":"Doctoral degree - Extend ten year limit", + "submitDate":"2015-03-26T16:32:28.64", + "deptRecommend":"Deny", + "gradSchoolDecision":"Not approved"}, + + {"description":"Doctoral degree - Extend ten year limit", + "submitDate":"2014-03-26T13:24:58.633", + "deptRecommend":"Deny", "gradSchoolDecision":"Approved"}, + + {"description":"Doctoral degree - Extend ten year limit", + "submitDate":"2014-03-26T13:24:58.633", + "deptRecommend":"Approve", + "gradSchoolDecision":"Pending"}, + {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2014-03-26T13:24:58.633", "deptRecommend":"Approve", diff --git a/myuw_mobile/static/js/card/mygrad.js b/myuw_mobile/static/js/card/mygrad.js index 1eef41720f..44acf42296 100644 --- a/myuw_mobile/static/js/card/mygrad.js +++ b/myuw_mobile/static/js/card/mygrad.js @@ -20,9 +20,20 @@ var MyGradCard = { MyGradCard.dom_target.hide(); return; } + if (mygrad_data.petitions !== null) { + for (var i = 0; i < mygrad_data.petitions.length; i += 1) { + if (mygrad_data.petitions[i].dept_recommend === "Pending" || mygrad_data.petitions[i].dept_recommend === "Withdraw") { + mygrad_data.petitions[i].gradschool_decision = null; + } + if (mygrad_data.petitions[i].gradschool_decision === "Approved") { + mygrad_data.petitions[i].dept_recommend = null; + } + } + } + if (mygrad_data.committees !== null) { - for (var i = 0; i < mygrad_data.committees.length; i += 1) { - var members = mygrad_data.committees[i].members; + for (var k = 0; k < mygrad_data.committees.length; k += 1) { + var members = mygrad_data.committees[k].members; for (var j = 0; j < members.length; j += 1) { if (members[j].member_type === "member") { members[j].member_type = null; diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index f0e6bd74a8..e8ec8ee2b1 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -14,6 +14,7 @@

                  Petition Requests

                  {{description}}
                    + {{#if dept_recommend}}
                  • Department Recommendation @@ -21,7 +22,10 @@
                    {{description}}
                    {{dept_recommend}}
                    -
                  • + + {{/if}} + + {{#if gradschool_decision}}
                  • Graduate School Decision @@ -30,6 +34,7 @@
                    {{description}}
                    {{gradschool_decision}}
                  • + {{/if}}
                  From d31c0e74bdb78da98eba4e3cc593649a893e4cb0 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 31 Jul 2015 10:35:09 -0700 Subject: [PATCH 020/116] added more mock petitions. --- myuw_mobile/test/api/grad.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py index 8b2c376740..ab8509514d 100644 --- a/myuw_mobile/test/api/grad.py +++ b/myuw_mobile/test/api/grad.py @@ -91,7 +91,7 @@ def test_javerage(self): self.assertEqual(leave['terms'][0]['year'], 2012) self.assertIsNotNone(data.get("petitions")) - self.assertEquals(len(data["petitions"]), 2) + self.assertEquals(len(data["petitions"]), 6) petition = data["petitions"][0] self.assertEqual(petition['description'], "Doctoral degree - Extend ten year limit") From f6df89ad60368dd03f3ac34d6b1ee40a6b6e5697 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 31 Jul 2015 10:38:40 -0700 Subject: [PATCH 021/116] update unit-test upon new mock data. --- myuw_mobile/test/api/grad.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py index ab8509514d..2ab83689cc 100644 --- a/myuw_mobile/test/api/grad.py +++ b/myuw_mobile/test/api/grad.py @@ -92,10 +92,10 @@ def test_javerage(self): self.assertIsNotNone(data.get("petitions")) self.assertEquals(len(data["petitions"]), 6) - petition = data["petitions"][0] + petition = data["petitions"][5] self.assertEqual(petition['description'], "Doctoral degree - Extend ten year limit") self.assertEqual(petition['submit_date'], - "2015-03-26T16:32:28") + "2014-03-26T13:24:58") self.assertEqual(petition['dept_recommend'], "Approve") self.assertEqual(petition['gradschool_decision'], "Approved") From bdb337af7a1803406262b9e9770ff65b037dd117 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Fri, 31 Jul 2015 13:16:23 -0700 Subject: [PATCH 022/116] positioning the pay link on approved leave requests --- myuw_mobile/templates/handlebars/card/mygrad.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index e8ec8ee2b1..fa441bec83 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -61,9 +61,11 @@
                  Status
                  - {{status}} + {{status}} {{#equal status 'approved'}} - Pay + + Pay + {{/equal}}
                  From a40025e5d8409b128c9dd97d560cf4d6a13756ee Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Fri, 31 Jul 2015 16:14:57 -0700 Subject: [PATCH 023/116] repositioning request headers --- myuw_mobile/static/css/mobile.less | 2 +- myuw_mobile/templates/handlebars/card/mygrad.html | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 54ea7df0c2..5a528fa1bf 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -629,7 +629,7 @@ body { ul, ol { list-style-type: none; padding-left: 0; } #petition-reqs, #leave-reqs, #degree-reqs { h4 { margin-bottom: 0px; } - h5 { font-weight: bold; margin-top: 0px;} + h5 { font-weight: bold; margin-top: 0px; margin-bottom: 0px; line-height: 1.42857; } } #committee_reqs { h5 { font-weight: bold; } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index fa441bec83..3c8b49c476 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -102,15 +102,15 @@
                  {{degree_title}} 
                  {{/if}} - +
                  {{#if committees }} - -
                  +
                  + {{#if committees }} -
            - {{/if}} - - - - {{#if degrees }} + {{/if}} + + + + {{#if degrees }}

            Degree and Exam Requests

            @@ -95,18 +96,18 @@
            {{degree_title}} 
            {{/each}}
          - {{/if}} - - -
          - -
          -
          - - - {{#if committees }} + {{/if}} + + +
          + +
          +
          + + + {{#if committees }}

        - - {{/if}} - - + {{/if}}
        - {% endtplhandlebars %} From 90d545b1fc9fafbc4eaedb0575653312b39854b6 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 3 Aug 2015 15:45:20 -0700 Subject: [PATCH 027/116] Resolve MUWM-3134 - call api only for graduate student --- myuw_mobile/dao/grad.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/myuw_mobile/dao/grad.py b/myuw_mobile/dao/grad.py index ce5429d63a..74d131543a 100644 --- a/myuw_mobile/dao/grad.py +++ b/myuw_mobile/dao/grad.py @@ -11,6 +11,7 @@ from restclients.grad.petition import get_petition_by_regid from myuw_mobile.logger.logback import log_exception from myuw_mobile.dao.pws import get_regid_of_current_user +from myuw_mobile.dao.gws import is_grad_student logger = logging.getLogger(__name__) @@ -23,7 +24,8 @@ def get_grad_degree_for_current_user(): """ try: - return get_degree_by_regid(get_regid_of_current_user()) + if is_grad_student(): + return get_degree_by_regid(get_regid_of_current_user()) except Exception: log_exception(logger, "get_grad_degree_for_current_user", @@ -38,7 +40,8 @@ def get_grad_committee_for_current_user(): """ try: - return get_committee_by_regid(get_regid_of_current_user()) + if is_grad_student(): + return get_committee_by_regid(get_regid_of_current_user()) except Exception: log_exception(logger, "get_grad_committee_for_current_user", @@ -53,7 +56,8 @@ def get_grad_leave_for_current_user(): """ try: - return get_leave_by_regid(get_regid_of_current_user()) + if is_grad_student(): + return get_leave_by_regid(get_regid_of_current_user()) except Exception: log_exception(logger, "get_grad_leave_for_current_user", @@ -68,7 +72,8 @@ def get_grad_petition_for_current_user(): """ try: - return get_petition_by_regid(get_regid_of_current_user()) + if is_grad_student(): + return get_petition_by_regid(get_regid_of_current_user()) except Exception: log_exception(logger, "get_grad_petition_for_current_user", @@ -77,10 +82,6 @@ def get_grad_petition_for_current_user(): def get_json(degree, committee, leave, petition): - if degree is None and committee is None and\ - leave is None and petition is None: - return None - return { "degrees": json_data(degree), "committees": json_data(committee), From 36122a91c0da456439a3773ce5366f75a898eb96 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 3 Aug 2015 15:50:12 -0700 Subject: [PATCH 028/116] Return non-error value if not a grad student. --- myuw_mobile/dao/grad.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/myuw_mobile/dao/grad.py b/myuw_mobile/dao/grad.py index 74d131543a..1e2d17bdef 100644 --- a/myuw_mobile/dao/grad.py +++ b/myuw_mobile/dao/grad.py @@ -26,6 +26,7 @@ def get_grad_degree_for_current_user(): try: if is_grad_student(): return get_degree_by_regid(get_regid_of_current_user()) + return [] # not an error except Exception: log_exception(logger, "get_grad_degree_for_current_user", @@ -42,6 +43,7 @@ def get_grad_committee_for_current_user(): try: if is_grad_student(): return get_committee_by_regid(get_regid_of_current_user()) + return [] # not an error except Exception: log_exception(logger, "get_grad_committee_for_current_user", @@ -58,6 +60,7 @@ def get_grad_leave_for_current_user(): try: if is_grad_student(): return get_leave_by_regid(get_regid_of_current_user()) + return [] # not an error except Exception: log_exception(logger, "get_grad_leave_for_current_user", @@ -74,6 +77,7 @@ def get_grad_petition_for_current_user(): try: if is_grad_student(): return get_petition_by_regid(get_regid_of_current_user()) + return [] # not an error except Exception: log_exception(logger, "get_grad_petition_for_current_user", From d4e77872c900ebfe35436589ef44b41c893e0ca9 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 3 Aug 2015 16:05:19 -0700 Subject: [PATCH 029/116] Made javerage, jinter, eight graguate students. --- .../api/committee_id_12345678_status_active | 77 +++++++++++++++++++ .../students/v1/api/leave_id_12345678 | 1 + .../students/v1/api/petition_id_12345678 | 1 + ...uest_id_12345678_exclude_past_quarter_true | 1 + .../effective_member/eight | 15 ++++ .../effective_member/javerage | 14 ++++ .../effective_member/jinter | 14 ++++ .../12345678901234567890123456789012.json | 2 +- 8 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_12345678 create mode 100644 myuw_mobile/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true create mode 100644 myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/eight create mode 100644 myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/javerage create mode 100644 myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jinter diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active new file mode 100644 index 0000000000..599b17f593 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active @@ -0,0 +1,77 @@ +[ + {"committeeType":"Advisor", + "dept":"Anthropology", + "degreeType":"Master Of Public Health (Epidemiology)", + "majorFullName":"ANTH", + "status":"active", + "startDate":"2012-12-07T08:26:14.77", + "endDate":null, + "members":[{"nameFirst":"Bet", + "nameLast":"Duncan", + "memberType":"member", + "status":"active", + "dept":"Anthropology", + "email":"bbb@u.washington.edu"} + ] + }, + {"committeeType":"Master's Committee", + "dept":"Epidemiology - Public Health", + "degreeType":"Master Of Public Health (Epidemiology)", + "majorFullName":"EPI", + "status":"active", + "startDate":"2012-11-14T00:00:00", + "endDate":null, + "members":[{"nameFirst":"Nina L.", + "nameLast":"Fitzpatrick", + "memberType":"chair", + "status":"active", + "dept":"Epidemiology - Public Health", + "email":"nnn@u.washington.edu"}, + {"nameFirst":"Louis", + "nameLast":"ReVivian", + "memberType":"member", + "status":"active", + "dept":"Ministry of Health, Peru", + "email":"lll@oge.sld.pe"}, + {"nameFirst":"Bet", + "nameLast":"Shell-Duncan", + "memberType":"member", + "status":"active", + "dept":"Anthropology", + "email":"bbb@u.washington.edu"} + ] + }, + {"committeeType":"Doctoral Supervisory Committee", + "dept":"Anthropology", + "degreeType":"Doctor Of Philosophy (Anthropology)", + "majorFullName":"ANTH", + "status":"active", + "startDate":"2013-06-07T00:00:00", + "endDate":null, + "members":[{"nameFirst":"Bet", + "nameLast":"Duncan", + "memberType":"chair", + "status":"active", + "dept":"Anthropology", + "email":"bbb@u.washington.edu"}, + {"nameFirst":"Malinda", + "nameLast":"Korry", + "memberType":"gsr", + "status":"active", + "dept":"Health Services - Public Health", + "email":""}, + {"nameFirst":"Steve M.", + "nameLast":"Goodman", + "memberType":"chair", + "status":"active", + "dept":"Anthropology", + "email":"sss@u.washington.edu"}, + {"nameFirst":"James T.", + "nameLast":"Pfeiffer", + "memberType":"member", + "status":"active", + "dept":"Global Health", + "email":"jjj@uw.edu"} + ] + } +] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 @@ -0,0 +1 @@ +[] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_12345678 b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_12345678 new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_12345678 @@ -0,0 +1 @@ +[] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true @@ -0,0 +1 @@ +[] diff --git a/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/eight b/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/eight new file mode 100644 index 0000000000..5509983ec4 --- /dev/null +++ b/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/eight @@ -0,0 +1,15 @@ + + + + + + +
        + eight + +
        +
        {status}
        + + diff --git a/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/javerage b/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/javerage new file mode 100644 index 0000000000..5aa68a8225 --- /dev/null +++ b/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/javerage @@ -0,0 +1,14 @@ + + + + + +
        + javerage + +
        +
        {status}
        + + diff --git a/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jinter b/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jinter new file mode 100644 index 0000000000..1bc1c59ee7 --- /dev/null +++ b/myuw_mobile/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jinter @@ -0,0 +1,14 @@ + + + + + +
        + jinter + +
        +
        {status}
        + + diff --git a/myuw_mobile/resources/sws/file/student/v5/person/12345678901234567890123456789012.json b/myuw_mobile/resources/sws/file/student/v5/person/12345678901234567890123456789012.json index 277b51c64a..9db189023c 100644 --- a/myuw_mobile/resources/sws/file/student/v5/person/12345678901234567890123456789012.json +++ b/myuw_mobile/resources/sws/file/student/v5/person/12345678901234567890123456789012.json @@ -28,7 +28,7 @@ "Resident":null, "StudentName":"Hightower,Evelyn Marie", "StudentNumber":"1443336", -"StudentSystemKey":"000083857", +"StudentSystemKey":"12345678", "TestScore":{"Href":"\/student\/v5\/testscore\/12345678901234567890123456789012.json", "RegID":"12345678901234567890123456789012"}, "UWNetID":"eight", From 3729abe6434848d6a5089fd167b5e7b4fa499222 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 3 Aug 2015 16:09:58 -0700 Subject: [PATCH 030/116] Made MyGrad card appears after Course cards and before HFS card. --- myuw_mobile/static/js/landing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/static/js/landing.js b/myuw_mobile/static/js/landing.js index a435d56782..b8bc3aac1e 100644 --- a/myuw_mobile/static/js/landing.js +++ b/myuw_mobile/static/js/landing.js @@ -28,11 +28,11 @@ var Landing = { VisualScheduleCard, TextbookCard, CourseCard, + MyGradCard, HfsCard, TuitionCard, CriticalInfoCard, InternationalStuCard, - MyGradCard, LibraryCard, AcademicCard, EventsCard, From 3a6aee1af45d3c51576730470a0d8e88cf393584 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Mon, 3 Aug 2015 16:17:34 -0700 Subject: [PATCH 031/116] apply new style to committe header too --- myuw_mobile/static/css/mobile.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index ad8234946b..aa3982a46f 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -627,7 +627,7 @@ body { // graduate student content card div#MyGradCard { ul, ol { list-style-type: none; padding-left: 0; } - #petition-reqs, #leave-reqs, #degree-reqs { + #petition-reqs, #leave-reqs, #degree-reqs, #grad_committee_reqs { h4 { margin-bottom: 0px; color: #85754d; font-family: "Roboto",sans-serif; font-size: 16px; From 057b46302b3d545ba030783674f7cc90ba4546be Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 4 Aug 2015 10:45:32 -0700 Subject: [PATCH 032/116] Resolve MUWM-3204 - No disclosure if on committee presents. --- myuw_mobile/static/js/card/mygrad.js | 4 +++ .../templates/handlebars/card/mygrad.html | 31 ++++++++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/myuw_mobile/static/js/card/mygrad.js b/myuw_mobile/static/js/card/mygrad.js index 53035e63e0..7cd2f077b7 100644 --- a/myuw_mobile/static/js/card/mygrad.js +++ b/myuw_mobile/static/js/card/mygrad.js @@ -20,6 +20,7 @@ var MyGradCard = { MyGradCard.dom_target.hide(); return; } + if (mygrad_data.petitions !== null) { for (var i = 0; i < mygrad_data.petitions.length; i += 1) { if (mygrad_data.petitions[i].dept_recommend === "Pending" || mygrad_data.petitions[i].dept_recommend === "Withdraw") { @@ -32,6 +33,9 @@ var MyGradCard = { } if (mygrad_data.committees !== null) { + if (!mygrad_data.degrees && !mygrad_data.leaves && !mygrad_data.petitions) { + mygrad_data.has_only_committee = true; + } for (var k = 0; k < mygrad_data.committees.length; k += 1) { var members = mygrad_data.committees[k].members; for (var j = 0; j < members.length; j += 1) { diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index c315d709ba..2bb106a489 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -2,7 +2,9 @@ {% tplhandlebars "mygrad_card_content" %}
        -

        Graduate Status

        + {{#unless has_only_committee}} +

        Graduate Status

        + {{/unless}} {{#if petitions }} @@ -99,18 +101,22 @@
        {{degree_title}} 
        {{/if}} + {{#unless has_only_committee}}
        - + {{/unless}} {{#if committees }} - {% endtplhandlebars %} From 436866222d0227b5c89322f6a3f758580b33bbdb Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Tue, 4 Aug 2015 11:25:21 -0700 Subject: [PATCH 033/116] add placeholder link to leave history --- myuw_mobile/templates/handlebars/card/mygrad.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index c315d709ba..28f0d0781f 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -75,6 +75,13 @@
      {{/if}} + +
      + From db466af27a92a8927abac80cfbbb2c56b9ca3c33 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Tue, 4 Aug 2015 15:37:26 -0700 Subject: [PATCH 034/116] add label and value styles back --- myuw_mobile/static/css/mobile.less | 10 ++++-- .../templates/handlebars/card/mygrad.html | 35 ++++++++++--------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index aa3982a46f..095f2c0170 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -633,8 +633,14 @@ body { font-size: 16px; font-weight: 500; margin-bottom: 0.5em; - margin-top: 1.5em;} - h5 { font-weight: bold; margin-top: 0px; margin-bottom: 0px; line-height: 1.42857; } + margin-top: 1.5em; + } + h5 { color: #444444 !important; + font-family: "Roboto",sans-serif; + font-size: 16px !important; + font-weight: 400; + margin-top: 5px; + text-transform: uppercase; } } #committee_reqs { h5 { font-weight: bold; } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index 461f9a7bc3..bc3cdc96f6 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -57,32 +57,30 @@

      Leave Requests

    • - {{reason}} 
      - {{#each terms}}{{#not_first @index}}, {{/not_first}}{{quarter}} {{year}}{{/each}} + {{#each terms}}{{#not_first @index}}, {{/not_first}}{{quarter}} {{year}}{{/each}} Leave
      -
      +
      Status -
      -
      - {{status}} - {{#equal status 'approved'}} - - Pay - - {{/equal}} -
      +
      +
      + {{status}} + {{#equal status 'approved'}} +
      Pay Your Fee + {{/equal}}
      +
    • {{/each}}
    - {{/if}}
    + {{/if}} + @@ -95,10 +93,15 @@

    Degree and Exam Requests

    {{ #each degrees}}
  • -
    {{degree_title}} 
    +
    {{req_type}}, {{target_award_quarter}} {{target_award_year}}
    - {{target_award_quarter}} {{target_award_year}}
    - {{status}} +
    {{degree_title}}
    +
    + Status +
    +
    + {{status}} +
  • From 8b985d409f51c451960a5b95be11a3f721596e27 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Tue, 4 Aug 2015 16:14:37 -0700 Subject: [PATCH 035/116] finalize link text and location for pay your fee --- myuw_mobile/static/css/mobile.less | 2 +- myuw_mobile/templates/handlebars/card/mygrad.html | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 095f2c0170..49b0e8790c 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -639,7 +639,7 @@ body { font-family: "Roboto",sans-serif; font-size: 16px !important; font-weight: 400; - margin-top: 5px; + margin-top: 0px; text-transform: uppercase; } } #committee_reqs { diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index bc3cdc96f6..90a8052453 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -65,7 +65,7 @@
    {{status}} {{#equal status 'approved'}} -
    Pay Your Fee +
    Pay Your Fee {{/equal}}
    @@ -73,12 +73,6 @@
    {{/each}} - -
    {{/if}} From 79f099d7405a2059a05c9d8b29ba61e8fb9d63ca Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 4 Aug 2015 17:09:34 -0700 Subject: [PATCH 036/116] Update URLs. --- myuw_mobile/templates/handlebars/card/mygrad.html | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index bc3cdc96f6..081c635761 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -65,7 +65,7 @@
    {{status}} {{#equal status 'approved'}} -
    Pay Your Fee +
    Pay Your Fee {{/equal}}
    @@ -75,13 +75,11 @@

    {{/if}} - - @@ -114,7 +112,7 @@
    {{req_type}}, {{target_award_quarter}} {{target_award_year}}
    {{#unless has_only_committee}}
    @@ -153,7 +151,7 @@
    {{committee_type}}
    {{#if has_only_committee}} {{/if}} From 6d41f14f57b733e8624838aa10dfdba6632aee49 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Fri, 7 Aug 2015 12:43:56 -0700 Subject: [PATCH 037/116] resize width of label so it wraps --- myuw_mobile/static/css/mobile.less | 2 +- myuw_mobile/templates/handlebars/card/mygrad.html | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 49b0e8790c..11d3ebaf85 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -650,7 +650,7 @@ body { li.committee-member { padding-bottom: 8px; } } .card-badge-value { font-size: 14px; } - .card-badge-label { font-weight: normal; } + .card-badge-label { font-weight: normal; width: 11em; padding-bottom: 5px; } } diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/mygrad.html index 52bc0dc1e8..de20b3974b 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/mygrad.html @@ -66,7 +66,8 @@
    {{status}} {{#equal status 'approved'}}
    Pay Your Fee - {{/equal}}
    + {{/equal}} +

  • From 5f2a4b7b0c68bc1832c94acc8b93b285c22bfe6a Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 7 Aug 2015 15:23:41 -0700 Subject: [PATCH 038/116] Resolve MUWM-3204 - upon 8/5 spec changes --- ...est_id_000083856_exclude_past_quarter_true | 17 +++- myuw_mobile/static/js/card/grad_committee.js | 46 ++++++++++ myuw_mobile/static/js/card/grad_status.js | 48 ++++++++++ myuw_mobile/static/js/card/mygrad.js | 88 ------------------- myuw_mobile/static/js/handlebars-helpers.js | 8 ++ myuw_mobile/static/js/landing.js | 3 +- myuw_mobile/templates/base_mobile.html | 3 +- .../handlebars/card/grad_committee.html | 31 +++++++ .../card/{mygrad.html => grad_status.html} | 59 +++---------- myuw_mobile/templates/index.html | 3 +- myuw_mobile/test/api/grad.py | 2 +- 11 files changed, 166 insertions(+), 142 deletions(-) create mode 100644 myuw_mobile/static/js/card/grad_committee.js create mode 100644 myuw_mobile/static/js/card/grad_status.js delete mode 100644 myuw_mobile/static/js/card/mygrad.js create mode 100644 myuw_mobile/templates/handlebars/card/grad_committee.html rename myuw_mobile/templates/handlebars/card/{mygrad.html => grad_status.html} (64%) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true index 1837951293..c338e8514c 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true @@ -58,5 +58,20 @@ "major":"L ARCH", "pathway":0, "degreeLevel":2, - "degreeType":7} + "degreeType":7}, + {"syskey":83856, + "requestId":100794, + "requestType":"Masters Request", + "degreeTitle":"Master Of Science In Construction Management", + "status":"Did not graduate", + "examPlace":null, + "examDate":null, + "targetAwardYear":2015, + "targetAwardQuarter":"winter", + "requestSubmitDate":"2015-01-14T14:15:04.74", + "major":"CONMGT", + "majorFullName":"Construction Management,Evening Deg Prog", + "pathway":0, + "degreeLevel":2, + "degreeType":6} ] diff --git a/myuw_mobile/static/js/card/grad_committee.js b/myuw_mobile/static/js/card/grad_committee.js new file mode 100644 index 0000000000..1c45592cbf --- /dev/null +++ b/myuw_mobile/static/js/card/grad_committee.js @@ -0,0 +1,46 @@ +var GradCommitteeCard = { + name: 'GradCommitteeCard', + dom_target: undefined, + + render_init: function() { + WSData.fetch_mygrad_data(GradCommitteeCard.render_upon_data, GradCommitteeCard.show_error); + }, + + render_upon_data: function() { + if (!GradCommitteeCard._has_all_data()) { + return; + } + GradCommitteeCard._render(WSData.mygrad_data()); + }, + + _render: function (mygrad_data) { + var source = $("#gradcommittee_card_content").html(); + var template = Handlebars.compile(source); + if (!mygrad_data.committees) { + GradCommitteeCard.dom_target.hide(); + return; + } + + for (var k = 0; k < mygrad_data.committees.length; k += 1) { + var members = mygrad_data.committees[k].members; + for (var j = 0; j < members.length; j += 1) { + if (members[j].member_type === "member") { + members[j].member_type = null; + } + } + } + GradCommitteeCard.dom_target.html(template(mygrad_data)); + }, + + _has_all_data: function () { + if (WSData.mygrad_data()) { + return true; + } + return false; + }, + + show_error: function() { + GradCommitteeCard.dom_target.html(CardWithError.render("GradCommittee")); + } + +}; diff --git a/myuw_mobile/static/js/card/grad_status.js b/myuw_mobile/static/js/card/grad_status.js new file mode 100644 index 0000000000..3ac499e852 --- /dev/null +++ b/myuw_mobile/static/js/card/grad_status.js @@ -0,0 +1,48 @@ +var GradStatusCard = { + name: 'GradStatusCard', + dom_target: undefined, + + render_init: function() { + WSData.fetch_mygrad_data(GradStatusCard.render_upon_data, GradStatusCard.show_error); + }, + + render_upon_data: function() { + if (!GradStatusCard._has_all_data()) { + return; + } + GradStatusCard._render(WSData.mygrad_data()); + }, + + _render: function (mygrad_data) { + var source = $("#gradstatus_card_content").html(); + var template = Handlebars.compile(source); + if (!mygrad_data.degrees && !mygrad_data.leaves && !mygrad_data.petitions) { + GradStatusCard.dom_target.hide(); + return; + } + + if (mygrad_data.petitions !== null) { + for (var i = 0; i < mygrad_data.petitions.length; i += 1) { + if (mygrad_data.petitions[i].dept_recommend === "Pending" || mygrad_data.petitions[i].dept_recommend === "Withdraw") { + mygrad_data.petitions[i].gradschool_decision = null; + } + if (mygrad_data.petitions[i].gradschool_decision === "Approved") { + mygrad_data.petitions[i].dept_recommend = null; + } + } + } + GradStatusCard.dom_target.html(template(mygrad_data)); + }, + + _has_all_data: function () { + if (WSData.mygrad_data()) { + return true; + } + return false; + }, + + show_error: function() { + GradStatusCard.dom_target.html(CardWithError.render("GradStatus")); + } + +}; diff --git a/myuw_mobile/static/js/card/mygrad.js b/myuw_mobile/static/js/card/mygrad.js deleted file mode 100644 index 7cd2f077b7..0000000000 --- a/myuw_mobile/static/js/card/mygrad.js +++ /dev/null @@ -1,88 +0,0 @@ -var MyGradCard = { - name: 'MyGradCard', - dom_target: undefined, - - render_init: function() { - WSData.fetch_mygrad_data(MyGradCard.render_upon_data, MyGradCard.show_error); - }, - - render_upon_data: function() { - if (!MyGradCard._has_all_data()) { - return; - } - MyGradCard._render(WSData.mygrad_data()); - }, - - _render: function (mygrad_data) { - var source = $("#mygrad_card_content").html(); - var template = Handlebars.compile(source); - if (!mygrad_data.degrees && !mygrad_data.committees && !mygrad_data.leaves && !mygrad_data.petitions) { - MyGradCard.dom_target.hide(); - return; - } - - if (mygrad_data.petitions !== null) { - for (var i = 0; i < mygrad_data.petitions.length; i += 1) { - if (mygrad_data.petitions[i].dept_recommend === "Pending" || mygrad_data.petitions[i].dept_recommend === "Withdraw") { - mygrad_data.petitions[i].gradschool_decision = null; - } - if (mygrad_data.petitions[i].gradschool_decision === "Approved") { - mygrad_data.petitions[i].dept_recommend = null; - } - } - } - - if (mygrad_data.committees !== null) { - if (!mygrad_data.degrees && !mygrad_data.leaves && !mygrad_data.petitions) { - mygrad_data.has_only_committee = true; - } - for (var k = 0; k < mygrad_data.committees.length; k += 1) { - var members = mygrad_data.committees[k].members; - for (var j = 0; j < members.length; j += 1) { - if (members[j].member_type === "member") { - members[j].member_type = null; - } - } - } - } - MyGradCard.dom_target.html(template(mygrad_data)); - MyGradCard.add_events(); - }, - - _has_all_data: function () { - if (WSData.mygrad_data()) { - return true; - } - return false; - }, - - add_events: function() { - $("#toggle_grad_committees").on("click", function(ev) { - ev.preventDefault(); - $("#grad_committee_reqs").toggleClass("slide-show"); - var card = "MyGradCard"; - - if ($("#grad_committee_reqs").hasClass("slide-show")) { - $("#toggle_grad_committees").text("HIDE COMMITTEES"); - $("#toggle_grad_committees").attr("title", "Hide Committees"); - $("#grad_committee_reqs").attr("aria-hidden", "false"); - window.myuw_log.log_card(card, "expand committees"); - } - else { - $("#toggle_grad_committees").text("SHOW COMMITTEES"); - $("#toggle_grad_committees").attr("title", "Expand to show Committees"); - $("#grad_committee_reqs").attr("aria-hidden", "true"); - window.myuw_log.log_card(card, "collapse committees"); - - setTimeout(function() { - $("#toggle_grad_committees").text("SHOW COMMITTEES"); - }, 700); - } - }); - }, - - show_error: function() { - MyGradCard.dom_target.html(CardWithError.render("MyGrad")); - } - -}; diff --git a/myuw_mobile/static/js/handlebars-helpers.js b/myuw_mobile/static/js/handlebars-helpers.js index 4d21318099..2202fe1932 100644 --- a/myuw_mobile/static/js/handlebars-helpers.js +++ b/myuw_mobile/static/js/handlebars-helpers.js @@ -382,3 +382,11 @@ Handlebars.registerHelper('not_first', function(index, block) { return block.fn(this); } }); + +Handlebars.registerHelper('not_equal', function(obj, value, block) { + if (arguments.length < 3) + throw new Error("Handlebars Helper not_equal needs 2 parameters"); + if(obj != value) { + return block.fn(this); + } +}); \ No newline at end of file diff --git a/myuw_mobile/static/js/landing.js b/myuw_mobile/static/js/landing.js index b8bc3aac1e..ab403d3534 100644 --- a/myuw_mobile/static/js/landing.js +++ b/myuw_mobile/static/js/landing.js @@ -28,7 +28,7 @@ var Landing = { VisualScheduleCard, TextbookCard, CourseCard, - MyGradCard, + GradStatusCard, HfsCard, TuitionCard, CriticalInfoCard, @@ -36,6 +36,7 @@ var Landing = { LibraryCard, AcademicCard, EventsCard, + GradCommitteeCard, FutureQuarterCard1, SummerRegStatusCard1 ]; diff --git a/myuw_mobile/templates/base_mobile.html b/myuw_mobile/templates/base_mobile.html index 62e877e841..db624b2107 100644 --- a/myuw_mobile/templates/base_mobile.html +++ b/myuw_mobile/templates/base_mobile.html @@ -174,7 +174,8 @@

    Categorized Resources

    - + + diff --git a/myuw_mobile/templates/handlebars/card/grad_committee.html b/myuw_mobile/templates/handlebars/card/grad_committee.html new file mode 100644 index 0000000000..4a14627ec5 --- /dev/null +++ b/myuw_mobile/templates/handlebars/card/grad_committee.html @@ -0,0 +1,31 @@ +{% load templatetag_handlebars %} + {% tplhandlebars "gradcommittee_card_content" %} + +
    +

    Your Committees

    +
    +
      + {{ #each committees}} +
    • +
      {{committee_type}}
      +
        + {{ #each members}} +
      1. + {{first_name}} {{last_name}}{{#if member_type}}, {{member_type}}{{/if}} + {{dept}} + {{email}} +
      2. + {{/each}} +
      +
    • + {{/each}} +
    +
    +
    + +
    +
    +
    + {% endtplhandlebars %} diff --git a/myuw_mobile/templates/handlebars/card/mygrad.html b/myuw_mobile/templates/handlebars/card/grad_status.html similarity index 64% rename from myuw_mobile/templates/handlebars/card/mygrad.html rename to myuw_mobile/templates/handlebars/card/grad_status.html index 52bc0dc1e8..940b1c5d43 100644 --- a/myuw_mobile/templates/handlebars/card/mygrad.html +++ b/myuw_mobile/templates/handlebars/card/grad_status.html @@ -1,10 +1,8 @@ {% load templatetag_handlebars %} - {% tplhandlebars "mygrad_card_content" %} + {% tplhandlebars "gradstatus_card_content" %}
    - {{#unless has_only_committee}} -

    Graduate Status

    - {{/unless}} +

    Graduate Status

    {{#if petitions }} @@ -63,10 +61,14 @@
    Status
    - {{status}} - {{#equal status 'approved'}} -
    Pay Your Fee - {{/equal}}
    + + {{#not_equal status 'approved'}} + {{status}} + {{/not_equal}} + {{#equal status 'approved'}} + Pay Your Fee + {{/equal}} +
    @@ -103,52 +105,11 @@
    {{req_type}}, {{target_award_quarter}} {{target_award_year}}
    {{/if}} - {{#unless has_only_committee}}
    - {{/unless}} - - {{#if committees }} - {{#if has_only_committee}} -

    Your Committees

    - {{else}} - - {{#unless has_only_committee}} - - {{/unless}} - {{#if has_only_committee}} -
    - -
    - {{/if}} - {{/if}} {% endtplhandlebars %} diff --git a/myuw_mobile/templates/index.html b/myuw_mobile/templates/index.html index 34f77cf58e..c09ec256c8 100644 --- a/myuw_mobile/templates/index.html +++ b/myuw_mobile/templates/index.html @@ -15,7 +15,8 @@ {% include "handlebars/card/grade.html" %} {% include "handlebars/card/hfs.html" %} {% include "handlebars/card/library.html" %} - {% include "handlebars/card/mygrad.html" %} + {% include "handlebars/card/grad_status.html" %} + {% include "handlebars/card/grad_committee.html" %} {% include "handlebars/card/loading.html" %} {% include "handlebars/card/no_course.html" %} {% include "handlebars/card/pce_tuition.html" %} diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py index 2ab83689cc..c9b80d9fe5 100644 --- a/myuw_mobile/test/api/grad.py +++ b/myuw_mobile/test/api/grad.py @@ -48,7 +48,7 @@ def test_javerage(self): data = json.loads(response.content) self.assertIsNotNone(data.get("degrees")) - self.assertEquals(len(data["degrees"]), 4) + self.assertEquals(len(data["degrees"]), 5) degree = data["degrees"][0] self.assertEqual(degree["req_type"], "Masters Request") self.assertEqual(degree["submit_date"], "2015-03-11T20:53:32") From e80b912078b2e30145870cfdff9dc513692b72b6 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 7 Aug 2015 15:51:41 -0700 Subject: [PATCH 039/116] Add committee readingType attribute --- .../students/v1/api/committee_id_000083856_status_active | 8 ++++++++ .../students/v1/api/committee_id_12345678_status_active | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active index 599b17f593..3565815bdf 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active @@ -9,6 +9,7 @@ "members":[{"nameFirst":"Bet", "nameLast":"Duncan", "memberType":"member", + "readingType":null, "status":"active", "dept":"Anthropology", "email":"bbb@u.washington.edu"} @@ -24,18 +25,21 @@ "members":[{"nameFirst":"Nina L.", "nameLast":"Fitzpatrick", "memberType":"chair", + "readingType":null, "status":"active", "dept":"Epidemiology - Public Health", "email":"nnn@u.washington.edu"}, {"nameFirst":"Louis", "nameLast":"ReVivian", "memberType":"member", + "readingType":null, "status":"active", "dept":"Ministry of Health, Peru", "email":"lll@oge.sld.pe"}, {"nameFirst":"Bet", "nameLast":"Shell-Duncan", "memberType":"member", + "readingType":null, "status":"active", "dept":"Anthropology", "email":"bbb@u.washington.edu"} @@ -51,24 +55,28 @@ "members":[{"nameFirst":"Bet", "nameLast":"Duncan", "memberType":"chair", + "readingType":"chair", "status":"active", "dept":"Anthropology", "email":"bbb@u.washington.edu"}, {"nameFirst":"Malinda", "nameLast":"Korry", "memberType":"gsr", + "readingType":null, "status":"active", "dept":"Health Services - Public Health", "email":""}, {"nameFirst":"Steve M.", "nameLast":"Goodman", "memberType":"chair", + "readingType":null, "status":"active", "dept":"Anthropology", "email":"sss@u.washington.edu"}, {"nameFirst":"James T.", "nameLast":"Pfeiffer", "memberType":"member", + "readingType":null, "status":"active", "dept":"Global Health", "email":"jjj@uw.edu"} diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active index 599b17f593..d322e74687 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active @@ -9,6 +9,7 @@ "members":[{"nameFirst":"Bet", "nameLast":"Duncan", "memberType":"member", + "readingType":null, "status":"active", "dept":"Anthropology", "email":"bbb@u.washington.edu"} @@ -24,18 +25,21 @@ "members":[{"nameFirst":"Nina L.", "nameLast":"Fitzpatrick", "memberType":"chair", + "readingType":"chair", "status":"active", "dept":"Epidemiology - Public Health", "email":"nnn@u.washington.edu"}, {"nameFirst":"Louis", "nameLast":"ReVivian", "memberType":"member", + "readingType":"member", "status":"active", "dept":"Ministry of Health, Peru", "email":"lll@oge.sld.pe"}, {"nameFirst":"Bet", "nameLast":"Shell-Duncan", "memberType":"member", + "readingType":"member", "status":"active", "dept":"Anthropology", "email":"bbb@u.washington.edu"} @@ -51,24 +55,28 @@ "members":[{"nameFirst":"Bet", "nameLast":"Duncan", "memberType":"chair", + "readingType":null, "status":"active", "dept":"Anthropology", "email":"bbb@u.washington.edu"}, {"nameFirst":"Malinda", "nameLast":"Korry", "memberType":"gsr", + "readingType":"chair", "status":"active", "dept":"Health Services - Public Health", "email":""}, {"nameFirst":"Steve M.", "nameLast":"Goodman", "memberType":"chair", + "readingType":"member", "status":"active", "dept":"Anthropology", "email":"sss@u.washington.edu"}, {"nameFirst":"James T.", "nameLast":"Pfeiffer", "memberType":"member", + "readingType":"member", "status":"active", "dept":"Global Health", "email":"jjj@uw.edu"} From 6b794de189003da8b8ecc966f650c6f7f0d4d414 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Fri, 7 Aug 2015 16:58:06 -0700 Subject: [PATCH 040/116] fix nesting so styles work again after new div ID created --- myuw_mobile/static/css/mobile.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 7d97223045..b91c934192 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -625,7 +625,7 @@ body { // graduate student content card - div#MyGradCard { + div#GradStatusCard { ul, ol { list-style-type: none; padding-left: 0; } #petition-reqs, #leave-reqs, #degree-reqs, #grad_committee_reqs { h4 { margin-bottom: 0px; color: #85754d; From c26d04cc1bb4ccdcb8cad20826bc067400687d06 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 7 Aug 2015 17:04:12 -0700 Subject: [PATCH 041/116] include reading_type on grad committee. --- myuw_mobile/templates/handlebars/card/grad_committee.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/myuw_mobile/templates/handlebars/card/grad_committee.html b/myuw_mobile/templates/handlebars/card/grad_committee.html index 4a14627ec5..74eba142a3 100644 --- a/myuw_mobile/templates/handlebars/card/grad_committee.html +++ b/myuw_mobile/templates/handlebars/card/grad_committee.html @@ -11,7 +11,9 @@
    {{committee_type}}
      {{ #each members}}
    1. - {{first_name}} {{last_name}}{{#if member_type}}, {{member_type}}{{/if}} + {{first_name}} {{last_name}}{{#if member_type}}, + {{member_type}}{{/if}} {{#if reading_type}}, + reading_type:{{reading_type}}{{/if}} {{dept}} {{email}}
    2. From 57bcc72ea7fc2531e03d94d29a7984045db96d04 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Mon, 10 Aug 2015 10:00:41 -0700 Subject: [PATCH 042/116] fixing nesting for new grad committees card --- myuw_mobile/static/css/mobile.less | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index b91c934192..1616a1307c 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -625,9 +625,9 @@ body { // graduate student content card - div#GradStatusCard { + div#GradStatusCard, div#GradCommitteeCard { ul, ol { list-style-type: none; padding-left: 0; } - #petition-reqs, #leave-reqs, #degree-reqs, #grad_committee_reqs { + #petition-reqs, #leave-reqs, #degree-reqs, #committee-reqs { h4 { margin-bottom: 0px; color: #85754d; font-family: "Roboto",sans-serif; font-size: 16px; @@ -642,8 +642,8 @@ body { margin-top: 0px; text-transform: uppercase; } } - #committee_reqs { - h5 { font-weight: bold; } + #committee-reqs { + h5 { margin-top: 10px; } ul.card-list ul { padding-bottom: 10px; } From 8283eb30bc51416fa94777ef8c92a53484a6fc5d Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Tue, 11 Aug 2015 14:05:35 -0700 Subject: [PATCH 043/116] slight fix to reading committee status --- myuw_mobile/templates/handlebars/card/grad_committee.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/myuw_mobile/templates/handlebars/card/grad_committee.html b/myuw_mobile/templates/handlebars/card/grad_committee.html index 74eba142a3..0dcf294722 100644 --- a/myuw_mobile/templates/handlebars/card/grad_committee.html +++ b/myuw_mobile/templates/handlebars/card/grad_committee.html @@ -12,8 +12,7 @@
      {{committee_type}}
      {{ #each members}}
    3. {{first_name}} {{last_name}}{{#if member_type}}, - {{member_type}}{{/if}} {{#if reading_type}}, - reading_type:{{reading_type}}{{/if}} + {{member_type}}{{/if}}{{#if reading_type}}, reading_type:{{reading_type}}{{/if}} {{dept}} {{email}}
    4. From 037cabfe9bcdd7b8c268888fa5a7a7e1d8b122f5 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Tue, 11 Aug 2015 14:20:20 -0700 Subject: [PATCH 044/116] minor fixes to committee list and statuses on degree requests --- myuw_mobile/templates/handlebars/card/grad_committee.html | 4 ++-- myuw_mobile/templates/handlebars/card/grad_status.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/myuw_mobile/templates/handlebars/card/grad_committee.html b/myuw_mobile/templates/handlebars/card/grad_committee.html index 0dcf294722..a091834e48 100644 --- a/myuw_mobile/templates/handlebars/card/grad_committee.html +++ b/myuw_mobile/templates/handlebars/card/grad_committee.html @@ -13,8 +13,8 @@
      {{committee_type}}
    5. {{first_name}} {{last_name}}{{#if member_type}}, {{member_type}}{{/if}}{{#if reading_type}}, reading_type:{{reading_type}}{{/if}} - {{dept}} - {{email}} + {{if dept}}{{dept}}{{/if}} + {{if email}}{{email}}{{/if}}
    6. {{/each}}
    diff --git a/myuw_mobile/templates/handlebars/card/grad_status.html b/myuw_mobile/templates/handlebars/card/grad_status.html index 940b1c5d43..94e266d1d0 100644 --- a/myuw_mobile/templates/handlebars/card/grad_status.html +++ b/myuw_mobile/templates/handlebars/card/grad_status.html @@ -66,7 +66,7 @@
    {{status}} {{/not_equal}} {{#equal status 'approved'}} - Pay Your Fee + Approved.   Pay Your Fee To Confirm {{/equal}} @@ -93,7 +93,7 @@
    {{req_type}}, {{target_award_quarter}} {{target_award_year}}
    Status
    -
    +
    {{status}}
    From 9911608c29b12f4148a614496847c6b7fa06332d Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Tue, 11 Aug 2015 14:32:47 -0700 Subject: [PATCH 045/116] fixing a dumb mistake on committees --- myuw_mobile/templates/handlebars/card/grad_committee.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/myuw_mobile/templates/handlebars/card/grad_committee.html b/myuw_mobile/templates/handlebars/card/grad_committee.html index a091834e48..3f3f83eb65 100644 --- a/myuw_mobile/templates/handlebars/card/grad_committee.html +++ b/myuw_mobile/templates/handlebars/card/grad_committee.html @@ -13,8 +13,8 @@
    {{committee_type}}
  • {{first_name}} {{last_name}}{{#if member_type}}, {{member_type}}{{/if}}{{#if reading_type}}, reading_type:{{reading_type}}{{/if}} - {{if dept}}{{dept}}{{/if}} - {{if email}}{{email}}{{/if}} + {{#if dept}}{{dept}}{{/if}} + {{#if email}}{{email}}{{/if}}
  • {{/each}} From c39f15d11796de2b1fd4ae1887dc30adbae0ad6a Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 14 Aug 2015 10:54:39 -0700 Subject: [PATCH 046/116] Part for MUWM-3205 - refactor dao.term, add show/hide for leaves. --- myuw_mobile/dao/calendar.py | 15 +- myuw_mobile/dao/card_display_dates.py | 22 +- myuw_mobile/dao/enrollment.py | 4 +- myuw_mobile/dao/grad.py | 117 ++++-- myuw_mobile/dao/iasystem.py | 14 +- myuw_mobile/dao/notice_mapping.py | 7 +- myuw_mobile/dao/registered_term.py | 19 +- myuw_mobile/dao/schedule.py | 11 +- myuw_mobile/dao/term.py | 333 ------------------ myuw_mobile/dao/term/__init__.py | 185 ++++++++++ myuw_mobile/dao/term/current.py | 174 +++++++++ myuw_mobile/dao/term/specific.py | 87 +++++ .../students/v1/api/leave_id_000083856 | 24 +- .../students/v1/api/leave_id_12345678 | 48 ++- myuw_mobile/test/api/grad.py | 8 +- myuw_mobile/test/dao/grad.py | 58 ++- myuw_mobile/test/dao/registered_term.py | 10 +- myuw_mobile/test/dao/term.py | 173 +-------- myuw_mobile/test/dao/term_current.py | 173 +++++++++ myuw_mobile/test/dao/term_specific.py | 45 +++ myuw_mobile/tests.py | 2 + myuw_mobile/views/api/future_schedule.py | 4 +- myuw_mobile/views/api/grad.py | 9 +- myuw_mobile/views/api/other_quarters.py | 2 +- myuw_mobile/views/api/textbook.py | 6 +- 25 files changed, 946 insertions(+), 604 deletions(-) delete mode 100644 myuw_mobile/dao/term.py create mode 100644 myuw_mobile/dao/term/__init__.py create mode 100644 myuw_mobile/dao/term/current.py create mode 100644 myuw_mobile/dao/term/specific.py create mode 100644 myuw_mobile/test/dao/term_current.py create mode 100644 myuw_mobile/test/dao/term_specific.py diff --git a/myuw_mobile/dao/calendar.py b/myuw_mobile/dao/calendar.py index 53cd6d8a62..5511b6dd1b 100644 --- a/myuw_mobile/dao/calendar.py +++ b/myuw_mobile/dao/calendar.py @@ -1,13 +1,14 @@ -from myuw_mobile.dao.term import get_comparison_date -from myuw_mobile.dao.calendar_mapping import get_calendars_for_current_user -from restclients.trumba import get_calendar_by_name +import re +import pytz from datetime import timedelta, datetime, time -from restclients.exceptions import DataFailureException +from urllib import quote_plus, urlencode from django.conf import settings from django.utils import timezone -from urllib import quote_plus, urlencode -import re -import pytz +from restclients.exceptions import DataFailureException +from restclients.trumba import get_calendar_by_name +from myuw_mobile.dao.term import get_comparison_date +from myuw_mobile.dao.calendar_mapping import get_calendars_for_current_user + # Number of future days to search for displaying events DISPLAY_CUTOFF_DAYS = 14 diff --git a/myuw_mobile/dao/card_display_dates.py b/myuw_mobile/dao/card_display_dates.py index 28b9dfdd9c..18d78e46de 100644 --- a/myuw_mobile/dao/card_display_dates.py +++ b/myuw_mobile/dao/card_display_dates.py @@ -6,25 +6,23 @@ from django.conf import settings from datetime import datetime, timedelta -from myuw_mobile.dao.term import get_comparison_date,\ - is_in_summer_b_term, is_summer_term,\ - get_current_quarter, get_next_quarter,\ - get_term_after, get_last_term, get_bof_1st_instruction,\ +from myuw_mobile.dao.term import get_comparison_datetime,\ + get_current_quarter, get_next_quarter, get_previous_quarter,\ + get_term_after +from myuw_mobile.dao.term.current import is_summer_term,\ + is_in_summer_b_term, get_bof_1st_instruction,\ get_eof_last_instruction, get_bof_7d_before_last_instruction,\ get_eof_7d_after_class_start, get_eof_last_final_exam +from myuw_mobile.dao.term.specific import get_first_day_term_after def in_show_grades_period(term, request): - comparison_date = get_comparison_date(request) - next_term = get_term_after(term) - return comparison_date < next_term.first_day_quarter + return get_comparison_datetime(request) < get_first_day_term_after(term) def get_card_visibilty_date_values(request=None): - now = get_comparison_date(request) - after_midnight = datetime(now.year, now.month, now.day, - 0, 0, 1) - values = get_values_by_date(after_midnight, request) + values = get_values_by_date(get_comparison_datetime(request), + request) set_js_overrides(request, values) return values @@ -33,7 +31,7 @@ def get_values_by_date(now, request): """ now is a datetime object of 1 second after the beginning of the day. """ - last_term = get_last_term(request) + last_term = get_previous_quarter(request) return { "is_after_7d_before_last_instruction": diff --git a/myuw_mobile/dao/enrollment.py b/myuw_mobile/dao/enrollment.py index 6b3e7274aa..9abd0a6f5a 100644 --- a/myuw_mobile/dao/enrollment.py +++ b/myuw_mobile/dao/enrollment.py @@ -5,11 +5,13 @@ import logging import traceback +from restclients.sws.enrollment import get_enrollment_by_regid_and_term from myuw_mobile.logger.timer import Timer from myuw_mobile.logger.logback import log_resp_time, log_exception, log_info from myuw_mobile.dao.pws import get_regid_of_current_user -from restclients.sws.enrollment import get_enrollment_by_regid_and_term from myuw_mobile.dao.term import get_current_quarter + + logger = logging.getLogger(__name__) diff --git a/myuw_mobile/dao/grad.py b/myuw_mobile/dao/grad.py index 1e2d17bdef..0401a7e3ae 100644 --- a/myuw_mobile/dao/grad.py +++ b/myuw_mobile/dao/grad.py @@ -12,6 +12,9 @@ from myuw_mobile.logger.logback import log_exception from myuw_mobile.dao.pws import get_regid_of_current_user from myuw_mobile.dao.gws import is_grad_student +from myuw_mobile.dao.term import get_comparison_datetime +from myuw_mobile.dao.term.specific import get_eof_term_after_yq,\ + get_eof_term_yq, get_eof_last_instruction_yq logger = logging.getLogger(__name__) @@ -22,11 +25,10 @@ def get_grad_degree_for_current_user(): returns json data of grad degree requests for the current user """ - - try: - if is_grad_student(): - return get_degree_by_regid(get_regid_of_current_user()) + if not is_grad_student(): return [] # not an error + try: + return get_degree_by_regid(get_regid_of_current_user()) except Exception: log_exception(logger, "get_grad_degree_for_current_user", @@ -39,11 +41,10 @@ def get_grad_committee_for_current_user(): returns json data of grad degree requests for the current user """ - - try: - if is_grad_student(): - return get_committee_by_regid(get_regid_of_current_user()) + if not is_grad_student(): return [] # not an error + try: + return get_committee_by_regid(get_regid_of_current_user()) except Exception: log_exception(logger, "get_grad_committee_for_current_user", @@ -56,11 +57,10 @@ def get_grad_leave_for_current_user(): returns json data of grad degree requests for the current user """ - - try: - if is_grad_student(): - return get_leave_by_regid(get_regid_of_current_user()) + if not is_grad_student(): return [] # not an error + try: + return get_leave_by_regid(get_regid_of_current_user()) except Exception: log_exception(logger, "get_grad_leave_for_current_user", @@ -73,11 +73,10 @@ def get_grad_petition_for_current_user(): returns json data of grad degree requests for the current user """ - - try: - if is_grad_student(): - return get_petition_by_regid(get_regid_of_current_user()) + if not is_grad_student(): return [] # not an error + try: + return get_petition_by_regid(get_regid_of_current_user()) except Exception: log_exception(logger, "get_grad_petition_for_current_user", @@ -85,16 +84,94 @@ def get_grad_petition_for_current_user(): return None -def get_json(degree, committee, leave, petition): +def get_json(degree, committee, leave, petition, request): return { - "degrees": json_data(degree), + "degrees": json_data_degree(degree, request), "committees": json_data(committee), - "leaves": json_data(leave), - "petitions": json_data(petition) + "leaves": json_data_leave(leave, request), + "petitions": json_data_petition(petition, request) } def json_data(req_data): + """ + Simply convert the request object into JSON + without any update of the data. + """ + if req_data is None or len(req_data) == 0: + return None + result = [] + for item in req_data: + result.append(item.json_data()) + return result + + +def json_data_degree(req_data, request): + """ + Convert the degree request list object into JSON + and remove the list item if it should not be shown. + """ + if req_data is None or len(req_data) == 0: + return None + result = [] + for item in req_data: + result.append(item.json_data()) + return result + + +def json_data_leave(req_data, request): + """ + Convert the leave request list object into JSON + and remove the list item if it should not be shown. + """ + if req_data is None or len(req_data) == 0: + return None + result = [] + now = get_comparison_datetime(request) + for item in req_data: + # Approved: until eof last day of instruction + if item.is_status_approved(): + append_if_fn_apply(get_eof_last_instruction_yq, + result, item, now) + continue + + # Paid or Denied: until eof term + if item.is_status_denied() or item.is_status_paid(): + append_if_fn_apply(get_eof_term_yq, + result, item, now) + continue + + # Requested: Duration of status + if item.is_status_requested(): + result.append(item.json_data()) + continue + + # Withdrawn: until eof the following quarter + if item.is_status_withdrawn(): + append_if_fn_apply(get_eof_term_after_yq, + result, item, now) + continue + + return result + + +def append_if_fn_apply(fn, result, item, now): + terms_json = [] + for gterm in item.terms: + if now < fn(gterm.year, gterm.quarter): + terms_json.append(gterm.json_data()) + + if len(terms_json) > 0: + req_json = item.json_data() + req_json["terms"] = terms_json + result.append(req_json) + + +def json_data_petition(req_data, request): + """ + Convert the petition request list object into JSON + and remove the list item if it should not be shown. + """ if req_data is None or len(req_data) == 0: return None result = [] diff --git a/myuw_mobile/dao/iasystem.py b/myuw_mobile/dao/iasystem.py index 4548689051..270416360b 100644 --- a/myuw_mobile/dao/iasystem.py +++ b/myuw_mobile/dao/iasystem.py @@ -4,7 +4,9 @@ from restclients.exceptions import DataFailureException from restclients.iasystem import evaluation from myuw_mobile.dao.student_profile import get_profile_of_current_user -from myuw_mobile.dao.term import get_comparison_date, term_matched,\ +from myuw_mobile.dao.term import get_comparison_datetime,\ + convert_date_to_datetime +from myuw_mobile.dao.term.current import term_matched,\ get_bof_7d_before_last_instruction, get_eof_term @@ -32,19 +34,15 @@ def json_for_evaluation(request, evaluations, section_summer_term): if evaluations is None: return None local_tz = timezone.get_current_timezone() - today = get_comparison_date(request) - now = local_tz.localize( - datetime(today.year, today.month, today.day, 0, 0, 1)) + now = local_tz.localize(get_comparison_datetime(request)) # the start date of the default show window show_date = get_bof_7d_before_last_instruction(request) - on_dt = local_tz.localize( - datetime(show_date.year, show_date.month, show_date.day, 0, 0, 0)) + on_dt = local_tz.localize(convert_date_to_datetime(show_date)) # the end date of the default show window hide_date = get_eof_term(request, True) - off_dt = local_tz.localize( - datetime(hide_date.year, hide_date.month, hide_date.day, 0, 0, 0)) + off_dt = local_tz.localize(convert_date_to_datetime(hide_date)) if now < on_dt or now > off_dt: return None diff --git a/myuw_mobile/dao/notice_mapping.py b/myuw_mobile/dao/notice_mapping.py index beb569c9f5..0e46447a1d 100644 --- a/myuw_mobile/dao/notice_mapping.py +++ b/myuw_mobile/dao/notice_mapping.py @@ -10,7 +10,7 @@ from datetime import datetime, timedelta from django.utils import timezone from myuw_mobile.dao.notice_categorization import NOTICE_CATEGORIES -from myuw_mobile.dao.term import get_comparison_date +from myuw_mobile.dao.term import get_comparison_datetime logger = logging.getLogger(__name__) @@ -61,12 +61,9 @@ def apply_showhide(request, notices): """ if notices is None: return None - today = get_comparison_date(request) local_tz = timezone.get_current_timezone() now = local_tz.localize( - datetime(today.year, - today.month, - today.day, 0, 0, 1)).astimezone(pytz.utc) + get_comparison_datetime(request)).astimezone(pytz.utc) for notice in notices: if notice.notice_category != "StudentFinAid": continue diff --git a/myuw_mobile/dao/registered_term.py b/myuw_mobile/dao/registered_term.py index a143f9180d..e39aea9049 100644 --- a/myuw_mobile/dao/registered_term.py +++ b/myuw_mobile/dao/registered_term.py @@ -4,17 +4,16 @@ """ import logging -from myuw_mobile.dao.term import is_a_term, is_b_term, is_full_summer_term -from myuw_mobile.dao.term import get_current_summer_term, get_comparison_date -from myuw_mobile.dao.term import get_quarter, get_current_quarter -from myuw_mobile.dao.schedule import get_next_quarter_schedule -from myuw_mobile.dao.schedule import get_next_autumn_quarter_schedule -from myuw_mobile.dao.schedule import has_summer_quarter_section -from myuw_mobile.dao.schedule import get_current_quarter_schedule -from myuw_mobile.dao import get_user_model -from myuw_mobile.models import SeenRegistration from django.utils import timezone from datetime import datetime, timedelta +from myuw_mobile.models import SeenRegistration +from myuw_mobile.dao.term import is_a_term, is_b_term, is_full_summer_term,\ + get_comparison_date, get_specific_quarter, get_current_quarter +from myuw_mobile.dao.term.current import get_current_summer_term +from myuw_mobile.dao.schedule import has_summer_quarter_section,\ + get_current_quarter_schedule, get_next_quarter_schedule,\ + get_next_autumn_quarter_schedule +from myuw_mobile.dao import get_user_model logger = logging.getLogger(__name__) @@ -228,7 +227,7 @@ def should_highlight_future_quarters(schedule, request): else: # MUWM-3009 if summer_term == "B": - term_obj = get_quarter(term["year"], "summer") + term_obj = get_specific_quarter(term["year"], "summer") bterm_start = term_obj.bterm_first_date bterm_start_dt = datetime(bterm_start.year, diff --git a/myuw_mobile/dao/schedule.py b/myuw_mobile/dao/schedule.py index 22c4a93994..a3c494479a 100644 --- a/myuw_mobile/dao/schedule.py +++ b/myuw_mobile/dao/schedule.py @@ -6,14 +6,13 @@ import traceback from restclients.models.sws import ClassSchedule from restclients.sws.registration import get_schedule_by_regid_and_term -from myuw_mobile.dao.pws import get_regid_of_current_user -from myuw_mobile.dao.term import get_current_quarter, get_next_quarter -from myuw_mobile.dao.term import get_current_summer_term -from myuw_mobile.dao.term import get_next_autumn_quarter -from myuw_mobile.dao.term import is_half_summer_term -from myuw_mobile.dao.term import is_full_summer_term, is_same_summer_term from myuw_mobile.logger.timer import Timer from myuw_mobile.logger.logback import log_resp_time, log_exception +from myuw_mobile.dao.pws import get_regid_of_current_user +from myuw_mobile.dao.term import get_current_quarter, get_next_quarter,\ + is_half_summer_term, is_full_summer_term, is_same_summer_term +from myuw_mobile.dao.term.current import get_next_autumn_quarter,\ + get_current_summer_term logger = logging.getLogger(__name__) diff --git a/myuw_mobile/dao/term.py b/myuw_mobile/dao/term.py deleted file mode 100644 index 7879a44071..0000000000 --- a/myuw_mobile/dao/term.py +++ /dev/null @@ -1,333 +0,0 @@ -""" -This module encapsulates the access of the term data -(including registered summer terms, registered future terms). -""" - -from datetime import date, datetime, timedelta -import logging -import traceback -from django.conf import settings -import restclients.sws.term as sws_term -from restclients.dao import SWS_DAO -from restclients.sws.term import get_term_by_date, get_term_after,\ - get_term_before, get_current_term -from myuw_mobile.logger.timer import Timer -from myuw_mobile.logger.logback import log_resp_time, log_exception - - -logger = logging.getLogger(__name__) - - -def get_comparison_date(request): - """ - To test at various points in the year, - overrides to the date if specified in the request - otherwise return the default date. - """ - FORMAT = "%Y-%m-%d" - - override_date = None - if request: - if "myuw_override_date" in request.session: - try: - val = request.session["myuw_override_date"] - test_date = datetime.strptime(val, FORMAT) - override_date = val - except Exception as ex: - pass - - if override_date: - return datetime.strptime(override_date, "%Y-%m-%d").date() - - return get_default_date() - - -def get_default_date(): - """ - A hook to help with mock data testing - put the default date - right in the middle of the "current" term. - """ - if is_using_file_dao(): - term = get_current_term() - first_day = term.first_day_quarter - - return first_day + timedelta(days=14) - return datetime.now().date() - - -def is_using_file_dao(): - dao = SWS_DAO()._getDAO() - class_name = dao.__class__.__name__ - return class_name == "File" or class_name == "ByWeek" - - -def get_current_quarter(request): - """ - Return a restclients.models.sws.Term object - for the current quarter. - """ - timer = Timer() - try: - comparison_date = get_comparison_date(request) - term = get_term_by_date(comparison_date) - after = get_term_after(term) - - if comparison_date > term.grade_submission_deadline.date(): - return after - - return term - except Exception as ex: - print ex - log_exception(logger, - 'get_current_term', - traceback.format_exc()) - finally: - log_resp_time(logger, - 'get_current_term', - timer) - return None - - -def get_next_quarter(request): - """ - Returna restclients.models.sws.Term object - for the next quarter. - """ - timer = Timer() - try: - current = get_current_quarter(request) - return get_term_after(current) - except Exception as ex: - log_exception(logger, - 'get_next_term', - traceback.format_exc()) - finally: - log_resp_time(logger, - 'get_next_term', - timer) - return None - - -def get_next_non_summer_quarter(request): - term = get_next_quarter(request) - if term.quarter == "summer": - return get_next_autumn_quarter(request) - - return term - - -def get_next_autumn_quarter(request): - """ - Return the Term object for the next autumn quarter in the same year - when in the Spring quarter - """ - return _get_term_by_year_and_quarter( - get_current_quarter(request).year, 'autumn') - - -def _get_term_by_year_and_quarter(year, quarter): - """ - Returns Term object by the given year and quarter. - If year and quarter are None, return the current term - """ - logid = ('get_term_by_year_and_quarter ' + - str(year) + "," + quarter) - timer = Timer() - try: - return sws_term.get_term_by_year_and_quarter(year, quarter) - except Exception as ex: - log_exception(logger, - logid, - traceback.format_exc()) - finally: - log_resp_time(logger, - logid, - timer) - return None - - -def get_quarter(year, quarter): - """ - Returns Term object by the given year and quarter. - If year and quarter are None, return the current quarter. - """ - return _get_term_by_year_and_quarter(year, quarter.lower()) - - -def get_last_term(request): - return get_term_before(get_current_quarter(request)) - - -def is_past(term, request): - """ - return true if the term is in the past - """ - return term.last_final_exam_date < get_comparison_date(request) - - -def is_summer_term(request): - """ - Return True if it is currently in a summer quarter - """ - term = get_current_quarter(request) - return term.quarter == "summer" - - -def get_current_summer_term(request): - """ - Return a string of the current summer a-term or b-term - or None if it is not a summer quarter - """ - if not is_summer_term(request): - return None - aterm_last_date = get_current_quarter(request).aterm_last_date - if get_comparison_date(request) > aterm_last_date: - return "b-term" - else: - return "a-term" - - -def is_a_term(summer_term): - return summer_term is not None and summer_term.lower() == "a-term" - - -def is_b_term(summer_term): - return summer_term is not None and summer_term.lower() == "b-term" - - -def is_half_summer_term(summer_term): - """ - return True if the given summer_term string is A-term or B-term - @return True if the given summer_term string is A-term or B-term - """ - return is_a_term(summer_term) or is_b_term(summer_term) - - -def is_full_summer_term(summer_term): - """ - return True if the given summer_term string is Full-term - @return True if the given summer_term string is Full-term - """ - return summer_term.lower() == "full-term" - - -def is_same_summer_term(summer_term1, summer_term2): - return summer_term1.lower() == summer_term2.lower() - - -def term_matched(request, given_summer_term): - """ - @return true if this is not a summer quarter or - the given_summer_term is overlaped with the current summer term - """ - current_summer_term = get_current_summer_term(request) - if given_summer_term is None or current_summer_term is None: - return True - return (is_same_summer_term(current_summer_term, given_summer_term) or - is_full_summer_term(given_summer_term) and - is_b_term(current_summer_term)) - - -def is_in_summer_a_term(request): - """ - @return true if it is in a summer quarter, A-term - """ - return is_a_term(get_current_summer_term(request)) - - -def is_in_summer_b_term(request): - """ - @return true if it is in a summer quarter, B-term - """ - return is_b_term(get_current_summer_term(request)) - - -def get_eof_summer_aterm(request): - """ - @return the datetime (or date if to_datetime is False )object - of the end of the summer quarter A-term - (it is also the beginning of summer B-term). - If it is currently not a summer term, return None. - """ - if not is_in_summer_a_term(request): - return None - aterm_last_date = get_current_quarter(request).aterm_last_date - return convert_to_datetime(aterm_last_date + timedelta(days=1)) - - -def get_eof_last_instruction(request, break_at_a_term=False): - """ - @return the datetime object of the end of the last instruction day - for current quarter and current summer A-term if applicable - """ - eof_aterm_last_day = get_eof_summer_aterm(request) - if break_at_a_term and eof_aterm_last_day is not None: - return eof_aterm_last_day - return convert_to_datetime( - get_current_quarter(request).last_day_instruction + - timedelta(days=1)) - - -def get_bof_7d_before_last_instruction(request): - """ - @return the datetime object of the beginning of - the 7 days before the last instruction day for - current quarter and current summer-term if applicable. - Exclude the last instruction day. - """ - return get_eof_last_instruction(request, True) - timedelta(days=8) - - -def get_bof_1st_instruction(request, break_at_a_term=False): - """ - @return the datetime object of the begining of quarter start day - or the beginning of summer B-term if applicable - """ - eof_aterm_last_day = get_eof_summer_aterm(request) - if break_at_a_term and eof_aterm_last_day is not None: - # the beginning of summer B-term - return eof_aterm_last_day - return convert_to_datetime(get_current_quarter(request).first_day_quarter) - - -def get_eof_7d_after_class_start(request, break_at_a_term=False): - """ - @return the datetime object of seven days after the first day for - current quarter. Exclude the first instruction day. - """ - return get_bof_1st_instruction(request, break_at_a_term) +\ - timedelta(days=8) - - -def get_eof_term(request, break_at_a_term=False): - """ - @return the datetime object of the end of the grade submission - deadline or the end of summer a-term if applicable - """ - eof_aterm_last_day = get_eof_summer_aterm(request) - if break_at_a_term and eof_aterm_last_day is not None: - return eof_aterm_last_day - return convert_to_datetime( - get_current_quarter(request).grade_submission_deadline.date() + - timedelta(days=1)) - - -def get_eof_last_final_exam(request, break_at_a_term=False): - """ - @return the datetime object of the current quarter - the end of the last final exam day - """ - eof_aterm_last_day = get_eof_summer_aterm(request) - if break_at_a_term and eof_aterm_last_day is not None: - return eof_aterm_last_day - return convert_to_datetime( - get_current_quarter(request).last_final_exam_date + - timedelta(days=1)) - - -def convert_to_datetime(a_date): - """ - @return the naive datetime object of the give date object - """ - return datetime(a_date.year, a_date.month, a_date.day, - 0, 0, 0) diff --git a/myuw_mobile/dao/term/__init__.py b/myuw_mobile/dao/term/__init__.py new file mode 100644 index 0000000000..98713bffab --- /dev/null +++ b/myuw_mobile/dao/term/__init__.py @@ -0,0 +1,185 @@ +""" +This module direct interfaces with restclient for the term data +""" + +from datetime import date, datetime, timedelta +import logging +import traceback +from django.conf import settings +import restclients.sws.term as sws_term +from restclients.dao import SWS_DAO +from restclients.sws.term import get_term_by_date, get_term_after,\ + get_term_before, get_current_term +from myuw_mobile.logger.timer import Timer +from myuw_mobile.logger.logback import log_resp_time, log_exception + + +logger = logging.getLogger(__name__) + + +def convert_date_to_datetime(a_date): + """ + @return the naive datetime object of the give date object + """ + return datetime(a_date.year, a_date.month, a_date.day, 0, 0, 0) + + +def get_comparison_datetime(request): + """ + Convert the get_comparison_date to a datetime value + representing 1 second after midnight + """ + now = get_comparison_date(request) + return datetime(now.year, now.month, now.day, 0, 0, 1) + + +def get_comparison_date(request): + """ + To test at various points in the year, return the date + overriden if specified in the request; + otherwise return the default date. + """ + FORMAT = "%Y-%m-%d" + + override_date = None + if request: + if "myuw_override_date" in request.session: + try: + val = request.session["myuw_override_date"] + test_date = datetime.strptime(val, FORMAT) + override_date = val + except Exception as ex: + pass + + if override_date: + return datetime.strptime(override_date, "%Y-%m-%d").date() + + return get_default_date() + + +def get_default_date(): + """ + A hook to help with mock data testing - put the default date + right in the middle of the "current" term. + """ + if is_using_file_dao(): + term = get_current_term() + first_day = term.first_day_quarter + + return first_day + timedelta(days=14) + return datetime.now().date() + + +def get_current_quarter(request): + """ + Return a restclients.models.sws.Term object + for the current quarter. + """ + timer = Timer() + try: + comparison_date = get_comparison_date(request) + term = get_term_by_date(comparison_date) + after = get_term_after(term) + + if comparison_date > term.grade_submission_deadline.date(): + return after + + return term + except Exception as ex: + print ex + log_exception(logger, + 'get_current_term', + traceback.format_exc()) + finally: + log_resp_time(logger, + 'get_current_term', + timer) + return None + + +def get_next_quarter(request): + """ + Returna restclients.models.sws.Term object + for the next quarter. + """ + timer = Timer() + try: + current = get_current_quarter(request) + return get_term_after(current) + except Exception as ex: + log_exception(logger, + 'get_next_term', + traceback.format_exc()) + finally: + log_resp_time(logger, + 'get_next_term', + timer) + return None + + +def get_previous_quarter(request): + """ + Return the Term before the current quarter. + """ + return get_term_before(get_current_quarter(request)) + + +def get_specific_quarter(year, quarter): + """ + Returns Term object by the given year and quarter. + If year and quarter are None, return the current term + """ + logid = ('get_term_by_year_and_quarter ' + str(year) + "," + quarter) + timer = Timer() + try: + return sws_term.get_term_by_year_and_quarter(year, quarter.lower()) + except Exception as ex: + log_exception(logger, + logid, + traceback.format_exc()) + finally: + log_resp_time(logger, + logid, + timer) + return None + + +def is_using_file_dao(): + dao = SWS_DAO()._getDAO() + class_name = dao.__class__.__name__ + return class_name == "File" or class_name == "ByWeek" + + +def is_past(term, request): + """ + return true if the term is in the past + """ + return term.last_final_exam_date < get_comparison_date(request) + + +def is_a_term(summer_term): + return summer_term is not None and summer_term.lower() == "a-term" + + +def is_b_term(summer_term): + return summer_term is not None and summer_term.lower() == "b-term" + + +def is_half_summer_term(summer_term): + """ + return True if the given summer_term string is A-term or B-term + @return True if the given summer_term string is A-term or B-term + """ + return is_a_term(summer_term) or is_b_term(summer_term) + + +def is_full_summer_term(summer_term): + """ + return True if the given summer_term string is Full-term + @return True if the given summer_term string is Full-term + """ + return summer_term.lower() == "full-term" + + +def is_same_summer_term(summer_term1, summer_term2): + return summer_term1.lower() == summer_term2.lower() diff --git a/myuw_mobile/dao/term/current.py b/myuw_mobile/dao/term/current.py new file mode 100644 index 0000000000..6e4b199491 --- /dev/null +++ b/myuw_mobile/dao/term/current.py @@ -0,0 +1,174 @@ +""" +This module provides access of term data +related to the request. +""" + +from datetime import date, datetime, timedelta +import logging +import traceback +from myuw_mobile.dao.term import get_current_quarter, get_next_quarter,\ + convert_date_to_datetime, get_specific_quarter, is_a_term, is_b_term,\ + is_half_summer_term, is_full_summer_term, is_same_summer_term,\ + get_comparison_date + + +logger = logging.getLogger(__name__) + + +def get_current_summer_term(request): + """ + Return a string of the current summer a-term or b-term + or None if it is not a summer quarter + """ + if not is_summer_term(request): + return None + aterm_last_date = get_current_quarter(request).aterm_last_date + if get_comparison_date(request) > aterm_last_date: + return "b-term" + else: + return "a-term" + + +def get_next_non_summer_quarter(request): + term = get_next_quarter(request) + if term.quarter == "summer": + return get_next_autumn_quarter(request) + + return term + + +def get_next_autumn_quarter(request): + """ + Return the Term object for the next autumn quarter in the same year + when in the Spring quarter + """ + return get_specific_quarter(get_current_quarter(request).year, 'autumn') + + +def term_matched(request, given_summer_term): + """ + @return true if this is not a summer quarter or + the given_summer_term is overlaped with the current summer term + """ + current_summer_term = get_current_summer_term(request) + if given_summer_term is None or current_summer_term is None: + return True + return (is_same_summer_term(current_summer_term, given_summer_term) or + is_full_summer_term(given_summer_term) and + is_b_term(current_summer_term)) + + +def is_summer_term(request): + """ + Return True if it is currently in a summer quarter + """ + term = get_current_quarter(request) + return term.quarter == "summer" + + +def is_in_summer_a_term(request): + """ + @return true if it is in a summer quarter, A-term + """ + return is_a_term(get_current_summer_term(request)) + + +def is_in_summer_b_term(request): + """ + @return true if it is in a summer quarter, B-term + """ + return is_b_term(get_current_summer_term(request)) + + +def get_eof_summer_aterm(request): + """ + @return the datetime (or date if to_datetime is False )object + of the end of the summer quarter A-term + (it is also the beginning of summer B-term). + If it is currently not a summer term, return None. + """ + if not is_in_summer_a_term(request): + return None + aterm_last_date = get_current_quarter(request).aterm_last_date + return convert_date_to_datetime(aterm_last_date + timedelta(days=1)) + + +def get_eof_last_instruction(request, break_at_a_term=False): + """ + @return the datetime object of the end of the last instruction day + for current quarter and current summer A-term if applicable + """ + eof_aterm_last_day = get_eof_summer_aterm(request) + if break_at_a_term and eof_aterm_last_day is not None: + return eof_aterm_last_day + return convert_date_to_datetime( + get_current_quarter(request).last_day_instruction + + timedelta(days=1)) + + +def get_bof_7d_before_last_instruction(request): + """ + @return the datetime object of the beginning of + the 7 days before the last instruction day for + current quarter and current summer-term if applicable. + Exclude the last instruction day. + """ + return get_eof_last_instruction(request, True) - timedelta(days=8) + + +def get_bof_1st_instruction(request, break_at_a_term=False): + """ + @return the datetime object of the begining of quarter start day + or the beginning of summer B-term if applicable + """ + eof_aterm_last_day = get_eof_summer_aterm(request) + if break_at_a_term and eof_aterm_last_day is not None: + # the beginning of summer B-term + return eof_aterm_last_day + return convert_date_to_datetime( + get_current_quarter(request).first_day_quarter) + + +def get_eof_7d_after_class_start(request, break_at_a_term=False): + """ + @return the datetime object of seven days after the first day for + current quarter. Exclude the first instruction day. + """ + return get_bof_1st_instruction(request, break_at_a_term) +\ + timedelta(days=8) + + +def get_eof_term(request, break_at_a_term=False): + """ + @return the datetime object of the end of the grade submission + deadline or the end of summer a-term if applicable + """ + eof_aterm_last_day = get_eof_summer_aterm(request) + if break_at_a_term and eof_aterm_last_day is not None: + return eof_aterm_last_day + return convert_date_to_datetime( + get_current_quarter(request).grade_submission_deadline.date() + + timedelta(days=1)) + + +def get_eof_next_term(request): + """ + @return the datetime object of the end of the grade submission + deadline of the following term + """ + return convert_date_to_datetime( + get_next_quarter(request).grade_submission_deadline.date() + + timedelta(days=1)) + + +def get_eof_last_final_exam(request, break_at_a_term=False): + """ + @return the datetime object of the current quarter + the end of the last final exam day + """ + eof_aterm_last_day = get_eof_summer_aterm(request) + if break_at_a_term and eof_aterm_last_day is not None: + return eof_aterm_last_day + return convert_date_to_datetime( + get_current_quarter(request).last_final_exam_date + + timedelta(days=1)) diff --git a/myuw_mobile/dao/term/specific.py b/myuw_mobile/dao/term/specific.py new file mode 100644 index 0000000000..93ee0e80e7 --- /dev/null +++ b/myuw_mobile/dao/term/specific.py @@ -0,0 +1,87 @@ +""" +This module provides access of term data +related to a specific year and quarter. +""" + +from datetime import date, datetime, timedelta +import logging +import traceback +from myuw_mobile.dao.term import get_current_quarter, get_next_quarter,\ + get_specific_quarter, convert_date_to_datetime, get_term_after + + +logger = logging.getLogger(__name__) + + +def get_eof_term(term): + """ + Return the datetime object of the end of grade submission deadline + for the given term. + Only the summer full term is relevant. + """ + return convert_date_to_datetime(term.grade_submission_deadline.date() + + timedelta(days=1)) + + +def get_eof_term_yq(year, quarter): + """ + Return the datetime object of the end of grade submission deadline + for the term of the give year and quarter. + Only the summer full term is relevant. + """ + return get_eof_term(get_specific_quarter(year, quarter)) + + +def get_eof_last_instruction(term): + """ + Return the datetime object of the end of last instruction + for the given term. + Only the summer full term is relevant. + """ + return convert_date_to_datetime(term.last_day_instruction + + timedelta(days=1)) + + +def get_eof_last_instruction_yq(year, quarter): + """ + Return the datetime object of the end of last instruction + for the term of the give year and quarter. + Only the summer full term is relevant. + """ + return get_eof_last_instruction(get_specific_quarter(year, quarter)) + + +def get_eof_term_after(term): + """ + Return the datetime object of the end of the term after the given term. + Only the summer full term is relevant. + """ + return convert_date_to_datetime( + get_term_after(term).grade_submission_deadline.date() + + timedelta(days=1)) + + +def get_eof_term_after_yq(year, quarter): + """ + Return the datetime object of the end of the term after the given term. + Only the summer full term is relevant. + """ + return get_eof_term_after(get_specific_quarter(year, quarter)) + + +def get_first_day_term_after(term): + """ + Return the datetime object of the beginning of + the first day in the term after the give year and quarter. + Only the summer full term is relevant. + """ + return convert_date_to_datetime(get_term_after(term).first_day_quarter) + + +def get_first_day_term_after_yq(year, quarter): + """ + Return the datetime object of the beginning of + the first day in the term after the give year and quarter. + Only the summer full term is relevant. + """ + return get_first_day_term_after(get_specific_quarter(year, quarter)) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 index cf7f80450f..a5ced83263 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_000083856 @@ -2,30 +2,30 @@ { "leaveReason":"Dissertation/Thesis research/writing", "submitDate":"2012-09-10T09:40:03.36", - "status":"paid", - "quarters":[{"year":2012, - "quarter":"autumn"}]}, + "status":"requested", + "quarters":[{"year":2013, + "quarter":"spring"}]}, {"leaveReason":"Dissertation/Thesis research/writing", "submitDate":"2013-01-02T12:05:14.37", - "status":"paid", + "status":"withdrawn", "quarters":[{"year":2013, - "quarter":"winter"}]}, + "quarter":"spring"}]}, {"leaveReason":"Dissertation/Thesis research/writing", "submitDate":"2013-09-19T08:55:36.517", "status":"paid", "quarters":[{"year":2013, - "quarter":"autumn"}]}, - {"leaveReason":"Dissertation/Thesis research/writing", - "submitDate":"2014-01-02T15:03:28.01", - "status":"paid", - "quarters":[{"year":2014, "quarter":"winter"}]}, + {"leaveReason":"Dissertation/Thesis research/writing", + "submitDate":"2012-01-02T15:03:28.01", + "status":"denied", + "quarters":[{"year":2012, + "quarter":"autumn"}]}, {"leaveReason":"Dissertation/Thesis research/writing", "submitDate":"2014-03-31T11:32:48.583", "status":"approved", - "quarters":[{"year":2013, + "quarters":[{"year":2012, "quarter":"autumn"}, - {"year":2014, + {"year":2013, "quarter":"spring"}] } ] diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 index fe51488c70..80ad22f30f 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 @@ -1 +1,47 @@ -[] +[ +{"leaveReason":"Dissertation/Thesis research/writing", + "submitDate":"2012-09-21T05:59:46.483", + "status":"paid", + "quarters":[{"year":2012, + "quarter":"autumn"}]}, +{"leaveReason":"Dissertation/Thesis research/writing", + "submitDate":"2014-01-06T16:17:05.003", + "status":"paid", + "quarters":[{"year":2014, + "quarter":"winter"}]}, +{"leaveReason":"Other (please describe)", + "submitDate":"2013-01-04T16:12:59.03", + "status":"paid", + "quarters":[{"year":2013, + "quarter":"winter"}]}, +{"leaveReason":"Other (please describe)", + "submitDate":"2013-04-09T04:39:34.31", + "status":"paid", + "quarters":[{"year":2013, + "quarter":"spring"}]}, +{"leaveReason":"Other (please describe)", + "submitDate":"2013-10-09T13:55:57.537", + "status":"paid", + "quarters":[{"year":2013, + "quarter":"autumn"}]}, +{"leaveReason":"Other (please describe)", + "submitDate":"2014-03-24T02:56:18.847", + "status":"paid", + "quarters":[{"year":2014, + "quarter":"spring"}]}, +{"leaveReason":"Other (please describe)", + "submitDate":"2014-10-27T01:56:21.7", + "status":"paid", + "quarters":[{"year":2014, + "quarter":"autumn"}]}, +{"leaveReason":"Other (please describe)", + "submitDate":"2015-02-13T09:00:55.77", + "status":"paid", + "quarters":[{"year":2015, + "quarter":"winter"}]}, +{"leaveReason":"Other (please describe)", + "submitDate":"2015-05-12T01:06:17.12", + "status":"paid", + "quarters":[{"year":2015, + "quarter":"spring"}]} +] diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py index c9b80d9fe5..c51b7c125d 100644 --- a/myuw_mobile/test/api/grad.py +++ b/myuw_mobile/test/api/grad.py @@ -79,16 +79,16 @@ def test_javerage(self): self.assertEqual(len(committee['members']), 1) self.assertIsNotNone(data.get("leaves")) - self.assertEquals(len(data["leaves"]), 5) + self.assertEquals(len(data["leaves"]), 3) leave = data["leaves"][0] self.assertEqual(leave['reason'], "Dissertation/Thesis research/writing") self.assertEqual(leave['submit_date'], "2012-09-10T09:40:03") - self.assertEqual(leave['status'], "paid") + self.assertEqual(leave['status'], "requested") self.assertEqual(len(leave['terms']), 1) - self.assertEqual(leave['terms'][0]['quarter'], "Autumn") - self.assertEqual(leave['terms'][0]['year'], 2012) + self.assertEqual(leave['terms'][0]['quarter'], "Spring") + self.assertEqual(leave['terms'][0]['year'], 2013) self.assertIsNotNone(data.get("petitions")) self.assertEquals(len(data["petitions"]), 6) diff --git a/myuw_mobile/test/dao/grad.py b/myuw_mobile/test/dao/grad.py index 23859651ac..e019d4480c 100644 --- a/myuw_mobile/test/dao/grad.py +++ b/myuw_mobile/test/dao/grad.py @@ -1,8 +1,8 @@ from django.test import TestCase from django.conf import settings from myuw_mobile.dao.grad import get_grad_degree_for_current_user,\ - get_grad_committee_for_current_user, get_grad_leave_for_current_user,\ - get_grad_petition_for_current_user, get_json + get_grad_committee_for_current_user, get_leave_by_regid,\ + get_grad_petition_for_current_user, json_data_leave from django.test.client import RequestFactory @@ -20,7 +20,7 @@ def test_get_grad_degree_for_current_user(self): now_request = RequestFactory().get("/") now_request.session = {} degree_reqs = get_grad_degree_for_current_user() - self.assertIsNone(degree_reqs) + self.assertIsNotNone(degree_reqs) def test_get_grad_committee_for_current_user(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, @@ -29,16 +29,60 @@ def test_get_grad_committee_for_current_user(self): now_request = RequestFactory().get("/") now_request.session = {} committee_reqs = get_grad_committee_for_current_user() - self.assertIsNone(committee_reqs) + self.assertIsNotNone(committee_reqs) def test_get_grad_leave_for_current_user(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494FFE') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 5) now_request = RequestFactory().get("/") + # winter now_request.session = {} - leave_reqs = get_grad_leave_for_current_user() - self.assertIsNone(leave_reqs) + now_request.session["myuw_override_date"] = "2013-03-07" + json_data = json_data_leave(leave_reqs, now_request) + self.assertEquals(len(json_data), 4) + leave = json_data[0] + self.assertEquals(leave["status"], "requested") + leave = json_data[1] + self.assertEquals(leave["status"], "withdrawn") + leave = json_data[2] + self.assertEquals(leave["status"], "paid") + leave = json_data[3] + self.assertEquals(leave["status"], "approved") + self.assertEquals(len(leave["terms"]), 1) + + # spring + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-06-07" + json_data = json_data_leave(leave_reqs, now_request) + self.assertEquals(len(json_data), 3) + leave = json_data[0] + self.assertEquals(leave["status"], "requested") + leave = json_data[1] + self.assertEquals(leave["status"], "withdrawn") + leave = json_data[2] + self.assertEquals(leave["status"], "approved") + self.assertEquals(len(leave["terms"]), 1) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-06-08" + json_data = json_data_leave(leave_reqs, now_request) + self.assertEquals(len(json_data), 2) + leave = json_data[0] + self.assertEquals(leave["status"], "requested") + leave = json_data[1] + self.assertEquals(leave["status"], "withdrawn") + + # summer + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-28" + json_data = json_data_leave(leave_reqs, now_request) + self.assertEquals(len(json_data), 1) + leave = json_data[0] + self.assertEquals(leave["status"], "requested") def test_get_grad_petition_for_current_user(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, @@ -47,4 +91,4 @@ def test_get_grad_petition_for_current_user(self): now_request = RequestFactory().get("/") now_request.session = {} petition_reqs = get_grad_petition_for_current_user() - self.assertIsNone(petition_reqs) + self.assertIsNotNone(petition_reqs) diff --git a/myuw_mobile/test/dao/registered_term.py b/myuw_mobile/test/dao/registered_term.py index c75264cea0..28d6accdcd 100644 --- a/myuw_mobile/test/dao/registered_term.py +++ b/myuw_mobile/test/dao/registered_term.py @@ -2,7 +2,7 @@ from django.conf import settings from django.test.client import RequestFactory from restclients.models import ClassSchedule, Term, Section, Person -from myuw_mobile.dao.term import _get_term_by_year_and_quarter +from myuw_mobile.dao.term import get_specific_quarter from myuw_mobile.dao.schedule import _get_schedule from myuw_mobile.dao.registered_term import _get_registered_summer_terms,\ _must_displayed_separately, _get_registered_future_quarters @@ -18,7 +18,7 @@ def test_get_registered_summer_terms(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS): regid = "9136CCB8F66711D5BE060004AC494FFE" - term = _get_term_by_year_and_quarter(2013, "summer") + term = get_specific_quarter(2013, "summer") schedule = _get_schedule(regid, term) data = _get_registered_summer_terms(schedule.sections) self.assertTrue(data["B"]) @@ -28,7 +28,7 @@ def test_must_displayed_separately(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS): regid = "9136CCB8F66711D5BE060004AC494FFE" - term = _get_term_by_year_and_quarter(2013, "summer") + term = get_specific_quarter(2013, "summer") schedule = _get_schedule(regid, term) self.assertTrue(_must_displayed_separately(schedule)) @@ -40,11 +40,11 @@ def test_get_registered_future_quarters(self): now_request.session = {} regid = "9136CCB8F66711D5BE060004AC494FFE" - term1 = _get_term_by_year_and_quarter(2013, "summer") + term1 = get_specific_quarter(2013, "summer") schedule1 = _get_schedule(regid, term1) self.assertEqual(len(schedule1.sections), 3) - term2 = _get_term_by_year_and_quarter(2013, "autumn") + term2 = get_specific_quarter(2013, "autumn") schedule2 = _get_schedule(regid, term2) self.assertEqual(len(schedule2.sections), 1) diff --git a/myuw_mobile/test/dao/term.py b/myuw_mobile/test/dao/term.py index 14afda9992..3f235027b1 100644 --- a/myuw_mobile/test/dao/term.py +++ b/myuw_mobile/test/dao/term.py @@ -3,15 +3,11 @@ from django.conf import settings from django.test.client import RequestFactory from restclients.models.sws import ClassSchedule, Term, Section, Person -from myuw_mobile.dao.term import _get_term_by_year_and_quarter, is_past,\ +from myuw_mobile.dao.term import get_specific_quarter, is_past,\ is_using_file_dao, get_default_date, get_comparison_date,\ - get_current_quarter, get_next_quarter, get_next_non_summer_quarter,\ - get_next_autumn_quarter, _get_term_by_year_and_quarter, get_quarter,\ - is_past, is_a_term, is_b_term, is_half_summer_term, is_full_summer_term,\ - is_same_summer_term, term_matched, is_in_summer_a_term,\ - get_eof_last_instruction, get_bof_7d_before_last_instruction,\ - get_bof_1st_instruction, get_eof_7d_after_class_start,\ - get_eof_term, get_eof_last_final_exam + get_current_quarter, get_next_quarter, is_past, is_a_term,\ + is_b_term, is_half_summer_term, is_full_summer_term,\ + is_same_summer_term FDAO_SWS = 'restclients.dao_implementation.sws.File' @@ -22,7 +18,7 @@ class TestTerm(TestCase): def test_get_term(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - term = _get_term_by_year_and_quarter(2013, "summer") + term = get_specific_quarter(2013, "summer") self.assertEqual(term.year, 2013) self.assertEqual(term.quarter, "summer") now_request = RequestFactory().get("/") @@ -31,14 +27,14 @@ def test_get_term(self): def test_is_past(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - term = _get_term_by_year_and_quarter(2014, "winter") + term = get_specific_quarter(2014, "winter") self.assertEqual(term.year, 2014) self.assertEqual(term.quarter, "winter") now_request = RequestFactory().get("/") now_request.session = {} self.assertFalse(is_past(term, now_request)) - term = _get_term_by_year_and_quarter(2013, "winter") + term = get_specific_quarter(2013, "winter") self.assertEqual(term.year, 2013) self.assertEqual(term.quarter, "winter") now_request = RequestFactory().get("/") @@ -161,36 +157,18 @@ def test_next_quarter(self): self.assertEquals(quarter.year, 2013) self.assertEquals(quarter.quarter, 'summer') - def test_get_next_non_summer_quarter(self): + def test_get_specific_quarter(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-01" - quarter = get_next_non_summer_quarter(now_request) - self.assertEquals(quarter.year, 2013) - self.assertEquals(quarter.quarter, 'autumn') - - def test_get_next_autumn_quarter(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-01" - quarter = get_next_autumn_quarter(now_request) - self.assertEquals(quarter.year, 2013) - self.assertEquals(quarter.quarter, 'autumn') - - def test_get_term_by_year_and_quarter(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - quarter = _get_term_by_year_and_quarter(2013, 'spring') + quarter = get_specific_quarter(2013, 'spring') self.assertEquals(quarter.year, 2013) self.assertEquals(quarter.quarter, 'spring') - quarter = _get_term_by_year_and_quarter(2013, 'autumn') + quarter = get_specific_quarter(2013, 'autumn') self.assertEquals(quarter.year, 2013) self.assertEquals(quarter.quarter, 'autumn') def test_is_past(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - quarter = get_quarter(2013, 'autumn') + quarter = get_specific_quarter(2013, 'autumn') now_request = RequestFactory().get("/") now_request.session = {} now_request.session["myuw_override_date"] = "2014-01-01" @@ -205,132 +183,3 @@ def test_is_summer_term(self): self.assertTrue(is_full_summer_term('Full-term')) self.assertTrue(is_same_summer_term('A-term', 'a-term')) self.assertFalse(is_same_summer_term('A-term', 'Full-term')) - - def test_term_matched(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertTrue(term_matched(now_request, 'A-term')) - self.assertFalse(term_matched(now_request, 'Full-term')) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertTrue(term_matched(now_request, 'B-term')) - self.assertTrue(term_matched(now_request, 'Full-term')) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertTrue(term_matched(now_request, 'None')) - self.assertTrue(term_matched(now_request, '-')) - - def test_is_in_summer_a_term(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertTrue(is_in_summer_a_term(now_request)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertFalse(is_in_summer_a_term(now_request)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertFalse(is_in_summer_a_term(now_request)) - - def test_get_eof_last_instruction(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-05-10" - self.assertEqual(get_eof_last_instruction(now_request), - datetime(2013, 6, 8, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_last_instruction(now_request, True), - datetime(2013, 7, 25, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_last_instruction(now_request), - datetime(2013, 8, 24, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_eof_last_instruction(now_request, True), - datetime(2013, 8, 24, 0, 0, 0)) - - def test_bof_7d_before_last_instruction(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-05-10" - self.assertEqual(get_bof_7d_before_last_instruction(now_request), - datetime(2013, 5, 31, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_bof_7d_before_last_instruction(now_request), - datetime(2013, 7, 17, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_bof_7d_before_last_instruction(now_request), - datetime(2013, 8, 16, 0, 0, 0)) - - def test_bof_1st_instruction(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-05-10" - self.assertEqual(get_bof_1st_instruction(now_request), - datetime(2013, 4, 1, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_bof_1st_instruction(now_request), - datetime(2013, 6, 24, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_bof_1st_instruction(now_request), - datetime(2013, 6, 24, 0, 0, 0)) - - def test_eof_7d_after_class_start(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-05-10" - self.assertEqual(get_eof_7d_after_class_start(now_request), - datetime(2013, 4, 9, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_7d_after_class_start(now_request), - datetime(2013, 7, 2, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_eof_7d_after_class_start(now_request), - datetime(2013, 7, 2, 0, 0, 0)) - - def test_eof_term(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertEqual(get_eof_term(now_request), - datetime(2013, 3, 27, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_term(now_request, True), - datetime(2013, 7, 25, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_eof_term(now_request), - datetime(2013, 8, 28, 0, 0, 0)) - - def test_eof_last_final_exam(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertEqual(get_eof_last_final_exam(now_request), - datetime(2013, 3, 23, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_last_final_exam(now_request, True), - datetime(2013, 7, 25, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_eof_last_final_exam(now_request), - datetime(2013, 8, 24, 0, 0, 0)) diff --git a/myuw_mobile/test/dao/term_current.py b/myuw_mobile/test/dao/term_current.py new file mode 100644 index 0000000000..c9348ed4a9 --- /dev/null +++ b/myuw_mobile/test/dao/term_current.py @@ -0,0 +1,173 @@ +from datetime import datetime +from django.test import TestCase +from django.conf import settings +from django.test.client import RequestFactory +from restclients.models.sws import ClassSchedule, Term, Section, Person +from myuw_mobile.dao.term.current import get_next_non_summer_quarter,\ + get_next_autumn_quarter, term_matched, is_in_summer_a_term,\ + get_eof_last_instruction, get_bof_7d_before_last_instruction,\ + get_bof_1st_instruction, get_eof_7d_after_class_start,\ + get_eof_term, get_eof_last_final_exam +from myuw_mobile.dao.term.specific import get_specific_quarter + + +FDAO_SWS = 'restclients.dao_implementation.sws.File' +LDAO_SWS = 'restclients.dao_implementation.sws.Live' + + +class TestTermCurrent(TestCase): + def test_get_next_non_summer_quarter(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-01" + quarter = get_next_non_summer_quarter(now_request) + self.assertEquals(quarter.year, 2013) + self.assertEquals(quarter.quarter, 'autumn') + + def test_get_next_autumn_quarter(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-01" + quarter = get_next_autumn_quarter(now_request) + self.assertEquals(quarter.year, 2013) + self.assertEquals(quarter.quarter, 'autumn') + + def testget_specific_quarter(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + quarter = get_specific_quarter(2013, 'spring') + self.assertEquals(quarter.year, 2013) + self.assertEquals(quarter.quarter, 'spring') + quarter = get_specific_quarter(2013, 'autumn') + self.assertEquals(quarter.year, 2013) + self.assertEquals(quarter.quarter, 'autumn') + + def test_term_matched(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertTrue(term_matched(now_request, 'A-term')) + self.assertFalse(term_matched(now_request, 'Full-term')) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertTrue(term_matched(now_request, 'B-term')) + self.assertTrue(term_matched(now_request, 'Full-term')) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertTrue(term_matched(now_request, 'None')) + self.assertTrue(term_matched(now_request, '-')) + + def test_is_in_summer_a_term(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertTrue(is_in_summer_a_term(now_request)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertFalse(is_in_summer_a_term(now_request)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertFalse(is_in_summer_a_term(now_request)) + + def test_get_eof_last_instruction(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-05-10" + self.assertEqual(get_eof_last_instruction(now_request), + datetime(2013, 6, 8, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_eof_last_instruction(now_request, True), + datetime(2013, 7, 25, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_eof_last_instruction(now_request), + datetime(2013, 8, 24, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_eof_last_instruction(now_request, True), + datetime(2013, 8, 24, 0, 0, 0)) + + def test_bof_7d_before_last_instruction(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-05-10" + self.assertEqual(get_bof_7d_before_last_instruction(now_request), + datetime(2013, 5, 31, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_bof_7d_before_last_instruction(now_request), + datetime(2013, 7, 17, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_bof_7d_before_last_instruction(now_request), + datetime(2013, 8, 16, 0, 0, 0)) + + def test_bof_1st_instruction(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-05-10" + self.assertEqual(get_bof_1st_instruction(now_request), + datetime(2013, 4, 1, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_bof_1st_instruction(now_request), + datetime(2013, 6, 24, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_bof_1st_instruction(now_request), + datetime(2013, 6, 24, 0, 0, 0)) + + def test_eof_7d_after_class_start(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-05-10" + self.assertEqual(get_eof_7d_after_class_start(now_request), + datetime(2013, 4, 9, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_eof_7d_after_class_start(now_request), + datetime(2013, 7, 2, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_eof_7d_after_class_start(now_request), + datetime(2013, 7, 2, 0, 0, 0)) + + def test_eof_term(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertEqual(get_eof_term(now_request), + datetime(2013, 3, 27, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_eof_term(now_request, True), + datetime(2013, 7, 25, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_eof_term(now_request), + datetime(2013, 8, 28, 0, 0, 0)) + + def test_eof_last_final_exam(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertEqual(get_eof_last_final_exam(now_request), + datetime(2013, 3, 23, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_eof_last_final_exam(now_request, True), + datetime(2013, 7, 25, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_eof_last_final_exam(now_request), + datetime(2013, 8, 24, 0, 0, 0)) diff --git a/myuw_mobile/test/dao/term_specific.py b/myuw_mobile/test/dao/term_specific.py new file mode 100644 index 0000000000..cef8d252af --- /dev/null +++ b/myuw_mobile/test/dao/term_specific.py @@ -0,0 +1,45 @@ +from datetime import datetime +from django.test import TestCase +from django.conf import settings +from restclients.models.sws import ClassSchedule, Term, Section, Person +from myuw_mobile.dao.term.specific import get_eof_term_yq,\ + get_eof_last_instruction_yq, get_eof_term_after_yq,\ + get_first_day_term_after_yq + + +FDAO_SWS = 'restclients.dao_implementation.sws.File' +LDAO_SWS = 'restclients.dao_implementation.sws.Live' + + +class TestTermSpecific(TestCase): + def test_get_eof_last_instruction_yq(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + self.assertEqual(get_eof_last_instruction_yq(2013, + "spring"), + datetime(2013, 6, 8, 0, 0, 0)) + self.assertEqual(get_eof_last_instruction_yq(2013, + "summer"), + datetime(2013, 8, 24, 0, 0, 0)) + + def test_get_first_day_term_after_yq(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + self.assertEqual(get_first_day_term_after_yq(2012, + "autumn"), + datetime(2013, 1, 7, 0, 0, 0)) + self.assertEqual(get_first_day_term_after_yq(2013, + "spring"), + datetime(2013, 6, 24, 0, 0, 0)) + + def test_get_eof_term_yq(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + self.assertEqual(get_eof_term_yq(2013, "autumn"), + datetime(2013, 12, 18, 0, 0, 0)) + self.assertEqual(get_eof_term_yq(2013, "summer"), + datetime(2013, 8, 28, 0, 0, 0)) + + def test_get_eof_term_after_yq(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + self.assertEqual(get_eof_term_after_yq(2013, "summer"), + datetime(2013, 12, 18, 0, 0, 0)) + self.assertEqual(get_eof_term_after_yq(2013, "spring"), + datetime(2013, 8, 28, 0, 0, 0)) diff --git a/myuw_mobile/tests.py b/myuw_mobile/tests.py index 1d13837959..5325686222 100644 --- a/myuw_mobile/tests.py +++ b/myuw_mobile/tests.py @@ -8,6 +8,8 @@ from myuw_mobile.test.models import TestUserNotices from myuw_mobile.test.academic_events import TestAcademicEvents from myuw_mobile.test.dao.term import TestTerm +from myuw_mobile.test.dao.term_current import TestTermCurrent +from myuw_mobile.test.dao.term_specific import TestTermSpecific from myuw_mobile.test.dao.canvas import TestCanvas from myuw_mobile.test.dao.card_display_dates import TestDisplayValues from myuw_mobile.test.userservice_validation import TestValidation diff --git a/myuw_mobile/views/api/future_schedule.py b/myuw_mobile/views/api/future_schedule.py index e717bffc40..db6486658d 100644 --- a/myuw_mobile/views/api/future_schedule.py +++ b/myuw_mobile/views/api/future_schedule.py @@ -1,6 +1,6 @@ import logging from django.http import HttpResponse -from myuw_mobile.dao.term import get_quarter, is_past +from myuw_mobile.dao.term import get_specific_quarter, is_past from myuw_mobile.logger.timer import Timer from myuw_mobile.dao.card_display_dates import in_show_grades_period from myuw_mobile.views.api.base_schedule import StudClasSche @@ -23,7 +23,7 @@ def GET(self, request, year, quarter, summer_term=None): if summer_term and len(summer_term) > 1: smr_term = summer_term.title() - request_term = get_quarter(year, quarter) + request_term = get_specific_quarter(year, quarter) if not request_term: return HttpResponse(status=404) diff --git a/myuw_mobile/views/api/grad.py b/myuw_mobile/views/api/grad.py index 9a2c11e8f1..b1db921629 100644 --- a/myuw_mobile/views/api/grad.py +++ b/myuw_mobile/views/api/grad.py @@ -21,9 +21,8 @@ def GET(self, request): GET returns 200 with the student account balances of the current user """ - - timer = Timer() logger = logging.getLogger(__name__) + timer = Timer() degree_reqs = get_grad_degree_for_current_user() committee_reqs = get_grad_committee_for_current_user() leave_reqs = get_grad_leave_for_current_user() @@ -34,9 +33,9 @@ def GET(self, request): log_data_not_found_response(logger, timer) return data_not_found() - log_success_response(logger, timer) grad_json_data = get_json(degree_reqs, committee_reqs, - leave_reqs, petition_reqs) + leave_reqs, petition_reqs, + request) logger.debug(grad_json_data) - + log_success_response(logger, timer) return HttpResponse(json.dumps(grad_json_data)) diff --git a/myuw_mobile/views/api/other_quarters.py b/myuw_mobile/views/api/other_quarters.py index 07ecffba34..3a02070bee 100644 --- a/myuw_mobile/views/api/other_quarters.py +++ b/myuw_mobile/views/api/other_quarters.py @@ -4,7 +4,7 @@ from myuw_mobile.views.rest_dispatch import RESTDispatch from myuw_mobile.dao.registered_term import get_registered_future_quarters from myuw_mobile.dao.registered_term import should_highlight_future_quarters -from myuw_mobile.dao.term import get_next_non_summer_quarter +from myuw_mobile.dao.term.current import get_next_non_summer_quarter from myuw_mobile.logger.timer import Timer from myuw_mobile.logger.logresp import log_success_response diff --git a/myuw_mobile/views/api/textbook.py b/myuw_mobile/views/api/textbook.py index 12500746e9..967d0f6755 100644 --- a/myuw_mobile/views/api/textbook.py +++ b/myuw_mobile/views/api/textbook.py @@ -3,8 +3,8 @@ import json from myuw_mobile.dao.schedule import get_schedule_by_term from myuw_mobile.dao.schedule import filter_schedule_sections_by_summer_term -from myuw_mobile.dao.term import get_quarter, get_current_quarter -from myuw_mobile.dao.term import get_current_summer_term +from myuw_mobile.dao.term import get_specific_quarter, get_current_quarter +from myuw_mobile.dao.term.current import get_current_summer_term from myuw_mobile.dao.textbook import get_textbook_by_schedule from myuw_mobile.dao.textbook import get_verba_link_by_schedule from myuw_mobile.logger.timer import Timer @@ -28,7 +28,7 @@ def respond(self, year, quarter, summer_term): timer = Timer() logger = logging.getLogger(__name__) - term = get_quarter(year=year, quarter=quarter) + term = get_specific_quarter(year=year, quarter=quarter) schedule = get_schedule_by_term(term) if summer_term is not None: summer_term = summer_term.replace(",", "") From ba655d276b83e538891f08e8536bf822f5fd2722 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 14 Aug 2015 11:07:13 -0700 Subject: [PATCH 047/116] removed extra terms. --- .../students/v1/api/leave_id_12345678 | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 index 80ad22f30f..934f126d9d 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/leave_id_12345678 @@ -1,4 +1,14 @@ [ +{"leaveReason":"Other (please describe)", + "submitDate":"2012-02-13T09:00:55.77", + "status":"paid", + "quarters":[{"year":2012, + "quarter":"winter"}]}, +{"leaveReason":"Other (please describe)", + "submitDate":"2012-05-12T01:06:17.12", + "status":"paid", + "quarters":[{"year":2012, + "quarter":"spring"}]}, {"leaveReason":"Dissertation/Thesis research/writing", "submitDate":"2012-09-21T05:59:46.483", "status":"paid", @@ -23,25 +33,5 @@ "submitDate":"2013-10-09T13:55:57.537", "status":"paid", "quarters":[{"year":2013, - "quarter":"autumn"}]}, -{"leaveReason":"Other (please describe)", - "submitDate":"2014-03-24T02:56:18.847", - "status":"paid", - "quarters":[{"year":2014, - "quarter":"spring"}]}, -{"leaveReason":"Other (please describe)", - "submitDate":"2014-10-27T01:56:21.7", - "status":"paid", - "quarters":[{"year":2014, - "quarter":"autumn"}]}, -{"leaveReason":"Other (please describe)", - "submitDate":"2015-02-13T09:00:55.77", - "status":"paid", - "quarters":[{"year":2015, - "quarter":"winter"}]}, -{"leaveReason":"Other (please describe)", - "submitDate":"2015-05-12T01:06:17.12", - "status":"paid", - "quarters":[{"year":2015, - "quarter":"spring"}]} + "quarter":"autumn"}]} ] From 3632c3bd00408e189482fefe7e4e6d3d4b457f43 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 17 Aug 2015 15:57:35 -0700 Subject: [PATCH 048/116] MUWM-3205 - implemented show/hide logic for petition requests --- myuw_mobile/dao/grad.py | 32 +++++--- .../students/v1/api/petition_id_000083856 | 17 +++- myuw_mobile/test/dao/grad.py | 77 +++++++++++++++---- 3 files changed, 99 insertions(+), 27 deletions(-) diff --git a/myuw_mobile/dao/grad.py b/myuw_mobile/dao/grad.py index 0401a7e3ae..584c9ebc4a 100644 --- a/myuw_mobile/dao/grad.py +++ b/myuw_mobile/dao/grad.py @@ -5,6 +5,7 @@ import logging import traceback +from datetime import date, datetime, timedelta from restclients.grad.degree import get_degree_by_regid from restclients.grad.committee import get_committee_by_regid from restclients.grad.leave import get_leave_by_regid @@ -86,14 +87,14 @@ def get_grad_petition_for_current_user(): def get_json(degree, committee, leave, petition, request): return { - "degrees": json_data_degree(degree, request), - "committees": json_data(committee), - "leaves": json_data_leave(leave, request), - "petitions": json_data_petition(petition, request) + "degrees": degree_to_json(degree, request), + "committees": to_json(committee), + "leaves": leave_to_json(leave, request), + "petitions": petition_to_json(petition, request) } -def json_data(req_data): +def to_json(req_data): """ Simply convert the request object into JSON without any update of the data. @@ -106,7 +107,7 @@ def json_data(req_data): return result -def json_data_degree(req_data, request): +def degree_to_json(req_data, request): """ Convert the degree request list object into JSON and remove the list item if it should not be shown. @@ -119,7 +120,7 @@ def json_data_degree(req_data, request): return result -def json_data_leave(req_data, request): +def leave_to_json(req_data, request): """ Convert the leave request list object into JSON and remove the list item if it should not be shown. @@ -167,7 +168,7 @@ def append_if_fn_apply(fn, result, item, now): result.append(req_json) -def json_data_petition(req_data, request): +def petition_to_json(req_data, request): """ Convert the petition request list object into JSON and remove the list item if it should not be shown. @@ -175,6 +176,19 @@ def json_data_petition(req_data, request): if req_data is None or len(req_data) == 0: return None result = [] + now = get_comparison_datetime(request) for item in req_data: - result.append(item.json_data()) + if item.is_dept_pending() and item.is_gs_pending() or\ + item.is_dept_deny() and item.is_gs_pending() or\ + item.is_dept_approve() and item.is_gs_pending(): + result.append(item.json_data()) + continue + + if is_before_eof_2weeks_since_decision_date(item.decision_date, now): + result.append(item.json_data()) return result + + +def is_before_eof_2weeks_since_decision_date(decision_date, now): + return decision_date is not None and\ + now < decision_date + timedelta(days=15) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 index eda238b529..7428bd8e59 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 @@ -5,19 +5,27 @@ "gradSchoolDecision":"Pending"}, {"description":"Doctoral degree - Extend ten year limit", - "submitDate":"2015-03-26T16:32:28.64", + "submitDate":"2013-04-06T16:32:28.64", + "decisionDate":"2013-04-10T16:32:28", "deptRecommend":"Withdraw", "gradSchoolDecision":"Withdraw"}, {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2015-03-26T16:32:28.64", "deptRecommend":"Deny", + "gradSchoolDecision":"Pending"}, + + {"description":"Doctoral degree - Extend ten year limit", + "submitDate":"2013-04-06T16:32:28.64", + "decisionDate":"2013-04-10T16:32:28", + "deptRecommend":"Deny", "gradSchoolDecision":"Not approved"}, {"description":"Doctoral degree - Extend ten year limit", - "submitDate":"2014-03-26T13:24:58.633", + "submitDate":"2013-04-06T16:32:28.64", + "decisionDate":"2013-04-10T16:32:28", "deptRecommend":"Deny", - "gradSchoolDecision":"Approved"}, + "gradSchoolDecision":"Approve"}, {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2014-03-26T13:24:58.633", @@ -25,7 +33,8 @@ "gradSchoolDecision":"Pending"}, {"description":"Doctoral degree - Extend ten year limit", - "submitDate":"2014-03-26T13:24:58.633", + "submitDate":"2013-04-06T16:32:28.64", + "decisionDate":"2013-04-10T16:32:28", "deptRecommend":"Approve", "gradSchoolDecision":"Approved" } diff --git a/myuw_mobile/test/dao/grad.py b/myuw_mobile/test/dao/grad.py index e019d4480c..81d876882a 100644 --- a/myuw_mobile/test/dao/grad.py +++ b/myuw_mobile/test/dao/grad.py @@ -1,8 +1,10 @@ from django.test import TestCase from django.conf import settings -from myuw_mobile.dao.grad import get_grad_degree_for_current_user,\ - get_grad_committee_for_current_user, get_leave_by_regid,\ - get_grad_petition_for_current_user, json_data_leave +from datetime import date, datetime, timedelta +from myuw_mobile.dao.grad import get_degree_by_regid,\ + get_leave_by_regid, get_committee_by_regid,\ + get_petition_by_regid, leave_to_json, petition_to_json,\ + is_before_eof_2weeks_since_decision_date from django.test.client import RequestFactory @@ -17,18 +19,18 @@ def test_get_grad_degree_for_current_user(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + degree_reqs = get_degree_by_regid( + '9136CCB8F66711D5BE060004AC494FFE') + self.assertIsNotNone(degree_reqs) now_request = RequestFactory().get("/") now_request.session = {} - degree_reqs = get_grad_degree_for_current_user() - self.assertIsNotNone(degree_reqs) def test_get_grad_committee_for_current_user(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): - now_request = RequestFactory().get("/") - now_request.session = {} - committee_reqs = get_grad_committee_for_current_user() + committee_reqs = get_committee_by_regid( + '9136CCB8F66711D5BE060004AC494FFE') self.assertIsNotNone(committee_reqs) def test_get_grad_leave_for_current_user(self): @@ -42,7 +44,7 @@ def test_get_grad_leave_for_current_user(self): # winter now_request.session = {} now_request.session["myuw_override_date"] = "2013-03-07" - json_data = json_data_leave(leave_reqs, now_request) + json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 4) leave = json_data[0] self.assertEquals(leave["status"], "requested") @@ -57,7 +59,7 @@ def test_get_grad_leave_for_current_user(self): # spring now_request.session = {} now_request.session["myuw_override_date"] = "2013-06-07" - json_data = json_data_leave(leave_reqs, now_request) + json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 3) leave = json_data[0] self.assertEquals(leave["status"], "requested") @@ -69,7 +71,7 @@ def test_get_grad_leave_for_current_user(self): now_request.session = {} now_request.session["myuw_override_date"] = "2013-06-08" - json_data = json_data_leave(leave_reqs, now_request) + json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 2) leave = json_data[0] self.assertEquals(leave["status"], "requested") @@ -79,16 +81,63 @@ def test_get_grad_leave_for_current_user(self): # summer now_request.session = {} now_request.session["myuw_override_date"] = "2013-08-28" - json_data = json_data_leave(leave_reqs, now_request) + json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 1) leave = json_data[0] self.assertEquals(leave["status"], "requested") + def test_is_before_eof_2weeks_since_decision_date(self): + self.assertTrue(is_before_eof_2weeks_since_decision_date( + datetime(2013, 2, 10, 0, 0, 0), + datetime(2013, 2, 24, 0, 0, 0))) + self.assertFalse(is_before_eof_2weeks_since_decision_date( + datetime(2013, 2, 10, 0, 0, 0), + datetime(2013, 2, 25, 0, 0, 0))) + self.assertTrue(is_before_eof_2weeks_since_decision_date( + datetime(2013, 6, 10, 0, 0, 0), + datetime(2013, 6, 10, 0, 0, 0))) + def test_get_grad_petition_for_current_user(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + petition_reqs = get_petition_by_regid( + '9136CCB8F66711D5BE060004AC494FFE') + self.assertIsNotNone(petition_reqs) + self.assertEquals(len(petition_reqs), 7) now_request = RequestFactory().get("/") + now_request.session = {} - petition_reqs = get_grad_petition_for_current_user() - self.assertIsNotNone(petition_reqs) + now_request.session["myuw_override_date"] = "2013-04-10" + json_data = petition_to_json(petition_reqs, now_request) + self.assertEquals(len(json_data), 7) + peti = json_data[0] + self.assertEqual(peti["dept_recommend"], "Pending") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[1] + self.assertEquals(peti["decision_date"], "2013-04-10T16:32:28") + self.assertEqual(peti["dept_recommend"], "Withdraw") + self.assertEqual(peti["gradschool_decision"], "Withdraw") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-25" + json_data = petition_to_json(petition_reqs, now_request) + self.assertEquals(len(json_data), 7) + peti = json_data[6] + self.assertEquals(peti["decision_date"], "2013-04-10T16:32:28") + self.assertEqual(peti["dept_recommend"], "Approve") + self.assertEqual(peti["gradschool_decision"], "Approved") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-26" + json_data = petition_to_json(petition_reqs, now_request) + self.assertEquals(len(json_data), 3) + peti = json_data[0] + self.assertEqual(peti["dept_recommend"], "Pending") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[1] + self.assertIsNone(peti["decision_date"]) + self.assertEqual(peti["dept_recommend"], "Deny") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[2] + self.assertIsNone(peti["decision_date"]) + self.assertEqual(peti["dept_recommend"], "Approve") + self.assertEqual(peti["gradschool_decision"], "Pending") From b5c720d3fc8f7e5d55101eeeb4335c2a2cda24e5 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 17 Aug 2015 16:03:48 -0700 Subject: [PATCH 049/116] Adjusted the api unit test upon new petition request mock data added. --- myuw_mobile/test/api/grad.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py index c51b7c125d..ca424ab679 100644 --- a/myuw_mobile/test/api/grad.py +++ b/myuw_mobile/test/api/grad.py @@ -91,11 +91,13 @@ def test_javerage(self): self.assertEqual(leave['terms'][0]['year'], 2013) self.assertIsNotNone(data.get("petitions")) - self.assertEquals(len(data["petitions"]), 6) - petition = data["petitions"][5] + self.assertEquals(len(data["petitions"]), 7) + petition = data["petitions"][6] self.assertEqual(petition['description'], "Doctoral degree - Extend ten year limit") self.assertEqual(petition['submit_date'], - "2014-03-26T13:24:58") + "2013-04-06T16:32:28") + self.assertEqual(petition['decision_date'], + "2013-04-10T16:32:28") self.assertEqual(petition['dept_recommend'], "Approve") self.assertEqual(petition['gradschool_decision'], "Approved") From 531efd35a046f057ba49141a6634d499730a3a00 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 17 Aug 2015 16:25:54 -0700 Subject: [PATCH 050/116] Resolve MUWM-3211 - capitalize leave status. --- myuw_mobile/templates/handlebars/card/grad_status.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/templates/handlebars/card/grad_status.html b/myuw_mobile/templates/handlebars/card/grad_status.html index 94e266d1d0..99be24bd81 100644 --- a/myuw_mobile/templates/handlebars/card/grad_status.html +++ b/myuw_mobile/templates/handlebars/card/grad_status.html @@ -63,7 +63,7 @@
    {{#not_equal status 'approved'}} - {{status}} + {{capitalizeString status}} {{/not_equal}} {{#equal status 'approved'}} Approved.   Pay Your Fee To Confirm From 108318e9da641bbb000e6ae9013914a04fa3ff4b Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 17 Aug 2015 16:52:21 -0700 Subject: [PATCH 051/116] add comment --- myuw_mobile/test/api/grad.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py index ca424ab679..2b01f220ce 100644 --- a/myuw_mobile/test/api/grad.py +++ b/myuw_mobile/test/api/grad.py @@ -63,7 +63,7 @@ def test_javerage(self): self.assertIsNone(degree["exam_date"]) self.assertEqual(degree["target_award_year"], 2015) self.assertEqual(degree["target_award_quarter"], "Winter") - + # committees self.assertIsNotNone(data.get("committees")) self.assertEquals(len(data["committees"]), 3) committee = data["committees"][0] @@ -77,7 +77,7 @@ def test_javerage(self): self.assertEqual(committee['start_date'], "2012-12-07T08:26:14") self.assertEqual(len(committee['members']), 1) - + # leaves self.assertIsNotNone(data.get("leaves")) self.assertEquals(len(data["leaves"]), 3) leave = data["leaves"][0] @@ -89,10 +89,11 @@ def test_javerage(self): self.assertEqual(len(leave['terms']), 1) self.assertEqual(leave['terms'][0]['quarter'], "Spring") self.assertEqual(leave['terms'][0]['year'], 2013) - + # petitions self.assertIsNotNone(data.get("petitions")) self.assertEquals(len(data["petitions"]), 7) petition = data["petitions"][6] + print petition self.assertEqual(petition['description'], "Doctoral degree - Extend ten year limit") self.assertEqual(petition['submit_date'], From fd399ce1450b642dd0ec5d2976a6b6b8e9d2005a Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 18 Aug 2015 15:33:22 -0700 Subject: [PATCH 052/116] Resolve MUWM-3205 - implement show/hide logic for degree requests without decision date. --- myuw_mobile/dao/grad.py | 82 +++++++---- ...est_id_000083856_exclude_past_quarter_true | 81 ++++++++--- myuw_mobile/test/api/grad.py | 11 +- myuw_mobile/test/dao/grad.py | 130 ++++++++++++++---- 4 files changed, 233 insertions(+), 71 deletions(-) diff --git a/myuw_mobile/dao/grad.py b/myuw_mobile/dao/grad.py index 584c9ebc4a..1ff2da1b99 100644 --- a/myuw_mobile/dao/grad.py +++ b/myuw_mobile/dao/grad.py @@ -97,7 +97,7 @@ def get_json(degree, committee, leave, petition, request): def to_json(req_data): """ Simply convert the request object into JSON - without any update of the data. + without filtering the data. """ if req_data is None or len(req_data) == 0: return None @@ -115,11 +115,61 @@ def degree_to_json(req_data, request): if req_data is None or len(req_data) == 0: return None result = [] + now = get_comparison_datetime(request) + for item in req_data: - result.append(item.json_data()) + # Awaiting Dept Action, + # Awaiting Dept Action (Final Exam), + # Awaiting Dept Action (General Exam) + # Recommended by Dept + if item.is_status_await() or\ + item.is_status_recommended(): + # show during the status + result.append(item.json_data()) + continue + + if item.is_status_graduated() or\ + item.is_status_candidacy() or\ + item.is_status_not_graduate(): + # show until eof the following quarter + if now < get_eof_term_after_yq(item.target_award_year, + item.target_award_quarter): + result.append(item.json_data()) + continue + + # For other statuses: + if is_before_eof_2weeks_since_decision_date(item.decision_date, now): + # show for 2 weeks after the decision date + result.append(item.json_data()) return result +def is_before_eof_2weeks_since_decision_date(decision_date, now): + """ + Return true if + 1). it is within the 2 week period after the decision date or + 2). no decision date is available. + """ + return decision_date is None or\ + now < decision_date + timedelta(days=15) + + +def append_if_fn_apply(fn, result, item, now): + """ + For each term in the leave request, append the json of the item + if it's within the date obtained by applying the function given. + """ + terms_json = [] + for gterm in item.terms: + if now < fn(gterm.year, gterm.quarter): + terms_json.append(gterm.json_data()) + + if len(terms_json) > 0: + req_json = item.json_data() + req_json["terms"] = terms_json + result.append(req_json) + + def leave_to_json(req_data, request): """ Convert the leave request list object into JSON @@ -130,25 +180,25 @@ def leave_to_json(req_data, request): result = [] now = get_comparison_datetime(request) for item in req_data: - # Approved: until eof last day of instruction if item.is_status_approved(): + # show until the end of the last instruction day of the leave term append_if_fn_apply(get_eof_last_instruction_yq, result, item, now) continue - # Paid or Denied: until eof term if item.is_status_denied() or item.is_status_paid(): + # show until the end of the leave term append_if_fn_apply(get_eof_term_yq, result, item, now) continue - # Requested: Duration of status if item.is_status_requested(): + # show during the status result.append(item.json_data()) continue - # Withdrawn: until eof the following quarter if item.is_status_withdrawn(): + # show until eof the following quarter append_if_fn_apply(get_eof_term_after_yq, result, item, now) continue @@ -156,18 +206,6 @@ def leave_to_json(req_data, request): return result -def append_if_fn_apply(fn, result, item, now): - terms_json = [] - for gterm in item.terms: - if now < fn(gterm.year, gterm.quarter): - terms_json.append(gterm.json_data()) - - if len(terms_json) > 0: - req_json = item.json_data() - req_json["terms"] = terms_json - result.append(req_json) - - def petition_to_json(req_data, request): """ Convert the petition request list object into JSON @@ -181,14 +219,12 @@ def petition_to_json(req_data, request): if item.is_dept_pending() and item.is_gs_pending() or\ item.is_dept_deny() and item.is_gs_pending() or\ item.is_dept_approve() and item.is_gs_pending(): + # show during the status result.append(item.json_data()) continue + # For other statuses: if is_before_eof_2weeks_since_decision_date(item.decision_date, now): + # show for 2 weeks after the decision date result.append(item.json_data()) return result - - -def is_before_eof_2weeks_since_decision_date(decision_date, now): - return decision_date is not None and\ - now < decision_date + timedelta(days=15) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true index c338e8514c..76ddfe1214 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true @@ -4,42 +4,72 @@ "requestType":"Masters Request", "degreeTitle":"Master Of Landscape Architecture/Master Of Architecture", "majorFullName":"Landscape Arch/Architecture (Concurrent)", + "status":"Awaiting Dept Action", + "examPlace":null, + "examDate":null, + "targetAwardYear":2013, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2013-03-11T20:53:32.733", + "major":"LA ARC", + "pathway":0, + "degreeLevel":2, + "degreeType":7}, + {"syskey":83856, + "requestId":101503, + "requestType":"Masters Request", + "degreeTitle":"Master Of Landscape Architecture/Master Of Architecture", + "majorFullName":"Landscape Arch/Architecture (Concurrent)", "status":"Awaiting Dept Action (Final Exam)", "examPlace":null, "examDate":null, - "targetAwardYear":2015, - "targetAwardQuarter":"winter", - "requestSubmitDate":"2015-03-11T20:53:32.733", + "targetAwardYear":2013, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2013-03-11T20:53:32.733", "major":"LA ARC", "pathway":0, "degreeLevel":2, "degreeType":7}, {"syskey":83856, - "requestId":101518, + "requestId":101504, + "requestType":"Masters Request", + "degreeTitle":"Master Of Landscape Architecture/Master Of Architecture", + "majorFullName":"Landscape Arch/Architecture (Concurrent)", + "status":"Awaiting Dept Action (General Exam)", + "examPlace":null, + "examDate":null, + "targetAwardYear":2013, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2013-03-11T20:53:32.733", + "major":"LA ARC", + "pathway":0, + "degreeLevel":2, + "degreeType":7}, + {"syskey":83856, + "requestId":102782, "requestType":"Masters Request", "degreeTitle":"Master Of Architecture", "majorFullName":"Architecture", - "status":"Withdrawn", + "status":"Recommended by Dept", "examPlace":null, "examDate":null, - "targetAwardYear":2015, - "targetAwardQuarter":"winter", - "requestSubmitDate":"2015-03-12T17:17:23.183", + "targetAwardYear":2013, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2013-03-30T15:38:12.907", "major":"ARCH", "pathway":0, "degreeLevel":2, "degreeType":7}, {"syskey":83856, - "requestId":102782, + "requestId":101518, "requestType":"Masters Request", "degreeTitle":"Master Of Architecture", "majorFullName":"Architecture", - "status":"Recommended by Dept", + "status":"Withdrawn", "examPlace":null, "examDate":null, - "targetAwardYear":2015, + "targetAwardYear":2013, "targetAwardQuarter":"spring", - "requestSubmitDate":"2015-03-30T15:38:12.907", + "requestSubmitDate":"2013-03-12T17:17:23.183", "major":"ARCH", "pathway":0, "degreeLevel":2, @@ -49,12 +79,27 @@ "requestType":"Masters Request", "degreeTitle":"Master Of Landscape Architecture", "majorFullName":"Landscape Architecture", - "status":"Recommended by Dept", + "status":"Candidacy Granted", + "examPlace":null, + "examDate":null, + "targetAwardYear":2013, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2013-03-30T15:40:25.007", + "major":"L ARCH", + "pathway":0, + "degreeLevel":2, + "degreeType":7}, + {"syskey":83856, + "requestId":102786, + "requestType":"Masters Request", + "degreeTitle":"Master Of Landscape Architecture", + "majorFullName":"Landscape Architecture", + "status":"Graduated by Grad School", "examPlace":null, "examDate":null, - "targetAwardYear":2015, + "targetAwardYear":2013, "targetAwardQuarter":"spring", - "requestSubmitDate":"2015-03-30T15:40:25.007", + "requestSubmitDate":"2013-03-30T15:40:25.007", "major":"L ARCH", "pathway":0, "degreeLevel":2, @@ -66,9 +111,9 @@ "status":"Did not graduate", "examPlace":null, "examDate":null, - "targetAwardYear":2015, - "targetAwardQuarter":"winter", - "requestSubmitDate":"2015-01-14T14:15:04.74", + "targetAwardYear":2013, + "targetAwardQuarter":"spring", + "requestSubmitDate":"2013-01-14T14:15:04.74", "major":"CONMGT", "majorFullName":"Construction Management,Evening Deg Prog", "pathway":0, diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py index 2b01f220ce..26d019d8df 100644 --- a/myuw_mobile/test/api/grad.py +++ b/myuw_mobile/test/api/grad.py @@ -48,21 +48,21 @@ def test_javerage(self): data = json.loads(response.content) self.assertIsNotNone(data.get("degrees")) - self.assertEquals(len(data["degrees"]), 5) + self.assertEquals(len(data["degrees"]), 8) degree = data["degrees"][0] self.assertEqual(degree["req_type"], "Masters Request") - self.assertEqual(degree["submit_date"], "2015-03-11T20:53:32") + self.assertEqual(degree["submit_date"], "2013-03-11T20:53:32") self.assertEqual( degree["degree_title"], "Master Of Landscape Architecture/Master Of Architecture") self.assertEqual(degree["major_full_name"], "Landscape Arch/Architecture (Concurrent)") self.assertEqual(degree["status"], - "Awaiting Dept Action (Final Exam)") + "Awaiting Dept Action") self.assertIsNone(degree["exam_place"]) self.assertIsNone(degree["exam_date"]) - self.assertEqual(degree["target_award_year"], 2015) - self.assertEqual(degree["target_award_quarter"], "Winter") + self.assertEqual(degree["target_award_year"], 2013) + self.assertEqual(degree["target_award_quarter"], "Spring") # committees self.assertIsNotNone(data.get("committees")) self.assertEquals(len(data["committees"]), 3) @@ -93,7 +93,6 @@ def test_javerage(self): self.assertIsNotNone(data.get("petitions")) self.assertEquals(len(data["petitions"]), 7) petition = data["petitions"][6] - print petition self.assertEqual(petition['description'], "Doctoral degree - Extend ten year limit") self.assertEqual(petition['submit_date'], diff --git a/myuw_mobile/test/dao/grad.py b/myuw_mobile/test/dao/grad.py index 81d876882a..75169398a3 100644 --- a/myuw_mobile/test/dao/grad.py +++ b/myuw_mobile/test/dao/grad.py @@ -4,7 +4,7 @@ from myuw_mobile.dao.grad import get_degree_by_regid,\ get_leave_by_regid, get_committee_by_regid,\ get_petition_by_regid, leave_to_json, petition_to_json,\ - is_before_eof_2weeks_since_decision_date + is_before_eof_2weeks_since_decision_date, degree_to_json from django.test.client import RequestFactory @@ -25,7 +25,7 @@ def test_get_grad_degree_for_current_user(self): now_request = RequestFactory().get("/") now_request.session = {} - def test_get_grad_committee_for_current_user(self): + def test_get_grad_committee(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): @@ -33,7 +33,68 @@ def test_get_grad_committee_for_current_user(self): '9136CCB8F66711D5BE060004AC494FFE') self.assertIsNotNone(committee_reqs) - def test_get_grad_leave_for_current_user(self): + def test_get_grad_degree(self): + with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, + RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + degree_reqs = get_degree_by_regid( + '9136CCB8F66711D5BE060004AC494FFE') + self.assertIsNotNone(degree_reqs) + self.assertEquals(len(degree_reqs), 8) + now_request = RequestFactory().get("/") + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-27" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 8) + degree = json_data[0] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[1] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[2] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[3] + self.assertEquals(degree["status"], "Recommended by Dept") + degree = json_data[4] + self.assertEquals(degree["status"], "Withdrawn") + degree = json_data[5] + self.assertEquals(degree["status"], "Candidacy Granted") + degree = json_data[6] + self.assertEquals(degree["status"], "Graduated by Grad School") + degree = json_data[7] + self.assertEquals(degree["status"], "Did not graduate") + + # after the end of following term + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-28" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 5) + degree = json_data[0] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[1] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[2] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[3] + self.assertEquals(degree["status"], "Recommended by Dept") + degree = json_data[4] + self.assertEquals(degree["status"], "Withdrawn") + + def test_is_before_eof_2weeks_since_decision_date(self): + self.assertTrue(is_before_eof_2weeks_since_decision_date( + datetime(2013, 2, 10, 0, 0, 0), + datetime(2013, 2, 24, 0, 0, 0))) + self.assertFalse(is_before_eof_2weeks_since_decision_date( + datetime(2013, 2, 10, 0, 0, 0), + datetime(2013, 2, 25, 0, 0, 0))) + self.assertTrue(is_before_eof_2weeks_since_decision_date( + datetime(2013, 6, 10, 0, 0, 0), + datetime(2013, 6, 10, 0, 0, 0))) + self.assertTrue(is_before_eof_2weeks_since_decision_date( + None, + datetime(2013, 6, 10, 0, 0, 0))) + + def test_get_grad_leave(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): @@ -41,22 +102,54 @@ def test_get_grad_leave_for_current_user(self): self.assertIsNotNone(leave_reqs) self.assertEquals(len(leave_reqs), 5) now_request = RequestFactory().get("/") - # winter now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-07" + now_request.session["myuw_override_date"] = "2012-12-07" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 5) + leave = json_data[2] + self.assertEquals(leave["status"], "paid") + leave = json_data[3] + self.assertEquals(leave["status"], "denied") + # denied shows until eof 2012 autumn + leave = json_data[4] + self.assertEquals(leave["status"], "approved") + # the 1st approved shows until eof last instruction 2012 autumn + # the 2nd approved shows until eof last instruction 2013 spring + self.assertEquals(len(leave["terms"]), 2) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2012-12-08" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 5) + leave = json_data[2] + self.assertEquals(leave["status"], "paid") + # paid shows until eof 2013 winter + leave = json_data[4] + self.assertEquals(leave["status"], "approved") + self.assertEquals(len(leave["terms"]), 1) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-01-07" json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 4) + leave = json_data[2] + self.assertEquals(leave["status"], "paid") + # paid shows until eof 2013 winter + leave = json_data[3] + self.assertEquals(leave["status"], "approved") + # the end of winter 2013 + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-27" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 3) leave = json_data[0] self.assertEquals(leave["status"], "requested") leave = json_data[1] self.assertEquals(leave["status"], "withdrawn") leave = json_data[2] - self.assertEquals(leave["status"], "paid") - leave = json_data[3] self.assertEquals(leave["status"], "approved") self.assertEquals(len(leave["terms"]), 1) - - # spring + # this approved shows until eof last instruction 2013 spring now_request.session = {} now_request.session["myuw_override_date"] = "2013-06-07" json_data = leave_to_json(leave_reqs, now_request) @@ -68,7 +161,7 @@ def test_get_grad_leave_for_current_user(self): leave = json_data[2] self.assertEquals(leave["status"], "approved") self.assertEquals(len(leave["terms"]), 1) - + # this approved shows until eof last instruction 2013 spring now_request.session = {} now_request.session["myuw_override_date"] = "2013-06-08" json_data = leave_to_json(leave_reqs, now_request) @@ -77,27 +170,16 @@ def test_get_grad_leave_for_current_user(self): self.assertEquals(leave["status"], "requested") leave = json_data[1] self.assertEquals(leave["status"], "withdrawn") - - # summer + # withdrawn shows until eof 2013 summer now_request.session = {} now_request.session["myuw_override_date"] = "2013-08-28" json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 1) leave = json_data[0] self.assertEquals(leave["status"], "requested") + # requested always shows - def test_is_before_eof_2weeks_since_decision_date(self): - self.assertTrue(is_before_eof_2weeks_since_decision_date( - datetime(2013, 2, 10, 0, 0, 0), - datetime(2013, 2, 24, 0, 0, 0))) - self.assertFalse(is_before_eof_2weeks_since_decision_date( - datetime(2013, 2, 10, 0, 0, 0), - datetime(2013, 2, 25, 0, 0, 0))) - self.assertTrue(is_before_eof_2weeks_since_decision_date( - datetime(2013, 6, 10, 0, 0, 0), - datetime(2013, 6, 10, 0, 0, 0))) - - def test_get_grad_petition_for_current_user(self): + def test_get_grad_petition(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): From 3279cfe8a7764d13944dad14d679244ad480c2d3 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Thu, 20 Aug 2015 14:41:18 -0700 Subject: [PATCH 053/116] adding width to request statuses so they wrap --- myuw_mobile/static/css/mobile.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 1616a1307c..f0f8867dd5 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -649,7 +649,7 @@ body { } li.committee-member { padding-bottom: 8px; } } - .card-badge-value { font-size: 14px; } + .card-badge-value { font-size: 14px; max-width: 13em; } .card-badge-label { font-weight: normal; width: 11em; padding-bottom: 5px; } } From 3d84b7d5e249d1f06e4d17bd059967fbad3b203f Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 20 Aug 2015 14:46:07 -0700 Subject: [PATCH 054/116] Resolve MUWM-3192 - add reading committee display --- myuw_mobile/templates/handlebars/card/grad_committee.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/templates/handlebars/card/grad_committee.html b/myuw_mobile/templates/handlebars/card/grad_committee.html index 3f3f83eb65..26e08d72cd 100644 --- a/myuw_mobile/templates/handlebars/card/grad_committee.html +++ b/myuw_mobile/templates/handlebars/card/grad_committee.html @@ -12,7 +12,7 @@
    {{committee_type}}
    {{ #each members}}
  • {{first_name}} {{last_name}}{{#if member_type}}, - {{member_type}}{{/if}}{{#if reading_type}}, reading_type:{{reading_type}}{{/if}} + {{member_type}}{{/if}}{{#if reading_type}} ,{{reading_type}}{{/if}} {{#if dept}}{{dept}}{{/if}} {{#if email}}{{email}}{{/if}}
  • From b7be43b0e668dc2fb0c7eb750ee90d6ebd5f1938 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 20 Aug 2015 14:47:11 -0700 Subject: [PATCH 055/116] fix a typo. --- myuw_mobile/templates/handlebars/card/grad_committee.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/templates/handlebars/card/grad_committee.html b/myuw_mobile/templates/handlebars/card/grad_committee.html index 26e08d72cd..55335f7e87 100644 --- a/myuw_mobile/templates/handlebars/card/grad_committee.html +++ b/myuw_mobile/templates/handlebars/card/grad_committee.html @@ -12,7 +12,7 @@
    {{committee_type}}
    {{ #each members}}
  • {{first_name}} {{last_name}}{{#if member_type}}, - {{member_type}}{{/if}}{{#if reading_type}} ,{{reading_type}}{{/if}} + {{member_type}}{{/if}}{{#if reading_type}}, {{reading_type}}{{/if}} {{#if dept}}{{dept}}{{/if}} {{#if email}}{{email}}{{/if}}
  • From 05af0cf9da8f649cddff287fb2d56a1942acc1aa Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 20 Aug 2015 15:08:31 -0700 Subject: [PATCH 056/116] Fix Cannot read property 'charAt' of undefined in capitalizeString function. --- myuw_mobile/static/js/myuw_m.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/myuw_mobile/static/js/myuw_m.js b/myuw_mobile/static/js/myuw_m.js index 1bb130b2d2..e1797be499 100644 --- a/myuw_mobile/static/js/myuw_m.js +++ b/myuw_mobile/static/js/myuw_m.js @@ -246,11 +246,14 @@ var titilizeTerm = function(term) { }; var capitalizeString = function(string) { - if (string !== undefined && string.match(/^[ab]-term$/gi)) { - value = string.split("-"); - return value[0].toUpperCase() + "-" + value[1].charAt(0).toUpperCase() + value[1].slice(1); + if (string !== undefined) { + if (string.match(/^[ab]-term$/gi)) { + value = string.split("-"); + return value[0].toUpperCase() + "-" + value[1].charAt(0).toUpperCase() + value[1].slice(1); + } + return string.charAt(0).toUpperCase() + string.slice(1); } - return string.charAt(0).toUpperCase() + string.slice(1); + return string }; var isScrolledIntoView = function(elem) { From 28a1632e7f3bad165ed43629dc1daab02fef5a73 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 20 Aug 2015 15:13:21 -0700 Subject: [PATCH 057/116] jslint fix --- myuw_mobile/static/js/myuw_m.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/static/js/myuw_m.js b/myuw_mobile/static/js/myuw_m.js index e1797be499..05e50c27d5 100644 --- a/myuw_mobile/static/js/myuw_m.js +++ b/myuw_mobile/static/js/myuw_m.js @@ -253,7 +253,7 @@ var capitalizeString = function(string) { } return string.charAt(0).toUpperCase() + string.slice(1); } - return string + return string; }; var isScrolledIntoView = function(elem) { From 4ced05e2dd16a48489f73d3a4fd59b398e3c9cd7 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 20 Aug 2015 15:54:35 -0700 Subject: [PATCH 058/116] Resolve MUWM-3220. --- .../v1/api/request_id_000083856_exclude_past_quarter_true | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true index 76ddfe1214..1988ef06d0 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true @@ -108,7 +108,7 @@ "requestId":100794, "requestType":"Masters Request", "degreeTitle":"Master Of Science In Construction Management", - "status":"Did not graduate", + "status":"Did Not Graduate", "examPlace":null, "examDate":null, "targetAwardYear":2013, From 4d1b4431fe08af882d8a2bcddc5f5f09e6393c21 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Mon, 24 Aug 2015 13:48:51 -0700 Subject: [PATCH 059/116] fixing header structure on grad committees --- myuw_mobile/templates/handlebars/card/grad_committee.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/templates/handlebars/card/grad_committee.html b/myuw_mobile/templates/handlebars/card/grad_committee.html index 55335f7e87..89a39371ec 100644 --- a/myuw_mobile/templates/handlebars/card/grad_committee.html +++ b/myuw_mobile/templates/handlebars/card/grad_committee.html @@ -7,7 +7,7 @@

    Your Committees

      {{ #each committees}}
    • -
      {{committee_type}}
      +

      {{committee_type}}

        {{ #each members}}
      1. From 3c2e59267a79c59c442e9985024cfe4804292ded Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Mon, 24 Aug 2015 13:59:06 -0700 Subject: [PATCH 060/116] minor a11y fix on course card. fixes MUWM-3248 --- myuw_mobile/templates/handlebars/card/schedule/visual.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/templates/handlebars/card/schedule/visual.html b/myuw_mobile/templates/handlebars/card/schedule/visual.html index 704ce16501..3138634dcf 100644 --- a/myuw_mobile/templates/handlebars/card/schedule/visual.html +++ b/myuw_mobile/templates/handlebars/card/schedule/visual.html @@ -119,7 +119,7 @@
    From 42756b3a292cbcaae97516e825050bb062abbbd3 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Mon, 24 Aug 2015 15:10:32 -0700 Subject: [PATCH 061/116] adding offscreen text for future quarter card navigation. fixes MUWM-3249 --- myuw_mobile/templates/handlebars/card/future_quarter.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/myuw_mobile/templates/handlebars/card/future_quarter.html b/myuw_mobile/templates/handlebars/card/future_quarter.html index 9662c7d598..e956a414e6 100644 --- a/myuw_mobile/templates/handlebars/card/future_quarter.html +++ b/myuw_mobile/templates/handlebars/card/future_quarter.html @@ -16,10 +16,9 @@

    {{capitalizeString quarter }} {{ year }}{{ #if summer_term }} {{cap

    - {{ /each }} From a6b183156e29284f743d312eb048416ecc0f1c66 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 25 Aug 2015 11:18:25 -0700 Subject: [PATCH 062/116] Remove code no longer needed in card/grad_committee.js. --- myuw_mobile/static/js/card/grad_committee.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/myuw_mobile/static/js/card/grad_committee.js b/myuw_mobile/static/js/card/grad_committee.js index 1c45592cbf..2a77a9941e 100644 --- a/myuw_mobile/static/js/card/grad_committee.js +++ b/myuw_mobile/static/js/card/grad_committee.js @@ -20,15 +20,6 @@ var GradCommitteeCard = { GradCommitteeCard.dom_target.hide(); return; } - - for (var k = 0; k < mygrad_data.committees.length; k += 1) { - var members = mygrad_data.committees[k].members; - for (var j = 0; j < members.length; j += 1) { - if (members[j].member_type === "member") { - members[j].member_type = null; - } - } - } GradCommitteeCard.dom_target.html(template(mygrad_data)); }, From b552e03fbd2bfed17661c45bf2a59d110aeb3eab Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 25 Aug 2015 11:22:59 -0700 Subject: [PATCH 063/116] Update upon corrected mick data. --- myuw_mobile/test/dao/grad.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/test/dao/grad.py b/myuw_mobile/test/dao/grad.py index 75169398a3..022bf42f86 100644 --- a/myuw_mobile/test/dao/grad.py +++ b/myuw_mobile/test/dao/grad.py @@ -62,7 +62,7 @@ def test_get_grad_degree(self): degree = json_data[6] self.assertEquals(degree["status"], "Graduated by Grad School") degree = json_data[7] - self.assertEquals(degree["status"], "Did not graduate") + self.assertEquals(degree["status"], "Did Not Graduate") # after the end of following term now_request.session = {} From 0fba5c739cbe2679ac4b18c88bd2546b3005c967 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 25 Aug 2015 12:03:28 -0700 Subject: [PATCH 064/116] Add unittest for degree request 2-week show/hide. --- ...est_id_000083856_exclude_past_quarter_true | 1 + myuw_mobile/test/dao/grad.py | 26 +++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true index 1988ef06d0..6f4a79f9ea 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true @@ -65,6 +65,7 @@ "degreeTitle":"Master Of Architecture", "majorFullName":"Architecture", "status":"Withdrawn", + "decisionDate":"2013-04-10T00:00:00", "examPlace":null, "examDate":null, "targetAwardYear":2013, diff --git a/myuw_mobile/test/dao/grad.py b/myuw_mobile/test/dao/grad.py index 022bf42f86..552e17e13b 100644 --- a/myuw_mobile/test/dao/grad.py +++ b/myuw_mobile/test/dao/grad.py @@ -44,9 +44,23 @@ def test_get_grad_degree(self): now_request = RequestFactory().get("/") now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-27" + now_request.session["myuw_override_date"] = "2013-04-24" json_data = degree_to_json(degree_reqs, now_request) self.assertEquals(len(json_data), 8) + degree = json_data[4] + self.assertEquals(degree["status"], "Withdrawn") + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-25" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 7) + degree = json_data[4] + self.assertEquals(degree["status"], "Candidacy Granted") + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-27" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 7) degree = json_data[0] self.assertTrue(degree["status"].startswith("Awaiting ")) degree = json_data[1] @@ -56,19 +70,17 @@ def test_get_grad_degree(self): degree = json_data[3] self.assertEquals(degree["status"], "Recommended by Dept") degree = json_data[4] - self.assertEquals(degree["status"], "Withdrawn") - degree = json_data[5] self.assertEquals(degree["status"], "Candidacy Granted") - degree = json_data[6] + degree = json_data[5] self.assertEquals(degree["status"], "Graduated by Grad School") - degree = json_data[7] + degree = json_data[6] self.assertEquals(degree["status"], "Did Not Graduate") # after the end of following term now_request.session = {} now_request.session["myuw_override_date"] = "2013-08-28" json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 5) + self.assertEquals(len(json_data), 4) degree = json_data[0] self.assertTrue(degree["status"].startswith("Awaiting ")) degree = json_data[1] @@ -77,8 +89,6 @@ def test_get_grad_degree(self): self.assertTrue(degree["status"].startswith("Awaiting ")) degree = json_data[3] self.assertEquals(degree["status"], "Recommended by Dept") - degree = json_data[4] - self.assertEquals(degree["status"], "Withdrawn") def test_is_before_eof_2weeks_since_decision_date(self): self.assertTrue(is_before_eof_2weeks_since_decision_date( From f7641fa3ed8c5485e41e1735284ce62e6f058115 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 25 Aug 2015 14:24:46 -0700 Subject: [PATCH 065/116] Simply code in petition_to_json function. --- myuw_mobile/dao/grad.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/myuw_mobile/dao/grad.py b/myuw_mobile/dao/grad.py index 1ff2da1b99..24833c9f03 100644 --- a/myuw_mobile/dao/grad.py +++ b/myuw_mobile/dao/grad.py @@ -216,9 +216,8 @@ def petition_to_json(req_data, request): result = [] now = get_comparison_datetime(request) for item in req_data: - if item.is_dept_pending() and item.is_gs_pending() or\ - item.is_dept_deny() and item.is_gs_pending() or\ - item.is_dept_approve() and item.is_gs_pending(): + if item.is_gs_pending(): + # in all three status of dept # show during the status result.append(item.json_data()) continue From a3322a7446804256cb6b56dc53f436c1a1d11fd7 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 25 Aug 2015 14:55:53 -0700 Subject: [PATCH 066/116] correct typo --- .../grad/file/services/students/v1/api/petition_id_000083856 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 index 7428bd8e59..0910273fb2 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 @@ -25,7 +25,7 @@ "submitDate":"2013-04-06T16:32:28.64", "decisionDate":"2013-04-10T16:32:28", "deptRecommend":"Deny", - "gradSchoolDecision":"Approve"}, + "gradSchoolDecision":"Approved"}, {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2014-03-26T13:24:58.633", From 95897fb21faf055173a776bf18d41fa7de01fe91 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 27 Aug 2015 13:15:17 -0700 Subject: [PATCH 067/116] Resolve MUWM-3277 - mock decisionDate at midnight. --- .../file/services/students/v1/api/petition_id_000083856 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 index 0910273fb2..9b3c5c91dc 100644 --- a/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 +++ b/myuw_mobile/resources/grad/file/services/students/v1/api/petition_id_000083856 @@ -6,7 +6,7 @@ {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2013-04-06T16:32:28.64", - "decisionDate":"2013-04-10T16:32:28", + "decisionDate":"2013-04-10T00:00:00", "deptRecommend":"Withdraw", "gradSchoolDecision":"Withdraw"}, @@ -17,13 +17,13 @@ {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2013-04-06T16:32:28.64", - "decisionDate":"2013-04-10T16:32:28", + "decisionDate":"2013-04-10T00:00:00", "deptRecommend":"Deny", "gradSchoolDecision":"Not approved"}, {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2013-04-06T16:32:28.64", - "decisionDate":"2013-04-10T16:32:28", + "decisionDate":"2013-04-10T00:00:00", "deptRecommend":"Deny", "gradSchoolDecision":"Approved"}, @@ -34,7 +34,7 @@ {"description":"Doctoral degree - Extend ten year limit", "submitDate":"2013-04-06T16:32:28.64", - "decisionDate":"2013-04-10T16:32:28", + "decisionDate":"2013-04-10T00:00:00", "deptRecommend":"Approve", "gradSchoolDecision":"Approved" } From 652f8ed87b89c2dc0ac4872aa420d46b33af7255 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 27 Aug 2015 13:47:09 -0700 Subject: [PATCH 068/116] update the tests upon mick data correction. --- myuw_mobile/test/dao/grad.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/myuw_mobile/test/dao/grad.py b/myuw_mobile/test/dao/grad.py index 552e17e13b..41366145c5 100644 --- a/myuw_mobile/test/dao/grad.py +++ b/myuw_mobile/test/dao/grad.py @@ -207,20 +207,12 @@ def test_get_grad_petition(self): self.assertEqual(peti["dept_recommend"], "Pending") self.assertEqual(peti["gradschool_decision"], "Pending") peti = json_data[1] - self.assertEquals(peti["decision_date"], "2013-04-10T16:32:28") + self.assertEquals(peti["decision_date"], "2013-04-10T00:00:00") self.assertEqual(peti["dept_recommend"], "Withdraw") self.assertEqual(peti["gradschool_decision"], "Withdraw") now_request.session = {} now_request.session["myuw_override_date"] = "2013-04-25" json_data = petition_to_json(petition_reqs, now_request) - self.assertEquals(len(json_data), 7) - peti = json_data[6] - self.assertEquals(peti["decision_date"], "2013-04-10T16:32:28") - self.assertEqual(peti["dept_recommend"], "Approve") - self.assertEqual(peti["gradschool_decision"], "Approved") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-26" - json_data = petition_to_json(petition_reqs, now_request) self.assertEquals(len(json_data), 3) peti = json_data[0] self.assertEqual(peti["dept_recommend"], "Pending") From 98753e3b1d2a9a29509f086bc68745e5bab8228c Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 27 Aug 2015 13:56:39 -0700 Subject: [PATCH 069/116] update the tests upon mick data correction. --- myuw_mobile/test/api/grad.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/test/api/grad.py b/myuw_mobile/test/api/grad.py index 26d019d8df..d5e7c58c61 100644 --- a/myuw_mobile/test/api/grad.py +++ b/myuw_mobile/test/api/grad.py @@ -98,6 +98,6 @@ def test_javerage(self): self.assertEqual(petition['submit_date'], "2013-04-06T16:32:28") self.assertEqual(petition['decision_date'], - "2013-04-10T16:32:28") + "2013-04-10T00:00:00") self.assertEqual(petition['dept_recommend'], "Approve") self.assertEqual(petition['gradschool_decision'], "Approved") From 4312505aa99c0a4284d02d764bb5746e5cd9d333 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Wed, 23 Sep 2015 09:44:02 -0700 Subject: [PATCH 070/116] more spacing and other legibility changes to graduate requests card --- myuw_mobile/static/css/mobile.less | 10 ++++++---- myuw_mobile/templates/handlebars/card/grad_status.html | 8 ++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index f0f8867dd5..954c800343 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -627,12 +627,13 @@ body { // graduate student content card div#GradStatusCard, div#GradCommitteeCard { ul, ol { list-style-type: none; padding-left: 0; } + h3 { margin-bottom: 0 !important; } #petition-reqs, #leave-reqs, #degree-reqs, #committee-reqs { - h4 { margin-bottom: 0px; color: #85754d; + h4 { color: #85754d; font-family: "Roboto",sans-serif; font-size: 16px; font-weight: 500; - margin-bottom: 0.5em; + margin-bottom: 0; margin-top: 1.5em; } h5 { color: #444444 !important; @@ -641,6 +642,7 @@ body { font-weight: 400; margin-top: 0px; text-transform: uppercase; } + .degree-title { line-height: 1.25em; margin-bottom: 10px; font-size: 16px; } } #committee-reqs { h5 { margin-top: 10px; } @@ -649,8 +651,8 @@ body { } li.committee-member { padding-bottom: 8px; } } - .card-badge-value { font-size: 14px; max-width: 13em; } - .card-badge-label { font-weight: normal; width: 11em; padding-bottom: 5px; } + .card-badge-label { font-weight: bold; width: 9em; padding-bottom: 5px; line-height: 1.25em; } + .card-badge-value { font-size: 14px; max-width: 9em; } } diff --git a/myuw_mobile/templates/handlebars/card/grad_status.html b/myuw_mobile/templates/handlebars/card/grad_status.html index 99be24bd81..5b3f7d50d3 100644 --- a/myuw_mobile/templates/handlebars/card/grad_status.html +++ b/myuw_mobile/templates/handlebars/card/grad_status.html @@ -2,7 +2,7 @@ {% tplhandlebars "gradstatus_card_content" %}
    -

    Graduate Status

    +

    Graduate Request Status

    {{#if petitions }} @@ -63,10 +63,10 @@
    {{#not_equal status 'approved'}} - {{capitalizeString status}} + {{capitalizeString status}} {{/not_equal}} {{#equal status 'approved'}} - Approved.   Pay Your Fee To Confirm + Approved
     Pay Your Fee To Confirm {{/equal}}
    @@ -89,7 +89,7 @@

    Degree and Exam Requests

    {{req_type}}, {{target_award_quarter}} {{target_award_year}}
    -
    {{degree_title}}
    +
    {{degree_title}}
    Status
    From 9d3e5b0ebb6b2160d3a5bbfe4371177d7411cd39 Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Thu, 24 Sep 2015 13:40:54 -0700 Subject: [PATCH 071/116] final alignment of statuses and labels --- myuw_mobile/static/css/mobile.less | 5 +++-- .../templates/handlebars/card/grad_status.html | 16 ++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index 954c800343..b185782825 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -651,8 +651,9 @@ body { } li.committee-member { padding-bottom: 8px; } } - .card-badge-label { font-weight: bold; width: 9em; padding-bottom: 5px; line-height: 1.25em; } - .card-badge-value { font-size: 14px; max-width: 9em; } + .pull-left { max-width: 60%; } + .card-badge-label { font-weight: bold; padding-bottom: 5px; line-height: 1.25em; padding-right: 1.2em; } + .card-badge-value { font-size: 14px; } } diff --git a/myuw_mobile/templates/handlebars/card/grad_status.html b/myuw_mobile/templates/handlebars/card/grad_status.html index 5b3f7d50d3..8761a604b0 100644 --- a/myuw_mobile/templates/handlebars/card/grad_status.html +++ b/myuw_mobile/templates/handlebars/card/grad_status.html @@ -20,9 +20,9 @@
    {{description}}
    Department Recommendation
    -
    + {{dept_recommend}} -
    + {{/if}} @@ -31,9 +31,9 @@
    {{description}}
    Graduate School Decision
    -
    + {{gradschool_decision}} -
    + {{/if}} @@ -60,7 +60,7 @@
    Status
    -
    + {{#not_equal status 'approved'}} {{capitalizeString status}} @@ -69,7 +69,7 @@
    Approved
     Pay Your Fee To Confirm {{/equal}} -
    +
    {{/each}} @@ -93,9 +93,9 @@
    {{req_type}}, {{target_award_quarter}} {{target_award_year}}
    Status
    -
    + {{status}} -
    +
    From a3dc36697cc910080ae691d85eaf5a9e8248713e Mon Sep 17 00:00:00 2001 From: Lauren Manes Date: Thu, 24 Sep 2015 13:45:59 -0700 Subject: [PATCH 072/116] and one more tiny spacing tweak --- myuw_mobile/static/css/mobile.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw_mobile/static/css/mobile.less b/myuw_mobile/static/css/mobile.less index b185782825..641c7220dc 100644 --- a/myuw_mobile/static/css/mobile.less +++ b/myuw_mobile/static/css/mobile.less @@ -633,7 +633,7 @@ body { font-family: "Roboto",sans-serif; font-size: 16px; font-weight: 500; - margin-bottom: 0; + margin-bottom: .5em; margin-top: 1.5em; } h5 { color: #444444 !important; From cdc2d896a96cba0ef7bc205d24b135164baeae1c Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Sun, 4 Oct 2015 21:58:44 -0700 Subject: [PATCH 073/116] Refactor dao.term. --- myuw/dao/__init__.py | 7 + myuw/dao/card_display_dates.py | 27 +- myuw/dao/grad.py | 16 +- myuw/dao/iasystem.py | 15 +- myuw/dao/registered_term.py | 9 +- myuw/dao/schedule.py | 9 +- myuw/dao/term.py | 305 ++++++++++++++++++ myuw/dao/term/__init__.py | 185 ----------- myuw/dao/term/current.py | 174 ---------- myuw/dao/term/specific.py | 87 ----- .../sws/file/student/v5/term/2014_autumn.json | 1 + .../sws/file/student/v5/term/2015_autumn.json | 1 + .../sws/file/student/v5/term/2015_spring.json | 1 + .../sws/file/student/v5/term/2015_summer.json | 1 + .../sws/file/student/v5/term/2015_winter.json | 1 + myuw/test/dao/__init__.py | 15 + myuw/test/dao/card_display_dates.py | 4 +- myuw/test/dao/registered_term.py | 10 +- myuw/test/dao/term.py | 238 ++++++++++++-- myuw/test/dao/term_current.py | 173 ---------- myuw/test/dao/term_specific.py | 45 --- myuw/tests.py | 3 +- myuw/views/api/future_schedule.py | 4 +- myuw/views/api/other_quarters.py | 2 +- myuw/views/api/textbook.py | 6 +- myuw/views/display_dates.py | 4 +- 26 files changed, 593 insertions(+), 750 deletions(-) create mode 100644 myuw/dao/term.py delete mode 100644 myuw/dao/term/__init__.py delete mode 100644 myuw/dao/term/current.py delete mode 100644 myuw/dao/term/specific.py create mode 100644 myuw/resources/sws/file/student/v5/term/2014_autumn.json create mode 100644 myuw/resources/sws/file/student/v5/term/2015_autumn.json create mode 100644 myuw/resources/sws/file/student/v5/term/2015_spring.json create mode 100644 myuw/resources/sws/file/student/v5/term/2015_summer.json create mode 100644 myuw/resources/sws/file/student/v5/term/2015_winter.json delete mode 100644 myuw/test/dao/term_current.py delete mode 100644 myuw/test/dao/term_specific.py diff --git a/myuw/dao/__init__.py b/myuw/dao/__init__.py index 98e82d91aa..e56889462a 100644 --- a/myuw/dao/__init__.py +++ b/myuw/dao/__init__.py @@ -1,3 +1,4 @@ +from restclients.dao import SWS_DAO from myuw.dao.pws import get_netid_of_current_user from myuw.models import User @@ -8,3 +9,9 @@ def get_user_model(): user, created = User.objects.get_or_create(uwnetid=user_netid) return user + + +def is_using_file_dao(): + dao = SWS_DAO()._getDAO() + class_name = dao.__class__.__name__ + return class_name == "File" or class_name == "ByWeek" diff --git a/myuw/dao/card_display_dates.py b/myuw/dao/card_display_dates.py index 0f2071ce07..33e7f5240b 100644 --- a/myuw/dao/card_display_dates.py +++ b/myuw/dao/card_display_dates.py @@ -8,16 +8,17 @@ from datetime import datetime, timedelta from myuw.dao.term import get_comparison_datetime,\ get_current_quarter, get_next_quarter, get_previous_quarter,\ - get_term_after -from myuw.dao.term.current import is_summer_term,\ - is_in_summer_b_term, get_bof_1st_instruction,\ - get_eof_last_instruction, get_bof_7d_before_last_instruction,\ - get_eof_7d_after_class_start, get_eof_last_final_exam -from myuw.dao.term.specific import get_first_day_term_after + get_term_after, is_in_summer_quarter,\ + is_in_summer_b_term, get_bod_current_term_class_start,\ + get_eod_current_term_last_instruction, get_bod_7d_before_last_instruction,\ + get_eod_7d_after_class_start, get_eod_current_term_last_final_exam +from myuw.dao.term import get_bod_class_start_quarter_after as\ + get_bod_quarter_after def in_show_grades_period(term, request): - return get_comparison_datetime(request) < get_first_day_term_after(term) + return (term is not None and request is not None and + get_comparison_datetime(request) < get_bod_quarter_after(term)) def get_card_visibilty_date_values(request=None): @@ -60,7 +61,7 @@ def get_values_by_date(now, request): is_before_bof_term(now, request), "is_before_last_day_of_classes": is_before_last_day_of_classes(now, request), - "is_summer": is_summer_term(request), + "is_summer": is_in_summer_quarter(request), "is_after_summer_b": is_in_summer_b_term(request), "current_summer_term": "%s,%s" % (last_term.year, "summer"), "last_term": "%s,%s" % (last_term.year, last_term.quarter), @@ -72,7 +73,7 @@ def is_before_bof_term(now, request): The term switches after the grade submission deadline. @return true if it is before the begining of the 1st day of instruction """ - return now < get_bof_1st_instruction(request) + return now < get_bod_current_term_class_start(request) def is_before_eof_7d_after_class_start(now, request): @@ -80,7 +81,7 @@ def is_before_eof_7d_after_class_start(now, request): @return true if it is before the end of the 7 days after the instruction start day """ - return now < get_eof_7d_after_class_start(request) + return now < get_eod_7d_after_class_start(request) def is_after_7d_before_last_instruction(now, request): @@ -88,14 +89,14 @@ def is_after_7d_before_last_instruction(now, request): @return true if it is after the begining of 7 days before instruction end """ - return now > get_bof_7d_before_last_instruction(request) + return now > get_bod_7d_before_last_instruction(request) def is_before_last_day_of_classes(now, request): """ @return true if it is before the end of the last day of classes """ - return now < get_eof_last_instruction(request) + return now < get_eod_current_term_last_instruction(request) def is_after_last_day_of_classes(now, request): @@ -109,7 +110,7 @@ def is_before_eof_finals_week(now, request): """ @return true if it is before the end of the last day of finalsweek """ - return now < get_eof_last_final_exam(request) + return now < get_eod_current_term_last_final_exam(request) def is_after_bof_and_before_eof_reg_period(now, request): diff --git a/myuw/dao/grad.py b/myuw/dao/grad.py index 5c88e2f67b..5b8d167dbe 100644 --- a/myuw/dao/grad.py +++ b/myuw/dao/grad.py @@ -13,9 +13,9 @@ from myuw.logger.logback import log_exception from myuw.dao.pws import get_regid_of_current_user from myuw.dao.gws import is_grad_student -from myuw.dao.term import get_comparison_datetime -from myuw.dao.term.specific import get_eof_term_after_yq,\ - get_eof_term_yq, get_eof_last_instruction_yq +from myuw.dao.term import get_comparison_datetime,\ + get_eod_specific_quarter_after, get_eod_specific_quarter,\ + get_eod_specific_quarter_last_instruction logger = logging.getLogger(__name__) @@ -132,8 +132,8 @@ def degree_to_json(req_data, request): item.is_status_candidacy() or\ item.is_status_not_graduate(): # show until eof the following quarter - if now < get_eof_term_after_yq(item.target_award_year, - item.target_award_quarter): + if now < get_eod_specific_quarter_after(item.target_award_year, + item.target_award_quarter): result.append(item.json_data()) continue @@ -182,13 +182,13 @@ def leave_to_json(req_data, request): for item in req_data: if item.is_status_approved(): # show until the end of the last instruction day of the leave term - append_if_fn_apply(get_eof_last_instruction_yq, + append_if_fn_apply(get_eod_specific_quarter_last_instruction, result, item, now) continue if item.is_status_denied() or item.is_status_paid(): # show until the end of the leave term - append_if_fn_apply(get_eof_term_yq, + append_if_fn_apply(get_eod_specific_quarter, result, item, now) continue @@ -199,7 +199,7 @@ def leave_to_json(req_data, request): if item.is_status_withdrawn(): # show until eof the following quarter - append_if_fn_apply(get_eof_term_after_yq, + append_if_fn_apply(get_eod_specific_quarter_after, result, item, now) continue diff --git a/myuw/dao/iasystem.py b/myuw/dao/iasystem.py index 42e8f60c96..3681a5ce3b 100644 --- a/myuw/dao/iasystem.py +++ b/myuw/dao/iasystem.py @@ -5,9 +5,8 @@ from restclients.iasystem import evaluation from myuw.dao.student_profile import get_profile_of_current_user from myuw.dao.term import get_comparison_datetime,\ - convert_date_to_datetime -from myuw.dao.term.current import term_matched,\ - get_bof_7d_before_last_instruction, get_eof_term + convert_to_begin_of_day, summer_term_overlaped,\ + get_bod_7d_before_last_instruction, get_eod_current_term def get_evaluations_by_section(section): @@ -37,12 +36,12 @@ def json_for_evaluation(request, evaluations, section_summer_term): now = local_tz.localize(get_comparison_datetime(request)) # the start date of the default show window - show_date = get_bof_7d_before_last_instruction(request) - on_dt = local_tz.localize(convert_date_to_datetime(show_date)) + show_date = get_bod_7d_before_last_instruction(request) + on_dt = local_tz.localize(convert_to_begin_of_day(show_date)) # the end date of the default show window - hide_date = get_eof_term(request, True) - off_dt = local_tz.localize(convert_date_to_datetime(hide_date)) + hide_date = get_eod_current_term(request, True) + off_dt = local_tz.localize(convert_to_begin_of_day(hide_date)) if now < on_dt or now > off_dt: return None @@ -50,7 +49,7 @@ def json_for_evaluation(request, evaluations, section_summer_term): pws = PWS() json_data = [] for evaluation in evaluations: - if term_matched(request, section_summer_term): + if summer_term_overlaped(request, section_summer_term): if now < evaluation.eval_open_date or\ now >= evaluation.eval_close_date: continue diff --git a/myuw/dao/registered_term.py b/myuw/dao/registered_term.py index a28e677ba7..b36b83a300 100644 --- a/myuw/dao/registered_term.py +++ b/myuw/dao/registered_term.py @@ -7,9 +7,10 @@ from django.utils import timezone from datetime import datetime, timedelta from myuw.models import SeenRegistration -from myuw.dao.term import is_a_term, is_b_term, is_full_summer_term,\ - get_comparison_date, get_specific_quarter, get_current_quarter -from myuw.dao.term.current import get_current_summer_term +from restclients.sws.section import is_half_summer_term,\ + is_full_summer_term, is_same_summer_term, is_a_term, is_b_term +from myuw.dao.term import get_current_summer_term,\ + get_comparison_date, get_specific_term, get_current_quarter from myuw.dao.schedule import has_summer_quarter_section,\ get_current_quarter_schedule, get_next_quarter_schedule,\ get_next_autumn_quarter_schedule @@ -227,7 +228,7 @@ def should_highlight_future_quarters(schedule, request): else: # MUWM-3009 if summer_term == "B": - term_obj = get_specific_quarter(term["year"], "summer") + term_obj = get_specific_term(term["year"], "summer") bterm_start = term_obj.bterm_first_date bterm_start_dt = datetime(bterm_start.year, diff --git a/myuw/dao/schedule.py b/myuw/dao/schedule.py index c05a9f943b..9100dc5aee 100644 --- a/myuw/dao/schedule.py +++ b/myuw/dao/schedule.py @@ -6,13 +6,14 @@ import traceback from restclients.models.sws import ClassSchedule from restclients.sws.registration import get_schedule_by_regid_and_term +from restclients.sws.section import is_half_summer_term,\ + is_full_summer_term, is_same_summer_term from myuw.logger.timer import Timer from myuw.logger.logback import log_resp_time, log_exception from myuw.dao.pws import get_regid_of_current_user from myuw.dao.term import get_current_quarter, get_next_quarter,\ - is_half_summer_term, is_full_summer_term, is_same_summer_term -from myuw.dao.term.current import get_next_autumn_quarter,\ - get_current_summer_term + get_next_autumn_quarter, get_current_summer_term + logger = logging.getLogger(__name__) @@ -96,5 +97,5 @@ def has_summer_quarter_section(schedule): """ return (schedule is not None and len(schedule.sections) > 0 and - schedule.term.quarter == "summer" + schedule.term.is_summer_quarter() ) diff --git a/myuw/dao/term.py b/myuw/dao/term.py new file mode 100644 index 0000000000..6a8537914a --- /dev/null +++ b/myuw/dao/term.py @@ -0,0 +1,305 @@ +""" +This module direct interfaces with restclient for the term data +""" + +from datetime import date, datetime, timedelta +import logging +import traceback +from django.conf import settings +from restclients.models.sws import Term +from restclients.util.datetime_convertor import convert_to_begin_of_day,\ + convert_to_end_of_day +from restclients.sws.section import is_a_term, is_b_term,\ + is_full_summer_term, is_same_summer_term +from restclients.sws.term import get_term_by_date, get_specific_term,\ + get_current_term, get_next_term, get_previous_term,\ + get_term_before, get_term_after, get_next_autumn_term,\ + get_next_non_summer_term +from myuw.dao import is_using_file_dao +from myuw.logger.timer import Timer +from myuw.logger.logback import log_resp_time, log_exception + + +logger = logging.getLogger(__name__) + + +def get_default_date(): + """ + A hook to help with mock data testing - put the default date + right in the middle of the "current" term. + """ + if is_using_file_dao(): + term = get_current_term() + first_day = term.first_day_quarter + + return first_day + timedelta(days=14) + return datetime.now().date() + + +def get_comparison_date(request): + """ + To test at various points in the year, return the date + overriden if specified in the request; + otherwise return the default date. + """ + FORMAT = "%Y-%m-%d" + + override_date = None + if request: + if "myuw_override_date" in request.session: + try: + val = request.session["myuw_override_date"] + test_date = datetime.strptime(val, FORMAT) + override_date = val + except Exception as ex: + pass + + if override_date: + return datetime.strptime(override_date, "%Y-%m-%d").date() + + return get_default_date() + + +def get_comparison_datetime(request): + """ + Convert the get_comparison_date to a datetime value + representing 1 second after midnight + """ + now = get_comparison_date(request) + return datetime(now.year, now.month, now.day, 0, 0, 1) + + +def get_current_quarter(request): + """ + Return a restclients.models.sws.Term object + for the current quarter refered in the user session. + """ + timer = Timer() + try: + comparison_date = get_comparison_date(request) + term = get_term_by_date(comparison_date) + after = get_term_after(term) + + if comparison_date > term.grade_submission_deadline.date(): + return after + + return term + except Exception as ex: + print ex + log_exception(logger, + 'get_current_term', + traceback.format_exc()) + finally: + log_resp_time(logger, + 'get_current_term', + timer) + return None + + +def get_next_quarter(request): + """ + Returna restclients.models.sws.Term object + for the current quarter refered in the user session. + """ + return get_term_after(get_current_quarter(request)) + + +def get_previous_quarter(request): + """ + for the current quarter refered in the user session. + """ + return get_term_before(get_current_quarter(request)) + + +def is_past(term, request): + """ + return true if the given term is in the past + """ + return term.get_eod_last_final_exam() < get_comparison_datetime(request) + + +def is_in_summer_quarter(request): + """ + Return True if the user session is currently in a summer quarter + """ + return get_current_quarter(request).is_summer_quarter() + + +def get_current_summer_term(request): + """ + Return a string of the current summer a-term or b-term + or None if it is not a summer quarter + """ + if not is_in_summer_quarter(request): + return None + eod_aterm = get_current_quarter(request).get_eod_summer_aterm() + if get_comparison_datetime(request) > eod_aterm: + return "b-term" + else: + return "a-term" + + +def is_in_summer_a_term(request): + """ + @return true if it is in a summer quarter, A-term + """ + return is_a_term(get_current_summer_term(request)) + + +def is_in_summer_b_term(request): + """ + @return true if it is in a summer quarter, B-term + """ + return is_b_term(get_current_summer_term(request)) + + +def get_next_non_summer_quarter(request): + """ + Return the Term object for the non-summer quarter after the quarter + refered in the current user sesssion. + """ + return get_next_non_summer_term(get_current_quarter(request)) + + +def get_next_autumn_quarter(request): + """ + Return the Term object for the next autumn quarter in the same year. + """ + return get_next_autumn_term(get_current_quarter(request)) + + +def summer_term_overlaped(request, given_summer_term): + """ + @return true if: + 1). this is not a summer quarter or + 2). the given_summer_term is overlaped with the + current summer term in the request + """ + current_summer_term = get_current_summer_term(request) + if given_summer_term is None or current_summer_term is None: + return True + return (is_same_summer_term(current_summer_term, given_summer_term) or + is_full_summer_term(given_summer_term) and + is_b_term(current_summer_term)) + + +def get_eod_current_summer_aterm(request): + """ + @return the datetime object of the end of day for the current + summer quarter A-term (it is also the beginning of summer B-term). + If it is currently not a summer term, return None. + """ + if is_in_summer_a_term(request): + return get_current_quarter(request).get_eod_summer_aterm() + return None + + +def _get_correspond_eod(the_day, request, break_at_a_term): + """ + @return the datetime object of the end of given "fn" day + for current quarter and the end of the current summer A-term if applicable. + """ + eof_aterm_last_day = get_eod_current_summer_aterm(request) + if break_at_a_term and eof_aterm_last_day is not None: + return eof_aterm_last_day + return the_day + + +def get_bod_current_term_class_start(request, break_at_a_term=False): + """ + @return the datetime object of the begining of quarter start day + or the beginning of summer B-term if applicable + """ + return _get_correspond_eod( + get_current_quarter(request).get_bod_first_day(), + request, break_at_a_term) + + +def get_eod_7d_after_class_start(request, break_at_a_term=False): + """ + @return the datetime object of seven days after the first day for + current quarter. Exclude the first instruction day. + """ + return (get_bod_current_term_class_start(request, break_at_a_term) + + timedelta(days=8)) + + +def get_bod_class_start_quarter_after(term): + """ + Return the datetime object of the beginning of the first instruction + day in the term after the give year and quarter. + Only the summer full term is relevant. + """ + nterm = get_term_after(term) + if nterm is None: + return None + return nterm.get_bod_first_day() + + +def get_eod_current_term(request, break_at_a_term=False): + """ + @return the datetime object of the end of the grade submission + deadline or the end of summer a-term if applicable + """ + return _get_correspond_eod( + get_current_quarter(request).get_eod_grade_submission(), + request, break_at_a_term) + + +def get_eod_current_term_last_instruction(request, break_at_a_term=False): + """ + @return the datetime object of the end of the last instruction day + for current quarter and current summer A-term if applicable + """ + return _get_correspond_eod( + get_current_quarter(request).get_eod_last_instruction(), + request, break_at_a_term) + + +def get_bod_7d_before_last_instruction(request): + """ + @return the datetime object of the beginning of + the 7 days before the last instruction day for + current quarter and current summer-term if applicable. + Exclude the last instruction day. + """ + return (get_eod_current_term_last_instruction(request, True) - + timedelta(days=8)) + + +def get_eod_current_term_last_final_exam(request, break_at_a_term=False): + """ + @return the datetime object of the current quarter + the end of the last final exam day + """ + return _get_correspond_eod( + get_current_quarter(request).get_eod_last_final_exam(), + request, break_at_a_term) + + +def get_eod_specific_quarter(year, quarter): + """ + Return the datetime object of the end of day on grade submission deadline + for the term of the give year and quarter. + Only the summer full term is relevant. + """ + return get_specific_term(year, quarter).get_eod_grade_submission() + + +def get_eod_specific_quarter_after(year, quarter): + """ + Return the datetime object of the end of day on grade submission deadline + for the term after the give year and quarter. + Only the summer full term is relevant. + """ + return get_term_after( + get_specific_term(year, quarter)).get_eod_grade_submission() + + +def get_eod_specific_quarter_last_instruction(year, quarter): + """ + Return the datetime object of the end of last instruction + for the term of the give year and quarter. + Only the summer full term is relevant. + """ + return get_specific_term(year, quarter).get_eod_last_instruction() diff --git a/myuw/dao/term/__init__.py b/myuw/dao/term/__init__.py deleted file mode 100644 index 7349b23d00..0000000000 --- a/myuw/dao/term/__init__.py +++ /dev/null @@ -1,185 +0,0 @@ -""" -This module direct interfaces with restclient for the term data -""" - -from datetime import date, datetime, timedelta -import logging -import traceback -from django.conf import settings -import restclients.sws.term as sws_term -from restclients.dao import SWS_DAO -from restclients.sws.term import get_term_by_date, get_term_after,\ - get_term_before, get_current_term -from myuw.logger.timer import Timer -from myuw.logger.logback import log_resp_time, log_exception - - -logger = logging.getLogger(__name__) - - -def convert_date_to_datetime(a_date): - """ - @return the naive datetime object of the give date object - """ - return datetime(a_date.year, a_date.month, a_date.day, 0, 0, 0) - - -def get_comparison_datetime(request): - """ - Convert the get_comparison_date to a datetime value - representing 1 second after midnight - """ - now = get_comparison_date(request) - return datetime(now.year, now.month, now.day, 0, 0, 1) - - -def get_comparison_date(request): - """ - To test at various points in the year, return the date - overriden if specified in the request; - otherwise return the default date. - """ - FORMAT = "%Y-%m-%d" - - override_date = None - if request: - if "myuw_override_date" in request.session: - try: - val = request.session["myuw_override_date"] - test_date = datetime.strptime(val, FORMAT) - override_date = val - except Exception as ex: - pass - - if override_date: - return datetime.strptime(override_date, "%Y-%m-%d").date() - - return get_default_date() - - -def get_default_date(): - """ - A hook to help with mock data testing - put the default date - right in the middle of the "current" term. - """ - if is_using_file_dao(): - term = get_current_term() - first_day = term.first_day_quarter - - return first_day + timedelta(days=14) - return datetime.now().date() - - -def get_current_quarter(request): - """ - Return a restclients.models.sws.Term object - for the current quarter. - """ - timer = Timer() - try: - comparison_date = get_comparison_date(request) - term = get_term_by_date(comparison_date) - after = get_term_after(term) - - if comparison_date > term.grade_submission_deadline.date(): - return after - - return term - except Exception as ex: - print ex - log_exception(logger, - 'get_current_term', - traceback.format_exc()) - finally: - log_resp_time(logger, - 'get_current_term', - timer) - return None - - -def get_next_quarter(request): - """ - Returna restclients.models.sws.Term object - for the next quarter. - """ - timer = Timer() - try: - current = get_current_quarter(request) - return get_term_after(current) - except Exception as ex: - log_exception(logger, - 'get_next_term', - traceback.format_exc()) - finally: - log_resp_time(logger, - 'get_next_term', - timer) - return None - - -def get_previous_quarter(request): - """ - Return the Term before the current quarter. - """ - return get_term_before(get_current_quarter(request)) - - -def get_specific_quarter(year, quarter): - """ - Returns Term object by the given year and quarter. - If year and quarter are None, return the current term - """ - logid = ('get_term_by_year_and_quarter ' + str(year) + "," + quarter) - timer = Timer() - try: - return sws_term.get_term_by_year_and_quarter(year, quarter.lower()) - except Exception as ex: - log_exception(logger, - logid, - traceback.format_exc()) - finally: - log_resp_time(logger, - logid, - timer) - return None - - -def is_using_file_dao(): - dao = SWS_DAO()._getDAO() - class_name = dao.__class__.__name__ - return class_name == "File" or class_name == "ByWeek" - - -def is_past(term, request): - """ - return true if the term is in the past - """ - return term.last_final_exam_date < get_comparison_date(request) - - -def is_a_term(summer_term): - return summer_term is not None and summer_term.lower() == "a-term" - - -def is_b_term(summer_term): - return summer_term is not None and summer_term.lower() == "b-term" - - -def is_half_summer_term(summer_term): - """ - return True if the given summer_term string is A-term or B-term - @return True if the given summer_term string is A-term or B-term - """ - return is_a_term(summer_term) or is_b_term(summer_term) - - -def is_full_summer_term(summer_term): - """ - return True if the given summer_term string is Full-term - @return True if the given summer_term string is Full-term - """ - return summer_term.lower() == "full-term" - - -def is_same_summer_term(summer_term1, summer_term2): - return summer_term1.lower() == summer_term2.lower() diff --git a/myuw/dao/term/current.py b/myuw/dao/term/current.py deleted file mode 100644 index a9960c987b..0000000000 --- a/myuw/dao/term/current.py +++ /dev/null @@ -1,174 +0,0 @@ -""" -This module provides access of term data -related to the request. -""" - -from datetime import date, datetime, timedelta -import logging -import traceback -from myuw.dao.term import get_current_quarter, get_next_quarter,\ - convert_date_to_datetime, get_specific_quarter, is_a_term, is_b_term,\ - is_half_summer_term, is_full_summer_term, is_same_summer_term,\ - get_comparison_date - - -logger = logging.getLogger(__name__) - - -def get_current_summer_term(request): - """ - Return a string of the current summer a-term or b-term - or None if it is not a summer quarter - """ - if not is_summer_term(request): - return None - aterm_last_date = get_current_quarter(request).aterm_last_date - if get_comparison_date(request) > aterm_last_date: - return "b-term" - else: - return "a-term" - - -def get_next_non_summer_quarter(request): - term = get_next_quarter(request) - if term.quarter == "summer": - return get_next_autumn_quarter(request) - - return term - - -def get_next_autumn_quarter(request): - """ - Return the Term object for the next autumn quarter in the same year - when in the Spring quarter - """ - return get_specific_quarter(get_current_quarter(request).year, 'autumn') - - -def term_matched(request, given_summer_term): - """ - @return true if this is not a summer quarter or - the given_summer_term is overlaped with the current summer term - """ - current_summer_term = get_current_summer_term(request) - if given_summer_term is None or current_summer_term is None: - return True - return (is_same_summer_term(current_summer_term, given_summer_term) or - is_full_summer_term(given_summer_term) and - is_b_term(current_summer_term)) - - -def is_summer_term(request): - """ - Return True if it is currently in a summer quarter - """ - term = get_current_quarter(request) - return term.quarter == "summer" - - -def is_in_summer_a_term(request): - """ - @return true if it is in a summer quarter, A-term - """ - return is_a_term(get_current_summer_term(request)) - - -def is_in_summer_b_term(request): - """ - @return true if it is in a summer quarter, B-term - """ - return is_b_term(get_current_summer_term(request)) - - -def get_eof_summer_aterm(request): - """ - @return the datetime (or date if to_datetime is False )object - of the end of the summer quarter A-term - (it is also the beginning of summer B-term). - If it is currently not a summer term, return None. - """ - if not is_in_summer_a_term(request): - return None - aterm_last_date = get_current_quarter(request).aterm_last_date - return convert_date_to_datetime(aterm_last_date + timedelta(days=1)) - - -def get_eof_last_instruction(request, break_at_a_term=False): - """ - @return the datetime object of the end of the last instruction day - for current quarter and current summer A-term if applicable - """ - eof_aterm_last_day = get_eof_summer_aterm(request) - if break_at_a_term and eof_aterm_last_day is not None: - return eof_aterm_last_day - return convert_date_to_datetime( - get_current_quarter(request).last_day_instruction + - timedelta(days=1)) - - -def get_bof_7d_before_last_instruction(request): - """ - @return the datetime object of the beginning of - the 7 days before the last instruction day for - current quarter and current summer-term if applicable. - Exclude the last instruction day. - """ - return get_eof_last_instruction(request, True) - timedelta(days=8) - - -def get_bof_1st_instruction(request, break_at_a_term=False): - """ - @return the datetime object of the begining of quarter start day - or the beginning of summer B-term if applicable - """ - eof_aterm_last_day = get_eof_summer_aterm(request) - if break_at_a_term and eof_aterm_last_day is not None: - # the beginning of summer B-term - return eof_aterm_last_day - return convert_date_to_datetime( - get_current_quarter(request).first_day_quarter) - - -def get_eof_7d_after_class_start(request, break_at_a_term=False): - """ - @return the datetime object of seven days after the first day for - current quarter. Exclude the first instruction day. - """ - return get_bof_1st_instruction(request, break_at_a_term) +\ - timedelta(days=8) - - -def get_eof_term(request, break_at_a_term=False): - """ - @return the datetime object of the end of the grade submission - deadline or the end of summer a-term if applicable - """ - eof_aterm_last_day = get_eof_summer_aterm(request) - if break_at_a_term and eof_aterm_last_day is not None: - return eof_aterm_last_day - return convert_date_to_datetime( - get_current_quarter(request).grade_submission_deadline.date() + - timedelta(days=1)) - - -def get_eof_next_term(request): - """ - @return the datetime object of the end of the grade submission - deadline of the following term - """ - return convert_date_to_datetime( - get_next_quarter(request).grade_submission_deadline.date() + - timedelta(days=1)) - - -def get_eof_last_final_exam(request, break_at_a_term=False): - """ - @return the datetime object of the current quarter - the end of the last final exam day - """ - eof_aterm_last_day = get_eof_summer_aterm(request) - if break_at_a_term and eof_aterm_last_day is not None: - return eof_aterm_last_day - return convert_date_to_datetime( - get_current_quarter(request).last_final_exam_date + - timedelta(days=1)) diff --git a/myuw/dao/term/specific.py b/myuw/dao/term/specific.py deleted file mode 100644 index 0e2140596b..0000000000 --- a/myuw/dao/term/specific.py +++ /dev/null @@ -1,87 +0,0 @@ -""" -This module provides access of term data -related to a specific year and quarter. -""" - -from datetime import date, datetime, timedelta -import logging -import traceback -from myuw.dao.term import get_current_quarter, get_next_quarter,\ - get_specific_quarter, convert_date_to_datetime, get_term_after - - -logger = logging.getLogger(__name__) - - -def get_eof_term(term): - """ - Return the datetime object of the end of grade submission deadline - for the given term. - Only the summer full term is relevant. - """ - return convert_date_to_datetime(term.grade_submission_deadline.date() + - timedelta(days=1)) - - -def get_eof_term_yq(year, quarter): - """ - Return the datetime object of the end of grade submission deadline - for the term of the give year and quarter. - Only the summer full term is relevant. - """ - return get_eof_term(get_specific_quarter(year, quarter)) - - -def get_eof_last_instruction(term): - """ - Return the datetime object of the end of last instruction - for the given term. - Only the summer full term is relevant. - """ - return convert_date_to_datetime(term.last_day_instruction + - timedelta(days=1)) - - -def get_eof_last_instruction_yq(year, quarter): - """ - Return the datetime object of the end of last instruction - for the term of the give year and quarter. - Only the summer full term is relevant. - """ - return get_eof_last_instruction(get_specific_quarter(year, quarter)) - - -def get_eof_term_after(term): - """ - Return the datetime object of the end of the term after the given term. - Only the summer full term is relevant. - """ - return convert_date_to_datetime( - get_term_after(term).grade_submission_deadline.date() + - timedelta(days=1)) - - -def get_eof_term_after_yq(year, quarter): - """ - Return the datetime object of the end of the term after the given term. - Only the summer full term is relevant. - """ - return get_eof_term_after(get_specific_quarter(year, quarter)) - - -def get_first_day_term_after(term): - """ - Return the datetime object of the beginning of - the first day in the term after the give year and quarter. - Only the summer full term is relevant. - """ - return convert_date_to_datetime(get_term_after(term).first_day_quarter) - - -def get_first_day_term_after_yq(year, quarter): - """ - Return the datetime object of the beginning of - the first day in the term after the give year and quarter. - Only the summer full term is relevant. - """ - return get_first_day_term_after(get_specific_quarter(year, quarter)) diff --git a/myuw/resources/sws/file/student/v5/term/2014_autumn.json b/myuw/resources/sws/file/student/v5/term/2014_autumn.json new file mode 100644 index 0000000000..32e8309eff --- /dev/null +++ b/myuw/resources/sws/file/student/v5/term/2014_autumn.json @@ -0,0 +1 @@ +{"ATermLastDay":null,"AcademicCatalog":"2010-08-01","BTermFirstDay":null,"CensusDay":"2014-10-03","FifthDay":"2014-09-30","FinancialAidYear":null,"FirstDay":"2014-09-24","FirstDayMedSchool":"2014-09-02","GradeSubmissionDeadline":"2014-12-16T17:00:00","GradingPeriodClose":"2015-01-07T17:00:00","GradingPeriodOpen":"2014-11-17T08:00:00","GradingPeriodOpenATerm":null,"LastAddDay":"2014-10-14","LastAddDayATerm":null,"LastAddDayBTerm":null,"LastDayOfClasses":"2014-12-05","LastDropDay":"2014-11-11","LastDropDayATerm":null,"LastDropDayBTerm":null,"LastDropDayNotRecorded":"2014-10-07","LastDropDayNotRecordedATerm":null,"LastDropDayNotRecordedBTerm":null,"LastFinalExamDay":"2014-12-12","NextTerm":{"Href":"\/student\/v5\/term\/2015,winter.json","Quarter":"winter","Year":2015},"PreviousTerm":{"Href":"\/student\/v5\/term\/2014,summer.json","Quarter":"summer","Year":2014},"Quarter":"autumn","RegistrationPeriods":[{"EndDate":"2014-06-22","StartDate":"2014-05-09"},{"EndDate":"2014-09-23","StartDate":"2014-06-23"},{"EndDate":"2014-09-30","StartDate":"2014-09-24"}],"RegistrationServicesStart":"2014-05-02","StudentAccountStart":null,"TimeScheduleConstruction":{"Bothell":false,"Seattle":false,"Tacoma":false},"TimeSchedulePublished":{"Bothell":true,"Seattle":true,"Tacoma":true},"Year":2014} diff --git a/myuw/resources/sws/file/student/v5/term/2015_autumn.json b/myuw/resources/sws/file/student/v5/term/2015_autumn.json new file mode 100644 index 0000000000..cd2fe46a11 --- /dev/null +++ b/myuw/resources/sws/file/student/v5/term/2015_autumn.json @@ -0,0 +1 @@ +{"ATermLastDay":null,"AcademicCatalog":"2010-08-01","BTermFirstDay":null,"CensusDay":"2015-10-09","FifthDay":"2015-10-06","FinancialAidYear":null,"FirstDay":"2015-09-30","FirstDayMedSchool":"2015-09-08","GradeSubmissionDeadline":"2015-12-22T17:00:00","GradingPeriodClose":"2016-01-06T17:00:00","GradingPeriodOpen":"2015-11-23T08:00:00","GradingPeriodOpenATerm":null,"LastAddDay":"2015-10-20","LastAddDayATerm":null,"LastAddDayBTerm":null,"LastDayOfClasses":"2015-12-11","LastDropDay":"2015-11-17","LastDropDayATerm":null,"LastDropDayBTerm":null,"LastDropDayNotRecorded":"2015-10-13","LastDropDayNotRecordedATerm":null,"LastDropDayNotRecordedBTerm":null,"LastFinalExamDay":"2015-12-18","NextTerm":{"Href":"\/student\/v5\/term\/2016,winter.json","Quarter":"winter","Year":2016},"PreviousTerm":{"Href":"\/student\/v5\/term\/2015,summer.json","Quarter":"summer","Year":2015},"Quarter":"autumn","RegistrationPeriods":[{"EndDate":"2015-06-21","StartDate":"2015-05-08"},{"EndDate":"2015-09-29","StartDate":"2015-06-22"},{"EndDate":"2015-10-06","StartDate":"2015-09-30"}],"RegistrationServicesStart":"2015-05-01","StudentAccountStart":null,"TimeScheduleConstruction":{"Bothell":false,"Seattle":false,"Tacoma":false},"TimeSchedulePublished":{"Bothell":true,"Seattle":true,"Tacoma":true},"Year":2015} diff --git a/myuw/resources/sws/file/student/v5/term/2015_spring.json b/myuw/resources/sws/file/student/v5/term/2015_spring.json new file mode 100644 index 0000000000..2bd0237aef --- /dev/null +++ b/myuw/resources/sws/file/student/v5/term/2015_spring.json @@ -0,0 +1 @@ +{"ATermLastDay":null,"AcademicCatalog":"2010-08-01","BTermFirstDay":null,"CensusDay":"2015-04-10","FifthDay":"2015-04-03","FinancialAidYear":null,"FirstDay":"2015-03-30","FirstDayMedSchool":null,"GradeSubmissionDeadline":"2015-06-16T17:00:00","GradingPeriodClose":"2015-07-01T17:00:00","GradingPeriodOpen":"2015-05-25T08:00:00","GradingPeriodOpenATerm":null,"LastAddDay":"2015-04-19","LastAddDayATerm":null,"LastAddDayBTerm":null,"LastDayOfClasses":"2015-06-05","LastDropDay":"2015-05-17","LastDropDayATerm":null,"LastDropDayBTerm":null,"LastDropDayNotRecorded":"2015-04-12","LastDropDayNotRecordedATerm":null,"LastDropDayNotRecordedBTerm":null,"LastFinalExamDay":"2015-06-12","NextTerm":{"Href":"\/student\/v5\/term\/2015,summer.json","Quarter":"summer","Year":2015},"PreviousTerm":{"Href":"\/student\/v5\/term\/2015,winter.json","Quarter":"winter","Year":2015},"Quarter":"spring","RegistrationPeriods":[{"EndDate":"2015-03-01","StartDate":"2015-02-13"},{"EndDate":"2015-03-29","StartDate":"2015-03-02"},{"EndDate":"2015-04-05","StartDate":"2015-03-30"}],"RegistrationServicesStart":"2015-02-06","StudentAccountStart":null,"TimeScheduleConstruction":{"Bothell":false,"Seattle":false,"Tacoma":false},"TimeSchedulePublished":{"Bothell":true,"Seattle":true,"Tacoma":true},"Year":2015} diff --git a/myuw/resources/sws/file/student/v5/term/2015_summer.json b/myuw/resources/sws/file/student/v5/term/2015_summer.json new file mode 100644 index 0000000000..dabebb6856 --- /dev/null +++ b/myuw/resources/sws/file/student/v5/term/2015_summer.json @@ -0,0 +1 @@ +{"ATermLastDay":"2015-07-22","AcademicCatalog":"2010-08-01","BTermFirstDay":"2015-07-23","CensusDay":"2015-07-02","FifthDay":"2015-06-26","FinancialAidYear":null,"FirstDay":"2015-06-22","FirstDayMedSchool":null,"GradeSubmissionDeadline":"2015-08-25T17:00:00","GradingPeriodClose":"2015-09-09T17:00:00","GradingPeriodOpen":"2015-08-14T08:00:00","GradingPeriodOpenATerm":"2015-07-16T08:00:00","LastAddDay":"2015-07-12","LastAddDayATerm":"2015-07-12","LastAddDayBTerm":"2015-07-29","LastDayOfClasses":"2015-08-21","LastDropDay":"2015-08-09","LastDropDayATerm":"2015-07-12","LastDropDayBTerm":"2015-08-12","LastDropDayNotRecorded":"2015-07-05","LastDropDayNotRecordedATerm":"2015-06-28","LastDropDayNotRecordedBTerm":"2015-07-29","LastFinalExamDay":"2015-08-21","NextTerm":{"Href":"\/student\/v5\/term\/2015,autumn.json","Quarter":"autumn","Year":2015},"PreviousTerm":{"Href":"\/student\/v5\/term\/2015,spring.json","Quarter":"spring","Year":2015},"Quarter":"summer","RegistrationPeriods":[{"EndDate":"2015-05-20","StartDate":"2015-04-13"},{"EndDate":"2015-06-21","StartDate":"2015-05-21"},{"EndDate":"2015-06-28","StartDate":"2015-06-22"}],"RegistrationServicesStart":"2015-04-06","StudentAccountStart":null,"TimeScheduleConstruction":{"Bothell":false,"Seattle":false,"Tacoma":false},"TimeSchedulePublished":{"Bothell":true,"Seattle":true,"Tacoma":true},"Year":2015} diff --git a/myuw/resources/sws/file/student/v5/term/2015_winter.json b/myuw/resources/sws/file/student/v5/term/2015_winter.json new file mode 100644 index 0000000000..abb677cd6b --- /dev/null +++ b/myuw/resources/sws/file/student/v5/term/2015_winter.json @@ -0,0 +1 @@ +{"ATermLastDay":null,"AcademicCatalog":"2010-08-01","BTermFirstDay":null,"CensusDay":"2015-01-16","FifthDay":"2015-01-09","FinancialAidYear":null,"FirstDay":"2015-01-05","FirstDayMedSchool":null,"GradeSubmissionDeadline":"2015-03-24T17:00:00","GradingPeriodClose":"2015-04-01T17:00:00","GradingPeriodOpen":"2015-02-23T08:00:00","GradingPeriodOpenATerm":null,"LastAddDay":"2015-01-25","LastAddDayATerm":null,"LastAddDayBTerm":null,"LastDayOfClasses":"2015-03-13","LastDropDay":"2015-02-22","LastDropDayATerm":null,"LastDropDayBTerm":null,"LastDropDayNotRecorded":"2015-01-18","LastDropDayNotRecordedATerm":null,"LastDropDayNotRecordedBTerm":null,"LastFinalExamDay":"2015-03-20","NextTerm":{"Href":"\/student\/v5\/term\/2015,spring.json","Quarter":"spring","Year":2015},"PreviousTerm":{"Href":"\/student\/v5\/term\/2014,autumn.json","Quarter":"autumn","Year":2014},"Quarter":"winter","RegistrationPeriods":[{"EndDate":"2014-11-23","StartDate":"2014-11-07"},{"EndDate":"2015-01-04","StartDate":"2014-11-24"},{"EndDate":"2015-01-11","StartDate":"2015-01-05"}],"RegistrationServicesStart":"2014-10-31","StudentAccountStart":null,"TimeScheduleConstruction":{"Bothell":false,"Seattle":false,"Tacoma":false},"TimeSchedulePublished":{"Bothell":true,"Seattle":true,"Tacoma":true},"Year":2015} diff --git a/myuw/test/dao/__init__.py b/myuw/test/dao/__init__.py index e69de29bb2..3330aa4653 100644 --- a/myuw/test/dao/__init__.py +++ b/myuw/test/dao/__init__.py @@ -0,0 +1,15 @@ +from django.test import TestCase +from myuw.dao import is_using_file_dao + + +FDAO_SWS = 'restclients.dao_implementation.sws.File' +LDAO_SWS = 'restclients.dao_implementation.sws.Live' + + +class TestDao(TestCase): + def test_is_using_file_dao(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + self.assertTrue(is_using_file_dao()) + + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=LDAO_SWS): + self.assertFalse(is_using_file_dao()) diff --git a/myuw/test/dao/card_display_dates.py b/myuw/test/dao/card_display_dates.py index f78d855fbf..2339689e2d 100644 --- a/myuw/test/dao/card_display_dates.py +++ b/myuw/test/dao/card_display_dates.py @@ -3,7 +3,7 @@ from django.test.client import RequestFactory from datetime import datetime from myuw.dao.term import get_default_date, get_comparison_datetime,\ - get_specific_quarter + get_specific_term from myuw.dao.card_display_dates import get_card_visibilty_date_values,\ in_show_grades_period, is_before_bof_term,\ is_before_eof_7d_after_class_start,\ @@ -555,7 +555,7 @@ def test_js_overrides(self): def test_in_show_grades_period(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - term = get_specific_quarter(2013, "winter") + term = get_specific_term(2013, "winter") now_request = RequestFactory().get("/") now_request.session = {} now_request.session["myuw_override_date"] = "2013-03-27" diff --git a/myuw/test/dao/registered_term.py b/myuw/test/dao/registered_term.py index a68b63ec88..bba224369d 100644 --- a/myuw/test/dao/registered_term.py +++ b/myuw/test/dao/registered_term.py @@ -2,7 +2,7 @@ from django.conf import settings from django.test.client import RequestFactory from restclients.models import ClassSchedule, Term, Section, Person -from myuw.dao.term import get_specific_quarter +from myuw.dao.term import get_specific_term from myuw.dao.schedule import _get_schedule from myuw.dao.registered_term import _get_registered_summer_terms,\ _must_displayed_separately, _get_registered_future_quarters @@ -18,7 +18,7 @@ def test_get_registered_summer_terms(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS): regid = "9136CCB8F66711D5BE060004AC494FFE" - term = get_specific_quarter(2013, "summer") + term = get_specific_term(2013, "summer") schedule = _get_schedule(regid, term) data = _get_registered_summer_terms(schedule.sections) self.assertTrue(data["B"]) @@ -28,7 +28,7 @@ def test_must_displayed_separately(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS): regid = "9136CCB8F66711D5BE060004AC494FFE" - term = get_specific_quarter(2013, "summer") + term = get_specific_term(2013, "summer") schedule = _get_schedule(regid, term) self.assertTrue(_must_displayed_separately(schedule)) @@ -40,11 +40,11 @@ def test_get_registered_future_quarters(self): now_request.session = {} regid = "9136CCB8F66711D5BE060004AC494FFE" - term1 = get_specific_quarter(2013, "summer") + term1 = get_specific_term(2013, "summer") schedule1 = _get_schedule(regid, term1) self.assertEqual(len(schedule1.sections), 3) - term2 = get_specific_quarter(2013, "autumn") + term2 = get_specific_term(2013, "autumn") schedule2 = _get_schedule(regid, term2) self.assertEqual(len(schedule2.sections), 1) diff --git a/myuw/test/dao/term.py b/myuw/test/dao/term.py index a4b68463ab..f79422569e 100644 --- a/myuw/test/dao/term.py +++ b/myuw/test/dao/term.py @@ -3,11 +3,16 @@ from django.conf import settings from django.test.client import RequestFactory from restclients.models.sws import ClassSchedule, Term, Section, Person -from myuw.dao.term import get_specific_quarter, is_past,\ - is_using_file_dao, get_default_date, get_comparison_date,\ - get_current_quarter, get_next_quarter, is_past, is_a_term,\ - is_b_term, is_half_summer_term, is_full_summer_term,\ - is_same_summer_term +from myuw.dao.term import get_specific_term, is_past,\ + get_default_date, get_comparison_date,\ + get_current_quarter, get_next_quarter, is_past,\ + get_next_non_summer_quarter, summer_term_overlaped,\ + get_next_autumn_quarter, is_in_summer_a_term, is_in_summer_b_term,\ + get_bod_current_term_class_start, get_eod_7d_after_class_start,\ + get_eod_current_term, get_eod_current_term_last_instruction,\ + get_bod_7d_before_last_instruction, get_eod_current_term_last_final_exam,\ + get_bod_class_start_quarter_after, get_eod_specific_quarter,\ + get_eod_specific_quarter_after, get_eod_specific_quarter_last_instruction FDAO_SWS = 'restclients.dao_implementation.sws.File' @@ -18,7 +23,7 @@ class TestTerm(TestCase): def test_get_term(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - term = get_specific_quarter(2013, "summer") + term = get_specific_term(2013, "summer") self.assertEqual(term.year, 2013) self.assertEqual(term.quarter, "summer") now_request = RequestFactory().get("/") @@ -27,14 +32,14 @@ def test_get_term(self): def test_is_past(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - term = get_specific_quarter(2014, "winter") + term = get_specific_term(2014, "winter") self.assertEqual(term.year, 2014) self.assertEqual(term.quarter, "winter") now_request = RequestFactory().get("/") now_request.session = {} self.assertFalse(is_past(term, now_request)) - term = get_specific_quarter(2013, "winter") + term = get_specific_term(2013, "winter") self.assertEqual(term.year, 2013) self.assertEqual(term.quarter, "winter") now_request = RequestFactory().get("/") @@ -55,13 +60,6 @@ def test_default_date(self): self.assertEquals(date.month, now.month) self.assertEquals(date.day, now.day) - def test_is_using_file_dao(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - self.assertTrue(is_using_file_dao()) - - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=LDAO_SWS): - self.assertFalse(is_using_file_dao()) - def test_comparison_date(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): now_request = RequestFactory().get("/") @@ -157,29 +155,205 @@ def test_next_quarter(self): self.assertEquals(quarter.year, 2013) self.assertEquals(quarter.quarter, 'summer') - def test_get_specific_quarter(self): + def test_is_past(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - quarter = get_specific_quarter(2013, 'spring') + quarter = get_specific_term(2013, 'autumn') + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2014-01-01" + self.assertTrue(is_past(quarter, now_request)) + + def test_get_next_non_summer_quarter(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-01" + quarter = get_next_non_summer_quarter(now_request) self.assertEquals(quarter.year, 2013) - self.assertEquals(quarter.quarter, 'spring') - quarter = get_specific_quarter(2013, 'autumn') + self.assertEquals(quarter.quarter, 'autumn') + + def test_get_next_autumn_quarter(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-01" + quarter = get_next_autumn_quarter(now_request) self.assertEquals(quarter.year, 2013) self.assertEquals(quarter.quarter, 'autumn') - def test_is_past(self): + def test_summer_term_overlaped(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - quarter = get_specific_quarter(2013, 'autumn') now_request = RequestFactory().get("/") now_request.session = {} - now_request.session["myuw_override_date"] = "2014-01-01" - self.assertTrue(is_past(quarter, now_request)) + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertTrue(summer_term_overlaped(now_request, 'A-term')) + self.assertFalse(summer_term_overlaped(now_request, 'Full-term')) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertTrue(summer_term_overlaped(now_request, 'B-term')) + self.assertTrue(summer_term_overlaped(now_request, 'Full-term')) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertTrue(summer_term_overlaped(now_request, 'None')) + self.assertTrue(summer_term_overlaped(now_request, '-')) + + def test_is_in_summer_a_term(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertTrue(is_in_summer_a_term(now_request)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertFalse(is_in_summer_a_term(now_request)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-26" + self.assertTrue(is_in_summer_b_term(now_request)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertFalse(is_in_summer_a_term(now_request)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertFalse(is_in_summer_b_term(now_request)) + + def test_get_eod_current_term_last_instruction(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-05-10" + self.assertEqual( + get_eod_current_term_last_instruction(now_request), + datetime(2013, 6, 8, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual( + get_eod_current_term_last_instruction(now_request, True), + datetime(2013, 7, 25, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual( + get_eod_current_term_last_instruction(now_request), + datetime(2013, 8, 24, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual( + get_eod_current_term_last_instruction(now_request, True), + datetime(2013, 8, 24, 0, 0, 0)) + + def test_get_bod_7d_before_last_instruction(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-05-10" + self.assertEqual(get_bod_7d_before_last_instruction(now_request), + datetime(2013, 5, 31, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_bod_7d_before_last_instruction(now_request), + datetime(2013, 7, 17, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_bod_7d_before_last_instruction(now_request), + datetime(2013, 8, 16, 0, 0, 0)) + + def test_get_bod_current_term_class_start(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-05-10" + self.assertEqual(get_bod_current_term_class_start(now_request), + datetime(2013, 4, 1, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_bod_current_term_class_start(now_request), + datetime(2013, 6, 24, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_bod_current_term_class_start(now_request), + datetime(2013, 6, 24, 0, 0, 0)) + + def test_get_eod_7d_after_class_start(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-05-10" + self.assertEqual(get_eod_7d_after_class_start(now_request), + datetime(2013, 4, 9, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_eod_7d_after_class_start(now_request), + datetime(2013, 7, 2, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_eod_7d_after_class_start(now_request), + datetime(2013, 7, 2, 0, 0, 0)) + + def test_get_bod_class_start_quarter_after(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + quarter = get_specific_term(2013, 'winter') + self.assertEqual(get_bod_class_start_quarter_after(quarter), + datetime(2013, 4, 1, 0, 0, 0)) + quarter = get_specific_term(2013, 'spring') + self.assertEqual(get_bod_class_start_quarter_after(quarter), + datetime(2013, 6, 24, 0, 0, 0)) + quarter = get_specific_term(2013, 'summer') + self.assertEqual(get_bod_class_start_quarter_after(quarter), + datetime(2013, 9, 25, 0, 0, 0)) + + def test_get_eod_current_term(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertEqual(get_eod_current_term(now_request), + datetime(2013, 3, 27, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual(get_eod_current_term(now_request, True), + datetime(2013, 7, 25, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual(get_eod_current_term(now_request), + datetime(2013, 8, 28, 0, 0, 0)) - def test_is_summer_term(self): - self.assertTrue(is_a_term('A-term')) - self.assertTrue(is_b_term('B-term')) - self.assertTrue(is_half_summer_term('A-term')) - self.assertTrue(is_half_summer_term('B-term')) - self.assertFalse(is_half_summer_term('Full-term')) - self.assertTrue(is_full_summer_term('Full-term')) - self.assertTrue(is_same_summer_term('A-term', 'a-term')) - self.assertFalse(is_same_summer_term('A-term', 'Full-term')) + def test_get_eod_current_term_last_final_exam(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertEqual( + get_eod_current_term_last_final_exam(now_request), + datetime(2013, 3, 23, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertEqual( + get_eod_current_term_last_final_exam(now_request, True), + datetime(2013, 7, 25, 0, 0, 0)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertEqual( + get_eod_current_term_last_final_exam(now_request), + datetime(2013, 8, 24, 0, 0, 0)) + + def test_get_eod_specific_quarter_last_instruction(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + self.assertEqual( + get_eod_specific_quarter_last_instruction(2013, "spring"), + datetime(2013, 6, 8, 0, 0, 0)) + self.assertEqual( + get_eod_specific_quarter_last_instruction(2013, "summer"), + datetime(2013, 8, 24, 0, 0, 0)) + + def test_get_eod_specific_quarter(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + self.assertEqual(get_eod_specific_quarter(2013, "autumn"), + datetime(2013, 12, 18, 0, 0, 0)) + self.assertEqual(get_eod_specific_quarter(2013, "summer"), + datetime(2013, 8, 28, 0, 0, 0)) + + def test_get_eod_specific_quarter_after(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + self.assertEqual(get_eod_specific_quarter_after(2013, "summer"), + datetime(2013, 12, 18, 0, 0, 0)) + self.assertEqual(get_eod_specific_quarter_after(2013, "spring"), + datetime(2013, 8, 28, 0, 0, 0)) diff --git a/myuw/test/dao/term_current.py b/myuw/test/dao/term_current.py deleted file mode 100644 index bf7f029089..0000000000 --- a/myuw/test/dao/term_current.py +++ /dev/null @@ -1,173 +0,0 @@ -from datetime import datetime -from django.test import TestCase -from django.conf import settings -from django.test.client import RequestFactory -from restclients.models.sws import ClassSchedule, Term, Section, Person -from myuw.dao.term.current import get_next_non_summer_quarter,\ - get_next_autumn_quarter, term_matched, is_in_summer_a_term,\ - get_eof_last_instruction, get_bof_7d_before_last_instruction,\ - get_bof_1st_instruction, get_eof_7d_after_class_start,\ - get_eof_term, get_eof_last_final_exam -from myuw.dao.term.specific import get_specific_quarter - - -FDAO_SWS = 'restclients.dao_implementation.sws.File' -LDAO_SWS = 'restclients.dao_implementation.sws.Live' - - -class TestTermCurrent(TestCase): - def test_get_next_non_summer_quarter(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-01" - quarter = get_next_non_summer_quarter(now_request) - self.assertEquals(quarter.year, 2013) - self.assertEquals(quarter.quarter, 'autumn') - - def test_get_next_autumn_quarter(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-01" - quarter = get_next_autumn_quarter(now_request) - self.assertEquals(quarter.year, 2013) - self.assertEquals(quarter.quarter, 'autumn') - - def testget_specific_quarter(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - quarter = get_specific_quarter(2013, 'spring') - self.assertEquals(quarter.year, 2013) - self.assertEquals(quarter.quarter, 'spring') - quarter = get_specific_quarter(2013, 'autumn') - self.assertEquals(quarter.year, 2013) - self.assertEquals(quarter.quarter, 'autumn') - - def test_term_matched(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertTrue(term_matched(now_request, 'A-term')) - self.assertFalse(term_matched(now_request, 'Full-term')) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertTrue(term_matched(now_request, 'B-term')) - self.assertTrue(term_matched(now_request, 'Full-term')) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertTrue(term_matched(now_request, 'None')) - self.assertTrue(term_matched(now_request, '-')) - - def test_is_in_summer_a_term(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertTrue(is_in_summer_a_term(now_request)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertFalse(is_in_summer_a_term(now_request)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertFalse(is_in_summer_a_term(now_request)) - - def test_get_eof_last_instruction(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-05-10" - self.assertEqual(get_eof_last_instruction(now_request), - datetime(2013, 6, 8, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_last_instruction(now_request, True), - datetime(2013, 7, 25, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_last_instruction(now_request), - datetime(2013, 8, 24, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_eof_last_instruction(now_request, True), - datetime(2013, 8, 24, 0, 0, 0)) - - def test_bof_7d_before_last_instruction(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-05-10" - self.assertEqual(get_bof_7d_before_last_instruction(now_request), - datetime(2013, 5, 31, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_bof_7d_before_last_instruction(now_request), - datetime(2013, 7, 17, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_bof_7d_before_last_instruction(now_request), - datetime(2013, 8, 16, 0, 0, 0)) - - def test_bof_1st_instruction(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-05-10" - self.assertEqual(get_bof_1st_instruction(now_request), - datetime(2013, 4, 1, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_bof_1st_instruction(now_request), - datetime(2013, 6, 24, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_bof_1st_instruction(now_request), - datetime(2013, 6, 24, 0, 0, 0)) - - def test_eof_7d_after_class_start(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-05-10" - self.assertEqual(get_eof_7d_after_class_start(now_request), - datetime(2013, 4, 9, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_7d_after_class_start(now_request), - datetime(2013, 7, 2, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_eof_7d_after_class_start(now_request), - datetime(2013, 7, 2, 0, 0, 0)) - - def test_eof_term(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertEqual(get_eof_term(now_request), - datetime(2013, 3, 27, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_term(now_request, True), - datetime(2013, 7, 25, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_eof_term(now_request), - datetime(2013, 8, 28, 0, 0, 0)) - - def test_eof_last_final_exam(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertEqual(get_eof_last_final_exam(now_request), - datetime(2013, 3, 23, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertEqual(get_eof_last_final_exam(now_request, True), - datetime(2013, 7, 25, 0, 0, 0)) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertEqual(get_eof_last_final_exam(now_request), - datetime(2013, 8, 24, 0, 0, 0)) diff --git a/myuw/test/dao/term_specific.py b/myuw/test/dao/term_specific.py deleted file mode 100644 index 5ca960a02f..0000000000 --- a/myuw/test/dao/term_specific.py +++ /dev/null @@ -1,45 +0,0 @@ -from datetime import datetime -from django.test import TestCase -from django.conf import settings -from restclients.models.sws import ClassSchedule, Term, Section, Person -from myuw.dao.term.specific import get_eof_term_yq,\ - get_eof_last_instruction_yq, get_eof_term_after_yq,\ - get_first_day_term_after_yq - - -FDAO_SWS = 'restclients.dao_implementation.sws.File' -LDAO_SWS = 'restclients.dao_implementation.sws.Live' - - -class TestTermSpecific(TestCase): - def test_get_eof_last_instruction_yq(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - self.assertEqual(get_eof_last_instruction_yq(2013, - "spring"), - datetime(2013, 6, 8, 0, 0, 0)) - self.assertEqual(get_eof_last_instruction_yq(2013, - "summer"), - datetime(2013, 8, 24, 0, 0, 0)) - - def test_get_first_day_term_after_yq(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - self.assertEqual(get_first_day_term_after_yq(2012, - "autumn"), - datetime(2013, 1, 7, 0, 0, 0)) - self.assertEqual(get_first_day_term_after_yq(2013, - "spring"), - datetime(2013, 6, 24, 0, 0, 0)) - - def test_get_eof_term_yq(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - self.assertEqual(get_eof_term_yq(2013, "autumn"), - datetime(2013, 12, 18, 0, 0, 0)) - self.assertEqual(get_eof_term_yq(2013, "summer"), - datetime(2013, 8, 28, 0, 0, 0)) - - def test_get_eof_term_after_yq(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - self.assertEqual(get_eof_term_after_yq(2013, "summer"), - datetime(2013, 12, 18, 0, 0, 0)) - self.assertEqual(get_eof_term_after_yq(2013, "spring"), - datetime(2013, 8, 28, 0, 0, 0)) diff --git a/myuw/tests.py b/myuw/tests.py index 7db8e178c8..e3eddfe826 100644 --- a/myuw/tests.py +++ b/myuw/tests.py @@ -7,9 +7,8 @@ from myuw.test.dao.notice import TestNotices from myuw.test.models import TestUserNotices from myuw.test.academic_events import TestAcademicEvents +from myuw.test.dao import TestDao from myuw.test.dao.term import TestTerm -from myuw.test.dao.term_current import TestTermCurrent -from myuw.test.dao.term_specific import TestTermSpecific from myuw.test.dao.canvas import TestCanvas from myuw.test.dao.card_display_dates import TestDisplayValues from myuw.test.userservice_validation import TestValidation diff --git a/myuw/views/api/future_schedule.py b/myuw/views/api/future_schedule.py index e0a3f3bc78..0df50d4834 100644 --- a/myuw/views/api/future_schedule.py +++ b/myuw/views/api/future_schedule.py @@ -1,6 +1,6 @@ import logging from django.http import HttpResponse -from myuw.dao.term import get_specific_quarter, is_past +from myuw.dao.term import get_specific_term, is_past from myuw.logger.timer import Timer from myuw.dao.card_display_dates import in_show_grades_period from myuw.views.api.base_schedule import StudClasSche @@ -23,7 +23,7 @@ def GET(self, request, year, quarter, summer_term=None): if summer_term and len(summer_term) > 1: smr_term = summer_term.title() - request_term = get_specific_quarter(year, quarter) + request_term = get_specific_term(year, quarter) if not request_term: return HttpResponse(status=404) diff --git a/myuw/views/api/other_quarters.py b/myuw/views/api/other_quarters.py index 1ef8cb901f..7bb835b982 100644 --- a/myuw/views/api/other_quarters.py +++ b/myuw/views/api/other_quarters.py @@ -4,7 +4,7 @@ from myuw.views.rest_dispatch import RESTDispatch from myuw.dao.registered_term import get_registered_future_quarters from myuw.dao.registered_term import should_highlight_future_quarters -from myuw.dao.term.current import get_next_non_summer_quarter +from myuw.dao.term import get_next_non_summer_quarter from myuw.logger.timer import Timer from myuw.logger.logresp import log_success_response diff --git a/myuw/views/api/textbook.py b/myuw/views/api/textbook.py index 7b8e1d22de..d2f63f910e 100644 --- a/myuw/views/api/textbook.py +++ b/myuw/views/api/textbook.py @@ -3,8 +3,8 @@ import json from myuw.dao.schedule import get_schedule_by_term from myuw.dao.schedule import filter_schedule_sections_by_summer_term -from myuw.dao.term import get_specific_quarter, get_current_quarter -from myuw.dao.term.current import get_current_summer_term +from myuw.dao.term import get_specific_term, get_current_quarter,\ + get_current_summer_term from myuw.dao.textbook import get_textbook_by_schedule from myuw.dao.textbook import get_verba_link_by_schedule from myuw.logger.timer import Timer @@ -28,7 +28,7 @@ def respond(self, year, quarter, summer_term): timer = Timer() logger = logging.getLogger(__name__) - term = get_specific_quarter(year=year, quarter=quarter) + term = get_specific_term(year=year, quarter=quarter) schedule = get_schedule_by_term(term) if summer_term is not None: summer_term = summer_term.replace(",", "") diff --git a/myuw/views/display_dates.py b/myuw/views/display_dates.py index c7ce22d856..7e6f98362a 100644 --- a/myuw/views/display_dates.py +++ b/myuw/views/display_dates.py @@ -11,8 +11,8 @@ from myuw.dao import get_user_model from myuw.dao.card_display_dates import get_values_by_date from myuw.dao.card_display_dates import get_card_visibilty_date_values -from myuw.dao.term import get_comparison_date, is_using_file_dao -from myuw.dao.term import get_default_date +from myuw.dao import is_using_file_dao +from myuw.dao.term import get_default_date, get_comparison_date from myuw.models import SeenRegistration from django.test.client import RequestFactory from restclients.sws.term import get_term_by_date From 8aa37143fdd463829e069ab789fa3ea859919267 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 5 Oct 2015 12:43:19 -0700 Subject: [PATCH 074/116] Use restclients.util.summer_term. --- myuw/dao/registered_term.py | 20 ++++++++++---------- myuw/dao/schedule.py | 11 +++++------ myuw/dao/term.py | 2 +- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/myuw/dao/registered_term.py b/myuw/dao/registered_term.py index b36b83a300..5d652dbd75 100644 --- a/myuw/dao/registered_term.py +++ b/myuw/dao/registered_term.py @@ -7,8 +7,8 @@ from django.utils import timezone from datetime import datetime, timedelta from myuw.models import SeenRegistration -from restclients.sws.section import is_half_summer_term,\ - is_full_summer_term, is_same_summer_term, is_a_term, is_b_term +from restclients.util.summer_term import is_full_summer_term,\ + is_same_summer_term, is_a_term, is_b_term from myuw.dao.term import get_current_summer_term,\ get_comparison_date, get_specific_term, get_current_quarter from myuw.dao.schedule import has_summer_quarter_section,\ @@ -37,7 +37,7 @@ def get_current_summer_term_in_schedule(schedule, request): return the current summer term """ summer_term = "" - if schedule.term.quarter == 'summer': + if schedule.term.is_summer_quarter(): if has_summer_quarter_section(schedule): if _must_displayed_separately(schedule): summer_term = get_current_summer_term(request) @@ -53,14 +53,14 @@ def get_registered_future_quarters(request): """ next_quar_sche = get_next_quarter_schedule(request) next_autumn_sche = None - if next_quar_sche and next_quar_sche.term.quarter == 'summer': + if next_quar_sche and next_quar_sche.term.is_summer_quarter(): next_autumn_sche = get_next_autumn_quarter_schedule(request) # MUWM-3010 current = get_current_quarter(request) - if current.quarter == "summer": + if current.is_summer_quarter(): summer_term = get_current_summer_term(request) - if summer_term == "a-term": + if is_a_term(summer_term): summer = get_current_quarter_schedule(request) next_autumn_sche = next_quar_sche next_quar_sche = summer @@ -83,7 +83,7 @@ def _get_registered_future_quarters(request, next_quar_sche, next_autumn_sche): if next_quar_sche is not None and len(next_quar_sche.sections) > 0: next_quarter = next_quar_sche.term - if next_quarter.quarter == "summer": + if next_quarter.is_summer_quarter(): sumr_tms = _get_registered_summer_terms(next_quar_sche.sections) # MUWM-3010 # Filter out A-term and Full-term sections once summer term has @@ -95,7 +95,7 @@ def _get_registered_future_quarters(request, next_quar_sche, next_autumn_sche): bterm_started = False has_b = sumr_tms[B_TERM] - if current.quarter == "summer": + if current.is_summer_quarter(): if now >= current.first_day_quarter: summer_started = True @@ -205,9 +205,9 @@ def should_highlight_future_quarters(schedule, request): for term in schedule: summer_term = "F" - if term["summer_term"] == "a-term": + if is_a_term(term["summer_term"]): summer_term = "A" - if term["summer_term"] == "b-term": + if is_b_term(term["summer_term"]): summer_term = "B" sr_get_or_create = SeenRegistration.objects.get_or_create diff --git a/myuw/dao/schedule.py b/myuw/dao/schedule.py index 9100dc5aee..ffebf12e9f 100644 --- a/myuw/dao/schedule.py +++ b/myuw/dao/schedule.py @@ -6,8 +6,7 @@ import traceback from restclients.models.sws import ClassSchedule from restclients.sws.registration import get_schedule_by_regid_and_term -from restclients.sws.section import is_half_summer_term,\ - is_full_summer_term, is_same_summer_term +from restclients.util.summer_term import is_half_summer_term from myuw.logger.timer import Timer from myuw.logger.logback import log_resp_time, log_exception from myuw.dao.pws import get_regid_of_current_user @@ -81,12 +80,12 @@ def filter_schedule_sections_by_summer_term(schedule, summer_term): """ Filter the schedule sections by the give summer_term. """ - if (has_summer_quarter_section(schedule) and - is_half_summer_term(summer_term)): + if has_summer_quarter_section(schedule) and\ + is_half_summer_term(summer_term): filtered_sections = [] for section in schedule.sections: - if (is_full_summer_term(section.summer_term) or - is_same_summer_term(section.summer_term, summer_term)): + if section.is_full_summer_term() or\ + section.is_same_summer_term(summer_term): filtered_sections.append(section) schedule.sections = filtered_sections diff --git a/myuw/dao/term.py b/myuw/dao/term.py index 6a8537914a..ccfd46c782 100644 --- a/myuw/dao/term.py +++ b/myuw/dao/term.py @@ -9,7 +9,7 @@ from restclients.models.sws import Term from restclients.util.datetime_convertor import convert_to_begin_of_day,\ convert_to_end_of_day -from restclients.sws.section import is_a_term, is_b_term,\ +from restclients.util.summer_term import is_a_term, is_b_term,\ is_full_summer_term, is_same_summer_term from restclients.sws.term import get_term_by_date, get_specific_term,\ get_current_term, get_next_term, get_previous_term,\ From 6067e6070224c3ba41a3bf7011e049179e899d34 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 5 Oct 2015 14:30:37 -0700 Subject: [PATCH 075/116] Moved summer_term_overlaped from dao.term into dao.iasystem. --- myuw/dao/iasystem.py | 22 ++++++++++++++--- myuw/dao/registered_term.py | 2 +- myuw/dao/schedule.py | 10 +++++++- myuw/dao/term.py | 18 +------------- myuw/test/dao/iasystem.py | 42 +++++++++++++++++++++++++++++---- myuw/test/dao/term.py | 20 ++-------------- myuw/views/api/base_schedule.py | 2 +- 7 files changed, 70 insertions(+), 46 deletions(-) diff --git a/myuw/dao/iasystem.py b/myuw/dao/iasystem.py index 3681a5ce3b..91747d00ab 100644 --- a/myuw/dao/iasystem.py +++ b/myuw/dao/iasystem.py @@ -3,9 +3,10 @@ from restclients.pws import PWS from restclients.exceptions import DataFailureException from restclients.iasystem import evaluation +from restclients.util.summer_term import is_b_term from myuw.dao.student_profile import get_profile_of_current_user from myuw.dao.term import get_comparison_datetime,\ - convert_to_begin_of_day, summer_term_overlaped,\ + convert_to_begin_of_day, get_current_summer_term,\ get_bod_7d_before_last_instruction, get_eod_current_term @@ -29,7 +30,22 @@ def _get_evaluations_by_section_and_student(section, student_number): return None -def json_for_evaluation(request, evaluations, section_summer_term): +def summer_term_overlaped(request, given_section): + """ + @return true if: + 1). this is not a summer quarter or + 2). the given_summer_term is overlaped with the + current summer term in the request + """ + current_summer_term = get_current_summer_term(request) + if given_section is None or current_summer_term is None: + return True + return (given_section.is_same_summer_term(current_summer_term) or + given_section.is_full_summer_term() and + is_b_term(current_summer_term)) + + +def json_for_evaluation(request, evaluations, section): if evaluations is None: return None local_tz = timezone.get_current_timezone() @@ -49,7 +65,7 @@ def json_for_evaluation(request, evaluations, section_summer_term): pws = PWS() json_data = [] for evaluation in evaluations: - if summer_term_overlaped(request, section_summer_term): + if summer_term_overlaped(request, section): if now < evaluation.eval_open_date or\ now >= evaluation.eval_close_date: continue diff --git a/myuw/dao/registered_term.py b/myuw/dao/registered_term.py index 5d652dbd75..1f18047155 100644 --- a/myuw/dao/registered_term.py +++ b/myuw/dao/registered_term.py @@ -8,7 +8,7 @@ from datetime import datetime, timedelta from myuw.models import SeenRegistration from restclients.util.summer_term import is_full_summer_term,\ - is_same_summer_term, is_a_term, is_b_term + is_a_term, is_b_term from myuw.dao.term import get_current_summer_term,\ get_comparison_date, get_specific_term, get_current_quarter from myuw.dao.schedule import has_summer_quarter_section,\ diff --git a/myuw/dao/schedule.py b/myuw/dao/schedule.py index ffebf12e9f..0459552b9c 100644 --- a/myuw/dao/schedule.py +++ b/myuw/dao/schedule.py @@ -6,7 +6,7 @@ import traceback from restclients.models.sws import ClassSchedule from restclients.sws.registration import get_schedule_by_regid_and_term -from restclients.util.summer_term import is_half_summer_term +from restclients.util.summer_term import is_a_term, is_b_term from myuw.logger.timer import Timer from myuw.logger.logback import log_resp_time, log_exception from myuw.dao.pws import get_regid_of_current_user @@ -98,3 +98,11 @@ def has_summer_quarter_section(schedule): len(schedule.sections) > 0 and schedule.term.is_summer_quarter() ) + + +def is_half_summer_term(str): + """ + return True if the given str is A-term or B-term + @return True if the given str is A-term or B-term + """ + return is_a_term(str) or is_b_term(str) diff --git a/myuw/dao/term.py b/myuw/dao/term.py index ccfd46c782..9c58c5bded 100644 --- a/myuw/dao/term.py +++ b/myuw/dao/term.py @@ -9,8 +9,7 @@ from restclients.models.sws import Term from restclients.util.datetime_convertor import convert_to_begin_of_day,\ convert_to_end_of_day -from restclients.util.summer_term import is_a_term, is_b_term,\ - is_full_summer_term, is_same_summer_term +from restclients.util.summer_term import is_a_term, is_b_term from restclients.sws.term import get_term_by_date, get_specific_term,\ get_current_term, get_next_term, get_previous_term,\ get_term_before, get_term_after, get_next_autumn_term,\ @@ -168,21 +167,6 @@ def get_next_autumn_quarter(request): return get_next_autumn_term(get_current_quarter(request)) -def summer_term_overlaped(request, given_summer_term): - """ - @return true if: - 1). this is not a summer quarter or - 2). the given_summer_term is overlaped with the - current summer term in the request - """ - current_summer_term = get_current_summer_term(request) - if given_summer_term is None or current_summer_term is None: - return True - return (is_same_summer_term(current_summer_term, given_summer_term) or - is_full_summer_term(given_summer_term) and - is_b_term(current_summer_term)) - - def get_eod_current_summer_aterm(request): """ @return the datetime object of the end of day for the current diff --git a/myuw/test/dao/iasystem.py b/myuw/test/dao/iasystem.py index 1f514e334f..b5fdaa72ef 100644 --- a/myuw/test/dao/iasystem.py +++ b/myuw/test/dao/iasystem.py @@ -6,7 +6,7 @@ from restclients.models.sws import Term, Section from restclients.iasystem.evaluation import get_evaluation_by_id from myuw.dao.iasystem import json_for_evaluation,\ - _get_evaluations_by_section_and_student + _get_evaluations_by_section_and_student, summer_term_overlaped from myuw.dao.schedule import _get_schedule @@ -17,6 +17,33 @@ class IASystemTest(TestCase): + def test_summer_term_overlaped(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): + term = Term() + term.year = 2013 + term.quarter = "summer" + section = new Section() + section.summer_term = "A-term" + section.term = term + + now_request = RequestFactory().get("/") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-07-10" + self.assertTrue(summer_term_overlaped(now_request, section)) + section.summer_term = "Full-term" + self.assertFalse(summer_term_overlaped(now_request, section)) + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-10" + self.assertTrue(summer_term_overlaped(now_request, section)) + + section.summer_term = "B-term" + self.assertTrue(summer_term_overlaped(now_request, section)) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-10" + self.assertTrue(summer_term_overlaped(now_request, 'None')) + self.assertTrue(summer_term_overlaped(now_request, '-')) + def test_get_evaluations_by_section(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, @@ -26,6 +53,9 @@ def test_get_evaluations_by_section(self): term = Term() term.year = 2013 term.quarter = "summer" + section = new Section() + section.summer_term = "A-term" + section.term = term schedule = _get_schedule(regid, term) evals = None for section in schedule.sections: @@ -43,16 +73,18 @@ def test_get_evaluations_by_section(self): datetime.datetime(2013, 7, 23, 6, 59, 59, tzinfo=pytz.utc)) + now_request = RequestFactory().get("/") # after open date, before show date now_request.session = {} now_request.session["myuw_override_date"] = "2013-07-16" - json_data = json_for_evaluation(now_request, evals, "A-term") + json_data = json_for_evaluation(now_request, evals, section) self.assertIsNone(json_data) + # after show date now_request.session = {} now_request.session["myuw_override_date"] = "2013-07-17" - json_data = json_for_evaluation(now_request, evals, "A-term") + json_data = json_for_evaluation(now_request, evals, section) self.assertIsNotNone(json_data) self.assertEqual(len(json_data['evals']), 1) self.assertEqual(json_data['close_date'], @@ -60,7 +92,7 @@ def test_get_evaluations_by_section(self): # before close date now_request.session = {} now_request.session["myuw_override_date"] = "2013-07-22" - json_data = json_for_evaluation(now_request, evals, "A-term") + json_data = json_for_evaluation(now_request, evals, section) self.assertIsNotNone(json_data) self.assertEqual(len(json_data['evals']), 1) self.assertEqual(json_data['close_date'], @@ -68,7 +100,7 @@ def test_get_evaluations_by_section(self): # before hide date but after close date now_request.session = {} now_request.session["myuw_override_date"] = "2013-07-24" - json_data = json_for_evaluation(now_request, evals, "A-term") + json_data = json_for_evaluation(now_request, evals, section) self.assertIsNone(json_data) def test_json_for_evaluation(self): diff --git a/myuw/test/dao/term.py b/myuw/test/dao/term.py index f79422569e..7c2cb38ace 100644 --- a/myuw/test/dao/term.py +++ b/myuw/test/dao/term.py @@ -6,8 +6,8 @@ from myuw.dao.term import get_specific_term, is_past,\ get_default_date, get_comparison_date,\ get_current_quarter, get_next_quarter, is_past,\ - get_next_non_summer_quarter, summer_term_overlaped,\ - get_next_autumn_quarter, is_in_summer_a_term, is_in_summer_b_term,\ + get_next_non_summer_quarter, get_next_autumn_quarter,\ + is_in_summer_a_term, is_in_summer_b_term,\ get_bod_current_term_class_start, get_eod_7d_after_class_start,\ get_eod_current_term, get_eod_current_term_last_instruction,\ get_bod_7d_before_last_instruction, get_eod_current_term_last_final_exam,\ @@ -181,22 +181,6 @@ def test_get_next_autumn_quarter(self): self.assertEquals(quarter.year, 2013) self.assertEquals(quarter.quarter, 'autumn') - def test_summer_term_overlaped(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - now_request = RequestFactory().get("/") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-07-10" - self.assertTrue(summer_term_overlaped(now_request, 'A-term')) - self.assertFalse(summer_term_overlaped(now_request, 'Full-term')) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-10" - self.assertTrue(summer_term_overlaped(now_request, 'B-term')) - self.assertTrue(summer_term_overlaped(now_request, 'Full-term')) - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-10" - self.assertTrue(summer_term_overlaped(now_request, 'None')) - self.assertTrue(summer_term_overlaped(now_request, '-')) - def test_is_in_summer_a_term(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): now_request = RequestFactory().get("/") diff --git a/myuw/views/api/base_schedule.py b/myuw/views/api/base_schedule.py index 9247792057..b79e153146 100644 --- a/myuw/views/api/base_schedule.py +++ b/myuw/views/api/base_schedule.py @@ -85,7 +85,7 @@ def load_schedule(request, schedule, summer_term=""): evaluation_json_data = json_for_evaluation( request, get_evaluations_by_section(section), - section.summer_term) + section) if evaluation_json_data is not None: section_data["evaluation_data"] = evaluation_json_data From 423af5fb0260d7a4ffcbffc52c8a9f40677259e3 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 12 Oct 2015 15:50:19 -0700 Subject: [PATCH 076/116] Add mock data for testing IASYSTEM WEB SERVICE, Seattle Domain on back support page. --- ..._name_Spring_curriculum_abbreviation_TRAIN | 272 ++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 myuw/resources/iasystem/uw/api/v1/evaluation_section_id_A_year_2013_course_number_100_term_name_Spring_curriculum_abbreviation_TRAIN diff --git a/myuw/resources/iasystem/uw/api/v1/evaluation_section_id_A_year_2013_course_number_100_term_name_Spring_curriculum_abbreviation_TRAIN b/myuw/resources/iasystem/uw/api/v1/evaluation_section_id_A_year_2013_course_number_100_term_name_Spring_curriculum_abbreviation_TRAIN new file mode 100644 index 0000000000..1abf535b5b --- /dev/null +++ b/myuw/resources/iasystem/uw/api/v1/evaluation_section_id_A_year_2013_course_number_100_term_name_Spring_curriculum_abbreviation_TRAIN @@ -0,0 +1,272 @@ +{ + "collection": { + "queries": [ + { + "rel": "collection filter", + "prompt": "Evaluation Search Resource", + "href": "https://uw.iasysdev.org/api/v1/evaluation", + "data": [ + { + "required": true, + "name": "year", + "prompt": "Year" + }, + { + "required": true, + "prompt": "Term Name", + "name": "term_name" + }, + { + "prompt": "Curriculum Abbreviation", + "name": "curriculum_abbreviation" + }, + { + "name": "course_number", + "prompt": "Course Number" + }, + { + "name": "section_id", + "prompt": "Section ID" + }, + { + "name": "student_id", + "prompt": "Student ID" + } + ] + } + ], + "items": [ + { "meta": [ + { + "value": "evaluation", + "name": "type" + }, + { + "value": "1", + "name": "id" + }, + { + "value": "2", + "name": "childId" + }, + { + "value": "3", + "name": "childId" + } + ], + "data": [ + { + "prompt": "Id", + "name": "id", + "value": "136617" + }, + { + "name": "year", + "prompt": "Year", + "value": "2013" + }, + { + "name": "termName", + "prompt": "Term", + "value": "Spring" + }, + { + "prompt": "Delivery Method", + "name": "deliveryMethod", + "value": "Online" + }, + { + "prompt": "Status", + "name": "status", + "value": "Closed" + }, + { + "name": "openDate", + "prompt": "Open Date", + "value": "2013-05-30T15:00:00Z" + }, + { + "prompt": "Close Date", + "name": "closeDate", + "value": "2013-07-01T07:59:59Z" + } + ], + "links": [ + { + "href": "https://uw.iasysdev.org/survey/136617", + "rel": "publishedto", + "prompt": "Evaluation URL" + } + ], + "href": "https://uw.iasysdev.org/api/v1/evaluation/136617" + }, + { "meta": [ + { + "value": "section", + "name": "type" + }, + { + "name": "id", + "value": "2" + } + ], + "data": [ + { + "value": "17169", + "name": "instCourseId" + }, + { + "name": "year", + "value": "2013" + }, + { + "name": "termName", + "value": "Spring" + }, + { + "value": "TRAIN", + "name": "curriculumAbbreviation" + }, + { + "name": "courseNumber", + "value": "100" + }, + { + "name": "sectionId", + "value": "A" + }, + { + "name": "courseTitle", + "value": "Train One Hundred" + } + ] + }, + { "data": [ + { + "name": "instInstructorId", + "value": "123456789" + }, + { + "name": "firstName", + "value": "Steven" + }, + { + "value": "Herbert", + "name": "lastName" + } + ], + "meta": [ + { + "name": "type", + "value": "instructor" + }, + { + "name": "id", + "value": "3" + } + ] + }, + + {"href":"https://demo.iasystem.org/api/v1/evaluation/96956", + "meta":[{"value":"evaluation", + "name":"type"}, + {"value":"4", + "name":"id"}, + {"value":"2", + "name":"childId"}, + {"value":"5", + "name":"childId"}], + "links":[{"prompt":"Evaluation URL", + "rel":"publishedto", + "href":"https://demo.iasystem.org/survey/96956"}], + "data":[{"prompt":"Id", + "value":"96956", + "name":"id"}, + {"value":"2013", + "prompt":"Year", + "name":"year"}, + {"prompt":"Term", + "value":"Spring", + "name":"termName"}, + {"prompt":"Delivery Method", + "value":"Online", + "name":"deliveryMethod"}, + {"name":"status", + "value":"Pending", + "prompt":"Status"}, + {"name":"openDate", + "prompt":"Open Date", + "value":"2013-06-05T07:00:00Z"}, + {"name":"closeDate", + "prompt":"Close Date", + "value":"2013-06-17T06:59:59Z"}]}, + {"meta":[{"name":"type", + "value":"instructor"}, + {"value":"5", + "name":"id"}], + "data":[{"name":"instInstructorId", + "value":"123456782"}, + {"value":"see pws", + "name":"firstName"}, + {"name":"lastName", + "value":"see pws"}]}, + + {"links":[{"rel":"publishedto", + "prompt":"Evaluation URL", + "href":"https://uw.iasystem.org/survey/96957"}], + "data":[{"name":"id", + "value":"96957", + "prompt":"Id"}, + {"prompt":"Year", + "value":"2013", + "name":"year"}, + {"prompt":"Term", + "value":"Spring", + "name":"termName"}, + {"prompt":"Delivery Method", + "value":"Online", + "name":"deliveryMethod"}, + {"value":"Pending", + "prompt":"Status", + "name":"status"}, + {"name":"openDate", + "value":"2013-06-10T07:00:00Z", + "prompt":"Open Date"}, + {"name":"closeDate", + "value":"2013-06-19T06:59:59Z", + "prompt":"Close Date"}], + "meta":[{"name":"type", + "value":"evaluation"}, + {"value":"6", + "name":"id"}, + {"name":"childId", + "value":"2"}, + {"value":"7", + "name":"childId"}], + "href":"https://uw.iasystem.org/api/v1/evaluation/96957"}, + {"data":[{"name":"instInstructorId", + "value":"123456798"}, + {"value":"see pws", + "name":"firstName"}, + {"value":"see pws", + "name":"lastName"}], + "meta":[{"value":"instructor", + "name":"type"}, + {"value":"7", + "name":"id"}]}], + "links": [ + { + "rel": "home", + "prompt": "IASystem v1 Web API", + "href": "https://uw.iasysdev.org/api/v1" + }, + { + "prompt": "IASystem Evaluation Listing", + "rel": "self", + "href": "https://uw.iasysdev.org/api/v1/evaluation?section_id=A&curriculum_abbreviation=LSJ&course_number=200&term_name=Autumn&year=2014" + } + ], + "href": "https://uw.iasysdev.org/api/v1/evaluation", + "version": "1.0" + } +} \ No newline at end of file From 89f98e68678ff242eac9630a857a08fc15aa9eae Mon Sep 17 00:00:00 2001 From: William Washington Date: Thu, 15 Oct 2015 16:18:45 -0700 Subject: [PATCH 077/116] adding static PCE card to landing page (needs to be made into real card), and PCE message to visual schedule. both need logic added to display for PCE only. for MUWM-3406. --- myuw/static/css/mobile.less | 19 +++++++++++++++++++ .../handlebars/card/schedule/visual.html | 5 +++++ myuw/templates/handlebars/landing.html | 13 +++++++++++++ 3 files changed, 37 insertions(+) diff --git a/myuw/static/css/mobile.less b/myuw/static/css/mobile.less index 35d4317b73..35707bd799 100644 --- a/myuw/static/css/mobile.less +++ b/myuw/static/css/mobile.less @@ -635,6 +635,25 @@ body { } + // PCE card & PCE notice on Visual Schedule + .PCE-notice { + background-color: #fcf9e3; + i { font-size: 2em; padding-right: .5em; color:#85754d;} + h3 { display: inline-block;} + } + + .PCE-vs-notice { + background-color: #fcf9e3; + margin: -10px -10px 2em; + padding: 10px; + h3.pce-notice { font-size: 14px; + display: inline-block; + padding-right: .5em; + margin: 0; + } + i {padding-right: .5em;color:#85754d;} + } + // Grades card #GradeCard { diff --git a/myuw/templates/handlebars/card/schedule/visual.html b/myuw/templates/handlebars/card/schedule/visual.html index c513b986bb..fec1016135 100644 --- a/myuw/templates/handlebars/card/schedule/visual.html +++ b/myuw/templates/handlebars/card/schedule/visual.html @@ -3,6 +3,11 @@ {{#if total_sections}}
    + +
    +

    PCE Classes Not Displayed -

    Please visit the old MyUW to view your PCE classes.
    + +

    Your {{ucfirst quarter}} {{year}} final exam

    diff --git a/myuw/templates/handlebars/landing.html b/myuw/templates/handlebars/landing.html index 31a5173717..4c4fb4558a 100644 --- a/myuw/templates/handlebars/landing.html +++ b/myuw/templates/handlebars/landing.html @@ -7,6 +7,19 @@

    Summary of courses and accounts

    + + +
    +
    +
    +

    PCE Classes Not Displayed

    +

    Your PCE schedule is not yet available in this version of MyUW. Please visit the old MyUW (http://myuw.washington.edu/servlet/main) to view your PCE classes, content, and relevant dates.

    +
    +
    +
    + + +
    From 60c5d812dc2b221b2f8da512e81b7130a9d8250f Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 16 Oct 2015 16:08:36 -0700 Subject: [PATCH 078/116] Resolve MUWM-3406 --- .../effective_member/jinter | 14 +++++++ myuw/static/js/banner/pce.js | 20 ++++++++++ myuw/static/js/card/pce_tuition.js | 2 +- myuw/static/js/landing.js | 3 ++ myuw/templates/base.html | 1 + myuw/templates/handlebars/banner/pce.html | 12 ++++++ myuw/templates/handlebars/landing.html | 40 +++++++------------ myuw/templates/index.html | 1 + 8 files changed, 66 insertions(+), 27 deletions(-) create mode 100644 myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_extension-student/effective_member/jinter create mode 100644 myuw/static/js/banner/pce.js create mode 100644 myuw/templates/handlebars/banner/pce.html diff --git a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_extension-student/effective_member/jinter b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_extension-student/effective_member/jinter new file mode 100644 index 0000000000..fae8e1cbeb --- /dev/null +++ b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_extension-student/effective_member/jinter @@ -0,0 +1,14 @@ + + + + + + +
    {status}
    + + diff --git a/myuw/static/js/banner/pce.js b/myuw/static/js/banner/pce.js new file mode 100644 index 0000000000..254beaab5b --- /dev/null +++ b/myuw/static/js/banner/pce.js @@ -0,0 +1,20 @@ +var PceBanner = { + dom_target: undefined, + + render_init: function(dom_taget) { + PceBanner.dom_target = dom_taget; + PceBanner._render(); + }, + + _render: function () { + if (user.pce) { + var source = $("#pce_banner").html(); + var template = Handlebars.compile(source); + PceBanner.dom_target.html(template()); + LogUtils.cardLoaded(PceBanner.name, PceBanner.dom_target); + } + else { + PceBanner.dom_target.hide(); + } + } +}; diff --git a/myuw/static/js/card/pce_tuition.js b/myuw/static/js/card/pce_tuition.js index de571ed56a..2176791f59 100644 --- a/myuw/static/js/card/pce_tuition.js +++ b/myuw/static/js/card/pce_tuition.js @@ -10,7 +10,7 @@ var PCETuitionCard = { render_error: function () { - PCETuitionCard.dom_target.html(CardWithError.render()); + PCETuitionCard.dom_target.html(CardWithError.render("PCE Tuition Card")); }, render_upon_data: function() { diff --git a/myuw/static/js/landing.js b/myuw/static/js/landing.js index b2b7e91e52..a9d339f244 100644 --- a/myuw/static/js/landing.js +++ b/myuw/static/js/landing.js @@ -16,6 +16,8 @@ var Landing = { NoticeBanner.render_init($("#notice_banner_location")); + PceBanner.render_init($("#pce_banner_location")); + Landing.load_cards_for_viewport(); // Set initial display state Landing.is_desktop = Landing.get_is_desktop(); @@ -47,6 +49,7 @@ var Landing = { Landing._load_mobile_cards(); } }, + _load_desktop_cards: function() { Landing._reset_content_divs(); var desktop_body_cards = [ diff --git a/myuw/templates/base.html b/myuw/templates/base.html index 7c14fd6534..d069779232 100644 --- a/myuw/templates/base.html +++ b/myuw/templates/base.html @@ -276,6 +276,7 @@ + diff --git a/myuw/templates/handlebars/banner/pce.html b/myuw/templates/handlebars/banner/pce.html new file mode 100644 index 0000000000..072ba95edf --- /dev/null +++ b/myuw/templates/handlebars/banner/pce.html @@ -0,0 +1,12 @@ +{% load templatetag_handlebars %} + {% tplhandlebars "pce_banner" %} + +
    +
    +
    +

    PCE Classes Not Displayed

    +

    Your PCE schedule is not yet available in this version of MyUW. Please visit the old MyUW (http://myuw.washington.edu/servlet/main) to view your PCE classes, content, and relevant dates.

    +
    +
    +
    +{% endtplhandlebars %} diff --git a/myuw/templates/handlebars/landing.html b/myuw/templates/handlebars/landing.html index 4c4fb4558a..e44c7ba3f7 100644 --- a/myuw/templates/handlebars/landing.html +++ b/myuw/templates/handlebars/landing.html @@ -1,32 +1,20 @@ {% load templatetag_handlebars %} {% tplhandlebars "landing" %} -

    Summary of courses and accounts

    -
    -
    -
    -
    -
    - - -
    -
    -
    -

    PCE Classes Not Displayed

    -

    Your PCE schedule is not yet available in this version of MyUW. Please visit the old MyUW (http://myuw.washington.edu/servlet/main) to view your PCE classes, content, and relevant dates.

    -
    -
    -
    - - - -
    -
    -
    -
    -
    -
    -
    +

    Summary of courses and accounts

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    {% endtplhandlebars %} diff --git a/myuw/templates/index.html b/myuw/templates/index.html index f157dbeef6..08881a2580 100644 --- a/myuw/templates/index.html +++ b/myuw/templates/index.html @@ -9,6 +9,7 @@ {% include "handlebars/banner/profile.html" %} {% include "handlebars/banner/notice.html" %} {% include "handlebars/banner/calendar.html" %} + {% include "handlebars/banner/pce.html" %} {% include "handlebars/card/error.html" %} {% include "handlebars/card/academic.html" %} {% include "handlebars/card/fin_aid.html" %} From 30998c27fe069cc5eb6b721edbb03763a74c2977 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 22 Oct 2015 17:03:19 -0700 Subject: [PATCH 079/116] Resolve MUWM-3406 - a PCE message at the top of the visual schedule. --- myuw/static/js/card/schedule/visual.js | 3 ++- myuw/templates/handlebars/banner/pce.html | 2 +- .../handlebars/card/schedule/visual.html | 19 +++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/myuw/static/js/card/schedule/visual.js b/myuw/static/js/card/schedule/visual.js index 89609683da..fe8ab7208d 100644 --- a/myuw/static/js/card/schedule/visual.js +++ b/myuw/static/js/card/schedule/visual.js @@ -42,7 +42,7 @@ var VisualScheduleCard = { _render: function() { var term = VisualScheduleCard.term; var course_data = WSData.normalized_course_data(term); - if (course_data.sections.length === 0) { + if (course_data.sections.length === 0 && !user.pce) { VisualScheduleCard.dom_target.html(CardWithNoCourse.render(term)); return; } @@ -55,6 +55,7 @@ var VisualScheduleCard = { VisualScheduleCard.shown_am_marker = false; var days = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]; var visual_data = { + is_pce: user.pce, total_sections: course_data.sections.length, year: course_data.year, quarter: course_data.quarter, diff --git a/myuw/templates/handlebars/banner/pce.html b/myuw/templates/handlebars/banner/pce.html index 072ba95edf..f250a5346b 100644 --- a/myuw/templates/handlebars/banner/pce.html +++ b/myuw/templates/handlebars/banner/pce.html @@ -5,7 +5,7 @@

    PCE Classes Not Displayed

    -

    Your PCE schedule is not yet available in this version of MyUW. Please visit the old MyUW (http://myuw.washington.edu/servlet/main) to view your PCE classes, content, and relevant dates.

    +

    Your PCE schedule is not yet available in this version of MyUW. Please visit the old MyUW to view your PCE classes, content, and relevant dates.

    diff --git a/myuw/templates/handlebars/card/schedule/visual.html b/myuw/templates/handlebars/card/schedule/visual.html index fec1016135..d8ca53b274 100644 --- a/myuw/templates/handlebars/card/schedule/visual.html +++ b/myuw/templates/handlebars/card/schedule/visual.html @@ -1,13 +1,15 @@ {% load templatetag_handlebars %} {% tplhandlebars "visual_schedule_card_content" %} -{{#if total_sections}} +
    - + {{#if is_pce}}
    -

    PCE Classes Not Displayed -

    Please visit the old MyUW to view your PCE classes.
    - - +

    PCE Classes Not Displayed -

    +

    Please visit the old MyUW to view your PCE classes.

    +
    + {{/if}} + {{#if total_sections}}

    Your {{ucfirst quarter}} {{year}} final exam

    @@ -125,10 +127,7 @@
    - + {{/if}} +
    {% endtplhandlebars %} - - From cddfed8ee5be3392dd024c1c1589f59d888d09a0 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 22 Oct 2015 17:05:29 -0700 Subject: [PATCH 080/116] more precise message for pce on visual schedule. --- myuw/templates/handlebars/card/schedule/visual.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw/templates/handlebars/card/schedule/visual.html b/myuw/templates/handlebars/card/schedule/visual.html index d8ca53b274..a2e4e04089 100644 --- a/myuw/templates/handlebars/card/schedule/visual.html +++ b/myuw/templates/handlebars/card/schedule/visual.html @@ -6,7 +6,7 @@ {{#if is_pce}}

    PCE Classes Not Displayed -

    -

    Please visit the old MyUW to view your PCE classes.

    +

    Please visit the old MyUW to view your PCE non-credit classes.

    {{/if}} {{#if total_sections}} From 6e854816fec3949039b32ded43cbb377bf27cebc Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 22 Oct 2015 20:50:40 -0700 Subject: [PATCH 081/116] Correct myuw desktop version link urls. --- myuw/templates/base.html | 4 ++-- myuw/templates/handlebars/card/emp_fac_student.html | 4 ++-- myuw/templates/handlebars/error.html | 2 +- myuw/templates/handlebars/panel/no_courses.html | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/myuw/templates/base.html b/myuw/templates/base.html index 009d6dee9c..c0a1721bd0 100644 --- a/myuw/templates/base.html +++ b/myuw/templates/base.html @@ -127,14 +127,14 @@

    Switch back to the old MyUW

    {% if user.affiliations.stud_employee %}

    Student Employees

    -

    A link to Employee Self-Services (ESS) is on the Employment page, but you can also use the old version of MyUW to access additional employment resources.

    +

    A link to Employee Self-Services (ESS) is on the Employment page, but you can also use the old version of MyUW to access additional employment resources.

    {% endif %} {% if user.affiliations.faculty %}

    Instructor or TA for a class?

    -

    Use the old version of MyUW to access your teaching resources. We're working on moving this content to this new version of MyUW so you'll eventually have everything in one place.

    +

    Use the old version of MyUW to access your teaching resources. We're working on moving this content to this new version of MyUW so you'll eventually have everything in one place.

    {% endif %}
    diff --git a/myuw/templates/handlebars/card/emp_fac_student.html b/myuw/templates/handlebars/card/emp_fac_student.html index 5ee15696bd..4050010ce9 100644 --- a/myuw/templates/handlebars/card/emp_fac_student.html +++ b/myuw/templates/handlebars/card/emp_fac_student.html @@ -8,14 +8,14 @@

    Student Employee or Faculty

    {{#if is_employee}}

    Student Employees

    -

    A link to Employee Self-Services (ESS) is on the Employment page, but you can also use the old version of MyUW to access additional employment resources.

    +

    A link to Employee Self-Services (ESS) is on the Employment page, but you can also use the old version of MyUW to access additional employment resources.

    {{/if}} {{#if is_employee}}

    Instructor or TA for a class?

    -

    Use the old version of MyUW to access your teaching resources. We're working on moving this content to this new version of MyUW so you'll eventually have everything in one place.

    +

    Use the old version of MyUW to access your teaching resources. We're working on moving this content to this new version of MyUW so you'll eventually have everything in one place.

    {{/if}} diff --git a/myuw/templates/handlebars/error.html b/myuw/templates/handlebars/error.html index 5e912f7f6b..90f1dcafc4 100644 --- a/myuw/templates/handlebars/error.html +++ b/myuw/templates/handlebars/error.html @@ -4,7 +4,7 @@
    Uh-oh...
    There was a problem connecting to MyUW Mobile. Please bear with us as we resolve the issue. If the problem persists please contact us or use the full site.
    diff --git a/myuw/templates/handlebars/panel/no_courses.html b/myuw/templates/handlebars/panel/no_courses.html index b40a492a76..f409a2aa5e 100644 --- a/myuw/templates/handlebars/panel/no_courses.html +++ b/myuw/templates/handlebars/panel/no_courses.html @@ -4,7 +4,7 @@

    No Courses Found

    -

    You do not appear to be registered for credit courses {{which_quarter_or_term}}. If you are not registered, you can go to the MyUW full site to learn about registration. If you think this is an error, please contact MyUW.

    +

    You do not appear to be registered for credit courses {{which_quarter_or_term}}. If you are not registered, you can go to the MyUW full site to learn about registration. If you think this is an error, please contact MyUW.

    From 300a3dca0266b705df40f73d901a972cda950184 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 23 Oct 2015 09:35:55 -0700 Subject: [PATCH 082/116] remove the word non-credit. --- myuw/templates/handlebars/card/schedule/visual.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw/templates/handlebars/card/schedule/visual.html b/myuw/templates/handlebars/card/schedule/visual.html index a3f3cf87e7..84c4761102 100644 --- a/myuw/templates/handlebars/card/schedule/visual.html +++ b/myuw/templates/handlebars/card/schedule/visual.html @@ -6,7 +6,7 @@ {{#if is_pce}}

    PCE Classes Not Displayed -

    -

    Please visit the old MyUW to view your PCE non-credit classes.

    +

    Please visit the old MyUW to view your PCE classes.

    {{/if}} {{#if total_sections}} From 1f78fb3b8882b95a0f3cc0d6bf184947765a555e Mon Sep 17 00:00:00 2001 From: William Washington Date: Mon, 26 Oct 2015 09:31:16 -0700 Subject: [PATCH 083/116] fixing paragraph in message alignment on vschedule. for muwm-3406 --- myuw/static/css/mobile.less | 1 + 1 file changed, 1 insertion(+) diff --git a/myuw/static/css/mobile.less b/myuw/static/css/mobile.less index fc379dbd17..a505162870 100644 --- a/myuw/static/css/mobile.less +++ b/myuw/static/css/mobile.less @@ -651,6 +651,7 @@ body { margin: 0; } i {padding-right: .5em;color:#85754d;} + p {display: inline-block; margin: 0px;} } From 0a02d1b9a0f479c7da28677b58e70b695c10e53f Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 26 Oct 2015 14:59:12 -0700 Subject: [PATCH 084/116] Made javerage a PCE student to test the message on visual schedule card when having credit cources. --- .../effective_member/javerage | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_extension-student/effective_member/javerage diff --git a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_extension-student/effective_member/javerage b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_extension-student/effective_member/javerage new file mode 100644 index 0000000000..9a5dbcd241 --- /dev/null +++ b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_extension-student/effective_member/javerage @@ -0,0 +1,14 @@ + + + + + + +
    {status}
    + + From fe85724f1adce8cf140adf531f3450958bb0a49f Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Thu, 29 Oct 2015 12:18:27 -0700 Subject: [PATCH 085/116] Resolve MUWM-3422. --- myuw/static/js/card/schedule/visual.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw/static/js/card/schedule/visual.js b/myuw/static/js/card/schedule/visual.js index fe8ab7208d..048412f920 100644 --- a/myuw/static/js/card/schedule/visual.js +++ b/myuw/static/js/card/schedule/visual.js @@ -42,7 +42,7 @@ var VisualScheduleCard = { _render: function() { var term = VisualScheduleCard.term; var course_data = WSData.normalized_course_data(term); - if (course_data.sections.length === 0 && !user.pce) { + if (course_data.sections.length === 0) { VisualScheduleCard.dom_target.html(CardWithNoCourse.render(term)); return; } From 1eba8c6353d31bae7e5b86dbf0372ac1dc1ed700 Mon Sep 17 00:00:00 2001 From: William Washington Date: Thu, 29 Oct 2015 12:24:44 -0700 Subject: [PATCH 086/116] revising pce message text to specify non-credit courses. --- myuw/templates/handlebars/banner/pce.html | 4 ++-- myuw/templates/handlebars/card/schedule/visual.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/myuw/templates/handlebars/banner/pce.html b/myuw/templates/handlebars/banner/pce.html index f250a5346b..15a4f5df01 100644 --- a/myuw/templates/handlebars/banner/pce.html +++ b/myuw/templates/handlebars/banner/pce.html @@ -4,8 +4,8 @@
    -

    PCE Classes Not Displayed

    -

    Your PCE schedule is not yet available in this version of MyUW. Please visit the old MyUW to view your PCE classes, content, and relevant dates.

    +

    Displaying Only Credit Courses

    +

    If you are registered for non-credit courses (e.g. PCE programs) visit the old MyUW to view associated schedule and class information.

    diff --git a/myuw/templates/handlebars/card/schedule/visual.html b/myuw/templates/handlebars/card/schedule/visual.html index 84c4761102..d723c2c078 100644 --- a/myuw/templates/handlebars/card/schedule/visual.html +++ b/myuw/templates/handlebars/card/schedule/visual.html @@ -5,8 +5,8 @@
    {{#if is_pce}}
    -

    PCE Classes Not Displayed -

    -

    Please visit the old MyUW to view your PCE classes.

    +

    Displaying Only Credit Courses

    +

    If you are registered for non-credit courses visit the old MyUW to view associated schedule and class information.

    {{/if}} {{#if total_sections}} From 13b6337f9d145e1251db4a4ce84daa8a8f175f71 Mon Sep 17 00:00:00 2001 From: William Washington Date: Mon, 2 Nov 2015 16:01:29 -0800 Subject: [PATCH 087/116] added comma to fix MUWM-3431. --- myuw/templates/handlebars/banner/pce.html | 2 +- myuw/templates/handlebars/card/schedule/visual.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/myuw/templates/handlebars/banner/pce.html b/myuw/templates/handlebars/banner/pce.html index 15a4f5df01..b5c272095b 100644 --- a/myuw/templates/handlebars/banner/pce.html +++ b/myuw/templates/handlebars/banner/pce.html @@ -5,7 +5,7 @@

    Displaying Only Credit Courses

    -

    If you are registered for non-credit courses (e.g. PCE programs) visit the old MyUW to view associated schedule and class information.

    +

    If you are registered for non-credit courses (e.g. PCE programs), visit the old MyUW to view associated schedule and class information.

    diff --git a/myuw/templates/handlebars/card/schedule/visual.html b/myuw/templates/handlebars/card/schedule/visual.html index d723c2c078..506a579c81 100644 --- a/myuw/templates/handlebars/card/schedule/visual.html +++ b/myuw/templates/handlebars/card/schedule/visual.html @@ -6,7 +6,7 @@ {{#if is_pce}}

    Displaying Only Credit Courses

    -

    If you are registered for non-credit courses visit the old MyUW to view associated schedule and class information.

    +

    If you are registered for non-credit courses, visit the old MyUW to view associated schedule and class information.

    {{/if}} {{#if total_sections}} From a7472b58284e601fdba52dcb07f40bc7f47bac1b Mon Sep 17 00:00:00 2001 From: William Washington Date: Tue, 3 Nov 2015 14:02:12 -0800 Subject: [PATCH 088/116] fixes MUWM-3436 --- myuw/static/css/mobile.less | 4 ++-- myuw/templates/handlebars/banner/pce.html | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/myuw/static/css/mobile.less b/myuw/static/css/mobile.less index a505162870..c688650424 100644 --- a/myuw/static/css/mobile.less +++ b/myuw/static/css/mobile.less @@ -637,8 +637,8 @@ body { // PCE card & PCE notice on Visual Schedule .PCE-notice { background-color: #fcf9e3; - i { font-size: 2em; padding-right: .5em; color:#85754d;} - h3 { display: inline-block;} + i { position: absolute; top: 50%; font-size: 2em; color: #85754d; margin-top: -14px;} + h3 { position: relative; left: 42px;} } .PCE-vs-notice { diff --git a/myuw/templates/handlebars/banner/pce.html b/myuw/templates/handlebars/banner/pce.html index b5c272095b..0f212a51b9 100644 --- a/myuw/templates/handlebars/banner/pce.html +++ b/myuw/templates/handlebars/banner/pce.html @@ -4,7 +4,9 @@
    -

    Displaying Only Credit Courses

    +
    +

    Displaying Only Credit Courses

    +

    If you are registered for non-credit courses (e.g. PCE programs), visit the old MyUW to view associated schedule and class information.

    From cfe59809159191786edcb13edcf67f17984cbacb Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 6 Nov 2015 11:23:26 -0800 Subject: [PATCH 089/116] log if not student views/page. --- myuw/views/page.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/myuw/views/page.py b/myuw/views/page.py index 659573bc5e..e6cf56e515 100644 --- a/myuw/views/page.py +++ b/myuw/views/page.py @@ -21,6 +21,8 @@ from myuw.dao.card_display_dates import get_card_visibilty_date_values from myuw.logger.session_log import log_session + +logger = logging.getLogger(__name__) LOGOUT_URL = "/user_logout" @@ -39,6 +41,7 @@ def index(request, # On mobile devices, all students get the current myuw. Non-students # are sent to the legacy site. if not is_student(): + logger.info("%s not a student, redirect to legacy!" % netid) return redirect_to_legacy_site() else: # On the desktop, we're migrating users over. There are 2 classes of @@ -56,8 +59,6 @@ def index(request, return redirect_to_legacy_site() timer = Timer() - logger = logging.getLogger('myuw.views.page.index') - context = { "year": year, "quarter": quarter, From 455eb1716ae59ee5834166368633164625779b5a Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 6 Nov 2015 12:37:57 -0800 Subject: [PATCH 090/116] changed to a more readable format. --- .../file/identity/v1/person/jinter/full.json | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/myuw/resources/pws/file/identity/v1/person/jinter/full.json b/myuw/resources/pws/file/identity/v1/person/jinter/full.json index e313dab10d..d05a193c05 100644 --- a/myuw/resources/pws/file/identity/v1/person/jinter/full.json +++ b/myuw/resources/pws/file/identity/v1/person/jinter/full.json @@ -1 +1,50 @@ -{"DisplayName":"JAMES INTERNATIONAL STUDENT","EduPersonAffiliations":["member","student","alum","staff","employee"],"IsTestEntity":true,"PriorUWNetIDs":[],"PriorUWRegIDs":[],"RegisteredFirstMiddleName":"JAMES INTERNATIONAL","RegisteredName":"JAMES INTERNATIONAL STUDENT","RegisteredSurname":"STUDENT","UIDNumber":"35443","UWNetID":"jinter","UWRegID":"9136CCB8F66711D5BE060004AC494F31","WhitepagesPublish":false,"PersonAffiliations":{"AlumPersonAffiliation":{"DevelopmentID":"0000773877"},"EmployeePersonAffiliation":{"EmployeeID":"100456789","EmployeeWhitePages":{"Address1":null,"Address2":null,"Department1":null,"Department2":null,"Email1":null,"Email2":null,"Fax":null,"Name":null,"Phone1":null,"Phone2":null,"PublishInDirectory":false,"Title1":null,"Title2":null,"TouchDial":null,"VoiceMail":null},"HomeDepartment":"C&C TEST BUDGET","MailStop":null},"StudentPersonAffiliation":{"StudentNumber":"1233334","StudentSystemKey":"000083856","StudentWhitePages":{"Class":null,"Department1":null,"Department2":null,"Department3":null,"Email":null,"Name":null,"Phone":null,"PublishInDirectory":false}}}} +{ +"DisplayName":"JAMES INTERNATIONAL STUDENT", +"EduPersonAffiliations": + ["member", + "student", + "alum", + "staff", + "employee"], +"IsTestEntity":true, +"PriorUWNetIDs":[], +"PriorUWRegIDs":[], +"RegisteredFirstMiddleName":"JAMES INTERNATIONAL", +"RegisteredName":"JAMES INTERNATIONAL STUDENT", +"RegisteredSurname":"STUDENT", +"UIDNumber":"35443", +"UWNetID":"jinter", +"UWRegID":"9136CCB8F66711D5BE060004AC494F31", +"WhitepagesPublish":false, +"PersonAffiliations": + {"AlumPersonAffiliation":{"DevelopmentID":"0000773877"}, + "EmployeePersonAffiliation":{"EmployeeID":"100456789", + "EmployeeWhitePages": + {"Address1":null, + "Address2":null, + "Department1":null, + "Department2":null, + "Email1":null, + "Email2":null, + "Fax":null, + "Name":null, + "Phone1":null, + "Phone2":null, + "PublishInDirectory":false, + "Title1":null, + "Title2":null, + "TouchDial":null, + "VoiceMail":null}, + "HomeDepartment":"C&C TEST BUDGET", + "MailStop":null}, + "StudentPersonAffiliation":{"StudentNumber":"1233334", + "StudentSystemKey":"000083856", + "StudentWhitePages": + {"Class":null, + "Department1":null, + "Department2":null, + "Department3":null, + "Email":null, + "Name":null, + "Phone":null, + "PublishInDirectory":false}}}} From f04b608bdcade7a3e4545591d754439cac30bf56 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 9 Nov 2015 16:47:27 -0800 Subject: [PATCH 091/116] fix syntax. --- myuw/test/dao/iasystem.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/myuw/test/dao/iasystem.py b/myuw/test/dao/iasystem.py index b5fdaa72ef..5f719bb513 100644 --- a/myuw/test/dao/iasystem.py +++ b/myuw/test/dao/iasystem.py @@ -22,7 +22,7 @@ def test_summer_term_overlaped(self): term = Term() term.year = 2013 term.quarter = "summer" - section = new Section() + section = Section() section.summer_term = "A-term" section.term = term @@ -53,7 +53,7 @@ def test_get_evaluations_by_section(self): term = Term() term.year = 2013 term.quarter = "summer" - section = new Section() + section = Section() section.summer_term = "A-term" section.term = term schedule = _get_schedule(regid, term) From 79aed584ddd50577c674c3fa70a665830ac72ccc Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 9 Nov 2015 16:50:10 -0800 Subject: [PATCH 092/116] minor syntax fix --- ..._student_id_1033334_section_id_A_course_number_100_year_2013 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw/resources/iasystem/uw/api/v1/evaluation_term_name_Spring_curriculum_abbreviation_TRAIN_student_id_1033334_section_id_A_course_number_100_year_2013 b/myuw/resources/iasystem/uw/api/v1/evaluation_term_name_Spring_curriculum_abbreviation_TRAIN_student_id_1033334_section_id_A_course_number_100_year_2013 index 1abf535b5b..ff29085938 100644 --- a/myuw/resources/iasystem/uw/api/v1/evaluation_term_name_Spring_curriculum_abbreviation_TRAIN_student_id_1033334_section_id_A_course_number_100_year_2013 +++ b/myuw/resources/iasystem/uw/api/v1/evaluation_term_name_Spring_curriculum_abbreviation_TRAIN_student_id_1033334_section_id_A_course_number_100_year_2013 @@ -269,4 +269,4 @@ "href": "https://uw.iasysdev.org/api/v1/evaluation", "version": "1.0" } -} \ No newline at end of file +} From 5d4f05b57de25535fa5711153ac9d49eccf659b3 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 12:50:16 -0800 Subject: [PATCH 093/116] Resolve MUWM-3441 --- myuw/data/category_links_import.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw/data/category_links_import.csv b/myuw/data/category_links_import.csv index 31bc17196f..372dfcf5b0 100644 --- a/myuw/data/category_links_import.csv +++ b/myuw/data/category_links_import.csv @@ -19,7 +19,7 @@ Academics,Grades & Transcripts,,,https://sdb.admin.uw.edu/sisStudents/uwnetid/tr Academics,Grades & Transcripts,https://sdb.admin.uw.edu/students/uwnetid/unofficial.asp,Unofficial Transcript,,,,,,,yes Academics,Libraries,,,https://eres.lib.washington.edu/,Electronic Course Reserves,https://eres.bothell.washington.edu/,Electronic Course Reserves,https://ereserves.tacoma.washington.edu/,Electronic Course Reserves,yes Academics,Libraries,,,http://lib.washington.edu/,UW Libraries,http://library.uwb.edu/,UW Bothell Library,http://www.tacoma.uw.edu/library,UW Tacoma Library,no -Academics,Graduation,,,http://www.washington.edu/students/reg/grad.html,Application for Graduation,https://www.uwb.edu/registration/graduation/apply,Applying for Graduation,http://www.tacoma.uw.edu/uwt/enrollment-services/applying-graduate,Applying to Graduate,no +Academics,Graduation,,,http://grad.uw.edu/mygrad/student.htm,Application for Graduation,http://grad.uw.edu/mygrad/student.htm,Applying for Graduation,http://grad.uw.edu/mygrad/student.htm,Applying to Graduate,no Finances,Financial Aid,,,http://www.washington.edu/students/osfa/,Financial Aid and Scholarships,http://www.bothell.washington.edu/financialaid,Financial Aid and Scholarships,http://www.tacoma.uw.edu/uwt/financial-aid,Financial Aid and Scholarships,no Finances,Financial Aid,https://sdb.admin.uw.edu/sisStudents/uwnetid/finaidstatus.aspx,Financial Aid Status,,,,,,,yes Finances,Taxes,https://sdb.admin.uw.edu/sisStudents/uwnetid/irs1098tconsent.aspx,Form 1098-T,,,,,,,yes From 0d002b4c5da534519eddee48ce361909421004ae Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 13:57:48 -0800 Subject: [PATCH 094/116] Resolve MUWM-3438 - not display an empty Graduate Requests card --- myuw/dao/grad.py | 8 ++++++++ .../services/students/v1/api/leave_id_12345678 | 2 +- ...quest_id_12345678_exclude_past_quarter_true | 18 +++++++++++++++++- myuw/test/dao/grad.py | 8 ++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/myuw/dao/grad.py b/myuw/dao/grad.py index 5b8d167dbe..ad97efb825 100644 --- a/myuw/dao/grad.py +++ b/myuw/dao/grad.py @@ -141,6 +141,9 @@ def degree_to_json(req_data, request): if is_before_eof_2weeks_since_decision_date(item.decision_date, now): # show for 2 weeks after the decision date result.append(item.json_data()) + + if len(result) == 0: + return None return result @@ -203,6 +206,8 @@ def leave_to_json(req_data, request): result, item, now) continue + if len(result) == 0: + return None return result @@ -226,4 +231,7 @@ def petition_to_json(req_data, request): if is_before_eof_2weeks_since_decision_date(item.decision_date, now): # show for 2 weeks after the decision date result.append(item.json_data()) + + if len(result) == 0: + return None return result diff --git a/myuw/resources/grad/file/services/students/v1/api/leave_id_12345678 b/myuw/resources/grad/file/services/students/v1/api/leave_id_12345678 index 934f126d9d..1e654681a2 100644 --- a/myuw/resources/grad/file/services/students/v1/api/leave_id_12345678 +++ b/myuw/resources/grad/file/services/students/v1/api/leave_id_12345678 @@ -27,7 +27,7 @@ {"leaveReason":"Other (please describe)", "submitDate":"2013-04-09T04:39:34.31", "status":"paid", - "quarters":[{"year":2013, + "quarters":[{"year":2014, "quarter":"spring"}]}, {"leaveReason":"Other (please describe)", "submitDate":"2013-10-09T13:55:57.537", diff --git a/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true b/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true index fe51488c70..366e7c2ebf 100644 --- a/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true +++ b/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true @@ -1 +1,17 @@ -[] +[{ + "syskey":781822, + "requestId":99003, + "requestType":"General Exam Request", + "degreeTitle":"Doctor Of Philosophy (Geography)", + "status":"Candidacy Granted", + "examPlace":"Smith Hall, Room 409", + "examDate":"2013-10-28T14:15:00", + "targetAwardYear":2013, + "targetAwardQuarter":"autumn", + "requestSubmitDate":"2013-10-13T11:46:15.267", + "major":"GEOG", + "majorFullName":"Geography", + "pathway":0, + "degreeLevel":4, + "degreeType":1 +}] diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index 7b917c334e..e429c3825b 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -189,6 +189,14 @@ def test_get_grad_leave(self): self.assertEquals(leave["status"], "requested") # requested always shows + leave_reqs = get_leave_by_regid('12345678901234567890123456789012') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 7) + now_request.session = {} + now_request.session["myuw_override_date"] = "2014-06-19" + json_data = leave_to_json(leave_reqs, now_request) + self.assertIsNone(json_data, 0) + def test_get_grad_petition(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, From 89d06da99882b2b14dc499304cbe84828a34fb51 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 14:15:50 -0800 Subject: [PATCH 095/116] Made jbothell a grad. --- .../effective_member/jbothell | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jbothell diff --git a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jbothell b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jbothell new file mode 100644 index 0000000000..f9d61276af --- /dev/null +++ b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jbothell @@ -0,0 +1,15 @@ + + + + + + +
    + jbothell + +
    +
    {status}
    + + From 93aaf251208140530d9b6d06e5878b868cd81202 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 17:56:30 -0800 Subject: [PATCH 096/116] Resolve MUWM-3428 --- .../api/committee_id_000083856_status_active | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/myuw/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active b/myuw/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active index 3565815bdf..1b140d702c 100644 --- a/myuw/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active +++ b/myuw/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active @@ -38,7 +38,7 @@ "email":"lll@oge.sld.pe"}, {"nameFirst":"Bet", "nameLast":"Shell-Duncan", - "memberType":"member", + "memberType":"gsr", "readingType":null, "status":"active", "dept":"Anthropology", @@ -52,7 +52,14 @@ "status":"active", "startDate":"2013-06-07T00:00:00", "endDate":null, - "members":[{"nameFirst":"Bet", + "members":[{"nameFirst":"James T.", + "nameLast":"Pfeiffer", + "memberType":"member", + "readingType":null, + "status":"active", + "dept":"Global Health", + "email":"jjj@uw.edu"}, + {"nameFirst":"Bet", "nameLast":"Duncan", "memberType":"chair", "readingType":"chair", @@ -72,14 +79,7 @@ "readingType":null, "status":"active", "dept":"Anthropology", - "email":"sss@u.washington.edu"}, - {"nameFirst":"James T.", - "nameLast":"Pfeiffer", - "memberType":"member", - "readingType":null, - "status":"active", - "dept":"Global Health", - "email":"jjj@uw.edu"} + "email":"sss@u.washington.edu"} ] } ] From f5b503e3717305794328ea855ed9b931c1498f24 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 18:26:13 -0800 Subject: [PATCH 097/116] add unittests for empty response cases. --- myuw/test/dao/grad.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index e429c3825b..8d278f6822 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -2,7 +2,7 @@ from django.conf import settings from datetime import date, datetime, timedelta from myuw.dao.grad import get_degree_by_regid,\ - get_leave_by_regid, get_committee_by_regid,\ + get_leave_by_regid, get_committee_by_regid, to_json,\ get_petition_by_regid, leave_to_json, petition_to_json,\ is_before_eof_2weeks_since_decision_date, degree_to_json from django.test.client import RequestFactory @@ -32,16 +32,27 @@ def test_get_grad_committee(self): committee_reqs = get_committee_by_regid( '9136CCB8F66711D5BE060004AC494FFE') self.assertIsNotNone(committee_reqs) + committee_reqs = get_committee_by_regid( + '9136CCB8F66711D5BE060004AC494F31') + self.assertIsNotNone(committee_reqs) + self.assertEquals(len(committee_reqs), 0) + self.assertIsNone(to_json(committee_reqs)) def test_get_grad_degree(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + degree_reqs = get_degree_by_regid( + '12345678901234567890123456789012') + self.assertIsNotNone(degree_reqs) + self.assertEquals(len(degree_reqs), 0) + self.assertIsNone(degree_to_json(degree_reqs, now_request)) + degree_reqs = get_degree_by_regid( '9136CCB8F66711D5BE060004AC494FFE') self.assertIsNotNone(degree_reqs) self.assertEquals(len(degree_reqs), 8) - now_request = RequestFactory().get("/") now_request.session = {} now_request.session["myuw_override_date"] = "2013-04-24" @@ -108,10 +119,15 @@ def test_get_grad_leave(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494F31') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 0) + self.assertIsNone(leave_to_json(leave_reqs, now_request)) + leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494FFE') self.assertIsNotNone(leave_reqs) self.assertEquals(len(leave_reqs), 5) - now_request = RequestFactory().get("/") now_request.session = {} now_request.session["myuw_override_date"] = "2012-12-07" json_data = leave_to_json(leave_reqs, now_request) @@ -201,11 +217,17 @@ def test_get_grad_petition(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + + petition_reqs = get_petition_by_regid( + '9136CCB8F66711D5BE060004AC494F31') + self.assertEquals(len(petition_reqs), 0) + self.assertIsNone(petition_to_json(petition_reqs, now_request)) + petition_reqs = get_petition_by_regid( '9136CCB8F66711D5BE060004AC494FFE') self.assertIsNotNone(petition_reqs) self.assertEquals(len(petition_reqs), 7) - now_request = RequestFactory().get("/") now_request.session = {} now_request.session["myuw_override_date"] = "2013-04-10" From 040a29895cc20f738231db9f88e5e6795ea5191f Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 18:35:06 -0800 Subject: [PATCH 098/116] add unittests for non-grad cases. --- myuw/test/dao/grad.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index 8d278f6822..d39faa0332 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -15,15 +15,25 @@ class TestGrad(TestCase): - def test_get_grad_degree_for_current_user(self): + def test_get_request_non_grad_student(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): - degree_reqs = get_degree_by_regid( - '9136CCB8F66711D5BE060004AC494FFE') - self.assertIsNotNone(degree_reqs) - now_request = RequestFactory().get("/") - now_request.session = {} + reqs = get_degree_by_regid( + '00000000000000000000000000000001') + self.assertIsNone(reqs) + + reqs = get_committee_by_regid( + '00000000000000000000000000000001') + self.assertIsNone(reqs) + + reqs = get_leave_by_regid( + '00000000000000000000000000000001') + self.assertIsNone(reqs) + + reqs = get_petition_by_regid( + '00000000000000000000000000000001') + self.assertIsNone(reqs) def test_get_grad_committee(self): with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, From f992997750c364355ccc9b84d46d76e30ea6df68 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 18:53:05 -0800 Subject: [PATCH 099/116] Add test for grad api with user none --- myuw/test/api/grad.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/myuw/test/api/grad.py b/myuw/test/api/grad.py index 3aa7e7b17f..85709c4c56 100644 --- a/myuw/test/api/grad.py +++ b/myuw/test/api/grad.py @@ -101,3 +101,18 @@ def test_javerage(self): "2013-04-10T00:00:00") self.assertEqual(petition['dept_recommend'], "Approve") self.assertEqual(petition['gradschool_decision'], "Approved") + + @skipIf(missing_url("myuw_home"), "myuw urls not configured") + def test_none(self): + url = reverse("myuw_grad_api") + get_user('none') + self.client.login(username='none', + password=get_user_pass('none')) + response = self.client.get(url) + self.assertEquals(response.status_code, 200) + self.assertIsNotNone(response.content) + data = json.loads(response.content) + self.assertIsNone(data.get("degrees")) + self.assertIsNone(data.get("committees")) + self.assertIsNone(data.get("leaves")) + self.assertIsNone(data.get("petitions")) From dd0961aadf2ed3ee036c6ffa12af12de12a34499 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 19:05:34 -0800 Subject: [PATCH 100/116] remove unnecesary code --- myuw/test/dao/grad.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index d39faa0332..e0f20eac6a 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -8,16 +8,14 @@ from django.test.client import RequestFactory -FDAO_PWS = 'restclients.dao_implementation.pws.File' FDAO_SWS = 'restclients.dao_implementation.sws.File' FDAO_GRA = 'restclients.dao_implementation.grad.File' class TestGrad(TestCase): - def test_get_request_non_grad_student(self): - with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, - RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + def test_null_system_key(self): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): reqs = get_degree_by_regid( '00000000000000000000000000000001') @@ -36,21 +34,20 @@ def test_get_request_non_grad_student(self): self.assertIsNone(reqs) def test_get_grad_committee(self): - with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, - RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): committee_reqs = get_committee_by_regid( '9136CCB8F66711D5BE060004AC494FFE') self.assertIsNotNone(committee_reqs) + self.assertEquals(len(committee_reqs), 3) + committee_reqs = get_committee_by_regid( '9136CCB8F66711D5BE060004AC494F31') - self.assertIsNotNone(committee_reqs) self.assertEquals(len(committee_reqs), 0) self.assertIsNone(to_json(committee_reqs)) def test_get_grad_degree(self): - with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, - RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): now_request = RequestFactory().get("/") degree_reqs = get_degree_by_regid( @@ -126,8 +123,7 @@ def test_is_before_eof_2weeks_since_decision_date(self): datetime(2013, 6, 10, 0, 0, 0))) def test_get_grad_leave(self): - with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, - RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): now_request = RequestFactory().get("/") leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494F31') @@ -224,8 +220,7 @@ def test_get_grad_leave(self): self.assertIsNone(json_data, 0) def test_get_grad_petition(self): - with self.settings(RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS, - RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): now_request = RequestFactory().get("/") From ece36f9b70dec3ffbff472722682e6860997f1ee Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 19:27:39 -0800 Subject: [PATCH 101/116] remove unnecesary code --- myuw/test/dao/grad.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index e0f20eac6a..af28fed02b 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -15,8 +15,7 @@ class TestGrad(TestCase): def test_null_system_key(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, - RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): reqs = get_degree_by_regid( '00000000000000000000000000000001') self.assertIsNone(reqs) From f690f4a193e4e8294af33f4b602c7ec3ee8caa57 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 19:38:37 -0800 Subject: [PATCH 102/116] no change --- myuw/test/dao/grad.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index af28fed02b..68ec2db2f7 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -16,20 +16,16 @@ class TestGrad(TestCase): def test_null_system_key(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - reqs = get_degree_by_regid( - '00000000000000000000000000000001') + reqs = get_degree_by_regid('00000000000000000000000000000001') self.assertIsNone(reqs) - reqs = get_committee_by_regid( - '00000000000000000000000000000001') + reqs = get_committee_by_regid('00000000000000000000000000000001') self.assertIsNone(reqs) - reqs = get_leave_by_regid( - '00000000000000000000000000000001') + reqs = get_leave_by_regid('00000000000000000000000000000001') self.assertIsNone(reqs) - reqs = get_petition_by_regid( - '00000000000000000000000000000001') + reqs = get_petition_by_regid('00000000000000000000000000000001') self.assertIsNone(reqs) def test_get_grad_committee(self): @@ -49,6 +45,7 @@ def test_get_grad_degree(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): now_request = RequestFactory().get("/") + degree_reqs = get_degree_by_regid( '12345678901234567890123456789012') self.assertIsNotNone(degree_reqs) From 92cc6d5d1b90ae6a5c632104eb128f8e11909766 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 19:42:56 -0800 Subject: [PATCH 103/116] eight has no degree request. --- ...quest_id_12345678_exclude_past_quarter_true | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true b/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true index 366e7c2ebf..fe51488c70 100644 --- a/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true +++ b/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true @@ -1,17 +1 @@ -[{ - "syskey":781822, - "requestId":99003, - "requestType":"General Exam Request", - "degreeTitle":"Doctor Of Philosophy (Geography)", - "status":"Candidacy Granted", - "examPlace":"Smith Hall, Room 409", - "examDate":"2013-10-28T14:15:00", - "targetAwardYear":2013, - "targetAwardQuarter":"autumn", - "requestSubmitDate":"2013-10-13T11:46:15.267", - "major":"GEOG", - "majorFullName":"Geography", - "pathway":0, - "degreeLevel":4, - "degreeType":1 -}] +[] From b37ce434a89be08e6675e48ee48dbac8047ac2af Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 20:18:40 -0800 Subject: [PATCH 104/116] clean up. --- myuw/test/dao/grad.py | 425 ++++++++++++++++++++---------------------- 1 file changed, 206 insertions(+), 219 deletions(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index 68ec2db2f7..f8e17258c5 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -8,101 +8,92 @@ from django.test.client import RequestFactory -FDAO_SWS = 'restclients.dao_implementation.sws.File' -FDAO_GRA = 'restclients.dao_implementation.grad.File' - - class TestGrad(TestCase): def test_null_system_key(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS): - reqs = get_degree_by_regid('00000000000000000000000000000001') - self.assertIsNone(reqs) + reqs = get_degree_by_regid('00000000000000000000000000000001') + self.assertIsNone(reqs) - reqs = get_committee_by_regid('00000000000000000000000000000001') - self.assertIsNone(reqs) + reqs = get_committee_by_regid('00000000000000000000000000000001') + self.assertIsNone(reqs) - reqs = get_leave_by_regid('00000000000000000000000000000001') - self.assertIsNone(reqs) + reqs = get_leave_by_regid('00000000000000000000000000000001') + self.assertIsNone(reqs) - reqs = get_petition_by_regid('00000000000000000000000000000001') - self.assertIsNone(reqs) + reqs = get_petition_by_regid('00000000000000000000000000000001') + self.assertIsNone(reqs) def test_get_grad_committee(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, - RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): - committee_reqs = get_committee_by_regid( - '9136CCB8F66711D5BE060004AC494FFE') - self.assertIsNotNone(committee_reqs) - self.assertEquals(len(committee_reqs), 3) + committee_reqs = get_committee_by_regid( + '9136CCB8F66711D5BE060004AC494FFE') + self.assertIsNotNone(committee_reqs) + self.assertEquals(len(committee_reqs), 3) - committee_reqs = get_committee_by_regid( - '9136CCB8F66711D5BE060004AC494F31') - self.assertEquals(len(committee_reqs), 0) - self.assertIsNone(to_json(committee_reqs)) + committee_reqs = get_committee_by_regid( + '9136CCB8F66711D5BE060004AC494F31') + self.assertEquals(len(committee_reqs), 0) + self.assertIsNone(to_json(committee_reqs)) def test_get_grad_degree(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, - RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): - now_request = RequestFactory().get("/") - - degree_reqs = get_degree_by_regid( - '12345678901234567890123456789012') - self.assertIsNotNone(degree_reqs) - self.assertEquals(len(degree_reqs), 0) - self.assertIsNone(degree_to_json(degree_reqs, now_request)) - - degree_reqs = get_degree_by_regid( - '9136CCB8F66711D5BE060004AC494FFE') - self.assertIsNotNone(degree_reqs) - self.assertEquals(len(degree_reqs), 8) - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-24" - json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 8) - degree = json_data[4] - self.assertEquals(degree["status"], "Withdrawn") - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-25" - json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 7) - degree = json_data[4] - self.assertEquals(degree["status"], "Candidacy Granted") - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-27" - json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 7) - degree = json_data[0] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[1] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[2] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[3] - self.assertEquals(degree["status"], "Recommended by Dept") - degree = json_data[4] - self.assertEquals(degree["status"], "Candidacy Granted") - degree = json_data[5] - self.assertEquals(degree["status"], "Graduated by Grad School") - degree = json_data[6] - self.assertEquals(degree["status"], "Did Not Graduate") - - # after the end of following term - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-28" - json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 4) - degree = json_data[0] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[1] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[2] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[3] - self.assertEquals(degree["status"], "Recommended by Dept") + now_request = RequestFactory().get("/") + + degree_reqs = get_degree_by_regid( + '12345678901234567890123456789012') + self.assertIsNotNone(degree_reqs) + self.assertEquals(len(degree_reqs), 0) + self.assertIsNone(degree_to_json(degree_reqs, now_request)) + + degree_reqs = get_degree_by_regid( + '9136CCB8F66711D5BE060004AC494FFE') + self.assertIsNotNone(degree_reqs) + self.assertEquals(len(degree_reqs), 8) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-24" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 8) + degree = json_data[4] + self.assertEquals(degree["status"], "Withdrawn") + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-25" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 7) + degree = json_data[4] + self.assertEquals(degree["status"], "Candidacy Granted") + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-27" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 7) + degree = json_data[0] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[1] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[2] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[3] + self.assertEquals(degree["status"], "Recommended by Dept") + degree = json_data[4] + self.assertEquals(degree["status"], "Candidacy Granted") + degree = json_data[5] + self.assertEquals(degree["status"], "Graduated by Grad School") + degree = json_data[6] + self.assertEquals(degree["status"], "Did Not Graduate") + + # after the end of following term + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-28" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 4) + degree = json_data[0] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[1] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[2] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[3] + self.assertEquals(degree["status"], "Recommended by Dept") def test_is_before_eof_2weeks_since_decision_date(self): self.assertTrue(is_before_eof_2weeks_since_decision_date( @@ -119,140 +110,136 @@ def test_is_before_eof_2weeks_since_decision_date(self): datetime(2013, 6, 10, 0, 0, 0))) def test_get_grad_leave(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, - RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): - now_request = RequestFactory().get("/") - leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494F31') - self.assertIsNotNone(leave_reqs) - self.assertEquals(len(leave_reqs), 0) - self.assertIsNone(leave_to_json(leave_reqs, now_request)) - - leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494FFE') - self.assertIsNotNone(leave_reqs) - self.assertEquals(len(leave_reqs), 5) - now_request.session = {} - now_request.session["myuw_override_date"] = "2012-12-07" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 5) - leave = json_data[2] - self.assertEquals(leave["status"], "paid") - leave = json_data[3] - self.assertEquals(leave["status"], "denied") - # denied shows until eof 2012 autumn - leave = json_data[4] - self.assertEquals(leave["status"], "approved") - # the 1st approved shows until eof last instruction 2012 autumn - # the 2nd approved shows until eof last instruction 2013 spring - self.assertEquals(len(leave["terms"]), 2) - - now_request.session = {} - now_request.session["myuw_override_date"] = "2012-12-08" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 5) - leave = json_data[2] - self.assertEquals(leave["status"], "paid") - # paid shows until eof 2013 winter - leave = json_data[4] - self.assertEquals(leave["status"], "approved") - self.assertEquals(len(leave["terms"]), 1) - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-01-07" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 4) - leave = json_data[2] - self.assertEquals(leave["status"], "paid") - # paid shows until eof 2013 winter - leave = json_data[3] - self.assertEquals(leave["status"], "approved") - # the end of winter 2013 - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-27" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 3) - leave = json_data[0] - self.assertEquals(leave["status"], "requested") - leave = json_data[1] - self.assertEquals(leave["status"], "withdrawn") - leave = json_data[2] - self.assertEquals(leave["status"], "approved") - self.assertEquals(len(leave["terms"]), 1) - # this approved shows until eof last instruction 2013 spring - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-06-07" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 3) - leave = json_data[0] - self.assertEquals(leave["status"], "requested") - leave = json_data[1] - self.assertEquals(leave["status"], "withdrawn") - leave = json_data[2] - self.assertEquals(leave["status"], "approved") - self.assertEquals(len(leave["terms"]), 1) - # this approved shows until eof last instruction 2013 spring - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-06-08" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 2) - leave = json_data[0] - self.assertEquals(leave["status"], "requested") - leave = json_data[1] - self.assertEquals(leave["status"], "withdrawn") - # withdrawn shows until eof 2013 summer - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-28" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 1) - leave = json_data[0] - self.assertEquals(leave["status"], "requested") - # requested always shows - - leave_reqs = get_leave_by_regid('12345678901234567890123456789012') - self.assertIsNotNone(leave_reqs) - self.assertEquals(len(leave_reqs), 7) - now_request.session = {} - now_request.session["myuw_override_date"] = "2014-06-19" - json_data = leave_to_json(leave_reqs, now_request) - self.assertIsNone(json_data, 0) + now_request = RequestFactory().get("/") + leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494F31') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 0) + self.assertIsNone(leave_to_json(leave_reqs, now_request)) + + leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494FFE') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 5) + now_request.session = {} + now_request.session["myuw_override_date"] = "2012-12-07" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 5) + leave = json_data[2] + self.assertEquals(leave["status"], "paid") + leave = json_data[3] + self.assertEquals(leave["status"], "denied") + # denied shows until eof 2012 autumn + leave = json_data[4] + self.assertEquals(leave["status"], "approved") + # the 1st approved shows until eof last instruction 2012 autumn + # the 2nd approved shows until eof last instruction 2013 spring + self.assertEquals(len(leave["terms"]), 2) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2012-12-08" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 5) + leave = json_data[2] + self.assertEquals(leave["status"], "paid") + # paid shows until eof 2013 winter + leave = json_data[4] + self.assertEquals(leave["status"], "approved") + self.assertEquals(len(leave["terms"]), 1) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-01-07" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 4) + leave = json_data[2] + self.assertEquals(leave["status"], "paid") + # paid shows until eof 2013 winter + leave = json_data[3] + self.assertEquals(leave["status"], "approved") + # the end of winter 2013 + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-27" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 3) + leave = json_data[0] + self.assertEquals(leave["status"], "requested") + leave = json_data[1] + self.assertEquals(leave["status"], "withdrawn") + leave = json_data[2] + self.assertEquals(leave["status"], "approved") + self.assertEquals(len(leave["terms"]), 1) + # this approved shows until eof last instruction 2013 spring + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-06-07" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 3) + leave = json_data[0] + self.assertEquals(leave["status"], "requested") + leave = json_data[1] + self.assertEquals(leave["status"], "withdrawn") + leave = json_data[2] + self.assertEquals(leave["status"], "approved") + self.assertEquals(len(leave["terms"]), 1) + # this approved shows until eof last instruction 2013 spring + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-06-08" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 2) + leave = json_data[0] + self.assertEquals(leave["status"], "requested") + leave = json_data[1] + self.assertEquals(leave["status"], "withdrawn") + # withdrawn shows until eof 2013 summer + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-28" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 1) + leave = json_data[0] + self.assertEquals(leave["status"], "requested") + # requested always shows + + leave_reqs = get_leave_by_regid('12345678901234567890123456789012') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 7) + now_request.session = {} + now_request.session["myuw_override_date"] = "2014-06-19" + json_data = leave_to_json(leave_reqs, now_request) + self.assertIsNone(json_data, 0) def test_get_grad_petition(self): - with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, - RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): - now_request = RequestFactory().get("/") - - petition_reqs = get_petition_by_regid( - '9136CCB8F66711D5BE060004AC494F31') - self.assertEquals(len(petition_reqs), 0) - self.assertIsNone(petition_to_json(petition_reqs, now_request)) - - petition_reqs = get_petition_by_regid( - '9136CCB8F66711D5BE060004AC494FFE') - self.assertIsNotNone(petition_reqs) - self.assertEquals(len(petition_reqs), 7) - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-10" - json_data = petition_to_json(petition_reqs, now_request) - self.assertEquals(len(json_data), 7) - peti = json_data[0] - self.assertEqual(peti["dept_recommend"], "Pending") - self.assertEqual(peti["gradschool_decision"], "Pending") - peti = json_data[1] - self.assertEquals(peti["decision_date"], "2013-04-10T00:00:00") - self.assertEqual(peti["dept_recommend"], "Withdraw") - self.assertEqual(peti["gradschool_decision"], "Withdraw") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-25" - json_data = petition_to_json(petition_reqs, now_request) - self.assertEquals(len(json_data), 3) - peti = json_data[0] - self.assertEqual(peti["dept_recommend"], "Pending") - self.assertEqual(peti["gradschool_decision"], "Pending") - peti = json_data[1] - self.assertIsNone(peti["decision_date"]) - self.assertEqual(peti["dept_recommend"], "Deny") - self.assertEqual(peti["gradschool_decision"], "Pending") - peti = json_data[2] - self.assertIsNone(peti["decision_date"]) - self.assertEqual(peti["dept_recommend"], "Approve") - self.assertEqual(peti["gradschool_decision"], "Pending") + now_request = RequestFactory().get("/") + + petition_reqs = get_petition_by_regid( + '9136CCB8F66711D5BE060004AC494F31') + self.assertEquals(len(petition_reqs), 0) + self.assertIsNone(petition_to_json(petition_reqs, now_request)) + + petition_reqs = get_petition_by_regid( + '9136CCB8F66711D5BE060004AC494FFE') + self.assertIsNotNone(petition_reqs) + self.assertEquals(len(petition_reqs), 7) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-10" + json_data = petition_to_json(petition_reqs, now_request) + self.assertEquals(len(json_data), 7) + peti = json_data[0] + self.assertEqual(peti["dept_recommend"], "Pending") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[1] + self.assertEquals(peti["decision_date"], "2013-04-10T00:00:00") + self.assertEqual(peti["dept_recommend"], "Withdraw") + self.assertEqual(peti["gradschool_decision"], "Withdraw") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-25" + json_data = petition_to_json(petition_reqs, now_request) + self.assertEquals(len(json_data), 3) + peti = json_data[0] + self.assertEqual(peti["dept_recommend"], "Pending") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[1] + self.assertIsNone(peti["decision_date"]) + self.assertEqual(peti["dept_recommend"], "Deny") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[2] + self.assertIsNone(peti["decision_date"]) + self.assertEqual(peti["dept_recommend"], "Approve") + self.assertEqual(peti["gradschool_decision"], "Pending") From cfbe956cdafbc56dc0f52e122f74a723aa0888b0 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Fri, 13 Nov 2015 20:22:37 -0800 Subject: [PATCH 105/116] pep8 --- myuw/test/dao/grad.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index f8e17258c5..956fa3a459 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -54,7 +54,7 @@ def test_get_grad_degree(self): self.assertEquals(len(json_data), 8) degree = json_data[4] self.assertEquals(degree["status"], "Withdrawn") - + now_request.session = {} now_request.session["myuw_override_date"] = "2013-04-25" json_data = degree_to_json(degree_reqs, now_request) From 3f68078e618d2533e9118d41e2361d24021771ee Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 16 Nov 2015 12:58:35 -0800 Subject: [PATCH 106/116] Refactor - use summer_term function in myuw.dao.term. --- myuw/dao/iasystem.py | 3 +-- myuw/dao/registered_term.py | 5 ++--- myuw/dao/schedule.py | 4 ++-- myuw/dao/term.py | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/myuw/dao/iasystem.py b/myuw/dao/iasystem.py index 91747d00ab..745c69339f 100644 --- a/myuw/dao/iasystem.py +++ b/myuw/dao/iasystem.py @@ -3,9 +3,8 @@ from restclients.pws import PWS from restclients.exceptions import DataFailureException from restclients.iasystem import evaluation -from restclients.util.summer_term import is_b_term from myuw.dao.student_profile import get_profile_of_current_user -from myuw.dao.term import get_comparison_datetime,\ +from myuw.dao.term import get_comparison_datetime, is_b_term,\ convert_to_begin_of_day, get_current_summer_term,\ get_bod_7d_before_last_instruction, get_eod_current_term diff --git a/myuw/dao/registered_term.py b/myuw/dao/registered_term.py index 1f18047155..9970a0ebdc 100644 --- a/myuw/dao/registered_term.py +++ b/myuw/dao/registered_term.py @@ -7,10 +7,9 @@ from django.utils import timezone from datetime import datetime, timedelta from myuw.models import SeenRegistration -from restclients.util.summer_term import is_full_summer_term,\ - is_a_term, is_b_term from myuw.dao.term import get_current_summer_term,\ - get_comparison_date, get_specific_term, get_current_quarter + get_comparison_date, get_specific_term, get_current_quarter,\ + is_a_term, is_b_term, is_full_summer_term from myuw.dao.schedule import has_summer_quarter_section,\ get_current_quarter_schedule, get_next_quarter_schedule,\ get_next_autumn_quarter_schedule diff --git a/myuw/dao/schedule.py b/myuw/dao/schedule.py index 2ee4129ac4..fb62ffff7b 100644 --- a/myuw/dao/schedule.py +++ b/myuw/dao/schedule.py @@ -6,12 +6,12 @@ import traceback from restclients.models.sws import ClassSchedule from restclients.sws.registration import get_schedule_by_regid_and_term -from restclients.util.summer_term import is_a_term, is_b_term from myuw.logger.timer import Timer from myuw.logger.logback import log_resp_time, log_exception from myuw.dao.pws import get_regid_of_current_user from myuw.dao.term import get_current_quarter, get_next_quarter,\ - get_next_autumn_quarter, get_current_summer_term + get_next_autumn_quarter, get_current_summer_term,\ + is_a_term, is_b_term logger = logging.getLogger(__name__) diff --git a/myuw/dao/term.py b/myuw/dao/term.py index 9c58c5bded..44a9a9a5e3 100644 --- a/myuw/dao/term.py +++ b/myuw/dao/term.py @@ -9,7 +9,7 @@ from restclients.models.sws import Term from restclients.util.datetime_convertor import convert_to_begin_of_day,\ convert_to_end_of_day -from restclients.util.summer_term import is_a_term, is_b_term +from restclients.sws.section import is_a_term, is_b_term, is_full_summer_term from restclients.sws.term import get_term_by_date, get_specific_term,\ get_current_term, get_next_term, get_previous_term,\ get_term_before, get_term_after, get_next_autumn_term,\ From 8d12292f9a0b7bf9702f836798b4a3ea1cafbe94 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 16 Nov 2015 16:50:12 -0800 Subject: [PATCH 107/116] Resolev MUWM-3195 new testids: seagrad, botgrad, tacgrad --- myuw/data/required-list.txt | 3 + ...ive => committee_id_1000002_status_active} | 0 ...ive => committee_id_1000003_status_active} | 0 ...ive => committee_id_1000004_status_active} | 0 .../{leave_id_000083856 => leave_id_1000002} | 0 .../{leave_id_000018235 => leave_id_1000003} | 0 .../{leave_id_12345678 => leave_id_1000004} | 0 ...ition_id_000083856 => petition_id_1000002} | 0 ...ition_id_000018235 => petition_id_1000003} | 0 ...tition_id_12345678 => petition_id_1000004} | 0 ...uest_id_1000002_exclude_past_quarter_true} | 0 ...uest_id_1000003_exclude_past_quarter_true} | 0 ...uest_id_1000004_exclude_past_quarter_true} | 0 .../effective_member/{eight => botgrad} | 2 +- .../effective_member/{javerage => seagrad} | 2 +- .../effective_member/{jbothell => tacgrad} | 2 +- .../file/identity/v1/person/botgrad/full.json | 46 ++++++++++++++ .../file/identity/v1/person/seagrad/full.json | 46 ++++++++++++++ .../file/identity/v1/person/tacgrad/full.json | 46 ++++++++++++++ .../10000000000000000000000000000002.json | 42 +++++++++++++ .../10000000000000000000000000000003.json | 42 +++++++++++++ .../10000000000000000000000000000004.json | 42 +++++++++++++ .../nws/v1/uwnetid/botgrad/subscription/105 | 28 +++++++++ .../nws/v1/uwnetid/seagrad/subscription/105 | 28 +++++++++ .../nws/v1/uwnetid/tacgrad/subscription/105 | 28 +++++++++ .../handlebars/card/grad_status.html | 6 +- myuw/test/api/grad.py | 6 +- myuw/test/dao/grad.py | 63 ++++++++----------- 28 files changed, 385 insertions(+), 47 deletions(-) rename myuw/resources/grad/file/services/students/v1/api/{committee_id_000083856_status_active => committee_id_1000002_status_active} (100%) rename myuw/resources/grad/file/services/students/v1/api/{committee_id_000018235_status_active => committee_id_1000003_status_active} (100%) rename myuw/resources/grad/file/services/students/v1/api/{committee_id_12345678_status_active => committee_id_1000004_status_active} (100%) rename myuw/resources/grad/file/services/students/v1/api/{leave_id_000083856 => leave_id_1000002} (100%) rename myuw/resources/grad/file/services/students/v1/api/{leave_id_000018235 => leave_id_1000003} (100%) rename myuw/resources/grad/file/services/students/v1/api/{leave_id_12345678 => leave_id_1000004} (100%) rename myuw/resources/grad/file/services/students/v1/api/{petition_id_000083856 => petition_id_1000002} (100%) rename myuw/resources/grad/file/services/students/v1/api/{petition_id_000018235 => petition_id_1000003} (100%) rename myuw/resources/grad/file/services/students/v1/api/{petition_id_12345678 => petition_id_1000004} (100%) rename myuw/resources/grad/file/services/students/v1/api/{request_id_000083856_exclude_past_quarter_true => request_id_1000002_exclude_past_quarter_true} (100%) rename myuw/resources/grad/file/services/students/v1/api/{request_id_000018235_exclude_past_quarter_true => request_id_1000003_exclude_past_quarter_true} (100%) rename myuw/resources/grad/file/services/students/v1/api/{request_id_12345678_exclude_past_quarter_true => request_id_1000004_exclude_past_quarter_true} (100%) rename myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/{eight => botgrad} (87%) rename myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/{javerage => seagrad} (87%) rename myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/{jbothell => tacgrad} (87%) create mode 100644 myuw/resources/pws/file/identity/v1/person/botgrad/full.json create mode 100644 myuw/resources/pws/file/identity/v1/person/seagrad/full.json create mode 100644 myuw/resources/pws/file/identity/v1/person/tacgrad/full.json create mode 100644 myuw/resources/sws/file/student/v5/person/10000000000000000000000000000002.json create mode 100644 myuw/resources/sws/file/student/v5/person/10000000000000000000000000000003.json create mode 100644 myuw/resources/sws/file/student/v5/person/10000000000000000000000000000004.json create mode 100644 myuw/resources/uwnetid/file/nws/v1/uwnetid/botgrad/subscription/105 create mode 100644 myuw/resources/uwnetid/file/nws/v1/uwnetid/seagrad/subscription/105 create mode 100644 myuw/resources/uwnetid/file/nws/v1/uwnetid/tacgrad/subscription/105 diff --git a/myuw/data/required-list.txt b/myuw/data/required-list.txt index 61359f37bd..9861ba220c 100644 --- a/myuw/data/required-list.txt +++ b/myuw/data/required-list.txt @@ -3,6 +3,9 @@ jinter jbothell jnew eight +seagrad +botgrad +tacgrad none b3306a b3306b diff --git a/myuw/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active b/myuw/resources/grad/file/services/students/v1/api/committee_id_1000002_status_active similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/committee_id_000083856_status_active rename to myuw/resources/grad/file/services/students/v1/api/committee_id_1000002_status_active diff --git a/myuw/resources/grad/file/services/students/v1/api/committee_id_000018235_status_active b/myuw/resources/grad/file/services/students/v1/api/committee_id_1000003_status_active similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/committee_id_000018235_status_active rename to myuw/resources/grad/file/services/students/v1/api/committee_id_1000003_status_active diff --git a/myuw/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active b/myuw/resources/grad/file/services/students/v1/api/committee_id_1000004_status_active similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/committee_id_12345678_status_active rename to myuw/resources/grad/file/services/students/v1/api/committee_id_1000004_status_active diff --git a/myuw/resources/grad/file/services/students/v1/api/leave_id_000083856 b/myuw/resources/grad/file/services/students/v1/api/leave_id_1000002 similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/leave_id_000083856 rename to myuw/resources/grad/file/services/students/v1/api/leave_id_1000002 diff --git a/myuw/resources/grad/file/services/students/v1/api/leave_id_000018235 b/myuw/resources/grad/file/services/students/v1/api/leave_id_1000003 similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/leave_id_000018235 rename to myuw/resources/grad/file/services/students/v1/api/leave_id_1000003 diff --git a/myuw/resources/grad/file/services/students/v1/api/leave_id_12345678 b/myuw/resources/grad/file/services/students/v1/api/leave_id_1000004 similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/leave_id_12345678 rename to myuw/resources/grad/file/services/students/v1/api/leave_id_1000004 diff --git a/myuw/resources/grad/file/services/students/v1/api/petition_id_000083856 b/myuw/resources/grad/file/services/students/v1/api/petition_id_1000002 similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/petition_id_000083856 rename to myuw/resources/grad/file/services/students/v1/api/petition_id_1000002 diff --git a/myuw/resources/grad/file/services/students/v1/api/petition_id_000018235 b/myuw/resources/grad/file/services/students/v1/api/petition_id_1000003 similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/petition_id_000018235 rename to myuw/resources/grad/file/services/students/v1/api/petition_id_1000003 diff --git a/myuw/resources/grad/file/services/students/v1/api/petition_id_12345678 b/myuw/resources/grad/file/services/students/v1/api/petition_id_1000004 similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/petition_id_12345678 rename to myuw/resources/grad/file/services/students/v1/api/petition_id_1000004 diff --git a/myuw/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true b/myuw/resources/grad/file/services/students/v1/api/request_id_1000002_exclude_past_quarter_true similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/request_id_000083856_exclude_past_quarter_true rename to myuw/resources/grad/file/services/students/v1/api/request_id_1000002_exclude_past_quarter_true diff --git a/myuw/resources/grad/file/services/students/v1/api/request_id_000018235_exclude_past_quarter_true b/myuw/resources/grad/file/services/students/v1/api/request_id_1000003_exclude_past_quarter_true similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/request_id_000018235_exclude_past_quarter_true rename to myuw/resources/grad/file/services/students/v1/api/request_id_1000003_exclude_past_quarter_true diff --git a/myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true b/myuw/resources/grad/file/services/students/v1/api/request_id_1000004_exclude_past_quarter_true similarity index 100% rename from myuw/resources/grad/file/services/students/v1/api/request_id_12345678_exclude_past_quarter_true rename to myuw/resources/grad/file/services/students/v1/api/request_id_1000004_exclude_past_quarter_true diff --git a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/eight b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/botgrad similarity index 87% rename from myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/eight rename to myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/botgrad index 5509983ec4..8c612d27f4 100644 --- a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/eight +++ b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/botgrad @@ -5,7 +5,7 @@
    - eight + botgrad diff --git a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/javerage b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/seagrad similarity index 87% rename from myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/javerage rename to myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/seagrad index 5aa68a8225..9709063917 100644 --- a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/javerage +++ b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/seagrad @@ -4,7 +4,7 @@
    - javerage + seagrad diff --git a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jbothell b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/tacgrad similarity index 87% rename from myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jbothell rename to myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/tacgrad index f9d61276af..370f513e3a 100644 --- a/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/jbothell +++ b/myuw/resources/gws/file/group_sws/v2/group/uw_affiliation_graduate/effective_member/tacgrad @@ -5,7 +5,7 @@
    - jbothell + tacgrad diff --git a/myuw/resources/pws/file/identity/v1/person/botgrad/full.json b/myuw/resources/pws/file/identity/v1/person/botgrad/full.json new file mode 100644 index 0000000000..52a9eb8e71 --- /dev/null +++ b/myuw/resources/pws/file/identity/v1/person/botgrad/full.json @@ -0,0 +1,46 @@ +{"DisplayName":"BOTHELL GRADUATE STUDENT", +"EduPersonAffiliations":["member", +"student", +"employee"], +"IsTestEntity":true, +"PriorUWNetIDs":[], +"PriorUWRegIDs":[], +"RegisteredFirstMiddleName":"BOTHELL GRADUATE", +"RegisteredName":"BOTHELL GRADUATE STUDENT", +"RegisteredSurname":"STUDENT", +"UIDNumber":"10001", +"UWNetID":"botgrad", +"UWRegID":"10000000000000000000000000000003", +"WhitepagesPublish":true, +"PersonAffiliations":{ + "EmployeePersonAffiliation":{ + "EmployeeID":"100000003", + "EmployeeWhitePages":{ + "Address1":null, + "Address2":null, + "Department1":"University Computing Services", + "Department2":null, + "Email1":"botgrad@uw.edu", + "Email2":null, + "Fax":"+1 206 123-4321", + "Name":"BOTHELL GRADUATE STUDENT", + "Phone1":"+1 206 123-1234", + "Phone2":"+1 206 543-1234", + "PublishInDirectory":false, + "Title1":"QA Engineer", + "Title2":null, + "TouchDial":null, + "VoiceMail":null}, + "HomeDepartment":"OVP OF UW IT", + "MailStop":"359540"}, +"StudentPersonAffiliation":{ + "StudentNumber":"1000003", + "StudentSystemKey":"1000003", + "StudentWhitePages":{"Class":"Senior", + "Department1":"Computer Science", + "Department2":"Anthropology", + "Department3":null, + "Email":"botgrad@uw.edu", + "Name":"BOTHELL GRADUATE STUDENT", + "Phone":"+1 206 123-1234", + "PublishInDirectory":false}}}} diff --git a/myuw/resources/pws/file/identity/v1/person/seagrad/full.json b/myuw/resources/pws/file/identity/v1/person/seagrad/full.json new file mode 100644 index 0000000000..c5eefea42d --- /dev/null +++ b/myuw/resources/pws/file/identity/v1/person/seagrad/full.json @@ -0,0 +1,46 @@ +{"DisplayName":"SEATTLE GRADUATE STUDENT", +"EduPersonAffiliations":["member", +"student", +"employee"], +"IsTestEntity":true, +"PriorUWNetIDs":[], +"PriorUWRegIDs":[], +"RegisteredFirstMiddleName":"SEATTLE GRADUATE", +"RegisteredName":"SEATTLE GRADUATE STUDENT", +"RegisteredSurname":"STUDENT", +"UIDNumber":"10001", +"UWNetID":"seagrad", +"UWRegID":"10000000000000000000000000000002", +"WhitepagesPublish":true, +"PersonAffiliations":{ + "EmployeePersonAffiliation":{ + "EmployeeID":"100000002", + "EmployeeWhitePages":{ + "Address1":null, + "Address2":null, + "Department1":"University Computing Services", + "Department2":null, + "Email1":"seagrad@uw.edu", + "Email2":null, + "Fax":"+1 206 123-4321", + "Name":"SEATTLE GRADUATE STUDENT", + "Phone1":"+1 206 123-1234", + "Phone2":"+1 206 543-1234", + "PublishInDirectory":false, + "Title1":"QA Engineer", + "Title2":null, + "TouchDial":null, + "VoiceMail":null}, + "HomeDepartment":"OVP OF UW IT", + "MailStop":"359540"}, +"StudentPersonAffiliation":{ + "StudentNumber":"1000002", + "StudentSystemKey":"1000002", + "StudentWhitePages":{"Class":"Senior", + "Department1":"Computer Science", + "Department2":"Anthropology", + "Department3":null, + "Email":"seagrad@uw.edu", + "Name":"SEATTLE GRADUATE STUDENT", + "Phone":"+1 206 123-1234", + "PublishInDirectory":false}}}} diff --git a/myuw/resources/pws/file/identity/v1/person/tacgrad/full.json b/myuw/resources/pws/file/identity/v1/person/tacgrad/full.json new file mode 100644 index 0000000000..40fbb7dfc7 --- /dev/null +++ b/myuw/resources/pws/file/identity/v1/person/tacgrad/full.json @@ -0,0 +1,46 @@ +{"DisplayName":"TACOMA GRADUATE STUDENT", +"EduPersonAffiliations":["member", +"student", +"employee"], +"IsTestEntity":true, +"PriorUWNetIDs":[], +"PriorUWRegIDs":[], +"RegisteredFirstMiddleName":"TACOMA GRADUATE", +"RegisteredName":"TACOMA GRADUATE STUDENT", +"RegisteredSurname":"STUDENT", +"UIDNumber":"10001", +"UWNetID":"tacgrad", +"UWRegID":"10000000000000000000000000000004", +"WhitepagesPublish":true, +"PersonAffiliations":{ + "EmployeePersonAffiliation":{ + "EmployeeID":"100000004", + "EmployeeWhitePages":{ + "Address1":null, + "Address2":null, + "Department1":"University Computing Services", + "Department2":null, + "Email1":"tacgrad@uw.edu", + "Email2":null, + "Fax":"+1 206 123-4321", + "Name":"TACOMA GRADUATE STUDENT", + "Phone1":"+1 206 123-1234", + "Phone2":"+1 206 543-1234", + "PublishInDirectory":false, + "Title1":"QA Engineer", + "Title2":null, + "TouchDial":null, + "VoiceMail":null}, + "HomeDepartment":"OVP OF UW IT", + "MailStop":"359540"}, +"StudentPersonAffiliation":{ + "StudentNumber":"1000004", + "StudentSystemKey":"1000004", + "StudentWhitePages":{"Class":"Senior", + "Department1":"Computer Science", + "Department2":"Anthropology", + "Department3":null, + "Email":"tacgrad@uw.edu", + "Name":"TACOMA GRADUATE STUDENT", + "Phone":"+1 206 123-1234", + "PublishInDirectory":false}}}} diff --git a/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000002.json b/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000002.json new file mode 100644 index 0000000000..50cf594983 --- /dev/null +++ b/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000002.json @@ -0,0 +1,42 @@ +{ +"BirthDate":"1961-10-26", +"DirectoryRelease":true, +"Email":"seagrad@uw.edu", +"EmployeeID":"100000002", +"FirstName":"Seattle Graduate", +"Gender":"M", +"LastEnrolled":{ + "Href":"\/student\/v5\/term\/2013,winter.json", + "Quarter":"winter", + "Year":2012}, +"LastName":"Student", +"LocalAddress":{ + "City":"Seattle", + "Country":"United States", + "Line1":"4634 26th Ave NE", + "Line2":"APT 102", + "PostalCode":"", + "State":"WA", + "Zip":""}, +"LocalPhone":null, +"PermanentAddress":{ + "City":"Bellevue", + "Country":"United States", + "Line1":"1645 140th Ave NE", + "Line2":"APT 980", + "PostalCode":"", + "State":"WA", + "Zip":"98005-1234"}, +"PermanentPhone":"4255556789", +"RegID":"10000000000000000000000000000002", +"Resident":null, +"StudentName":"Student,Seattle Graduate", +"StudentNumber":"1000002", +"StudentSystemKey":"1000002", +"TestScore":{ + "Href":"\/student\/v5\/testscore\/10000000000000000000000000000002.json", + "RegID":10000000000000000000000000000002}, +"UWNetID":"seagrad", +"Veteran":{"Code":"0", + "Description":null}, +"VisaType":null} diff --git a/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000003.json b/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000003.json new file mode 100644 index 0000000000..3eb3762910 --- /dev/null +++ b/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000003.json @@ -0,0 +1,42 @@ +{ +"BirthDate":"1961-10-26", +"DirectoryRelease":true, +"Email":"botgrad@uw.edu", +"EmployeeID":"100000003", +"FirstName":"Bothell Graduate", +"Gender":"M", +"LastEnrolled":{ + "Href":"\/student\/v5\/term\/2013,winter.json", + "Quarter":"winter", + "Year":2012}, +"LastName":"Student", +"LocalAddress":{ + "City":"Bothell", + "Country":"United States", + "Line1":"4634 26th Ave NE", + "Line2":"APT 102", + "PostalCode":"", + "State":"WA", + "Zip":""}, +"LocalPhone":null, +"PermanentAddress":{ + "City":"Bellevue", + "Country":"United States", + "Line1":"1645 140th Ave NE", + "Line2":"APT 980", + "PostalCode":"", + "State":"WA", + "Zip":"98005-1234"}, +"PermanentPhone":"4255556789", +"RegID":"10000000000000000000000000000003", +"Resident":null, +"StudentName":"Student,Bothell Graduate", +"StudentNumber":"1000003", +"StudentSystemKey":"1000003", +"TestScore":{ + "Href":"\/student\/v5\/testscore\/10000000000000000000000000000003.json", + "RegID":10000000000000000000000000000003}, +"UWNetID":"botgrad", +"Veteran":{"Code":"0", + "Description":null}, +"VisaType":null} diff --git a/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000004.json b/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000004.json new file mode 100644 index 0000000000..1d3cc44647 --- /dev/null +++ b/myuw/resources/sws/file/student/v5/person/10000000000000000000000000000004.json @@ -0,0 +1,42 @@ +{ +"BirthDate":"1961-10-26", +"DirectoryRelease":true, +"Email":"tacgrad@uw.edu", +"EmployeeID":"100000004", +"FirstName":"Tacoma Graduate", +"Gender":"M", +"LastEnrolled":{ + "Href":"\/student\/v5\/term\/2013,winter.json", + "Quarter":"winter", + "Year":2012}, +"LastName":"Student", +"LocalAddress":{ + "City":"Tacoma", + "Country":"United States", + "Line1":"4634 26th Ave NE", + "Line2":"APT 102", + "PostalCode":"", + "State":"WA", + "Zip":""}, +"LocalPhone":null, +"PermanentAddress":{ + "City":"Bellevue", + "Country":"United States", + "Line1":"1645 140th Ave NE", + "Line2":"APT 980", + "PostalCode":"", + "State":"WA", + "Zip":"98005-1234"}, +"PermanentPhone":"4255556789", +"RegID":"10000000000000000000000000000004", +"Resident":null, +"StudentName":"Student,Tacoma Graduate", +"StudentNumber":"1000004", +"StudentSystemKey":"1000004", +"TestScore":{ + "Href":"\/student\/v5\/testscore\/10000000000000000000000000000004.json", + "RegID":10000000000000000000000000000004}, +"UWNetID":"tacgrad", +"Veteran":{"Code":"0", + "Description":null}, +"VisaType":null} diff --git a/myuw/resources/uwnetid/file/nws/v1/uwnetid/botgrad/subscription/105 b/myuw/resources/uwnetid/file/nws/v1/uwnetid/botgrad/subscription/105 new file mode 100644 index 0000000000..181305b51e --- /dev/null +++ b/myuw/resources/uwnetid/file/nws/v1/uwnetid/botgrad/subscription/105 @@ -0,0 +1,28 @@ +{ + "uwNetID" : "botgrad", + "subscriptionList" : [ + { + "subscriptionCode" : 105, + "subscriptionName" : "U Forwarding", + "permitted" : true, + "statusCode" : 20, + "statusName" : "Active", + "actions" : [ + "Show" + ], + "dataField" : "FWD", + "dataValue" : "botgrad@gamail.uw.edu", + "permits" : [ + { + "type" : "permit", + "mode" : "implicit", + "categoryCode" : 1, + "categoryName" : "Graduate", + "statusCode" : 1, + "statusName" : "current" + } + ] + } + ], + "timeStamp" : "Fri, 25 Jul 2014 13:47:19 -0700" +} diff --git a/myuw/resources/uwnetid/file/nws/v1/uwnetid/seagrad/subscription/105 b/myuw/resources/uwnetid/file/nws/v1/uwnetid/seagrad/subscription/105 new file mode 100644 index 0000000000..d4c72ca7dd --- /dev/null +++ b/myuw/resources/uwnetid/file/nws/v1/uwnetid/seagrad/subscription/105 @@ -0,0 +1,28 @@ +{ + "uwNetID" : "seagrad", + "subscriptionList" : [ + { + "subscriptionCode" : 105, + "subscriptionName" : "U Forwarding", + "permitted" : true, + "statusCode" : 20, + "statusName" : "Active", + "actions" : [ + "Show" + ], + "dataField" : "FWD", + "dataValue" : "seagrad@gamail.uw.edu", + "permits" : [ + { + "type" : "permit", + "mode" : "implicit", + "categoryCode" : 1, + "categoryName" : "Graduate", + "statusCode" : 1, + "statusName" : "current" + } + ] + } + ], + "timeStamp" : "Fri, 25 Jul 2014 13:47:19 -0700" +} diff --git a/myuw/resources/uwnetid/file/nws/v1/uwnetid/tacgrad/subscription/105 b/myuw/resources/uwnetid/file/nws/v1/uwnetid/tacgrad/subscription/105 new file mode 100644 index 0000000000..7fec6f16f3 --- /dev/null +++ b/myuw/resources/uwnetid/file/nws/v1/uwnetid/tacgrad/subscription/105 @@ -0,0 +1,28 @@ +{ + "uwNetID" : "tacgrad", + "subscriptionList" : [ + { + "subscriptionCode" : 105, + "subscriptionName" : "U Forwarding", + "permitted" : true, + "statusCode" : 20, + "statusName" : "Active", + "actions" : [ + "Show" + ], + "dataField" : "FWD", + "dataValue" : "tacgrad@gamail.uw.edu", + "permits" : [ + { + "type" : "permit", + "mode" : "implicit", + "categoryCode" : 1, + "categoryName" : "Graduate", + "statusCode" : 1, + "statusName" : "current" + } + ] + } + ], + "timeStamp" : "Fri, 25 Jul 2014 13:47:19 -0700" +} diff --git a/myuw/templates/handlebars/card/grad_status.html b/myuw/templates/handlebars/card/grad_status.html index 8761a604b0..b649a45655 100644 --- a/myuw/templates/handlebars/card/grad_status.html +++ b/myuw/templates/handlebars/card/grad_status.html @@ -62,10 +62,10 @@
    - {{#not_equal status 'approved'}} - {{capitalizeString status}} + {{#not_equal status 'Approved'}} + {{status}} {{/not_equal}} - {{#equal status 'approved'}} + {{#equal status 'Approved'}} Approved
     Pay Your Fee To Confirm {{/equal}}
    diff --git a/myuw/test/api/grad.py b/myuw/test/api/grad.py index 85709c4c56..a1fe211eb6 100644 --- a/myuw/test/api/grad.py +++ b/myuw/test/api/grad.py @@ -39,9 +39,9 @@ def setUp(self): @skipIf(missing_url("myuw_home"), "myuw urls not configured") def test_javerage(self): url = reverse("myuw_grad_api") - get_user('javerage') - self.client.login(username='javerage', - password=get_user_pass('javerage')) + get_user('seagrad') + self.client.login(username='seagrad', + password=get_user_pass('seagrad')) response = self.client.get(url) self.assertEquals(response.status_code, 200) self.assertIsNotNone(response.content) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index 956fa3a459..ed30050797 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -10,27 +10,14 @@ class TestGrad(TestCase): - def test_null_system_key(self): - reqs = get_degree_by_regid('00000000000000000000000000000001') - self.assertIsNone(reqs) - - reqs = get_committee_by_regid('00000000000000000000000000000001') - self.assertIsNone(reqs) - - reqs = get_leave_by_regid('00000000000000000000000000000001') - self.assertIsNone(reqs) - - reqs = get_petition_by_regid('00000000000000000000000000000001') - self.assertIsNone(reqs) - def test_get_grad_committee(self): committee_reqs = get_committee_by_regid( - '9136CCB8F66711D5BE060004AC494FFE') + '10000000000000000000000000000002') self.assertIsNotNone(committee_reqs) self.assertEquals(len(committee_reqs), 3) committee_reqs = get_committee_by_regid( - '9136CCB8F66711D5BE060004AC494F31') + '10000000000000000000000000000003') self.assertEquals(len(committee_reqs), 0) self.assertIsNone(to_json(committee_reqs)) @@ -38,13 +25,13 @@ def test_get_grad_degree(self): now_request = RequestFactory().get("/") degree_reqs = get_degree_by_regid( - '12345678901234567890123456789012') + '10000000000000000000000000000004') self.assertIsNotNone(degree_reqs) self.assertEquals(len(degree_reqs), 0) self.assertIsNone(degree_to_json(degree_reqs, now_request)) degree_reqs = get_degree_by_regid( - '9136CCB8F66711D5BE060004AC494FFE') + '10000000000000000000000000000002') self.assertIsNotNone(degree_reqs) self.assertEquals(len(degree_reqs), 8) @@ -111,12 +98,12 @@ def test_is_before_eof_2weeks_since_decision_date(self): def test_get_grad_leave(self): now_request = RequestFactory().get("/") - leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494F31') + leave_reqs = get_leave_by_regid('10000000000000000000000000000003') self.assertIsNotNone(leave_reqs) self.assertEquals(len(leave_reqs), 0) self.assertIsNone(leave_to_json(leave_reqs, now_request)) - leave_reqs = get_leave_by_regid('9136CCB8F66711D5BE060004AC494FFE') + leave_reqs = get_leave_by_regid('10000000000000000000000000000002') self.assertIsNotNone(leave_reqs) self.assertEquals(len(leave_reqs), 5) now_request.session = {} @@ -124,12 +111,12 @@ def test_get_grad_leave(self): json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 5) leave = json_data[2] - self.assertEquals(leave["status"], "paid") + self.assertEquals(leave["status"], "Paid") leave = json_data[3] - self.assertEquals(leave["status"], "denied") + self.assertEquals(leave["status"], "Denied") # denied shows until eof 2012 autumn leave = json_data[4] - self.assertEquals(leave["status"], "approved") + self.assertEquals(leave["status"], "Approved") # the 1st approved shows until eof last instruction 2012 autumn # the 2nd approved shows until eof last instruction 2013 spring self.assertEquals(len(leave["terms"]), 2) @@ -139,10 +126,10 @@ def test_get_grad_leave(self): json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 5) leave = json_data[2] - self.assertEquals(leave["status"], "paid") + self.assertEquals(leave["status"], "Paid") # paid shows until eof 2013 winter leave = json_data[4] - self.assertEquals(leave["status"], "approved") + self.assertEquals(leave["status"], "Approved") self.assertEquals(len(leave["terms"]), 1) now_request.session = {} @@ -150,21 +137,21 @@ def test_get_grad_leave(self): json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 4) leave = json_data[2] - self.assertEquals(leave["status"], "paid") + self.assertEquals(leave["status"], "Paid") # paid shows until eof 2013 winter leave = json_data[3] - self.assertEquals(leave["status"], "approved") + self.assertEquals(leave["status"], "Approved") # the end of winter 2013 now_request.session = {} now_request.session["myuw_override_date"] = "2013-03-27" json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 3) leave = json_data[0] - self.assertEquals(leave["status"], "requested") + self.assertEquals(leave["status"], "Requested") leave = json_data[1] - self.assertEquals(leave["status"], "withdrawn") + self.assertEquals(leave["status"], "Withdrawn") leave = json_data[2] - self.assertEquals(leave["status"], "approved") + self.assertEquals(leave["status"], "Approved") self.assertEquals(len(leave["terms"]), 1) # this approved shows until eof last instruction 2013 spring now_request.session = {} @@ -172,11 +159,11 @@ def test_get_grad_leave(self): json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 3) leave = json_data[0] - self.assertEquals(leave["status"], "requested") + self.assertEquals(leave["status"], "Requested") leave = json_data[1] - self.assertEquals(leave["status"], "withdrawn") + self.assertEquals(leave["status"], "Withdrawn") leave = json_data[2] - self.assertEquals(leave["status"], "approved") + self.assertEquals(leave["status"], "Approved") self.assertEquals(len(leave["terms"]), 1) # this approved shows until eof last instruction 2013 spring now_request.session = {} @@ -184,19 +171,19 @@ def test_get_grad_leave(self): json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 2) leave = json_data[0] - self.assertEquals(leave["status"], "requested") + self.assertEquals(leave["status"], "Requested") leave = json_data[1] - self.assertEquals(leave["status"], "withdrawn") + self.assertEquals(leave["status"], "Withdrawn") # withdrawn shows until eof 2013 summer now_request.session = {} now_request.session["myuw_override_date"] = "2013-08-28" json_data = leave_to_json(leave_reqs, now_request) self.assertEquals(len(json_data), 1) leave = json_data[0] - self.assertEquals(leave["status"], "requested") + self.assertEquals(leave["status"], "Requested") # requested always shows - leave_reqs = get_leave_by_regid('12345678901234567890123456789012') + leave_reqs = get_leave_by_regid('10000000000000000000000000000004') self.assertIsNotNone(leave_reqs) self.assertEquals(len(leave_reqs), 7) now_request.session = {} @@ -208,12 +195,12 @@ def test_get_grad_petition(self): now_request = RequestFactory().get("/") petition_reqs = get_petition_by_regid( - '9136CCB8F66711D5BE060004AC494F31') + '10000000000000000000000000000003') self.assertEquals(len(petition_reqs), 0) self.assertIsNone(petition_to_json(petition_reqs, now_request)) petition_reqs = get_petition_by_regid( - '9136CCB8F66711D5BE060004AC494FFE') + '10000000000000000000000000000002') self.assertIsNotNone(petition_reqs) self.assertEquals(len(petition_reqs), 7) From d2866826136bd15a1f6354890a12870a3ff9ef8e Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Mon, 16 Nov 2015 16:52:13 -0800 Subject: [PATCH 108/116] leave status is title faced. --- myuw/test/api/grad.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myuw/test/api/grad.py b/myuw/test/api/grad.py index a1fe211eb6..a68b3f44e4 100644 --- a/myuw/test/api/grad.py +++ b/myuw/test/api/grad.py @@ -85,7 +85,7 @@ def test_javerage(self): "Dissertation/Thesis research/writing") self.assertEqual(leave['submit_date'], "2012-09-10T09:40:03") - self.assertEqual(leave['status'], "requested") + self.assertEqual(leave['status'], "Requested") self.assertEqual(len(leave['terms']), 1) self.assertEqual(leave['terms'][0]['quarter'], "Spring") self.assertEqual(leave['terms'][0]['year'], 2013) From 073f50fff203897d5a97251bce7d78eba24ee22f Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 17 Nov 2015 11:50:21 -0800 Subject: [PATCH 109/116] increase coverage on grad committee. --- myuw/test/dao/grad.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index ed30050797..842870823f 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -15,6 +15,11 @@ def test_get_grad_committee(self): '10000000000000000000000000000002') self.assertIsNotNone(committee_reqs) self.assertEquals(len(committee_reqs), 3) + json_data = to_json(committee_reqs) + self.assertIsNotNone(json_data) + self.assertEquals(len(json_data), 3) + self.assertEquals(len(json_data[1]['members']), 3) + self.assertEquals(len(json_data[2]['members']), 4) committee_reqs = get_committee_by_regid( '10000000000000000000000000000003') From 4b14259e544cfc976270654ca46ae82d67909d65 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 17 Nov 2015 12:06:00 -0800 Subject: [PATCH 110/116] fix coverage test/dao/grad.py --- myuw/test/dao/grad.py | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index 842870823f..c0939c0414 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -1,30 +1,36 @@ +from datetime import date, datetime, timedelta from django.test import TestCase from django.conf import settings -from datetime import date, datetime, timedelta +from django.test.client import RequestFactory from myuw.dao.grad import get_degree_by_regid,\ get_leave_by_regid, get_committee_by_regid, to_json,\ get_petition_by_regid, leave_to_json, petition_to_json,\ is_before_eof_2weeks_since_decision_date, degree_to_json -from django.test.client import RequestFactory + + +FDAO_SWS = 'restclients.dao_implementation.sws.File' +FDAO_GRA = 'restclients.dao_implementation.grad.File' class TestGrad(TestCase): def test_get_grad_committee(self): - committee_reqs = get_committee_by_regid( - '10000000000000000000000000000002') - self.assertIsNotNone(committee_reqs) - self.assertEquals(len(committee_reqs), 3) - json_data = to_json(committee_reqs) - self.assertIsNotNone(json_data) - self.assertEquals(len(json_data), 3) - self.assertEquals(len(json_data[1]['members']), 3) - self.assertEquals(len(json_data[2]['members']), 4) - - committee_reqs = get_committee_by_regid( - '10000000000000000000000000000003') - self.assertEquals(len(committee_reqs), 0) - self.assertIsNone(to_json(committee_reqs)) + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + committee_reqs = get_committee_by_regid( + '10000000000000000000000000000002') + self.assertIsNotNone(committee_reqs) + self.assertEquals(len(committee_reqs), 3) + json_data = to_json(committee_reqs) + self.assertIsNotNone(json_data) + self.assertEquals(len(json_data), 3) + self.assertEquals(len(json_data[1]['members']), 3) + self.assertEquals(len(json_data[2]['members']), 4) + + committee_reqs = get_committee_by_regid( + '10000000000000000000000000000003') + self.assertEquals(len(committee_reqs), 0) + self.assertIsNone(to_json(committee_reqs)) def test_get_grad_degree(self): now_request = RequestFactory().get("/") From 10f72d502123e8735b59b9152c2b0895b9bf9347 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 17 Nov 2015 12:16:56 -0800 Subject: [PATCH 111/116] Resolve MUWM-3444. --- myuw/static/js/card/grad_committee.js | 2 +- myuw/static/js/card/grad_status.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/myuw/static/js/card/grad_committee.js b/myuw/static/js/card/grad_committee.js index 2a77a9941e..529685844b 100644 --- a/myuw/static/js/card/grad_committee.js +++ b/myuw/static/js/card/grad_committee.js @@ -31,7 +31,7 @@ var GradCommitteeCard = { }, show_error: function() { - GradCommitteeCard.dom_target.html(CardWithError.render("GradCommittee")); + GradCommitteeCard.dom_target.html(CardWithError.render("Your Committees")); } }; diff --git a/myuw/static/js/card/grad_status.js b/myuw/static/js/card/grad_status.js index 3ac499e852..f7c4c1f9ce 100644 --- a/myuw/static/js/card/grad_status.js +++ b/myuw/static/js/card/grad_status.js @@ -42,7 +42,7 @@ var GradStatusCard = { }, show_error: function() { - GradStatusCard.dom_target.html(CardWithError.render("GradStatus")); + GradStatusCard.dom_target.html(CardWithError.render("Graduate Request Status")); } }; From 3ac855d62704d67d3769400e2ab4e49f3352f334 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 17 Nov 2015 12:38:40 -0800 Subject: [PATCH 112/116] resolve name collision. --- myuw/test/api/grad.py | 2 +- myuw/test/dao/grad.py | 2 +- myuw/tests.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/myuw/test/api/grad.py b/myuw/test/api/grad.py index a68b3f44e4..a658ed597e 100644 --- a/myuw/test/api/grad.py +++ b/myuw/test/api/grad.py @@ -32,7 +32,7 @@ ), AUTHENTICATION_BACKENDS=(AUTH_BACKEND,) ) -class TestGrad(TestCase): +class TestApiGrad(TestCase): def setUp(self): self.client = Client() diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index c0939c0414..1e7513092a 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -12,7 +12,7 @@ FDAO_GRA = 'restclients.dao_implementation.grad.File' -class TestGrad(TestCase): +class TestDaoGrad(TestCase): def test_get_grad_committee(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, diff --git a/myuw/tests.py b/myuw/tests.py index d3e7cf256f..4b27f7c220 100644 --- a/myuw/tests.py +++ b/myuw/tests.py @@ -12,8 +12,8 @@ from myuw.test.dao.canvas import TestCanvas from myuw.test.dao.card_display_dates import TestDisplayValues from myuw.test.userservice_validation import TestValidation -from myuw.test.dao.grad import TestGrad -from myuw.test.dao.hfs import TestHFS +from myuw.test.dao.grad import TestDaoGrad +from myuw.test.dao.hfs import TestHFS as TestDaoHFS from myuw.test.dao.library import TestLibrary from myuw.test.dao.building import TestBuildings from myuw.test.dao.category_links import TestCategoryLinks @@ -23,7 +23,7 @@ from myuw.test.api.schedule import TestSchedule as APISchedule from myuw.test.api.books import TestBooks from myuw.test.api.cur_books import TestCurBooks -from myuw.test.api.grad import TestGrad +from myuw.test.api.grad import TestApiGrad from myuw.test.api.hfs import TestHFS as TestHFSAPI from myuw.test.api.profile import TestProfile from myuw.test.api.library import TestLibrary as TestLibraryAPI From e62eba17abd6758399bbae279ef96a411ef9453d Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 17 Nov 2015 12:43:53 -0800 Subject: [PATCH 113/116] add settings back. --- myuw/test/dao/grad.py | 386 +++++++++++++++++++++--------------------- 1 file changed, 196 insertions(+), 190 deletions(-) diff --git a/myuw/test/dao/grad.py b/myuw/test/dao/grad.py index 1e7513092a..14db5a5ed5 100644 --- a/myuw/test/dao/grad.py +++ b/myuw/test/dao/grad.py @@ -33,65 +33,67 @@ def test_get_grad_committee(self): self.assertIsNone(to_json(committee_reqs)) def test_get_grad_degree(self): - now_request = RequestFactory().get("/") - - degree_reqs = get_degree_by_regid( - '10000000000000000000000000000004') - self.assertIsNotNone(degree_reqs) - self.assertEquals(len(degree_reqs), 0) - self.assertIsNone(degree_to_json(degree_reqs, now_request)) - - degree_reqs = get_degree_by_regid( - '10000000000000000000000000000002') - self.assertIsNotNone(degree_reqs) - self.assertEquals(len(degree_reqs), 8) - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-24" - json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 8) - degree = json_data[4] - self.assertEquals(degree["status"], "Withdrawn") - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-25" - json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 7) - degree = json_data[4] - self.assertEquals(degree["status"], "Candidacy Granted") - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-27" - json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 7) - degree = json_data[0] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[1] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[2] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[3] - self.assertEquals(degree["status"], "Recommended by Dept") - degree = json_data[4] - self.assertEquals(degree["status"], "Candidacy Granted") - degree = json_data[5] - self.assertEquals(degree["status"], "Graduated by Grad School") - degree = json_data[6] - self.assertEquals(degree["status"], "Did Not Graduate") - - # after the end of following term - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-28" - json_data = degree_to_json(degree_reqs, now_request) - self.assertEquals(len(json_data), 4) - degree = json_data[0] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[1] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[2] - self.assertTrue(degree["status"].startswith("Awaiting ")) - degree = json_data[3] - self.assertEquals(degree["status"], "Recommended by Dept") + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + + degree_reqs = get_degree_by_regid( + '10000000000000000000000000000004') + self.assertIsNotNone(degree_reqs) + self.assertEquals(len(degree_reqs), 0) + self.assertIsNone(degree_to_json(degree_reqs, now_request)) + + degree_reqs = get_degree_by_regid( + '10000000000000000000000000000002') + self.assertIsNotNone(degree_reqs) + self.assertEquals(len(degree_reqs), 8) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-24" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 8) + degree = json_data[4] + self.assertEquals(degree["status"], "Withdrawn") + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-25" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 7) + degree = json_data[4] + self.assertEquals(degree["status"], "Candidacy Granted") + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-27" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 7) + degree = json_data[0] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[1] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[2] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[3] + self.assertEquals(degree["status"], "Recommended by Dept") + degree = json_data[4] + self.assertEquals(degree["status"], "Candidacy Granted") + degree = json_data[5] + self.assertEquals(degree["status"], "Graduated by Grad School") + degree = json_data[6] + self.assertEquals(degree["status"], "Did Not Graduate") + + # after the end of following term + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-28" + json_data = degree_to_json(degree_reqs, now_request) + self.assertEquals(len(json_data), 4) + degree = json_data[0] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[1] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[2] + self.assertTrue(degree["status"].startswith("Awaiting ")) + degree = json_data[3] + self.assertEquals(degree["status"], "Recommended by Dept") def test_is_before_eof_2weeks_since_decision_date(self): self.assertTrue(is_before_eof_2weeks_since_decision_date( @@ -108,136 +110,140 @@ def test_is_before_eof_2weeks_since_decision_date(self): datetime(2013, 6, 10, 0, 0, 0))) def test_get_grad_leave(self): - now_request = RequestFactory().get("/") - leave_reqs = get_leave_by_regid('10000000000000000000000000000003') - self.assertIsNotNone(leave_reqs) - self.assertEquals(len(leave_reqs), 0) - self.assertIsNone(leave_to_json(leave_reqs, now_request)) - - leave_reqs = get_leave_by_regid('10000000000000000000000000000002') - self.assertIsNotNone(leave_reqs) - self.assertEquals(len(leave_reqs), 5) - now_request.session = {} - now_request.session["myuw_override_date"] = "2012-12-07" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 5) - leave = json_data[2] - self.assertEquals(leave["status"], "Paid") - leave = json_data[3] - self.assertEquals(leave["status"], "Denied") - # denied shows until eof 2012 autumn - leave = json_data[4] - self.assertEquals(leave["status"], "Approved") - # the 1st approved shows until eof last instruction 2012 autumn - # the 2nd approved shows until eof last instruction 2013 spring - self.assertEquals(len(leave["terms"]), 2) - - now_request.session = {} - now_request.session["myuw_override_date"] = "2012-12-08" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 5) - leave = json_data[2] - self.assertEquals(leave["status"], "Paid") - # paid shows until eof 2013 winter - leave = json_data[4] - self.assertEquals(leave["status"], "Approved") - self.assertEquals(len(leave["terms"]), 1) - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-01-07" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 4) - leave = json_data[2] - self.assertEquals(leave["status"], "Paid") - # paid shows until eof 2013 winter - leave = json_data[3] - self.assertEquals(leave["status"], "Approved") - # the end of winter 2013 - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-03-27" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 3) - leave = json_data[0] - self.assertEquals(leave["status"], "Requested") - leave = json_data[1] - self.assertEquals(leave["status"], "Withdrawn") - leave = json_data[2] - self.assertEquals(leave["status"], "Approved") - self.assertEquals(len(leave["terms"]), 1) - # this approved shows until eof last instruction 2013 spring - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-06-07" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 3) - leave = json_data[0] - self.assertEquals(leave["status"], "Requested") - leave = json_data[1] - self.assertEquals(leave["status"], "Withdrawn") - leave = json_data[2] - self.assertEquals(leave["status"], "Approved") - self.assertEquals(len(leave["terms"]), 1) - # this approved shows until eof last instruction 2013 spring - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-06-08" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 2) - leave = json_data[0] - self.assertEquals(leave["status"], "Requested") - leave = json_data[1] - self.assertEquals(leave["status"], "Withdrawn") - # withdrawn shows until eof 2013 summer - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-08-28" - json_data = leave_to_json(leave_reqs, now_request) - self.assertEquals(len(json_data), 1) - leave = json_data[0] - self.assertEquals(leave["status"], "Requested") - # requested always shows - - leave_reqs = get_leave_by_regid('10000000000000000000000000000004') - self.assertIsNotNone(leave_reqs) - self.assertEquals(len(leave_reqs), 7) - now_request.session = {} - now_request.session["myuw_override_date"] = "2014-06-19" - json_data = leave_to_json(leave_reqs, now_request) - self.assertIsNone(json_data, 0) + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + leave_reqs = get_leave_by_regid('10000000000000000000000000000003') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 0) + self.assertIsNone(leave_to_json(leave_reqs, now_request)) + + leave_reqs = get_leave_by_regid('10000000000000000000000000000002') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 5) + now_request.session = {} + now_request.session["myuw_override_date"] = "2012-12-07" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 5) + leave = json_data[2] + self.assertEquals(leave["status"], "Paid") + leave = json_data[3] + self.assertEquals(leave["status"], "Denied") + # denied shows until eof 2012 autumn + leave = json_data[4] + self.assertEquals(leave["status"], "Approved") + # the 1st approved shows until eof last instruction 2012 autumn + # the 2nd approved shows until eof last instruction 2013 spring + self.assertEquals(len(leave["terms"]), 2) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2012-12-08" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 5) + leave = json_data[2] + self.assertEquals(leave["status"], "Paid") + # paid shows until eof 2013 winter + leave = json_data[4] + self.assertEquals(leave["status"], "Approved") + self.assertEquals(len(leave["terms"]), 1) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-01-07" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 4) + leave = json_data[2] + self.assertEquals(leave["status"], "Paid") + # paid shows until eof 2013 winter + leave = json_data[3] + self.assertEquals(leave["status"], "Approved") + # the end of winter 2013 + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-03-27" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 3) + leave = json_data[0] + self.assertEquals(leave["status"], "Requested") + leave = json_data[1] + self.assertEquals(leave["status"], "Withdrawn") + leave = json_data[2] + self.assertEquals(leave["status"], "Approved") + self.assertEquals(len(leave["terms"]), 1) + # this approved shows until eof last instruction 2013 spring + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-06-07" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 3) + leave = json_data[0] + self.assertEquals(leave["status"], "Requested") + leave = json_data[1] + self.assertEquals(leave["status"], "Withdrawn") + leave = json_data[2] + self.assertEquals(leave["status"], "Approved") + self.assertEquals(len(leave["terms"]), 1) + # this approved shows until eof last instruction 2013 spring + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-06-08" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 2) + leave = json_data[0] + self.assertEquals(leave["status"], "Requested") + leave = json_data[1] + self.assertEquals(leave["status"], "Withdrawn") + # withdrawn shows until eof 2013 summer + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-08-28" + json_data = leave_to_json(leave_reqs, now_request) + self.assertEquals(len(json_data), 1) + leave = json_data[0] + self.assertEquals(leave["status"], "Requested") + # requested always shows + + leave_reqs = get_leave_by_regid('10000000000000000000000000000004') + self.assertIsNotNone(leave_reqs) + self.assertEquals(len(leave_reqs), 7) + now_request.session = {} + now_request.session["myuw_override_date"] = "2014-06-19" + json_data = leave_to_json(leave_reqs, now_request) + self.assertIsNone(json_data, 0) def test_get_grad_petition(self): - now_request = RequestFactory().get("/") - - petition_reqs = get_petition_by_regid( - '10000000000000000000000000000003') - self.assertEquals(len(petition_reqs), 0) - self.assertIsNone(petition_to_json(petition_reqs, now_request)) - - petition_reqs = get_petition_by_regid( - '10000000000000000000000000000002') - self.assertIsNotNone(petition_reqs) - self.assertEquals(len(petition_reqs), 7) - - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-10" - json_data = petition_to_json(petition_reqs, now_request) - self.assertEquals(len(json_data), 7) - peti = json_data[0] - self.assertEqual(peti["dept_recommend"], "Pending") - self.assertEqual(peti["gradschool_decision"], "Pending") - peti = json_data[1] - self.assertEquals(peti["decision_date"], "2013-04-10T00:00:00") - self.assertEqual(peti["dept_recommend"], "Withdraw") - self.assertEqual(peti["gradschool_decision"], "Withdraw") - now_request.session = {} - now_request.session["myuw_override_date"] = "2013-04-25" - json_data = petition_to_json(petition_reqs, now_request) - self.assertEquals(len(json_data), 3) - peti = json_data[0] - self.assertEqual(peti["dept_recommend"], "Pending") - self.assertEqual(peti["gradschool_decision"], "Pending") - peti = json_data[1] - self.assertIsNone(peti["decision_date"]) - self.assertEqual(peti["dept_recommend"], "Deny") - self.assertEqual(peti["gradschool_decision"], "Pending") - peti = json_data[2] - self.assertIsNone(peti["decision_date"]) - self.assertEqual(peti["dept_recommend"], "Approve") - self.assertEqual(peti["gradschool_decision"], "Pending") + with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, + RESTCLIENTS_GRAD_DAO_CLASS=FDAO_GRA): + now_request = RequestFactory().get("/") + + petition_reqs = get_petition_by_regid( + '10000000000000000000000000000003') + self.assertEquals(len(petition_reqs), 0) + self.assertIsNone(petition_to_json(petition_reqs, now_request)) + + petition_reqs = get_petition_by_regid( + '10000000000000000000000000000002') + self.assertIsNotNone(petition_reqs) + self.assertEquals(len(petition_reqs), 7) + + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-10" + json_data = petition_to_json(petition_reqs, now_request) + self.assertEquals(len(json_data), 7) + peti = json_data[0] + self.assertEqual(peti["dept_recommend"], "Pending") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[1] + self.assertEquals(peti["decision_date"], "2013-04-10T00:00:00") + self.assertEqual(peti["dept_recommend"], "Withdraw") + self.assertEqual(peti["gradschool_decision"], "Withdraw") + now_request.session = {} + now_request.session["myuw_override_date"] = "2013-04-25" + json_data = petition_to_json(petition_reqs, now_request) + self.assertEquals(len(json_data), 3) + peti = json_data[0] + self.assertEqual(peti["dept_recommend"], "Pending") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[1] + self.assertIsNone(peti["decision_date"]) + self.assertEqual(peti["dept_recommend"], "Deny") + self.assertEqual(peti["gradschool_decision"], "Pending") + peti = json_data[2] + self.assertIsNone(peti["decision_date"]) + self.assertEqual(peti["dept_recommend"], "Approve") + self.assertEqual(peti["gradschool_decision"], "Pending") From ccff9c7c1c38e373dc35066c517ae1932cf0af01 Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 17 Nov 2015 14:23:54 -0800 Subject: [PATCH 114/116] Add test for 404 in api/grad. --- myuw/test/api/grad.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/myuw/test/api/grad.py b/myuw/test/api/grad.py index a658ed597e..dd1b8164e4 100644 --- a/myuw/test/api/grad.py +++ b/myuw/test/api/grad.py @@ -116,3 +116,9 @@ def test_none(self): self.assertIsNone(data.get("committees")) self.assertIsNone(data.get("leaves")) self.assertIsNone(data.get("petitions")) + + get_user('jinter') + self.client.login(username='jinter', + password=get_user_pass('jinter')) + response = self.client.get(url) + self.assertEquals(response.status_code, 404) From 919b1b71576d6a4eb9a4a84ff40395864d08f5fe Mon Sep 17 00:00:00 2001 From: Fang Lin Date: Tue, 17 Nov 2015 16:19:52 -0800 Subject: [PATCH 115/116] Resolve MUWM-3414 --- myuw/resources/hfs/file/myuw/v1/eight | 4 ++-- myuw/resources/hfs/file/myuw/v1/javerage | 6 +++--- myuw/resources/hfs/file/myuw/v1/jinter | 2 +- myuw/resources/hfs/file/myuw/v1/jnew | 4 ++-- myuw/templates/handlebars/card/hfs.html | 5 +++-- myuw/test/dao/hfs.py | 7 +++++++ 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/myuw/resources/hfs/file/myuw/v1/eight b/myuw/resources/hfs/file/myuw/v1/eight index c14379e3f8..8cc6b7328e 100644 --- a/myuw/resources/hfs/file/myuw/v1/eight +++ b/myuw/resources/hfs/file/myuw/v1/eight @@ -3,11 +3,11 @@ "student_husky_card": { "balance": 100.23, "last_transaction_date": "2014-06-02T15:17:16.789", - "add_funds_url": "https://www.hfs.washington.edu/olco" + "add_funds_url": "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx" }, "resident_dining": { "balance": 15.1, "last_transaction_date": "2014-06-01T13:15:36.573", - "add_funds_url": "https://www.hfs.washington.edu/olco" + "add_funds_url": "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx" } } diff --git a/myuw/resources/hfs/file/myuw/v1/javerage b/myuw/resources/hfs/file/myuw/v1/javerage index 69976b9a94..523ed438b4 100644 --- a/myuw/resources/hfs/file/myuw/v1/javerage +++ b/myuw/resources/hfs/file/myuw/v1/javerage @@ -2,16 +2,16 @@ "student_husky_card": { "balance": 1.23, "last_transaction_date": "2014-06-02T15:17:16.789", - "add_funds_url": "https://www.hfs.washington.edu/olco" + "add_funds_url": "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx" }, "employee_husky_card": { "balance": 1, "last_transaction_date": "2014-05-19T14:16:26.931", - "add_funds_url": "https://www.hfs.washington.edu/olco" + "add_funds_url": "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx" }, "resident_dining": { "balance": 5.1, "last_transaction_date": "2014-06-01T13:15:36.573", - "add_funds_url": "https://www.hfs.washington.edu/olco" + "add_funds_url": "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx" } } diff --git a/myuw/resources/hfs/file/myuw/v1/jinter b/myuw/resources/hfs/file/myuw/v1/jinter index f1ed5f98d0..5dbcfc68d0 100644 --- a/myuw/resources/hfs/file/myuw/v1/jinter +++ b/myuw/resources/hfs/file/myuw/v1/jinter @@ -2,6 +2,6 @@ "employee_husky_card": { "balance": 1, "last_transaction_date": "2014-05-19T14:16:26.931", - "add_funds_url": "https://www.hfs.washington.edu/olco" + "add_funds_url": "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx" } } diff --git a/myuw/resources/hfs/file/myuw/v1/jnew b/myuw/resources/hfs/file/myuw/v1/jnew index c25126c3b1..e6f03b5077 100644 --- a/myuw/resources/hfs/file/myuw/v1/jnew +++ b/myuw/resources/hfs/file/myuw/v1/jnew @@ -1,11 +1,11 @@ { "student_husky_card":{ "balance": 0.0, - "add_funds_url": "https://www.hfs.washington.edu/olco" + "add_funds_url": "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx" }, "resident_dining": { "balance": 105.1, "last_transaction_date": "2014-06-01T13:15:36.573", - "add_funds_url": "https://www.hfs.washington.edu/olco" + "add_funds_url": "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx" } } diff --git a/myuw/templates/handlebars/card/hfs.html b/myuw/templates/handlebars/card/hfs.html index 4baf7cff3f..a5ed3f9f6e 100644 --- a/myuw/templates/handlebars/card/hfs.html +++ b/myuw/templates/handlebars/card/hfs.html @@ -66,15 +66,16 @@

    Resident Dining

    {{#if student_husky_card}} {{ else }} {{#if employee_husky_card}} {{ /if}} {{ /if }} +
    {% endtplhandlebars %} diff --git a/myuw/test/dao/hfs.py b/myuw/test/dao/hfs.py index bcbad9709c..8402787007 100644 --- a/myuw/test/dao/hfs.py +++ b/myuw/test/dao/hfs.py @@ -7,10 +7,17 @@ class TestHFS(TestCase): def test_get_account_balance(self): self.assertEquals(get_account_balances_by_uwnetid(None), None) + accounts = get_account_balances_by_uwnetid('javerage') self.assertEquals(accounts.student_husky_card.balance, Decimal('1.23')) + self.assertEquals( + accounts.student_husky_card.add_funds_url, + "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx") # Testing case where json.loads poorly handles floats self.assertEquals(accounts.resident_dining.balance, Decimal('5.1')) + self.assertEquals( + accounts.employee_husky_card.add_funds_url, + "https://www.hfs.washington.edu/olco/Secure/AccountSummary.aspx") # Missing account self.assertEquals(get_account_balances_by_uwnetid("123notanetid"), From e1e04e034080a1d38f3e40f17d28bb0e38b1ec4a Mon Sep 17 00:00:00 2001 From: William Washington Date: Thu, 19 Nov 2015 14:19:17 -0800 Subject: [PATCH 116/116] adjust padding and margins around H4, card action link, degree title. make degree request type lowercase. change error card header color. fixes MUWM-3443. --- myuw/static/css/mobile.less | 13 +++++++++---- myuw/templates/handlebars/card/error.html | 4 ++-- myuw/templates/handlebars/card/grad_committee.html | 5 ++--- myuw/templates/handlebars/card/grad_status.html | 5 ++--- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/myuw/static/css/mobile.less b/myuw/static/css/mobile.less index c688650424..8287fc31f9 100644 --- a/myuw/static/css/mobile.less +++ b/myuw/static/css/mobile.less @@ -767,25 +767,29 @@ body { // graduate student content card div#GradStatusCard, div#GradCommitteeCard { ul, ol { list-style-type: none; padding-left: 0; } - h3 { margin-bottom: 0 !important; } + #petition-reqs, #leave-reqs, #degree-reqs, #committee-reqs { + margin-top:24px; + } #petition-reqs, #leave-reqs, #degree-reqs, #committee-reqs { h4 { color: #85754d; font-family: "Roboto",sans-serif; font-size: 16px; font-weight: 500; margin-bottom: .5em; - margin-top: 1.5em; } h5 { color: #444444 !important; font-family: "Roboto",sans-serif; font-size: 16px !important; font-weight: 400; margin-top: 0px; - text-transform: uppercase; } - .degree-title { line-height: 1.25em; margin-bottom: 10px; font-size: 16px; } + } + .degree-title { line-height: 1.25em; margin-bottom: 10px; margin-top: -10px; font-size: 14px; } } #committee-reqs { h5 { margin-top: 10px; } + ul.card-list > li { + padding-bottom: 1em; + } ul.card-list ul { padding-bottom: 10px; } @@ -794,6 +798,7 @@ body { .pull-left { max-width: 60%; } .card-badge-label { font-weight: bold; padding-bottom: 5px; line-height: 1.25em; padding-right: 1.2em; } .card-badge-value { font-size: 14px; } + .card-badge-action {padding-bottom: 10px; padding-right: 10px;} } // end graduate student content card diff --git a/myuw/templates/handlebars/card/error.html b/myuw/templates/handlebars/card/error.html index be0397375c..6e17dd001f 100644 --- a/myuw/templates/handlebars/card/error.html +++ b/myuw/templates/handlebars/card/error.html @@ -1,7 +1,7 @@ {% load templatetag_handlebars %} {% tplhandlebars "card_with_error" %} -
    -

    {{ card_name }}

    +
    +

    {{ card_name }}

    An error has occurred and we can't load this content right now. Please try again in a few minutes.

    {% endtplhandlebars %} diff --git a/myuw/templates/handlebars/card/grad_committee.html b/myuw/templates/handlebars/card/grad_committee.html index 89a39371ec..b75fdefea2 100644 --- a/myuw/templates/handlebars/card/grad_committee.html +++ b/myuw/templates/handlebars/card/grad_committee.html @@ -22,11 +22,10 @@

    {{committee_type}}

    {{/each}}
    -
    -
    + -
    {% endtplhandlebars %} diff --git a/myuw/templates/handlebars/card/grad_status.html b/myuw/templates/handlebars/card/grad_status.html index b649a45655..c7e486e7d8 100644 --- a/myuw/templates/handlebars/card/grad_status.html +++ b/myuw/templates/handlebars/card/grad_status.html @@ -105,11 +105,10 @@
    {{req_type}}, {{target_award_quarter}} {{target_award_year}}
    {{/if}} -
    -
    + -
    {% endtplhandlebars %}