You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.0 KiB
62 lines
2.0 KiB
odoo.define('pos_tare.tools', function (require) {
|
|
|
|
"use strict";
|
|
var core = require('web.core');
|
|
var utils = require('web.utils');
|
|
var field_utils = require('web.field_utils');
|
|
|
|
var _t = core._t;
|
|
var round_pr = utils.round_precision;
|
|
var round_di = utils.round_decimals;
|
|
|
|
// Convert mass using the reference UOM as pivot unit.
|
|
var convert_mass = function (mass, from_unit, to_unit) {
|
|
// There is no conversion from one category to another.
|
|
if (from_unit.category_id[0] !== to_unit.category_id[0]) {
|
|
throw new Error(_.str.sprintf(
|
|
_t("We can not cast a weight in %s into %s."),
|
|
from_unit.name, to_unit.name));
|
|
}
|
|
// No need to convert as weights are measured in same unit.
|
|
if (from_unit.id === to_unit.id) {
|
|
return mass;
|
|
}
|
|
// Converts "from_unit" to reference unit of measure.
|
|
var result = mass;
|
|
if (from_unit.uom_type === "bigger") {
|
|
result /= from_unit.factor;
|
|
} else {
|
|
result *= from_unit.factor_inv;
|
|
}
|
|
// Converts reference unit of measure to "to_unit".
|
|
if (to_unit.uom_type === "bigger") {
|
|
result *= to_unit.factor;
|
|
} else {
|
|
result /= to_unit.factor_inv;
|
|
}
|
|
|
|
if (to_unit.rounding) {
|
|
// Return the rounded result if needed.
|
|
return round_pr(result || 0, to_unit.rounding);
|
|
}
|
|
|
|
return result || 0;
|
|
};
|
|
|
|
// Format the tare value.
|
|
var format_tare = function (pos, qty, unit) {
|
|
if (unit.rounding) {
|
|
var q = round_pr(qty, unit.rounding);
|
|
var decimals = pos.dp['Product Unit of Measure'];
|
|
return field_utils.format.float(
|
|
round_di(q, decimals),
|
|
{type: 'float', digits: [69, decimals]});
|
|
}
|
|
return qty.toFixed(0);
|
|
};
|
|
|
|
return {
|
|
convert_mass: convert_mass,
|
|
format_tare: format_tare,
|
|
};
|
|
});
|