this.message('open_cashbox');
},
- // ask the printer to print a receipt
+ /* ask the printer to print a receipt
+ * receipt is a JSON object with the following specs:
+ * receipt{
+ * - orderlines : list of orderlines :
+ * {
+ * quantity: (number) the number of items, or the weight,
+ * unit_name: (string) the name of the item's unit (kg, dozen, ...)
+ * list_price: (number) the price of one unit of the item before discount
+ * discount: (number) the discount on the product in % [0,100]
+ * product_name: (string) the name of the product
+ * price_with_tax: (number) the price paid for this orderline, tax included
+ * price_without_tax: (number) the price paid for this orderline, without taxes
+ * tax: (number) the price paid in taxes on this orderline
+ * }
+ * - paymentlines : list of paymentlines :
+ * {
+ * amount: (number) the amount paid
+ * journal: (string) the name of the journal on wich the payment has been made
+ * }
+ * - total_with_tax: (number) the total of the receipt tax included
+ * - total_without_tax: (number) the total of the receipt without taxes
+ * - total_tax: (number) the total amount of taxes paid
+ * - total_paid: (number) the total sum paid by the client
+ * - change: (number) the amount of change given back to the client
+ * - name: (string) a unique name for this order
+ * - client: (string) name of the client. or null if no client is logged
+ * - cashier: (string) the name of the cashier
+ * - date: { the date at wich the payment has been done
+ * year: (number) the year [2012, ...]
+ * month: (number) the month [0,11]
+ * date: (number) the day of the month [1,31]
+ * day: (number) the day of the week [0,6]
+ * hour: (number) the hour [0,23]
+ * minute: (number) the minute [0,59]
+ * }
+ */
print_receipt: function(receipt){
- var sample_receipt = {
- // TODO This is a sample receipt,
- // we need to discuss the exact format based on what really needs
- // to be printed on the receipt ...
- // ... the same for invoices ...
- client_name: 'John Smith',
- cashier_name: 'Mike Doe',
- date: '28 january 2024, 17h32',
- currency:{
- symbol: '$',
- position: 'before',
- },
- total_with_taxes: 94.1,
- total_without_taxes: 90,
- taxes: 4.1,
- orderlines:[
- {
- name: 'Cola',
- unit_price_with_taxes: 1,
- unit_price_without_taxes: 0.8,
- total_price_with_taxes: 10,
- total_price_without_taxes: 8,
- quantity: '10 Bottles',
- discount: '',
- },
- {
- name: 'Pizza',
- unit_price_with_taxes: 3,
- unit_price_without_taxes: 2,
- total_price_with_taxes: 18,
- total_price_without_taxes: 12,
- quantity: '10',
- discount: '40 %',
- }
- ],
- };
- this.message('print_receipt',{receipt: receipt || sample_receipt});
+ this.message('print_receipt',{receipt: receipt});
},
});
push_order: function(record) {
var self = this;
return this.dao.add_operation(record).pipe(function(){
- return self.flush();
+ return self.flush();
});
},
export_as_JSON: function() {
return {
qty: this.get_quantity(),
- price_unit: this.get_product().get('list_price'),
+ price_unit: this.get_list_price(),
discount: this.get_discount(),
- product_id: this.get_product().get('id')
+ product_id: this.get_product().get('id'),
+ };
+ },
+ export_for_printing: function(){
+ return {
+ quantity: this.get_quantity(),
+ unit_name: this.get_unit().name,
+ list_price: this.get_list_price(),
+ discount: this.get_discount(),
+ product_name: this.get_product().get('name'),
+ price_with_tax : this.get_price_with_tax(),
+ price_without_tax: this.get_price_without_tax(),
+ tax: this.get_tax(),
};
},
get_price_without_tax: function(){
return {
name: instance.web.datetime_to_str(new Date()),
statement_id: this.get('id'),
- account_id: (this.get('account_id'))[0],
- journal_id: (this.get('journal_id'))[0],
+ account_id: (this.cashregister.get('account_id'))[0],
+ journal_id: (this.cashregister.get('journal_id'))[0],
amount: this.get_amount()
};
},
+ export_for_printing: function(){
+ return {
+ amount: this.get_amount(),
+ journal: this.cashregister.get('journal_id')[1],
+ };
+ },
});
module.PaymentlineCollection = Backbone.Collection.extend({
getDueLeft: function() {
return this.getTotal() - this.getPaidTotal();
},
+ export_for_printing: function(){
+ var orderlines = [];
+ this.get('orderLines').each(function(orderline){
+ orderlines.push(orderline.export_for_printing());
+ });
+
+ var paymentlines = [];
+ this.get('paymentLines').each(function(paymentline){
+ paymentlines.push(paymentline.export_for_printing());
+ });
+ var client = this.pos.get('client');
+ var cashier = this.pos.get('cashier') || this.pos.get('user');
+ var date = new Date();
+
+ return {
+ orderlines: orderlines,
+ paymentlines: paymentlines,
+ total_with_tax: this.getTotal(),
+ total_without_tax: this.getTotalTaxExcluded(),
+ total_tax: this.getTax(),
+ total_paid: this.getPaidTotal(),
+ change: this.getChange(),
+ name : this.getName(),
+ client: client ? client.name : null ,
+ cashier: cashier ? cashier.name : null,
+ date: {
+ year: date.getFullYear(),
+ month: date.getMonth(),
+ date: date.getDate(), // day of the month
+ day: date.getDay(), // day of the week
+ hour: date.getHours(),
+ minute: date.getMinutes()
+ },
+ currency: this.pos.get('currency'),
+ };
+ },
exportAsJSON: function() {
var orderLines, paymentLines;
orderLines = [];
this.selected_orderline = undefined;
}
},
-
});
module.OrderCollection = Backbone.Collection.extend({
var self = this;
var currentOrder = this.pos.get('selectedOrder');
+ console.log('RECEIPT:',currentOrder.export_for_printing());
+
this.validate_button.$element.attr('disabled','disabled'); //FIXME is the css actually using this attr ?
this.pos.push_order(currentOrder.exportAsJSON())
.then(function() {
self.validate_button.$element.removeAttr('disabled');
if(self.pos.use_proxy_printer){
+ self.pos.proxy.print_receipt(currentOrder.export_for_printing());
self.pos.get('selectedOrder').destroy(); //finish order and go back to scan screen
}else{
self.pos_widget.screen_selector.set_current_screen('receipt');
this.renderElement();
},
addPaymentLine: function(newPaymentLine) {
- console.log('NEW PAYMENT LINE WIDGET',newPaymentLine);
var x = new module.PaymentlineWidget(null, {
payment_line: newPaymentLine
});