diff --git a/addons/account/account.py b/addons/account/account.py index bea2d408b13..424cbe91562 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -1988,15 +1988,19 @@ class account_model(osv.osv): move_ids = [] account_move_obj = self.pool.get('account.move') account_move_line_obj = self.pool.get('account.move.line') + pt_obj = self.pool.get('account.payment.term') + + if datas.get('date', False): + context.update({'date':datas['date']}) period_id = self.pool.get('account.period').find(cr, uid, dt=context.get('date', False)) + if not period_id: raise osv.except_osv(_('No period found !'), _('Unable to find a valid period !')) period_id = period_id[0] for model in self.browse(cr, uid, ids, context): - context.update({'date':datas['date']}) move_id = account_move_obj.create(cr, uid, { - 'ref': model.ref, + 'ref': model.name, 'period_id': period_id, 'journal_id': model.journal_id.id, 'date': context.get('date',time.strftime('%Y-%m-%d')) @@ -2014,6 +2018,20 @@ class account_model(osv.osv): 'period_id': period_id, 'analytic_account_id': analytic_account_id } + + date_maturity = time.strftime('%Y-%m-%d') + if line.date_maturity == 'partner': + if not line.partner_id: + raise osv.except_osv(_('Error !'), _("Maturity date of entry line generated by model line '%s' of model '%s' is based on partner payment term! \ + \nPlease define partner on it!"%(line.name, model.name))) + if line.partner_id.property_payment_term: + payment_term_id = line.partner_id.property_payment_term.id + pterm_list = pt_obj.compute(cr, uid, payment_term_id, value=1, date_ref=date_maturity) + if pterm_list: + pterm_list = [l[0] for l in pterm_list] + pterm_list.sort() + date_maturity = pterm_list[-1] + val.update({ 'name': line.name, 'quantity': line.quantity, @@ -2024,7 +2042,7 @@ class account_model(osv.osv): 'ref': line.ref, 'partner_id': line.partner_id.id, 'date': context.get('date',time.strftime('%Y-%m-%d')), - 'date_maturity': time.strftime('%Y-%m-%d') + 'date_maturity': date_maturity }) c = context.copy() c.update({'journal_id': model.journal_id.id,'period_id': period_id}) @@ -2143,16 +2161,18 @@ class account_subscription_line(osv.osv): def move_create(self, cr, uid, ids, context=None): tocheck = {} + all_moves = [] for line in self.browse(cr, uid, ids, context=context): datas = { 'date': line.date, } - ids = self.pool.get('account.model').generate(cr, uid, [line.subscription_id.model_id.id], datas, context) + move_ids = self.pool.get('account.model').generate(cr, uid, [line.subscription_id.model_id.id], datas, context) tocheck[line.subscription_id.id] = True - self.write(cr, uid, [line.id], {'move_id':ids[0]}) + self.write(cr, uid, [line.id], {'move_id':move_ids[0]}) + all_moves.extend(move_ids) if tocheck: self.pool.get('account.subscription').check(cr, uid, tocheck.keys(), context) - return ids + return all_moves _rec_name = 'date' account_subscription_line() diff --git a/addons/account/wizard/account_subscription_generate.py b/addons/account/wizard/account_subscription_generate.py index fbc051bff7e..55cfeaf9ca3 100644 --- a/addons/account/wizard/account_subscription_generate.py +++ b/addons/account/wizard/account_subscription_generate.py @@ -39,8 +39,8 @@ class account_subscription_generate(osv.osv_memory): moves_created=[] for data in self.read(cr, uid, ids, context=context): cr.execute('select id from account_subscription_line where date<%s and move_id is null', (data['date'],)) - ids = map(lambda x: x[0], cr.fetchall()) - moves = self.pool.get('account.subscription.line').move_create(cr, uid, ids, context=context) + line_ids = map(lambda x: x[0], cr.fetchall()) + moves = self.pool.get('account.subscription.line').move_create(cr, uid, line_ids, context=context) moves_created.extend(moves) result = mod_obj._get_id(cr, uid, 'account', 'action_move_line_form') id = mod_obj.read(cr, uid, [result], ['res_id'], context=context)[0]['res_id'] diff --git a/addons/account/wizard/account_use_model.py b/addons/account/wizard/account_use_model.py index 81f2ee89fb5..6cadb4b1c3e 100644 --- a/addons/account/wizard/account_use_model.py +++ b/addons/account/wizard/account_use_model.py @@ -31,12 +31,27 @@ class account_use_model(osv.osv_memory): _columns = { 'model': fields.many2many('account.model', 'account_use_model_relation', 'account_id', 'model_id', 'Account Model'), } + + def view_init(self, cr , uid , fields_list, context=None): + account_model_obj = self.pool.get('account.model') + if context is None: + context = {} + if context.get('active_ids',False): + data_model = account_model_obj.browse(cr, uid, context['active_ids']) + for model in data_model: + for line in model.lines_id: + if line.date_maturity == 'partner': + if not line.partner_id: + raise osv.except_osv(_('Error !'), _("Maturity date of entry line generated by model line '%s' is based on partner payment term! \ + \nPlease define partner on it!"%(line.name))) + pass def create_entries(self, cr, uid, ids, context=None): account_model_obj = self.pool.get('account.model') account_period_obj = self.pool.get('account.period') account_move_obj = self.pool.get('account.move') account_move_line_obj = self.pool.get('account.move.line') + pt_obj = self.pool.get('account.payment.term') mod_obj = self.pool.get('ir.model.data') if context is None: context = {} @@ -49,44 +64,52 @@ class account_use_model(osv.osv_memory): data_model = account_model_obj.browse(cr, uid, context['active_ids']) move_ids = [] for model in data_model: - period_id = account_period_obj.find(cr, uid, context=context) - if not period_id: - raise osv.except_osv(_('No period found !'), _('Unable to find a valid period !')) - period_id = period_id[0] - move_id = account_move_obj.create(cr, uid, { - 'ref': model.ref, - 'period_id': period_id, + period_id = account_period_obj.find(cr, uid, context=context) + if not period_id: + raise osv.except_osv(_('No period found !'), _('Unable to find a valid period !')) + period_id = period_id[0] + move_id = account_move_obj.create(cr, uid, { + 'ref': model.ref, + 'period_id': period_id, + 'journal_id': model.journal_id.id, + }) + move_ids.append(move_id) + for line in model.lines_id: + analytic_account_id = False + if line.analytic_account_id: + if not model.journal_id.analytic_journal_id: + raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (model.journal_id.name,)) + analytic_account_id = line.analytic_account_id.id + val = { + 'move_id': move_id, 'journal_id': model.journal_id.id, + 'period_id': period_id, + 'analytic_account_id': analytic_account_id + } + date_maturity = time.strftime('%Y-%m-%d') + if line.date_maturity == 'partner' and line.partner_id and line.partner_id.property_payment_term: + payment_term_id = line.partner_id.property_payment_term.id + pterm_list = pt_obj.compute(cr, uid, payment_term_id, value=1, date_ref=date_maturity) + if pterm_list: + pterm_list = [l[0] for l in pterm_list] + pterm_list.sort() + date_maturity = pterm_list[-1] + val.update({ + 'name': line.name, + 'quantity': line.quantity, + 'debit': line.debit, + 'credit': line.credit, + 'account_id': line.account_id.id, + 'move_id': move_id, + 'ref': line.ref, + 'partner_id': line.partner_id.id, + 'date': time.strftime('%Y-%m-%d'), + 'date_maturity': date_maturity }) - move_ids.append(move_id) - for line in model.lines_id: - analytic_account_id = False - if line.analytic_account_id: - if not model.journal_id.analytic_journal_id: - raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (model.journal_id.name,)) - analytic_account_id = line.analytic_account_id.id - val = { - 'move_id': move_id, - 'journal_id': model.journal_id.id, - 'period_id': period_id, - 'analytic_account_id': analytic_account_id - } - val.update({ - 'name': line.name, - 'quantity': line.quantity, - 'debit': line.debit, - 'credit': line.credit, - 'account_id': line.account_id.id, - 'move_id': move_id, - 'ref': line.ref, - 'partner_id': line.partner_id.id, - 'date': time.strftime('%Y-%m-%d'), - 'date_maturity': time.strftime('%Y-%m-%d') - }) - c = context.copy() - c.update({'journal_id': model.journal_id.id,'period_id': period_id}) - id_line = account_move_line_obj.create(cr, uid, val, context=c) - + c = context.copy() + c.update({'journal_id': model.journal_id.id,'period_id': period_id}) + id_line = account_move_line_obj.create(cr, uid, val, context=c) + context.update({'move_ids':move_ids}) model_data_ids = mod_obj.search(cr, uid,[('model','=','ir.ui.view'),('name','=','view_move_form')], context=context) resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']