mirror of
https://github.com/rickbarrette/redmine_qbo_lineitems.git
synced 2026-04-02 07:01:59 -04:00
Allow doing math in price field for each markups
This commit is contained in:
@@ -23,9 +23,10 @@
|
||||
</td>
|
||||
|
||||
<td data-label="<%= t :label_price %>">
|
||||
<%= f.number_field :unit_price,
|
||||
step: 0.01,
|
||||
<%= f.text_field :unit_price,
|
||||
class: "price-field",
|
||||
inputmode: "decimal",
|
||||
autocomplete: "off",
|
||||
no_label: true,
|
||||
disabled: readonly %>
|
||||
</td>
|
||||
|
||||
33
assets/javascripts/blur.js
Normal file
33
assets/javascripts/blur.js
Normal file
@@ -0,0 +1,33 @@
|
||||
function evaluateMathExpression(expr) {
|
||||
if (!expr) return null;
|
||||
|
||||
// allow only digits, decimal, operators, parentheses, spaces
|
||||
if (!/^[0-9+\-*/().\s]+$/.test(expr)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return Function('"use strict"; return (' + expr + ')')();
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("blur", function(e) {
|
||||
|
||||
if (!e.target.classList.contains("price-field")) return;
|
||||
|
||||
const field = e.target;
|
||||
const value = field.value.trim();
|
||||
|
||||
const result = evaluateMathExpression(value);
|
||||
|
||||
if (result !== null && !isNaN(result)) {
|
||||
field.value = Number(result).toFixed(2);
|
||||
}
|
||||
|
||||
if (typeof updateLineItemTotals === "function") {
|
||||
updateLineItemTotals();
|
||||
}
|
||||
|
||||
}, true);
|
||||
@@ -19,6 +19,7 @@ module RedmineQboLineItems
|
||||
javascript_include_tag( 'nested_form_controller', plugin: :redmine_qbo_lineitems),
|
||||
javascript_include_tag("line_items", plugin: :redmine_qbo_lineitems),
|
||||
javascript_include_tag("autocomplete", plugin: :redmine_qbo_lineitems),
|
||||
javascript_include_tag("blur", plugin: :redmine_qbo_lineitems),
|
||||
stylesheet_link_tag("line_items", plugin: :redmine_qbo_lineitems)
|
||||
])
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user