merge multi_company, multi_company_account, multi_company_hr_timesheet_sheet, multi_company_product, multi_company_project, multi_company_purchase modules.

bzr revid: vra@tinyerp.com-20091110124920-qho0im1rrx3mf4sf
This commit is contained in:
vra 2009-11-10 18:19:20 +05:30
parent 1b0700fd2f
commit 80861660c6
27 changed files with 623 additions and 21 deletions

View File

@ -64,7 +64,8 @@
'project/project_demo.xml',
'project/analytic_account_demo.xml',
'demo/account_minimal.xml',
'account_unit_test.xml'
'account_unit_test.xml',
'demo/multi_company_demo.xml',
],
'installable': True,
'active': False,

View File

@ -478,7 +478,8 @@ class account_journal(osv.osv):
'groups_id': fields.many2many('res.groups', 'account_journal_group_rel', 'journal_id', 'group_id', 'Groups'),
'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'),
'entry_posted': fields.boolean('Skip \'Draft\' State for Created Entries', help='Check this box if you don\'t want new account moves to pass through the \'draft\' state and instead goes directly to the \'posted state\' without any manual validation.'),
'company_id': fields.related('default_credit_account_id','company_id',type='many2one', relation="res.company", string="Company"),
#'company_id': fields.related('default_credit_account_id','company_id',type='many2one', relation="res.company", string="Company"),
'company_id': fields.many2one('res.company', 'Company', required=True,select=1),
'invoice_sequence_id': fields.many2one('ir.sequence', 'Invoice Sequence', \
help="The sequence used for invoice numbers in this journal."),
}
@ -486,6 +487,7 @@ class account_journal(osv.osv):
_defaults = {
'active': lambda *a: 1,
'user_id': lambda self,cr,uid,context: uid,
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
def create(self, cr, uid, vals, context={}):
journal_id = super(account_journal, self).create(cr, uid, vals, context)
@ -520,7 +522,7 @@ class account_fiscalyear(osv.osv):
'name': fields.char('Fiscal Year', size=64, required=True),
'code': fields.char('Code', size=6, required=True),
'company_id': fields.many2one('res.company', 'Company',
help="Keep empty if the fiscal year belongs to several companies."),
help="Keep empty if the fiscal year belongs to several companies.", required=True),
'date_start': fields.date('Start Date', required=True),
'date_stop': fields.date('End Date', required=True),
'period_ids': fields.one2many('account.period', 'fiscalyear_id', 'Periods'),
@ -529,6 +531,7 @@ class account_fiscalyear(osv.osv):
_defaults = {
'state': lambda *a: 'draft',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
_order = "date_start"
@ -587,10 +590,12 @@ class account_period(osv.osv):
'date_start': fields.date('Start of Period', required=True, states={'done':[('readonly',True)]}),
'date_stop': fields.date('End of Period', required=True, states={'done':[('readonly',True)]}),
'fiscalyear_id': fields.many2one('account.fiscalyear', 'Fiscal Year', required=True, states={'done':[('readonly',True)]}, select=True),
'state': fields.selection([('draft','Draft'), ('done','Done')], 'Status', readonly=True)
'state': fields.selection([('draft','Draft'), ('done','Done')], 'Status', readonly=True),
'company_id': fields.many2one('res.company', 'Company', required=True)
}
_defaults = {
'state': lambda *a: 'draft',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
_order = "date_start"
@ -671,6 +676,7 @@ class account_journal_period(osv.osv):
'active': fields.boolean('Active', required=True),
'state': fields.selection([('draft','Draft'), ('printed','Printed'), ('done','Done')], 'Status', required=True, readonly=True),
'fiscalyear_id': fields.related('period_id', 'fiscalyear_id', string='Fiscal Year', type='many2one', relation='account.fiscalyear'),
'company_id' : fields.many2one('res.company', 'Company')
}
def _check(self, cr, uid, ids, context={}):
@ -699,6 +705,7 @@ class account_journal_period(osv.osv):
_defaults = {
'state': lambda *a: 'draft',
'active': lambda *a: True,
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
_order = "period_id"
@ -770,6 +777,7 @@ class account_move(osv.osv):
('journal_pur_voucher','Journal Purchase'),
('journal_voucher','Journal Voucher'),
],'Type', readonly=True, select=True, states={'draft':[('readonly',False)]}),
'company_id': fields.many2one('res.company', 'Company', required=True),
}
_defaults = {
'name': lambda *a: '/',
@ -777,6 +785,7 @@ class account_move(osv.osv):
'period_id': _get_period,
'type' : lambda *a : 'journal_voucher',
'date': lambda *a:time.strftime('%Y-%m-%d'),
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
def _check_centralisation(self, cursor, user, ids):

View File

@ -11,6 +11,7 @@
<field eval="'FY'+time.strftime('%Y')" name="code"/>
<field eval="time.strftime('%Y')+'-01-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-12-31'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<!--
@ -23,6 +24,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-01-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-01-31'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_2" model="account.period">
<field eval="'Feb.'+time.strftime('%Y')" name="name"/>
@ -30,6 +32,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-02-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-02-28'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_3" model="account.period">
<field eval="'Mar.'+time.strftime('%Y')" name="name"/>
@ -37,6 +40,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-03-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-03-31'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_4" model="account.period">
<field eval="'Apr.'+time.strftime('%Y')" name="name"/>
@ -44,6 +48,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-04-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-04-30'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_5" model="account.period">
<field eval="'May.'+time.strftime('%Y')" name="name"/>
@ -51,6 +56,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-05-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-05-31'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_6" model="account.period">
<field eval="'Jun.'+time.strftime('%Y')" name="name"/>
@ -58,6 +64,7 @@
<field eval="True" name="special"/>
<field eval="time.strftime('%Y')+'-06-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-06-30'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_7" model="account.period">
<field eval="'Jul.'+time.strftime('%Y')" name="name"/>
@ -65,6 +72,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-07-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-07-31'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_8" model="account.period">
<field eval="'Aug.'+time.strftime('%Y')" name="name"/>
@ -72,6 +80,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-08-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-08-31'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_9" model="account.period">
<field eval="'Sep.'+time.strftime('%Y')" name="name"/>
@ -79,6 +88,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-09-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-09-30'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_10" model="account.period">
<field eval="'Oct.'+time.strftime('%Y')" name="name"/>
@ -86,6 +96,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-10-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-10-31'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_11" model="account.period">
<field eval="'Nov.'+time.strftime('%Y')" name="name"/>
@ -93,6 +104,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-11-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-11-30'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
<record id="period_12" model="account.period">
<field eval="'Dec.'+time.strftime('%Y')" name="name"/>
@ -100,6 +112,7 @@
<field name="fiscalyear_id" ref="data_fiscalyear"/>
<field eval="time.strftime('%Y')+'-12-01'" name="date_start"/>
<field eval="time.strftime('%Y')+'-12-31'" name="date_stop"/>
<field name="company_id" ref="base.main_company"/>
</record>
</data>

View File

@ -52,7 +52,7 @@
<form string="Invoice Line">
<notebook>
<page string="Line">
<field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit)" select="1"/>
<field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.address_invoice_id, {'company_id': parent.company_id})"/>
<field name="uos_id"/>
<field name="quantity" select="1"/>
<field name="price_unit" select="1"/>
@ -117,6 +117,7 @@
<field name="name"/>
<field name="type"/>
<field name="number"/>
<field name="company_id"/>
<field name="partner_id" groups="base.group_user"/>
<field name="amount_untaxed" sum="Untaxed amount"/>
<field name="amount_total" sum="Total amount"/>
@ -141,7 +142,7 @@
<field domain="[('type', '=', 'purchase')]" name="journal_id" select="2"/>
<field name="type" readonly="1" select="2"/>
<field name="currency_id" on_change="onchange_currency_id(currency_id)" select="2"/>
<field name="partner_id" domain="[('supplier','=', 1)]" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank)" select="1" context="{'default_customer': 0}" />
<field name="partner_id" domain="[('supplier','=', 1)]" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank,company_id)" select="1" context="{'default_customer': 0}"/>
<field domain="[('partner_id','=',partner_id)]" name="address_invoice_id"/>
<field domain="[('type','&lt;&gt;','view'), ('company_id', '=', company_id),('journal_id','=',journal_id)]" name="account_id"/>
</group>
@ -154,7 +155,7 @@
<field name="check_total" required="2"/>
<field colspan="4" default_get="{'check_total': check_total, 'invoice_line': invoice_line, 'address_invoice_id': address_invoice_id, 'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False}" name="invoice_line" nolabel="1">
<tree string="Invoice lines" editable="top">
<field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.address_invoice_id)"/>
<field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.address_invoice_id, {'company_id': parent.company_id})"/>
<field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view')]" name="account_id" on_change="onchange_account_id(parent.fiscal_position,account_id)"/>
<field name="invoice_line_tax_id" view_mode="2" context="{'type':parent.type}" domain="[('parent_id','=',False)]"/>
<field domain="[('type','&lt;&gt;','view'), ('company_id', '=', parent.company_id)]" name="account_analytic_id"/>
@ -196,7 +197,7 @@
</group>
</page>
<page string="Other Info">
<field name="company_id" widget="selection"/>
<field name="company_id" on_change="onchange_company_id(company_id,partner_id,type,invoice_line)" widget="selection"/>
<field name="fiscal_position" groups="base.group_extended" widget="selection"/>
<newline/>
<field name="payment_term" widget="selection"/>
@ -242,7 +243,7 @@
<field name="journal_id" select="2" groups="base.group_user"/>
<field name="type" readonly="1" select="2"/>
<field name="number" select="1"/>
<field name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term)" select="1" groups="base.group_user"/>
<field name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank,company_id)" select="1" groups="base.group_user"/>
<field domain="[('partner_id','=',partner_id)]" name="address_invoice_id"/>
<field name="currency_id" on_change="onchange_currency_id(currency_id)" select="2"/>
<field name="date_invoice" select="1"/>
@ -287,7 +288,7 @@
</group>
</page>
<page string="Other Info">
<field name="company_id" widget="selection"/>
<field name="company_id" on_change="onchange_company_id(company_id,partner_id,type,invoice_line)" widget="selection"/>
<field name="fiscal_position" groups="base.group_extended,base.group_user" widget="selection"/>
<newline/>
<field name="date_due" select="1"/>

