Skip to content

Commit a28703b

Browse files
Merge async export feature branches
Jira-Issue: MAV-1521
3 parents 745b6c8 + e600a6a + ecb6998 commit a28703b

28 files changed

Lines changed: 556 additions & 504 deletions

app/controllers/downloads_controller.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ class DownloadsController < ApplicationController
66
skip_after_action :verify_authorized
77
skip_after_action :verify_policy_scoped
88

9-
TYPE_FILTERS = { "offline_session" => %w[LocationExport SessionExport] }.freeze
9+
TYPE_FILTERS = {
10+
"offline_session" => %w[LocationExport SessionExport],
11+
"vaccination_records" => "VaccinationRecordsExport",
12+
"school_moves" => "SchoolMovesExport"
13+
}.freeze
1014

1115
def index
1216
@type = params[:type].presence_in(TYPE_FILTERS.keys)
Lines changed: 77 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,97 @@
11
# frozen_string_literal: true
22

33
class SchoolMoves::ExportsController < ApplicationController
4-
before_action :set_school_move_export
5-
6-
include WizardControllerConcern
7-
84
skip_after_action :verify_policy_scoped
95

10-
def create
11-
@school_move_export.clear!
12-
redirect_to school_move_export_path(Wicked::FIRST_STEP)
6+
def new
7+
authorize Export.new(team: current_team, user: current_user)
8+
@form = SchoolMovesExportForm.new
139
end
1410

15-
def show
16-
render_wizard
17-
end
11+
def create
12+
@form = SchoolMovesExportForm.new(**create_params)
1813

19-
def update
20-
@school_move_export.assign_attributes(update_params)
14+
if from_and_to_dates_valid? && @form.valid?
15+
exportable =
16+
SchoolMovesExport.new(
17+
date_from: @form.date_from,
18+
date_to: @form.date_to
19+
)
20+
@export =
21+
Export.from_exportable(
22+
exportable,
23+
user: current_user,
24+
team: current_team
25+
)
2126

22-
render_wizard @school_move_export
23-
end
27+
authorize @export
28+
29+
@export.save!
30+
GenerateExportJob.perform_later(@export)
2431

25-
def download
26-
send_data(
27-
@school_move_export.csv_data,
28-
filename: @school_move_export.csv_filename
29-
)
32+
flash[:success] = {
33+
heading: t("exports_flash.heading"),
34+
heading_link_text: t("exports_flash.heading_link_text"),
35+
heading_link_href: downloads_path
36+
}
37+
redirect_to downloads_path
38+
else
39+
authorize Export.new(team: current_team, user: current_user)
40+
41+
@form.date_from = date_from_validator.date_params_as_struct
42+
@form.date_to = date_to_validator.date_params_as_struct
43+
render :new, status: :unprocessable_content
44+
end
3045
end
3146

32-
def finish_wizard_path
33-
download_school_move_export_path
47+
private
48+
49+
def create_params
50+
raw = params.fetch(:school_moves_export_form, {})
51+
{
52+
date_from:
53+
begin
54+
Date.new(
55+
raw["date_from(1i)"].to_i,
56+
raw["date_from(2i)"].to_i,
57+
raw["date_from(3i)"].to_i
58+
)
59+
rescue StandardError
60+
nil
61+
end,
62+
date_to:
63+
begin
64+
Date.new(
65+
raw["date_to(1i)"].to_i,
66+
raw["date_to(2i)"].to_i,
67+
raw["date_to(3i)"].to_i
68+
)
69+
rescue StandardError
70+
nil
71+
end
72+
}
3473
end
3574

36-
def set_school_move_export
37-
@school_move_export =
38-
authorize SchoolMoveExport.new(request_session: session, current_user:)
75+
def from_and_to_dates_valid?
76+
date_from_validator.date_params_valid? &&
77+
date_to_validator.date_params_valid?
3978
end
4079

41-
def set_steps
42-
self.steps = @school_move_export.wizard_steps
80+
def date_from_validator
81+
@date_from_validator ||=
82+
DateParamsValidator.new(
83+
field_name: :date_from,
84+
object: @form,
85+
params: params.fetch(:school_moves_export_form, {})
86+
)
4387
end
4488

