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:
@@ -8,10 +8,11 @@
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
Despite the name, some widely supported CSS2 features are used.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
@@ -274,7 +275,7 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code .ln { color: gray; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
@@ -300,7 +301,7 @@ span.option {
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
span.problematic, pre.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
@@ -431,7 +432,9 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
</a>
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.</p>
|
||||
|
||||
@@ -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