modify account_budget_crossover
- becaz all referece of budget on account is moved to account_budget_crossover bzr revid: mra@tinyerp.com-20080911100228-kgdwn1f1xerxl126
This commit is contained in:
parent
ba1cc76ac7
commit
cf7a92483b
|
@ -7,7 +7,7 @@
|
|||
"category" : "Generic Modules/Accounting",
|
||||
"description": """This module allow accountants to manage analytic and crossovered budgets.
|
||||
|
||||
Once the Master Budgets and the Budgets defined (in Financial Management/Configuration/Budgets/), the Project Managers can set the planned amount on each Analytic Account.
|
||||
Once the Master Budgets and the Budgets defined (in Financial Management/Configuration/Budgets/), the Project Managers can set the planned amount on each Analytic Account.
|
||||
|
||||
The accountant has the possibility to see the total of amount planned for each Budget and Master Budget in order to ensure the total planned is not greater/lower than what he planned for this Budget/Master Budget. Each list of record can also be switched to a graphical view of it.
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
|||
"init_xml" : [],
|
||||
"demo_xml" : [],
|
||||
"update_xml" : [
|
||||
"security/ir.model.access.csv",
|
||||
"security/ir.model.access.csv","account_budget_wizard.xml",
|
||||
"crossovered_budget_view.xml","crossovered_budget_report.xml","crossovered_budget_workflow.xml"
|
||||
],
|
||||
"active": False,
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<wizard id="wizard_budget_spread" menu="False" model="account.budget.post" name="account.budget.spread" string="Spread amount"/>
|
||||
|
||||
<wizard id="wizard_budget_report" keyword="client_print_multi" model="account.budget.post" name="account.budget.report" string="Budget"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -10,6 +10,76 @@ import datetime
|
|||
def strToDate(dt):
|
||||
dt_date=datetime.date(int(dt[0:4]),int(dt[5:7]),int(dt[8:10]))
|
||||
return dt_date
|
||||
#moved from account/account.py
|
||||
# ---------------------------------------------------------
|
||||
# Budgets
|
||||
# ---------------------------------------------------------
|
||||
class account_budget_post(osv.osv):
|
||||
_name = 'account.budget.post'
|
||||
_description = 'Budget item'
|
||||
_columns = {
|
||||
'code': fields.char('Code', size=64, required=True),
|
||||
'name': fields.char('Name', size=256, required=True),
|
||||
'dotation_ids': fields.one2many('account.budget.post.dotation', 'post_id', 'Expenses'),
|
||||
'account_ids': fields.many2many('account.account', 'account_budget_rel', 'budget_id', 'account_id', 'Accounts'),
|
||||
'crossovered_budget_line': fields.one2many('crossovered.budget.lines', 'general_budget_id', 'Budget Lines'),
|
||||
}
|
||||
_defaults = {
|
||||
}
|
||||
|
||||
def spread(self, cr, uid, ids, fiscalyear_id=False, amount=0.0):
|
||||
dobj = self.pool.get('account.budget.post.dotation')
|
||||
for o in self.browse(cr, uid, ids):
|
||||
# delete dotations for this post
|
||||
dobj.unlink(cr, uid, dobj.search(cr, uid, [('post_id','=',o.id)]))
|
||||
|
||||
# create one dotation per period in the fiscal year, and spread the total amount/quantity over those dotations
|
||||
fy = self.pool.get('account.fiscalyear').browse(cr, uid, [fiscalyear_id])[0]
|
||||
num = len(fy.period_ids)
|
||||
for p in fy.period_ids:
|
||||
dobj.create(cr, uid, {'post_id': o.id, 'period_id': p.id, 'amount': amount/num})
|
||||
return True
|
||||
account_budget_post()
|
||||
|
||||
class account_budget_post_dotation(osv.osv):
|
||||
def _tot_planned(self, cr, uid, ids,name,args,context):
|
||||
res={}
|
||||
for line in self.browse(cr, uid, ids):
|
||||
if line.period_id:
|
||||
obj_period=self.pool.get('account.period').browse(cr, uid,line.period_id.id)
|
||||
|
||||
total_days=strToDate(obj_period.date_stop) - strToDate(obj_period.date_start)
|
||||
budget_id=line.post_id and line.post_id.id or False
|
||||
query="select id from crossovered_budget_lines where general_budget_id= '"+ str(budget_id) + "' AND (date_from >='" +obj_period.date_start +"' and date_from <= '"+obj_period.date_stop + "') OR (date_to >='" +obj_period.date_start +"' and date_to <= '"+obj_period.date_stop + "') OR (date_from <'" +obj_period.date_start +"' and date_to > '"+obj_period.date_stop + "')"
|
||||
cr.execute(query)
|
||||
res1=cr.fetchall()
|
||||
|
||||
tot_planned=0.00
|
||||
for record in res1:
|
||||
obj_lines = self.pool.get('crossovered.budget.lines').browse(cr, uid,record[0])
|
||||
count_days = min(strToDate(obj_period.date_stop),strToDate(obj_lines.date_to)) - max(strToDate(obj_period.date_start), strToDate(obj_lines.date_from))
|
||||
days_in_period = count_days.days +1
|
||||
count_days = strToDate(obj_lines.date_to) - strToDate(obj_lines.date_from)
|
||||
total_days_of_rec = count_days.days +1
|
||||
tot_planned += obj_lines.planned_amount/total_days_of_rec* days_in_period
|
||||
res[line.id]=tot_planned
|
||||
else:
|
||||
res[line.id]=0.00
|
||||
return res
|
||||
|
||||
_name = 'account.budget.post.dotation'
|
||||
_description = "Budget item endowment"
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=64),
|
||||
'post_id': fields.many2one('account.budget.post', 'Item', select=True),
|
||||
'period_id': fields.many2one('account.period', 'Period'),
|
||||
# 'quantity': fields.float('Quantity', digits=(16,2)),
|
||||
'amount': fields.float('Amount', digits=(16,2)),
|
||||
'tot_planned':fields.function(_tot_planned,method=True, string='Total Planned Amount',type='float',store=True),
|
||||
}
|
||||
|
||||
account_budget_post_dotation()
|
||||
#===
|
||||
|
||||
class crossovered_budget(osv.osv):
|
||||
_name = "crossovered.budget"
|
||||
|
@ -138,48 +208,50 @@ class crossovered_budget_lines(osv.osv):
|
|||
}
|
||||
crossovered_budget_lines()
|
||||
|
||||
class account_budget_post(osv.osv):
|
||||
_name = 'account.budget.post'
|
||||
_inherit = 'account.budget.post'
|
||||
_columns = {
|
||||
'crossovered_budget_line': fields.one2many('crossovered.budget.lines', 'general_budget_id', 'Budget Lines'),
|
||||
}
|
||||
account_budget_post()
|
||||
|
||||
class account_budget_post_dotation(osv.osv):
|
||||
_name = 'account.budget.post.dotation'
|
||||
_inherit = 'account.budget.post.dotation'
|
||||
|
||||
def _tot_planned(self, cr, uid, ids,name,args,context):
|
||||
res={}
|
||||
for line in self.browse(cr, uid, ids):
|
||||
if line.period_id:
|
||||
obj_period=self.pool.get('account.period').browse(cr, uid,line.period_id.id)
|
||||
|
||||
total_days=strToDate(obj_period.date_stop) - strToDate(obj_period.date_start)
|
||||
budget_id=line.post_id and line.post_id.id or False
|
||||
query="select id from crossovered_budget_lines where general_budget_id= '"+ str(budget_id) + "' AND (date_from >='" +obj_period.date_start +"' and date_from <= '"+obj_period.date_stop + "') OR (date_to >='" +obj_period.date_start +"' and date_to <= '"+obj_period.date_stop + "') OR (date_from <'" +obj_period.date_start +"' and date_to > '"+obj_period.date_stop + "')"
|
||||
cr.execute(query)
|
||||
res1=cr.fetchall()
|
||||
|
||||
tot_planned=0.00
|
||||
for record in res1:
|
||||
obj_lines = self.pool.get('crossovered.budget.lines').browse(cr, uid,record[0])
|
||||
count_days = min(strToDate(obj_period.date_stop),strToDate(obj_lines.date_to)) - max(strToDate(obj_period.date_start), strToDate(obj_lines.date_from))
|
||||
days_in_period = count_days.days +1
|
||||
count_days = strToDate(obj_lines.date_to) - strToDate(obj_lines.date_from)
|
||||
total_days_of_rec = count_days.days +1
|
||||
tot_planned += obj_lines.planned_amount/total_days_of_rec* days_in_period
|
||||
res[line.id]=tot_planned
|
||||
else:
|
||||
res[line.id]=0.00
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'tot_planned':fields.function(_tot_planned,method=True, string='Total Planned Amount',type='float',store=True),
|
||||
}
|
||||
|
||||
account_budget_post_dotation()
|
||||
#class account_budget_post(osv.osv): #old code
|
||||
# _name = 'account.budget.post'
|
||||
# _inherit = 'account.budget.post'
|
||||
# _columns = {
|
||||
# 'crossovered_budget_line': fields.one2many('crossovered.budget.lines', 'general_budget_id', 'Budget Lines'),
|
||||
# }
|
||||
#account_budget_post()
|
||||
#
|
||||
#class account_budget_post_dotation(osv.osv):
|
||||
# _name = 'account.budget.post.dotation'
|
||||
# _inherit = 'account.budget.post.dotation'
|
||||
#
|
||||
# def _tot_planned(self, cr, uid, ids,name,args,context):
|
||||
# res={}
|
||||
# for line in self.browse(cr, uid, ids):
|
||||
# if line.period_id:
|
||||
# obj_period=self.pool.get('account.period').browse(cr, uid,line.period_id.id)
|
||||
#
|
||||
# total_days=strToDate(obj_period.date_stop) - strToDate(obj_period.date_start)
|
||||
# budget_id=line.post_id and line.post_id.id or False
|
||||
# query="select id from crossovered_budget_lines where general_budget_id= '"+ str(budget_id) + "' AND (date_from >='" +obj_period.date_start +"' and date_from <= '"+obj_period.date_stop + "') OR (date_to >='" +obj_period.date_start +"' and date_to <= '"+obj_period.date_stop + "') OR (date_from <'" +obj_period.date_start +"' and date_to > '"+obj_period.date_stop + "')"
|
||||
# cr.execute(query)
|
||||
# res1=cr.fetchall()
|
||||
#
|
||||
# tot_planned=0.00
|
||||
# for record in res1:
|
||||
# obj_lines = self.pool.get('crossovered.budget.lines').browse(cr, uid,record[0])
|
||||
# count_days = min(strToDate(obj_period.date_stop),strToDate(obj_lines.date_to)) - max(strToDate(obj_period.date_start), strToDate(obj_lines.date_from))
|
||||
# days_in_period = count_days.days +1
|
||||
# count_days = strToDate(obj_lines.date_to) - strToDate(obj_lines.date_from)
|
||||
# total_days_of_rec = count_days.days +1
|
||||
# tot_planned += obj_lines.planned_amount/total_days_of_rec* days_in_period
|
||||
# res[line.id]=tot_planned
|
||||
# else:
|
||||
# res[line.id]=0.00
|
||||
# return res
|
||||
#
|
||||
# _columns = {
|
||||
# 'tot_planned':fields.function(_tot_planned,method=True, string='Total Planned Amount',type='float',store=True),
|
||||
# }
|
||||
#
|
||||
#account_budget_post_dotation()
|
||||
|
||||
class account_analytic_account(osv.osv):
|
||||
_name = 'account.analytic.account'
|
||||
|
@ -191,6 +263,52 @@ class account_analytic_account(osv.osv):
|
|||
|
||||
account_analytic_account()
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# moved from account/project/project.py
|
||||
# ---------------------------------------------------------
|
||||
# Budgets
|
||||
# ---------------------------------------------------------
|
||||
|
||||
#class account_analytic_budget_post(osv.osv):
|
||||
# _name = 'account.analytic.budget.post'
|
||||
# _description = 'Budget item'
|
||||
# _columns = {
|
||||
# 'code': fields.char('Code', size=64, required=True),
|
||||
# 'name': fields.char('Name', size=256, required=True),
|
||||
# 'sens': fields.selection( [('charge','Charge'), ('produit','Product')], 'Direction', required=True),
|
||||
# 'dotation_ids': fields.one2many('account.analytic.budget.post.dotation', 'post_id', 'Expenses'),
|
||||
# 'account_ids': fields.many2many('account.analytic.account', 'account_analytic_budget_rel', 'budget_id', 'account_id', 'Accounts'),
|
||||
# }
|
||||
# _defaults = {
|
||||
# 'sens': lambda *a: 'produit',
|
||||
# }
|
||||
#
|
||||
# def spread(self, cr, uid, ids, fiscalyear_id=False, quantity=0.0, amount=0.0):
|
||||
#
|
||||
# dobj = self.pool.get('account.analytic.budget.post.dotation')
|
||||
# for o in self.browse(cr, uid, ids):
|
||||
# # delete dotations for this post
|
||||
# dobj.unlink(cr, uid, dobj.search(cr, uid, [('post_id','=',o.id)]))
|
||||
#
|
||||
# # create one dotation per period in the fiscal year, and spread the total amount/quantity over those dotations
|
||||
# fy = self.pool.get('account.fiscalyear').browse(cr, uid, [fiscalyear_id])[0]
|
||||
# num = len(fy.period_ids)
|
||||
# for p in fy.period_ids:
|
||||
# dobj.create(cr, uid, {'post_id': o.id, 'period_id': p.id, 'quantity': quantity/num, 'amount': amount/num})
|
||||
# return True
|
||||
#account_analytic_budget_post()
|
||||
#
|
||||
#class account_analytic_budget_post_dotation(osv.osv):
|
||||
# _name = 'account.analytic.budget.post.dotation'
|
||||
# _description = "Budget item endowment"
|
||||
# _columns = {
|
||||
# 'name': fields.char('Name', size=64),
|
||||
# 'post_id': fields.many2one('account.analytic.budget.post', 'Item', select=True),
|
||||
# 'period_id': fields.many2one('account.period', 'Period'),
|
||||
# 'quantity': fields.float('Quantity', digits=(16,2)),
|
||||
# 'amount': fields.float('Amount', digits=(16,2)),
|
||||
# }
|
||||
#account_analytic_budget_post_dotation()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -40,5 +40,15 @@
|
|||
rml="account_budget_crossover/report/analytic_account_budget_report.rml"
|
||||
auto="False"
|
||||
menu="False"/>
|
||||
|
||||
<!-- moved from account module -->
|
||||
<report auto="False"
|
||||
id="account_budget"
|
||||
menu="False"
|
||||
model="account.budget.post"
|
||||
name="account.budget"
|
||||
rml="account/report/budget_report.rml"
|
||||
string="Print Budget"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -1,6 +1,164 @@
|
|||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- budget form and tree view from account module *********************************** -->
|
||||
<record id="action_account_budget_post_tree" model="ir.actions.act_window">
|
||||
<field name="name">Budgets</field>
|
||||
<field name="res_model">account.budget.post</field>
|
||||
<field name="view_type">tree</field>
|
||||
</record>
|
||||
<menuitem action="action_account_budget_post_tree" id="menu_action_account_budget_post_tree" parent="account.menu_finance_reporting"/>
|
||||
|
||||
<!--
|
||||
Budgets
|
||||
-->
|
||||
<!--<record id="view_budget_post_form" model="ir.ui.view">
|
||||
<field name="name">account.budget.post.form</field>
|
||||
<field name="model">account.budget.post</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Master Budget">
|
||||
<notebook>
|
||||
<page string="Definition">
|
||||
<field name="code" select="1"/>
|
||||
<field name="name" select="1"/>
|
||||
</page>
|
||||
<page string="Dotations">
|
||||
<button name="%(wizard_budget_spread)d" string="Spread" type="action"/>
|
||||
<field colspan="4" name="dotation_ids" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Accounts">
|
||||
<field colspan="4" name="account_ids" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</record>-->
|
||||
<record id="view_budget_post_tree" model="ir.ui.view">
|
||||
<field name="name">account.budget.post.tree</field>
|
||||
<field name="model">account.budget.post</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Master Budget">
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_budget_post_dotation_form" model="ir.ui.view">
|
||||
<field name="name">account.budget.post.dotation.form</field>
|
||||
<field name="model">account.budget.post.dotation</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Master Budget Expenses">
|
||||
<field name="period_id"/>
|
||||
<field name="amount"/>
|
||||
<field name="tot_planned" />
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_budget_post_dotation_tree" model="ir.ui.view">
|
||||
<field name="name">account.budget.post.dotation.tree</field>
|
||||
<field name="model">account.budget.post.dotation</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Master Budget Expenses">
|
||||
<field name="period_id"/>
|
||||
<field name="amount"/>
|
||||
<field name="tot_planned" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="open_budget_post_form" model="ir.actions.act_window">
|
||||
<field name="name">Master Budgets</field>
|
||||
<field name="res_model">account.budget.post</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="view_budget_post_tree"/>
|
||||
</record>
|
||||
<menuitem id="next_id_31" name="Budgets" parent="account.menu_finance_accounting"/><menuitem action="open_budget_post_form" id="menu_budget_post_form" parent="next_id_31"/>
|
||||
|
||||
<!-- ******************************************************************************************************** -->
|
||||
<!--<record model="ir.ui.view" id="view_budget_post_dotation_form_inherit">
|
||||
<field name="name">account.budget.post.dotation.form.inherit</field>
|
||||
<field name="type">form</field>
|
||||
<field name="model">account.budget.post.dotation</field>
|
||||
<field name="inherit_id" ref="account.view_budget_post_dotation_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="period_id" position="after">
|
||||
<field name="tot_planned" />
|
||||
</field>
|
||||
</field>
|
||||
</record>-->
|
||||
|
||||
<!--<record model="ir.ui.view" id="view_budget_post_dotation_tree_inherit">
|
||||
<field name="name">account.budget.post.dotation.tree.inherit</field>
|
||||
<field name="model">account.budget.post.dotation</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="inherit_id" ref="account.view_budget_post_dotation_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="amount" position="after">
|
||||
<field name="tot_planned" />
|
||||
</field>
|
||||
</field>
|
||||
</record>-->
|
||||
|
||||
<!--<record model="ir.ui.view" id="account.view_budget_post_form">-->
|
||||
<record model="ir.ui.view" id="view_budget_post_form">
|
||||
<field name="name">account.budget.post.form.inherit</field>
|
||||
<field name="model">account.budget.post</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Master Budget">
|
||||
<notebook>
|
||||
<page string="Definition">
|
||||
<field name="code" select="1"/>
|
||||
<field name="name" select="1"/>
|
||||
</page>
|
||||
<page string="Dotations">
|
||||
<button string="Spread" name="%(wizard_budget_spread)d" type="action"/>
|
||||
<field name="dotation_ids" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Accounts">
|
||||
<field name="account_ids" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Budget Lines">
|
||||
<field name="crossovered_budget_line" widget="one2many_list" colspan="4" nolabel="1" mode="tree,graph">
|
||||
<graph type="bar" string="Lines">
|
||||
<field name="analytic_account_id" />
|
||||
<field name="general_budget_id" operator="+" />
|
||||
<field name="planned_amount" operator="+"/>
|
||||
<field group="True" name="general_budget_id"/>
|
||||
</graph>
|
||||
<tree string="Budget Lines" editable="top">
|
||||
<field name="crossovered_budget_id"/>
|
||||
<field name="analytic_account_id"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
<field name="paid_date"/>
|
||||
<field name="planned_amount"/>
|
||||
<field name="practical_amount" select="1"/>
|
||||
<field name="theoritical_amount"/>
|
||||
<field name="percentage"/>
|
||||
</tree>
|
||||
<form string="Budget Lines">
|
||||
<field name="crossovered_budget_id"/>
|
||||
<field name="analytic_account_id"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
<field name="paid_date"/>
|
||||
<field name="planned_amount"/>
|
||||
<field name="practical_amount" select="1"/>
|
||||
<field name="theoritical_amount"/>
|
||||
<field name="percentage"/>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<!-- =================== -->
|
||||
<record model="ir.ui.view" id="crossovered_budget_view_form">
|
||||
<field name="name">crossovered.budget.view.form</field>
|
||||
<field name="model">crossovered.budget</field>
|
||||
|
@ -69,7 +227,7 @@
|
|||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="crossovered_budget_view_tree"/>
|
||||
</record>
|
||||
<menuitem parent="account.next_id_31"
|
||||
<menuitem parent="next_id_31"
|
||||
id="menu_act_crossovered_budget_view"
|
||||
action="act_crossovered_budget_view" />
|
||||
|
||||
|
@ -119,7 +277,7 @@
|
|||
<field name="view_id" ref="view_crossovered_budget_line_tree"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Budgets" parent="account.menu_action_account_budget_post_tree"
|
||||
<menuitem name="Budgets" parent="menu_action_account_budget_post_tree"
|
||||
id="menu_financial_reporting_budget_budget"/>
|
||||
<menuitem name="Entries" parent="menu_financial_reporting_budget_budget"
|
||||
id="menu_financial_reporting_budget_budget_entries"/>
|
||||
|
@ -134,84 +292,6 @@
|
|||
src_model="account.analytic.account"
|
||||
id="act_account_analytic_account_cb_lines"/>
|
||||
|
||||
<!--<record model="ir.ui.view" id="view_budget_post_dotation_form_inherit">
|
||||
<field name="name">account.budget.post.dotation.form.inherit</field>
|
||||
<field name="type">form</field>
|
||||
<field name="model">account.budget.post.dotation</field>
|
||||
<field name="inherit_id" ref="account.view_budget_post_dotation_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="period_id" position="after">
|
||||
<field name="tot_planned" />
|
||||
</field>
|
||||
</field>
|
||||
</record>-->
|
||||
|
||||
<record model="ir.ui.view" id="view_budget_post_dotation_tree_inherit">
|
||||
<field name="name">account.budget.post.dotation.tree.inherit</field>
|
||||
<field name="model">account.budget.post.dotation</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="inherit_id" ref="account.view_budget_post_dotation_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="amount" position="after">
|
||||
<field name="tot_planned" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="account.view_budget_post_form">
|
||||
<field name="name">account.budget.post.form.inherit</field>
|
||||
<field name="model">account.budget.post</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Master Budget">
|
||||
<notebook>
|
||||
<page string="Definition">
|
||||
<field name="code" select="1"/>
|
||||
<field name="name" select="1"/>
|
||||
</page>
|
||||
<page string="Dotations">
|
||||
<button string="Spread" name="%(account.wizard_budget_spread)d" type="action"/>
|
||||
<field name="dotation_ids" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Accounts">
|
||||
<field name="account_ids" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Budget Lines">
|
||||
<field name="crossovered_budget_line" widget="one2many_list" colspan="4" nolabel="1" mode="tree,graph">
|
||||
<graph type="bar" string="Lines">
|
||||
<field name="analytic_account_id" />
|
||||
<field name="general_budget_id" operator="+" />
|
||||
<field name="planned_amount" operator="+"/>
|
||||
<field group="True" name="general_budget_id"/>
|
||||
</graph>
|
||||
<tree string="Budget Lines" editable="top">
|
||||
<field name="crossovered_budget_id"/>
|
||||
<field name="analytic_account_id"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
<field name="paid_date"/>
|
||||
<field name="planned_amount"/>
|
||||
<field name="practical_amount" select="1"/>
|
||||
<field name="theoritical_amount"/>
|
||||
<field name="percentage"/>
|
||||
</tree>
|
||||
<form string="Budget Lines">
|
||||
<field name="crossovered_budget_id"/>
|
||||
<field name="analytic_account_id"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
<field name="paid_date"/>
|
||||
<field name="planned_amount"/>
|
||||
<field name="practical_amount" select="1"/>
|
||||
<field name="theoritical_amount"/>
|
||||
<field name="percentage"/>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_account_analytic_account_form_inherit_cci">
|
||||
<field name="name">account.analytic.account.form.inherot.cci</field>
|
||||
|
@ -249,6 +329,16 @@
|
|||
</notebook>
|
||||
</field>
|
||||
</record>
|
||||
<!-- moved from account module -->
|
||||
<!--Budget -->
|
||||
<!--<report
|
||||
id="account_analytic_budget_print"
|
||||
string="Print Budget"
|
||||
model="account.analytic.budget.post"
|
||||
name="account.analytic.budget.print"
|
||||
rml="account/project/report/account_analytic_budget_report.rml"
|
||||
auto="False"
|
||||
menu="False"/>-->
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
import crossovered_budget_report
|
||||
import analytic_account_budget_report
|
||||
import budget_report
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2004-2008 TINY SPRL. (http://tiny.be) All Rights Reserved.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsability of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# garantees and support are strongly adviced to contract a Free Software
|
||||
# Service Company
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import time
|
||||
from report import report_sxw
|
||||
import datetime
|
||||
import operator
|
||||
|
||||
class budget_report(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(budget_report, self).__init__(cr, uid, name, context)
|
||||
self.localcontext.update( {
|
||||
'lines': self.lines,
|
||||
'budget_total': self.budget_total,
|
||||
'post_total': self.post_total,
|
||||
'time': time,
|
||||
})
|
||||
|
||||
def post_total(self, post_obj, date1, date2):
|
||||
def str2date(date_str):
|
||||
return datetime.date.fromtimestamp(time.mktime(time.strptime(date_str, '%Y-%m-%d')))
|
||||
def interval(d1str, d2str):
|
||||
return (str2date(d2str) - str2date(d1str) + datetime.timedelta(days=1)).days
|
||||
prev = reduce(lambda x,d: x + d.amount, post_obj.dotation_ids, 0.0)
|
||||
period_days = interval(date1, date2)
|
||||
for d in post_obj.dotation_ids:
|
||||
i = interval(d.period_id.date_start, d.period_id.date_stop)
|
||||
total_days = reduce(lambda x,d: x+interval(d.period_id.date_start, d.period_id.date_stop), post_obj.dotation_ids, 0)
|
||||
achievements = reduce(lambda x,l: x+l['achievements'], self.lines(post_obj, date1, date2), 0.0)
|
||||
return [{'prev': prev, 'prev_period': prev * period_days / total_days, 'achievements': achievements}]
|
||||
|
||||
def budget_total(self, post_objs, date1, date2):
|
||||
res = {'prev': 0.0, 'prev_period': 0.0, 'achievements': 0.0}
|
||||
for post_obj in post_objs:
|
||||
r = self.post_total(post_obj, date1, date2)[0]
|
||||
for k in r:
|
||||
res[k] += r[k]
|
||||
return [res]
|
||||
|
||||
def lines(self, post_obj, date1, date2):
|
||||
res = []
|
||||
for a in post_obj.account_ids:
|
||||
self.cr.execute("SELECT COALESCE(SUM(debit-credit), 0) FROM account_move_line WHERE account_id=%d AND date>=%s AND date<=%s and state<>'draft'", (a.id, date1, date2))
|
||||
achievements = float(self.cr.fetchone()[0]) * (post_obj.sens=='produit' and -1 or 1)
|
||||
res.append({'name': a.name, 'code': a.code, 'achievements': achievements})
|
||||
return res
|
||||
report_sxw.report_sxw('report.account.budget', 'account.budget.post', 'addons/account/report/budget_report.rml',parser=budget_report)
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,248 @@
|
|||
<?xml version="1.0"?>
|
||||
<document filename="test.pdf">
|
||||
<template pageSize="(612.0,792.0)" title="Test" author="Martin Simon" allowSplitting="20">
|
||||
<pageTemplate id="first">
|
||||
<frame id="first" x1="57.0" y1="57.0" width="498" height="678"/>
|
||||
</pageTemplate>
|
||||
</template>
|
||||
<stylesheet>
|
||||
<blockTableStyle id="Standard_Outline">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table2">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<blockBackground colorName="#e6e6e6" start="0,0" stop="0,0"/>
|
||||
<blockBackground colorName="#e6e6e6" start="1,0" stop="1,0"/>
|
||||
<blockBackground colorName="#e6e6e6" start="2,0" stop="2,0"/>
|
||||
<blockBackground colorName="#e6e6e6" start="0,1" stop="0,1"/>
|
||||
<blockBackground colorName="#e6e6e6" start="1,1" stop="1,1"/>
|
||||
<blockBackground colorName="#e6e6e6" start="2,1" stop="2,1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table5">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="GRID" colorName="black"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table8">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table9">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table10">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table7">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="GRID" colorName="black"/>
|
||||
</blockTableStyle>
|
||||
<initialize>
|
||||
<paraStyle name="all" alignment="justify"/>
|
||||
</initialize>
|
||||
<paraStyle name="P1" fontName="Times-Roman" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P2" fontName="Times-Bold" fontSize="20.0" leading="25" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P3" fontName="Times-Roman" fontSize="10.0" leading="13" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P4" fontName="Times-Roman" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P5" fontName="Times-Bold" fontSize="18.0" leading="22" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P6" fontName="Times-Roman" alignment="CENTER"/>
|
||||
<paraStyle name="P7" fontName="Times-BoldItalic" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P8" fontName="Times-Roman"/>
|
||||
<paraStyle name="P9" fontName="Times-Bold"/>
|
||||
<paraStyle name="P10" fontName="Times-Bold" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P11" fontName="Times-Bold" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P12" fontName="Times-Roman" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P13" fontName="Times-Roman" fontSize="10.0" leading="13" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P14" fontName="Times-Roman" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P15" fontName="Times-Bold" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P16" fontName="Times-Roman" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P17" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P18" fontName="Times-Bold" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Standard" fontName="Times-Roman"/>
|
||||
<paraStyle name="Text body" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="List" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Table Contents" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Table Heading" fontName="Times-Roman" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Caption" fontName="Times-Roman" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Index" fontName="Times-Roman"/>
|
||||
</stylesheet>
|
||||
<story>
|
||||
<blockTable colWidths="145.0,189.0,164.0" repeatRows="1" style="Table2">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P1">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P2">Budget Analysis</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P3">From [[ data['form']['date1'] ]]</para>
|
||||
<para style="P3">to [[ data['form']['date2'] ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P4">[[ company.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P5">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P3">Currency: <font face="Times-Roman" size="11.0">[[ company.currency_id.name ]]</font></para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="Standard">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="P6">Printing date: [[ time.strftime('%Y-%m-%d') ]] at [[ time.strftime('%H:%M:%S') ]]</para>
|
||||
<para style="P6">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="104.0,53.0,60.0,72.0,73.0,63.0,73.0" repeatRows="1" style="Table5">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P7">Budget item detail</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">Account Number</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">Budget</para>
|
||||
<para style="P7">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">Period Budget</para>
|
||||
<para style="P7">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">Performance</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">Spread</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">% performance</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<section>
|
||||
<para style="P8">[[ repeatIn(objects, 'o') ]]</para>
|
||||
<blockTable colWidths="75.0,424.0" style="Table8">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P9">[[ o.code ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P10">[[ o.name ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<blockTable colWidths="103.0,53.0,61.0,72.0,72.0,66.0,71.0" style="Table9">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P11">
|
||||
<font face="Times-Roman">[[ repeatIn(lines(o, data['form']['date1'], data['form']['date2']), 'a') ]] </font>
|
||||
<font face="Times-Roman">[[ a['name'] ]]</font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P12">[[ a['code'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P13">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P13">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P14">[[ '%.2f' % a['achievements'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P13">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P13">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<blockTable colWidths="156.0,61.0,72.0,72.0,66.0,70.0" style="Table10">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P15">Total [[ o.code ]]</para>
|
||||
<para style="Table Contents">[[ repeatIn( post_total(o, data['form']['date1'], data['form']['date2']), 'total') ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P16">[[ '%.2f' % total['prev'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P16">[[ '%.2f' % total['prev_period'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P16">[[ '%.2f' % total['achievements'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P16">[[ '%.2f' % (total['prev_period'] - total['achievements']) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P16">[[ total['prev_period'] and ('%.2f' % (total['achievements'] / total['prev_period'] * 100.0)) or 0.0]] %</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="Standard">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</section>
|
||||
<blockTable colWidths="156.0,61.0,72.0,72.0,67.0,68.0" style="Table7">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P17">Results</para>
|
||||
<para style="Table Contents">[[ repeatIn( budget_total(objects, data['form']['date1'], data['form']['date2']), 'total') ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P18">[[ '%.2f' % total['prev'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P18">[[ '%.2f' % total['prev_period'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P18">[[ '%.2f' % total['achievements'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P18">[[ '%.2f' % (total['prev_period'] - total['achievements']) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P18">[[ '%.2f' % (total['achievements'] / total['prev_period'] * 100.0) ]] %</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="Standard">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_crossovered_budget,crossovered.budget,model_crossovered_budget,account.group_account_manager,1,1,1,1
|
||||
access_crossovered_budget_lines,crossovered.budget.lines,model_crossovered_budget_lines,account.group_account_manager,1,1,1,1
|
||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_crossovered_budget","crossovered.budget","model_crossovered_budget","account.group_account_manager",1,1,1,1
|
||||
"access_crossovered_budget_lines","crossovered.budget.lines","model_crossovered_budget_lines","account.group_account_manager",1,1,1,1
|
||||
"access_account_budget_post","account.budget.post","model_account_budget_post","account.group_account_manager",1,1,1,1
|
||||
"access_account_budget_post_dotation","account.budget.post.dotation","model_account_budget_post_dotation","account.group_account_manager",1,1,1,1
|
||||
|
|
|
|
@ -2,5 +2,8 @@
|
|||
import wizard_crossovered_budget_report
|
||||
import wizard_analytic_account_budget
|
||||
import wizard_crossovered_budget_summary_report
|
||||
|
||||
import wizard_budget_spread
|
||||
import wizard_budget_report
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2004-2008 TINY SPRL. (http://tiny.be) All Rights Reserved.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsability of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# garantees and support are strongly adviced to contract a Free Software
|
||||
# Service Company
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import time
|
||||
import wizard
|
||||
|
||||
dates_form = '''<?xml version="1.0"?>
|
||||
<form string="Select period">
|
||||
<field name="date1"/>
|
||||
<field name="date2"/>
|
||||
</form>'''
|
||||
|
||||
dates_fields = {
|
||||
'date1': {'string':'Start of period', 'type':'date', 'required':True, 'default': lambda *a: time.strftime('%Y-01-01')},
|
||||
'date2': {'string':'End of period', 'type':'date', 'required':True, 'default': lambda *a: time.strftime('%Y-%m-%d')},
|
||||
}
|
||||
|
||||
class wizard_report(wizard.interface):
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [],
|
||||
'result': {'type':'form', 'arch':dates_form, 'fields':dates_fields, 'state':[('end','Cancel'),('report','Print')]}
|
||||
},
|
||||
'report': {
|
||||
'actions': [],
|
||||
'result': {'type':'print', 'report':'account.budget', 'state':'end'}
|
||||
}
|
||||
}
|
||||
wizard_report('account.budget.report')
|
||||
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2004-2008 TINY SPRL. (http://tiny.be) All Rights Reserved.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsability of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# garantees and support are strongly adviced to contract a Free Software
|
||||
# Service Company
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import wizard
|
||||
import netsvc
|
||||
|
||||
_spread_form = '''<?xml version="1.0"?>
|
||||
<form string="Spread">
|
||||
<field name="fiscalyear"/>
|
||||
<field name="amount"/>
|
||||
</form>'''
|
||||
|
||||
_spread_fields = {
|
||||
'fiscalyear': {'string':'Fiscal Year', 'type':'many2one', 'relation':'account.fiscalyear', 'required':True},
|
||||
'amount': {'string':'Amount', 'type':'float', 'digits':(16,2)},
|
||||
}
|
||||
|
||||
class wizard_budget_spread(wizard.interface):
|
||||
def _spread(self, cr, uid, data, context):
|
||||
service = netsvc.LocalService("object_proxy")
|
||||
form = data['form']
|
||||
res = service.execute(cr.dbname, uid, 'account.budget.post', 'spread', data['ids'], form['fiscalyear'], form['amount'])
|
||||
return {}
|
||||
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [],
|
||||
'result': {'type':'form', 'arch':_spread_form, 'fields':_spread_fields, 'state':[('end','Cancel'),('spread','Spread')]}
|
||||
},
|
||||
'spread': {
|
||||
'actions': [_spread],
|
||||
'result': {'type':'state', 'state':'end'}
|
||||
}
|
||||
}
|
||||
wizard_budget_spread('account.budget.spread')
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
Loading…
Reference in New Issue