diff --git a/hypha/apply/projects/templates/application_projects/includes/report_line.html b/hypha/apply/projects/templates/application_projects/includes/report_line.html index b1782b17e982d94167460efa970284d7b0d2a693..433d7ad94b2812f95afa98b43a313607e174b5d9 100644 --- a/hypha/apply/projects/templates/application_projects/includes/report_line.html +++ b/hypha/apply/projects/templates/application_projects/includes/report_line.html @@ -32,6 +32,7 @@ <p>You're skipping the report for <b>{{report.start_date}}</b> – <b>{{report.end_date}}</b></p> <p>This will result in a gap in reporting for the project. You can undo this at any time.</p> </div> + {% if not current %} <form action="{% url "apply:projects:reports:skip" pk=report.pk %}" method="post"> {% csrf_token %} <div class="modal__buttons"> @@ -39,6 +40,7 @@ <button data-fancybox-close class="button button--submit button--white">Cancel</button> </div> </form> + {% endif %} </div> {% endif %} diff --git a/hypha/apply/projects/tests/test_views.py b/hypha/apply/projects/tests/test_views.py index 7e5b1e8b9c08f919028f3d35c5444138d0280e24..c095677bc38d6980994e314a8cc2225c88f3dbdf 100644 --- a/hypha/apply/projects/tests/test_views.py +++ b/hypha/apply/projects/tests/test_views.py @@ -1428,10 +1428,10 @@ class TestStaffReportDetail(BaseViewTestCase): response = self.get_page(report) self.assertEqual(response.status_code, 200) - def test_can_access_skipped_report(self): + def test_cant_access_skipped_report(self): report = ReportFactory(skipped=True) response = self.get_page(report) - self.assertEqual(response.status_code, 200) + self.assertEqual(response.status_code, 404) def test_cant_access_draft_report(self): report = ReportFactory(is_draft=True) @@ -1483,3 +1483,49 @@ class TestApplicantReportDetail(BaseViewTestCase): report = ReportFactory(end_date=timezone.now() + relativedelta(days=1)) response = self.get_page(report) self.assertEqual(response.status_code, 404) + + +class TestSkipReport(BaseViewTestCase): + base_view_name = 'skip' + url_name = 'funds:projects:reports:{}' + user_factory = StaffFactory + + def get_kwargs(self, instance): + return { + 'pk': instance.pk, + } + + def test_can_skip_report(self): + report = ReportFactory(past_due=True) + response = self.post_page(report) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertTrue(report.skipped) + + def test_can_unskip_report(self): + report = ReportFactory(skipped=True, past_due=True) + response = self.post_page(report) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertFalse(report.skipped) + + def test_cant_skip_current_report(self): + report = ReportFactory(end_date=timezone.now() + relativedelta(days=1)) + response = self.post_page(report) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertFalse(report.skipped) + + def test_cant_skip_submitted_report(self): + report = ReportFactory(is_submitted=True) + response = self.post_page(report, data={}) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertFalse(report.skipped) + + def test_can_skip_draft_report(self): + report = ReportFactory(is_draft=True, past_due=True) + response = self.post_page(report) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertTrue(report.skipped) diff --git a/hypha/apply/projects/views/report.py b/hypha/apply/projects/views/report.py index da06424430b4b9daabb0ce5441955e483566eeec..ea23fc9e5c06875c9b59b4fcdb6af2b8db2a2d78 100644 --- a/hypha/apply/projects/views/report.py +++ b/hypha/apply/projects/views/report.py @@ -153,7 +153,9 @@ class ReportSkipView(SingleObjectMixin, View): def post(self, *args, **kwargs): report = self.get_object() - if not report.current: + unsubmitted = not report.current + not_current = report.project.report_config.current_due_report() != report + if unsubmitted and not_current: report.skipped = not report.skipped report.save() messenger(