[MERGE] forward port of addons v7 up to revision 9045

bzr revid: qdp-launchpad@openerp.com-20130422153449-c62emljfa4a49758
This commit is contained in:
Quentin (OpenERP) 2013-04-22 17:34:49 +02:00
commit 33f27b362b
50 changed files with 230 additions and 149 deletions

View File

@ -286,7 +286,10 @@ class account_invoice(osv.osv):
'payment_ids': fields.function(_compute_lines, relation='account.move.line', type="many2many", string='Payments'), 'payment_ids': fields.function(_compute_lines, relation='account.move.line', type="many2many", string='Payments'),
'move_name': fields.char('Journal Entry', size=64, readonly=True, states={'draft':[('readonly',False)]}), 'move_name': fields.char('Journal Entry', size=64, readonly=True, states={'draft':[('readonly',False)]}),
'user_id': fields.many2one('res.users', 'Salesperson', readonly=True, track_visibility='onchange', states={'draft':[('readonly',False)]}), 'user_id': fields.many2one('res.users', 'Salesperson', readonly=True, track_visibility='onchange', states={'draft':[('readonly',False)]}),
'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position', readonly=True, states={'draft':[('readonly',False)]}) 'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position', readonly=True, states={'draft':[('readonly',False)]}),
'commercial_partner_id': fields.related('partner_id', 'commercial_partner_id', string='Commercial Entity', type='many2one',
relation='res.partner', store=True, readonly=True,
help="The commercial entity that will be used on Journal Entries for this invoice")
} }
_defaults = { _defaults = {
'type': _get_type, 'type': _get_type,
@ -1261,9 +1264,7 @@ class account_invoice(osv.osv):
ref = invoice.reference ref = invoice.reference
else: else:
ref = self._convert_ref(cr, uid, invoice.number) ref = self._convert_ref(cr, uid, invoice.number)
partner = invoice.partner_id partner = self.pool['res.partner']._find_accounting_partner(invoice.partner_id)
if partner.parent_id and not partner.is_company:
partner = partner.parent_id
# Pay attention to the sign for both debit/credit AND amount_currency # Pay attention to the sign for both debit/credit AND amount_currency
l1 = { l1 = {
'debit': direction * pay_amount>0 and direction * pay_amount, 'debit': direction * pay_amount>0 and direction * pay_amount,
@ -1733,15 +1734,11 @@ class res_partner(osv.osv):
'invoice_ids': fields.one2many('account.invoice.line', 'partner_id', 'Invoices', readonly=True), 'invoice_ids': fields.one2many('account.invoice.line', 'partner_id', 'Invoices', readonly=True),
} }
def _find_accounting_partner(self, part): def _find_accounting_partner(self, partner):
''' '''
Find the partner for which the accounting entries will be created Find the partner for which the accounting entries will be created
''' '''
#if the chosen partner is not a company and has a parent company, use the parent for the journal entries return partner.commercial_partner_id
#because you want to invoice 'Agrolait, accounting department' but the journal items are for 'Agrolait'
if part.parent_id and not part.is_company:
part = part.parent_id
return part
def copy(self, cr, uid, id, default=None, context=None): def copy(self, cr, uid, id, default=None, context=None):
default = default or {} default = default or {}

View File

@ -117,6 +117,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree colors="blue:state == 'draft';black:state in ('proforma','proforma2','open');gray:state == 'cancel'" string="Invoice"> <tree colors="blue:state == 'draft';black:state in ('proforma','proforma2','open');gray:state == 'cancel'" string="Invoice">
<field name="partner_id" groups="base.group_user"/> <field name="partner_id" groups="base.group_user"/>
<field name="commercial_partner_id" invisible="1"/>
<field name="date_invoice"/> <field name="date_invoice"/>
<field name="number"/> <field name="number"/>
<field name="reference" invisible="1"/> <field name="reference" invisible="1"/>
@ -320,7 +321,8 @@
<field string="Customer" name="partner_id" <field string="Customer" name="partner_id"
on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)"
groups="base.group_user" context="{'search_default_customer':1, 'show_address': 1}" groups="base.group_user" context="{'search_default_customer':1, 'show_address': 1}"
options='{"always_reload": True}'/> options='{"always_reload": True}'
domain="[('customer', '=', True)]"/>
<field name="fiscal_position" widget="selection" /> <field name="fiscal_position" widget="selection" />
</group> </group>
<group> <group>
@ -447,19 +449,20 @@
<field name="model">account.invoice</field> <field name="model">account.invoice</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Search Invoice"> <search string="Search Invoice">
<field name="number" string="Invoice" filter_domain="['|','|','|', ('number','ilike',self), ('origin','ilike',self), ('supplier_invoice_number', 'ilike', self), ('partner_id', 'ilike', self)]"/> <field name="number" string="Invoice" filter_domain="['|','|','|', ('number','ilike',self), ('origin','ilike',self), ('supplier_invoice_number', 'ilike', self), ('partner_id', 'child_of', self)]"/>
<filter name="draft" string="Draft" domain="[('state','=','draft')]" help="Draft Invoices"/> <filter name="draft" string="Draft" domain="[('state','=','draft')]" help="Draft Invoices"/>
<filter name="proforma" string="Proforma" domain="[('state','=','proforma2')]" help="Proforma Invoices" groups="account.group_proforma_invoices"/> <filter name="proforma" string="Proforma" domain="[('state','=','proforma2')]" help="Proforma Invoices" groups="account.group_proforma_invoices"/>
<filter name="invoices" string="Invoices" domain="[('state','not in',['draft','cancel'])]" help="Proforma/Open/Paid Invoices"/> <filter name="invoices" string="Invoices" domain="[('state','not in',['draft','cancel'])]" help="Proforma/Open/Paid Invoices"/>
<filter name="unpaid" string="Unpaid" domain="[('state','=','open')]" help="Unpaid Invoices"/> <filter name="unpaid" string="Unpaid" domain="[('state','=','open')]" help="Unpaid Invoices"/>
<separator/> <separator/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="user_id" string="Salesperson"/> <field name="user_id" string="Salesperson"/>
<field name="period_id" string="Period"/> <field name="period_id" string="Period"/>
<separator/> <separator/>
<filter domain="[('user_id','=',uid)]" help="My Invoices"/> <filter domain="[('user_id','=',uid)]" help="My Invoices"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/> <filter name="partner_id" string="Partner" domain="[]" context="{'group_by':'partner_id'}"/>
<filter name="commercial_partner_id" string="Commercial Partner" domain="[]" context="{'group_by':'commercial_partner_id'}"/>
<filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/> <filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>

View File

@ -655,13 +655,7 @@ class account_move_line(osv.osv):
} }
return result return result
def onchange_account_id(self, cr, uid, ids, account_id, context=None): def onchange_partner_id(self, cr, uid, ids, move_id, partner_id, account_id=None, debit=0, credit=0, date=False, journal=False, context=None):
res = {'value': {}}
if account_id:
res['value']['account_tax_id'] = [x.id for x in self.pool.get('account.account').browse(cr, uid, account_id, context=context).tax_ids]
return res
def onchange_partner_id(self, cr, uid, ids, move_id, partner_id, account_id=None, debit=0, credit=0, date=False, journal=False):
partner_obj = self.pool.get('res.partner') partner_obj = self.pool.get('res.partner')
payment_term_obj = self.pool.get('account.payment.term') payment_term_obj = self.pool.get('account.payment.term')
journal_obj = self.pool.get('account.journal') journal_obj = self.pool.get('account.journal')
@ -675,8 +669,8 @@ class account_move_line(osv.osv):
date = datetime.now().strftime('%Y-%m-%d') date = datetime.now().strftime('%Y-%m-%d')
jt = False jt = False
if journal: if journal:
jt = journal_obj.browse(cr, uid, journal).type jt = journal_obj.browse(cr, uid, journal, context=context).type
part = partner_obj.browse(cr, uid, partner_id) part = partner_obj.browse(cr, uid, partner_id, context=context)
payment_term_id = False payment_term_id = False
if jt and jt in ('purchase', 'purchase_refund') and part.property_supplier_payment_term: if jt and jt in ('purchase', 'purchase_refund') and part.property_supplier_payment_term:
@ -701,20 +695,20 @@ class account_move_line(osv.osv):
elif part.supplier: elif part.supplier:
val['account_id'] = fiscal_pos_obj.map_account(cr, uid, part and part.property_account_position or False, id1) val['account_id'] = fiscal_pos_obj.map_account(cr, uid, part and part.property_account_position or False, id1)
if val.get('account_id', False): if val.get('account_id', False):
d = self.onchange_account_id(cr, uid, ids, val['account_id']) d = self.onchange_account_id(cr, uid, ids, account_id=val['account_id'], partner_id=part.id, context=context)
val.update(d['value']) val.update(d['value'])
return {'value':val} return {'value':val}
def onchange_account_id(self, cr, uid, ids, account_id=False, partner_id=False): def onchange_account_id(self, cr, uid, ids, account_id=False, partner_id=False, context=None):
account_obj = self.pool.get('account.account') account_obj = self.pool.get('account.account')
partner_obj = self.pool.get('res.partner') partner_obj = self.pool.get('res.partner')
fiscal_pos_obj = self.pool.get('account.fiscal.position') fiscal_pos_obj = self.pool.get('account.fiscal.position')
val = {} val = {}
if account_id: if account_id:
res = account_obj.browse(cr, uid, account_id) res = account_obj.browse(cr, uid, account_id, context=context)
tax_ids = res.tax_ids tax_ids = res.tax_ids
if tax_ids and partner_id: if tax_ids and partner_id:
part = partner_obj.browse(cr, uid, partner_id) part = partner_obj.browse(cr, uid, partner_id, context=context)
tax_id = fiscal_pos_obj.map_tax(cr, uid, part and part.property_account_position or False, tax_ids)[0] tax_id = fiscal_pos_obj.map_tax(cr, uid, part and part.property_account_position or False, tax_ids)[0]
else: else:
tax_id = tax_ids and tax_ids[0].id or False tax_id = tax_ids and tax_ids[0].id or False

