mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
[IMP] product_contract: Add contract configurator instead of making tree not editable
Before this changes, when trying to edit a line of sale order, it was opening the form of the line. But following the way to work of odoo with sale event, we have make a new contract configurator that will be opened when selecting a product of type contract.
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import {formView} from "@web/views/form/form_view";
|
||||
import {registry} from "@web/core/registry";
|
||||
import {useService} from "@web/core/utils/hooks";
|
||||
|
||||
export class ProductContractConfiguratorController extends formView.Controller {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.action = useService("action");
|
||||
}
|
||||
|
||||
async onRecordSaved(record) {
|
||||
await super.onRecordSaved(...arguments);
|
||||
const {
|
||||
product_uom_qty,
|
||||
contract_id,
|
||||
recurring_rule_type,
|
||||
recurring_invoicing_type,
|
||||
date_start,
|
||||
date_end,
|
||||
contract_line_id,
|
||||
is_auto_renew,
|
||||
auto_renew_interval,
|
||||
auto_renew_rule_type,
|
||||
} = record.data;
|
||||
return this.action.doAction({
|
||||
type: "ir.actions.act_window_close",
|
||||
infos: {
|
||||
productContractConfiguration: {
|
||||
product_uom_qty,
|
||||
contract_id,
|
||||
recurring_rule_type,
|
||||
recurring_invoicing_type,
|
||||
date_start,
|
||||
date_end,
|
||||
contract_line_id,
|
||||
is_auto_renew,
|
||||
auto_renew_interval,
|
||||
auto_renew_rule_type,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
registry.category("views").add("product_contract_configurator_form", {
|
||||
...formView,
|
||||
Controller: ProductContractConfiguratorController,
|
||||
});
|
||||
54
product_contract/static/src/js/sale_product_field.esm.js
Normal file
54
product_contract/static/src/js/sale_product_field.esm.js
Normal file
@@ -0,0 +1,54 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import {SaleOrderLineProductField} from "@sale/js/sale_product_field";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
|
||||
patch(SaleOrderLineProductField.prototype, {
|
||||
async _onProductUpdate() {
|
||||
super._onProductUpdate(...arguments);
|
||||
if (this.props.record.data.is_contract) {
|
||||
this._openContractConfigurator(true);
|
||||
}
|
||||
},
|
||||
|
||||
_editLineConfiguration() {
|
||||
super._editLineConfiguration(...arguments);
|
||||
if (this.props.record.data.is_contract) {
|
||||
this._openContractConfigurator();
|
||||
}
|
||||
},
|
||||
|
||||
get isConfigurableLine() {
|
||||
return super.isConfigurableLine || this.props.record.data.is_contract;
|
||||
},
|
||||
|
||||
async _openContractConfigurator(isNew = false) {
|
||||
const actionContext = {
|
||||
default_product_id: this.props.record.data.product_id[0],
|
||||
default_partner_id: this.props.record.model.root.data.partner_id[0],
|
||||
default_company_id: this.props.record.model.root.data.company_id[0],
|
||||
default_product_uom_qty: this.props.record.data.product_uom_qty,
|
||||
default_contract_id: this.props.record.data.contract_id[0],
|
||||
default_recurring_rule_type: this.props.record.data.recurring_rule_type,
|
||||
default_recurring_invoicing_type:
|
||||
this.props.record.data.recurring_invoicing_type,
|
||||
default_date_start: this.props.record.data.date_start,
|
||||
default_date_end: this.props.record.data.date_end,
|
||||
default_is_auto_renew: this.props.record.data.is_auto_renew,
|
||||
default_auto_renew_interval: this.props.record.data.auto_renew_interval,
|
||||
default_auto_renew_rule_type: this.props.record.data.auto_renew_rule_type,
|
||||
};
|
||||
this.action.doAction("product_contract.product_contract_configurator_action", {
|
||||
additionalContext: actionContext,
|
||||
onClose: async (closeInfo) => {
|
||||
if (closeInfo && !closeInfo.special) {
|
||||
this.props.record.update(closeInfo.productContractConfiguration);
|
||||
} else if (isNew) {
|
||||
this.props.record.update({
|
||||
[this.props.name]: undefined,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user