-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathtask_status_service.rb
More file actions
126 lines (97 loc) · 2.98 KB
/
task_status_service.rb
File metadata and controls
126 lines (97 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
class TaskStatusService
def initialize(form:)
@form = form
end
def mandatory_tasks_completed?
incomplete_tasks.empty?
end
def incomplete_tasks
{
missing_pages: pages_status,
missing_what_happens_next: what_happens_next_status,
missing_privacy_policy_url: privacy_policy_status,
missing_contact_details: support_contact_details_status,
share_preview_not_completed: share_preview_status,
missing_welsh_translations: welsh_language_status,
}.reject { |_k, v| %i[completed optional].include?(v) }.keys
end
def task_statuses
{
name_status:,
pages_status:,
declaration_status:,
what_happens_next_status:,
payment_link_status:,
privacy_policy_status:,
support_contact_details_status:,
submission_attachments_status:,
daily_submission_batch_status:,
share_preview_status:,
make_live_status:,
welsh_language_status:,
}
end
private
def name_status
:completed
end
def pages_status
return :completed if @form.question_section_completed && @form.pages.any?
return :in_progress if @form.pages.any?
:not_started
end
def declaration_status
return :completed if @form.declaration_section_completed
return :in_progress if @form.declaration_markdown.present?
:not_started
end
def what_happens_next_status
return :completed if @form.what_happens_next_markdown.present?
:not_started
end
def payment_link_status
return :completed if @form.payment_url.present?
:optional
end
def privacy_policy_status
return :completed if @form.privacy_policy_url.present?
:not_started
end
def support_contact_details_status
return :completed if @form.support_email.present? || @form.support_phone.present? || (@form.support_url_text.present? && @form.support_url)
:not_started
end
def welsh_language_status
return :optional unless @form.available_languages.include?("cy")
return :in_progress if welsh_translations_invalid
return :completed if @form.welsh_completed?
:in_progress
end
def submission_attachments_status
return :completed if @form.email? && @form.submission_format.any?
:optional
end
def daily_submission_batch_status
return :completed if @form.send_daily_submission_batch
:optional
end
def share_preview_status
return :cannot_start unless @form.pages.any?
return :completed if @form.share_preview_completed?
:not_started
end
def make_live_status
return make_live_status_for_draft if @form.has_draft_version
return :not_started if @form.has_been_archived
:completed if @form.has_live_version
end
def make_live_status_for_draft
mandatory_tasks_completed? ? :not_started : :cannot_start
end
def welsh_translations_invalid
@welsh_translations_invalid ||= begin
translation_input = Forms::WelshTranslationInput.new(form: @form, mark_complete: true).assign_form_values
translation_input.invalid?
end
end
end