View File

@ -1112,7 +1112,7 @@
<field name="ref"/> <field name="ref"/>
<field name="statement_id" invisible="1"/> <field name="statement_id" invisible="1"/>
<field name="partner_id" on_change="onchange_partner_id(move_id, partner_id, account_id, debit, credit, date, journal_id)"/> <field name="partner_id" on_change="onchange_partner_id(move_id, partner_id, account_id, debit, credit, date, journal_id)"/>
<field name="account_id" options='{"no_open":True}' domain="[('journal_id','=',journal_id), ('company_id', '=', company_id)]" on_change="onchange_account_id(account_id)"/> <field name="account_id" options='{"no_open":True}' domain="[('journal_id','=',journal_id), ('company_id', '=', company_id)]" on_change="onchange_account_id(account_id, partner_id, context)"/>
<field name="account_tax_id" options='{"no_open":True}' invisible="context.get('journal_type', False) not in ['sale','sale_refund','purchase','purchase_refund','general']"/> <field name="account_tax_id" options='{"no_open":True}' invisible="context.get('journal_type', False) not in ['sale','sale_refund','purchase','purchase_refund','general']"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('type','not in',['view','template'])]" invisible="not context.get('analytic_journal_id',False)"/> <field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('type','not in',['view','template'])]" invisible="not context.get('analytic_journal_id',False)"/>
<field name="move_id" required="0"/> <field name="move_id" required="0"/>
@ -1293,7 +1293,7 @@
<group col="6" colspan="4"> <group col="6" colspan="4">
<field name="name"/> <field name="name"/>
<field name="ref"/> <field name="ref"/>
<field name="partner_id" on_change="onchange_partner_id(False,partner_id,account_id,debit,credit,date)"/> <field name="partner_id" on_change="onchange_partner_id(False, partner_id, account_id, debit, credit, date, journal_id, context)"/>
<field name="journal_id"/> <field name="journal_id"/>
<field name="period_id"/> <field name="period_id"/>
@ -1357,7 +1357,7 @@
<tree colors="blue:state == 'draft';black:state == 'posted'" editable="top" string="Journal Items"> <tree colors="blue:state == 'draft';black:state == 'posted'" editable="top" string="Journal Items">
<field name="invoice"/> <field name="invoice"/>
<field name="name"/> <field name="name"/>
<field name="partner_id" on_change="onchange_partner_id(False,partner_id,account_id,debit,credit,parent.date,parent.journal_id)"/> <field name="partner_id" on_change="onchange_partner_id(False, partner_id, account_id, debit, credit, parent.date, parent.journal_id, context)"/>
<field name="account_id" domain="[('journal_id','=',parent.journal_id),('company_id', '=', parent.company_id)]"/> <field name="account_id" domain="[('journal_id','=',parent.journal_id),('company_id', '=', parent.company_id)]"/>
<field name="date_maturity"/> <field name="date_maturity"/>
<field name="debit" sum="Total Debit"/> <field name="debit" sum="Total Debit"/>

View File

@ -233,5 +233,10 @@ class res_partner(osv.osv):
'last_reconciliation_date': fields.datetime('Latest Full Reconciliation Date', help='Date on which the partner accounting entries were fully reconciled last time. It differs from the last date where a reconciliation has been made for this partner, as here we depict the fact that nothing more was to be reconciled at this date. This can be achieved in 2 different ways: either the last unreconciled debit/credit entry of this partner was reconciled, either the user pressed the button "Nothing more to reconcile" during the manual reconciliation process.') 'last_reconciliation_date': fields.datetime('Latest Full Reconciliation Date', help='Date on which the partner accounting entries were fully reconciled last time. It differs from the last date where a reconciliation has been made for this partner, as here we depict the fact that nothing more was to be reconciled at this date. This can be achieved in 2 different ways: either the last unreconciled debit/credit entry of this partner was reconciled, either the user pressed the button "Nothing more to reconcile" during the manual reconciliation process.')
} }
def _commercial_fields(self, cr, uid, context=None):
return super(res_partner, self)._commercial_fields(cr, uid, context=context) + \
['debit_limit', 'property_account_payable', 'property_account_receivable', 'property_account_position',
'property_payment_term', 'property_supplier_payment_term', 'last_reconciliation_date']
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -96,7 +96,7 @@
<field name="inherit_id" ref="base.view_partner_form"/> <field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<page string="History" position="before" version="7.0"> <page string="History" position="before" version="7.0">
<page string="Accounting" col="4"> <page string="Accounting" col="4" name="accounting" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}">
<group> <group>
<group> <group>
<field name="property_account_position" widget="selection"/> <field name="property_account_position" widget="selection"/>
@ -126,6 +126,11 @@
</tree> </tree>
</field> </field>
</page> </page>
<page string="Accounting" name="accounting_disabled" attrs="{'invisible': ['|',('is_company','=',True),('parent_id','=',False)]}">
<div>
<p>Accounting-related settings are managed on <button name="open_commercial_entity" type="object" string="the parent company" class="oe_link"/></p>
</div>
</page>
</page> </page>
</field> </field>
</record> </record>

View File

@ -31,7 +31,7 @@
<search string="Analytic Account"> <search string="Analytic Account">
<field name="name" filter_domain="['|', ('name','ilike',self), ('code','ilike',self)]" string="Analytic Account"/> <field name="name" filter_domain="['|', ('name','ilike',self), ('code','ilike',self)]" string="Analytic Account"/>
<field name="date"/> <field name="date"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="manager_id"/> <field name="manager_id"/>
<field name="parent_id"/> <field name="parent_id"/>
<field name="user_id"/> <field name="user_id"/>

View File

