[DEL] account_analytic_plans: deprecated module
Reason: complete rewrite of the Sale module. Responsible: fp, dbo, nim
This commit is contained in:
@@ -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','<>',False)]</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<act_window name="Distribution Models"
|
||||
domain="[('plan_id','<>',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,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>
|
||||
Reference in New Issue
Block a user