Commit Graph

40 Commits

Author SHA1 Message Date
Gaetan Craig-Riou
f9afc0ba96 Fix rubocop warning 2023-07-21 14:51:40 +10:00
Gaetan Craig-Riou
2fff77b2ee Report, add filtering by product for line items 2023-07-21 14:51:40 +10:00
Gaetan Craig-Riou
ec78de7cea Add product dropdown on Order and Fulfillment reports
It includes loading the selected product to populate the dropdown
when needed.
2023-07-21 14:51:40 +10:00
Maikel Linke
c2605b2606 Display loading spinner before quick reports
We had a race condition that could first display the report and then
replace it again with the "loading" spinner. That doesn't seem to happen
now that we changed the order of cable events.
2023-06-14 15:40:52 +10:00
Maikel Linke
d312a5912a Style Layout/MultilineMethodCallIndentation 2023-06-09 14:45:06 +10:00
Maikel Linke
828b2f6f44 Replace too long list of arguments with keywords
Rubocop was complaining about too many arguments. But
`ApplicationJob#perform` needs all arguments handled in one call. While
we could allow the `perform` method generally to have more arguments,
there could be other methods called `perform` which should still be
scrutinised. Instead, it seems acceptable to me to have more arguments
as long as they are clearly named as keyword arguments. Rails uses this
a lot to document all options including their default values, for
example in Active Storage. It's better then bundling several arguments
in an undocumented hash just to reduce the number of given arguments.

And once we upgraded to Ruby 3.1, we can clean the method calls up as
well. `call(user: user)` becomes `call(user:)` without repetition.
2023-06-09 14:44:54 +10:00
Maikel Linke
e56c06571c Remove outdated report timeout handling
Since we don't wait for the report any more, a timeout is very unlikely
and we don't need special handling for it.
2023-06-09 14:44:54 +10:00
Matt-Yorkley
524d1f0264 Switch to tighter Channel scoping...
This is not a normal pattern for setting up ActionCable channels, so it might need some notes. It ensures the broadcasts from the ReportJob are unique not just to the user session but also to the specific tab in the user's browser. Otherwise if the user has two different report pages open in separate tabs with the same session, the broadcast would overwrite the #report-table element in both of them.
2023-06-09 14:44:53 +10:00
Matt-Yorkley
a3ef604797 Run reports in background 2023-06-09 14:44:53 +10:00
Maikel Linke
299bc253a4 Expire report download links in a month, not 5mins 2023-05-15 19:41:45 +02:00
Maikel Linke
43cbac7d17 Simplify report filename generation 2023-04-14 11:29:36 +10:00
Maikel Linke
98e4f867b4 Provide download link for generated reports 2023-04-14 11:29:35 +10:00
Maikel Linke
ebb15781d5 Store report's filename within the blob
For future downloads outside the ReportsController.
2023-04-14 11:29:35 +10:00
Maikel Linke
028c4f4281 Simplify ReportJob by extracting model for result
This makes the code heaps simpler.
2023-04-14 11:29:35 +10:00
Maikel Linke
ef7dfa3b4f Store reports with Active Storage
This will enable us to offer download links and clean them up
automatically.
2023-04-14 11:29:35 +10:00
Maikel Linke
30184ac6aa Background reports time out earlier than nginx
This allows us to display a friendly message before nginx displays its
default error.
2023-04-11 16:44:13 +10:00
Maikel Linke
00a3976905 Display a friendly message when a report times out
Once we get a download link for a report, we can display this message
sooner. But for now we just use the existing request timeout.
2023-04-04 11:08:20 +10:00
Maikel Linke
78fea7c7f2 Run background reports with Sidekiq, not fork
Forking worked in theory but crashed the browser in system specs. It
also came with many other hurdles and isn't well known solution in the
Rails community. Sidekiq can give us better control over execution
limits as well.
2023-03-27 13:27:49 +11:00
Maikel Linke
b19456535d Isolate report rendering in separate child process
Sidekiq doesn't have any features to limit memory usage or execution
time. We need a separate process for this. Forking avoids the boot time
of a fresh process and copy-on-write ensures minimal memory overheads.
2023-01-18 23:12:26 +00:00
Maikel Linke
a177f4c066 Add feature to render reports in the background
This is supposed to lower the memory footprint of all Puma workers. The
reports code will occupy needed memory in one Sidekiq worker instead of
in several Puma processes.