@ -70,6 +70,7 @@ class account_invoice_report(osv.osv):
'categ_id': fields.many2one('product.category','Category of Product', readonly=True), 'categ_id': fields.many2one('product.category','Category of Product', readonly=True),
'journal_id': fields.many2one('account.journal', 'Journal', readonly=True), 'journal_id': fields.many2one('account.journal', 'Journal', readonly=True),
'partner_id': fields.many2one('res.partner', 'Partner', readonly=True), 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True),
'commercial_partner_id': fields.many2one('res.partner', 'Partner Company', help="Commercial Entity"),
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'user_id': fields.many2one('res.users', 'Salesperson', readonly=True), 'user_id': fields.many2one('res.users', 'Salesperson', readonly=True),
'price_total': fields.float('Total Without Tax', readonly=True), 'price_total': fields.float('Total Without Tax', readonly=True),
@ -108,7 +109,7 @@ class account_invoice_report(osv.osv):
sub.fiscal_position, sub.user_id, sub.company_id, sub.nbr, sub.type, sub.state, sub.fiscal_position, sub.user_id, sub.company_id, sub.nbr, sub.type, sub.state,
sub.categ_id, sub.date_due, sub.account_id, sub.account_line_id, sub.partner_bank_id, sub.categ_id, sub.date_due, sub.account_id, sub.account_line_id, sub.partner_bank_id,
sub.product_qty, sub.price_total / cr.rate as price_total, sub.price_average /cr.rate as price_average, sub.product_qty, sub.price_total / cr.rate as price_total, sub.price_average /cr.rate as price_average,
cr.rate as currency_rate, sub.residual / cr.rate as residual cr.rate as currency_rate, sub.residual / cr.rate as residual, sub.commercial_partner_id as commercial_partner_id
""" """
return select_str return select_str
@ -170,7 +171,8 @@ class account_invoice_report(osv.osv):
LEFT JOIN account_invoice a ON a.id = l.invoice_id LEFT JOIN account_invoice a ON a.id = l.invoice_id
WHERE a.id = ai.id) WHERE a.id = ai.id)
ELSE 1::bigint ELSE 1::bigint
END::numeric AS residual END::numeric AS residual,
ai.commercial_partner_id as commercial_partner_id
""" """
return select_str return select_str
@ -193,7 +195,7 @@ class account_invoice_report(osv.osv):
ai.partner_id, ai.payment_term, ai.period_id, u.name, ai.currency_id, ai.journal_id, ai.partner_id, ai.payment_term, ai.period_id, u.name, ai.currency_id, ai.journal_id,
ai.fiscal_position, ai.user_id, ai.company_id, ai.type, ai.state, pt.categ_id, ai.fiscal_position, ai.user_id, ai.company_id, ai.type, ai.state, pt.categ_id,
ai.date_due, ai.account_id, ail.account_id, ai.partner_bank_id, ai.residual, ai.date_due, ai.account_id, ail.account_id, ai.partner_bank_id, ai.residual,
ai.amount_total, u.uom_type, u.category_id ai.amount_total, u.uom_type, u.category_id, ai.commercial_partner_id
""" """
return group_by_str return group_by_str

View File

@ -14,6 +14,7 @@
<field name="type" invisible="1"/> <field name="type" invisible="1"/>
<field name="company_id" invisible="1"/> <field name="company_id" invisible="1"/>
<field name="partner_id" invisible="1"/> <field name="partner_id" invisible="1"/>
<field name="commercial_partner_id" invisible="1"/>
<field name="product_id" invisible="1"/> <field name="product_id" invisible="1"/>
<field name="uom_name" invisible="not context.get('set_visible',False)"/> <field name="uom_name" invisible="not context.get('set_visible',False)"/>
<field name="categ_id" invisible="1"/> <field name="categ_id" invisible="1"/>
@ -65,7 +66,8 @@
<field name="user_id" /> <field name="user_id" />
<field name="categ_id" filter_domain="[('categ_id', 'child_of', self)]"/> <field name="categ_id" filter_domain="[('categ_id', 'child_of', self)]"/>
<group expand="1" string="Group By..."> <group expand="1" string="Group By...">
<filter string="Partner" name="partner" icon="terp-partner" context="{'group_by':'partner_id','residual_visible':True}"/> <filter string="Partner" name="partner_id" context="{'group_by':'partner_id','residual_visible':True}"/>
<filter string="Commercial Partner" name="commercial_partner_id" context="{'group_by':'commercial_partner_id','residual_visible':True}"/>
<filter string="Salesperson" name='user' icon="terp-personal" context="{'group_by':'user_id'}"/> <filter string="Salesperson" name='user' icon="terp-personal" context="{'group_by':'user_id'}"/>
<filter string="Due Date" icon="terp-go-today" context="{'group_by':'date_due'}"/> <filter string="Due Date" icon="terp-go-today" context="{'group_by':'date_due'}"/>
<filter string="Period" icon="terp-go-month" context="{'group_by':'period_id'}" name="period"/> <filter string="Period" icon="terp-go-month" context="{'group_by':'period_id'}" name="period"/>

View File

@ -26,7 +26,7 @@ openerp.account = function (instance) {
if (this.partners) { if (this.partners) {
this.$el.prepend(QWeb.render("AccountReconciliation", {widget: this})); this.$el.prepend(QWeb.render("AccountReconciliation", {widget: this}));
this.$(".oe_account_recon_previous").click(function() { this.$(".oe_account_recon_previous").click(function() {
self.current_partner = (self.current_partner - 1) % self.partners.length; self.current_partner = (((self.current_partner - 1) % self.partners.length) + self.partners.length) % self.partners.length;
self.search_by_partner(); self.search_by_partner();
}); });
this.$(".oe_account_recon_next").click(function() { this.$(".oe_account_recon_next").click(function() {

View File

@ -213,7 +213,7 @@
<search string="Contracts"> <search string="Contracts">
<field name="name" filter_domain="['|', ('name','ilike',self),('code','ilike',self)]" string="Contract"/> <field name="name" filter_domain="['|', ('name','ilike',self),('code','ilike',self)]" string="Contract"/>
<field name="date"/> <field name="date"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="manager_id"/> <field name="manager_id"/>
<field name="parent_id"/> <field name="parent_id"/>
<filter name="open" string="In Progress" domain="[('state','in',('open','draft'))]" help="Contracts in progress (open, draft)"/> <filter name="open" string="In Progress" domain="[('state','in',('open','draft'))]" help="Contracts in progress (open, draft)"/>

View File

@ -223,7 +223,7 @@
<filter icon="terp-check" string="Current" domain="[('state','in', ('draft','open'))]" help="Assets in draft and open states"/> <filter icon="terp-check" string="Current" domain="[('state','in', ('draft','open'))]" help="Assets in draft and open states"/>
<filter icon="terp-dialog-close" string="Closed" domain="[('state','=', 'close')]" help="Assets in closed state"/> <filter icon="terp-dialog-close" string="Closed" domain="[('state','=', 'close')]" help="Assets in closed state"/>
<field name="category_id"/> <field name="category_id"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
</search> </search>
</field> </field>
</record> </record>

View File

@ -49,7 +49,7 @@
<field name="asset_id"/> <field name="asset_id"/>
<field name="asset_category_id"/> <field name="asset_category_id"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
</group> </group>
<group expand="1" string="Group By..."> <group expand="1" string="Group By...">

View File

@ -10,7 +10,7 @@
<field name="priority" eval="20"/> <field name="priority" eval="20"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Customer Followup"> <tree string="Customer Followup">
<field name="name"/> <field name="display_name"/>
<field name="payment_next_action_date"/> <field name="payment_next_action_date"/>
<field name="payment_next_action"/> <field name="payment_next_action"/>
<field name="user_id" invisible="1"/> <field name="user_id" invisible="1"/>
@ -29,7 +29,7 @@
<field name="model">res.partner</field> <field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_tree"/> <field name="inherit_id" ref="base.view_partner_tree"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="name" position="after"> <field name="display_name" position="after">
<field name="payment_responsible_id" invisible="1"/> <field name="payment_responsible_id" invisible="1"/>
</field> </field>
</field> </field>

View File

@ -129,7 +129,7 @@
<filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/> <filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/>
<separator/> <separator/>
<filter icon="terp-gtk-jump-to-ltr" string="To Review" domain="[('state','=','posted'), ('audit','=',False)]" help="To Review"/> <filter icon="terp-gtk-jump-to-ltr" string="To Review" domain="[('state','=','posted'), ('audit','=',False)]" help="To Review"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="journal_id" context="{'journal_id': self, 'set_visible':False}" /> <field name="journal_id" context="{'journal_id': self, 'set_visible':False}" />
<field name="period_id"/> <field name="period_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">

View File

@ -11,7 +11,7 @@
<field name="date"/> <field name="date"/>
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Vouchers"/> <filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Vouchers"/>
<filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/> <filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/>
<field name="partner_id" string="Customer"/> <field name="partner_id" string="Customer" filter_domain="[('partner_id','child_of',self)]"/>
<field name="journal_id" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('bank','cash'))]"/> <field name="journal_id" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('bank','cash'))]"/>
<field name="period_id"/> <field name="period_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -34,7 +34,7 @@
<field name="date"/> <field name="date"/>
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Vouchers"/> <filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Vouchers"/>
<filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/> <filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/>
<field name="partner_id" string="Supplier"/> <field name="partner_id" string="Supplier" filter_domain="[('partner_id','child_of',self)]"/>
<field name="journal_id" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('bank','cash'))]"/> <field name="journal_id" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('bank','cash'))]"/>
<field name="period_id"/> <field name="period_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">

View File

@ -10,7 +10,7 @@
<field name="date"/> <field name="date"/>
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Vouchers"/> <filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Vouchers"/>
<filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/> <filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/>
<field name="partner_id" string="Supplier"/> <field name="partner_id" string="Supplier" filter_domain="[('partner_id','child_of',self)]"/>
<field name="journal_id" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('purchase','purchase_refund'))]"/> <field name="journal_id" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('purchase','purchase_refund'))]"/>
<field name="period_id"/> <field name="period_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -32,7 +32,7 @@
<field name="date"/> <field name="date"/>
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Vouchers"/> <filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Vouchers"/>
<filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/> <filter icon="terp-camera_test" string="Posted" domain="[('state','=','posted')]" help="Posted Vouchers"/>
<field name="partner_id" string="Customer"/> <field name="partner_id" string="Customer" filter_domain="[('partner_id','child_of',self)]"/>
<field name="journal_id" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('sale','sale_refund'))]"/> <field name="journal_id" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('sale','sale_refund'))]"/>
<field name="period_id"/> <field name="period_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">