View File

@ -387,6 +387,7 @@ class account_move_line(osv.osv):
'analytic_account_id' : fields.many2one('account.analytic.account', 'Analytic Account'),
#TODO: remove this
'amount_taxed':fields.float("Taxed Amount",digits=(16,int(tools.config['price_accuracy']))),
'company_id': fields.many2one('res.company', 'Company', required=True,select=2),
}
@ -421,6 +422,7 @@ class account_move_line(osv.osv):
'currency_id': _get_currency,
'journal_id': lambda self, cr, uid, c: c.get('journal_id', False),
'period_id': lambda self, cr, uid, c: c.get('period_id', False),
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
_order = "date desc,id desc"
_sql_constraints = [

View File

@ -16,6 +16,7 @@
<field name="code" select="1"/>
<field name="date_start"/>
<field name="date_stop"/>
<field name="company_id"/>
<field name="end_journal_period_id"/>
<separator colspan="4" string="Periods"/>
<field colspan="4" name="period_ids" nolabel="1" widget="one2many_list">
@ -74,6 +75,7 @@
<field name="code" select="1"/>
<field name="date_start"/>
<field name="date_stop"/>
<field name="company_id"/>
<field name="fiscalyear_id"/>
<field name="special"/>
<separator colspan="4" string="States"/>
@ -166,6 +168,7 @@
<field name="debit"/>
<field name="credit"/>
<field name="balance"/>
<field name="company_id" />
<field name="company_currency_id"/>
<field name="type" invisible="1"/>
</tree>
@ -267,6 +270,7 @@
<field name="default_debit_account_id" attrs="{'required':[('type','=','cash')]}" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]"/>
<field name="default_credit_account_id" attrs="{'required':[('type','=','cash')]}" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]"/>
<field name="user_id" groups="base.group_extended"/>
<field name="company_id"/>
<newline/>
<field name="centralisation"/>
<field name="group_invoice_lines"/>
@ -710,7 +714,8 @@
<field name="debit" select="2"/>
<field name="credit" select="2"/>
<field name="company_id" required="1"/>
<separator colspan="4" string="Optional Information"/>
<field name="currency_id"/>
<field name="amount_currency"/>
@ -864,6 +869,7 @@
<field name="name" select="1" readonly="True"/>
<field name="period_id" select="2"/>
<field name="journal_id" select="1"/>
<field name="company_id" required="1"/>
<field name="date" select="1"/>
<field name="ref" select="1"/>
<field name="to_check" select="2"/>
@ -1101,6 +1107,7 @@
<field name="period_id"/>
<field name="journal_id"/>
<field name="state"/>
<field name="company_id"/>
</tree>
</field>
</record>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="second_partner" model="res.partner">
<field name="name">Tiny Editor</field>
</record>
<record id="second_company" model="res.company">
<field name="name">Tiny Editor</field>
<field name="partner_id" ref="base.main_partner"/>
<field name="parent_id" ref="base.main_company"/>
<field name="rml_header1">Free Business Solutions</field>
<field name="rml_footer1">Web: http://tiny.be - Tel: (+32).81.81.37.00 - Bank: CPH 126-2013269-07</field>
<field name="rml_footer2">IBAN: BE74 1262 0132 6907 - SWIFT: GKCCBEBB - VAT: BE0477.472.701</field>
<field name="currency_id" ref="base.EUR"/>
</record>
<record id="ter_partner" model="res.partner">
<field name="name">Tiny Integrator</field>
</record>
<record id="ter_company" model="res.company">
<field name="name">Tiny Integrator</field>
<field name="partner_id" ref="base.main_partner"/>
<field name="parent_id" ref="base.main_company"/>
<field name="rml_header1">Free Business Solutions</field>
<field name="rml_footer1">Web: http://tiny.be - Tel: (+32).81.81.37.00 - Bank: CPH 126-2013269-07</field>
<field name="rml_footer2">IBAN: BE74 1262 0132 6907 - SWIFT: GKCCBEBB - VAT: BE0477.472.701</field>
<field name="currency_id" ref="base.EUR"/>
</record>
</data>
</openerp>

