mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-26 12:52:02 +02:00
83 lines
3.2 KiB
JavaScript
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);
|
|
|
|
});
|