View File

@ -134,6 +134,9 @@ class res_partner(osv.osv):
'vat_subjected': fields.boolean('VAT Legal Statement', help="Check this box if the partner is subjected to the VAT. It will be used for the VAT legal statement.") 'vat_subjected': fields.boolean('VAT Legal Statement', help="Check this box if the partner is subjected to the VAT. It will be used for the VAT legal statement.")
} }
def _commercial_fields(self, cr, uid, context=None):
return super(res_partner, self)._commercial_fields(cr, uid, context=context) + ['vat_subjected']
def _construct_constraint_msg(self, cr, uid, ids, context=None): def _construct_constraint_msg(self, cr, uid, ids, context=None):
def default_vat_check(cn, vn): def default_vat_check(cn, vn):
# by default, a VAT number is valid if: # by default, a VAT number is valid if:

View File

@ -330,7 +330,7 @@
<field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike',self)]"/> <field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike',self)]"/>
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/> <field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
<field name="user_id"/> <field name="user_id"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="create_date"/> <field name="create_date"/>
<field name="country_id" context="{'invisible_country': False}"/> <field name="country_id" context="{'invisible_country': False}"/>
<separator/> <separator/>
@ -548,7 +548,7 @@
<field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike', self)]"/> <field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike', self)]"/>
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/> <field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
<field name="user_id"/> <field name="user_id"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<separator/> <separator/>
<filter string="New" name="new" domain="[('state','=','draft')]" help="New Opportunities"/> <filter string="New" name="new" domain="[('state','=','draft')]" help="New Opportunities"/>
<filter string="In Progress" name="open" domain="[('state','=','open')]" help="Open Opportunities"/> <filter string="In Progress" name="open" domain="[('state','=','open')]" help="Open Opportunities"/>

View File

@ -186,7 +186,7 @@
<separator/> <separator/>
<filter string="Phone Calls Assigned to Me or My Team(s)" icon="terp-personal+" domain="['|', ('section_id.user_id','=',uid), ('user_id', '=', uid)]" <filter string="Phone Calls Assigned to Me or My Team(s)" icon="terp-personal+" domain="['|', ('section_id.user_id','=',uid), ('user_id', '=', uid)]"
help="Phone Calls Assigned to the current user or with a team having the current user as team leader"/> help="Phone Calls Assigned to the current user or with a team having the current user as team leader"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="user_id"/> <field name="user_id"/>
<field name="section_id" string="Sales Team" <field name="section_id" string="Sales Team"
groups="base.group_multi_salesteams"/> groups="base.group_multi_salesteams"/>

View File

@ -82,7 +82,7 @@
groups="base.group_multi_salesteams"/> groups="base.group_multi_salesteams"/>
<field name="user_id" string="Salesperson"/> <field name="user_id" string="Salesperson"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="stage_id" domain="[('section_ids', '=', 'section_id')]" /> <field name="stage_id" domain="[('section_ids', '=', 'section_id')]" />
<field name="type_id"/> <field name="type_id"/>
<field name="channel_id"/> <field name="channel_id"/>

View File

@ -64,7 +64,7 @@
groups="base.group_multi_salesteams"/> groups="base.group_multi_salesteams"/>
<field name="user_id" string="Salesperson"/> <field name="user_id" string="Salesperson"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<field name="creation_date"/> <field name="creation_date"/>
<field name="opening_date"/> <field name="opening_date"/>

View File

@ -201,7 +201,7 @@
<filter icon="terp-gtk-media-pause" string="Pending" domain="[('state','=','pending')]"/> <filter icon="terp-gtk-media-pause" string="Pending" domain="[('state','=','pending')]"/>
<separator/> <separator/>
<filter string="Unassigned Claims" icon="terp-personal-" domain="[('user_id','=', False)]" help="Unassigned Claims" /> <filter string="Unassigned Claims" icon="terp-personal-" domain="[('user_id','=', False)]" help="Unassigned Claims" />
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="user_id"/> <field name="user_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Partner" icon="terp-partner" domain="[]" help="Partner" context="{'group_by':'partner_id'}"/> <filter string="Partner" icon="terp-partner" domain="[]" help="Partner" context="{'group_by':'partner_id'}"/>

View File

@ -65,7 +65,7 @@
<field name="section_id" string="Sales Team" context="{'invisible_section': False}" <field name="section_id" string="Sales Team" context="{'invisible_section': False}"
groups="base.group_multi_salesteams"/> groups="base.group_multi_salesteams"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="stage_id" domain="[('section_ids', '=', 'section_id')]"/> <field name="stage_id" domain="[('section_ids', '=', 'section_id')]"/>
<field name="categ_id" domain="[('object_id.model', '=', 'crm.claim')]"/> <field name="categ_id" domain="[('object_id.model', '=', 'crm.claim')]"/>
<field name="priority"/> <field name="priority"/>

View File

@ -152,7 +152,7 @@
<separator/> <separator/>
<filter string="Assigned to Me or My Sales Team(s)" icon="terp-personal+" domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]" <filter string="Assigned to Me or My Sales Team(s)" icon="terp-personal+" domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
help="Helpdesk requests that are assigned to me or to one of the sale teams I manage" /> help="Helpdesk requests that are assigned to me or to one of the sale teams I manage" />
<field name="partner_id" /> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="user_id"/> <field name="user_id"/>
<field name="section_id" string="Sales Team" groups="base.group_multi_salesteams"/> <field name="section_id" string="Sales Team" groups="base.group_multi_salesteams"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">

View File

@ -62,6 +62,7 @@
<field name="user_id" string="Salesperson"/> <field name="user_id" string="Salesperson"/>
<field name="section_id" string="Sales Team" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/> <field name="section_id" string="Sales Team" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<group expand="0" string="Extended Filters..." groups="base.group_no_one"> <group expand="0" string="Extended Filters..." groups="base.group_no_one">
<field name="priority" string="Priority"/> <field name="priority" string="Priority"/>
<field name="categ_id"/> <field name="categ_id"/>