View File

@ -334,9 +334,8 @@ class account_invoice(osv.osv):
# def get_invoice_address(self, cr, uid, ids):
# res = self.pool.get('res.partner').address_get(cr, uid, [part], ['invoice'])
# return [{}]
def onchange_partner_id(self, cr, uid, ids, type, partner_id,
date_invoice=False, payment_term=False, partner_bank_id=False):
date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False):
invoice_addr_id = False
contact_addr_id = False
partner_payment_term = False
@ -352,6 +351,26 @@ class account_invoice(osv.osv):
contact_addr_id = res['contact']
invoice_addr_id = res['invoice']
p = self.pool.get('res.partner').browse(cr, uid, partner_id)
if company_id:
if p.property_account_receivable.company_id.id != company_id and p.property_account_payable.company_id.id != company_id:
rec_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_receivable'),('res_id','=','res.partner,'+str(partner_id)+''),('company_id','=',company_id)])
pay_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_payable'),('res_id','=','res.partner,'+str(partner_id)+''),('company_id','=',company_id)])
if not rec_pro_id:
rec_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_receivable'),('company_id','=',company_id)])
if not pay_pro_id:
pay_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_payable'),('company_id','=',company_id)])
rec_line_data = self.pool.get('ir.property').read(cr,uid,rec_pro_id,['name','value','res_id'])
pay_line_data = self.pool.get('ir.property').read(cr,uid,pay_pro_id,['name','value','res_id'])
rec_res_id = rec_line_data and int(rec_line_data[0]['value'].split(',')[1]) or False
pay_res_id = pay_line_data and int(pay_line_data[0]['value'].split(',')[1]) or False
if not rec_res_id and not pay_res_id:
raise osv.except_osv(_('Configration Error !'),
_('Can not find account chart for this company, Please Create account.'))
rec_obj_acc=self.pool.get('account.account').browse(cr,uid,[rec_res_id])
pay_obj_acc=self.pool.get('account.account').browse(cr,uid,[pay_res_id])
p.property_account_receivable = rec_obj_acc[0]
p.property_account_payable = pay_obj_acc[0]
if type in ('out_invoice', 'out_refund'):
acc_id = p.property_account_receivable.id
else:
@ -372,6 +391,14 @@ class account_invoice(osv.osv):
if type in ('in_invoice', 'in_refund'):
result['value']['partner_bank'] = bank_id
if payment_term != partner_payment_term:
if partner_payment_term:
to_update = self.onchange_payment_term_date_invoice(
cr,uid,ids,partner_payment_term,date_invoice)
result['value'].update(to_update['value'])
else:
result['value']['date_due'] = False
if partner_bank_id != bank_id:
to_update = self.onchange_partner_bank(cr, uid, ids, bank_id)
@ -406,6 +433,61 @@ class account_invoice(osv.osv):
def onchange_partner_bank(self, cursor, user, ids, partner_bank_id):
return {'value': {}}
def onchange_company_id(self, cr, uid, ids, company_id, part_id, type, invoice_line):
val={}
dom={}
if company_id and part_id and type:
acc_id = False
partner_obj = self.pool.get('res.partner').browse(cr,uid,part_id)
if partner_obj.property_account_payable and partner_obj.property_account_receivable:
if partner_obj.property_account_payable.company_id.id != company_id and partner_obj.property_account_receivable.company_id.id != company_id:
rec_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_receivable'),('res_id','=','res.partner,'+str(part_id)+''),('company_id','=',company_id)])
pay_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_payable'),('res_id','=','res.partner,'+str(part_id)+''),('company_id','=',company_id)])
if not rec_pro_id:
rec_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_receivable'),('company_id','=',company_id)])
if not pay_pro_id:
pay_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_payable'),('company_id','=',company_id)])
rec_line_data = self.pool.get('ir.property').read(cr,uid,rec_pro_id,['name','value','res_id'])
pay_line_data = self.pool.get('ir.property').read(cr,uid,pay_pro_id,['name','value','res_id'])
rec_res_id = rec_line_data and int(rec_line_data[0]['value'].split(',')[1]) or False
pay_res_id = pay_line_data and int(pay_line_data[0]['value'].split(',')[1]) or False
if not rec_res_id and not rec_res_id:
raise osv.except_osv(_('Configration Error !'),
_('Can not find account chart for this company, Please Create account.'))
if type in ('out_invoice', 'out_refund'):
acc_id = rec_res_id
else:
acc_id = pay_res_id
val= {'account_id': acc_id}
if ids:
if company_id:
inv_obj = self.browse(cr,uid,ids)
for line in inv_obj[0].invoice_line:
if line.account_id:
if line.account_id.company_id.id != company_id:
result_id = self.pool.get('account.account').search(cr,uid,[('name','=',line.account_id.name),('company_id','=',company_id)])
if not result_id:
raise osv.except_osv(_('Configration Error !'),
_('Can not find account chart for this company in invoice line account, Please Create account.'))
r_id = self.pool.get('account.invoice.line').write(cr,uid,[line.id],{'account_id': result_id[0]})
else:
if invoice_line:
for inv_line in invoice_line:
obj_l = self.pool.get('account.account').browse(cr,uid,inv_line[2]['account_id'])
if obj_l.company_id.id != company_id:
raise osv.except_osv(_('Configration Error !'),
_('invoice line account company is not match with invoice company.'))
else:
continue
if company_id:
val['journal_id']=False
journal_ids=self.pool.get('account.journal').search(cr,uid,[('company_id','=',company_id)])
dom={'journal_id': [('id','in',journal_ids)]}
else:
journal_ids=self.pool.get('account.journal').search(cr,uid,[])
dom={'journal_id': [('id','in',journal_ids)]}
return {'value' : val, 'domain': dom }
# go from canceled state to draft state
def action_cancel_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state':'draft'})
@ -1014,13 +1096,14 @@ class account_invoice_line(osv.osv):
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, context=None):
if context is None:
context = {}
company_id = context.get('company_id',False)
if not partner_id:
raise osv.except_osv(_('No Partner Defined !'),_("You must first select a partner !") )
if not product:
if type in ('in_invoice', 'in_refund'):
return {'domain':{'product_uom':[]}}
return {'value': {'categ_id': False}, 'domain':{'product_uom':[]}}
else:
return {'value': {'price_unit': 0.0}, 'domain':{'product_uom':[]}}
return {'value': {'price_unit': 0.0, 'categ_id': False}, 'domain':{'product_uom':[]}}
part = self.pool.get('res.partner').browse(cr, uid, partner_id)
fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id) or False
@ -1028,6 +1111,61 @@ class account_invoice_line(osv.osv):
context.update({'lang': lang})
result = {}
res = self.pool.get('product.product').browse(cr, uid, product, context=context)
if company_id:
in_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_income'),('res_id','=','product.template,'+str(res.product_tmpl_id.id)+''),('company_id','=',company_id)])
if not in_pro_id:
in_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_income_categ'),('res_id','=','product.template,'+str(res.categ_id.id)+''),('company_id','=',company_id)])
exp_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_expense'),('res_id','=','product.template,'+str(res.product_tmpl_id.id)+''),('company_id','=',company_id)])
if not exp_pro_id:
exp_pro_id = self.pool.get('ir.property').search(cr,uid,[('name','=','property_account_expense_categ'),('res_id','=','product.template,'+str(res.categ_id.id)+''),('company_id','=',company_id)])
if not in_pro_id:
in_acc = res.product_tmpl_id.property_account_income
in_acc_cate = res.categ_id.property_account_income_categ
if in_acc:
app_acc_in = in_acc
else:
app_acc_in = in_acc_cate
else:
app_acc_in = self.pool.get('account.account').browse(cr,uid,in_pro_id)[0]
if not exp_pro_id:
ex_acc = res.product_tmpl_id.property_account_expense
ex_acc_cate = res.categ_id.property_account_expense_categ
if ex_acc:
app_acc_exp = ex_acc
else:
app_acc_exp = ex_acc_cate
else:
app_acc_exp = self.pool.get('account.account').browse(cr,uid,exp_pro_id)[0]
if not in_pro_id and not exp_pro_id:
in_acc = res.product_tmpl_id.property_account_income
in_acc_cate = res.categ_id.property_account_income_categ
ex_acc = res.product_tmpl_id.property_account_expense
ex_acc_cate = res.categ_id.property_account_expense_categ
if in_acc or ex_acc:
app_acc_in = in_acc
app_acc_exp = ex_acc
else:
app_acc_in = in_acc_cate
app_acc_exp = ex_acc_cate
# else:
# app_acc_in = self.pool.get('account.account').browse(cr,uid,in_pro_id)[0]
# app_acc_exp = self.pool.get('account.account').browse(cr,uid,exp_pro_id)[0]
if app_acc_in.company_id.id != company_id and app_acc_exp.company_id.id != company_id:
in_res_id=self.pool.get('account.account').search(cr,uid,[('name','=',app_acc_in.name),('company_id','=',company_id)])
exp_res_id=self.pool.get('account.account').search(cr,uid,[('name','=',app_acc_exp.name),('company_id','=',company_id)])
if not in_res_id and not exp_res_id:
raise osv.except_osv(_('Configration Error !'),
_('Can not find account chart for this company, Please Create account.'))
in_obj_acc=self.pool.get('account.account').browse(cr,uid,in_res_id)
exp_obj_acc=self.pool.get('account.account').browse(cr,uid,exp_res_id)
if in_acc or ex_acc:
res.product_tmpl_id.property_account_income = in_obj_acc[0]
res.product_tmpl_id.property_account_expense = exp_obj_acc[0]
else:
res.categ_id.property_account_income_categ = in_obj_acc[0]
res.categ_id.property_account_expense_categ = exp_obj_acc[0]
if type in ('out_invoice','out_refund'):
a = res.product_tmpl_id.property_account_income.id
@ -1065,6 +1203,9 @@ class account_invoice_line(osv.osv):
res2 = res.uom_id.category_id.id
if res2 :
domain = {'uos_id':[('category_id','=',res2 )]}
prod_pool=self.pool.get('product.product')
result['categ_id'] = res.categ_id.id
return {'value':result, 'domain':domain}
def move_line_get(self, cr, uid, invoice_id, context=None):

