[DEL] account_analytic_plans: deprecated module

Reason: complete rewrite of the Sale module.

Responsible: fp, dbo, nim
This commit is contained in:
Nicolas Martinelli
2015-08-27 18:10:18 +02:00
parent 5cb2943cca
commit 233142b7cb
19 changed files with 0 additions and 1768 deletions
@@ -1,5 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import account_analytic_plans
import wizard
import report
@@ -1,63 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Multiple Analytic Plans',
'version': '1.0',
'category': 'Accounting & Finance',
'description': """
This module allows to use several analytic plans according to the general journal.
==================================================================================
Here multiple analytic lines are created when the invoice or the entries
are confirmed.
For example, you can define the following analytic structure:
-------------------------------------------------------------
* **Projects**
* Project 1
+ SubProj 1.1
+ SubProj 1.2
* Project 2
* **Salesman**
* Eric
* Fabien
Here, we have two plans: Projects and Salesman. An invoice line must be able to write analytic entries in the 2 plans: SubProj 1.1 and Fabien. The amount can also be split.
The following example is for an invoice that touches the two subprojects and assigned to one salesman:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Plan1:**
* SubProject 1.1 : 50%
* SubProject 1.2 : 50%
**Plan2:**
Eric: 100%
So when this line of invoice will be confirmed, it will generate 3 analytic lines,for one account entry.
The analytic plan validates the minimum and maximum percentage at the time of creation of distribution models.
""",
'website': 'https://www.odoo.com/page/accounting',
'depends': ['account', 'account_analytic_default'],
'data': [
'security/account_analytic_plan_security.xml',
'security/ir.model.access.csv',
'account_analytic_plans_view.xml',
'account_analytic_plans_report.xml',
'wizard/analytic_plan_create_model_view.xml',
'wizard/account_crossovered_analytic_view.xml',
'views/report_crossoveredanalyticplans.xml',
'views/account_analytic_plans.xml',
],
'demo': [],
'test': ['test/acount_analytic_plans_report.yml'],
'installable': True,
'auto_install': False,
}
@@ -1,459 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import time
from lxml import etree
from openerp.osv import fields, osv
from openerp import tools, api
from openerp.tools.translate import _
from openerp.exceptions import UserError
class one2many_mod2(fields.one2many):
def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
if context is None:
context = {}
res = {}
for id in ids:
res[id] = []
ids2 = None
if 'journal_id' in context:
journal = obj.pool.get('account.journal').browse(cr, user, context['journal_id'], context=context)
pnum = int(name[7]) -1
plan = journal.plan_id
if plan and len(plan.plan_ids) > pnum:
acc_id = plan.plan_ids[pnum].root_analytic_id.id
ids2 = obj.pool[self._obj].search(cr, user, [(self._fields_id,'in',ids),('analytic_account_id','child_of',[acc_id])], limit=self._limit)
if ids2 is None:
ids2 = obj.pool[self._obj].search(cr, user, [(self._fields_id,'in',ids)], limit=self._limit)
for r in obj.pool[self._obj].read(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'):
key = r[self._fields_id]
if isinstance(key, tuple):
# Read return a tuple in the case where the field is a many2one
# but we want to get the id of this field.
key = key[0]
res[key].append( r['id'] )
return res
class account_analytic_line(osv.osv):
_inherit = 'account.analytic.line'
_description = 'Analytic Line'
def _get_amount(self, cr, uid, ids, name, args, context=None):
res = {}
for id in ids:
res.setdefault(id, 0.0)
for line in self.browse(cr, uid, ids, context=context):
amount = line.move_id and line.move_id.amount_currency * (line.percentage / 100) or 0.0
res[line.id] = amount
return res
_columns = {
'amount_currency': fields.function(_get_amount, string="Amount Currency", type="float", store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True),
'percentage': fields.float('Percentage')
}
class account_analytic_plan(osv.osv):
_name = "account.analytic.plan"
_description = "Analytic Plan"
_columns = {
'name': fields.char('Analytic Plan', required=True, select=True),
'plan_ids': fields.one2many('account.analytic.plan.line', 'plan_id', 'Analytic Plans', copy=True),
}
class account_analytic_plan_line(osv.osv):
_name = "account.analytic.plan.line"
_description = "Analytic Plan Line"
_order = "sequence, id"
_columns = {
'plan_id': fields.many2one('account.analytic.plan','Analytic Plan',required=True),
'name': fields.char('Axis Name', required=True, select=True),
'sequence': fields.integer('Sequence'),
'root_analytic_id': fields.many2one('account.analytic.account', 'Root Account', help="Root account of this plan.", required=False),
'min_required': fields.float('Minimum Allowed (%)'),
'max_required': fields.float('Maximum Allowed (%)'),
}
_defaults = {
'min_required': 100.0,
'max_required': 100.0,
}
class account_analytic_plan_instance(osv.osv):
_name = "account.analytic.plan.instance"
_description = "Analytic Plan Instance"
_columns = {
'name': fields.char('Analytic Distribution'),
'code': fields.char('Distribution Code', size=16),
'journal_id': fields.many2one('account.analytic.journal', 'Analytic Journal' ),
'account_ids': fields.one2many('account.analytic.plan.instance.line', 'plan_id', 'Account Id', copy=True),
'account1_ids': one2many_mod2('account.analytic.plan.instance.line', 'plan_id', 'Account1 Id'),
'account2_ids': one2many_mod2('account.analytic.plan.instance.line', 'plan_id', 'Account2 Id'),
'account3_ids': one2many_mod2('account.analytic.plan.instance.line', 'plan_id', 'Account3 Id'),
'account4_ids': one2many_mod2('account.analytic.plan.instance.line', 'plan_id', 'Account4 Id'),
'account5_ids': one2many_mod2('account.analytic.plan.instance.line', 'plan_id', 'Account5 Id'),
'account6_ids': one2many_mod2('account.analytic.plan.instance.line', 'plan_id', 'Account6 Id'),
'plan_id': fields.many2one('account.analytic.plan', "Model's Plan"),
}
def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
if context is None:
context = {}
journal_obj = self.pool.get('account.journal')
if context.get('journal_id', False):
journal = journal_obj.browse(cr, user, [context['journal_id']], context=context)[0]
analytic_journal = journal.analytic_journal_id and journal.analytic_journal_id.id or False
args.append('|')
args.append(('journal_id', '=', analytic_journal))
args.append(('journal_id', '=', False))
res = super(account_analytic_plan_instance, self).search(cr, user, args, offset=offset, limit=limit, order=order,
context=context, count=count)
return res
def _default_journal(self, cr, uid, context=None):
if context is None:
context = {}
journal_obj = self.pool.get('account.journal')
if context.has_key('journal_id') and context['journal_id']:
journal = journal_obj.browse(cr, uid, context['journal_id'], context=context)
if journal.analytic_journal_id:
return journal.analytic_journal_id.id
return False
_defaults = {
'plan_id': False,
'journal_id': _default_journal,
}
def name_get(self, cr, uid, ids, context=None):
res = []
for inst in self.browse(cr, uid, ids, context=context):
name = inst.name or '/'
if name and inst.code:
name=name+' ('+inst.code+')'
res.append((inst.id, name))
return res
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
args = args or []
if name:
ids = self.search(cr, uid, [('code', '=', name)] + args, limit=limit, context=context or {})
if not ids:
ids = self.search(cr, uid, [('name', operator, name)] + args, limit=limit, context=context or {})
else:
ids = self.search(cr, uid, args, limit=limit, context=context or {})
return self.name_get(cr, uid, ids, context or {})
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if context is None:
context = {}
wiz_id = self.pool.get('ir.actions.act_window').search(cr, uid, [("name","=","analytic.plan.create.model.action")], context=context)
res = super(account_analytic_plan_instance,self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
journal_obj = self.pool.get('account.journal')
analytic_plan_obj = self.pool.get('account.analytic.plan')
if (res['type']=='form'):
plan_id = False
if context.get('journal_id', False):
plan_id = journal_obj.browse(cr, uid, int(context['journal_id']), context=context).plan_id
elif context.get('plan_id', False):
plan_id = analytic_plan_obj.browse(cr, uid, int(context['plan_id']), context=context)
if plan_id:
i=1
res['arch'] = """<form string="%s">
<field name="name"/>
<field name="code"/>
<field name="journal_id"/>
<button name="%d" string="Save This Distribution as a Model" type="action" colspan="2"/>
"""% (tools.to_xml(plan_id.name), wiz_id[0])
for line in plan_id.plan_ids:
res['arch']+="""
<field name="account%d_ids" string="%s" nolabel="1" colspan="4">
<tree string="%s" editable="bottom">
<field name="rate"/>
<field name="analytic_account_id" domain="[('parent_id','child_of',[%d])]" groups="analytic.group_analytic_accounting"/>
</tree>
</field>
<newline/>"""%(i,tools.to_xml(line.name),tools.to_xml(line.name),line.root_analytic_id and line.root_analytic_id.id or 0)
i+=1
res['arch'] += "</form>"
doc = etree.fromstring(res['arch'].encode('utf8'))
xarch, xfields = self._view_look_dom_arch(cr, uid, doc, view_id, context=context)
res['arch'] = xarch
res['fields'] = xfields
return res
else:
return res
def create(self, cr, uid, vals, context=None):
journal_obj = self.pool.get('account.journal')
ana_plan_instance_obj = self.pool.get('account.analytic.plan.instance')
acct_anal_acct = self.pool.get('account.analytic.account')
acct_anal_plan_line_obj = self.pool.get('account.analytic.plan.line')
if context and context.get('journal_id'):
journal = journal_obj.browse(cr, uid, context['journal_id'], context=context)
pids = ana_plan_instance_obj.search(cr, uid, [('name','=',vals['name']), ('code','=',vals['code']), ('plan_id','<>',False)], context=context)
if pids:
raise UserError(_('A model with this name and code already exists.'))
res = acct_anal_plan_line_obj.search(cr, uid, [('plan_id','=',journal.plan_id.id)], context=context)
for i in res:
total_per_plan = 0
item = acct_anal_plan_line_obj.browse(cr, uid, i, context=context)
temp_list = ['account1_ids','account2_ids','account3_ids','account4_ids','account5_ids','account6_ids']
for l in temp_list:
if vals.has_key(l):
for tempo in vals[l]:
if acct_anal_acct.search(cr, uid, [('parent_id', 'child_of', [item.root_analytic_id.id]), ('id', '=', tempo[2]['analytic_account_id'])], context=context):
total_per_plan += tempo[2]['rate']
if total_per_plan < item.min_required or total_per_plan > item.max_required:
raise UserError(_('The total should be between %s and %s.') % (str(item.min_required), str(item.max_required)))
return super(account_analytic_plan_instance, self).create(cr, uid, vals, context=context)
def write(self, cr, uid, ids, vals, context=None):
if context is None:
context = {}
this = self.browse(cr, uid, ids[0], context=context)
invoice_line_obj = self.pool.get('account.invoice.line')
if this.plan_id and not vals.has_key('plan_id'):
#this instance is a model, so we have to create a new plan instance instead of modifying it
#copy the existing model
temp_id = self.copy(cr, uid, this.id, None, context=context)
#get the list of the invoice line that were linked to the model
lists = invoice_line_obj.search(cr, uid, [('analytics_id','=',this.id)], context=context)
#make them link to the copy
invoice_line_obj.write(cr, uid, lists, {'analytics_id':temp_id}, context=context)
#and finally modify the old model to be not a model anymore
vals['plan_id'] = False
if not vals.has_key('name'):
vals['name'] = this.name and (str(this.name)+'*') or "*"
if not vals.has_key('code'):
vals['code'] = this.code and (str(this.code)+'*') or "*"
return super(account_analytic_plan_instance, self).write(cr, uid, ids, vals, context=context)
class account_analytic_plan_instance_line(osv.osv):
_name = "account.analytic.plan.instance.line"
_description = "Analytic Instance Line"
_rec_name = "analytic_account_id"
_columns = {
'plan_id': fields.many2one('account.analytic.plan.instance', 'Plan Id'),
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', required=True, domain=[('type','<>','view')]),
'rate': fields.float('Rate (%)', required=True),
}
_defaults = {
'rate': 100.0
}
def name_get(self, cr, uid, ids, context=None):
if not ids:
return []
reads = self.read(cr, uid, ids, ['analytic_account_id'], context=context)
res = []
for record in reads:
res.append((record['id'], record['analytic_account_id']))
return res
class account_journal(osv.osv):
_inherit = "account.journal"
_name = "account.journal"
_columns = {
'plan_id': fields.many2one('account.analytic.plan', 'Analytic Plans'),
}
class account_invoice_line(osv.osv):
_inherit = "account.invoice.line"
_name = "account.invoice.line"
_columns = {
'analytics_id': fields.many2one('account.analytic.plan.instance', 'Analytic Distribution'),
}
def create(self, cr, uid, vals, context=None):
if 'analytics_id' in vals and isinstance(vals['analytics_id'], tuple):
vals['analytics_id'] = vals['analytics_id'][0]
return super(account_invoice_line, self).create(cr, uid, vals, context=context)
def move_line_get_item(self, cr, uid, line, context=None):
res = super(account_invoice_line, self).move_line_get_item(cr, uid, line, context=context)
res ['analytics_id'] = line.analytics_id and line.analytics_id.id or False
return res
def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, company_id=None, date_invoice=None, context=None):
res_prod = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit, currency_id, company_id=company_id, date_invoice=date_invoice, context=context)
rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context=context)
if rec and rec.analytics_id:
res_prod['value'].update({'analytics_id': rec.analytics_id.id})
return res_prod
class account_move_line(osv.osv):
_inherit = "account.move.line"
_name = "account.move.line"
_columns = {
'analytics_id':fields.many2one('account.analytic.plan.instance', 'Analytic Distribution'),
}
def _default_get_move_form_hook(self, cursor, user, data):
data = super(account_move_line, self)._default_get_move_form_hook(cursor, user, data)
if data.has_key('analytics_id'):
del(data['analytics_id'])
return data
def create_analytic_lines(self, cr, uid, ids, context=None):
if context is None:
context = {}
super(account_move_line, self).create_analytic_lines(cr, uid, ids, context=context)
analytic_line_obj = self.pool.get('account.analytic.line')
for line in self.browse(cr, uid, ids, context=context):
if line.analytics_id:
if not line.journal_id.analytic_journal_id:
raise UserError(_("You have to define an analytic journal on the '%s' journal.") % (line.journal_id.name,))
toremove = analytic_line_obj.search(cr, uid, [('move_id','=',line.id)], context=context)
if toremove:
analytic_line_obj.unlink(cr, uid, toremove, context=context)
for line2 in line.analytics_id.account_ids:
val = (line.credit or 0.0) - (line.debit or 0.0)
amt=val * (line2.rate/100)
al_vals={
'name': line.name,
'date': line.date,
'account_id': line2.analytic_account_id.id,
'unit_amount': line.quantity,
'product_id': line.product_id and line.product_id.id or False,
'product_uom_id': line.product_uom_id and line.product_uom_id.id or False,
'amount': amt,
'general_account_id': line.account_id.id,
'move_id': line.id,
'journal_id': line.journal_id.analytic_journal_id.id,
'ref': line.ref,
'percentage': line2.rate
}
analytic_line_obj.create(cr, uid, al_vals, context=context)
return True
class account_invoice(osv.osv):
_name = "account.invoice"
_inherit = "account.invoice"
def line_get_convert(self, cr, uid, x, part, context=None):
res=super(account_invoice,self).line_get_convert(cr, uid, x, part, context=context)
res['analytics_id'] = x.get('analytics_id', False)
return res
def _get_analytic_lines(self, cr, uid, ids, context=None):
inv = self.browse(cr, uid, ids)[0]
cur_obj = self.pool.get('res.currency')
invoice_line_obj = self.pool.get('account.invoice.line')
acct_ins_obj = self.pool.get('account.analytic.plan.instance')
company_currency = inv.company_id.currency_id.id
if inv.type in ('out_invoice', 'in_refund'):
sign = 1
else:
sign = -1
iml = invoice_line_obj.move_line_get(cr, uid, inv.id, context=context)
for il in iml:
if il.get('analytics_id', False):
if inv.type in ('in_invoice', 'in_refund'):
ref = inv.reference
else:
ref = inv.number
obj_move_line = acct_ins_obj.browse(cr, uid, il['analytics_id'], context=context)
ctx = context.copy()
ctx.update({'date': inv.date_invoice})
amount_calc = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, il['price'], context=ctx) * sign
qty = il['quantity']
il['analytic_line_ids'] = []
for line2 in obj_move_line.account_ids:
amt = amount_calc * (line2.rate/100)
qtty = qty* (line2.rate/100)
al_vals = {
'name': il['name'],
'date': inv['date_invoice'],
'unit_amount': qtty,
'product_id': il['product_id'],
'account_id': line2.analytic_account_id.id,
'amount': amt,
'product_uom_id': il['uos_id'],
'general_account_id': il['account_id'],
'journal_id': self._get_journal_analytic(cr, uid, inv.type),
'ref': ref,
}
il['analytic_line_ids'].append((0, 0, al_vals))
return iml
class account_analytic_plan(osv.osv):
_inherit = "account.analytic.plan"
_columns = {
'default_instance_id': fields.many2one('account.analytic.plan.instance', 'Default Entries'),
}
class analytic_default(osv.osv):
_inherit = "account.analytic.default"
_columns = {
'analytics_id': fields.many2one('account.analytic.plan.instance', 'Analytic Distribution'),
}
class sale_order_line(osv.osv):
_inherit = "sale.order.line"
# Method overridden to set the analytic account by default on criterion match
def invoice_line_create(self, cr, uid, ids, context=None):
create_ids = super(sale_order_line,self).invoice_line_create(cr, uid, ids, context=context)
inv_line_obj = self.pool.get('account.invoice.line')
acct_anal_def_obj = self.pool.get('account.analytic.default')
if ids:
sale_line = self.browse(cr, uid, ids[0], context=context)
for line in inv_line_obj.browse(cr, uid, create_ids, context=context):
rec = acct_anal_def_obj.account_get(cr, uid, line.product_id.id,
sale_line.order_id.partner_id.id, uid, time.strftime('%Y-%m-%d'),
sale_line.order_id.company_id.id, context=context)
if rec:
inv_line_obj.write(cr, uid, [line.id], {'analytics_id': rec.analytics_id.id}, context=context)
return create_ids
# TODO : migrate module to new API
from openerp import fields
class account_bank_statement(osv.osv):
_inherit = "account.bank.statement"
_name = "account.bank.statement"
@api.multi
def button_confirm_bank(self):
super(account_bank_statement, self).button_confirm_bank()
for st in self:
for st_line in st.line_ids:
if st_line.analytics_id:
if not st.journal_id.analytic_journal_id:
raise UserError(_("You have to define an analytic journal on the '%s' journal.") % (st.journal_id.name,))
if not st_line.amount:
continue
return True
class account_bank_statement_line(osv.osv):
_inherit = "account.bank.statement.line"
_name = "account.bank.statement.line"
analytics_id = fields.Many2one('account.analytic.plan.instance', string='Analytic Distribution')
def _prepare_move_line(self, move, amount):
result = super(account_bank_statement, self)._prepare_bank_move_line(move, amount)
result['analytics_id'] = self.analytics_id.id
return result
@@ -1,15 +0,0 @@
<?xml version="1.0"?>
<openerp>
<data>
<report
id="action_account_analytic_account_crossovered_analytic"
string="Crossovered Analytic"
model="account.analytic.account"
report_type="qweb-pdf"
name="account_analytic_plans.report_crossoveredanalyticplans"
file="account_analytic_plans.report_crossoveredanalyticplans"
menu="False"
/>
</data>
</openerp>
@@ -1,249 +0,0 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- Add plan_id after user_id in account.journal many2one with account.analytic.plan -->
<record model="ir.ui.view" id="view_account_journal_form_inherit">
<field name="name">account.journal.form.inherit</field>
<field name="model">account.journal</field>
<field name="inherit_id" ref="account.view_account_journal_form"/>
<field name="arch" type="xml">
<field name="analytic_journal_id" position="after">
<field name="plan_id" groups="analytic.group_analytic_accounting"/>
</field>
</field>
</record>
<record id="view_move_form_inherit" model="ir.ui.view">
<field name="name">account.move.form.inherit</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='line_ids']/tree/field[@name='analytic_account_id']" position="replace">
<field name="analytics_id" context="{'journal_id':parent.journal_id}" groups="analytic.group_analytic_accounting"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_move_line_form_inherit">
<field name="name">account.move.line.form.inherit</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form"/>
<field name="arch" type="xml">
<field name="analytic_account_id" position="replace">
<field name="analytics_id" context="{'journal_id':journal_id}" groups="analytic.group_analytic_accounting"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="view_move_line_form_1_inherit">
<field name="name">account.move.line.form.inherit1</field>
<field name="model">account.move.line</field>
<field name="priority">2</field>
<field name="inherit_id" ref="account.view_move_line_form2"/>
<field name="arch" type="xml">
<field name="analytic_account_id" position="replace">
<field name="analytics_id" context="{'journal_id':journal_id}" groups="analytic.group_analytic_accounting"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="view_move_line_tree_inherit">
<field name="name">account.move.line.tree.inherit</field>
<field name="model">account.move.line</field>
<field name="priority">2</field>
<field name="inherit_id" ref="account.view_move_line_tree"/>
<field name="arch" type="xml">
<field name="analytic_account_id" position="replace">
</field>
</field>
</record>
<!-- views for account.analytic.plan.instance -->
<record model="ir.ui.view" id="account_analytic_plan_instance_form">
<field name="name">account.analytic.plan.instance.form</field>
<field name="model">account.analytic.plan.instance</field>
<field name="arch" type="xml">
<form string="Analytic Distribution">
<group col="4">
<field name="name"/>
<field name="code"/>
<field name="plan_id" required="1"/>
<field name="journal_id"/>
</group>
<field name="account_ids">
<tree string="Analytic Distribution" editable="bottom">
<field name="rate"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
</tree>
<form string="Analytic Distribution">
<field name="rate"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
</form>
</field>
</form>
</field>
</record>
<record model="ir.ui.view" id="account_analytic_plan_instance_tree">
<field name="name">account.analytic.plan.instance.tree</field>
<field name="model">account.analytic.plan.instance</field>
<field name="arch" type="xml">
<tree string="Analytic Distribution">
<field name="name"/>
<field name="code"/>
<field name="plan_id"/>
<field name="journal_id"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="account_analytic_plan_instance_action">
<field name="name">Analytic Distribution's Models</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.analytic.plan.instance</field>
<field name="domain">[('plan_id','&lt;&gt;',False)]</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<act_window name="Distribution Models"
domain="[('plan_id','&lt;&gt;',False)]"
context="{'search_default_plan_id': active_id, 'default_plan_id': active_id}"
res_model="account.analytic.plan.instance"
src_model="account.analytic.plan"
id="account_analytic_instance_model_open"/>
<record model="ir.ui.view" id="account_analytic_plan_instance_line_form">
<field name="name">account.analytic.plan.instance.line.form</field>
<field name="model">account.analytic.plan.instance.line</field>
<field name="arch" type="xml">
<form string="Analytic Distribution Line">
<group col="4">
<field name="plan_id"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
<field name="rate"/>
</group>
</form>
</field>
</record>
<record model="ir.ui.view" id="account_analytic_plan_instance_line_tree">
<field name="name">account.analytic.plan.instance.line.tree</field>
<field name="model">account.analytic.plan.instance.line</field>
<field name="arch" type="xml">
<tree string="Analytic Distribution Lines">
<field name="plan_id"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
<field name="rate"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="account_analytic_plan_search">
<field name="name">account.analytic.plan.search</field>
<field name="model">account.analytic.plan</field>
<field name="arch" type="xml">
<search string="Analytic Plans">
<field name="name" string="Analytic Plan"/>
</search>
</field>
</record>
<record model="ir.ui.view" id="account_analytic_plan_form">
<field name="name">account.analytic.plan.form</field>
<field name="model">account.analytic.plan</field>
<field name="arch" type="xml">
<form string="Analytic Plan">
<group col="4">
<field name="name"/>
<field name="default_instance_id"/>
</group>
<field name="plan_ids"/>
</form>
</field>
</record>
<record model="ir.ui.view" id="account_analytic_plan_tree">
<field name="name">account.analytic.plan.tree</field>
<field name="model">account.analytic.plan</field>
<field name="arch" type="xml">
<tree string="Analytic Plans">
<field name="name"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="account_analytic_plan_form_action">
<field name="name">Analytic Plan</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.analytic.plan</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="account_analytic_plan_search"/>
</record>
<menuitem
parent="account.menu_analytic_accounting"
id="menu_account_analytic_plan_action"
action="account_analytic_plan_form_action"
groups="analytic.group_analytic_accounting"/>
<record model="ir.ui.view" id="account_analytic_plan_line_form">
<field name="name">account.analytic.plan.line.form</field>
<field name="model">account.analytic.plan.line</field>
<field name="arch" type="xml">
<form string="Analytic Plan Line">
<group col="4">
<field name="name"/>
<field name="sequence"/>
<field name="root_analytic_id" groups="analytic.group_analytic_accounting"/>
<newline/>
<field name="min_required"/>
<field name="max_required"/>
</group>
</form>
</field>
</record>
<record model="ir.ui.view" id="account_analytic_plan_line_tree">
<field name="name">account.analytic.plan.line.tree</field>
<field name="model">account.analytic.plan.line</field>
<field name="arch" type="xml">
<tree string="Analytic Plan Lines">
<field name="name"/>
<field name="sequence"/>
<field name="root_analytic_id" groups="analytic.group_analytic_accounting"/>
<field name="min_required"/>
<field name="max_required"/>
</tree>
</field>
</record>
<!-- add property field on default analytic account-->
<record model="ir.ui.view" id="view_default_inherit_form">
<field name="name">account.analytic.default.form.plans</field>
<field name="model">account.analytic.default</field>
<field name="inherit_id" ref="account_analytic_default.view_account_analytic_default_form"/>
<field name="arch" type="xml">
<field name="analytic_id" required="1" position="replace">
<field name="analytics_id" required="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="view_default_inherit_tree">
<field name="name">account.analytic.default.tree.plans</field>
<field name="model">account.analytic.default</field>
<field name="inherit_id" ref="account_analytic_default.view_account_analytic_default_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='analytic_id']" position="replace">
<field name="analytics_id" required="1"/>
</xpath>
</field>
</record>
</data>
</openerp>
@@ -1,483 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_analytic_plans
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-25 08:59+0000\n"
"PO-Revision-Date: 2015-08-25 08:59+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "100.00%"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "<strong>Company:</strong>"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "<strong>From Date:</strong>"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "<strong>Printing Date:</strong>"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "<strong>To Date:</strong>"
msgstr ""
#. module: account_analytic_plans
#: code:addons/account_analytic_plans/account_analytic_plans.py:201
#, python-format
msgid "A model with this name and code already exists."
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_account_ids
msgid "Account Id"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "Account Name"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_account1_ids
msgid "Account1 Id"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_account2_ids
msgid "Account2 Id"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_account3_ids
msgid "Account3 Id"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_account4_ids
msgid "Account4 Id"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_account5_ids
msgid "Account5 Id"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_account6_ids
msgid "Account6 Id"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "Amount"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_analytic_account_id
msgid "Analytic Account"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_ref
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "Analytic Account Reference"
msgstr ""
#. module: account_analytic_plans
#. openerp-web
#: code:addons/account_analytic_plans/static/src/js/account_bank_reconciliation.js:18
#: code:addons/account_analytic_plans/static/src/js/account_bank_reconciliation.js:24
#: model:ir.model,name:account_analytic_plans.model_account_analytic_default
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_default_analytics_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_name
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_bank_statement_line_analytics_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_invoice_line_analytics_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_move_line_analytics_id
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_instance_form
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_instance_tree
#, python-format
msgid "Analytic Distribution"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_instance_line_form
msgid "Analytic Distribution Line"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_instance_line_tree
msgid "Analytic Distribution Lines"
msgstr ""
#. module: account_analytic_plans
#: model:ir.actions.act_window,name:account_analytic_plans.account_analytic_plan_instance_action
msgid "Analytic Distribution's Models"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_analytic_plan_instance_line
msgid "Analytic Instance Line"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_journal_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_journal_ids
#: model:ir.ui.view,arch_db:account_analytic_plans.view_account_crossovered_analytic
msgid "Analytic Journal"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_analytic_line
msgid "Analytic Line"
msgstr ""
#. module: account_analytic_plans
#: model:ir.actions.act_window,name:account_analytic_plans.account_analytic_plan_form_action
#: model:ir.model,name:account_analytic_plans.model_account_analytic_plan
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_plan_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_name
#: model:ir.ui.menu,name:account_analytic_plans.menu_account_analytic_plan_action
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_form
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_search
msgid "Analytic Plan"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_analytic_plan_instance
msgid "Analytic Plan Instance"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_analytic_plan_line
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_line_form
msgid "Analytic Plan Line"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_line_tree
msgid "Analytic Plan Lines"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_plan_ids
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_journal_plan_id
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_search
#: model:ir.ui.view,arch_db:account_analytic_plans.account_analytic_plan_tree
msgid "Analytic Plans"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_name
msgid "Axis Name"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_bank_statement
msgid "Bank Statement"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.view_account_crossovered_analytic
#: model:ir.ui.view,arch_db:account_analytic_plans.view_analytic_plan_create_model_msg
msgid "Cancel"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "Code"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_create_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_create_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_create_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_create_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_create_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_analytic_plan_create_model_create_uid
msgid "Created by"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_create_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_create_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_create_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_create_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_create_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_analytic_plan_create_model_create_date
msgid "Created on"
msgstr ""
#. module: account_analytic_plans
#: model:ir.actions.act_window,name:account_analytic_plans.action_account_crossovered_analytic
#: model:ir.actions.report.xml,name:account_analytic_plans.action_account_analytic_account_crossovered_analytic
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
#: model:ir.ui.view,arch_db:account_analytic_plans.view_account_crossovered_analytic
msgid "Crossovered Analytic"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_default_instance_id
msgid "Default Entries"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_display_name
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_display_name
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_display_name
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_display_name
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_display_name
#: model:ir.model.fields,field_description:account_analytic_plans.field_analytic_plan_create_model_display_name
#: model:ir.model.fields,field_description:account_analytic_plans.field_report_account_analytic_plans_report_crossoveredanalyticplans_display_name
msgid "Display Name"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_code
msgid "Distribution Code"
msgstr ""
#. module: account_analytic_plans
#: code:addons/account_analytic_plans/wizard/analytic_plan_create_model.py:30
#: model:ir.ui.view,arch_db:account_analytic_plans.view_analytic_plan_create_model
#: model:ir.ui.view,arch_db:account_analytic_plans.view_analytic_plan_create_model_msg
#, python-format
msgid "Distribution Model Saved"
msgstr ""
#. module: account_analytic_plans
#: model:ir.actions.act_window,name:account_analytic_plans.account_analytic_instance_model_open
msgid "Distribution Models"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_empty_line
msgid "Dont show empty lines"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_date2
msgid "End Date"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_analytic_plan_create_model_id
#: model:ir.model.fields,field_description:account_analytic_plans.field_report_account_analytic_plans_report_crossoveredanalyticplans_id
msgid "ID"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_invoice_line
msgid "Invoice Line"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_journal
msgid "Journal"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan___last_update
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance___last_update
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line___last_update
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line___last_update
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic___last_update
#: model:ir.model.fields,field_description:account_analytic_plans.field_analytic_plan_create_model___last_update
#: model:ir.model.fields,field_description:account_analytic_plans.field_report_account_analytic_plans_report_crossoveredanalyticplans___last_update
msgid "Last Modified on"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_write_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_write_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_write_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_write_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_write_uid
#: model:ir.model.fields,field_description:account_analytic_plans.field_analytic_plan_create_model_write_uid
msgid "Last Updated by"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_write_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_write_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_write_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_write_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_write_date
#: model:ir.model.fields,field_description:account_analytic_plans.field_analytic_plan_create_model_write_date
msgid "Last Updated on"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_max_required
msgid "Maximum Allowed (%)"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_min_required
msgid "Minimum Allowed (%)"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_plan_id
msgid "Model's Plan"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.view_analytic_plan_create_model_msg
msgid "Ok"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "Perc(%)"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_line_percentage
msgid "Percentage"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_plan_id
msgid "Plan Id"
msgstr ""
#. module: account_analytic_plans
#: code:addons/account_analytic_plans/wizard/analytic_plan_create_model.py:20
#, python-format
msgid "Please put a name and a code before saving the model."
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.view_account_crossovered_analytic
msgid "Print"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_account_crossovered_analytic
msgid "Print Crossovered Analytic"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.report_crossoveredanalyticplans
msgid "Quantity"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_instance_line_rate
msgid "Rate (%)"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_root_analytic_id
msgid "Root Account"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,help:account_analytic_plans.field_account_analytic_plan_line_root_analytic_id
msgid "Root account of this plan."
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.view_analytic_plan_create_model_msg
msgid "Save This Distribution as a Model"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_analytic_plan_line_sequence
msgid "Sequence"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model.fields,field_description:account_analytic_plans.field_account_crossovered_analytic_date1
msgid "Start Date"
msgstr ""
#. module: account_analytic_plans
#: code:addons/account_analytic_plans/account_analytic_plans.py:214
#, python-format
msgid "The total should be between %s and %s."
msgstr ""
#. module: account_analytic_plans
#: code:addons/account_analytic_plans/wizard/account_crossovered_analytic.py:45
#, python-format
msgid "There are no analytic lines related to account %s."
msgstr ""
#. module: account_analytic_plans
#: code:addons/account_analytic_plans/wizard/analytic_plan_create_model.py:23
#, python-format
msgid "There is no analytic plan defined."
msgstr ""
#. module: account_analytic_plans
#: model:ir.ui.view,arch_db:account_analytic_plans.view_analytic_plan_create_model
msgid "This distribution model has been saved.You will be able to reuse it later."
msgstr ""
#. module: account_analytic_plans
#: code:addons/account_analytic_plans/account_analytic_plans.py:318
#: code:addons/account_analytic_plans/account_analytic_plans.py:443
#, python-format
msgid "You have to define an analytic journal on the '%s' journal."
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_analytic_plan_create_model
msgid "analytic.plan.create.model"
msgstr ""
#. module: account_analytic_plans
#: model:ir.actions.act_window,name:account_analytic_plans.action_analytic_plan_create_model
msgid "analytic.plan.create.model.action"
msgstr ""
#. module: account_analytic_plans
#: model:ir.model,name:account_analytic_plans.model_report_account_analytic_plans_report_crossoveredanalyticplans
msgid "report.account_analytic_plans.report_crossoveredanalyticplans"
msgstr ""
@@ -1,4 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import crossovered_analytic
@@ -1,164 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import time
from openerp.osv import osv
from openerp.report import report_sxw
class crossovered_analytic(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(crossovered_analytic, self).__init__(cr, uid, name, context = context)
self.localcontext.update( {
'time': time,
'lines': self._lines,
'ref_lines': self._ref_lines,
'find_children': self.find_children,
})
self.base_amount = 0.00
def find_children(self, ref_ids):
if not ref_ids: return []
to_return_ids = []
final_list = []
parent_list = []
set_list = []
analytic_obj = self.pool.get('account.analytic.account')
for id in ref_ids:
# to avoid duplicate entries
if id not in to_return_ids:
to_return_ids.append(analytic_obj.search(self.cr,self.uid,[('parent_id','child_of',[id])]))
data_accnt = analytic_obj.browse(self.cr,self.uid,to_return_ids[0])
for data in data_accnt:
if data.parent_id and data.parent_id.id == ref_ids[0]:
parent_list.append(data.id)
final_list.append(ref_ids[0])
set_list = self.set_account(parent_list)
final_list.extend(set_list)
return final_list #to_return_ids[0]
def set_account(self, cats):
lst = []
category = self.pool.get('account.analytic.account').read(self.cr, self.uid, cats)
for cat in category:
lst.append(cat['id'])
if cat['child_ids']:
lst.extend(self.set_account(cat['child_ids']))
return lst
def _ref_lines(self, form):
result = []
res = {}
acc_pool = self.pool.get('account.analytic.account')
line_pool = self.pool.get('account.analytic.line')
self.dict_acc_ref = {}
if form['journal_ids']:
journal = " in (" + ','.join(map(lambda x: str(x), form['journal_ids'])) + ")"
else:
journal = 'is not null'
query_general = "SELECT id FROM account_analytic_line WHERE (journal_id " + journal +") AND date>='"+ str(form['date1']) +"'"" AND date<='" + str(form['date2']) + "'"
self.cr.execute(query_general)
l_ids = self.cr.fetchall()
line_ids = [x[0] for x in l_ids]
obj_line = line_pool.browse(self.cr,self.uid,line_ids)
#this structure will be usefull for easily knowing the account_analytic_line that are related to the reference account. At this purpose, we save the move_id of analytic lines.
self.dict_acc_ref[form['ref']] = []
children_list = acc_pool.search(self.cr, self.uid, [('parent_id', 'child_of', [form['ref']])])
for obj in obj_line:
if obj.account_id.id in children_list:
if obj.move_id and obj.move_id.id not in self.dict_acc_ref[form['ref']]:
self.dict_acc_ref[form['ref']].append(obj.move_id.id)
res['ref_name'] = acc_pool.name_get(self.cr, self.uid, [form['ref']])[0][1]
res['ref_code'] = acc_pool.browse(self.cr, self.uid, form['ref']).code
self.final_list = children_list
selected_ids = line_pool.search(self.cr, self.uid, [('account_id', 'in' ,self.final_list)])
res['ref_qty'] = 0.0
res['ref_amt'] = 0.0
self.base_amount = 0.0
if selected_ids:
query = "SELECT SUM(aal.amount) AS amt, SUM(aal.unit_amount) AS qty FROM account_analytic_line AS aal, account_analytic_account AS aaa \
WHERE aal.account_id = aaa.id AND aal.id IN ("+','.join(map(str,selected_ids))+") AND (aal.journal_id " + journal +") AND aal.date>='"+ str(form['date1']) +"'"" AND aal.date<='" + str(form['date2']) + "'"
self.cr.execute(query)
info=self.cr.dictfetchall()
res['ref_qty'] = info[0]['qty']
res['ref_amt'] = info[0]['amt']
self.base_amount = info[0]['amt']
result.append(res)
return result
def _lines(self, form, ids=None):
if ids is None:
ids = {}
if not ids:
ids = self.ids
if form['journal_ids']:
journal=" in (" + ','.join(map(lambda x: str(x), form['journal_ids'])) + ")"
else:
journal= 'is not null'
acc_pool = self.pool.get('account.analytic.account')
line_pool = self.pool.get('account.analytic.line')
acc_id = []
final = []
self.list_ids = []
self.final_list = self.find_children(ids)
for acc_id in self.final_list:
selected_ids = line_pool.search(self.cr, self.uid, [('account_id','=',acc_id), ('move_id', 'in', self.dict_acc_ref[form['ref']])])
if selected_ids:
query="SELECT aaa.code AS code, SUM(aal.amount) AS amt, SUM(aal.unit_amount) AS qty, aaa.name AS acc_name, aal.account_id AS id FROM account_analytic_line AS aal, account_analytic_account AS aaa \
WHERE aal.account_id=aaa.id AND aal.id IN ("+','.join(map(str,selected_ids))+") AND (aal.journal_id " + journal +") AND aal.date>='"+ str(form['date1']) +"'"" AND aal.date<='" + str(form['date2']) + "'"" GROUP BY aal.account_id,aaa.name,aaa.code ORDER BY aal.account_id"
self.cr.execute(query)
res = self.cr.dictfetchall()
if res:
for element in res:
if self.base_amount <> 0.00:
element['perc'] = (element['amt'] / self.base_amount) * 100.00
else:
element['perc'] = 0.00
else:
result = {}
res = []
result['id'] = acc_id
data_account = acc_pool.browse(self.cr, self.uid, acc_id)
result['acc_name'] = data_account.name
result['code'] = data_account.code
result['amt'] = result['qty'] = result['perc'] = 0.00
if not form['empty_line']:
res.append(result)
else:
result = {}
res = []
result['id'] = acc_id
data_account = acc_pool.browse(self.cr, self.uid, acc_id)
result['acc_name'] = data_account.name
result['code'] = data_account.code
result['amt'] = result['qty'] = result['perc'] = 0.00
if not form['empty_line']:
res.append(result)
for item in res:
obj_acc = acc_pool.name_get(self.cr,self.uid,[item['id']])
item['acc_name'] = obj_acc[0][1]
final.append(item)
return final
class report_crossoveredanalyticplans(osv.AbstractModel):
_name = 'report.account_analytic_plans.report_crossoveredanalyticplans'
_inherit = 'report.abstract_report'
_template = 'account_analytic_plans.report_crossoveredanalyticplans'
_wrapped_report_class = crossovered_analytic
@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="base.user_root" model="res.users">
<field name="groups_id" eval="[(4, ref('analytic.group_analytic_accounting'))]"/>
</record>
</data>
</openerp>
@@ -1,8 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_analytic_plan,account.analytic.plan,model_account_analytic_plan,account.group_account_user,1,1,1,1
access_account_analytic_plan_line,account.analytic.plan.line,model_account_analytic_plan_line,account.group_account_user,1,1,1,1
access_account_analytic_plan_instance,account.analytic.plan.instance,model_account_analytic_plan_instance,account.group_account_user,1,1,1,1
access_account_analytic_plan_instance_group_user,account.analytic.plan.instance,model_account_analytic_plan_instance,base.group_user,1,0,0,0
access_account_analytic_plan_instance_line,account.analytic.plan.instance.line,model_account_analytic_plan_instance_line,account.group_account_user,1,1,1,1
access_account_analytic_plan_instance_line_group_user,account.analytic.plan.instance.line,model_account_analytic_plan_instance_line,base.group_user,1,0,0,0
access_account_analytic_plan_line_invoice,account.analytic.plan.line.invoice,model_account_analytic_plan_line,account.group_account_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_account_analytic_plan account.analytic.plan model_account_analytic_plan account.group_account_user 1 1 1 1
3 access_account_analytic_plan_line account.analytic.plan.line model_account_analytic_plan_line account.group_account_user 1 1 1 1
4 access_account_analytic_plan_instance account.analytic.plan.instance model_account_analytic_plan_instance account.group_account_user 1 1 1 1
5 access_account_analytic_plan_instance_group_user account.analytic.plan.instance model_account_analytic_plan_instance base.group_user 1 0 0 0
6 access_account_analytic_plan_instance_line account.analytic.plan.instance.line model_account_analytic_plan_instance_line account.group_account_user 1 1 1 1
7 access_account_analytic_plan_instance_line_group_user account.analytic.plan.instance.line model_account_analytic_plan_instance_line base.group_user 1 0 0 0
8 access_account_analytic_plan_line_invoice account.analytic.plan.line.invoice model_account_analytic_plan_line account.group_account_user 1 1 1 1
@@ -1,40 +0,0 @@
odoo.define('account_analytic_plans.custom', function (require) {
"use strict";
var widgets = require('account.reconciliation');
var core = require('web.core');
var _t = core._t;
widgets.bankStatementReconciliation.include({
init: function(parent, context) {
var FieldMany2One = core.form_widget_registry.get('many2one');
this._super(parent, context);
delete this.create_form_fields.analytic_account_id;
this.create_form_fields["analytic_plan"] = {
id: "analytic_plan",
index: 25,
corresponding_property: "analytics_id",
label: _t("Analytic Distribution"),
required: false,
group: "analytic.group_analytic_accounting",
constructor: FieldMany2One,
field_properties: {
relation: "account.analytic.plan.instance",
string: _t("Analytic Distribution"),
type: "many2one",
}
};
},
});
widgets.bankStatementReconciliationLine.include({
prepareCreatedMoveLineForPersisting: function(line) {
var dict = this._super(line);
if (line.analytics_id) dict['analytics_id'] = line.analytics_id;
if (dict["analytic_account_id"] !== undefined) delete dict["analytic_account_id"];
return dict;
},
});
});
@@ -1,11 +0,0 @@
-
Print the Crossovered Analytic Report in Normal mode
-
!python {model: account.analytic.account}: |
import os, time
import openerp.report
from openerp import tools
data_dict = {'model': 'account.analytic.account', 'form': {'date1':time.strftime("%Y-01-01"),'date2':time.strftime('%Y-%m-%d'),'journal_ids':[6,0,(ref('analytic.cose_journal_sale'))],'ref':ref('analytic.analytic_root'),'empty_line':True,'id':ref('analytic.analytic_root'),'context':{}}}
data, format = openerp.report.render_report(cr, uid, [ref('analytic.analytic_root')], 'account_analytic_plans.report_crossoveredanalyticplans', data_dict, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'account_analytic_plans-crossovered_analyitic.'+format), 'wb+').write(data)
@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="assets_backend" name="account analytic plans assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/account_analytic_plans/static/src/js/account_bank_reconciliation.js"></script>
</xpath>
</template>
</data>
</openerp>
@@ -1,66 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_crossoveredanalyticplans">
<t t-call="report.html_container">
<t t-call="report.internal_layout">
<div class="page">
<div class="oe_structure"/>
<h2>Crossovered Analytic</h2>
<div class="row mt32 mb32">
<div class="col-xs-3">
<strong>From Date:</strong>
<p t-esc="formatLang(data['form']['date1'], date=True)"/>
</div>
<div class="col-xs-3">
<strong>To Date:</strong>
<p t-esc="formatLang(data['form']['date2'], date=True)"/>
</div>
<div class="col-xs-3">
<strong>Company:</strong>
<p t-esc="res_company.name"/>
</div>
<div class="col-xs-3">
<strong>Printing Date:</strong>
<p t-esc="formatLang(time.strftime('%Y-%m-%d'), date=True)"/>
</div>
</div>
<h3>Analytic Account Reference</h3>
<table class="table table-condensed">
<thead>
<tr>
<th>Account Name</th>
<th class="text-center">Code</th>
<th class="text-right">Quantity</th>
<th class="text-right">Amount</th>
<th class="text-right">Perc(%)</th>
</tr>
</thead>
<tbody>
<tr t-foreach="ref_lines(data['form'])" t-as="line">
<td><span t-esc="line['ref_name']"/></td>
<td class="text-center"> <span t-esc="line['ref_code']"/> </td>
<td class="text-right">
<p t-if="line['ref_qty']">
<span t-esc="formatLang(line['ref_qty'])"/>
</p>
</td>
<td class="text-right">
<p t-if="line['ref_amt']">
<span t-esc="formatLang(line['ref_amt'], currency_obj = res_company.currency_id)"/>
</p>
</td>
<td class="text-right">100.00%</td>
</tr>
</tbody>
</table>
<div class="oe_structure"/>
</div>
</t>
</t>
</template>
</data>
</openerp>
@@ -1,5 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import analytic_plan_create_model
import account_crossovered_analytic
@@ -1,52 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import time
from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp.exceptions import UserError
class account_crossovered_analytic(osv.osv_memory):
_name = "account.crossovered.analytic"
_description = "Print Crossovered Analytic"
_columns = {
'date1': fields.date('Start Date', required=True),
'date2': fields.date('End Date', required=True),
'journal_ids': fields.many2many('account.analytic.journal', 'crossovered_journal_rel', 'crossover_id', 'journal_id', 'Analytic Journal'),
'ref': fields.many2one('account.analytic.account', 'Analytic Account Reference', required=True),
'empty_line': fields.boolean('Dont show empty lines'),
}
_defaults = {
'date1': lambda *a: time.strftime('%Y-01-01'),
'date2': lambda *a: time.strftime('%Y-%m-%d'),
}
def print_report(self, cr, uid, ids, context=None):
cr.execute('SELECT account_id FROM account_analytic_line')
res = cr.fetchall()
acc_ids = [x[0] for x in res]
data = self.read(cr, uid, ids, context=context)[0]
data['ref'] = data['ref'][0]
obj_acc = self.pool.get('account.analytic.account').browse(cr, uid, data['ref'], context=context)
name = obj_acc.name
account_ids = self.pool.get('account.analytic.account').search(cr, uid, [('parent_id', 'child_of', [data['ref']])], context=context)
flag = True
for acc in account_ids:
if acc in acc_ids:
flag = False
break
if flag:
raise UserError(_('There are no analytic lines related to account %s.' % name))
datas = {
'ids': [],
'model': 'account.analytic.account',
'form': data
}
return self.pool['report'].get_action(cr, uid, [], 'account_analytic_plans.report_crossoveredanalyticplans', data=datas, context=context)
@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_account_crossovered_analytic" model="ir.ui.view">
<field name="name">account.crossovered.analytic.form</field>
<field name="model">account.crossovered.analytic</field>
<field name="arch" type="xml">
<form string="Crossovered Analytic">
<group col="4">
<field name="date1"/>
<field name="date2"/>
<field name="ref" groups="analytic.group_analytic_accounting"/>
<field name="empty_line"/>
</group><group string="Analytic Journal">
<field name="journal_ids" colspan="2" nolabel="1"/>
</group>
<footer>
<button name="print_report" string="Print" type="object" class="btn-primary"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="action_account_crossovered_analytic" model="ir.actions.act_window">
<field name="name">Crossovered Analytic</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.crossovered.analytic</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record model="ir.values" id="account_crossovered_analytic_values">
<field name="model_id" ref="analytic.model_account_analytic_account" />
<field name="name">Crossovered Analytic</field>
<field name="key2">client_print_multi</field>
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_crossovered_analytic'))" />
<field name="key">action</field>
<field name="model">account.analytic.account</field>
</record>
</data>
</openerp>
@@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from openerp.osv import osv
from openerp.tools.translate import _
from openerp.exceptions import UserError
class analytic_plan_create_model(osv.osv_memory):
_name = "analytic.plan.create.model"
_description = "analytic.plan.create.model"
def activate(self, cr, uid, ids, context=None):
plan_obj = self.pool.get('account.analytic.plan.instance')
anlytic_plan_obj = self.pool.get('account.analytic.plan')
if context is None:
context = {}
if 'active_id' in context and context['active_id']:
plan = plan_obj.browse(cr, uid, context['active_id'], context=context)
if (not plan.name) or (not plan.code):
raise UserError(_('Please put a name and a code before saving the model.'))
pids = anlytic_plan_obj.search(cr, uid, [], context=context)
if not pids:
raise UserError(_('There is no analytic plan defined.'))
plan_obj.write(cr, uid, [context['active_id']], {'plan_id':pids[0]}, context=context)
resource_id = self.pool['ir.model.data'].xmlid_to_res_id(
cr, uid, 'account.view_analytic_plan_create_model',
context=context, raise_if_not_found=True)
return {
'name': _('Distribution Model Saved'),
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'analytic.plan.create.model',
'views': [(resource_id,'form')],
'type': 'ir.actions.act_window',
'target': 'new',
}
else:
return {'type': 'ir.actions.act_window_close'}
@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_analytic_plan_create_model_msg" model="ir.ui.view">
<field name="name">analytic.plan.create.model.msg.form</field>
<field name="model">analytic.plan.create.model</field>
<field name="arch" type="xml">
<form string="Distribution Model Saved">
<label string="Save This Distribution as a Model"/>
<footer>
<button string="Ok" type="object" name="activate" default_focus="1" class="btn-primary"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="view_analytic_plan_create_model" model="ir.ui.view">
<field name="name">analytic.plan.create.model.form</field>
<field name="model">analytic.plan.create.model</field>
<field name="arch" type="xml">
<form string="Distribution Model Saved">
<label string="This distribution model has been saved.You will be able to reuse it later."/>
</form>
</field>
</record>
<record id="action_analytic_plan_create_model" model="ir.actions.act_window">
<field name="name">analytic.plan.create.model.action</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">analytic.plan.create.model</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="view_id" ref="view_analytic_plan_create_model_msg"/>
</record>
</data>
</openerp>