diff --git a/addons/account/account.py b/addons/account/account.py index 94086e86742..61c0a77be3b 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -924,15 +924,21 @@ class account_move_reconcile(osv.osv): {'reconcile_id': rec.id } ) return True + def name_get(self, cr, uid, ids, context=None): - result = {} + if not len(ids): + return [] + result = [] for r in self.browse(cr, uid, ids, context): total = reduce(lambda y,t: (t.debit or 0.0) - (t.credit or 0.0) + y, r.line_partial_ids, 0.0) if total: - result[r.id] = '%s (%.2f)' % (r.name, total) + name = '%s (%.2f)' % (r.name, total) + result.append((r.id,name)) else: - result[r.id] = r.name + result.append((r.id,r.name)) return result + + account_move_reconcile() #---------------------------------------------------------- @@ -1510,7 +1516,7 @@ class account_config_wizard(osv.osv_memory): } def install_account_chart(self, cr, uid,ids, context=None): - for res in self.read(cr,uid,ids): + for res in self.read(cr,uid,ids): id = res['charts'] def install(id): mod_obj = self.pool.get('ir.module.module') @@ -1558,7 +1564,7 @@ class account_config_wizard(osv.osv_memory): 'target':'new', } - + account_config_wizard() @@ -2036,8 +2042,8 @@ class wizard_multi_charts_accounts(osv.osv_memory): 'res_model': 'ir.module.module.configuration.wizard', 'type': 'ir.actions.act_window', 'target':'new', - } - + } + wizard_multi_charts_accounts() diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 12f3682cf56..e55b6d54fee 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -481,7 +481,7 @@ class account_move_line(osv.osv): self_debit = -writeoff # If comment exist in context, take it - if context['comment']: + if 'comment' in context and context['comment']: libelle=context['comment'] else: libelle='Write-Off' @@ -629,7 +629,7 @@ class account_move_line(osv.osv): if raise_ex: raise osv.except_osv(_('Wrong Accounting Entry!'), _('Both Credit and Debit cannot be zero!')) - + account_obj = self.pool.get('account.account') if ('account_id' in vals) and not account_obj.read(cr, uid, vals['account_id'], ['active'])['active']: raise osv.except_osv(_('Bad account!'), _('You can not use an inactive account!')) if update_check: diff --git a/addons/account_budget/crossovered_budget.py b/addons/account_budget/crossovered_budget.py index 420926bbaf4..c5a81a2398b 100644 --- a/addons/account_budget/crossovered_budget.py +++ b/addons/account_budget/crossovered_budget.py @@ -208,51 +208,6 @@ class crossovered_budget_lines(osv.osv): } crossovered_budget_lines() - - -#class account_budget_post(osv.osv): #old code -# _name = 'account.budget.post' -# _inherit = 'account.budget.post' -# _columns = { -# 'crossovered_budget_line': fields.one2many('crossovered.budget.lines', 'general_budget_id', 'Budget Lines'), -# } -#account_budget_post() -# -#class account_budget_post_dotation(osv.osv): -# _name = 'account.budget.post.dotation' -# _inherit = 'account.budget.post.dotation' -# -# def _tot_planned(self, cr, uid, ids,name,args,context): -# res={} -# for line in self.browse(cr, uid, ids): -# if line.period_id: -# obj_period=self.pool.get('account.period').browse(cr, uid,line.period_id.id) -# -# total_days=strToDate(obj_period.date_stop) - strToDate(obj_period.date_start) -# budget_id=line.post_id and line.post_id.id or False -# query="select id from crossovered_budget_lines where general_budget_id= '"+ str(budget_id) + "' AND (date_from >='" +obj_period.date_start +"' and date_from <= '"+obj_period.date_stop + "') OR (date_to >='" +obj_period.date_start +"' and date_to <= '"+obj_period.date_stop + "') OR (date_from <'" +obj_period.date_start +"' and date_to > '"+obj_period.date_stop + "')" -# cr.execute(query) -# res1=cr.fetchall() -# -# tot_planned=0.00 -# for record in res1: -# obj_lines = self.pool.get('crossovered.budget.lines').browse(cr, uid,record[0]) -# count_days = min(strToDate(obj_period.date_stop),strToDate(obj_lines.date_to)) - max(strToDate(obj_period.date_start), strToDate(obj_lines.date_from)) -# days_in_period = count_days.days +1 -# count_days = strToDate(obj_lines.date_to) - strToDate(obj_lines.date_from) -# total_days_of_rec = count_days.days +1 -# tot_planned += obj_lines.planned_amount/total_days_of_rec* days_in_period -# res[line.id]=tot_planned -# else: -# res[line.id]=0.00 -# return res -# -# _columns = { -# 'tot_planned':fields.function(_tot_planned,method=True, string='Total Planned Amount',type='float',store=True), -# } -# -#account_budget_post_dotation() - class account_analytic_account(osv.osv): _name = 'account.analytic.account' _inherit = 'account.analytic.account' @@ -266,7 +221,7 @@ account_analytic_account() #-------------------------------------------------------------- # moved from account/project/project.py # --------------------------------------------------------- -# Budgets +# Budgets. # --------------------------------------------------------- #class account_analytic_budget_post(osv.osv): diff --git a/addons/process/process.py b/addons/process/process.py index 1a0024af4b1..e095ad041ae 100644 --- a/addons/process/process.py +++ b/addons/process/process.py @@ -204,7 +204,7 @@ class process_process(osv.osv): update_relatives(r, _id, _model) for nid, node in nodes.items(): - if node['active'] or node['model'] == res_model: + if not node['gray'] and (node['active'] or node['model'] == res_model): update_relatives(nid, res_id, res_model) break @@ -231,6 +231,44 @@ class process_process(osv.osv): return dict(title=title, perm=perm, notes=notes, nodes=nodes, transitions=transitions) + def copy(self, cr, uid, id, default=None, context={}): + """ Deep copy the entire process. + """ + + if not default: + default = {} + + pool = pooler.get_pool(cr.dbname) + process = pool.get('process.process').browse(cr, uid, [id], context)[0] + + nodes = {} + transitions = {} + + # first copy all nodes and and map the new nodes with original for later use in transitions + for node in process.node_ids: + for t in node.transition_in: + tr = transitions.setdefault(t.id, {}) + tr['target'] = node.id + for t in node.transition_out: + tr = transitions.setdefault(t.id, {}) + tr['source'] = node.id + nodes[node.id] = pool.get('process.node').copy(cr, uid, node.id, context=context) + + # then copy transitions with new nodes + for tid, tr in transitions.items(): + vals = { + 'source_node_id': nodes[tr['source']], + 'target_node_id': nodes[tr['target']] + } + tr = pool.get('process.transition').copy(cr, uid, tid, default=vals, context=context) + + # and finally copy the process itself with new nodes + default.update({ + 'active': True, + 'node_ids': [(6, 0, nodes.values())] + }) + return super(process_process, self).copy(cr, uid, id, default, context) + process_process() class process_node(osv.osv): @@ -256,6 +294,16 @@ class process_node(osv.osv): 'model_states': lambda *args: False, 'flow_start': lambda *args: False, } + + def copy(self, cr, uid, id, default=None, context={}): + if not default: + default = {} + default.update({ + 'transition_in': [], + 'transition_out': [] + }) + return super(process_node, self).copy(cr, uid, id, default, context) + process_node() class process_node_condition(osv.osv):