diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 63d7e891437..19128b42d6e 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -509,8 +509,8 @@ - - + + diff --git a/addons/account_bank_statement_extensions/account_bank_statement.py b/addons/account_bank_statement_extensions/account_bank_statement.py index 6eeda843dc5..3ef930b3ddc 100644 --- a/addons/account_bank_statement_extensions/account_bank_statement.py +++ b/addons/account_bank_statement_extensions/account_bank_statement.py @@ -105,7 +105,6 @@ account_bank_statement_line_global() class account_bank_statement_line(osv.osv): _inherit = 'account.bank.statement.line' _columns = { - 'date': fields.date('Entry Date', required=True, states={'confirm': [('readonly', True)]}), 'val_date': fields.date('Valuta Date', states={'confirm': [('readonly', True)]}), 'globalisation_id': fields.many2one('account.bank.statement.line.global', 'Globalisation ID', states={'confirm': [('readonly', True)]}, diff --git a/addons/account_bank_statement_extensions/account_bank_statement_view.xml b/addons/account_bank_statement_extensions/account_bank_statement_view.xml index 9164c00373f..43ebfc03382 100644 --- a/addons/account_bank_statement_extensions/account_bank_statement_view.xml +++ b/addons/account_bank_statement_extensions/account_bank_statement_view.xml @@ -56,6 +56,9 @@ + + + diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index e986f12b822..07ee621f956 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -156,25 +156,26 @@ class mail_thread(osv.AbstractModel): old = set(fol.partner_id.id for fol in fol_obj.browse(cr, SUPERUSER_ID, fol_ids)) new = set(old) - for command in value: - if isinstance(command, (int, long)): - new.add(command) - elif command[0] == 0: - new.add(partner_obj.create(cr, uid, command[2], context=context)) - elif command[0] == 1: - partner_obj.write(cr, uid, [command[1]], command[2], context=context) - new.add(command[1]) - elif command[0] == 2: - partner_obj.unlink(cr, uid, [command[1]], context=context) - new.discard(command[1]) - elif command[0] == 3: - new.discard(command[1]) - elif command[0] == 4: - new.add(command[1]) - elif command[0] == 5: - new.clear() - elif command[0] == 6: - new = set(command[2]) + if value: + for command in value: + if isinstance(command, (int, long)): + new.add(command) + elif command[0] == 0: + new.add(partner_obj.create(cr, uid, command[2], context=context)) + elif command[0] == 1: + partner_obj.write(cr, uid, [command[1]], command[2], context=context) + new.add(command[1]) + elif command[0] == 2: + partner_obj.unlink(cr, uid, [command[1]], context=context) + new.discard(command[1]) + elif command[0] == 3: + new.discard(command[1]) + elif command[0] == 4: + new.add(command[1]) + elif command[0] == 5: + new.clear() + elif command[0] == 6: + new = set(command[2]) # remove partners that are no longer followers fol_ids = fol_obj.search(cr, SUPERUSER_ID, diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index f219f4111ca..20d9bf273d5 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -484,7 +484,8 @@ class pos_order(osv.osv): 'name': order['name'], 'user_id': order['user_id'] or False, 'session_id': order['pos_session_id'], - 'lines': order['lines'] + 'lines': order['lines'], + 'pos_reference':order['name'] }, context) for payments in order['statement_ids']: @@ -592,7 +593,7 @@ class pos_order(osv.osv): 'picking_id': fields.many2one('stock.picking', 'Picking', readonly=True), 'note': fields.text('Internal Notes'), 'nb_print': fields.integer('Number of Print', readonly=True), - + 'pos_reference': fields.char('Receipt Ref', size=64, readonly=True), 'sale_journal': fields.related('session_id', 'config_id', 'journal_id', relation='account.journal', type='many2one', string='Sale Journal', store=True, readonly=True), } diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 1ee55f736aa..9d58ee5c473 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -88,6 +88,7 @@ + @@ -131,6 +132,7 @@ + @@ -149,6 +151,7 @@ + @@ -890,7 +893,7 @@ - + diff --git a/addons/point_of_sale/report/pos_details.py b/addons/point_of_sale/report/pos_details.py index f8565a8776a..293eeb722a3 100644 --- a/addons/point_of_sale/report/pos_details.py +++ b/addons/point_of_sale/report/pos_details.py @@ -91,16 +91,17 @@ class pos_details(report_sxw.rml_parse): def _get_sum_dis_2(self): return self.discount or 0.0 - def _get_sum_discount(self, objects): + def _get_sum_discount(self, form): #code for the sum of discount value - return reduce(lambda acc, object: - acc + reduce( - lambda sum_dis, line: - sum_dis + ((line.price_unit * line.qty) * (line.discount / 100)), - object.lines, - 0.0), - objects, - 0.0) + pos_obj = self.pool.get('pos.order') + user_obj = self.pool.get('res.users') + user_ids = form['user_ids'] or self._get_all_users() + company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id + pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('user_id','in',user_ids),('company_id','=',company_id)]) + for pos in pos_obj.browse(self.cr, self.uid, pos_ids): + for pol in pos.lines: + self.total_discount += ((pol.price_unit * pol.qty) * (pol.discount / 100)) + return self.total_discount or False def _get_payments(self, form): statement_line_obj = self.pool.get("account.bank.statement.line") @@ -179,11 +180,12 @@ class pos_details(report_sxw.rml_parse): self.qty = 0.0 self.total_invoiced = 0.0 self.discount = 0.0 + self.total_discount = 0.0 self.localcontext.update({ 'time': time, 'strip_name': self._strip_name, 'getpayments': self._get_payments, - 'getsumdisc': self._get_sum_dis_2, + 'getsumdisc': self._get_sum_discount, 'gettotalofthaday': self._total_of_the_day, 'gettaxamount': self._get_tax_amount, 'pos_sales_details':self._pos_sales_details, diff --git a/addons/point_of_sale/report/pos_details.rml b/addons/point_of_sale/report/pos_details.rml index e7c4c756e64..6360dc25b12 100644 --- a/addons/point_of_sale/report/pos_details.rml +++ b/addons/point_of_sale/report/pos_details.rml @@ -373,8 +373,8 @@ Total discount - [[ formatLang(getsumdisc(), dp='Sale Price', currency_obj = company.currency_id) ]] - + [[ formatLang(getsumdisc(data['form']), dp='Sale Price', currency_obj = company.currency_id) ]] + diff --git a/addons/point_of_sale/report/pos_order_report.py b/addons/point_of_sale/report/pos_order_report.py index 27086e08b26..914bef06bbf 100644 --- a/addons/point_of_sale/report/pos_order_report.py +++ b/addons/point_of_sale/report/pos_order_report.py @@ -60,7 +60,7 @@ class pos_order_report(osv.osv): to_date(to_char(s.date_order, 'dd-MM-YYYY'),'dd-MM-YYYY') as date, sum(l.qty * u.factor) as product_qty, sum(l.qty * l.price_unit) as price_total, - sum(l.qty * l.discount) as total_discount, + sum((l.qty * l.price_unit) * (l.discount / 100)) as total_discount, (sum(l.qty*l.price_unit)/sum(l.qty * u.factor))::decimal(16,2) as average_price, sum(cast(to_char(date_trunc('day',s.date_order) - date_trunc('day',s.create_date),'DD') as int)) as delay_validation, to_char(s.date_order, 'YYYY') as year, diff --git a/addons/point_of_sale/report/pos_receipt.rml b/addons/point_of_sale/report/pos_receipt.rml index d7b8b08ad29..0802114bb48 100644 --- a/addons/point_of_sale/report/pos_receipt.rml +++ b/addons/point_of_sale/report/pos_receipt.rml @@ -103,6 +103,12 @@ [[ repeatIn(o.lines,'line') ]] [[ line.product_id.name ]] + + With a [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.2f' % line.discount ]]) % discount. + + + + [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]] diff --git a/addons/point_of_sale/static/src/css/pos.css b/addons/point_of_sale/static/src/css/pos.css index 81c6a1e1a6e..675b77345e7 100644 --- a/addons/point_of_sale/static/src/css/pos.css +++ b/addons/point_of_sale/static/src/css/pos.css @@ -102,6 +102,11 @@ border: 1px solid #cecbcb; border-radius: 4px; } +.point-of-sale .pos-disc-font { + font-size: 12px; + font-style:italic; + color: #808080; +} /* ********* The black header bar ********* */ diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index 2c6f4e8b6e0..f3243a035c5 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -178,12 +178,15 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal [['state','=','open'],['pos_session_id', '=', self.get('pos_session').id]] ); }).pipe(function(bank_statements){ + var journals = new Array(); + _.each(bank_statements,function(statement) { + journals.push(statement.journal_id[0]) + }); self.set('bank_statements', bank_statements); - - return self.fetch('account.journal', undefined, [['user_id','=', self.get('pos_session').user_id[0]]]); + return self.fetch('account.journal', undefined, [['id','in', journals]]); }).pipe(function(journals){ self.set('journals',journals); - + // associate the bank statements with their journals. var bank_statements = self.get('bank_statements'); for(var i = 0, ilen = bank_statements.length; i < ilen; i++){ @@ -614,6 +617,11 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal return sum + orderLine.get_price_with_tax(); }), 0); }, + getDiscountTotal: function() { + return (this.get('orderLines')).reduce((function(sum, orderLine) { + return sum + (orderLine.get_list_price() * (orderLine.get_discount()/100) * orderLine.get_quantity()); + }), 0); + }, getTotalTaxExcluded: function() { return (this.get('orderLines')).reduce((function(sum, orderLine) { return sum + orderLine.get_price_without_tax(); diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index bd174b12fda..8028349b177 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -967,6 +967,9 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa this.$('#payment-paid-total').html(paidTotal.toFixed(2)); this.$('#payment-remaining').html(remaining.toFixed(2)); this.$('#payment-change').html(change.toFixed(2)); + if((currentOrder.selected_orderline == undefined)) + remaining = 1 + if(this.pos_widget.action_bar){ this.pos_widget.action_bar.set_button_disabled('validation', remaining > 0); } diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml index 854dd61cc1b..89d0a93fef2 100644 --- a/addons/point_of_sale/static/src/xml/pos.xml +++ b/addons/point_of_sale/static/src/xml/pos.xml @@ -541,8 +541,9 @@
+
+ Date.CultureInfo.formatPatterns.longTime)"/>


  • Phone:
    @@ -553,6 +554,11 @@ + +
  • + With a % discount +
  • +
    @@ -567,6 +573,9 @@ Tax: + Discount: + + Total: