[IMP]: clean code in account_analytic_analysis, account_analytic_default and account_analytic_plans

bzr revid: pap@tinyerp.co.in-20100702140905-uud0pzhb88jmb48n
This commit is contained in:
pap (openerp) 2010-07-02 19:39:05 +05:30
parent 38738c887d
commit d675363930
19 changed files with 121 additions and 151 deletions

View File

@ -21,7 +21,6 @@
{ {
"name" : "Accounting and Financial Management", "name" : "Accounting and Financial Management",
"version" : "1.1", "version" : "1.1",
"depends" : ["product", "analytic", "process","board"],
"author" : "Tiny", "author" : "Tiny",
"category": 'Generic Modules/Accounting', "category": 'Generic Modules/Accounting',
"description": """Financial and accounting module that covers: "description": """Financial and accounting module that covers:
@ -42,6 +41,7 @@ The processes like maintaining of general ledger is done through the defined fin
grouping is maintained through journal) for a particular financial year and for preparation of vouchers there is a grouping is maintained through journal) for a particular financial year and for preparation of vouchers there is a
module named account_vouchers module named account_vouchers
""", """,
"depends" : ["product", "analytic", "process","board"],
'website': 'http://www.openerp.com', 'website': 'http://www.openerp.com',
'init_xml': [], 'init_xml': [],
'update_xml': [ 'update_xml': [

View File

@ -207,7 +207,6 @@
<field name="date" select="1"/> <field name="date" select="1"/>
<field name="user_id" widget="selection"/> <field name="user_id" widget="selection"/>
</group> </group>
<separator orientation="vertical"/>
<newline/> <newline/>
<group string="Group By..." expand="0"> <group string="Group By..." expand="0">
<filter string="General Account" context="{'group_by':'general_account_id'}"/> <filter string="General Account" context="{'group_by':'general_account_id'}"/>
@ -342,7 +341,6 @@
<field name="res_model">account.analytic.line</field> <field name="res_model">account.analytic.line</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="domain">[('journal_id','=',active_id)]</field>
</record> </record>
<menuitem action="action_account_analytic_journal_open_form" id="account_analytic_journal_entries" parent="menu_finance_entries"/> <menuitem action="action_account_analytic_journal_open_form" id="account_analytic_journal_entries" parent="menu_finance_entries"/>
<!-- <record id="action_account_analytic_journal_open_form" model="ir.actions.act_window"> <!-- <record id="action_account_analytic_journal_open_form" model="ir.actions.act_window">

View File

@ -21,32 +21,30 @@
{ {
'name': 'report_account_analytic', 'name' : 'report_account_analytic',
'version': '1.0', 'version' : '1.1',
'category': 'Generic Modules/Accounting', 'category' : 'Generic Modules/Accounting',
'description': """ 'description': """
This module is for modifying account analytic view to show This module is for modifying account analytic view to show
important data to project manager of services companies. important data to project manager of services companies.
Adds menu to show relevant information to each manager.. Adds menu to show relevant information to each manager..
You can also view the report of account analytic summary You can also view the report of account analytic summary
user-wise as well as month wise. user-wise as well as month wise.
""", """,
"version" : "1.1", "author" : "Camptocamp",
"author" : "Camptocamp", "website" : "http://www.camptocamp.com/",
"category" : "Generic Modules/Accounting", "depends" : ["hr_timesheet_invoice"],
"module": "", "init_xml" : [],
"website": "http://www.camptocamp.com/", "update_xml": [
"depends" : ["account","hr_timesheet","hr_timesheet_invoice","project"], "security/ir.model.access.csv",
"init_xml" : [], "account_analytic_analysis_view.xml",
"update_xml" : [ "account_analytic_analysis_menu.xml",
"security/ir.model.access.csv", ],
"account_analytic_analysis_view.xml", 'demo_xml' : [],
"account_analytic_analysis_menu.xml",
],
'demo_xml': [],
'installable': True, 'installable': True,
'active': False, 'active' : False,
'certificate': '0042927202589', 'certificate': '0042927202589',
} }
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,18 +19,16 @@
# #
############################################################################## ##############################################################################
import operator
from osv import osv, fields from osv import osv, fields
from osv.orm import intersect from osv.orm import intersect
import tools.sql import tools.sql
from tools.translate import _ from tools.translate import _
class account_analytic_account(osv.osv): class account_analytic_account(osv.osv):
_name = "account.analytic.account" _name = "account.analytic.account"
_inherit = "account.analytic.account" _inherit = "account.analytic.account"
def _ca_invoiced_calc(self, cr, uid, ids, name, arg, context={}): def _ca_invoiced_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
if parent_ids: if parent_ids:
@ -46,7 +44,7 @@ class account_analytic_account(osv.osv):
return self._compute_currency_for_level_tree(cr, uid, ids, parent_ids, res, context) return self._compute_currency_for_level_tree(cr, uid, ids, parent_ids, res, context)
def _ca_to_invoice_calc(self, cr, uid, ids, name, arg, context={}): def _ca_to_invoice_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
res2 = {} res2 = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
@ -92,7 +90,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) + round(res2.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2) + round(res2.get(id, 0.0),2)
return res return res
def _hours_qtt_non_invoiced_calc (self, cr, uid, ids, name, arg, context={}): def _hours_qtt_non_invoiced_calc (self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
if parent_ids: if parent_ids:
@ -117,7 +115,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2)
return res return res
def _hours_quantity_calc(self, cr, uid, ids, name, arg, context={}): def _hours_quantity_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
if parent_ids: if parent_ids:
@ -141,7 +139,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2)
return res return res
def _total_cost_calc(self, cr, uid, ids, name, arg, context={}): def _total_cost_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
if parent_ids: if parent_ids:
@ -158,7 +156,7 @@ class account_analytic_account(osv.osv):
return self._compute_currency_for_level_tree(cr, uid, ids, parent_ids, res, context) return self._compute_currency_for_level_tree(cr, uid, ids, parent_ids, res, context)
# TODO Take care of pricelist and purchase ! # TODO Take care of pricelist and purchase !
def _ca_theorical_calc(self, cr, uid, ids, name, arg, context={}): def _ca_theorical_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
res2 = {} res2 = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
@ -202,7 +200,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) + round(res2.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2) + round(res2.get(id, 0.0),2)
return res return res
def _last_worked_date_calc (self, cr, uid, ids, name, arg, context={}): def _last_worked_date_calc (self, cr, uid, ids, name, arg, context = None):
res = {} res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
if parent_ids: if parent_ids:
@ -223,7 +221,7 @@ class account_analytic_account(osv.osv):
res[id] = res.get(id, '') res[id] = res.get(id, '')
return res return res
def _last_invoice_date_calc (self, cr, uid, ids, name, arg, context={}): def _last_invoice_date_calc (self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
if parent_ids: if parent_ids:
@ -247,7 +245,7 @@ class account_analytic_account(osv.osv):
res[id] = res.get(id, '') res[id] = res.get(id, '')
return res return res
def _last_worked_invoiced_date_calc (self, cr, uid, ids, name, arg, context={}): def _last_worked_invoiced_date_calc (self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)])) parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
if parent_ids: if parent_ids:
@ -268,7 +266,7 @@ class account_analytic_account(osv.osv):
res[id] = res.get(id, '') res[id] = res.get(id, '')
return res return res
def _remaining_hours_calc(self, cr, uid, ids, name, arg, context={}): def _remaining_hours_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
for account in self.browse(cr, uid, ids): for account in self.browse(cr, uid, ids):
if account.quantity_max != 0: if account.quantity_max != 0:
@ -279,7 +277,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2)
return res return res
def _hours_qtt_invoiced_calc(self, cr, uid, ids, name, arg, context={}): def _hours_qtt_invoiced_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
for account in self.browse(cr, uid, ids): for account in self.browse(cr, uid, ids):
res[account.id] = account.hours_quantity - account.hours_qtt_non_invoiced res[account.id] = account.hours_quantity - account.hours_qtt_non_invoiced
@ -289,7 +287,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2)
return res return res
def _revenue_per_hour_calc(self, cr, uid, ids, name, arg, context={}): def _revenue_per_hour_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
for account in self.browse(cr, uid, ids): for account in self.browse(cr, uid, ids):
if account.hours_qtt_invoiced == 0: if account.hours_qtt_invoiced == 0:
@ -300,7 +298,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2)
return res return res
def _real_margin_rate_calc(self, cr, uid, ids, name, arg, context={}): def _real_margin_rate_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
for account in self.browse(cr, uid, ids): for account in self.browse(cr, uid, ids):
if account.ca_invoiced == 0: if account.ca_invoiced == 0:
@ -313,7 +311,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2)
return res return res
def _remaining_ca_calc(self, cr, uid, ids, name, arg, context={}): def _remaining_ca_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
for account in self.browse(cr, uid, ids): for account in self.browse(cr, uid, ids):
if account.amount_max != 0: if account.amount_max != 0:
@ -324,7 +322,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2)
return res return res
def _real_margin_calc(self, cr, uid, ids, name, arg, context={}): def _real_margin_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
for account in self.browse(cr, uid, ids): for account in self.browse(cr, uid, ids):
res[account.id] = account.ca_invoiced + account.total_cost res[account.id] = account.ca_invoiced + account.total_cost
@ -332,7 +330,7 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2) res[id] = round(res.get(id, 0.0),2)
return res return res
def _theorical_margin_calc(self, cr, uid, ids, name, arg, context={}): def _theorical_margin_calc(self, cr, uid, ids, name, arg, context=None):
res = {} res = {}
for account in self.browse(cr, uid, ids): for account in self.browse(cr, uid, ids):
res[account.id] = account.ca_theorical + account.total_cost res[account.id] = account.ca_theorical + account.total_cost
@ -426,6 +424,7 @@ class account_analytic_account_summary_user(osv.osv):
string='Total Time'), string='Total Time'),
'user' : fields.many2one('res.users', 'User'), 'user' : fields.many2one('res.users', 'User'),
} }
def init(self, cr): def init(self, cr):
tools.sql.drop_view_if_exists(cr, 'account_analytic_analysis_summary_user') tools.sql.drop_view_if_exists(cr, 'account_analytic_analysis_summary_user')
cr.execute('CREATE OR REPLACE VIEW account_analytic_analysis_summary_user AS (' \ cr.execute('CREATE OR REPLACE VIEW account_analytic_analysis_summary_user AS (' \
@ -731,6 +730,5 @@ class account_analytic_account_summary_month(osv.osv):
account_analytic_account_summary_month() account_analytic_account_summary_month()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,7 +1,6 @@
<openerp> <openerp>
<data> <data>
<menuitem icon="terp-project" id="base.menu_main_pm" name="Project" sequence="10"/> <menuitem icon="terp-project" id="base.menu_main_pm" name="Project" sequence="10"/>
<!-- <menuitem id="next_id_71" name="Financial Project Management" parent="base.menu_main_pm" groups="account.group_account_invoice" sequence="20"/>-->
<menuitem id="menu_invoicing" name="Billing" parent="base.menu_main_pm" sequence="4"/> <menuitem id="menu_invoicing" name="Billing" parent="base.menu_main_pm" sequence="4"/>
<record id="action_hr_tree_invoiced_all" model="ir.actions.act_window"> <record id="action_hr_tree_invoiced_all" model="ir.actions.act_window">
@ -14,17 +13,6 @@
</record> </record>
<menuitem action="action_hr_tree_invoiced_all" id="menu_action_hr_tree_invoiced_all" parent="menu_invoicing"/> <menuitem action="action_hr_tree_invoiced_all" id="menu_action_hr_tree_invoiced_all" parent="menu_invoicing"/>
<record id="action_account_analytic_all" model="ir.actions.act_window">
<field name="name">All Analytic Accounts</field>
<field name="res_model">account.analytic.account</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="view_id" ref="account.view_account_analytic_account_list"/>
<field name="search_view_id" ref="account.view_account_analytic_account_search"/>
<field name="domain">[]</field>
</record>
<!-- <menuitem name="Analytic Accounts" action="action_account_analytic_all" id="menu_action_account_analytic_all" parent="next_id_71"/>-->
<record id="action_account_analytic_managed_overpassed" model="ir.actions.act_window"> <record id="action_account_analytic_managed_overpassed" model="ir.actions.act_window">
<field name="name">Overpassed Accounts</field> <field name="name">Overpassed Accounts</field>
<field name="res_model">account.analytic.account</field> <field name="res_model">account.analytic.account</field>

View File

@ -24,7 +24,6 @@
<field name="ca_invoiced"/> <field name="ca_invoiced"/>
<field name="ca_theorical"/> <field name="ca_theorical"/>
<newline/> <newline/>
<!-- <field name="old"/> -->
<field name="hours_quantity"/> <field name="hours_quantity"/>
<field name="hours_qtt_invoiced"/> <field name="hours_qtt_invoiced"/>
<field name="remaining_hours"/> <field name="remaining_hours"/>
@ -38,13 +37,12 @@
<separator colspan="4" string="Key dates"/> <separator colspan="4" string="Key dates"/>
<field name="last_invoice_date"/> <field name="last_invoice_date"/>
<field name="last_worked_invoiced_date"/> <field name="last_worked_invoiced_date"/>
<field name="last_worked_date"/> <field name="last_worked_date"/>
<separator colspan="4" string="To be invoiced"/> <separator colspan="4" string="To be invoiced"/>
<field name="hours_qtt_non_invoiced"/> <field name="hours_qtt_non_invoiced"/>
<field name="ca_to_invoice"/> <field name="ca_to_invoice"/>
</page> </page>
<page string="Stats by month"> <page string="Stats by month">
<field colspan="4" name="month_ids" nolabel="1"> <field colspan="4" name="month_ids" nolabel="1">
@ -81,20 +79,18 @@
</field> </field>
</field> </field>
</record> </record>
<record id="view_account_analytic_account_tree_c2c_3" model="ir.ui.view"> <record id="view_account_analytic_account_tree_c2c_3" model="ir.ui.view">
<field name="name">account.analytic.account.tree</field> <field name="name">account.analytic.account.tree</field>
<field name="model">account.analytic.account</field> <field name="model">account.analytic.account</field>
<field name="inherit_id" ref="account.view_account_analytic_account_list"/> <field name="inherit_id" ref="account.view_account_analytic_account_list"/>
<field name="type">tree</field> <field name="type">tree</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="date" position="before"> <field name="date" position="before">
<field name="last_invoice_date"/> <field name="last_invoice_date"/>
<field name="ca_to_invoice"/> <field name="ca_to_invoice"/>
</field> </field>
</field> </field>
</record> </record>
<record id="view_account_analytic_simplified" model="ir.ui.view"> <record id="view_account_analytic_simplified" model="ir.ui.view">
@ -110,7 +106,6 @@
<field name="remaining_hours"/> <field name="remaining_hours"/>
<field name="ca_to_invoice"/> <field name="ca_to_invoice"/>
<field name="last_invoice_date"/> <field name="last_invoice_date"/>
</tree> </tree>
</field> </field>
</record> </record>

View File

@ -20,4 +20,5 @@
############################################################################## ##############################################################################
import account_analytic_default import account_analytic_default
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,11 +19,10 @@
# #
############################################################################## ##############################################################################
{ {
'name': 'Account Analytic Default', 'name' : 'Account Analytic Default',
'version': '1.0', 'version' : '1.0',
'category': 'Generic Modules/Accounting', 'category' : 'Generic Modules/Accounting',
'description': """ 'description': """
Allows to automatically select analytic accounts based on criterions: Allows to automatically select analytic accounts based on criterions:
* Product * Product
@ -32,14 +31,15 @@ Allows to automatically select analytic accounts based on criterions:
* Company * Company
* Date * Date
""", """,
'author': 'Tiny', 'author' : 'Tiny',
'website': 'http://www.openerp.com', 'website' : 'http://www.openerp.com',
'depends': ['account', 'sale'], 'depends' : ['account', 'sale'],
'init_xml': [], 'init_xml' : [],
'update_xml': ['security/ir.model.access.csv', 'account_analytic_default_view.xml'], 'update_xml': ['security/ir.model.access.csv', 'account_analytic_default_view.xml'],
'demo_xml': [], 'demo_xml' : [],
'installable': True, 'installable': True,
'active': False, 'active': False,
'certificate': '0074229833581', 'certificate': '0074229833581',
} }
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,10 +19,10 @@
# #
############################################################################## ##############################################################################
from osv import fields,osv
from osv import orm
import time import time
from osv import fields,osv
class account_analytic_default(osv.osv): class account_analytic_default(osv.osv):
_name = 'account.analytic.default' _name = 'account.analytic.default'
_description = 'Analytic Distribution' _description = 'Analytic Distribution'
@ -38,7 +38,7 @@ class account_analytic_default(osv.osv):
'date_start': fields.date('Start Date'), 'date_start': fields.date('Start Date'),
'date_stop': fields.date('End Date'), 'date_stop': fields.date('End Date'),
} }
def account_get(self, cr, uid, product_id=None, partner_id=None, user_id=None, date=None, context={}): def account_get(self, cr, uid, product_id=None, partner_id=None, user_id=None, date=None, context=None):
domain = [] domain = []
if product_id: if product_id:
domain += ['|',('product_id','=',product_id)] domain += ['|',('product_id','=',product_id)]
@ -54,7 +54,9 @@ class account_analytic_default(osv.osv):
domain += ['|',('date_stop','>=',date),('date_stop','=',False)] domain += ['|',('date_stop','>=',date),('date_stop','=',False)]
best_index = -1 best_index = -1
res = False res = False
print "domain---",domain
for rec in self.browse(cr, uid, self.search(cr, uid, domain, context=context), context=context): for rec in self.browse(cr, uid, self.search(cr, uid, domain, context=context), context=context):
print "innn for--",rec
index = 0 index = 0
if rec.product_id: index+=1 if rec.product_id: index+=1
if rec.partner_id: index+=1 if rec.partner_id: index+=1
@ -64,6 +66,7 @@ class account_analytic_default(osv.osv):
if index>best_index: if index>best_index:
res = rec res = rec
best_index = index best_index = index
print "res--",res
return res return res
account_analytic_default() account_analytic_default()
@ -71,7 +74,7 @@ class account_invoice_line(osv.osv):
_inherit = 'account.invoice.line' _inherit = 'account.invoice.line'
_description = 'Invoice Line' _description = 'Invoice Line'
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition=False, price_unit=False, address_invoice_id=False, currency_id=False, context={}): def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition=False, price_unit=False, address_invoice_id=False, currency_id=False, context=None):
res_prod = super(account_invoice_line,self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition, price_unit, address_invoice_id, currency_id=currency_id, context=context) res_prod = super(account_invoice_line,self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition, price_unit, address_invoice_id, currency_id=currency_id, context=context)
rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context) rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context)
if rec: if rec:
@ -101,7 +104,7 @@ class sale_order_line(osv.osv):
_inherit = 'sale.order.line' _inherit = 'sale.order.line'
# Method overridden to set the analytic account by default on criterion match # Method overridden to set the analytic account by default on criterion match
def invoice_line_create(self, cr, uid, ids, context={}): def invoice_line_create(self, cr, uid, ids, context=None):
create_ids = super(sale_order_line,self).invoice_line_create(cr, uid, ids, context) create_ids = super(sale_order_line,self).invoice_line_create(cr, uid, ids, context)
if not ids: if not ids:
return create_ids return create_ids
@ -117,6 +120,4 @@ class sale_order_line(osv.osv):
sale_order_line() sale_order_line()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -52,6 +52,7 @@
</search> </search>
</field> </field>
</record> </record>
<record id="action_analytic_default_form" model="ir.actions.act_window"> <record id="action_analytic_default_form" model="ir.actions.act_window">
<field name="name">Analytic Defaults</field> <field name="name">Analytic Defaults</field>
<field name="res_model">account.analytic.default</field> <field name="res_model">account.analytic.default</field>
@ -59,10 +60,6 @@
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_account_analytic_default_form_search"/> <field name="search_view_id" ref="view_account_analytic_default_form_search"/>
</record> </record>
<!-- <menuitem-->
<!-- action="action_analytic_default_form"-->
<!-- id="menu_analytic_defaul_form"-->
<!-- parent="account.menu_analytic_accounting"/>-->
<act_window <act_window
name="Entries" name="Entries"

View File

@ -22,5 +22,6 @@
import account_analytic_plans import account_analytic_plans
import wizard import wizard
import report import report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -21,9 +21,9 @@
{ {
'name': 'Multiple-plans management in Analytic Accounting', 'name' : 'Multiple-plans management in Analytic Accounting',
'version': '1.0', 'version' : '1.0',
'category': 'Generic Modules/Accounting', 'category' : 'Generic Modules/Accounting',
'description': """This module allows to use several analytic plans, according to the general journal, 'description': """This module allows to use several analytic plans, according to the general journal,
so that multiple analytic lines are created when the invoice or the entries so that multiple analytic lines are created when the invoice or the entries
are confirmed. are confirmed.
@ -54,10 +54,10 @@ for one account entry.
The analytic plan validates the minimum and maximum percentage at the time of creation The analytic plan validates the minimum and maximum percentage at the time of creation
of distribution models. of distribution models.
""", """,
'author': 'Tiny', 'author' : 'Tiny',
'website': 'http://www.openerp.com', 'website' : 'http://www.openerp.com',
'depends': ['account', 'account_analytic_default'], 'depends' : ['account', 'account_analytic_default'],
'init_xml': [], 'init_xml' : [],
'update_xml': [ 'update_xml': [
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'account_analytic_plans_view.xml', 'account_analytic_plans_view.xml',
@ -65,9 +65,10 @@ of distribution models.
'wizard/analytic_plan_create_model_view.xml', 'wizard/analytic_plan_create_model_view.xml',
'wizard/account_crossovered_analytic_view.xml' 'wizard/account_crossovered_analytic_view.xml'
], ],
'demo_xml': [], 'demo_xml' : [],
'installable': True, 'installable': True,
'active': False, 'active' : False,
'certificate': '0036417675373', 'certificate': '0036417675373',
} }
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,15 +19,9 @@
# #
############################################################################## ##############################################################################
from lxml import etree from lxml import etree
from mx import DateTime
from mx.DateTime import now
import time import time
import netsvc from osv import fields, osv
from osv import fields, osv,orm
import ir
import tools import tools
from tools.translate import _ from tools.translate import _
@ -64,6 +58,7 @@ account_analytic_plan()
class account_analytic_plan_line(osv.osv): class account_analytic_plan_line(osv.osv):
_name = "account.analytic.plan.line" _name = "account.analytic.plan.line"
_description = "Analytic Plan Line" _description = "Analytic Plan Line"
_order = "sequence, id"
_columns = { _columns = {
'plan_id':fields.many2one('account.analytic.plan','Analytic Plan'), 'plan_id':fields.many2one('account.analytic.plan','Analytic Plan'),
'name': fields.char('Plan Name', size=64, required=True, select=True), 'name': fields.char('Plan Name', size=64, required=True, select=True),
@ -73,16 +68,15 @@ class account_analytic_plan_line(osv.osv):
'max_required': fields.float('Maximum Allowed (%)'), 'max_required': fields.float('Maximum Allowed (%)'),
} }
_defaults = { _defaults = {
'min_required': lambda *args: 100.0, 'min_required': 100.0,
'max_required': lambda *args: 100.0, 'max_required': 100.0,
} }
_order = "sequence,id"
account_analytic_plan_line() account_analytic_plan_line()
class account_analytic_plan_instance(osv.osv): class account_analytic_plan_instance(osv.osv):
_name='account.analytic.plan.instance' _name = 'account.analytic.plan.instance'
_description = 'Analytic Plan Instance' _description = 'Analytic Plan Instance'
_columns={ _columns = {
'name':fields.char('Analytic Distribution', size=64), 'name':fields.char('Analytic Distribution', size=64),
'code':fields.char('Distribution Code', size=16), 'code':fields.char('Distribution Code', size=16),
'journal_id': fields.many2one('account.analytic.journal', 'Analytic Journal' ), 'journal_id': fields.many2one('account.analytic.journal', 'Analytic Journal' ),
@ -116,7 +110,9 @@ class account_analytic_plan_instance(osv.osv):
'account4_ids':False, 'account5_ids':False, 'account6_ids':False}) 'account4_ids':False, 'account5_ids':False, 'account6_ids':False})
return super(account_analytic_plan_instance, self).copy(cr, uid, id, default, context) return super(account_analytic_plan_instance, self).copy(cr, uid, id, default, context)
def _default_journal(self, cr, uid, context={}): def _default_journal(self, cr, uid, context=None):
if not context:
context = {}
if context.has_key('journal_id') and context['journal_id']: if context.has_key('journal_id') and context['journal_id']:
journal = self.pool.get('account.journal').browse(cr, uid, context['journal_id']) journal = self.pool.get('account.journal').browse(cr, uid, context['journal_id'])
if journal.analytic_journal_id: if journal.analytic_journal_id:
@ -124,10 +120,10 @@ class account_analytic_plan_instance(osv.osv):
return False return False
_defaults = { _defaults = {
'plan_id': lambda *args: False, 'plan_id': False,
'journal_id': _default_journal, 'journal_id': _default_journal,
} }
def name_get(self, cr, uid, ids, context={}): def name_get(self, cr, uid, ids, context=None):
res = [] res = []
for inst in self.browse(cr, uid, ids, context): for inst in self.browse(cr, uid, ids, context):
name = inst.name or '/' name = inst.name or '/'
@ -207,7 +203,7 @@ class account_analytic_plan_instance(osv.osv):
return super(account_analytic_plan_instance, self).create(cr, uid, vals, context) return super(account_analytic_plan_instance, self).create(cr, uid, vals, context)
def write(self, cr, uid, ids, vals, context={}, check=True, update_check=True): def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True):
this = self.browse(cr, uid, ids[0]) this = self.browse(cr, uid, ids[0])
if this.plan_id and not vals.has_key('plan_id'): 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 #this instance is a model, so we have to create a new plan instance instead of modifying it
@ -237,9 +233,9 @@ class account_analytic_plan_instance_line(osv.osv):
'rate':fields.float('Rate (%)', required=True), 'rate':fields.float('Rate (%)', required=True),
} }
_defaults = { _defaults = {
'rate': lambda *args: 100.0 'rate': 100.0
} }
def name_get(self, cr, uid, ids, context={}): def name_get(self, cr, uid, ids, context=None):
if not len(ids): if not len(ids):
return [] return []
reads = self.read(cr, uid, ids, ['analytic_account_id'], context) reads = self.read(cr, uid, ids, ['analytic_account_id'], context)
@ -297,7 +293,7 @@ class account_move_line(osv.osv):
del(data['analytics_id']) del(data['analytics_id'])
return data return data
def create_analytic_lines(self, cr, uid, ids, context={}): def create_analytic_lines(self, cr, uid, ids, context=None):
super(account_move_line, self).create_analytic_lines(cr, uid, ids, context) super(account_move_line, self).create_analytic_lines(cr, uid, ids, context)
analytic_line_obj = self.pool.get('account.analytic.line') analytic_line_obj = self.pool.get('account.analytic.line')
for line in self.browse(cr, uid, ids, context): for line in self.browse(cr, uid, ids, context):
@ -333,7 +329,7 @@ class account_invoice(osv.osv):
_name = "account.invoice" _name = "account.invoice"
_inherit="account.invoice" _inherit="account.invoice"
def line_get_convert(self, cr, uid, x, part, date, context={}): def line_get_convert(self, cr, uid, x, part, date, context=None):
res=super(account_invoice,self).line_get_convert(cr, uid, x, part, date, context) res=super(account_invoice,self).line_get_convert(cr, uid, x, part, date, context)
res['analytics_id']=x.get('analytics_id',False) res['analytics_id']=x.get('analytics_id',False)
return res return res
@ -399,7 +395,7 @@ class sale_order_line(osv.osv):
_inherit = 'sale.order.line' _inherit = 'sale.order.line'
# Method overridden to set the analytic account by default on criterion match # Method overridden to set the analytic account by default on criterion match
def invoice_line_create(self, cr, uid, ids, context={}): def invoice_line_create(self, cr, uid, ids, context=None):
create_ids = super(sale_order_line,self).invoice_line_create(cr, uid, ids, context) create_ids = super(sale_order_line,self).invoice_line_create(cr, uid, ids, context)
if ids: if ids:
sale_line_obj = self.browse(cr, uid, ids[0], context) sale_line_obj = self.browse(cr, uid, ids[0], context)