The current code doesn't limit the execution time yet. We either need a
way to terminate the report rendering after a while or send an email
with a link to access a rendered report.
2023-01-18 23:12:26 +00:00
Maikel Linke
19c4596b9e Untie report from request object
We want simple report arguments to store it as background job.
2023-01-18 23:12:26 +00:00
Maikel Linke
0c769706aa Split method for easier reading 2023-01-18 23:12:26 +00:00
Maikel Linke
65843fbd68 Render on-screen report as HTML in renderer
So it can be treated like any other format.
2023-01-18 23:12:26 +00:00
Maikel Linke
22a086ebc1 Remove report dependency on report controller
The ReportsController was referencing the report and the report was
referencing the controller. It's unlikely that this circular dependency
created a memory leak but it's generally a bad design. And we need to
make the reporting independent of the controller to isolate it in a
background job.
2023-01-05 15:06:41 +11:00
Mohamed ABDELLANI
e25f4b1daa integrate ReportRenderingOptions in the View/Controller 2022-11-25 09:10:53 +01:00
Jean-Baptiste Bellet
e2441cdcf6 Use the report type or subtype as the title 2022-10-24 11:12:22 +02:00
Jean-Baptiste Bellet
edc667a336 By default, some columns are hidden. 2022-10-24 11:12:22 +02:00
Jean-Baptiste Bellet
02787e668f Remove report_inverse_columns_logic feature toggle
Co-Authored-By: Maikel <maikel@email.org.au>
2022-10-24 11:12:22 +02:00
Jean-Baptiste Bellet
16babf8250 Don't modify params object, but use an intermediate variable
`@params_fields_to_show`
2022-06-13 14:39:12 +02:00
Jean-Baptiste Bellet
78c2f76a3f Introduce FeatureToggle for columns logic
relative to a46416a98
2022-05-31 15:57:39 +02:00
Jean-Baptiste Bellet
a46416a98e Change UX to transform from fields_to_hide to fields_to_show
Fill `params[:fields_to_show]` with its default value
2022-05-30 15:34:08 +02:00
Sebastian Castro
0218f75f34 Packing Report: hide by default phone and price column to avoid breaking changes 2022-05-12 16:54:14 +02:00
Sebastian Castro
767afe1fba Reports Renderer: whitelist report formats 2022-05-12 16:54:14 +02:00
Sebastian Castro
287e8f5845 Reports Refactor 3
Easily group and create header and summary row
Auto format cells when appropriate type (boolean, dates) and render_format (neither csv nor json)
2022-05-12 16:54:13 +02:00
Sebastian Castro
452a3fa933 Reports Refactor 2: Merge Spree::reports into Admin::Reports 2022-05-12 16:54:13 +02:00
Sebastian Castro
288a35f062 Reports Refactor 2: New templates abstract classes 2022-05-12 16:54:13 +02:00
Sebastian Castro
213c0dd060 Packing Report: add price and reorder columns
Adds price column
last_name column first because it's used for ordering
2022-05-12 16:54:12 +02:00
Sebastian Castro
d53d38906a Packing Report: Refactor view to be reusable by other reports
For now this view is used only in the context of packing, but later we would move all existing rpeort to use same view
2022-05-12 16:54:12 +02:00
Matt-Yorkley
924f6568d6 Replace data loading with new Reports::QueryInterface 2021-11-04 14:55:23 +00:00
Matt-Yorkley
817f0942dd Pull in reports POC work replacing Packing reports 2021-11-04 14:55:23 +00:00