45-
def update_params
46-
params
47-
.fetch(:school_move_export, {})
48-
.permit(:date_from, :date_to)
49-
.merge(wizard_step: current_step)
89+
def date_to_validator
90+
@date_to_validator ||=
91+
DateParamsValidator.new(
92+
field_name: :date_to,
93+
object: @form,
94+
params: params.fetch(:school_moves_export_form, {})
95+
)
5096
end
5197
end
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# frozen_string_literal: true
2+
3+
class VaccinationRecords::ExportsController < ApplicationController
4+
skip_after_action :verify_policy_scoped
5+
6+
def new
7+
authorize Export.new(team: current_team, user: current_user)
8+
@form = VaccinationRecordsExportForm.new(team: current_team)
9+
end
10+
11+
def create
12+
@form =
13+
VaccinationRecordsExportForm.new(team: current_team, **create_params)
14+
15+
if from_and_to_dates_valid? && @form.valid?
16+
exportable =
17+
VaccinationRecordsExport.new(
18+
academic_year: @form.academic_year,
19+
programme_type: @form.programme_type,
20+
file_format: @form.file_format,
21+
date_from: @form.date_from,
22+
date_to: @form.date_to
23+
)
24+
@export =
25+
Export.from_exportable(
26+
exportable,
27+
user: current_user,
28+
team: current_team
29+
)
30+
31+
authorize @export
32+
33+
@export.save!
34+
GenerateExportJob.perform_later(@export)
35+
36+
flash[:success] = {
37+
heading: t("exports_flash.heading"),
38+
heading_link_text: t("exports_flash.heading_link_text"),
39+
heading_link_href: downloads_path
40+
}
41+
redirect_to downloads_path
42+
else
43+
authorize Export.new(team: current_team, user: current_user)
44+
45+
@form.date_from = date_from_validator.date_params_as_struct
46+
@form.date_to = date_to_validator.date_params_as_struct
47+
render :new, status: :unprocessable_content
48+
end
49+
end
50+
51+
private
52+
53+
def create_params
54+
raw = params.fetch(:vaccination_records_export_form, {})
55+
{
56+
academic_year: raw[:academic_year],
57+
programme_type: raw[:programme_type],
58+
file_format: raw[:file_format],
59+
date_from:
60+
begin
61+
Date.new(
62+
raw["date_from(1i)"].to_i,
63+
raw["date_from(2i)"].to_i,
64+
raw["date_from(3i)"].to_i
65+
)
66+
rescue StandardError
67+
nil
68+
end,
69+
date_to:
70+
begin
71+
Date.new(
72+
raw["date_to(1i)"].to_i,
73+
raw["date_to(2i)"].to_i,
74+
raw["date_to(3i)"].to_i
75+
)
76+
rescue StandardError
77+
nil
78+
end
79+
}
80+
end
81+
82+
def from_and_to_dates_valid?
83+
date_from_validator.date_params_valid? &&
84+
date_to_validator.date_params_valid?
85+
end
86+
87+
def date_from_validator
88+
@date_from_validator ||=
89+
DateParamsValidator.new(
90+
field_name: :date_from,
91+
object: @form,
92+
params: params.fetch(:vaccination_records_export_form, {})
93+
)
94+
end
95+
96+
def date_to_validator
97+
@date_to_validator ||=
98+
DateParamsValidator.new(
99+
field_name: :date_to,
100+
object: @form,
101+
params: params.fetch(:vaccination_records_export_form, {})
102+
)
103+
end
104+
end

app/controllers/vaccination_reports_controller.rb

Lines changed: 0 additions & 41 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: true
2+
3+
class SchoolMovesExportForm
4+
include ActiveModel::Model
5+
include ActiveModel::Attributes
6+
7+
attribute :date_from, :date
8+
attribute :date_to, :date
9+
end
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# frozen_string_literal: true
2+
3+
class VaccinationRecordsExportForm
4+
include ActiveModel::Model
5+
include ActiveModel::Attributes
6+
7+
attr_accessor :team
8+
9+
attribute :academic_year, :integer
10+
attribute :programme_type, :string
11+
attribute :file_format, :string
12+
attribute :date_from, :date
13+
attribute :date_to, :date
14+
15+
validates :academic_year, presence: true
16+
validates :programme_type, presence: true
17+
validates :file_format, inclusion: { in: :file_formats }
18+
19+
def file_formats
20+
common = %w[mavis systm_one]
21+
team&.careplus_enabled? ? common + ["careplus"] : common
22+
end
23+
end

app/models/school_move_export.rb

Lines changed: 0 additions & 58 deletions
This file was deleted.

0 commit comments

Comments
 (0)