How can i go about adding a custom module to models.js to load ? and how can i gte my js file to read a new js function
so far i have created a js file which as the same content as models.js called pos_extend.js and created a new function however it seems my file is not being read.
and i get this error : Uncaught Error: QWeb2 - template['PosTicket']: Runtime Error: TypeError: undefined is not a function
static/src/js/pos_extend.js :
var orderline_id = 1;
var erhu = 3
// An orderline represent one element of the content of a client's shopping cart.
// An orderline contains a product, its quantity, its price, discount. etc.
// An Order contains zero or more Orderlines.
module.Orderline = Backbone.Model.extend({
initialize: function(attr,options){
this.pos = options.pos;
this.order = options.order;
this.product = options.product;
this.price = options.product.price;
this.quantity = 1;
this.quantityStr = '1';
this.discount = 0;
this.discountStr = '0';
this.type = 'unit';
this.selected = false;
this.id = orderline_id++;
this.invoice_company = erhu;
},
clone: function(){
var orderline = new module.Orderline({},{
pos: this.pos,
order: null,
product: this.product,
price: this.price,
});
orderline.quantity = this.quantity;
orderline.quantityStr = this.quantityStr;
orderline.discount = this.discount;
//orderline.invoice_company = this.invoice_company
orderline.type = this.type;
orderline.selected = false;
return orderline;
},
// sets a discount [0,100]%
set_discount: function(discount){
var disc = Math.min(Math.max(parseFloat(discount) || 0, 0),100);
this.discount = disc;
this.discountStr = '' + disc;
this.trigger('change',this);
},
// returns the discount [0,100]%
get_discount: function(){
return this.discount;
},
get_discount_str: function(){
return this.discountStr;
},
get_product_type: function(){
return this.type;
},
// sets the quantity of the product. The quantity will be rounded according to the
// product's unity of measure properties. Quantities greater than zero will not get
// rounded to zero
set_quantity: function(quantity){
if(quantity === 'remove'){
this.order.removeOrderline(this);
return;
}else{
var quant = parseFloat(quantity) || 0;
var unit = this.get_unit();
if(unit){
if (unit.rounding) {
this.quantity = round_pr(quant, unit.rounding);
this.quantityStr = this.quantity.toFixed(Math.ceil(Math.log(1.0 / unit.rounding) / Math.log(10)));
} else {
this.quantity = round_pr(quant, 1);
this.quantityStr = this.quantity.toFixed(0);
}
}else{
this.quantity = quant;
this.quantityStr = '' + this.quantity;
}
}
this.trigger('change',this);
},
// return the quantity of product
get_quantity: function(){
return this.quantity;
},
get_quantity_str: function(){
return this.quantityStr;
},
get_invoice_company: function() {
return this.invoice_company;
},
get_quantity_str_with_unit: function(){
var unit = this.get_unit();
if(unit && !unit.is_unit){
return this.quantityStr + ' ' + unit.name;
}else{
return this.quantityStr;
}
},
new function added :
get_invoice_company: function() {
return this.invoice_company;
},
static/src/xml/pos.xml :
<templates id="template" xml:space="preserve">
<t t-extend="PosTicket">
<t t-jquery=".pos-sale-ticket" t-operation="replace">
<div class="pos-sale-ticket">
<div id="company_logo" style="text-align:center;"><img t-att-src="'data:image/png;base64,'+ widget.pos.company.logo" height="150px" width="150px"/></div>
<div class="pos-center-align"><t t-esc="new Date().toString(Date.CultureInfo.formatPatterns.shortDate + ' ' +
Date.CultureInfo.formatPatterns.longTime)"/> <t t-esc="order.get('name')"/></div>
<br />
<t t-esc="widget.pos.company.name"/><br />
Phone: <t t-esc="widget.pos.company.phone || ''"/><br />
User: <t t-esc="widget.pos.cashier ? widget.pos.cashier.name : widget.pos.user.name"/><br />
<!-- <Order <t t-esc="widget.currentOrder.getName()"/><br/> -->
<!--Shop: <t t-esc="widget.pos.shop.name"/><br />-->
<br />
<t t-if="widget.pos.config.receipt_header">
<div style='text-align:center'>
<t t-esc="widget.pos.config.receipt_header" />
</div>
<br />
</t>
<table>
<colgroup>
<col width='50%' />
<col width='25%' />
<col width='25%' />
</colgroup>
<tr t-foreach="orderlines" t-as="orderline">
<td>
<t t-esc="orderline.get_product().display_name"/>
<t t-if="orderline.get_discount() > 0">
<div class="pos-disc-font">
With a <t t-esc="orderline.get_discount()"/>% discount
</div>
</t>
</td>
<td class="pos-right-align">
<t t-esc="orderline.get_quantity_str_with_unit()"/>
</td>
<td class="pos-right-align">
Property Company : <t t-esc="orderline.get_invoice_company()"/>
</td>
<td class="pos-right-align">
<t t-esc="widget.format_currency(orderline.get_display_price())"/>
</td>
</tr>
</table>
<br />
<table>
<tr>
<td>Subtotal:</td>
<td class="pos-right-align">
<t t-esc="widget.format_currency(order.getSubtotal())"/>
</td>
</tr>
<t t-foreach="order.getTaxDetails()" t-as="taxdetail">
<tr>
<td><t t-esc="taxdetail.name" /></td>
<td class="pos-right-align">
<t t-esc="widget.format_currency(taxdetail.amount)" />
</td>
</tr>
</t>
<tr>
<td>Discount:</td>
<td class="pos-right-align">
<t t-esc="widget.format_currency(order.getDiscountTotal())"/>
</td>
</tr>
<tr class="emph">
<td>Total:</td>
<td class="pos-right-align">
<t t-esc="widget.format_currency(order.getTotalTaxIncluded())"/>
</td>
</tr>
</table>
<br />
<table>
<tr t-foreach="paymentlines" t-as="line">
<td>
<t t-esc="line.name"/>
</td>
<td class="pos-right-align">
<t t-esc="widget.format_currency(line.get_amount())"/>
</td>
</tr>
</table>
<br />
<table>
<tr><td>Change:</td><td class="pos-right-align">
<t t-esc="widget.format_currency(order.getChange())"/>
</td></tr>
</table>
<t t-if="widget.pos.config.receipt_footer">
<br />
<div style='text-align:center'>
<t t-esc="widget.pos.config.receipt_footer" />
</div>
</t>
</div>
</t>
</t>
</templates>
js_inheritance.xml :