[MERGE] Multicompany branch of ADDONS
bzr revid: jvo@tinyerp.com-20091124135109-srba9r1npxa1gury
This commit is contained in:
commit
df41fe748d
|
@ -64,7 +64,7 @@
|
|||
'project/project_demo.xml',
|
||||
'project/analytic_account_demo.xml',
|
||||
'demo/account_minimal.xml',
|
||||
'account_unit_test.xml'
|
||||
'account_unit_test.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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','<>','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', '<>', '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','<>','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"/>
|
||||
|
|
|
@ -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.company')._company_default_get(cr, uid, 'account.move.line', c)
|
||||
}
|
||||
_order = "date desc,id desc"
|
||||
_sql_constraints = [
|
||||
|
|
|
@ -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','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="default_credit_account_id" attrs="{'required':[('type','=','cash')]}" domain="[('type','<>','view'),('type','<>','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>
|
||||
|
|
|
@ -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'})
|
||||
|
@ -996,6 +1078,7 @@ class account_invoice_line(osv.osv):
|
|||
'invoice_line_tax_id': fields.many2many('account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id', 'Taxes', domain=[('parent_id','=',False)]),
|
||||
'note': fields.text('Notes'),
|
||||
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
|
||||
'company_id': fields.related('invoice_id','company_id',type='many2one',object='res.company',string='Company')
|
||||
}
|
||||
_defaults = {
|
||||
'quantity': lambda *a: 1,
|
||||
|
@ -1014,13 +1097,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 +1112,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 +1204,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):
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 '')
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
|
@ -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'
|
||||
|
|
|
@ -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.company')._company_default_get(cr, uid, 'hr_timesheet_sheet.sheet', c)
|
||||
}
|
||||
|
||||
def _sheet_date(self, cr, uid, ids):
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
|
@ -0,0 +1,27 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import multi_company
|
||||
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
{
|
||||
'name': 'Multi Company',
|
||||
'version': '1.0',
|
||||
'category': 'Custom',
|
||||
'description': " ",
|
||||
'author': 'Tiny',
|
||||
'depends': ['base'],
|
||||
'update_xml': [
|
||||
'multi_company_view.xml',
|
||||
],
|
||||
'demo_xml': ['multi_company_demo.xml'],
|
||||
'installable': True,
|
||||
'active': True,
|
||||
'certificate': '',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,61 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
from mx import DateTime
|
||||
import time
|
||||
import netsvc
|
||||
from osv import fields, osv
|
||||
from tools import config
|
||||
from tools.translate import _
|
||||
import tools
|
||||
|
||||
class multi_company_default(osv.osv):
|
||||
_name = 'multi_company.default'
|
||||
_order = 'sequence,id'
|
||||
_columns = {
|
||||
'sequence': fields.integer('Sequence'),
|
||||
'name': fields.char('Name', size=32, required=True),
|
||||
'company_id': fields.many2one('res.company', 'Main Company', required=True),
|
||||
'company_dest_id': fields.many2one('res.company', 'Default Company', required=True),
|
||||
'object_id': fields.many2one('ir.model', 'Object', required=True),
|
||||
'expression': fields.char('Expression', size=32, required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'expression': lambda *a: 'True',
|
||||
'sequence': lambda *a: 1
|
||||
}
|
||||
multi_company_default()
|
||||
|
||||
class res_company(osv.osv):
|
||||
_inherit = 'res.company'
|
||||
|
||||
def _company_default_get(self, cr, uid, object=False, context={}):
|
||||
|
||||
proxy = self.pool.get('multi_company.default')
|
||||
ids = proxy.search(cr, uid, [('object_id.name', '=', object)])
|
||||
for rule in proxy.browse(cr, uid, ids, context):
|
||||
user = self.pool.get('res.user').browse(cr, uid, uid)
|
||||
if eval(rule.expression, {'context': context, 'user': user}):
|
||||
return rule.company_dest_id.id
|
||||
return super(res_company, self)._company_default_get(cr, uid, object, context)
|
||||
|
||||
res_company()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -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>
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_inventory_tree" model="ir.ui.view">
|
||||
<field name="name">multi_company.default.tree</field>
|
||||
<field name="model">multi_company.default</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Multi Company">
|
||||
<field name="sequence"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id"/>
|
||||
<field name="company_dest_id"/>
|
||||
<field name="object_id"/>
|
||||
<field name="expression" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_inventory_form" model="ir.ui.view">
|
||||
<field name="name">multi_company.default.form</field>
|
||||
<field name="model">multi_company.default</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Multi Company">
|
||||
<field name="sequence"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id"/>
|
||||
<field name="company_dest_id"/>
|
||||
<field name="object_id"/>
|
||||
<field name="expression" />
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_inventory_form" model="ir.actions.act_window">
|
||||
<field name="name">Multi Company</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">multi_company.default</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_inventory_form" id="menu_action_inventory_form" parent="base.menu_action_res_company_tree"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -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,11 +737,13 @@ 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,
|
||||
'sequence': lambda *a: 1,
|
||||
'delay': lambda *a: 1,
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'product.supplierinfo', c)
|
||||
}
|
||||
_order = 'sequence'
|
||||
product_supplierinfo()
|
||||
|
|
|
@ -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>
|
||||
|
@ -586,5 +595,57 @@
|
|||
|
||||
<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>
|
||||
|
|
|
@ -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.company')._company_default_get(cr, uid, 'project.project', c)
|
||||
}
|
||||
|
||||
_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.company')._company_default_get(cr, uid, 'project.task', c)
|
||||
}
|
||||
_order = "sequence, priority, date_deadline, id"
|
||||
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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'),
|
||||
|
@ -205,6 +206,7 @@ class purchase_order(osv.osv):
|
|||
'invoiced': lambda *a: 0,
|
||||
'partner_address_id': lambda self, cr, uid, context: context.get('partner_id', False) and self.pool.get('res.partner').address_get(cr, uid, [context['partner_id']], ['default'])['default'],
|
||||
'pricelist_id': lambda self, cr, uid, context: context.get('partner_id', False) and self.pool.get('res.partner').browse(cr, uid, context['partner_id']).property_product_pricelist_purchase.id,
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'purchase.order', c)
|
||||
}
|
||||
_name = "purchase.order"
|
||||
_description = "Purchase order"
|
||||
|
@ -447,6 +449,7 @@ class purchase_order_line(osv.osv):
|
|||
'notes': fields.text('Notes'),
|
||||
'order_id': fields.many2one('purchase.order', 'Order Ref', select=True, required=True, ondelete='cascade'),
|
||||
'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',),
|
||||
'company_id': fields.related('order_id','company_id',type='many2one',object='res.company',string='Company')
|
||||
}
|
||||
_defaults = {
|
||||
'product_qty': lambda *a: 1.0
|
||||
|
|
|
@ -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">
|
||||
|
@ -168,6 +169,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"/>
|
||||
|
|
|
@ -253,7 +253,7 @@ class sale_order(osv.osv):
|
|||
|
||||
'invoice_quantity': fields.selection([('order', 'Ordered Quantities'), ('procurement', 'Shipped Quantities')], 'Invoice on', help="The sale order will automatically create the invoice proposition (draft invoice). Ordered and delivered quantities may not be the same. You have to choose if you invoice based on ordered or shipped quantities. If the product is a service, shipped quantities means hours spent on the associated tasks.", required=True),
|
||||
'payment_term': fields.many2one('account.payment.term', 'Payment Term'),
|
||||
'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position')
|
||||
'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position'),
|
||||
}
|
||||
_defaults = {
|
||||
'picking_policy': lambda *a: 'direct',
|
||||
|
@ -766,6 +766,7 @@ class sale_order_line(osv.osv):
|
|||
'state': fields.selection([('draft', 'Draft'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled'), ('exception', 'Exception')], 'Status', required=True, readonly=True),
|
||||
'order_partner_id': fields.related('order_id', 'partner_id', type='many2one', relation='res.partner', string='Customer'),
|
||||
'salesman_id':fields.related('order_id','user_id',type='many2one',relation='res.users',string='Salesman'),
|
||||
'company_id': fields.related('order_id','company_id',type='many2one',object='res.company',string='Company')
|
||||
}
|
||||
_order = 'sequence, id'
|
||||
_defaults = {
|
||||
|
|
Loading…
Reference in New Issue