diff --git a/account_banking_payment_export/demo/banking_demo.xml b/account_banking_payment_export/demo/banking_demo.xml index c33d538c0..be9cd471b 100644 --- a/account_banking_payment_export/demo/banking_demo.xml +++ b/account_banking_payment_export/demo/banking_demo.xml @@ -86,6 +86,7 @@ + @@ -95,6 +96,7 @@ + diff --git a/account_banking_payment_export/models/payment_mode.py b/account_banking_payment_export/models/payment_mode.py index dff0071e1..034973cdd 100644 --- a/account_banking_payment_export/models/payment_mode.py +++ b/account_banking_payment_export/models/payment_mode.py @@ -86,20 +86,11 @@ class PaymentMode(models.Model): res = [t.code for t in payment_mode.type.suitable_bank_types] return res - @api.model - def _default_type(self): - return self.env.ref( - 'account_banking_payment_export.' - 'manual_bank_tranfer', raise_if_not_found=False)\ - or self.env['payment.mode.type'] - type = fields.Many2one( 'payment.mode.type', string='Export type', required=True, - help='Select the Export Payment Type for the Payment Mode.', - default=_default_type) + help='Select the Export Payment Type for the Payment Mode.') payment_order_type = fields.Selection( related='type.payment_order_type', readonly=True, string="Order Type", - selection=[('payment', 'Payment'), ('debit', 'Debit')], help="This field, that comes from export type, determines if this " "mode can be selected for customers or suppliers.") active = fields.Boolean(string='Active', default=True) @@ -119,3 +110,16 @@ class PaymentMode(models.Model): ], default='due', string="Type of Date Filter") default_populate_results = fields.Boolean( string='Populate Results Directly') + + @api.onchange('type') + def type_on_change(self): + if self.type: + ajo = self.env['account.journal'] + aj_ids = [] + if self.type.payment_order_type == 'payment': + aj_ids = ajo.search([ + ('type', 'in', ('purchase_refund', 'purchase'))]).ids + elif self.type.payment_order_type == 'debit': + aj_ids = ajo.search([ + ('type', 'in', ('sale_refund', 'sale'))]).ids + self.default_journal_ids = [(6, 0, aj_ids)] diff --git a/account_banking_payment_transfer/model/bank_payment_line.py b/account_banking_payment_transfer/model/bank_payment_line.py index d46fa8d59..9b523c0cb 100644 --- a/account_banking_payment_transfer/model/bank_payment_line.py +++ b/account_banking_payment_transfer/model/bank_payment_line.py @@ -94,12 +94,6 @@ class BankPaymentLine(models.Model): "been reconciled") % ( payment_line.move_line_id.name, payment_line.partner_id.name)) - if payment_line.move_line_id.reconcile_partial_id: - raise UserError(_( - "Move line '%s' of partner '%s' has already " - "been partially reconciled") % ( - payment_line.move_line_id.name, - payment_line.partner_id.name)) if ( payment_line.move_line_id.account_id != transit_move_line.account_id): diff --git a/account_banking_payment_transfer/test/test_partial_payment_refunded.yml b/account_banking_payment_transfer/test/test_partial_payment_refunded.yml index cf476f155..529a04e88 100644 --- a/account_banking_payment_transfer/test/test_partial_payment_refunded.yml +++ b/account_banking_payment_transfer/test/test_partial_payment_refunded.yml @@ -42,7 +42,7 @@ quantity: 1.0 journal_id: account.expenses_journal - - Make sure that the type is in_invoice + Make sure that the type is in_refund - !python {model: account.invoice}: | self.write(cr, uid, ref("account_refund_supplier_refunded"), {'type': 'in_refund'}) @@ -51,67 +51,38 @@ - !workflow {model: account.invoice, action: invoice_open, ref: account_refund_supplier_refunded} - - I reconcile the invoice and the refund -- - !record {model: account.move.line.reconcile, id: account_move_line_reconcile0}: - trans_nbr: 2 - credit: 600.0 - debit: 200.0 - writeoff: -400.0 -- - Then I click on the 'Partial Reconcile' button -- - !python {model: account.move.line.reconcile}: | - move_line_obj = self.pool.get('account.move.line') - inv_obj = self.pool.get('account.invoice') - invoice_move_id = inv_obj.browse(cr, uid, ref("account_invoice_supplier_refunded")).move_id.id - refund_move_id = inv_obj.browse(cr, uid, ref("account_refund_supplier_refunded")).move_id.id - debit_line_id = move_line_obj.search(cr, uid, [('move_id', '=', refund_move_id),('debit', '=', 200)])[0] - credit_line_id = move_line_obj.search(cr, uid, [('move_id', '=', invoice_move_id),('credit', '=', 600)])[0] - ids = [debit_line_id, credit_line_id] - partial_reconcile = self.trans_rec_reconcile_partial_reconcile(cr, uid, [ref('account_move_line_reconcile0')], { - 'active_model': 'account.move.line', 'active_ids': ids, 'tz': False, 'active_id': ids[1]}) - move_line = move_line_obj.browse(cr, uid, ids) - assert move_line[0].reconcile_partial_id, "Partial reconcilation is not done" -- - I check that the invoice balance (residual) is now 400 -- - !assert {model: account.invoice, id: account_invoice_supplier_refunded, severity: error, string: Invoice residual should be 400.}: - - residual == 400 - - amount_total == 600 -- - I create a payment order on which I will select the invoice I created + I create a payment order - !record {model: payment.order, id: partial_payment_order_1}: mode: account_banking_payment_transfer.payment_mode0 - date_prefered: 'due' + date_prefered: 'now' - - !record {model: payment.order.create, id: payment_order_create_1}: - duedate: !eval time.strftime('%Y-%m-%d') -- - I search for the invoice entries to make the payment. -- - !python {model: payment.order.create}: | - self.search_entries(cr, uid, [ref("payment_order_create_1")], { - "active_model": "payment.order", "active_ids": [ref("partial_payment_order_1")], - "active_id": ref("partial_payment_order_1"), }) -- - I create payment lines entries. + I run the select move line to pay wizard - !python {model: payment.order.create}: | + context = { + "active_model": "payment.order", + "active_ids": [ref("partial_payment_order_1")], + "active_id": ref("partial_payment_order_1"), + } + wiz_id = self.create(cr, uid, {}, context=context) + self.search_entries(cr, uid, [wiz_id], context=context) + mline_ids = [] invoice = self.pool.get('account.invoice').browse(cr, uid, ref("account_invoice_supplier_refunded")) for l in invoice.move_id.line_id: if not l.debit and l.credit: - move_line = l + mline_ids.append(l.id) break - self.write(cr, uid, [ref("payment_order_create_1")], {'entries': [(6,0,[move_line.id])]}) - self.create_payment(cr, uid, [ref("payment_order_create_1")], { - "active_model": "payment.order", "active_ids": [ref("partial_payment_order_1")], - "active_id": ref("partial_payment_order_1")}) + refund = self.pool.get('account.invoice').browse(cr, uid, ref("account_refund_supplier_refunded")) + for l in refund.move_id.line_id: + if not l.credit and l.debit: + mline_ids.append(l.id) + break + self.write(cr, uid, [wiz_id], {'entries': [(6, 0, mline_ids)]}) + self.create_payment(cr, uid, [wiz_id], context=context) pay_obj = self.pool.get('payment.order') pay = pay_obj.browse(cr, uid, ref('partial_payment_order_1')) - assert pay.line_ids[0].amount_currency == 400 - assert pay.total == 400 + assert len(pay.line_ids) == 2 - I confirm the payment order. - @@ -121,6 +92,7 @@ - !assert {model: payment.order, id: partial_payment_order_1, severity: error, string: Payment Order should be 'Confirmed'.}: - state == 'open' + - total == 400.0 - I create the wizard for paying the payment - @@ -159,4 +131,4 @@ !assert {model: account.invoice, id: account_invoice_supplier_refunded, severity: error, string: Invoice residual should be 0.}: - residual == 0 - amount_total == 600 - - state == 'paid' \ No newline at end of file + - state == 'paid' diff --git a/account_banking_payment_transfer/test/test_partial_payment_transfer.yml b/account_banking_payment_transfer/test/test_partial_payment_transfer.yml index f32b9a84d..2e7a05a7c 100644 --- a/account_banking_payment_transfer/test/test_partial_payment_transfer.yml +++ b/account_banking_payment_transfer/test/test_partial_payment_transfer.yml @@ -25,31 +25,26 @@ - !workflow {model: account.invoice, action: invoice_open, ref: account_invoice_supplier_partial} - - I create a payment order on which I will select the invoice I created + I create a payment order - !record {model: payment.order, id: partial_payment_order_2}: mode: account_banking_payment_transfer.payment_mode0 date_prefered: 'due' - - !record {model: payment.order.create, id: payment_order_create_2}: - duedate: !eval time.strftime('%Y-%m-%d') -- - I search for the invoice entries to make the payment. -- - !python {model: payment.order.create}: | - self.search_entries(cr, uid, [ref("payment_order_create_2")], { - "active_model": "payment.order", "active_ids": [ref("partial_payment_order_2")], - "active_id": ref("partial_payment_order_2"), }) -- - I create payment lines entries. + I run the select move line to pay wizard - !python {model: payment.order.create}: | + context = { + "active_model": "payment.order", + "active_ids": [ref("partial_payment_order_2")], + "active_id": ref("partial_payment_order_2"), + } + wiz_id = self.create(cr, uid, {}, context=context) + self.search_entries(cr, uid, [wiz_id], context=context) invoice = self.pool.get('account.invoice').browse(cr, uid, ref("account_invoice_supplier_partial")) move_line = invoice.move_id.line_id[0] - self.write(cr, uid, [ref("payment_order_create_2")], {'entries': [(6,0,[move_line.id])]}) - self.create_payment(cr, uid, [ref("payment_order_create_2")], { - "active_model": "payment.order", "active_ids": [ref("partial_payment_order_2")], - "active_id": ref("partial_payment_order_2")}) + self.write(cr, uid, [wiz_id], {'entries': [(6, 0, [move_line.id])]}) + self.create_payment(cr, uid, [wiz_id], context=context) pay_obj = self.pool.get('payment.order') pay = pay_obj.browse(cr, uid, ref('partial_payment_order_2')) assert pay.line_ids @@ -118,29 +113,24 @@ !record {model: payment.order, id: partial_partial_payment_order_2}: mode: account_banking_payment_transfer.payment_mode0 date_prefered: 'due' -- - !record {model: payment.order.create, id: partial_payment_order_create_2}: - duedate: !eval time.strftime('%Y-%m-%d') - I search for the invoice entries to make the payment. - !python {model: payment.order.create}: | - self.search_entries(cr, uid, [ref("partial_payment_order_create_2")], { - "active_model": "payment.order", "active_ids": [ref("partial_partial_payment_order_2")], - "active_id": ref("partial_partial_payment_order_2"), }) -- - I create payment lines entries. -- - !python {model: payment.order.create}: | + context = { + "active_model": "payment.order", + "active_ids": [ref("partial_partial_payment_order_2")], + "active_id": ref("partial_partial_payment_order_2"), + } + wiz_id = self.create(cr, uid, {}, context=context) + self.search_entries(cr, uid, [wiz_id], context=context) invoice = self.pool.get('account.invoice').browse(cr, uid, ref("account_invoice_supplier_partial")) for l in invoice.move_id.line_id: if not l.debit and l.credit: move_line = l break - self.write(cr, uid, [ref("partial_payment_order_create_2")], {'entries': [(6,0,[move_line.id])]}) - self.create_payment(cr, uid, [ref("partial_payment_order_create_2")], { - "active_model": "payment.order", "active_ids": [ref("partial_partial_payment_order_2")], - "active_id": ref("partial_partial_payment_order_2")}) + self.write(cr, uid, [wiz_id], {'entries': [(6,0,[move_line.id])]}) + self.create_payment(cr, uid, [wiz_id], context=context) pay_obj = self.pool.get('payment.order') pay = pay_obj.browse(cr, uid, ref('partial_partial_payment_order_2')) assert len(pay.line_ids) == 1 @@ -198,29 +188,24 @@ !record {model: payment.order, id: partial_partial_payment_order_3}: mode: account_banking_payment_transfer.payment_mode0 date_prefered: 'due' -- - !record {model: payment.order.create, id: partial_payment_order_create_3}: - duedate: !eval time.strftime('%Y-%m-%d') - I search for the invoice entries to make the payment. - !python {model: payment.order.create}: | - self.search_entries(cr, uid, [ref("partial_payment_order_create_3")], { - "active_model": "payment.order", "active_ids": [ref("partial_partial_payment_order_3")], - "active_id": ref("partial_partial_payment_order_3"), }) -- - I create payment lines entries. -- - !python {model: payment.order.create}: | + context = { + "active_model": "payment.order", + "active_ids": [ref("partial_partial_payment_order_3")], + "active_id": ref("partial_partial_payment_order_3"), + } + wiz_id = self.create(cr, uid, {}, context=context) + self.search_entries(cr, uid, [wiz_id], context=context) invoice = self.pool.get('account.invoice').browse(cr, uid, ref("account_invoice_supplier_partial")) for l in invoice.move_id.line_id: if not l.debit and l.credit: move_line = l break - self.write(cr, uid, [ref("partial_payment_order_create_3")], {'entries': [(6,0,[move_line.id])]}) - self.create_payment(cr, uid, [ref("partial_payment_order_create_3")], { - "active_model": "payment.order", "active_ids": [ref("partial_partial_payment_order_3")], - "active_id": ref("partial_partial_payment_order_3")}) + self.write(cr, uid, [wiz_id], {'entries': [(6, 0, [move_line.id])]}) + self.create_payment(cr, uid, [wiz_id], context=context) pay_obj = self.pool.get('payment.order') pay = pay_obj.browse(cr, uid, ref('partial_partial_payment_order_3')) assert len(pay.line_ids) == 1 @@ -265,12 +250,3 @@ assert sum_credit == 0 assert inv.residual == 0 assert inv.state == 'paid' - - - - - - - - - diff --git a/account_banking_payment_transfer/test/test_payment_method.yml b/account_banking_payment_transfer/test/test_payment_method.yml index a20db04d4..4a74dd895 100644 --- a/account_banking_payment_transfer/test/test_payment_method.yml +++ b/account_banking_payment_transfer/test/test_payment_method.yml @@ -2,7 +2,7 @@ I create a supplier invoice - !record {model: account.invoice, id: account_invoice_supplier0, view: account.invoice_supplier_form}: - check_total: 450.0 + check_total: 1005.55 partner_id: base.res_partner_4 reference_type: none type: in_invoice @@ -35,34 +35,29 @@ - state == 'open' - type == 'in_invoice' - - I create a payment order on which I will select the invoice I created + I create a payment order - !record {model: payment.order, id: payment_order_0}: mode: account_banking_payment_transfer.payment_mode0 date_prefered: 'due' - - !record {model: payment.order.create, id: payment_order_create_0}: - duedate: !eval time.strftime('%Y-%m-%d') -- - I search for the invoice entries to make the payment. -- - !python {model: payment.order.create}: | - self.search_entries(cr, uid, [ref("payment_order_create_0")], { - "active_model": "payment.order", "active_ids": [ref("payment_order_0")], - "active_id": ref("payment_order_0"), }) -- - I create payment lines entries. + I run the select move line to pay wizard - !python {model: payment.order.create}: | + context = { + "active_model": "payment.order", + "active_ids": [ref("payment_order_0")], + "active_id": ref("payment_order_0"), + } + wiz_id = self.create(cr, uid, {}, context=context) + self.search_entries(cr, uid, [wiz_id], context=context) invoice = self.pool.get('account.invoice').browse(cr, uid, ref("account_invoice_supplier0")) entries = [] for move_line in invoice.move_id.line_id: if move_line.credit and not move_line.debit: entries.append((6, 0, [move_line.id])) - self.write(cr, uid, [ref("payment_order_create_0")], {'entries': entries}) - self.create_payment(cr, uid, [ref("payment_order_create_0")], { - "active_model": "payment.order", "active_ids": [ref("payment_order_0")], - "active_id": ref("payment_order_0")}) + self.write(cr, uid, [wiz_id], {'entries': entries}) + self.create_payment(cr, uid, [wiz_id], context=context) pay_obj = self.pool.get('payment.order') pay = pay_obj.browse(cr, uid, ref('payment_order_0')) for line in pay.line_ids: @@ -161,4 +156,4 @@ I check that the payment is done - !assert {model: payment.order, id: payment_order_0, severity: error, string: Payment Order should be done}: - - state == 'done' \ No newline at end of file + - state == 'done' diff --git a/account_banking_sepa_direct_debit/demo/sepa_direct_debit_demo.xml b/account_banking_sepa_direct_debit/demo/sepa_direct_debit_demo.xml index 51a24bad1..07b347f6c 100644 --- a/account_banking_sepa_direct_debit/demo/sepa_direct_debit_demo.xml +++ b/account_banking_sepa_direct_debit/demo/sepa_direct_debit_demo.xml @@ -10,6 +10,7 @@ +