View File

@ -269,10 +269,12 @@ class account_analytic_journal(osv.osv):
'active' : fields.boolean('Active'),
'type': fields.selection([('sale','Sale'), ('purchase','Purchase'), ('cash','Cash'), ('general','General'), ('situation','Situation')], 'Type', size=32, required=True, help="Gives the type of the analytic journal. When a document (eg: an invoice) needs to create analytic entries, Open ERP will look for a matching journal of the same type."),
'line_ids' : fields.one2many('account.analytic.line', 'journal_id', 'Lines'),
'company_id': fields.many2one('res.company', 'Company', required=True),
}
_defaults = {
'active': lambda *a: True,
'type': lambda *a: 'general',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
account_analytic_journal()

View File

@ -258,6 +258,7 @@
<field name="code" select="1"/>
<field name="type" select="2"/>
<field name="active" select="2"/>
<field name="company_id"/>
</form>
</field>
</record>

View File

@ -36,4 +36,149 @@
<field eval="[(6,0,[ref('group_account_user'), ref('group_account_manager')])]" name="groups_id"/>
</record>
<record id="account_move_comp_rule_group" model="ir.rule.group">
<field name="name">Account Entry</field>
<field model="ir.model" name="model_id" search="[('model','=','account.move')]"/>
<field eval="True" name="global"/>
</record>
<record id="account_move_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.move'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="account_move_comp_rule_group"/>
</record>
<record id="account_move_line_comp_rule_group" model="ir.rule.group">
<field name="name">Entry lines</field>
<field model="ir.model" name="model_id" search="[('model','=','account.move.line')]"/>
<field eval="True" name="global"/>
</record>
<record id="account_move_line_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.move.line'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="account_move_line_comp_rule_group"/>
</record>
<record id="journal_period_comp_rule_group" model="ir.rule.group">
<field name="name">Journal Period</field>
<field model="ir.model" name="model_id" search="[('model','=','account.journal.period')]"/>
<field eval="True" name="global"/>
</record>
<record id="journal_period_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.journal.period'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="journal_period_comp_rule_group"/>
</record>
<record id="journal_comp_rule_group" model="ir.rule.group">
<field name="name">Journal multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.journal')]"/>
<field eval="True" name="global"/>
</record>
<record id="journal_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.journal'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="journal_comp_rule_group"/>
</record>
<record id="analytic_journal_comp_rule_group" model="ir.rule.group">
<field name="name">Analytic journal multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.analytic.journal')]"/>
<field eval="True" name="global"/>
</record>
<record id="analytic_journal_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.analytic.journal'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="analytic_journal_comp_rule_group"/>
</record>
<record id="analytic_journal_comp_rule_group1" model="ir.rule.group">
<field name="name">Analytic journal multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.analytic.journal')]"/>
<field eval="True" name="global"/>
</record>
<record id="analytic_journal_comp_rule_false" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.analytic.journal'),('name','=','company_id')]"/>
<field name="operator">=</field>
<field name="operand">False</field>
<field name="rule_group" ref="analytic_journal_comp_rule_group1"/>
</record>
<record id="period_comp_rule_group" model="ir.rule.group">
<field name="name">Period multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.period')]"/>
<field eval="True" name="global"/>
</record>
<record id="period_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.period'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="period_comp_rule_group"/>
</record>
<record id="fiscal_year_comp_rule_group" model="ir.rule.group">
<field name="name">Fiscal year multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.fiscalyear')]"/>
<field eval="True" name="global"/>
</record>
<record id="fiscal_year_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.fiscalyear'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="fiscal_year_comp_rule_group"/>
</record>
<record id="account_comp_rule_group" model="ir.rule.group">
<field name="name">Account multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.account')]"/>
<field eval="True" name="global"/>
</record>
<record id="account_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.account'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="account_comp_rule_group"/>
</record>
<record id="tax_comp_rule_group" model="ir.rule.group">
<field name="name">Tax multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.tax')]"/>
<field eval="True" name="global"/>
</record>
<record id="tax_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.tax'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="tax_comp_rule_group"/>
</record>
<record id="tax_code_comp_rule_group" model="ir.rule.group">
<field name="name">Tax code multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.tax.code')]"/>
<field eval="True" name="global"/>
</record>
<record id="tax_code_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.tax.code'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="tax_code_comp_rule_group"/>
</record>
<record id="invoice_comp_rule_group" model="ir.rule.group">
<field name="name">Invoice multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.invoice')]"/>
<field eval="True" name="global"/>
</record>
<record id="invoice_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.invoice'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="invoice_comp_rule_group"/>
</record>
</data></openerp>

View File

@ -60,7 +60,8 @@ def _action_open_window(self, cr, uid, data, context):
state = pooler.get_pool(cr.dbname).get('account.period').read(cr, uid, [form['period_id']])[0]['state']
if state == 'done':
raise wizard.except_wizard(_('UserError'), _('This period is already closed !'))
jp.create(cr, uid, {'name':name, 'period_id': form['period_id'], 'journal_id':form['journal_id']})
company = pooler.get_pool(cr.dbname).get('account.period').read(cr, uid, [form['period_id']])[0]['company_id'][0]
jp.create(cr, uid, {'name':name, 'period_id': form['period_id'], 'journal_id':form['journal_id'], 'company_id':company})
ids = jp.search(cr, uid, [('journal_id','=',form['journal_id']), ('period_id','=',form['period_id'])])
jp = jp.browse(cr, uid, ids, context=context)[0]
name = (jp.journal_id.code or '') + ':' + (jp.period_id.code or '')

View File

@ -49,6 +49,7 @@ Three reports are available:
'init_xml': [],
'update_xml': [
'security/ir.model.access.csv',
'security/account_budget_security.xml',
'account_budget_wizard.xml',
'crossovered_budget_view.xml',
'crossovered_budget_report.xml',

View File

@ -44,10 +44,12 @@ class account_budget_post(osv.osv):
'dotation_ids': fields.one2many('account.budget.post.dotation', 'post_id', 'Spreading'),
'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'),
'company_id': fields.many2one('res.company', 'Company', required=True),
'sequence': fields.integer('Sequence'),
}
_defaults = {
'sequence': lambda *a: 1,
'sequence': lambda *a: 1,
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
_order = "sequence, name"

View File

@ -22,6 +22,7 @@
<field name="sequence"/>
<field name="code"/>
<field name="name"/>
<field name="company_id"/>
</tree>
</field>
</record>
@ -68,6 +69,7 @@
<form string="Budgetary Position">
<field name="name" select="1"/>
<field name="code" select="1"/>
<field name="company_id"/>
<field name="sequence" select="2"/>
<notebook colspan="4">
<page string="Accounts">

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?><openerp><data noupdate="0">
<record id="budget_post_comp_rule_group" model="ir.rule.group">
<field name="name">Budget post multi-company</field>
<field model="ir.model" name="model_id" search="[('model','=','account.budget.post')]"/>
<field eval="True" name="global"/>
</record>
<record id="budget_post_comp_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.budget.post'),('name','=','company_id')]"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="budget_post_comp_rule_group"/>
</record>
<record id="budget_post_comp_rule_false" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','account.budget.post'),('name','=','company_id')]"/>
<field name="operator">=</field>
<field name="operand">False</field>
<field name="rule_group" ref="budget_post_comp_rule_group"/>
</record>
</data></openerp>

View File

@ -49,6 +49,7 @@ The validation can be configured in te company:
'init_xml': [],
'update_xml': [
'security/ir.model.access.csv',
'security/hr_timesheet_data.xml',
'hr_timesheet_sheet_view.xml',
'hr_timesheet_workflow.xml',
'process/hr_timesheet_sheet_process.xml'

View File

@ -239,6 +239,7 @@ class hr_timesheet_sheet(osv.osv):
'total_difference': fields.function(_total, method=True, string='Difference', multi="_total_sheet"),
'period_ids': fields.one2many('hr_timesheet_sheet.sheet.day', 'sheet_id', 'Period', readonly=True),
'account_ids': fields.one2many('hr_timesheet_sheet.sheet.account', 'sheet_id', 'Analytic accounts', readonly=True),
'company_id': fields.many2one('res.company', 'Company'),
}
def _default_date_from(self,cr, uid, context={}):
@ -269,6 +270,7 @@ class hr_timesheet_sheet(osv.osv):
'date_current' : lambda *a: time.strftime('%Y-%m-%d'),
'date_to' : _default_date_to,
'state': lambda *a: 'new',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id
}
def _sheet_date(self, cr, uid, ids):

