2014-07-04 18:42:47 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
2017-08-23 03:48:14 +02:00
|
|
|
# Copyright 2015-2017 See manifest
|
|
|
|
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
|
2014-07-04 18:42:47 +02:00
|
|
|
|
2017-08-23 03:48:14 +02:00
|
|
|
from odoo import models, fields, api
|
2014-07-04 18:42:47 +02:00
|
|
|
import time
|
|
|
|
|
|
|
|
|
2014-12-04 15:04:41 +01:00
|
|
|
class WizardSelectMoveTemplate(models.TransientModel):
|
2014-07-04 18:42:47 +02:00
|
|
|
_name = "wizard.select.move.template"
|
|
|
|
|
2017-08-23 03:48:14 +02:00
|
|
|
template_id = fields.Many2one('account.move.template', required=True)
|
|
|
|
partner_id = fields.Many2one('res.partner', 'Partner')
|
2014-12-04 15:04:41 +01:00
|
|
|
line_ids = fields.One2many(
|
2017-08-23 03:48:14 +02:00
|
|
|
'wizard.select.move.template.line', 'template_id')
|
2014-12-04 15:04:41 +01:00
|
|
|
state = fields.Selection(
|
2017-08-23 03:48:14 +02:00
|
|
|
[('template_selected', 'Template selected')], 'State')
|
2014-12-09 17:50:23 +01:00
|
|
|
|
2014-12-04 15:04:41 +01:00
|
|
|
@api.multi
|
|
|
|
def load_lines(self):
|
2014-12-09 14:33:50 +01:00
|
|
|
self.ensure_one()
|
2017-08-23 03:48:14 +02:00
|
|
|
lines = self.template_id.template_line_ids
|
|
|
|
for line in lines.filtered(lambda l: l.type == 'input'):
|
|
|
|
self.env['wizard.select.move.template.line'].create({
|
|
|
|
'template_id': self.id,
|
|
|
|
'sequence': line.sequence,
|
|
|
|
'name': line.name,
|
|
|
|
'amount': 0.0,
|
|
|
|
'account_id': line.account_id.id,
|
|
|
|
'move_line_type': line.move_line_type,
|
|
|
|
})
|
2014-12-09 14:33:50 +01:00
|
|
|
if not self.line_ids:
|
|
|
|
return self.load_template()
|
2014-12-09 17:50:23 +01:00
|
|
|
self.state = 'template_selected'
|
2017-08-23 03:48:14 +02:00
|
|
|
view_rec = self.env.ref('account_move_template.wizard_select_template')
|
2014-12-09 14:33:50 +01:00
|
|
|
return {
|
|
|
|
'view_type': 'form',
|
2017-08-23 03:48:14 +02:00
|
|
|
'view_id': [view_rec.id],
|
2014-12-09 14:33:50 +01:00
|
|
|
'view_mode': 'form',
|
|
|
|
'res_model': 'wizard.select.move.template',
|
|
|
|
'res_id': self.id,
|
|
|
|
'type': 'ir.actions.act_window',
|
|
|
|
'target': 'new',
|
|
|
|
'context': self.env.context,
|
|
|
|
}
|
2014-07-04 18:42:47 +02:00
|
|
|
|
2014-12-04 15:04:41 +01:00
|
|
|
@api.multi
|
|
|
|
def load_template(self):
|
2014-12-09 14:33:50 +01:00
|
|
|
self.ensure_one()
|
|
|
|
input_lines = {}
|
|
|
|
for template_line in self.line_ids:
|
|
|
|
input_lines[template_line.sequence] = template_line.amount
|
2017-08-23 03:48:14 +02:00
|
|
|
amounts = self.template_id.compute_lines(input_lines)
|
|
|
|
name = self.template_id.name
|
|
|
|
partner = self.partner_id.id
|
|
|
|
moves = self.env['account.move']
|
|
|
|
for journal in self.template_id.template_line_ids.mapped('journal_id'):
|
|
|
|
lines = []
|
|
|
|
move = self._create_move(name, journal.id, partner)
|
|
|
|
moves = moves + move
|
|
|
|
for line in self.template_id.template_line_ids.filtered(
|
|
|
|
lambda j: j.journal_id == journal):
|
|
|
|
lines.append((0, 0,
|
|
|
|
self._prepare_line(line, amounts, partner)))
|
|
|
|
move.write({'line_ids': lines})
|
2014-12-09 14:33:50 +01:00
|
|
|
return {
|
2017-08-23 03:48:14 +02:00
|
|
|
'domain': [('id', 'in', moves.ids)],
|
|
|
|
'name': 'Entries from template: %s' % name,
|
2014-12-09 14:33:50 +01:00
|
|
|
'view_type': 'form',
|
|
|
|
'view_mode': 'tree,form',
|
|
|
|
'res_model': 'account.move',
|
|
|
|
'type': 'ir.actions.act_window',
|
|
|
|
'target': 'current',
|
|
|
|
}
|
2014-07-04 18:42:47 +02:00
|
|
|
|
2014-12-04 15:04:41 +01:00
|
|
|
@api.model
|
2017-08-23 03:48:14 +02:00
|
|
|
def _create_move(self, ref, journal_id, partner_id):
|
|
|
|
return self.env['account.move'].create({
|
2014-07-04 18:42:47 +02:00
|
|
|
'ref': ref,
|
|
|
|
'journal_id': journal_id,
|
|
|
|
'partner_id': partner_id,
|
|
|
|
})
|
|
|
|
|
2014-12-06 23:20:35 +01:00
|
|
|
@api.model
|
2017-08-23 03:48:14 +02:00
|
|
|
def _prepare_line(self, line, amounts, partner_id):
|
|
|
|
debit = line.move_line_type == 'dr'
|
|
|
|
values = {
|
2014-07-04 18:42:47 +02:00
|
|
|
'name': line.name,
|
|
|
|
'journal_id': line.journal_id.id,
|
2017-08-23 03:48:14 +02:00
|
|
|
'analytic_account_id': line.analytic_account_id.id,
|
2014-07-04 18:42:47 +02:00
|
|
|
'account_id': line.account_id.id,
|
|
|
|
'date': time.strftime('%Y-%m-%d'),
|
2017-08-23 03:48:14 +02:00
|
|
|
'credit': not debit and amounts[line.sequence] or 0.0,
|
|
|
|
'debit': debit and amounts[line.sequence] or 0.0,
|
2014-07-04 18:42:47 +02:00
|
|
|
'partner_id': partner_id,
|
|
|
|
}
|
2017-08-23 03:48:14 +02:00
|
|
|
return values
|
2014-07-04 18:42:47 +02:00
|
|
|
|
|
|
|
|
2014-12-04 15:04:41 +01:00
|
|
|
class WizardSelectMoveTemplateLine(models.TransientModel):
|
2014-07-04 18:42:47 +02:00
|
|
|
_description = 'Template Lines'
|
|
|
|
_name = "wizard.select.move.template.line"
|
2014-12-04 15:04:41 +01:00
|
|
|
|
|
|
|
template_id = fields.Many2one(
|
2017-08-23 03:48:14 +02:00
|
|
|
'wizard.select.move.template')
|
|
|
|
sequence = fields.Integer(required=True)
|
2014-12-04 15:06:50 +01:00
|
|
|
name = fields.Char(required=True, readonly=True)
|
2014-12-04 15:04:41 +01:00
|
|
|
account_id = fields.Many2one(
|
2017-08-23 03:48:14 +02:00
|
|
|
'account.account', required=True, readonly=True)
|
2014-12-04 15:04:41 +01:00
|
|
|
move_line_type = fields.Selection(
|
2017-08-23 03:48:14 +02:00
|
|
|
[('cr', 'Credit'), ('dr', 'Debit')], required=True, readonly=True)
|
2014-12-04 15:04:41 +01:00
|
|
|
amount = fields.Float(required=True)
|