mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-04-07 12:52:11 +08:00
Refactor and fix display of stock warnings and stock consumption [SCI-6734] (#4021)
* Refactor and fix how stock consumption is displayed [SCI-6734] * Refactor and fix display of stock warnings [SCI-6734]
This commit is contained in:
parent
4a232ac391
commit
30ee6cd40c
5 changed files with 47 additions and 43 deletions
app
assets
javascripts/repositories/renderers
stylesheets
helpers
models
|
@ -189,7 +189,7 @@ $.fn.dataTable.render.AssignedTasksValue = function(data, row) {
|
||||||
}
|
}
|
||||||
if (row.hasActiveReminders) {
|
if (row.hasActiveReminders) {
|
||||||
return `<div class="dropdown row-reminders-dropdown" data-row-reminders-url="${row.rowRemindersUrl}" tabindex='-1'>
|
return `<div class="dropdown row-reminders-dropdown" data-row-reminders-url="${row.rowRemindersUrl}" tabindex='-1'>
|
||||||
<i class="fas fa-bell dropdown-toggle row-reminders-icon" data-toggle="dropdown"
|
<i class="fas fa-bell dropdown-toggle row-reminders-icon" data-toggle="dropdown"
|
||||||
id="rowReminders${row.DT_RowId}}"></i>
|
id="rowReminders${row.DT_RowId}}"></i>
|
||||||
<ul class="dropdown-menu" role="menu" aria-labelledby="rowReminders${row.DT_RowId}">
|
<ul class="dropdown-menu" role="menu" aria-labelledby="rowReminders${row.DT_RowId}">
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -201,23 +201,15 @@ $.fn.dataTable.render.AssignedTasksValue = function(data, row) {
|
||||||
};
|
};
|
||||||
|
|
||||||
$.fn.dataTable.render.RepositoryStockValue = function(data) {
|
$.fn.dataTable.render.RepositoryStockValue = function(data) {
|
||||||
var stockAlertTag;
|
|
||||||
if (data) {
|
if (data) {
|
||||||
if (data.value) {
|
if (data.value) {
|
||||||
if (data.value.stock_amount <= 0) {
|
|
||||||
stockAlertTag = 'stock-alert';
|
|
||||||
} else {
|
|
||||||
stockAlertTag = parseFloat(data.value.stock_amount) < parseFloat(data.value.low_stock_threshold)
|
|
||||||
? 'stock-low-stock-alert' : '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.stock_managable) {
|
if (data.stock_managable) {
|
||||||
return `<a class="manage-repository-stock-value-link stock-value-view-render ${stockAlertTag}">
|
return `<a class="manage-repository-stock-value-link stock-value-view-render stock-${data.stock_status}">
|
||||||
${data.value.stock_formatted}
|
${data.value.stock_formatted}
|
||||||
</a>`;
|
</a>`;
|
||||||
}
|
}
|
||||||
return `<span class="stock-value-view-render
|
return `<span class="stock-value-view-render
|
||||||
${data.stock_managable !== undefined ? stockAlertTag : ''}">
|
${data.stock_managable !== undefined ? `stock-${data.stock_status}` : ''}">
|
||||||
${data.value.stock_formatted}
|
${data.value.stock_formatted}
|
||||||
</span>`;
|
</span>`;
|
||||||
}
|
}
|
||||||
|
@ -238,27 +230,27 @@ $.fn.dataTable.render.defaultRepositoryStockValue = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
$.fn.dataTable.render.RepositoryStockConsumptionValue = function(data = {}) {
|
$.fn.dataTable.render.RepositoryStockConsumptionValue = function(data = {}) {
|
||||||
if (data.value && data.value.consumed_stock !== null) {
|
if (!data.stock_present) {
|
||||||
if (data.consumptionManagable) {
|
return '<span class="empty-consumed-stock-render"> - </span>';
|
||||||
return `<a href="${data.updateStockConsumptionUrl}"
|
|
||||||
class="manage-repository-consumed-stock-value-link stock-value-view-render">
|
|
||||||
${data.value.consumed_stock_formatted}
|
|
||||||
</a>`;
|
|
||||||
}
|
|
||||||
return `<span class="stock-value-view-render">${data.value.consumed_stock_formatted}</span>`;
|
|
||||||
}
|
}
|
||||||
if (data.stock_present && data.consumptionManagable) {
|
if (!data.consumptionManagable) {
|
||||||
|
return `<span class="consumption-locked">
|
||||||
|
${I18n.t('libraries.manange_modal_column.stock_type.stock_consumption_locked')}
|
||||||
|
</span>`;
|
||||||
|
}
|
||||||
|
if (!data.consumptionPermitted) {
|
||||||
|
return `<span class="empty-consumed-stock-render">${data.value.consumed_stock_formatted}</span>`;
|
||||||
|
}
|
||||||
|
if (!data.value.consumed_stock) {
|
||||||
return `<a href="${data.updateStockConsumptionUrl}" class="manage-repository-consumed-stock-value-link">
|
return `<a href="${data.updateStockConsumptionUrl}" class="manage-repository-consumed-stock-value-link">
|
||||||
<i class="fas fa-vial"></i>
|
<i class="fas fa-vial"></i>
|
||||||
${I18n.t('libraries.manange_modal_column.stock_type.add_stock_consumption')}
|
${I18n.t('libraries.manange_modal_column.stock_type.add_stock_consumption')}
|
||||||
</a>`;
|
</a>`;
|
||||||
}
|
}
|
||||||
if (data.stock_present && !data.consumptionManagable) {
|
return `<a href="${data.updateStockConsumptionUrl}"
|
||||||
return `<span class="consumption-locked">
|
class="manage-repository-consumed-stock-value-link stock-value-view-render">
|
||||||
${I18n.t('libraries.manange_modal_column.stock_type.stock_consumption_locked')}
|
${data.value.consumed_stock_formatted}
|
||||||
</span>`;
|
</a>`;
|
||||||
}
|
|
||||||
return '<span class="empty-consumed-stock-render"> - </span>';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$.fn.dataTable.render.defaultRepositoryStockConsumptionValue = function() {
|
$.fn.dataTable.render.defaultRepositoryStockConsumptionValue = function() {
|
||||||
|
|
|
@ -193,7 +193,7 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stock-low-stock-alert {
|
.stock-low {
|
||||||
&::before {
|
&::before {
|
||||||
@include font-awesome;
|
@include font-awesome;
|
||||||
color: $brand-warning;
|
color: $brand-warning;
|
||||||
|
@ -201,7 +201,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.stock-alert {
|
.stock-empty {
|
||||||
color: $brand-danger;
|
color: $brand-danger;
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
|
|
|
@ -229,7 +229,7 @@
|
||||||
|
|
||||||
// Stock
|
// Stock
|
||||||
.stock-value-view-render {
|
.stock-value-view-render {
|
||||||
&.stock-alert {
|
&.stock-empty {
|
||||||
color: $brand-danger;
|
color: $brand-danger;
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
|
@ -238,7 +238,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.stock-low-stock-alert {
|
&.stock-low {
|
||||||
&::before {
|
&::before {
|
||||||
@include font-awesome;
|
@include font-awesome;
|
||||||
color: $brand-warning;
|
color: $brand-warning;
|
||||||
|
|
|
@ -59,13 +59,18 @@ module RepositoryDatatableHelper
|
||||||
# always add stock cell, even if empty
|
# always add stock cell, even if empty
|
||||||
row['stock'] = stock_present ? display_cell_value(record.repository_stock_cell, team, repository) : {}
|
row['stock'] = stock_present ? display_cell_value(record.repository_stock_cell, team, repository) : {}
|
||||||
row['stock'][:stock_managable] = stock_managable
|
row['stock'][:stock_managable] = stock_managable
|
||||||
|
|
||||||
|
if !options[:include_stock_consumption] || can_update_my_module_stock_consumption?(options[:my_module])
|
||||||
|
row['stock'][:stock_status] = record.repository_stock_cell&.value&.status
|
||||||
|
end
|
||||||
|
|
||||||
row['stock']['value_type'] = 'RepositoryStockValue'
|
row['stock']['value_type'] = 'RepositoryStockValue'
|
||||||
|
|
||||||
if options[:include_stock_consumption] && record.repository.has_stock_management? && options[:my_module]
|
if options[:include_stock_consumption] && record.repository.has_stock_management? && options[:my_module]
|
||||||
consumption_managable = stock_consumption_managable?(record, repository, options[:my_module])
|
consumption_managable = stock_consumption_managable?(record, repository, options[:my_module])
|
||||||
|
|
||||||
row['consumedStock'] = {
|
row['consumedStock'] = {
|
||||||
stock_present: stock_present,
|
stock_present: stock_present,
|
||||||
|
consumptionPermitted: can_update_my_module_stock_consumption?(options[:my_module]),
|
||||||
consumptionManagable: consumption_managable,
|
consumptionManagable: consumption_managable,
|
||||||
updateStockConsumptionUrl: Rails.application.routes.url_helpers.consume_modal_my_module_repository_path(
|
updateStockConsumptionUrl: Rails.application.routes.url_helpers.consume_modal_my_module_repository_path(
|
||||||
options[:my_module],
|
options[:my_module],
|
||||||
|
@ -75,7 +80,7 @@ module RepositoryDatatableHelper
|
||||||
value: {
|
value: {
|
||||||
consumed_stock: record.consumed_stock,
|
consumed_stock: record.consumed_stock,
|
||||||
consumed_stock_formatted:
|
consumed_stock_formatted:
|
||||||
"#{record.consumed_stock} #{record.repository_stock_value&.repository_stock_unit_item&.data}"
|
"#{record.consumed_stock || 0} #{record.repository_stock_value&.repository_stock_unit_item&.data}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -110,6 +115,11 @@ module RepositoryDatatableHelper
|
||||||
consumption_managable = stock_consumption_managable?(record, repository, my_module)
|
consumption_managable = stock_consumption_managable?(record, repository, my_module)
|
||||||
|
|
||||||
row['stock'] = stock_present ? display_cell_value(record.repository_stock_cell, record.repository.team, repository) : {}
|
row['stock'] = stock_present ? display_cell_value(record.repository_stock_cell, record.repository.team, repository) : {}
|
||||||
|
|
||||||
|
if !options[:include_stock_consumption] || can_update_my_module_stock_consumption?(my_module)
|
||||||
|
row['stock'][:stock_status] = record.repository_stock_cell&.value&.status
|
||||||
|
end
|
||||||
|
|
||||||
row['stock'][:stock_managable] = stock_managable
|
row['stock'][:stock_managable] = stock_managable
|
||||||
if record.repository.is_a?(RepositorySnapshot)
|
if record.repository.is_a?(RepositorySnapshot)
|
||||||
row['consumedStock'] =
|
row['consumedStock'] =
|
||||||
|
@ -126,15 +136,15 @@ module RepositoryDatatableHelper
|
||||||
my_module, record.repository, row_id: record.id
|
my_module, record.repository, row_id: record.id
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
if record.consumed_stock.present?
|
row['consumedStock'][:value] = {
|
||||||
row['consumedStock'][:value] = {
|
consumed_stock: record.consumed_stock,
|
||||||
consumed_stock: record.consumed_stock,
|
consumed_stock_formatted:
|
||||||
consumed_stock_formatted:
|
"#{record.consumed_stock || 0} #{record.repository_stock_value&.repository_stock_unit_item&.data}"
|
||||||
"#{record.consumed_stock} #{record.repository_stock_value&.repository_stock_unit_item&.data}"
|
}
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
row['consumedStock']['stock_present'] = stock_present
|
row['consumedStock']['stock_present'] = stock_present
|
||||||
|
row['consumedStock']['consumptionPermitted'] = can_update_my_module_stock_consumption?(my_module)
|
||||||
row['consumedStock']['consumptionManagable'] = consumption_managable
|
row['consumedStock']['consumptionManagable'] = consumption_managable
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -260,6 +270,6 @@ module RepositoryDatatableHelper
|
||||||
return false unless record.repository.is_a?(Repository)
|
return false unless record.repository.is_a?(Repository)
|
||||||
return false if repository.archived? || record.archived?
|
return false if repository.archived? || record.archived?
|
||||||
|
|
||||||
can_update_my_module_stock_consumption?(my_module)
|
true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -39,10 +39,12 @@ class RepositoryStockValue < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def low_stock?
|
def status
|
||||||
return false unless low_stock_threshold
|
return :empty if amount <= 0
|
||||||
|
|
||||||
amount <= low_stock_threshold
|
return :low if low_stock_threshold && amount <= low_stock_threshold
|
||||||
|
|
||||||
|
:normal
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.add_filter_condition(repository_rows, join_alias, filter_element)
|
def self.add_filter_condition(repository_rows, join_alias, filter_element)
|
||||||
|
|
Loading…
Add table
Reference in a new issue