View File

@ -32,7 +32,7 @@
<field name="user_id" invisible="1"/> <field name="user_id" invisible="1"/>
<field name="name"/> <field name="name"/>
<field name="currency_id" groups="base.group_multi_currency"/> <field name="currency_id" groups="base.group_multi_currency"/>
<field name="amount" sum="Total Expenses"/> <field name="amount" sum="Total Amount"/>
<field name="state"/> <field name="state"/>
</tree> </tree>
</field> </field>

View File

@ -44,6 +44,11 @@ class res_partner(osv.osv):
help='Select Algorithm to generate the Structured Communication on Outgoing Invoices.' ), help='Select Algorithm to generate the Structured Communication on Outgoing Invoices.' ),
} }
def _commercial_fields(self, cr, uid, context=None):
return super(res_partner, self)._commercial_fields(cr, uid, context=context) + \
['out_inv_comm_type', 'out_inv_comm_algorithm']
_default = { _default = {
'out_inv_comm_type': 'none', 'out_inv_comm_type': 'none',
} }

View File

@ -28,9 +28,32 @@ class res_partner(osv.osv):
_columns = { _columns = {
'nrc' : fields.char('NRC', size=16, help='Registration number at the Registry of Commerce'), 'nrc' : fields.char('NRC', size=16, help='Registration number at the Registry of Commerce'),
} }
# The SQL constraints are no-ops but present only to display the right error message to the
# user when the partial unique indexes defined below raise errors/
# The real constraints need to be implemented with PARTIAL UNIQUE INDEXES (see auto_init),
# due to the way accounting data is delegated by contacts to their companies in OpenERP 7.0.
_sql_constraints = [ _sql_constraints = [
('vat_uniq', 'unique (vat)', 'The vat of the partner must be unique !'), ('vat_uniq', 'unique (id)', 'The vat of the partner must be unique !'),
('nrc_uniq', 'unique (nrc)', 'The code of the partner must be unique !') ('nrc_uniq', 'unique (id)', 'The code of the partner must be unique !')
] ]
def _auto_init(self, cr, context=None):
result = super(res_partner, self)._auto_init(cr, context=context)
# Real implementation of the vat/nrc constraints: only "commercial entities" need to have
# unique numbers, and the condition for being a commercial entity is "is_company or parent_id IS NULL".
# Contacts inside a company automatically have a copy of the company's commercial fields
# (see _commercial_fields()), so they are automatically consistent.
cr.execute("""
DROP INDEX IF EXISTS res_partner_vat_uniq_for_companies;
DROP INDEX IF EXISTS res_partner_nrc_uniq_for_companies;
CREATE UNIQUE INDEX res_partner_vat_uniq_for_companies ON res_partner (vat) WHERE is_company OR parent_id IS NULL;
CREATE UNIQUE INDEX res_partner_nrc_uniq_for_companies ON res_partner (nrc) WHERE is_company OR parent_id IS NULL;
""")
return result
def _commercial_fields(self, cr, uid, context=None):
return super(res_partner, self)._commercial_fields(cr, uid, context=context) + ['nrc']
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -210,7 +210,7 @@
<separator/> <separator/>
<filter icon="terp-dolar" string="Invoiced" domain="[('invoiced','=',True)]"/> <filter icon="terp-dolar" string="Invoiced" domain="[('invoiced','=',True)]"/>
<field name="product_id"/> <field name="product_id"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/> <filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/> <filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/>

View File

@ -1,67 +1,63 @@
openerp.pad = function(instance) { openerp.pad = function(instance) {
instance.web.form.FieldPad = instance.web.form.AbstractField.extend({ instance.web.form.FieldPad = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeWidgetMixin, {
template: 'FieldPad', template: 'FieldPad',
configured: false,
content: "", content: "",
start: function() { init: function() {
this._super(); this._super.apply(this, arguments);
var self = this; this.set("configured", true);
this.on('change:effective_readonly',this,function(){ this.on("change:configured", this, this.switch_configured);
self.renderElement(); },
initialize_content: function() {
this.switch_configured();
this.$('.oe_pad_switch').click(function() {
self.$el.toggleClass('oe_pad_fullscreen');
}); });
this.render_value();
},
switch_configured: function() {
this.$(".oe_unconfigured").toggle(! this.get("configured"));
this.$(".oe_configured").toggle(this.get("configured"));
}, },
render_value: function() { render_value: function() {
var self = this; var self = this;
var _super = _.bind(this._super, this); if (this.get("configured") && ! this.get("value")) {
if (this.get("value") === false || this.get("value") === "") { self.view.dataset.call('pad_generate_url', {
self.view.dataset.call('pad_generate_url',{context:{ context: {
model: self.view.model, model: self.view.model,
field_name: self.name, field_name: self.name,
object_id: self.view.datarecord.id object_id: self.view.datarecord.id
}}).done(function(data) { },
if(data&&data.url){ }).done(function(data) {
self.set({value: data.url}); if (! data.url) {
_super(data.url); self.set("configured", false);
self.renderElement(); } else {
self.set("value", data.url);
} }
}); });
} else {
self.renderElement();
} }
this._dirty_flag = true; this.$('.oe_pad_content').html("");
},
renderElement: function(){
var self = this;
var value = this.get('value'); var value = this.get('value');
if (this.pad_loading_request) { if (this.pad_loading_request) {
this.pad_loading_request.abort(); this.pad_loading_request.abort();
} }
if(!_.str.startsWith(value,'http')){ if (_.str.startsWith(value, 'http')) {
this.configured = false; if (! this.get('effective_readonly')) {
this.content = ""; var content = '<iframe width="100%" height="100%" frameborder="0" src="' + value + '?showChat=false&userName=' + this.session.username + '"></iframe>';
}else{ this.$('.oe_pad_content').html(content);
this.configured = true; this._dirty_flag = true;
if(!this.get('effective_readonly')){ } else {
this.content = '<iframe width="100%" height="100%" frameborder="0" src="'+value+'?showChat=false&userName='+this.session.username+'"></iframe>';
}else{
this.content = '<div class="oe_pad_loading">... Loading pad ...</div>'; this.content = '<div class="oe_pad_loading">... Loading pad ...</div>';
this.pad_loading_request = $.get(value+'/export/html') this.pad_loading_request = $.get(value + '/export/html').done(function(data) {
.done(function(data){
groups = /\<\s*body\s*\>(.*?)\<\s*\/body\s*\>/.exec(data); groups = /\<\s*body\s*\>(.*?)\<\s*\/body\s*\>/.exec(data);
data = (groups || []).length >= 2 ? groups[1] : ''; data = (groups || []).length >= 2 ? groups[1] : '';
self.$('.oe_pad_content').html('<div class="oe_pad_readonly"><div>'); self.$('.oe_pad_content').html('<div class="oe_pad_readonly"><div>');
self.$('.oe_pad_readonly').html(data); self.$('.oe_pad_readonly').html(data);
}).error(function(){ }).fail(function() {
self.$('.oe_pad_content').text('Unable to load pad'); self.$('.oe_pad_content').text('Unable to load pad');
}); });
} }
} }
this._super();
this.$('.oe_pad_content').html(this.content);
this.$('.oe_pad_switch').click(function(){
self.$el.toggleClass('oe_pad_fullscreen');
});
}, },
}); });

View File

@ -5,32 +5,25 @@
<t t-name="FieldPad"> <t t-name="FieldPad">
<t t-if="!widget.configured"> <div class="oe_form_field_text oe_pad">
<div class="oe_form_field_text oe_pad oe_unconfigured"> <p class="oe_unconfigured">
<p> You must configure the etherpad through the menu Settings > Companies > Companies, in the configuration tab of your company.
You must configure the etherpad through the menu Settings > Companies > Companies, in the configuration tab of your company. </p>
</p>
</div>
</t>
<t t-if="widget.configured">
<t t-if="widget.get('effective_readonly')"> <t t-if="widget.get('effective_readonly')">
<div class="oe_form_field_text oe_pad oe_configured"> <div class="oe_pad_content etherpad_readonly oe_configured">
<div class="oe_pad_content etherpad_readonly">
</div>
</div> </div>
</t> </t>
<t t-if="! widget.get('effective_readonly')">
<div class="oe_pad_switch_positioner oe_configured">
<span class="oe_pad_switch oe_e">&amp;Ntilde;</span>
</div>
<div class="oe_pad_content oe_editing oe_configured">
</div>
</t>
</div>
<t t-if="!widget.get('effective_readonly')">
<div class="oe_form_field_text oe_pad oe_configured">
<div class="oe_pad_switch_positioner">
<span class="oe_pad_switch oe_e">&amp;Ntilde;</span>
</div>
<div class="oe_pad_content oe_editing">
</div>
</div>
</t>
</t>
</t> </t>
</templates> </templates>

View File

@ -36,6 +36,9 @@ class res_partner(osv.osv):
help="This pricelist will be used, instead of the default one, for sales to the current partner"), help="This pricelist will be used, instead of the default one, for sales to the current partner"),
} }
def _commercial_fields(self, cr, uid, context=None):
return super(res_partner, self)._commercial_fields(cr, uid, context=context) + ['property_product_pricelist']
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -8,9 +8,12 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<page string="Sales &amp; Purchases" position="inside"> <page string="Sales &amp; Purchases" position="inside">
<group> <group>
<group name="pricelists" groups="product.group_sale_pricelist"> <group name="pricelists" groups="product.group_sale_pricelist" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}">
<field name="property_product_pricelist"/> <field name="property_product_pricelist"/>
</group> </group>
<div name="parent_pricelists" groups="product.group_sale_pricelist" attrs="{'invisible': ['|',('is_company','=',True),('parent_id','=',False)]}">
<p>Pricelists are managed on <button name="open_commercial_entity" type="object" string="the parent company" class="oe_link"/></p>
</div>
</group> </group>
</page> </page>
</field> </field>

