Add option on journal to create one or two counterparts automatically
parent
bf03a29c49
commit
658b810f85
|
@ -61,6 +61,16 @@ class AccountJournal(models.Model):
|
||||||
help="Tic that box to automatically launch the completion "
|
help="Tic that box to automatically launch the completion "
|
||||||
"on each imported file using this journal.")
|
"on each imported file using this journal.")
|
||||||
|
|
||||||
|
create_counterpart = fields.Boolean(
|
||||||
|
string="Create Counterpart",
|
||||||
|
help="Tick that box to automatically create the move counterpart",
|
||||||
|
default=True)
|
||||||
|
|
||||||
|
split_counterpart = fields.Boolean(
|
||||||
|
string="Split Counterpart",
|
||||||
|
help="Two counterparts will be automatically created : one for "
|
||||||
|
"the refunds and one for the payments")
|
||||||
|
|
||||||
def _get_rules(self):
|
def _get_rules(self):
|
||||||
# We need to respect the sequence order
|
# We need to respect the sequence order
|
||||||
return sorted(self.rule_ids, key=attrgetter('sequence'))
|
return sorted(self.rule_ids, key=attrgetter('sequence'))
|
||||||
|
@ -88,6 +98,65 @@ class AccountJournal(models.Model):
|
||||||
return result
|
return result
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def _prepare_counterpart_line(self, move, amount, date):
|
||||||
|
if amount > 0.0:
|
||||||
|
account_id = self.default_debit_account_id.id
|
||||||
|
credit = 0.0
|
||||||
|
debit = amount
|
||||||
|
else:
|
||||||
|
account_id = self.default_credit_account_id.id
|
||||||
|
credit = -amount
|
||||||
|
debit = 0.0
|
||||||
|
counterpart_values = {
|
||||||
|
'name': _('/'),
|
||||||
|
'date_maturity': date,
|
||||||
|
'credit': credit,
|
||||||
|
'debit': debit,
|
||||||
|
'partner_id': self.partner_id.id,
|
||||||
|
'move_id': move.id,
|
||||||
|
'account_id': account_id,
|
||||||
|
'already_completed': True,
|
||||||
|
'journal_id': self.id,
|
||||||
|
'company_id': self.company_id.id,
|
||||||
|
'currency_id': self.currency_id.id,
|
||||||
|
'company_currency_id': self.company_id.currency_id.id,
|
||||||
|
'amount_residual': amount,
|
||||||
|
}
|
||||||
|
return counterpart_values
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def _create_counterpart(self, parser, move):
|
||||||
|
move_line_obj = self.env['account.move.line']
|
||||||
|
refund = 0.0
|
||||||
|
payment = 0.0
|
||||||
|
transfer_lines = []
|
||||||
|
for move_line in move.line_ids:
|
||||||
|
refund -= move_line.debit
|
||||||
|
payment += move_line.credit
|
||||||
|
if self.split_counterpart:
|
||||||
|
if refund:
|
||||||
|
transfer_lines.append(refund)
|
||||||
|
if payment:
|
||||||
|
transfer_lines.append(payment)
|
||||||
|
else:
|
||||||
|
total_amount = refund + payment
|
||||||
|
if total_amount:
|
||||||
|
transfer_lines.append(total_amount)
|
||||||
|
counterpart_date = parser.get_move_vals().get('date') or \
|
||||||
|
fields.Date.today()
|
||||||
|
transfer_line_count = len(transfer_lines)
|
||||||
|
check_move_validity = False
|
||||||
|
for amount in transfer_lines:
|
||||||
|
transfer_line_count -= 1
|
||||||
|
if not transfer_line_count:
|
||||||
|
check_move_validity = True
|
||||||
|
vals = self._prepare_counterpart_line(move, amount,
|
||||||
|
counterpart_date)
|
||||||
|
move_line_obj.with_context(
|
||||||
|
check_move_validity=check_move_validity
|
||||||
|
).create(vals)
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def _write_extra_move_lines(self, parser, move):
|
def _write_extra_move_lines(self, parser, move):
|
||||||
"""Insert extra lines after the main statement lines.
|
"""Insert extra lines after the main statement lines.
|
||||||
|
@ -104,13 +173,9 @@ class AccountJournal(models.Model):
|
||||||
"""
|
"""
|
||||||
move_line_obj = self.env['account.move.line']
|
move_line_obj = self.env['account.move.line']
|
||||||
global_commission_amount = 0
|
global_commission_amount = 0
|
||||||
total_amount = 0
|
|
||||||
for row in parser.result_row_list:
|
for row in parser.result_row_list:
|
||||||
global_commission_amount += float(
|
global_commission_amount += float(
|
||||||
row.get('commission_amount', '0.0'))
|
row.get('commission_amount', '0.0'))
|
||||||
total_amount += float(
|
|
||||||
row.get('amount', '0.0'))
|
|
||||||
total_amount += global_commission_amount
|
|
||||||
partner_id = self.partner_id.id
|
partner_id = self.partner_id.id
|
||||||
# Commission line
|
# Commission line
|
||||||
if global_commission_amount > 0.0:
|
if global_commission_amount > 0.0:
|
||||||
|
@ -135,29 +200,6 @@ class AccountJournal(models.Model):
|
||||||
check_move_validity=False
|
check_move_validity=False
|
||||||
).create(comm_values)
|
).create(comm_values)
|
||||||
|
|
||||||
# Counterpart line
|
|
||||||
if total_amount > 0.0:
|
|
||||||
account_id = self.default_debit_account_id.id
|
|
||||||
credit = 0.0
|
|
||||||
debit = total_amount
|
|
||||||
else:
|
|
||||||
account_id = self.default_credit_account_id.id
|
|
||||||
credit = -total_amount
|
|
||||||
debit = 0.0
|
|
||||||
counterpart_values = {
|
|
||||||
'name': _('/'),
|
|
||||||
'date_maturity': parser.get_move_vals().get('date') or
|
|
||||||
fields.Date.today(),
|
|
||||||
'credit': credit,
|
|
||||||
'debit': debit,
|
|
||||||
'partner_id': partner_id,
|
|
||||||
'move_id': move.id,
|
|
||||||
'account_id': account_id,
|
|
||||||
'amount_residual': total_amount,
|
|
||||||
'already_completed': True,
|
|
||||||
}
|
|
||||||
move_line_obj.create(counterpart_values)
|
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def write_logs_after_import(self, move, num_lines):
|
def write_logs_after_import(self, move, num_lines):
|
||||||
"""Write the log in the logger
|
"""Write the log in the logger
|
||||||
|
@ -262,6 +304,8 @@ class AccountJournal(models.Model):
|
||||||
# Hack to bypass ORM poor perfomance. Sob...
|
# Hack to bypass ORM poor perfomance. Sob...
|
||||||
move_line_obj._insert_lines(move_store)
|
move_line_obj._insert_lines(move_store)
|
||||||
self._write_extra_move_lines(parser, move)
|
self._write_extra_move_lines(parser, move)
|
||||||
|
if self.create_counterpart:
|
||||||
|
self._create_counterpart(parser, move)
|
||||||
attachment_data = {
|
attachment_data = {
|
||||||
'name': 'statement file',
|
'name': 'statement file',
|
||||||
'datas': file_stream,
|
'datas': file_stream,
|
||||||
|
|
|
@ -34,6 +34,7 @@ class TestCodaImport(common.TransactionCase):
|
||||||
'partner_id': self.partner.id,
|
'partner_id': self.partner.id,
|
||||||
'commission_account_id': self.account_id,
|
'commission_account_id': self.account_id,
|
||||||
'receivable_account_id': self.account_id,
|
'receivable_account_id': self.account_id,
|
||||||
|
'create_counterpart': True,
|
||||||
})
|
})
|
||||||
|
|
||||||
def _filename_to_abs_filename(self, file_name):
|
def _filename_to_abs_filename(self, file_name):
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
<field name="commission_account_id"/>
|
<field name="commission_account_id"/>
|
||||||
<field name="receivable_account_id" attrs="{'required': [('used_for_import', '=', True)]}"/>
|
<field name="receivable_account_id" attrs="{'required': [('used_for_import', '=', True)]}"/>
|
||||||
<field name="partner_id"/>
|
<field name="partner_id"/>
|
||||||
|
<field name="create_counterpart"/>
|
||||||
|
<field name="split_counterpart" attrs="{'invisible': [('create_counterpart', '=', False)]}"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<button name="%(account_move_base_import.move_importer_action)d"
|
<button name="%(account_move_base_import.move_importer_action)d"
|
||||||
|
|
Loading…
Reference in New Issue