oca-ocb-sale/odoo-bringout-oca-ocb-pos_sale/pos_sale/static/src/js/models.js
2025-08-29 15:20:49 +02:00

83 lines
3.2 KiB
JavaScript

odoo.define('pos_sale.models', function (require) {
"use strict";
var { Order, Orderline } = require('point_of_sale.models');
const Registries = require('point_of_sale.Registries');
const PosSaleOrder = (Order) => class PosSaleOrder extends Order {
//@override
select_orderline(orderline) {
super.select_orderline(...arguments);
if (orderline && orderline.product.id === this.pos.config.down_payment_product_id[0]) {
this.pos.numpadMode = 'price';
}
}
//@override
_get_ignored_product_ids_total_discount() {
const productIds = super._get_ignored_product_ids_total_discount(...arguments);
productIds.push(this.pos.config.down_payment_product_id[0]);
return productIds;
}
}
Registries.Model.extend(Order, PosSaleOrder);
const PosSaleOrderline = (Orderline) => class PosSaleOrderline extends Orderline {
constructor(obj, options) {
super(...arguments);
// It is possible that this orderline is initialized using `init_from_JSON`,
// meaning, it is loaded from localStorage or from export_for_ui. This means
// that some fields has already been assigned. Therefore, we only set the options
// when the original value is falsy.
this.sale_order_origin_id = this.sale_order_origin_id || options.sale_order_origin_id;
this.sale_order_line_id = this.sale_order_line_id || options.sale_order_line_id;
this.down_payment_details = this.down_payment_details || options.down_payment_details;
this.customerNote = this.customerNote || options.customer_note;
}
init_from_JSON(json) {
super.init_from_JSON(...arguments);
this.sale_order_origin_id = json.sale_order_origin_id;
this.sale_order_line_id = json.sale_order_line_id;
this.down_payment_details = json.down_payment_details && JSON.parse(json.down_payment_details);
}
export_as_JSON() {
const json = super.export_as_JSON(...arguments);
json.sale_order_origin_id = this.sale_order_origin_id;
json.sale_order_line_id = this.sale_order_line_id;
json.down_payment_details = this.down_payment_details && JSON.stringify(this.down_payment_details);
return json;
}
get_sale_order(){
if(this.sale_order_origin_id) {
let value = {
'name': this.sale_order_origin_id.name,
'details': this.down_payment_details || false
}
return value;
}
return false;
}
export_for_printing() {
var json = super.export_for_printing(...arguments);
json.down_payment_details = this.down_payment_details;
if (this.sale_order_origin_id) {
json.so_reference = this.sale_order_origin_id.name;
}
return json;
}
/**
* Set quantity based on the give sale order line.
* @param {'sale.order.line'} saleOrderLine
*/
setQuantityFromSOL(saleOrderLine) {
if (this.product.type === 'service' && !['sent', 'draft'].includes(this.sale_order_origin_id.state)) {
this.set_quantity(saleOrderLine.qty_to_invoice);
} else {
this.set_quantity(saleOrderLine.product_uom_qty - Math.max(saleOrderLine.qty_delivered, saleOrderLine.qty_invoiced));
}
}
}
Registries.Model.extend(Orderline, PosSaleOrderline);
});