View File

@ -234,7 +234,10 @@ class product_pricelist(osv.osv):
qty, context=context)[res['base_pricelist_id']] qty, context=context)[res['base_pricelist_id']]
ptype_src = self.browse(cr, uid, res['base_pricelist_id']).currency_id.id ptype_src = self.browse(cr, uid, res['base_pricelist_id']).currency_id.id
uom_price_already_computed = True uom_price_already_computed = True
price = currency_obj.compute(cr, uid, ptype_src, res['currency_id'], price_tmp, round=False) price = currency_obj.compute(cr, uid,
ptype_src, res['currency_id'],
price_tmp, round=False,
context=context)
elif res['base'] == -2: elif res['base'] == -2:
# this section could be improved by moving the queries outside the loop: # this section could be improved by moving the queries outside the loop:
where = [] where = []

View File

@ -189,7 +189,7 @@
<separator/> <separator/>
<filter string="Project(s) Manager" domain="[('user_id','=',uid)]" help="Projects in which I am a manager" icon="terp-personal"/> <filter string="Project(s) Manager" domain="[('user_id','=',uid)]" help="Projects in which I am a manager" icon="terp-personal"/>
<field name="user_id" string="Project Manager"/> <field name="user_id" string="Project Manager"/>
<field name="partner_id" string="Contact"/> <field name="partner_id" string="Contact" filter_domain="[('partner_id', 'child_of', self)]"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Manager" name="Manager" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Manager" name="Manager" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Contact" name="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/> <filter string="Contact" name="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>

View File

@ -69,7 +69,7 @@
<filter icon="terp-personal-" string="Non Assigned Tasks to users" help="Non Assigned Tasks to users" domain="[('user_id','=',False)]"/> <filter icon="terp-personal-" string="Non Assigned Tasks to users" help="Non Assigned Tasks to users" domain="[('user_id','=',False)]"/>
<field name="project_id"/> <field name="project_id"/>
<field name="user_id"/> <field name="user_id"/>
<field name="partner_id" /> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
<field name="priority"/> <field name="priority"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>

View File

@ -146,7 +146,7 @@
<field name="model">project.issue</field> <field name="model">project.issue</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Issue Tracker Search"> <search string="Issue Tracker Search">
<field name="name" string="Issue" filter_domain="['|', '|',('description','ilike',self),('email_from','ilike',self),('name','ilike',self)]"/> <field name="name" string="Issue" filter_domain="['|', '|', '|', ('partner_id','child_of',self), ('description','ilike',self),('email_from','ilike',self),('name','ilike',self)]"/>
<field name="id"/> <field name="id"/>
<filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> <filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
<separator/> <separator/>
@ -154,10 +154,11 @@
<filter string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/> <filter string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/>
<separator/> <separator/>
<filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-"/> <filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-"/>
<field name="partner_id"/> <separator/>
<field name="user_id"/> <field name="user_id"/>
<field name="project_id"/> <field name="project_id"/>
<field name="categ_ids"/> <field name="categ_ids"/>
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<group expand="0" string="Group By..." > <group expand="0" string="Group By..." >
<filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Contact" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/> <filter string="Contact" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>

View File

@ -55,7 +55,7 @@
<filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/> <filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/>
<field name="project_id"/> <field name="project_id"/>
<field name="user_id"/> <field name="user_id"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="version_id"/> <field name="version_id"/>
<group expand="1" string="Group By..."> <group expand="1" string="Group By...">
<filter string="Assigned to" name="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" /> <filter string="Assigned to" name="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" />

View File