View File

@ -87,7 +87,7 @@
<field name="user_id"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="company_id" select="1"/>
<notebook colspan="4">
<page string="Daily View">
<group col="6" colspan="4">

View File

@ -0,0 +1,18 @@
<?xml version="1.0"?>
<openerp>
<data>
<record model="ir.rule.group" id="timesheet_comp_rule_group">
<field name="name">Timesheet multi-company</field>
<field name="model_id" search="[('model','=','hr_timesheet_sheet.sheet')]" model="ir.model"/>
<field name="global" eval="True"/>
</record>
<record model="ir.rule" id="timesheet_comp_rule">
<field name="field_id" search="[('model','=','hr_timesheet_sheet.sheet'),('name','=','company_id')]" model="ir.model.fields"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="timesheet_comp_rule_group"/>
</record>
</data>
</openerp>

View File

@ -239,6 +239,33 @@ class product_template(osv.osv):
result[product.id] = 1
return result
def _calc_standard_price(self, cr, uid, ids, name, arg, context=None):
res = {}
company=self.pool.get('res.users').read(cr,uid,uid,['company_id'])['company_id']
company_cost_obj=self.pool.get('company.wise.cost.price')
for product in self.browse(cr, uid, ids, context=context):
company_cost_ids=company_cost_obj.search(cr,uid,[('company_id','=',company[0]),('product_id','=',product.id)])
if company_cost_ids:
company_cost_data=company_cost_obj.read(cr,uid,company_cost_ids,['standard_price'])
res[product.id]=company_cost_data[0]['standard_price']
else:
res[product.id]=1.0
return dict([(i, res[i]) for i in ids ])
def _calc_list_price(self, cr, uid, ids, name, arg, context=None):
res = {}
company=self.pool.get('res.users').read(cr,uid,uid,['company_id'])['company_id']
company_cost_obj=self.pool.get('company.wise.sale.price')
for product in self.browse(cr, uid, ids, context=context):
company_list_ids=company_cost_obj.search(cr,uid,[('company_id','=',company[0]),('product_id','=',product.id)])
if company_list_ids:
company_list_data=company_cost_obj.read(cr,uid,company_list_ids,['list_price'])
res[product.id]=company_list_data[0]['list_price']
else:
res[product.id]=1.0
return dict([(i, res[i]) for i in ids ])
_columns = {
'name': fields.char('Name', size=128, required=True, translate=True, select=True),
'product_manager': fields.many2one('res.users','Product Manager'),
@ -277,6 +304,11 @@ class product_template(osv.osv):
'loc_row': fields.char('Row', size=16),
'loc_case': fields.char('Case', size=16),
'company_id': fields.many2one('res.company', 'Company'),
'list_price_multi': fields.function(_calc_list_price, method=True, type='float', string='Company Sale Price', help="Base price for computing the customer price. Sometimes called the catalog price."),
'standard_price_multi': fields.function(_calc_standard_price, method=True, type='float', string='Company Cost Price', required=True, help="The cost of the product for accounting stock valuation. It can serves as a base price for supplier price."),
'standard_price_ids' :fields.one2many('company.wise.cost.price','product_id'),
'list_price_ids' :fields.one2many('company.wise.sale.price','product_id')
}
def _get_uom_id(self, cr, uid, *args):
@ -343,6 +375,79 @@ class product_template(osv.osv):
product_template()
class company_wise_cost_price(osv.osv):
_name="company.wise.cost.price"
_description="Company Wise Cost Price"
_columns={
'product_id':fields.many2one('product.template','Product Id'),
'company_id':fields.many2one('res.company','Company'),
'standard_price':fields.float('Cost Price', required=True, digits=(16, int(config['price_accuracy'])), help="The cost of the product for accounting stock valuation. It can serves as a base price for supplier price."),
'currency_id':fields.many2one('res.currency','Currency',readonly=True)
}
def company_cost_onchange(self,cr,uid,ids,company_id):
if company_id:
currency=self.pool.get('res.company').read(cr,uid,company_id,['currency_id'])
return {'value':{'currency_id':currency['currency_id'][0]}}
else:
return{'value':{'currency_id':False}}
def create(self,cr,uid,values,context={}):
#code to make onchange_currency_id effectiv for readonly fields
if values and values.has_key('company_id') and values['company_id']:
val = self.company_cost_onchange(cr, uid, [] ,values['company_id'])['value']
values['currency_id']=val['currency_id']
return super(company_wise_cost_price, self).create(cr, uid, values, context=context)
def write(self,cr,uid,ids,values,context={}):
#code to make onchange_currency_id effectiv for readonly fields
if values and values.has_key('company_id') and values['company_id']:
company_id = values['company_id']
# this code effects when currency_id is not changed still the rate are chnged then
#
val = self.company_cost_onchange(cr, uid, ids ,company_id)['value']
values['currency_id']=val['currency_id']
return super(company_wise_cost_price, self).write(cr, uid, ids, values, context=context)
company_wise_cost_price()
class company_wise_sale_price(osv.osv):
_name="company.wise.sale.price"
_description="Company Wise Sale Price"
_columns={
'product_id':fields.many2one('product.template','Product Id'),
'company_id':fields.many2one('res.company','Company'),
'list_price':fields.float('Sale Price', required=True, digits=(16, int(config['price_accuracy'])), help="Base price for computing the customer price. Sometimes called the catalog price."),
'currency_id':fields.many2one('res.currency','Currency',readonly=True)
}
def company_sale_onchange(self,cr,uid,ids,company_id):
if company_id:
currency=self.pool.get('res.company').read(cr,uid,company_id,['currency_id'])
return {'value':{'currency_id':currency['currency_id'][0]}}
else:
return{'value':{'currency_id':False}}
def create(self,cr,uid,values,context={}):
#code to make onchange_currency_id effectiv for readonly fields
if values and values.has_key('company_id') and values['company_id']:
val = self.company_sale_onchange(cr, uid, [] ,values['company_id'])['value']
values['currency_id']=val['currency_id']
return super(company_wise_sale_price, self).create(cr, uid, values, context=context)
def write(self,cr,uid,ids,values,context={}):
#code to make onchange_currency_id effectiv for readonly fields
if values and values.has_key('company_id') and values['company_id']:
company_id = values['company_id']
# this code effects when currency_id is not changed still the rate are chnged then
#
val = self.company_sale_onchange(cr, uid, ids ,company_id)['value']
values['currency_id']=val['currency_id']
return super(company_wise_sale_price, self).write(cr, uid, ids, values, context=context)
company_wise_sale_price()
class product_product(osv.osv):
def view_header_get(self, cr, uid, view_id, view_type, context):
res = super(product_product, self).view_header_get(cr, uid, view_id, view_type, context)
@ -632,6 +737,7 @@ class product_supplierinfo(osv.osv):
'product_id' : fields.many2one('product.template', 'Product', required=True, ondelete='cascade', select=True),
'delay' : fields.integer('Delivery Delay', required=True, help="Delay in days between the confirmation of the purchase order and the reception of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning."),
'pricelist_ids': fields.one2many('pricelist.partnerinfo', 'suppinfo_id', 'Supplier Pricelist'),
'company_id':fields.many2one('res.company','Company'),
}
_defaults = {
'qty': lambda *a: 0.0,

View File

@ -139,8 +139,15 @@
<separator string="Base Prices" colspan="4"/>
<field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}"/>
<field name="list_price"/>
<field name="standard_price_multi"/>
<field name="list_price_multi"/>
<newline/>
<field name="standard_price_ids" nolabel="1" colspan="2"/>
<field name="list_price_ids" nolabel="1" colspan="2"/>
<newline/>
<field name="price_margin" select="1"/>
<field name="price_extra" select="1"/>
<newline/>
<field groups="base.group_extended" name="cost_method"/>
<newline/>
<field colspan="4" name="seller_ids" nolabel="1"/>
@ -408,6 +415,7 @@
<field name="product_code"/>
<field name="delay"/>
<field name="qty"/>
<field name="company_id"/>
<field colspan="4" groups="base.group_extended" name="pricelist_ids" nolabel="1" widget="one2many_list">
<tree editable="bottom" string="Pricelist">
<field name="min_quantity"/>
@ -432,6 +440,7 @@
<field name="delay"/>
<field name="qty"/>
<field name="product_code"/>
<field name="company_id"/>
</tree>
</field>
</record>
@ -585,6 +594,58 @@
</record>
<menuitem action="product_template_action_tree" id="menu_templates" parent="product.menu_products_products" sequence="2"/>
<record id="company_wise_cost_price_form_view" model="ir.ui.view">
<field name="name">company.wise.cost.price.form</field>
<field name="model">company.wise.cost.price</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Company Wise Cost Prices">
<field name="company_id" on_change="company_cost_onchange(company_id)"/>
<field name="standard_price"/>
<field name="currency_id"/>
</form>
</field>
</record>
<record id="company_wise_cost_price_tree_view" model="ir.ui.view">
<field name="name">company.wise.cost.price.tree</field>
<field name="model">company.wise.cost.price</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Company Wise Cost Prices">
<field name="company_id"/>
<field name="standard_price"/>
<field name="currency_id"/>
</tree>
</field>
</record>
<record id="company_wise_sale_price_form_view" model="ir.ui.view">
<field name="name">company.wise.sale.price.form</field>
<field name="model">company.wise.sale.price</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Company Wise Sale Prices">
<field name="company_id" on_change="company_sale_onchange(company_id)"/>
<field name="list_price"/>
<field name="currency_id"/>
</form>
</field>
</record>
<record id="company_wise_sale_price_tree_view" model="ir.ui.view">
<field name="name">company.wise.sale.price.tree</field>
<field name="model">company.wise.sale.price</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Company Wise Sale Prices">
<field name="company_id"/>
<field name="list_price"/>
<field name="currency_id"/>
</tree>
</field>
</record>
</data>
</openerp>

