[IMP]: improve name search method for account.move
[IMP]: try to implement a voucher as like quickbook bzr revid: mga@tinyerp.com-20100816201432-g4trvy7k336fqq6k
This commit is contained in:
parent
5d9a7b0404
commit
8828ec7588
|
@ -1053,12 +1053,15 @@ class account_move(osv.osv):
|
|||
if not context:
|
||||
context={}
|
||||
ids = []
|
||||
|
||||
if name:
|
||||
ids += self.search(cr, user, [('name','=',name)], limit=limit)
|
||||
if not ids:
|
||||
ids += self.search(cr, user, [('id','=',name)], limit=limit)
|
||||
ids += self.search(cr, user, [('name','ilike',name)]+args, limit=limit, context=context)
|
||||
|
||||
if not ids and name and type(name) == int:
|
||||
ids += self.search(cr, user, [('id','=',name)]+args, limit=limit, context=context)
|
||||
|
||||
if not ids:
|
||||
ids += self.search(cr, user, args, limit=limit, context=context)
|
||||
|
||||
return self.name_get(cr, user, ids, context=context)
|
||||
|
||||
def name_get(self, cursor, user, ids, context=None):
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
##############################################################################
|
||||
|
||||
import time
|
||||
import netsvc
|
||||
from osv import fields
|
||||
from osv import osv
|
||||
from tools.translate import _
|
||||
|
@ -101,8 +102,10 @@ class account_voucher(osv.osv):
|
|||
_name = 'account.voucher'
|
||||
_description = 'Accounting Voucher'
|
||||
_order = "id desc"
|
||||
_rec_name = 'number'
|
||||
|
||||
_columns = {
|
||||
'name':fields.char('Name', size=256, required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'name':fields.char('Name', size=256, required=False, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'type': fields.selection([
|
||||
('payment', 'Payment'),
|
||||
('receipt', 'Receipt'),
|
||||
|
@ -146,6 +149,7 @@ class account_voucher(osv.osv):
|
|||
'journal_id':_get_journal,
|
||||
'currency_id': _get_currency,
|
||||
'state': lambda *a: 'draft',
|
||||
'name': lambda *a: '/',
|
||||
'date' : lambda *a: time.strftime('%Y-%m-%d'),
|
||||
'reference_type': lambda *a: "none",
|
||||
'audit': lambda *a: False,
|
||||
|
@ -273,7 +277,6 @@ class account_voucher(osv.osv):
|
|||
})
|
||||
new_line += [tax_line]
|
||||
|
||||
|
||||
if new_line:
|
||||
for line in new_line:
|
||||
voucher_line_pool.create(dbcr, uid, line)
|
||||
|
@ -296,36 +299,39 @@ class account_voucher(osv.osv):
|
|||
'state':voucher.state
|
||||
}
|
||||
self.write(dbcr, uid, ids, res)
|
||||
else:
|
||||
raise osv.except_osv(_('Invalid amount !'), _('You can not create Pro-Forma voucher with Total amount <= 0 !'))
|
||||
|
||||
return True
|
||||
|
||||
def write(self, cr, uid, ids, vals, context={}):
|
||||
res = super(account_voucher, self).write(cr, uid, ids, vals, context)
|
||||
|
||||
#If there is state says that method called from the work flow signals
|
||||
if not 'state' in vals.keys():
|
||||
self.open_voucher(cr, uid, ids, context)
|
||||
|
||||
return res
|
||||
# def write(self, cr, uid, ids, vals, context={}):
|
||||
# res = super(account_voucher, self).write(cr, uid, ids, vals, context)
|
||||
#
|
||||
# #If there is state says that method called from the work flow signals
|
||||
# if not 'state' in vals.keys():
|
||||
# self.open_voucher(cr, uid, ids, context)
|
||||
#
|
||||
# return res
|
||||
|
||||
def voucher_recheck(self, cr, uid, ids, context={}):
|
||||
#self.open_voucher(cr, uid, ids, context)
|
||||
# self.open_voucher(cr, uid, ids, context)
|
||||
self.write(cr, uid, ids, {'state':'recheck'}, context)
|
||||
return True
|
||||
|
||||
def proforma_voucher(self, cr, uid, ids, context={}):
|
||||
#self.open_voucher(cr, uid, ids, context)
|
||||
# self.open_voucher(cr, uid, ids, context)
|
||||
self.action_move_line_create(cr, uid, ids)
|
||||
self.write(cr, uid, ids, {'state':'posted'})
|
||||
return True
|
||||
|
||||
def action_cancel_draft(self, cr, uid, ids, context={}):
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
for voucher_id in ids:
|
||||
wf_service.trg_create(uid, 'account.voucher', voucher_id, cr)
|
||||
self.write(cr, uid, ids, {'state':'draft'})
|
||||
return True
|
||||
|
||||
def audit_pass(self, cr, uid, ids, context={}):
|
||||
move_pool = self.pool.get('account.move')
|
||||
|
||||
result = True
|
||||
audit_pass = []
|
||||
for voucher in self.browse(cr, uid, ids):
|
||||
|
@ -381,6 +387,9 @@ class account_voucher(osv.osv):
|
|||
if inv.move_id:
|
||||
continue
|
||||
|
||||
if not inv.payment_ids:
|
||||
raise osv.except_osv(_('Error !'), _('Please define lines on voucher !'))
|
||||
|
||||
journal = journal_pool.browse(cr, uid, inv.journal_id.id)
|
||||
if journal.sequence_id:
|
||||
name = sequence_pool.get_id(cr, uid, journal.sequence_id.id)
|
||||
|
@ -492,14 +501,14 @@ class account_voucher(osv.osv):
|
|||
|
||||
rec = {
|
||||
'move_id': move_id,
|
||||
'move_ids':[(6, 0,line_ids)]
|
||||
}
|
||||
|
||||
|
||||
message = _('Voucher ') + " '" + inv.name + "' "+ _("is confirmed")
|
||||
self.log(cr, uid, inv.id, message)
|
||||
|
||||
self.write(cr, uid, [inv.id], rec)
|
||||
|
||||
move_pool.post(cr, uid, [move_id], context={})
|
||||
|
||||
return True
|
||||
|
||||
def _convert_ref(self, cr, uid, ref):
|
||||
|
@ -553,7 +562,8 @@ class account_voucher_line(osv.osv):
|
|||
'voucher_id':fields.many2one('account.voucher', 'Voucher'),
|
||||
'name':fields.char('Memo', size=256, required=True),
|
||||
'account_id':fields.many2one('account.account','Account', required=True, domain=[('type','<>','view')]),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner', change_default=True),
|
||||
# 'partner_id': fields.many2one('res.partner', 'Partner', change_default=True),
|
||||
'partner_id': fields.related('voucher_id','partner_id', type='many2one', relation='res.partner', string='Partner'),
|
||||
'amount':fields.float('Amount'),
|
||||
'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Type'),
|
||||
'ref':fields.char('Reference', size=32),
|
||||
|
@ -599,9 +609,6 @@ class account_voucher_line(osv.osv):
|
|||
elif ttype == 'cr' and type1 in ('purchase'):
|
||||
account_id = partner.property_account_payable.id
|
||||
|
||||
else:
|
||||
raise osv.except_osv(_('Invalid Configuration !'), _('You can not encode unbalanced entry !'))
|
||||
|
||||
if company.currency_id != currency:
|
||||
balance = currency_pool.compute(cr, uid, company.currency_id.id, currency, balance)
|
||||
|
||||
|
|
|
@ -10,13 +10,16 @@
|
|||
<field name="date"/>
|
||||
<field name="number"/>
|
||||
<field name="reference"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="type" invisible=" not context.get('set_visible',True)"/>
|
||||
<field name="account_id" />
|
||||
<field name="account_id"/>
|
||||
<field name="amount" sum="Total Amount"/>
|
||||
<field name="period_id"/>
|
||||
<field name="state"/>
|
||||
<button name="proforma_voucher" string="Create" states="draft" icon="terp-document-new"/>
|
||||
<button name="recheck_voucher" string="Approve" states="recheck" icon="terp-check"/>
|
||||
<button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft" icon="terp-stock_effects-object-colorize"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -28,23 +31,24 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Accounting Voucher">
|
||||
<group col="6" colspan="4">
|
||||
<field name="name" colspan="4"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="name"/>
|
||||
<field name="number"/>
|
||||
<field name="journal_id" select="1" on_change="onchange_journal(journal_id,type)"/>
|
||||
<field name="account_id" on_change="onchange_account(account_id)"/>
|
||||
<field name="type" on_change="onchange_journal(journal_id,type)"/>
|
||||
</group>
|
||||
|
||||
<notebook colspan="4">
|
||||
<page string="Voucher Entry">
|
||||
<field name="payment_ids" colspan="4" nolabel="1" height="180">
|
||||
<tree string="Voucher Lines" editable="top">
|
||||
<field name="partner_id" on_change="onchange_partner(partner_id,type,parent.type, parent.currency_id)"/>
|
||||
<field name="name" on_change="onchange_partner(parent.partner_id,type,parent.type, parent.currency_id)"/>
|
||||
<field name="account_id"/>
|
||||
<field name="name"/>
|
||||
<field name="type" on_change="onchange_type(partner_id,type,parent.type, parent.currency_id)"/>
|
||||
<field name="type" on_change="onchange_type(parent.partner_id,type,parent.type, parent.currency_id)"/>
|
||||
<field name="amount"/>
|
||||
<field name="account_analytic_id"/>
|
||||
<field name="ref"/>
|
||||
<field name="account_analytic_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
<group col="2" colspan="3">
|
||||
|
@ -55,7 +59,7 @@
|
|||
<separator string="Other Information" colspan="2"/>
|
||||
<field name="reference" select="1"/>
|
||||
<field name="date" select="1" on_change="onchange_date(date)"/>
|
||||
<field name="currency_id" select="1"/>
|
||||
<field name="currency_id" select="1" attrs="{'readonly':[('type','in',['sale', 'purchase'])]}"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Journal Items">
|
||||
|
@ -75,7 +79,7 @@
|
|||
<button name="recheck_voucher" string="Approve" states="recheck" icon="terp-check"/>
|
||||
<!-- <button name="audit_complete" string="Audit Pass" states="posted" icon="terp-check"/>-->
|
||||
<button name="cancel_voucher" string="Cancel" states="draft,proforma,recheck" icon="gtk-cancel"/>
|
||||
<button name="cancel_to_draft" states="cancel" string="Set to Draft" icon="terp-stock_effects-object-colorize"/>
|
||||
<button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft" icon="terp-stock_effects-object-colorize"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
@ -107,6 +111,7 @@
|
|||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." col='8' colspan='4'>
|
||||
<filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/>
|
||||
<filter string="Period" icon="terp-go-month" domain="[]" context="{'group_by':'period_id'}"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type', 'set_visible':True}"/>
|
||||
|
@ -147,6 +152,7 @@
|
|||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="12" col="10">
|
||||
<filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/>
|
||||
<filter string="Period" icon="terp-go-month" domain="[]" context="{'group_by':'period_id'}"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type', 'set_visible':True}"/>
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
<record id="act_cancel" model="workflow.activity">
|
||||
<field name="wkf_id" ref="wkf"/>
|
||||
<field name="name">cancel</field>
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="action">cancel_voucher()</field>
|
||||
<field name="kind">function</field>
|
||||
</record>
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
|
||||
class account_invoice(osv.osv):
|
||||
_inherit = 'account.invoice'
|
||||
|
||||
class account_move(osv.osv):
|
||||
_inherit = 'account.move'
|
||||
|
||||
def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
|
||||
"""
|
||||
Returns a list of ids based on search domain {args}
|
||||
|
@ -43,18 +43,22 @@ class account_invoice(osv.osv):
|
|||
if not context:
|
||||
context = {}
|
||||
ttype = context.get('ttype', False)
|
||||
partner = context.get('partner_id', False)
|
||||
voucher = context.get('voucher', False)
|
||||
if voucher and not partner:
|
||||
raise osv.except_osv(_('Invalid Partner !'), _('Please select the partner !'))
|
||||
|
||||
if ttype and ttype in ('receipt'):
|
||||
args += [('type','in', ['out_invoice', 'in_refund'])]
|
||||
args += [('journal_id.type','in', ['sale', 'purchase_refund'])]
|
||||
elif ttype and ttype in ('payment'):
|
||||
args += [('type','in', ['in_invoice', 'out_refund'])]
|
||||
args += [('journal_id.type','in', ['purchase', 'sale_refund'])]
|
||||
elif ttype and ttype in('sale', 'purchase'):
|
||||
raise osv.except_osv(_('Invalid action !'), _('You can not reconcile sales, purchase, or journal voucher with invoice !'))
|
||||
args += [('type','=', 'do_not_allow_search')]
|
||||
|
||||
res = super(account_invoice, self).search(cr, user, args, offset, limit, order, context, count)
|
||||
args += [('journal_id.type','=', 'do_not_allow_search')]
|
||||
res = super(account_move, self).search(cr, user, args, offset, limit, order, context, count)
|
||||
return res
|
||||
|
||||
account_invoice()
|
||||
account_move()
|
||||
|
||||
class account_move_line(osv.osv):
|
||||
_inherit = "account.move.line"
|
||||
|
@ -66,7 +70,7 @@ account_move_line()
|
|||
class account_voucher(osv.osv):
|
||||
_inherit = 'account.voucher'
|
||||
_columns = {
|
||||
'voucher_line_ids':fields.one2many('account.voucher.line', 'voucher_id', 'Voucher Lines', readonly=False, states={'proforma':[('readonly',True)]}),
|
||||
'voucher_line_ids':fields.one2many('account.voucher.line', 'voucher_id', 'Voucher Lines', readonly=True, states={'draft':[('readonly',False)]}),
|
||||
}
|
||||
|
||||
def action_move_line_create(self, cr, uid, ids, *args):
|
||||
|
@ -84,7 +88,10 @@ class account_voucher(osv.osv):
|
|||
|
||||
if inv.move_id:
|
||||
continue
|
||||
|
||||
|
||||
if not inv.payment_ids:
|
||||
raise osv.except_osv(_('Error !'), _('Please define lines on voucher !'))
|
||||
|
||||
journal = journal_pool.browse(cr, uid, inv.journal_id.id)
|
||||
if journal.sequence_id:
|
||||
name = sequence_pool.get_id(cr, uid, journal.sequence_id.id)
|
||||
|
@ -125,7 +132,7 @@ class account_voucher(osv.osv):
|
|||
'move_id':move_id ,
|
||||
'journal_id':inv.journal_id.id,
|
||||
'period_id':inv.period_id.id,
|
||||
'partner_id':False,
|
||||
'partner_id':inv.partner_id.id,
|
||||
'ref':ref,
|
||||
'date':inv.date
|
||||
}
|
||||
|
@ -194,9 +201,9 @@ class account_voucher(osv.osv):
|
|||
move_line_id = move_line_pool.create(cr, uid, move_line)
|
||||
line_ids += [move_line_id]
|
||||
|
||||
if line.invoice_id and inv.type in ('payment', 'receipt'):
|
||||
if line.move_id and inv.type in ('payment', 'receipt'):
|
||||
rec_ids += [move_line_id]
|
||||
for move_line in line.invoice_id.move_id.line_id:
|
||||
for move_line in line.move_id.line_id:
|
||||
if line.account_id.id == move_line.account_id.id:
|
||||
rec_ids += [move_line.id]
|
||||
|
||||
|
@ -204,15 +211,16 @@ class account_voucher(osv.osv):
|
|||
move_line_pool.reconcile_partial(cr, uid, rec_ids)
|
||||
|
||||
rec = {
|
||||
'move_id': move_id,
|
||||
'move_id': move_id
|
||||
}
|
||||
|
||||
message = _('Voucher ') + " '" + inv.name + "' "+ _("is confirm")
|
||||
self.log(cr, uid, inv.id, message)
|
||||
|
||||
self.write(cr, uid, [inv.id], rec)
|
||||
move_pool.post(cr, uid, [move_id], context={})
|
||||
|
||||
return True
|
||||
return True
|
||||
|
||||
account_voucher()
|
||||
|
||||
|
@ -225,7 +233,8 @@ class account_voucher_line(osv.osv):
|
|||
return data
|
||||
|
||||
_columns = {
|
||||
'invoice_id' : fields.many2one('account.invoice','Invoice'),
|
||||
# 'invoice_id' : fields.many2one('account.invoice','Invoice'),
|
||||
'move_id' : fields.many2one('account.move','Journal Entry'),
|
||||
}
|
||||
|
||||
def move_line_get_item(self, cr, uid, line, context={}):
|
||||
|
@ -235,9 +244,9 @@ class account_voucher_line(osv.osv):
|
|||
|
||||
def onchange_invoice_id(self, cr, uid, ids, invoice_id, currency_id):
|
||||
currency_pool = self.pool.get('res.currency')
|
||||
invoice_pool = self.pool.get('account.invoice')
|
||||
invoice_pool = self.pool.get('account.move')
|
||||
res = {
|
||||
'amount':0.0
|
||||
|
||||
}
|
||||
if not invoice_id:
|
||||
return {
|
||||
|
@ -245,15 +254,19 @@ class account_voucher_line(osv.osv):
|
|||
}
|
||||
else:
|
||||
invoice = invoice_pool.browse(cr, uid, invoice_id)
|
||||
residual = invoice.residual
|
||||
if invoice.currency_id.id != currency_id:
|
||||
residual = currency_pool.compute(cr, uid, invoice.currency_id.id, currency_id, invoice.residual)
|
||||
residual = invoice.amount
|
||||
|
||||
company_currency = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
|
||||
currency_diff = company_currency != currency_id
|
||||
|
||||
res.update({
|
||||
'amount': residual,
|
||||
'account_id': invoice.account_id.id,
|
||||
'ref':invoice.number
|
||||
})
|
||||
if currency_diff:
|
||||
residual = currency_pool.compute(cr, uid, company_currency, currency_id, residual)
|
||||
|
||||
if residual > 0:
|
||||
res.update({
|
||||
'amount': residual,
|
||||
'ref':invoice.name
|
||||
})
|
||||
|
||||
return {
|
||||
'value':res
|
||||
|
|
|
@ -8,16 +8,15 @@
|
|||
<field name="inherit_id" ref="account_voucher.view_voucher_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_ids" position="replace">
|
||||
<field name="voucher_line_ids" default_get="{'lines': voucher_line_ids}" colspan="4" nolabel="1" height="200">
|
||||
<field name="voucher_line_ids" colspan="4" nolabel="1" height="200">
|
||||
<tree string="Voucher Lines" editable="top">
|
||||
<field name="partner_id" on_change="onchange_partner(partner_id, type, parent.type, parent.currency_id)"/>
|
||||
<field name="account_id" on_change="onchange_line_account(account_id, type, parent.type)"/>
|
||||
<field name="name"/>
|
||||
<field name="invoice_id" context="{'ttype':parent.type}" on_change="onchange_invoice_id(invoice_id, parent.currency_id)" domain="[('partner_id','=',partner_id),('state','=','open'),('residual','>',0.0)]"/>
|
||||
<field name="type" on_change="onchange_type(partner_id,type,parent.type, parent.currency_id)"/>
|
||||
<field name="name" on_change="onchange_partner(parent.partner_id,type,parent.type, parent.currency_id)"/>
|
||||
<field name="account_id"/>
|
||||
<field name="type" on_change="onchange_type(parent.partner_id,type,parent.type, parent.currency_id)"/>
|
||||
<field name="move_id" context="{'ttype':parent.type, 'partner_id':parent.partner_id, 'voucher':True}" on_change="onchange_invoice_id(move_id, parent.currency_id)" domain="[('state','=','posted'), ('partner_id','=',parent.partner_id)]"/>
|
||||
<field name="amount"/>
|
||||
<field name="account_analytic_id"/>
|
||||
<field name="ref"/>
|
||||
<field name="account_analytic_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</field>
|
||||
|
@ -54,7 +53,7 @@
|
|||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="view_voucher_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<button name="cancel_to_draft" position="before">
|
||||
<button name="action_cancel_draft" position="before">
|
||||
<button name="%(action_view_account_voucher_unreconcile)d" string="Unreconcile" type="action" states="posted" icon="terp-stock_effects-object-colorize"/>
|
||||
</button>
|
||||
</field>
|
||||
|
|
|
@ -52,8 +52,9 @@ class account_voucher_unreconcile(osv.osv_memory):
|
|||
reconcile_pool.unlink(cr, uid, rec)
|
||||
|
||||
if res.remove:
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', context.get('active_id'), 'cancel_voucher', cr)
|
||||
voucher_pool.cancel_voucher(cr, uid, [context.get('active_id')], context)
|
||||
# wf_service = netsvc.LocalService("workflow")
|
||||
# wf_service.trg_validate(uid, 'account.voucher', context.get('active_id'), 'cancel_voucher', cr)
|
||||
|
||||
return {}
|
||||
|
||||
|
|
Loading…
Reference in New Issue