diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py
index 1f35766eb85..0c9f6979129 100644
--- a/addons/point_of_sale/models/pos_session.py
+++ b/addons/point_of_sale/models/pos_session.py
@@ -1686,6 +1686,7 @@ class PosSession(models.Model):
loaded_data['pos_has_valid_product'] = self._pos_has_valid_product()
loaded_data['pos_special_products_ids'] = self.env['pos.config']._get_special_products().ids
loaded_data['open_orders'] = self.env['pos.order'].search([('session_id', '=', self.id), ('state', '=', 'draft')]).export_for_ui()
+ loaded_data['partner_commercial_fields'] = self.env['res.partner']._commercial_fields()
@api.model
def _pos_ui_models_to_load(self):
diff --git a/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.js b/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.js
index 7c5d92133e3..70d17a9685b 100644
--- a/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.js
+++ b/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.js
@@ -139,4 +139,11 @@ export class PartnerDetailsEdit extends Component {
img.src = url;
});
}
+
+ isFieldCommercialAndPartnerIsChild(field) {
+ return (
+ this.pos.isChildPartner(this.props.partner) &&
+ this.pos.partner_commercial_fields.includes(field)
+ );
+ }
}
diff --git a/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.scss b/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.scss
index 6ed28dcf7e1..57e5ad1e049 100644
--- a/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.scss
+++ b/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.scss
@@ -21,3 +21,8 @@
cursor: pointer;
}
}
+
+.partner-details input:disabled{
+ color: #999999; // Lighter text color
+ border-color: #cccccc; // Lighter border color
+}
diff --git a/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.xml b/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.xml
index 099d9f086e0..86cfbf782e0 100644
--- a/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.xml
+++ b/addons/point_of_sale/static/src/app/screens/partner_list/partner_editor/partner_editor.xml
@@ -19,13 +19,20 @@
-
+
-
-
+
-
+
-
+
-
+
diff --git a/addons/point_of_sale/static/src/app/store/pos_store.js b/addons/point_of_sale/static/src/app/store/pos_store.js
index 479df47d83d..8d66a36c73a 100644
--- a/addons/point_of_sale/static/src/app/store/pos_store.js
+++ b/addons/point_of_sale/static/src/app/store/pos_store.js
@@ -279,6 +279,7 @@ export class PosStore extends Reactive {
this.base_url = loadedData["base_url"];
this.pos_has_valid_product = loadedData["pos_has_valid_product"];
this.db.addProductIdsToNotDisplay(loadedData["pos_special_products_ids"]);
+ this.partner_commercial_fields = loadedData["partner_commercial_fields"];
await this._loadPosPrinters(loadedData["pos.printer"]);
this.open_orders_json = loadedData["open_orders"];
}
@@ -665,7 +666,9 @@ export class PosStore extends Reactive {
}
}
}
- if(!missingProductIds.size) return;
+ if (!missingProductIds.size) {
+ return;
+ }
const products = await this.orm.call(
"pos.session",
"get_pos_ui_product_product_by_params",
@@ -675,13 +678,15 @@ export class PosStore extends Reactive {
this._loadProductProduct(products);
}
async _loadMissingPricelistItems(products) {
- if(!products.length) return;
- const product_tmpl_ids = products.map(product => product.product_tmpl_id[0]);
- const product_ids = products.map(product => product.id);
+ if (!products.length) {
+ return;
+ }
+ const product_tmpl_ids = products.map((product) => product.product_tmpl_id[0]);
+ const product_ids = products.map((product) => product.id);
const pricelistItems = await this.orm.call(
- 'pos.session',
- 'get_pos_ui_product_pricelist_item_by_product',
+ "pos.session",
+ "get_pos_ui_product_pricelist_item_by_product",
[odoo.pos_session_id, product_tmpl_ids, product_ids]
);
@@ -691,9 +696,9 @@ export class PosStore extends Reactive {
// E.g. The order in the items should be: [product-pricelist-item, product-template-pricelist-item, category-pricelist-item, global-pricelist-item].
// for reference check order of the Product Pricelist Item model
for (const pricelist of this.pricelists) {
- const itemIds = new Set(pricelist.items.map(item => item.id));
+ const itemIds = new Set(pricelist.items.map((item) => item.id));
- const _pricelistItems = pricelistItems.filter(item => {
+ const _pricelistItems = pricelistItems.filter((item) => {
return item.pricelist_id[0] === pricelist.id && !itemIds.has(item.id);
});
pricelist.items = [..._pricelistItems, ...pricelist.items];
@@ -1945,6 +1950,10 @@ export class PosStore extends Reactive {
header: this.config.receipt_header,
};
}
+
+ isChildPartner(partner) {
+ return partner.parent_name;
+ }
}
PosStore.prototype.electronic_payment_interfaces = {};