mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
Introduce _prepare method in the wizard "Select Invoices to Pay", for easier inheritence
Don't disable the field 'communication' when using free communication - Structured => 'communication' - Free => 'communication' + 'communication2'
This commit is contained in:
@@ -40,14 +40,6 @@ class payment_line(orm.Model):
|
||||
'msg': fields.char('Message', size=255, required=False, readonly=True),
|
||||
'date_done': fields.date(
|
||||
'Date Confirmed', select=True, readonly=True),
|
||||
# Communication: required is dependend on the mode
|
||||
'communication': fields.char(
|
||||
'Communication', size=64, required=False,
|
||||
help=("Used as the message between ordering customer and current "
|
||||
"company. Depicts 'What do you want to say to the recipient"
|
||||
" about this order ?'"
|
||||
),
|
||||
),
|
||||
# Communication2: enlarge to 128
|
||||
'communication2': fields.char(
|
||||
'Communication 2', size=128,
|
||||
|
||||
@@ -17,13 +17,6 @@
|
||||
'invisible':[('state','!=','draft')]
|
||||
}</attribute>
|
||||
</xpath>
|
||||
<!-- Communication only used for 'structured' communication -->
|
||||
<xpath expr="//field[@name='line_ids']/form//field[@name='communication']"
|
||||
position="attributes">
|
||||
<attribute name="attrs">{
|
||||
'readonly': [('state', '=', 'normal')]
|
||||
}</attribute>
|
||||
</xpath>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -88,6 +88,82 @@ class payment_order_create(orm.TransientModel):
|
||||
'target': 'new',
|
||||
}
|
||||
|
||||
def _prepare_payment_line(self, cr, uid, payment, line, context=None):
|
||||
'''This function is designed to be inherited
|
||||
The resulting dict is passed to the create method of payment.line'''
|
||||
_today = fields.date.context_today(self, cr, uid, context=context)
|
||||
if payment.date_prefered == "now":
|
||||
#no payment date => immediate payment
|
||||
date_to_pay = False
|
||||
elif payment.date_prefered == 'due':
|
||||
### account_banking
|
||||
# date_to_pay = line.date_maturity
|
||||
date_to_pay = (
|
||||
line.date_maturity
|
||||
if line.date_maturity and line.date_maturity > _today
|
||||
else False)
|
||||
### end account banking
|
||||
elif payment.date_prefered == 'fixed':
|
||||
### account_banking
|
||||
# date_to_pay = payment.date_scheduled
|
||||
date_to_pay = (
|
||||
payment.date_scheduled
|
||||
if payment.date_scheduled and payment.date_scheduled > _today
|
||||
else False)
|
||||
### end account banking
|
||||
|
||||
### account_banking
|
||||
state = 'normal'
|
||||
communication = line.ref or '-'
|
||||
if line.invoice:
|
||||
if line.invoice.type in ('in_invoice', 'in_refund'):
|
||||
if line.invoice.reference_type == 'structured':
|
||||
state = 'structured'
|
||||
communication = line.invoice.reference
|
||||
else:
|
||||
if line.invoice.reference:
|
||||
communication = line.invoice.reference
|
||||
elif line.invoice.supplier_invoice_number:
|
||||
communication = line.invoice.supplier_invoice_number
|
||||
else:
|
||||
# Make sure that the communication includes the
|
||||
# customer invoice number (in the case of debit order)
|
||||
communication = line.invoice.number.replace('/', '')
|
||||
state = 'structured'
|
||||
|
||||
# support debit orders when enabled
|
||||
if (payment.payment_order_type == 'debit' and
|
||||
'amount_to_receive' in line):
|
||||
amount_currency = line.amount_to_receive
|
||||
else:
|
||||
amount_currency = line.amount_to_pay
|
||||
### end account_banking
|
||||
|
||||
### account banking
|
||||
# t = None
|
||||
# line2bank = line_obj.line2bank(cr, uid, line_ids, t, context)
|
||||
line2bank = self.pool['account.move.line'].line2bank(
|
||||
cr, uid, [line.id], payment.mode.id, context)
|
||||
### end account banking
|
||||
|
||||
res = {
|
||||
'move_line_id': line.id,
|
||||
'amount_currency': amount_currency,
|
||||
'bank_id': line2bank.get(line.id),
|
||||
'order_id': payment.id,
|
||||
'partner_id': line.partner_id and line.partner_id.id or False,
|
||||
### account banking
|
||||
# 'communication': line.ref or '/'
|
||||
'communication': communication,
|
||||
'state': state,
|
||||
### end account banking
|
||||
'date': date_to_pay,
|
||||
'currency': (line.invoice and line.invoice.currency_id.id
|
||||
or line.journal_id.currency.id
|
||||
or line.journal_id.company_id.currency_id.id),
|
||||
}
|
||||
return res
|
||||
|
||||
def create_payment(self, cr, uid, ids, context=None):
|
||||
'''
|
||||
This method is a slightly modified version of the existing method on this
|
||||
@@ -97,10 +173,6 @@ class payment_order_create(orm.TransientModel):
|
||||
references are allowed, but others as well
|
||||
- check date_to_pay is not in the past.
|
||||
'''
|
||||
|
||||
order_obj = self.pool.get('payment.order')
|
||||
line_obj = self.pool.get('account.move.line')
|
||||
payment_obj = self.pool.get('payment.line')
|
||||
if context is None:
|
||||
context = {}
|
||||
data = self.read(cr, uid, ids, [], context=context)[0]
|
||||
@@ -108,85 +180,14 @@ class payment_order_create(orm.TransientModel):
|
||||
if not line_ids:
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
payment = order_obj.browse(
|
||||
payment = self.pool['payment.order'].browse(
|
||||
cr, uid, context['active_id'], context=context)
|
||||
### account banking
|
||||
# t = None
|
||||
# line2bank = line_obj.line2bank(cr, uid, line_ids, t, context)
|
||||
line2bank = line_obj.line2bank(
|
||||
cr, uid, line_ids, payment.mode.id, context)
|
||||
_today = fields.date.context_today(self, cr, uid, context=context)
|
||||
### end account banking
|
||||
|
||||
## Finally populate the current payment with new lines:
|
||||
for line in line_obj.browse(cr, uid, line_ids, context=context):
|
||||
if payment.date_prefered == "now":
|
||||
#no payment date => immediate payment
|
||||
date_to_pay = False
|
||||
elif payment.date_prefered == 'due':
|
||||
### account_banking
|
||||
# date_to_pay = line.date_maturity
|
||||
date_to_pay = (
|
||||
line.date_maturity
|
||||
if line.date_maturity and line.date_maturity > _today
|
||||
else False)
|
||||
### end account banking
|
||||
elif payment.date_prefered == 'fixed':
|
||||
### account_banking
|
||||
# date_to_pay = payment.date_scheduled
|
||||
date_to_pay = (
|
||||
payment.date_scheduled
|
||||
if payment.date_scheduled and payment.date_scheduled > _today
|
||||
else False)
|
||||
### end account banking
|
||||
|
||||
### account_banking
|
||||
state = communication2 = False
|
||||
communication = line.ref or '/'
|
||||
if line.invoice:
|
||||
if line.invoice.type in ('in_invoice', 'in_refund'):
|
||||
if line.invoice.reference_type == 'structured':
|
||||
state = 'structured'
|
||||
communication = line.invoice.reference
|
||||
else:
|
||||
state = 'normal'
|
||||
communication2 = line.invoice.reference
|
||||
else:
|
||||
# Make sure that the communication includes the
|
||||
# customer invoice number (in the case of debit order)
|
||||
communication = line.invoice.number.replace('/', '')
|
||||
state = 'structured'
|
||||
if line.invoice.number != line.ref:
|
||||
communication2 = line.ref
|
||||
else:
|
||||
state = 'normal'
|
||||
communication2 = line.ref
|
||||
|
||||
# support debit orders when enabled
|
||||
if (payment.payment_order_type == 'debit' and
|
||||
'amount_to_receive' in line):
|
||||
amount_currency = line.amount_to_receive
|
||||
else:
|
||||
amount_currency = line.amount_to_pay
|
||||
### end account_banking
|
||||
|
||||
payment_obj.create(cr, uid, {
|
||||
'move_line_id': line.id,
|
||||
'amount_currency': amount_currency,
|
||||
'bank_id': line2bank.get(line.id),
|
||||
'order_id': payment.id,
|
||||
'partner_id': line.partner_id and line.partner_id.id or False,
|
||||
### account banking
|
||||
# 'communication': line.ref or '/'
|
||||
'communication': communication,
|
||||
'communication2': communication2,
|
||||
'state': state,
|
||||
### end account banking
|
||||
'date': date_to_pay,
|
||||
'currency': (line.invoice and line.invoice.currency_id.id
|
||||
or line.journal_id.currency.id
|
||||
or line.journal_id.company_id.currency_id.id),
|
||||
}, context=context)
|
||||
## Populate the current payment with new lines:
|
||||
for line in self.pool['account.move.line'].browse(
|
||||
cr, uid, line_ids, context=context):
|
||||
vals = self._prepare_payment_line(
|
||||
cr, uid, payment, line, context=context)
|
||||
self.pool['payment.line'].create(cr, uid, vals, context=context)
|
||||
# Force reload of payment order view as a workaround for lp:1155525
|
||||
return {'name': _('Payment Orders'),
|
||||
'context': context,
|
||||
|
||||
Reference in New Issue
Block a user