View File

@ -116,6 +116,7 @@ class project(osv.osv):
'notes': fields.text('Notes', help="Internal description of the project."),
'timesheet_id': fields.many2one('hr.timesheet.group', 'Working Time', help="Timetable working hours to adjust the gantt diagram report"),
'state': fields.selection([('template', 'Template'), ('open', 'Running'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', required=True, readonly=True),
'company_id': fields.many2one('res.company', 'Company'),
}
_defaults = {
@ -123,7 +124,8 @@ class project(osv.osv):
'manager': lambda object,cr,uid,context: uid,
'priority': lambda *a: 1,
'date_start': lambda *a: time.strftime('%Y-%m-%d'),
'state': lambda *a: 'open'
'state': lambda *a: 'open',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id
}
_order = "parent_id,priority,name"
@ -300,7 +302,8 @@ class task(osv.osv):
'delegated_user_id': fields.related('child_ids','user_id',type='many2one', relation='res.users', string='Delegated To'),
'partner_id': fields.many2one('res.partner', 'Partner'),
'work_ids': fields.one2many('project.task.work', 'task_id', 'Work done'),
'manager_id': fields.related('project_id','manager', type='many2one', relation='res.users', string='Project Manager')
'manager_id': fields.related('project_id','manager', type='many2one', relation='res.users', string='Project Manager'),
'company_id': fields.many2one('res.company', 'Company'),
}
_defaults = {
'user_id': lambda obj,cr,uid,context: uid,
@ -311,6 +314,7 @@ class task(osv.osv):
'active': lambda *a: True,
'date_start': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
'project_id': _default_project,
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id
}
_order = "sequence, priority, date_deadline, id"

View File

@ -23,6 +23,7 @@
<notebook colspan="4">
<page string="Administration">
<field name="warn_manager"/>
<field name="company_id" select="1"/>
<field name="priority"/>
<field name="timesheet_id"/>
<field name="active" select="2"/>
@ -377,6 +378,7 @@
</group>
<separator string="Miscelleanous" colspan="4"/>
<field name="type" widget="selection"/>
<field name="company_id" select="1"/>
<field name="active" select="2"/>
<field name="partner_id" select="2"/>
<separator colspan="4" string="Notes"/>

View File

@ -19,5 +19,29 @@
<field name="groups_id" eval="[(6,0,[ref('group_project_manager')])]"/>
</record>
<record model="ir.rule.group" id="project_comp_rule_group">
<field name="name">Project multi-company</field>
<field name="model_id" search="[('model','=','project.project')]" model="ir.model"/>
<field name="global" eval="True"/>
</record>
<record model="ir.rule" id="project_comp_rule">
<field name="field_id" search="[('model','=','project.project'),('name','=','company_id')]" model="ir.model.fields"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="project_comp_rule_group"/>
</record>
<record model="ir.rule.group" id="task_comp_rule_group">
<field name="name" >Task multi-company</field>
<field name="model_id" search="[('model','=','project.task')]" model="ir.model"/>
<field name="global" eval="True"/>
</record>
<record model="ir.rule" id="task_comp_rule">
<field name="field_id" search="[('model','=','project.task'),('name','=','company_id')]" model="ir.model.fields"/>
<field name="operator">child_of</field>
<field name="operand">user.company_id.id</field>
<field name="rule_group" ref="task_comp_rule_group"/>
</record>
</data>
</openerp>

View File

@ -194,7 +194,8 @@ class purchase_order(osv.osv):
}, multi="sums"),
'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position'),
'product_id': fields.related('order_line','product_id', type='many2one', relation='product.product', string='Product'),
'create_uid': fields.many2one('res.users', 'Responsible'),
'create_uid': fields.many2one('res.users', 'Responsible'),
'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'date_order': lambda *a: time.strftime('%Y-%m-%d'),

View File

@ -43,6 +43,7 @@
<field name="warehouse_id" on_change="onchange_warehouse_id(warehouse_id)" widget="selection"/>
<field name="origin" select="2"/>
<field name="shipped" select="2"/>
<field name="company_id"/>
</group>
<notebook colspan="4">
<page string="Purchase Order">
@ -194,6 +195,7 @@
<tree string="Purchase Order">
<field name="name" string="Reference"/>
<field name="date_order"/>
<field name="company_id"/>
<field name="minimum_planned_date"/>
<field name="partner_id"/>
<field name="location_id"/>