View File

@ -11,13 +11,6 @@
auto="False" auto="False"
menu="False"/> menu="False"/>
<!--<wizard
id="account_analytic_account_inverted_balance_report"
string="Crossovered Analytic"
model="account.analytic.account"
name="wizard.crossovered.analytic"
keyword="client_print_multi"/>-->
</data> </data>
</openerp> </openerp>

View File

@ -89,7 +89,11 @@
<field name="code" select="1"/> <field name="code" select="1"/>
<field name="plan_id" required="True"/> <field name="plan_id" required="True"/>
<field name="journal_id"/> <field name="journal_id"/>
<field name="account_ids" string="Analytic Distribution" colspan="4"> <field name="account_ids" nolabel="1" colspan="4">
<form string="Analytic Distribution">
<field name="rate"/>
<field name="analytic_account_id"/>
</form>
<tree string="Analytic Distribution" editable="bottom"> <tree string="Analytic Distribution" editable="bottom">
<field name="rate"/> <field name="rate"/>
<field name="analytic_account_id"/> <field name="analytic_account_id"/>
@ -124,16 +128,11 @@
<act_window name="Distribution Models" <act_window name="Distribution Models"
domain="[('plan_id', '=', active_id),('plan_id','&lt;&gt;',False)]" domain="[('plan_id', '=', active_id),('plan_id','&lt;&gt;',False)]"
context="{'plan_id': active_id}" context="{'plan_id':active_id}"
res_model="account.analytic.plan.instance" res_model="account.analytic.plan.instance"
src_model="account.analytic.plan" src_model="account.analytic.plan"
id="account_analytic_instance_model_open"/> id="account_analytic_instance_model_open"/>
<!-- <menuitem-->
<!-- name="Analytic Distribution's models" parent="account.account_def_analytic_journal"-->
<!-- id="menu_account_analytic_plan_instance_action"-->
<!-- action="account_analytic_plan_instance_action"/>-->
<record model="ir.ui.view" id="account_analytic_plan_instance_line_form"> <record model="ir.ui.view" id="account_analytic_plan_instance_line_form">
<field name="name">account.analytic.plan.instance.line.form</field> <field name="name">account.analytic.plan.instance.line.form</field>
<field name="model">account.analytic.plan.instance.line</field> <field name="model">account.analytic.plan.instance.line</field>
@ -234,7 +233,7 @@
</field> </field>
</record> </record>
<!-- add property field on product --> <!-- add property field on default analytic account-->
<record model="ir.ui.view" id="view_default_inherit_form"> <record model="ir.ui.view" id="view_default_inherit_form">
<field name="name">account.analytic.default.form.plans</field> <field name="name">account.analytic.default.form.plans</field>