@ -43,6 +43,9 @@ class res_partner(osv.osv):
super(res_partner, self).copy(cr, uid, id, default=default, context=context) super(res_partner, self).copy(cr, uid, id, default=default, context=context)
def _commercial_fields(self, cr, uid, context=None):
return super(res_partner, self)._commercial_fields(cr, uid, context=context) + ['property_product_pricelist_purchase']
_columns = { _columns = {
'property_product_pricelist_purchase': fields.property( 'property_product_pricelist_purchase': fields.property(
'product.pricelist', 'product.pricelist',

View File

@ -270,7 +270,7 @@
<filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase order which are in the exception state"/> <filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase order which are in the exception state"/>
<separator/> <separator/>
<filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not Invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced."/> <filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not Invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced."/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="product_id"/> <field name="product_id"/>
<field name="create_uid"/> <field name="create_uid"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -297,7 +297,7 @@
<filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase orders which are in exception state"/> <filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase orders which are in exception state"/>
<separator/> <separator/>
<filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not Invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced."/> <filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not Invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced."/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="product_id"/> <field name="product_id"/>
<field name="create_uid"/> <field name="create_uid"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -481,7 +481,7 @@
<search string="Search Purchase Order"> <search string="Search Purchase Order">
<field name="order_id"/> <field name="order_id"/>
<field name="product_id"/> <field name="product_id"/>
<field name="partner_id" string="Supplier"/> <field name="partner_id" string="Supplier" filter_domain="[('partner_id', 'child_of', self)]"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Supplier" icon="terp-partner" domain="[]" context="{'group_by' : 'partner_id'}" /> <filter string="Supplier" icon="terp-partner" domain="[]" context="{'group_by' : 'partner_id'}" />
<filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by' : 'product_id'}" /> <filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by' : 'product_id'}" />

View File

@ -63,14 +63,34 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//label[@for='type']" position="attributes"> <xpath expr="//label[@for='type']" position="attributes">
<attribute name="groups">sale.group_delivery_invoice_address</attribute> <attribute name="groups">sale.group_delivery_invoice_address</attribute>
</xpath>
<xpath expr="//label[@for='type']" position="attributes">
<attribute name="invisible">False</attribute> <attribute name="invisible">False</attribute>
</xpath> </xpath>
<xpath expr="//div[@name='div_type']" position="attributes"> <xpath expr="//div[@name='div_type']" position="attributes">
<attribute name="invisible">False</attribute> <attribute name="invisible">False</attribute>
<attribute name="groups">sale.group_delivery_invoice_address</attribute>
</xpath> </xpath>
<xpath expr="//div[@name='div_type']" position="attributes"> <xpath expr="//field[@name='use_parent_address']" position="attributes">
<attribute name="invisible">False</attribute>
<attribute name="groups">sale.group_delivery_invoice_address</attribute>
</xpath>
<xpath expr="//label[@for='use_parent_address']" position="attributes">
<attribute name="invisible">False</attribute>
<attribute name="groups">sale.group_delivery_invoice_address</attribute>
</xpath>
<xpath expr="//field[@name='child_ids']//field[@name='use_parent_address']" position="attributes">
<attribute name="invisible">False</attribute>
<attribute name="groups">sale.group_delivery_invoice_address</attribute>
</xpath>
<xpath expr="//field[@name='child_ids']//label[@for='use_parent_address']" position="attributes">
<attribute name="invisible">False</attribute>
<attribute name="groups">sale.group_delivery_invoice_address</attribute>
</xpath>
<xpath expr="//field[@name='child_ids']//div[@name='div_type']" position="attributes">
<attribute name="invisible">False</attribute>
<attribute name="groups">sale.group_delivery_invoice_address</attribute>
</xpath>
<xpath expr="//field[@name='child_ids']//label[@for='type']" position="attributes">
<attribute name="invisible">False</attribute>
<attribute name="groups">sale.group_delivery_invoice_address</attribute> <attribute name="groups">sale.group_delivery_invoice_address</attribute>
</xpath> </xpath>
</field> </field>

View File

@ -320,10 +320,6 @@ class sale_order(osv.osv):
return {'value': {'partner_invoice_id': False, 'partner_shipping_id': False, 'payment_term': False, 'fiscal_position': False}} return {'value': {'partner_invoice_id': False, 'partner_shipping_id': False, 'payment_term': False, 'fiscal_position': False}}
part = self.pool.get('res.partner').browse(cr, uid, part, context=context) part = self.pool.get('res.partner').browse(cr, uid, part, context=context)
#if the chosen partner is not a company and has a parent company, use the parent to choose the delivery, the
#invoicing addresses and all the fields related to the partner.
if part.parent_id and not part.is_company:
part = part.parent_id
addr = self.pool.get('res.partner').address_get(cr, uid, [part.id], ['delivery', 'invoice', 'contact']) addr = self.pool.get('res.partner').address_get(cr, uid, [part.id], ['delivery', 'invoice', 'contact'])
pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False
payment_term = part.property_payment_term and part.property_payment_term.id or False payment_term = part.property_payment_term and part.property_payment_term.id or False
@ -1024,4 +1020,16 @@ class account_invoice(osv.Model):
sale_order_obj.message_post(cr, uid, so_ids, body=_("Invoice paid"), context=context) sale_order_obj.message_post(cr, uid, so_ids, body=_("Invoice paid"), context=context)
return res return res
def unlink(self, cr, uid, ids, context=None):
""" Overwrite unlink method of account invoice to send a trigger to the sale workflow upon invoice deletion """
invoice_ids = self.search(cr, uid, [('id', 'in', ids), ('state', 'in', ['draft', 'cancel'])], context=context)
#if we can't cancel all invoices, do nothing
if len(invoice_ids) == len(ids):
#Cancel invoice(s) first before deleting them so that if any sale order is associated with them
#it will trigger the workflow to put the sale order in an 'invoice exception' state
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_validate(uid, 'account.invoice', id, 'invoice_cancel', cr)
return super(account_invoice, self).unlink(cr, uid, ids, context=context)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -156,7 +156,7 @@
<field name="partner_id" on_change="onchange_partner_id(partner_id, context)" domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": True}'/> <field name="partner_id" on_change="onchange_partner_id(partner_id, context)" domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": True}'/>
<field name="partner_invoice_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'invoice'}"/> <field name="partner_invoice_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'invoice'}"/>
<field name="partner_shipping_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'delivery'}"/> <field name="partner_shipping_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'delivery'}"/>
<field name="project_id" context="{'partner_id':partner_id, 'default_pricelist_id':pricelist_id, 'default_name':name, 'default_type': 'contract'}" groups="sale.group_analytic_accounting" domain="[('type','in',['view','normal','contract'])]"/> <field name="project_id" context="{'partner_id':partner_invoice_id, 'default_pricelist_id':pricelist_id, 'default_name':name, 'default_type': 'contract'}" groups="sale.group_analytic_accounting" domain="[('type','in',['view','normal','contract'])]"/>
</group> </group>
<group> <group>
<field name="date_order"/> <field name="date_order"/>
@ -308,7 +308,7 @@
<filter icon="terp-dolar_ok!" string="Done" domain="[('state','=','done')]" help="Sales Order done"/> <filter icon="terp-dolar_ok!" string="Done" domain="[('state','=','done')]" help="Sales Order done"/>
<separator/> <separator/>
<filter string="My Sales Orders" domain="[('user_id','=',uid)]" help="My Sales Orders" icon="terp-personal" name="my_sale_orders_filter"/> <filter string="My Sales Orders" domain="[('user_id','=',uid)]" help="My Sales Orders" icon="terp-personal" name="my_sale_orders_filter"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="user_id"/> <field name="user_id"/>
<field name="project_id"/> <field name="project_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -329,7 +329,6 @@
<field name="view_mode">tree,form,calendar,graph</field> <field name="view_mode">tree,form,calendar,graph</field>
<field name="search_view_id" ref="view_sales_order_filter"/> <field name="search_view_id" ref="view_sales_order_filter"/>
<field name="context">{ <field name="context">{
'show_address': 1,
'search_default_my_sale_orders_filter': 1 'search_default_my_sale_orders_filter': 1
} }
</field> </field>
@ -376,7 +375,7 @@
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_id" ref="view_quotation_tree"/> <field name="view_id" ref="view_quotation_tree"/>
<field name="view_mode">tree,form,calendar,graph</field> <field name="view_mode">tree,form,calendar,graph</field>
<field name="context">{'show_address': 1, 'search_default_my_sale_orders_filter': 1}</field> <field name="context">{'search_default_my_sale_orders_filter': 1}</field>
<field name="domain">[('state','in',('draft','sent','cancel'))]</field> <field name="domain">[('state','in',('draft','sent','cancel'))]</field>
<field name="search_view_id" ref="view_sales_order_filter"/> <field name="search_view_id" ref="view_sales_order_filter"/>
<field name="help" type="html"> <field name="help" type="html">
@ -477,7 +476,7 @@
<separator/> <separator/>
<filter string="My Sales Order Lines" icon="terp-personnal" domain="[('salesman_id','=',uid)]" help="Sales Order Lines related to a Sales Order of mine"/> <filter string="My Sales Order Lines" icon="terp-personnal" domain="[('salesman_id','=',uid)]" help="Sales Order Lines related to a Sales Order of mine"/>
<field name="order_id"/> <field name="order_id"/>
<field name="order_partner_id"/> <field name="order_partner_id" filter_domain="[('order_partner_id', 'child_of', self)]"/>
<field name="product_id"/> <field name="product_id"/>
<field name="salesman_id"/> <field name="salesman_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -503,7 +502,7 @@
<separator/> <separator/>
<filter string="My Sales Order Lines" icon="terp-personal" domain="[('salesman_id','=',uid)]" help="My Sales Order Lines"/> <filter string="My Sales Order Lines" icon="terp-personal" domain="[('salesman_id','=',uid)]" help="My Sales Order Lines"/>
<field name="order_id"/> <field name="order_id"/>
<field name="order_partner_id"/> <field name="order_partner_id" filter_domain="[('order_partner_id', 'child_of', self)]"/>
<field name="product_id"/> <field name="product_id"/>
<field name="salesman_id"/> <field name="salesman_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">

View File

@ -52,6 +52,10 @@ class res_partner(osv.osv):
help = "This invoicing type will be used, by default, to invoice the current partner."), help = "This invoicing type will be used, by default, to invoice the current partner."),
} }
def _commercial_fields(self, cr, uid, context=None):
return super(res_partner, self)._commercial_fields(cr, uid, context=context) + ['property_invoice_type']
class picking(osv.osv): class picking(osv.osv):
_inherit = "stock.picking" _inherit = "stock.picking"
_columns = { _columns = {

View File

@ -146,7 +146,7 @@
<field name="inherit_id" ref="base.view_partner_form"/> <field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<page string="Sales &amp; Purchases" position="inside"> <page string="Sales &amp; Purchases" position="inside">
<group colspan="2" col="2"> <group colspan="2" col="2" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}">
<separator string="Invoicing" colspan="2"/> <separator string="Invoicing" colspan="2"/>
<field name="property_invoice_type"/> <field name="property_invoice_type"/>
</group> </group>

View File

@ -54,7 +54,7 @@ class stock_picking(osv.osv):
We select the partner of the sales order as the partner of the customer invoice We select the partner of the sales order as the partner of the customer invoice
""" """
if picking.sale_id: if picking.sale_id:
return picking.sale_id.partner_id return picking.sale_id.partner_invoice_id
return super(stock_picking, self)._get_partner_to_invoice(cr, uid, picking, context=context) return super(stock_picking, self)._get_partner_to_invoice(cr, uid, picking, context=context)
def _get_comment_invoice(self, cursor, user, picking): def _get_comment_invoice(self, cursor, user, picking):

View File

@ -5,6 +5,12 @@
- -
!assert {model: sale.order, id: sale.sale_order_6, string: The amount of the Quotation is not correctly computed}: !assert {model: sale.order, id: sale.sale_order_6, string: The amount of the Quotation is not correctly computed}:
- sum([l.price_subtotal for l in order_line]) == amount_untaxed - sum([l.price_subtotal for l in order_line]) == amount_untaxed
-
I set an explicit invoicing partner that is different from the main SO Customer
-
!python {model: sale.order, id: sale.sale_order_6}: |
order = self.browse(cr, uid, ref("sale.sale_order_6"))
order.write({'partner_invoice_id': ref('base.res_partner_address_29')})
- -
I confirm the quotation with Invoice based on deliveries policy. I confirm the quotation with Invoice based on deliveries policy.
- -
@ -110,13 +116,13 @@
!python {model: sale.order}: | !python {model: sale.order}: |
order = self.browse(cr, uid, ref("sale.sale_order_6")) order = self.browse(cr, uid, ref("sale.sale_order_6"))
assert order.invoice_ids, "Invoice is not created." assert order.invoice_ids, "Invoice is not created."
ac = order.partner_id.property_account_receivable.id ac = order.partner_invoice_id.property_account_receivable.id
journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'sale'), ('company_id', '=', order.company_id.id)]) journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'sale'), ('company_id', '=', order.company_id.id)])
for invoice in order.invoice_ids: for invoice in order.invoice_ids:
assert invoice.type == 'out_invoice',"Invoice should be Customer Invoice." assert invoice.type == 'out_invoice',"Invoice should be Customer Invoice."
assert invoice.account_id.id == ac,"Invoice account is not correspond." assert invoice.account_id.id == ac,"Invoice account is not correspond."
assert invoice.reference == order.client_order_ref or order.name,"Reference is not correspond." assert invoice.reference == order.client_order_ref or order.name,"Reference is not correspond."
assert invoice.partner_id.id == order.partner_id.id,"Customer is not correspond." assert invoice.partner_id.id == order.partner_invoice_id.id,"Customer does not correspond."
assert invoice.currency_id.id == order.pricelist_id.currency_id.id, "Currency is not correspond." assert invoice.currency_id.id == order.pricelist_id.currency_id.id, "Currency is not correspond."
assert invoice.comment == (order.note or ''),"Note is not correspond." assert invoice.comment == (order.note or ''),"Note is not correspond."
assert invoice.journal_id.id in journal_ids,"Sales Journal is not link on Invoice." assert invoice.journal_id.id in journal_ids,"Sales Journal is not link on Invoice."

