[IMP]: implement new feature, remove invoice_equence_id from the journal
now invoice will be relay on the sequence_id only to have the unique number for the invoice and account move bzr revid: mga@tinyerp.com-20100814135801-gad7b92s3794yv44
This commit is contained in:
parent
d08701f061
commit
50ecc79b88
|
@ -638,8 +638,8 @@ class account_journal(osv.osv):
|
|||
'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'),
|
||||
'entry_posted': fields.boolean('Skip \'Draft\' State for Created Entries', help='Check this box if you don\'t want new account moves to pass through the \'draft\' state and instead goes directly to the \'posted state\' without any manual validation.'),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True, select=1, help="Company related to this journal"),
|
||||
'invoice_sequence_id': fields.many2one('ir.sequence', 'Invoice Sequence', \
|
||||
help="The sequence used for invoice numbers in this journal."),
|
||||
# 'invoice_sequence_id': fields.many2one('ir.sequence', 'Invoice Sequence', \
|
||||
# help="The sequence used for invoice numbers in this journal."),
|
||||
'allow_date':fields.boolean('Check Date not in the Period', help= 'If set to True then do not accept the entry if the entry date is not into the period dates'),
|
||||
}
|
||||
|
||||
|
@ -1162,16 +1162,22 @@ class account_move(osv.osv):
|
|||
]
|
||||
|
||||
def post(self, cr, uid, ids, context=None):
|
||||
invoice = context.get('invoice')
|
||||
if self.validate(cr, uid, ids, context) and len(ids):
|
||||
for move in self.browse(cr, uid, ids):
|
||||
if move.name =='/':
|
||||
new_name = False
|
||||
journal = move.journal_id
|
||||
if journal.sequence_id:
|
||||
c = {'fiscalyear_id': move.period_id.fiscalyear_id.id}
|
||||
new_name = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id, context=c)
|
||||
|
||||
if invoice.internal_number:
|
||||
new_name = invoice.internal_number
|
||||
else:
|
||||
raise osv.except_osv(_('Error'), _('No sequence defined in the journal !'))
|
||||
if journal.sequence_id:
|
||||
c = {'fiscalyear_id': move.period_id.fiscalyear_id.id}
|
||||
new_name = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id, context=c)
|
||||
else:
|
||||
raise osv.except_osv(_('Error'), _('No sequence defined in the journal !'))
|
||||
|
||||
if new_name:
|
||||
self.write(cr, uid, [move.id], {'name':new_name})
|
||||
|
||||
|
|
|
@ -389,7 +389,7 @@
|
|||
</group>
|
||||
<group colspan="2" col="2">
|
||||
<separator string="Invoicing Data" colspan="4"/>
|
||||
<field name="invoice_sequence_id"/>
|
||||
<!-- <field name="invoice_sequence_id"/>-->
|
||||
<field name="group_invoice_lines"/>
|
||||
</group>
|
||||
<group colspan="2" col="2" groups="base.group_extended">
|
||||
|
|
|
@ -231,8 +231,8 @@ class account_invoice(osv.osv):
|
|||
('in_refund','Supplier Refund'),
|
||||
],'Type', readonly=True, select=True, change_default=True),
|
||||
|
||||
# 'number': fields.related('move_id','name', type='char', readonly=True, size=64, relation='account.move', store=True, string='Number'),
|
||||
'number': fields.char('Invoice Number', size=32, readonly=True, help="Unique number of the invoice, computed automatically when the invoice is created."),
|
||||
'number': fields.related('move_id','name', type='char', readonly=True, size=64, relation='account.move', store=True, string='Number'),
|
||||
'internal_number': fields.char('Invoice Number', size=32, readonly=True, help="Unique number of the invoice, computed automatically when the invoice is created."),
|
||||
'reference': fields.char('Invoice Reference', size=64, help="The partner reference of this invoice."),
|
||||
'reference_type': fields.selection(_get_reference_type, 'Reference Type',
|
||||
required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
|
@ -326,6 +326,7 @@ class account_invoice(osv.osv):
|
|||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.invoice', context=c),
|
||||
'reference_type': 'none',
|
||||
'check_total': 0.0,
|
||||
'internal_number': False,
|
||||
'user_id': lambda s, cr, u, c: u,
|
||||
}
|
||||
|
||||
|
@ -595,15 +596,22 @@ class account_invoice(osv.osv):
|
|||
res = map(itemgetter(0), cr.fetchall())
|
||||
return res
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
default = default.copy()
|
||||
default.update({'state':'draft', 'number':False, 'move_id':False, 'move_name':False,})
|
||||
def copy(self, cr, uid, id, default={}, context=None):
|
||||
default.update({
|
||||
'state':'draft',
|
||||
'number':False,
|
||||
'move_id':False,
|
||||
'move_name':False,
|
||||
'internal_number': False,
|
||||
})
|
||||
if 'date_invoice' not in default:
|
||||
default['date_invoice'] = False
|
||||
default.update({
|
||||
'date_invoice':False
|
||||
})
|
||||
if 'date_due' not in default:
|
||||
default['date_due'] = False
|
||||
default.update({
|
||||
'date_due':False
|
||||
})
|
||||
return super(account_invoice, self).copy(cr, uid, id, default, context)
|
||||
|
||||
def test_paid(self, cr, uid, ids, *args):
|
||||
|
@ -773,7 +781,7 @@ class account_invoice(osv.osv):
|
|||
cur_obj = self.pool.get('res.currency')
|
||||
context = {}
|
||||
for inv in self.browse(cr, uid, ids):
|
||||
if not inv.journal_id.invoice_sequence_id:
|
||||
if not inv.journal_id.sequence_id:
|
||||
raise osv.except_osv(_('Error !'), _('Please define sequence on invoice journal'))
|
||||
if not inv.invoice_line:
|
||||
raise osv.except_osv(_('No Invoice Lines !'), _('Please create some invoice lines.'))
|
||||
|
@ -931,44 +939,35 @@ class account_invoice(osv.osv):
|
|||
}
|
||||
|
||||
def action_number(self, cr, uid, ids, *args):
|
||||
# #TODO: not correct fix but required a frech values before reading it.
|
||||
# self.write(cr, uid, ids, {})
|
||||
#
|
||||
cr.execute('SELECT id, type, number, move_id, reference ' \
|
||||
'FROM account_invoice ' \
|
||||
'WHERE id IN ('+','.join(map(str,ids))+')')
|
||||
obj_inv = self.browse(cr, uid, ids)[0]
|
||||
#TODO: not correct fix but required a frech values before reading it.
|
||||
self.write(cr, uid, ids, {})
|
||||
|
||||
for obj_inv in self.browse(cr, uid, ids):
|
||||
id = obj_inv.id
|
||||
invtype = obj_inv.type
|
||||
number = obj_inv.number
|
||||
move_id = obj_inv.move_id and obj_inv.move_id.id or False
|
||||
reference = obj_inv.reference or ''
|
||||
|
||||
for (id, invtype, number, move_id, reference) in cr.fetchall():
|
||||
if not number:
|
||||
if obj_inv.journal_id.invoice_sequence_id:
|
||||
sid = obj_inv.journal_id.invoice_sequence_id.id
|
||||
number = self.pool.get('ir.sequence').get_id(cr, uid, sid, 'id', {'fiscalyear_id': obj_inv.period_id.fiscalyear_id.id})
|
||||
else:
|
||||
number = self.pool.get('ir.sequence').get(cr, uid, 'account.invoice.' + invtype)
|
||||
self.write(cr, uid, ids, {'internal_number':number})
|
||||
|
||||
if invtype in ('in_invoice', 'in_refund'):
|
||||
ref = reference
|
||||
else:
|
||||
ref = self._convert_ref(cr, uid, number)
|
||||
|
||||
if not number:
|
||||
raise osv.except_osv(_('Warning !'), _('There is no active invoice sequence defined for the journal !'))
|
||||
|
||||
if invtype in ('in_invoice', 'in_refund'):
|
||||
ref = reference
|
||||
else:
|
||||
ref = self._convert_ref(cr, uid, number)
|
||||
|
||||
cr.execute('UPDATE account_invoice SET number=%s ' \
|
||||
'WHERE id=%s', (number, id))
|
||||
cr.execute('UPDATE account_move SET ref=%s ' \
|
||||
'WHERE id=%s AND (ref is null OR ref = \'\')',
|
||||
cr.execute('UPDATE account_move SET ref=%s ' \
|
||||
'WHERE id=%s AND (ref is null OR ref = \'\')',
|
||||
(ref, move_id))
|
||||
cr.execute('UPDATE account_move_line SET ref=%s ' \
|
||||
'WHERE move_id=%s AND (ref is null OR ref = \'\')',
|
||||
(ref, move_id))
|
||||
cr.execute('UPDATE account_analytic_line SET ref=%s ' \
|
||||
'FROM account_move_line ' \
|
||||
'WHERE account_move_line.move_id = %s ' \
|
||||
'AND account_analytic_line.move_id = account_move_line.id',
|
||||
(ref, move_id))
|
||||
cr.execute('UPDATE account_move_line SET ref=%s ' \
|
||||
'WHERE move_id=%s AND (ref is null OR ref = \'\')',
|
||||
(ref, move_id))
|
||||
cr.execute('UPDATE account_analytic_line SET ref=%s ' \
|
||||
'FROM account_move_line ' \
|
||||
'WHERE account_move_line.move_id = %s ' \
|
||||
'AND account_analytic_line.move_id = account_move_line.id',
|
||||
(ref, move_id))
|
||||
|
||||
|
||||
for inv_id, name in self.name_get(cr, uid, [id]):
|
||||
message = _('Invoice ') + " '" + name + "' "+ _("is validated.")
|
||||
self.log(cr, uid, inv_id, message)
|
||||
|
|
Loading…
Reference in New Issue