View File

@ -20,5 +20,6 @@
############################################################################## ##############################################################################
import crossovered_analytic import crossovered_analytic
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,20 +19,20 @@
# #
############################################################################## ##############################################################################
import pooler
import time import time
from report import report_sxw from report import report_sxw
class crossovered_analytic(report_sxw.rml_parse): class crossovered_analytic(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context): def __init__(self, cr, uid, name, context):
super(crossovered_analytic, self).__init__(cr, uid, name, context=context) super(crossovered_analytic, self).__init__(cr, uid, name, context = context)
self.localcontext.update( { self.localcontext.update( {
'time': time, 'time': time,
'lines': self._lines, 'lines': self._lines,
'ref_lines' : self._ref_lines, 'ref_lines' : self._ref_lines,
'find_children':self.find_children, 'find_children':self.find_children,
}) })
self.base_amount=0.00 self.base_amount = 0.00
def find_children(self,ref_ids): def find_children(self,ref_ids):
to_return_ids = [] to_return_ids = []
@ -153,23 +153,23 @@ class crossovered_analytic(report_sxw.rml_parse):
if not form['empty_line']: if not form['empty_line']:
res.append(result) res.append(result)
else: else:
result={} result = {}
res=[] res = []
result['id']=acc_id result['id'] = acc_id
data_account = acc_pool.browse(self.cr,self.uid,acc_id) data_account = acc_pool.browse(self.cr,self.uid,acc_id)
result['acc_name']=data_account.name result['acc_name'] = data_account.name
result['code'] = data_account.code result['code'] = data_account.code
result['amt']=result['qty']=result['perc']=0.00 result['amt'] = result['qty'] = result['perc'] = 0.00
if not form['empty_line']: if not form['empty_line']:
res.append(result) res.append(result)
for item in res: for item in res:
obj_acc=acc_pool.name_get(self.cr,self.uid,[item['id']]) obj_acc = acc_pool.name_get(self.cr,self.uid,[item['id']])
item['acc_name']=obj_acc[0][1] item['acc_name'] = obj_acc[0][1]
final.append(item) final.append(item)
return final return final
report_sxw.report_sxw('report.account.analytic.account.crossovered.analytic', 'account.analytic.account', 'addons/account_analytic_plans/report/crossovered_analytic.rml',parser=crossovered_analytic, header=False) report_sxw.report_sxw('report.account.analytic.account.crossovered.analytic', 'account.analytic.account', 'addons/account_analytic_plans/report/crossovered_analytic.rml',parser = crossovered_analytic, header = False)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -21,5 +21,6 @@
import analytic_plan_create_model import analytic_plan_create_model
import account_crossovered_analytic import account_crossovered_analytic
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -8,17 +8,19 @@
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Crossovered Analytic"> <form string="Crossovered Analytic">
<group col="4" colspan="6"> <group height="280" width="300">
<field name="date1"/> <group col="4" colspan="6">
<field name="date2"/> <field name="date1"/>
<field name="ref" colspan="4"/> <field name="date2"/>
<field name="journal_ids" colspan="4"/> <field name="ref" colspan="4"/>
<field name="empty_line"/> <field name="journal_ids" colspan="4"/>
</group> <field name="empty_line"/>
<separator colspan="4"/> </group>
<group col="2" colspan="4"> <separator colspan="4"/>
<button special="cancel" string="Cancel" icon='gtk-cancel'/> <group col="2" colspan="4">
<button name="print_report" string="Print" colspan="1" type="object" icon="gtk-print"/> <button special="cancel" string="Cancel" icon='gtk-cancel'/>
<button name="print_report" string="Print" colspan="1" type="object" icon="gtk-print"/>
</group>
</group> </group>
</form> </form>
</field> </field>