Odoo18-Base/addons/stock_account/static/src/fields/boolean_confirm.js
2025-01-06 10:57:38 +07:00

60 lines
1.7 KiB
JavaScript

/** @odoo-module **/
import { _t } from "@web/core/l10n/translation";
import { registry } from '@web/core/registry';
import { useService } from "@web/core/utils/hooks";
import { CheckBox } from "@web/core/checkbox/checkbox";
import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog";
import {
BooleanToggleField,
booleanToggleField,
} from "@web/views/fields/boolean_toggle/boolean_toggle_field";
export class ConfirmCheckBox extends CheckBox {
onClick(ev) {
ev.preventDefault();
if (ev.target.tagName !== "INPUT") {
return;
}
this.props.onChange(ev.target.checked);
}
}
export class BooleanToggleConfirm extends BooleanToggleField {
static template = "stock_account.BooleanToggleConfirm";
static components = { ConfirmCheckBox };
setup() {
super.setup();
this.dialogService = useService('dialog');
}
onChange(value) {
const record = this.props.record.data;
const updateAndSave = () => {
this.props.record.update({ [this.props.name]: value }, { save: true });
};
if (record.lot_valuated && !value) {
this.dialogService.add(ConfirmationDialog, {
body: _t("This operation might lead in a loss of data. Valuation will be identical for all lots/SN. Do you want to proceed ? "),
confirm: updateAndSave,
cancel: () => {},
});
}
else {
updateAndSave();
}
}
}
export const booleanToggleConfirm = {
...booleanToggleField,
component: BooleanToggleConfirm,
};
registry.category("fields").add("confirm_boolean", booleanToggleConfirm);