View File

@ -149,7 +149,7 @@
<field name="location_id" filter_domain="[('location_id', 'child_of', self)]"/> <field name="location_id" filter_domain="[('location_id', 'child_of', self)]"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
<field name="partner_id" context="{'contact_display':'partner'}"/> <field name="partner_id" context="{'contact_display':'partner'}" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="product_categ_id" /> <field name="product_categ_id" />
<field name="prodlot_id"/> <field name="prodlot_id"/>
<field name="state"/> <field name="state"/>

View File

@ -817,7 +817,7 @@
<filter icon="terp-check" name="available" string="Ready" domain="[('state','=','assigned')]" help="Assigned Internal Moves"/> <filter icon="terp-check" name="available" string="Ready" domain="[('state','=','assigned')]" help="Assigned Internal Moves"/>
<filter icon="terp-camera_test" name="confirmed" string="Waiting" domain="[('state','=','confirmed')]" help="Confirmed Internal Moves"/> <filter icon="terp-camera_test" name="confirmed" string="Waiting" domain="[('state','=','confirmed')]" help="Confirmed Internal Moves"/>
<filter icon="terp-dialog-close" name="done" string="Done" domain="[('state','=','done')]" help="Pickings already processed"/> <filter icon="terp-dialog-close" name="done" string="Done" domain="[('state','=','done')]" help="Pickings already processed"/>
<field name="partner_id"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="product_id"/> <field name="product_id"/>
<field name="stock_journal_id"/> <field name="stock_journal_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -944,6 +944,7 @@
<filter icon="terp-accessories-archiver-minus" string="Back Orders" domain="[('backorder_id', '!=', False)]" help="Is a Back Order"/> <filter icon="terp-accessories-archiver-minus" string="Back Orders" domain="[('backorder_id', '!=', False)]" help="Is a Back Order"/>
<separator/> <separator/>
<filter icon="terp-dolar" name="to_invoice" string="To Invoice" domain="[('invoice_state','=','2binvoiced')]" help="Delivery orders to invoice"/> <filter icon="terp-dolar" name="to_invoice" string="To Invoice" domain="[('invoice_state','=','2binvoiced')]" help="Delivery orders to invoice"/>
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="stock_journal_id"/> <field name="stock_journal_id"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -1069,6 +1070,7 @@
<filter icon="terp-accessories-archiver-minus" string="Back Orders" domain="[('backorder_id', '!=', False)]" help="Is a Back Order"/> <filter icon="terp-accessories-archiver-minus" string="Back Orders" domain="[('backorder_id', '!=', False)]" help="Is a Back Order"/>
<separator/> <separator/>
<filter string="To Invoice" name="to_invoice" icon="terp-dolar" domain="[('invoice_state', '=', '2binvoiced')]"/> <filter string="To Invoice" name="to_invoice" icon="terp-dolar" domain="[('invoice_state', '=', '2binvoiced')]"/>
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="stock_journal_id"/> <field name="stock_journal_id"/>
<field name="product_id"/> <field name="product_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
@ -1380,7 +1382,7 @@
<filter icon="terp-go-today" string="Today" domain="[('date','&lt;=',time.strftime('%%Y-%%m-%%d 23:59:59')),('date','&gt;=',time.strftime('%%Y-%%m-%%d 00:00:00'))]" help="Orders processed Today or planned for Today"/> <filter icon="terp-go-today" string="Today" domain="[('date','&lt;=',time.strftime('%%Y-%%m-%%d 23:59:59')),('date','&gt;=',time.strftime('%%Y-%%m-%%d 00:00:00'))]" help="Orders processed Today or planned for Today"/>
<field name="product_id"/> <field name="product_id"/>
<field name="name" string="Location" filter_domain="['|',('location_id','ilike',self),('location_dest_id','ilike',self)]"/> <field name="name" string="Location" filter_domain="['|',('location_id','ilike',self),('location_dest_id','ilike',self)]"/>
<field name="partner_id" string="Partner" filter_domain="[('picking_id.partner_id','ilike',self)]"/> <field name="partner_id" string="Partner" filter_domain="[('picking_id.partner_id','child_of',self)]"/>
<field name="prodlot_id"/> <field name="prodlot_id"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Product" name="by_product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/> <filter string="Product" name="by_product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/>