This question has been flagged
9 Replies
8840 Views

In Odoo 8, if you sell something and invoice it from POS, it will not register the payment at

Accounting > Current Invoices > (some invoice)

The invoice remains as 'Open' and the payment is not registered. 
Is this the correct behavior? Or is it a bug?

Regards
Alejandro

Avatar
Discard
Best Answer

The payment will be registered when the POS session is closed. Anyway, the associated invoice will remain open. This last, definitely is a bug, I did not find a way to reconcile, or associate the payment to the invoice yet.

I'll see what happen if I change de invoice status in some way.

Avatar
Discard
Author

Hello Daniel, thanks for your input, if the payment is being registered when the POS session is closed, then it wouldn't be so hard to make a function to set the status for all involved invoices to 'paid'. I will take a look at this and come back with some comments.

I think the issue here is that the payment is registered. There should be an option to register an invoice without a payment. This way you could register a credit for a customer. If the customer will pay later. An invoice would be created to serve as the registry for that receivable amount. I've not yet found a way to make the POS not register a payment and allow me to register an invoice.

Best Answer

I have the same issue , i find this: https://github.com/odoo/odoo/issues/6534

I make same change to work for odoo 9:

from openerp.osv import fields, osvimport logging_logger = logging.getLogger(__name__) class pos_session(osv.osv): _inherit = 'pos.session' def _confirm_orders(self, cr, uid, ids, context=None): account_move_obj = self.pool.get('account.move') account_move_line_obj = self.pool.get('account.move.line') pos_order_obj = self.pool.get('pos.order') for session in self.browse(cr, uid, ids, context=context): local_context = dict(context or {}, force_company=session.config_id.journal_id.company_id.id) order_ids = [order.id for order in session.order_ids if order.state == 'paid'] move_id = account_move_obj.create(cr, uid, {'ref' : session.name, 'journal_id' : session.config_id.journal_id.id, }, context=local_context) pos_order_obj._create_account_move_line(cr, uid, order_ids, session, move_id, context=local_context) for order in session.order_ids: if order.state == 'done': continue if order.state not in ('paid', 'invoiced'): raise osv.except_osv( _('Error!'), _("You cannot confirm all orders of this session, because they have not the 'paid' status")) else: pos_order_obj.signal_workflow(cr, uid, [order.id], 'done') order_ids = self.pool.get('pos.order').search(cr, uid, [('session_id','=', session.id)]) for obj_order_id in self.pool.get('pos.order').browse(cr, uid, order_ids, context=context): move_line = [] for move_line_id in obj_order_id.invoice_id.move_id.line_ids: if move_line_id.name == obj_order_id.name: move_line.append(move_line_id.id) move_line_ids_1 = [] for statement_id in obj_order_id.statement_ids: move_line_ids = account_move_line_obj.search(cr, uid, [('statement_id','=', statement_id.statement_id and statement_id.statement_id.id)]) if (move_line_ids != move_line_ids_1) : for line in account_move_line_obj.browse(cr, uid, move_line_ids): if line.credit and line.name.strip().strip(':') == obj_order_id.name: move_line.append(line.id) if line.debit and 'return' in line.name: move_line.append(line.id) move_line_ids_1 = move_line_ids ctx = context.copy() ctx.update({'active_ids': move_line}) self.pool.get('account.move.line.reconcile').trans_rec_reconcile_full(cr, uid, [], ctx) return True 

The invoice change from Open to Paid only after closed the session of the Point Of Sale.

Avatar
Discard
Best Answer

Just in case that there are people looking for a fix, here is a simple module that will auto reconcile the invoice with its payment so the invoice will be paid.

https://github.com/mohamedhagag/dvit-odoo8/tree/master/pos_invoice_payment_auto_reconcile

Avatar
Discard

Thank you for you module. Two things :

1. the new name's module is **pos_fixes**

2. I had to adapt the code to fit with odoo v9

I found a bug (it seems). When you do two sales in POS in the same session for the same customer : **First** invoiced, the **second** without invoice. When I close session, the first invoice stll open and not paid.

Best Answer

Hi \Alejandro Perez Cosio

1)In POS, if any order is invoiced then you can check under POS Orders and you will find that particular order status as “Invoiced”.

Note :- Even if the session in which the Invoice was generated is validated and closed the invoice status does not change. This needs a relook.

2)But If you click on the POS Order and go to the Tab “Extra Info” , you will be able to find a field Invoice(e.g. SAJ/2016/0003Main/007) associated with the POS Order under Accounting Information. On clicking on it you will have the option to register payment.

Hope this helps

Cheers

Avatar
Discard
Best Answer

I have the same issue, did you find a solution?

Avatar
Discard