diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js index 32d9e05b6..6a199d66c 100644 --- a/app/assets/javascripts/my_modules/repositories.js +++ b/app/assets/javascripts/my_modules/repositories.js @@ -11,6 +11,41 @@ var MyModuleRepositories = (function() { var FULL_VIEW_TABLE_SCROLLBAR; var SELECTED_ROWS = {}; + function stockManagementColumns(otherColumnCount) { + return [ + { + visible: true, + searchable: false, + data: otherColumnCount + }, + { + visible: true, + searchable: false, + data: otherColumnCount + 1 + } + ]; + } + + function stockManagementColumnDefs() { + return [ + { + targets: 'row-stock', + className: 'item-stock', + sWidth: '1%', + render: function(data) { + return $.fn.dataTable.render.RepositoryStockValue(data); + } + }, { + targets: 'row-consumption', + className: 'item-consumed-stock', + sWidth: '1%', + render: function(data) { + return $.fn.dataTable.render.RepositoryConsumedStockValue(data); + } + } + ]; + } + function reloadRepositoriesList(repositoryId) { var repositoriesContainer = $('#assigned-items-container'); $.get(repositoriesContainer.data('repositories-list-url'), function(result) { @@ -38,10 +73,17 @@ var MyModuleRepositories = (function() { defaultContent: $.fn.dataTable.render['default' + column.dataset.type](column.id) }); }); + + if ($(tableContainer).data('stock-management')) { + let column = stockManagementColumns(columns.length)[1]; + column.data -= 1; + columns.push(column); + } + return columns; } - function fullViewColumnDefs() { + function fullViewColumnDefs(tableContainer) { let columnDefs = [{ targets: 0, visible: true, @@ -89,11 +131,19 @@ var MyModuleRepositories = (function() { if (typeof data === 'object' && $.fn.dataTable.render[data.value_type]) { return $.fn.dataTable.render[data.value_type](data); } + if (data !== undefined && data.stock_present !== undefined) { + return $.fn.dataTable.render.RepositoryConsumedStockValue(data); + } return data; } } ); + if ($(tableContainer).data('stock-management')) { + let stockColumnDef = stockManagementColumnDefs()[1]; + columnDefs.push(stockColumnDef); + } + return columnDefs; } @@ -107,16 +157,7 @@ var MyModuleRepositories = (function() { ]; if ($(tableContainer).data('stock-management')) { - columns.push({ - visible: true, - searchable: false, - data: 1 - }); - columns.push({ - visible: true, - searchable: false, - data: 2 - }); + columns = columns.concat(stockManagementColumns(columns.length)); } return columns; @@ -133,21 +174,7 @@ var MyModuleRepositories = (function() { }]; if ($(tableContainer).data('stock-management')) { - columnDefs.push({ - targets: 1, - className: 'item-stock', - sWidth: '1%', - render: function(data) { - return $.fn.dataTable.render.RepositoryStockValue(data); - } - }, { - targets: 2, - className: 'item-consumed-stock', - sWidth: '1%', - render: function(data) { - return $.fn.dataTable.render.RepositoryConsumedStockValue(data); - } - }); + columnDefs = columnDefs.concat(stockManagementColumnDefs()); } return columnDefs; @@ -192,6 +219,7 @@ var MyModuleRepositories = (function() { } function reloadSimpleTable() { + if (!SIMPLE_TABLE) return; SIMPLE_TABLE.ajax.reload(null, false); } @@ -220,7 +248,7 @@ var MyModuleRepositories = (function() { type: 'POST' }, columns: tableColumns(tableContainer, options.skipCheckbox), - columnDefs: fullViewColumnDefs(), + columnDefs: fullViewColumnDefs(tableContainer), fnInitComplete: function() { var dataTableWrapper = $(tableContainer).closest('.dataTables_wrapper'); @@ -748,6 +776,10 @@ var MyModuleRepositories = (function() { }, reloadSimpletable: () => { reloadSimpleTable(); + }, + reloadFullViewTable: () => { + if (!FULL_VIEW_TABLE) return; + FULL_VIEW_TABLE.ajax.reload(null, false); } }; }()); diff --git a/app/assets/javascripts/my_modules/stock.js b/app/assets/javascripts/my_modules/stock.js index 64f0c7a9e..031e68fdc 100644 --- a/app/assets/javascripts/my_modules/stock.js +++ b/app/assets/javascripts/my_modules/stock.js @@ -27,6 +27,7 @@ var MyModuleStockConsumption = (function() { $(CONSUMPTION_MODAL + ' form').on('ajax:success', function() { MyModuleRepositories.reloadSimpletable(); + MyModuleRepositories.reloadFullViewTable(); $manageModal.modal('hide'); $(WARNING_MODAL).modal('hide'); }); diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb index c4d6214f3..e9d76d47a 100644 --- a/app/controllers/my_module_repositories_controller.rb +++ b/app/controllers/my_module_repositories_controller.rb @@ -18,10 +18,12 @@ class MyModuleRepositoriesController < ApplicationController @datatable_params = { view_mode: params[:view_mode], - my_module: @my_module + my_module: @my_module, + include_stock_consumption: @repository.has_stock_management? } @all_rows_count = datatable_service.all_count @columns_mappings = datatable_service.mappings + if params[:simple_view] repository_rows = datatable_service.repository_rows rows_view = 'repository_rows/simple_view_index.json' @@ -101,7 +103,10 @@ class MyModuleRepositoriesController < ApplicationController def full_view_table render json: { - html: render_to_string(partial: 'my_modules/repositories/full_view_table') + html: render_to_string( + partial: 'my_modules/repositories/full_view_table', + locals: { include_stock_consumption: params[:include_stock_consumption] } + ) } end diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index abb3ff87c..5c8d30003 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -5,32 +5,37 @@ module RepositoryDatatableHelper def prepare_row_columns(repository_rows, repository, columns_mappings, team, options = {}) repository_rows.map do |record| - row = { - 'DT_RowId': record.id, - 'DT_RowAttr': { 'data-state': row_style(record) }, + default_cells = { '1': assigned_row(record), '2': record.code, '3': escape_input(record.name), '4': I18n.l(record.created_at, format: :full), '5': escape_input(record.created_by.full_name), '6': (record.archived_on ? I18n.l(record.archived_on, format: :full) : ''), - '7': escape_input(record.archived_by&.full_name), - 'recordInfoUrl': Rails.application.routes.url_helpers.repository_repository_row_path(repository, record) + '7': escape_input(record.archived_by&.full_name) } - row['manageStockUrl'] = if record.has_stock? - Rails.application.routes.url_helpers - .edit_repository_stock_repository_repository_row_url( - repository, - record - ) - else - Rails.application.routes.url_helpers - .new_repository_stock_repository_repository_row_url( - repository, - record - ) - end + row = { + 'DT_RowId': record.id, + 'DT_RowAttr': { 'data-state': row_style(record) }, + 'recordInfoUrl': Rails.application.routes.url_helpers.repository_repository_row_path(repository, record) + }.merge(default_cells) + + if options[:include_stock_consumption] + row['manageStockUrl'] = if record.has_stock? + Rails.application.routes.url_helpers + .edit_repository_stock_repository_repository_row_url( + repository, + record + ) + else + Rails.application.routes.url_helpers + .new_repository_stock_repository_repository_row_url( + repository, + record + ) + end + end unless options[:view_mode] row['recordUpdateUrl'] = @@ -41,16 +46,37 @@ module RepositoryDatatableHelper row['0'] = record[:row_assigned] if options[:my_module] # Add custom columns - record.repository_cells.each do |cell| + custom_cells = record.repository_cells + + custom_cells.each do |cell| row[columns_mappings[cell.repository_column.id]] = display_cell_value(cell, team) end + if options[:include_stock_consumption] && record.repository.has_stock_management? && options[:my_module] + row[(default_cells.length + custom_cells.length + 1).to_s] = + if record.repository_stock_cell.present? + display_cell_value(record.repository_stock_cell, record.repository.team) + end + row[(default_cells.length + custom_cells.length + 2).to_s] = { + stock_present: record.repository_stock_cell.present?, + updateStockConsumptionUrl: Rails.application.routes.url_helpers.consume_modal_my_module_repository_path( + options[:my_module], + record.repository, + row_id: record.id + ), + value: { + consumed_stock_formatted: record.consumed_stock, + unit: record.repository_stock_value.repository_stock_unit_item&.data + } + } + end + row end end - def prepare_simple_view_row_columns(repository_rows, my_module) + def prepare_simple_view_row_columns(repository_rows, my_module, options = {}) repository_rows.map do |record| row = { DT_RowId: record.id, @@ -59,7 +85,7 @@ module RepositoryDatatableHelper recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(record.repository, record) } - if record.repository.has_stock_management? + if options[:include_stock_consumption] && record.repository.has_stock_management? row['1'] = if record.repository_stock_cell.present? display_cell_value(record.repository_stock_cell, record.repository.team) diff --git a/app/views/my_modules/repositories/_full_view_sidebar.html.erb b/app/views/my_modules/repositories/_full_view_sidebar.html.erb index 8d2dfe2dd..632f09ea4 100644 --- a/app/views/my_modules/repositories/_full_view_sidebar.html.erb +++ b/app/views/my_modules/repositories/_full_view_sidebar.html.erb @@ -10,7 +10,7 @@

<%= t('my_modules.repository.snapshots.full_view.live') %> diff --git a/app/views/my_modules/repositories/_full_view_table.html.erb b/app/views/my_modules/repositories/_full_view_table.html.erb index 9b7873577..374633b83 100644 --- a/app/views/my_modules/repositories/_full_view_table.html.erb +++ b/app/views/my_modules/repositories/_full_view_table.html.erb @@ -9,7 +9,8 @@ data-load-state-url="<%= repository_load_table_state_path(@repository) %>" data-export-url="<%= export_repository_my_module_repository_path(@my_module ,@repository) %>" data-versions-sidebar-url="<%= full_view_sidebar_my_module_repository_snapshots_path(@my_module, @repository) %>" -> + data-stock-management="<%= include_stock_consumption && @repository.has_stock_management? %>" + data-stock-consumption-editable="<%= include_stock_consumption && can_update_my_module_stock_consumption?(@my_module) %>"> @@ -37,6 +38,9 @@ <%= display_tooltip(column.name) %> <% end %> + <% if include_stock_consumption && @repository.has_stock_management? && can_update_my_module_stock_consumption?(@my_module) %> + <%= t("repositories.table.row_consumption") %> + <% end %> diff --git a/app/views/my_modules/repositories/_repositories_list.html.erb b/app/views/my_modules/repositories/_repositories_list.html.erb index 7684a5a52..8905b4400 100644 --- a/app/views/my_modules/repositories/_repositories_list.html.erb +++ b/app/views/my_modules/repositories/_repositories_list.html.erb @@ -16,7 +16,7 @@ <% end %>
-
@@ -28,12 +28,12 @@ data-name-column-id="<%= assigned_repository_simple_view_name_column_id(repository) %>" > + data-stock-management="<%= !repository.is_a?(RepositorySnapshot) && repository.has_stock_management? %>" + data-stock-consumption-editable="<%= can_update_my_module_stock_consumption?(@my_module) %>"> - <% if repository.has_stock_management? %> + <% if !repository.is_a?(RepositorySnapshot) && repository.has_stock_management? %> <% end %> diff --git a/app/views/repository_rows/simple_view_index.json.jbuilder b/app/views/repository_rows/simple_view_index.json.jbuilder index ea88ddc5a..b79094d01 100644 --- a/app/views/repository_rows/simple_view_index.json.jbuilder +++ b/app/views/repository_rows/simple_view_index.json.jbuilder @@ -2,7 +2,9 @@ json.draw @draw json.data do - json.array! prepare_simple_view_row_columns(@repository_rows, @my_module) + json.array! prepare_simple_view_row_columns( + @repository_rows, @my_module, { include_stock_consumption: @repository.has_stock_management? } + ) end json.recordsFiltered @repository_rows.first ? @repository_rows.first.filtered_count : 0 json.recordsTotal @all_rows_count