Browse Source

Fixes #5437 - Most recent data privacy tasks are not shown

Mantas Masalskis 2 months ago
parent
commit
a187f3a54e

+ 22 - 30
app/assets/javascripts/app/controllers/data_privacy.coffee

@@ -9,16 +9,24 @@ class Index extends App.ControllerSubContent
   constructor: ->
     super
     @load()
-    @subscribeDataPrivacyTaskId = App.DataPrivacyTask.subscribe(@render)
+
+    @controllerBind(
+      'DataPrivacyTask:create DataPrivacyTask:update DataPrivacyTask:touch DataPrivacyTask:destroy',
+      @load
+    )
 
   load: =>
-    callback = =>
-      @stopLoading()
-      @render()
     @startLoading()
-    App.DataPrivacyTask.fetchFull(
-      callback
-      clear: true
+
+    @ajax(
+      id:    'data_privacy_tasks_by_state'
+      type:  'GET'
+      url:   "#{@apiPath}/data_privacy_tasks/by_state"
+      success: (data) =>
+        App.DataPrivacyTask.deleteAll()
+        App.Collection.loadAssets(data.assets)
+        @stopLoading()
+        @render(data.record_ids)
     )
 
   show: (params) =>
@@ -39,30 +47,18 @@ class Index extends App.ControllerSubContent
       @new(false, @user_id)
       @user_id = undefined
 
-  render: =>
-    runningTasks = App.DataPrivacyTask.search(
-      filter:
-        state: 'in process'
-      order:  'DESC'
-    )
+  render: (record_ids) =>
+    runningTasks = App.DataPrivacyTask.findAll(record_ids.in_process)
     runningTasksHTML = App.view('data_privacy/tasks')(
       tasks: runningTasks
     )
 
-    failedTasks = App.DataPrivacyTask.search(
-      filter:
-        state: 'failed'
-      order:  'DESC'
-    )
+    failedTasks = App.DataPrivacyTask.findAll(record_ids.failed)
     failedTasksHTML = App.view('data_privacy/tasks')(
       tasks: failedTasks
     )
 
-    completedTasks = App.DataPrivacyTask.search(
-      filter:
-        state: 'completed'
-      order:  'DESC'
-    )
+    completedTasks = App.DataPrivacyTask.findAll(record_ids.completed)
     completedTasksHTML = App.view('data_privacy/tasks')(
       tasks: completedTasks
     )
@@ -81,10 +77,6 @@ class Index extends App.ControllerSubContent
       description: description
     )
 
-  release: =>
-    if @subscribeDataPrivacyTaskId
-      App.DataPrivacyTask.unsubscribe(@subscribeDataPrivacyTaskId)
-
   new: (e, user_id = undefined) ->
     if e
       e.preventDefault()
@@ -134,7 +126,7 @@ class Index extends App.ControllerSubContent
       container:   @el.closest('.content')
     )
 
-  formHandler: (params, attribute, attributes, classname, form, ui) =>
+  formHandler: (params, attribute, attributes, DataPrivacyTask, form, ui) =>
     return if !attribute
 
     userID = params['deletable_id']
@@ -194,10 +186,10 @@ class Index extends App.ControllerSubContent
               organization = App.Organization.find(user.organization_id)
               if organization && organization.member_ids.length < 2
                 attribute          = { name: 'preferences::delete_organization',  display: __('Delete organization?'), tag: 'boolean', default: true, translate: true }
-                deleteOrganization = ui.formGenItem(attribute, classname, form).html()
+                deleteOrganization = ui.formGenItem(attribute, DataPrivacyTask, form).html()
 
             sure_attribute = { name: 'preferences::sure',  display: __('Are you sure?'), tag: 'input', translate: false, placeholder: App.i18n.translateInline('delete').toUpperCase() }
-            sureInput      = ui.formGenItem(sure_attribute, classname, form).html()
+            sureInput      = ui.formGenItem(sure_attribute, DataPrivacyTask, form).html()
 
             preview_html = App.view('data_privacy/preview')(
               customer_count:           dataCustomer.object_count || 0

+ 19 - 0
app/controllers/data_privacy_tasks_controller.rb

@@ -7,6 +7,25 @@ class DataPrivacyTasksController < ApplicationController
     model_index_render(DataPrivacyTask, params)
   end
 
+  def by_state
+    scope = DataPrivacyTask.reorder('id DESC').limit(500)
+
+    in_process = scope.where(state: 'in process')
+    failed     = scope.where(state: 'failed')
+    completed  = scope.where(state: 'completed')
+
+    assets = ApplicationModel::CanAssets.reduce [in_process, failed, completed].flatten, {}
+
+    render json: {
+      record_ids: {
+        in_process: in_process.pluck(:id),
+        failed:     failed.pluck(:id),
+        completed:  completed.pluck(:id)
+      },
+      assets:     assets,
+    }, status: :ok
+  end
+
   def show
     model_show_render(DataPrivacyTask, params)
   end

+ 1 - 0
config/routes/data_privacy_task.rb

@@ -4,6 +4,7 @@ Zammad::Application.routes.draw do
   api_path = Rails.configuration.api_path
 
   match api_path + '/data_privacy_tasks',               to: 'data_privacy_tasks#index',   via: :get
+  match api_path + '/data_privacy_tasks/by_state',      to: 'data_privacy_tasks#by_state',   via: :get
   match api_path + '/data_privacy_tasks/:id',           to: 'data_privacy_tasks#show',    via: :get
   match api_path + '/data_privacy_tasks',               to: 'data_privacy_tasks#create',  via: :post
   match api_path + '/data_privacy_tasks/:id',           to: 'data_privacy_tasks#update',  via: :put