предваряя финансовый год и сбросить код последовательности для каждого финансового года может быть сделано, как показано ниже. Ввести новый атрибут последовательности % (financial_year) s. Вот как это сделать. Наследовать ir_sequence и переопределить методы _interpolation_dict, а _next
добавил новый столбец finance_year_name. В этом столбце задается имя финансового года для каждого вызова _next и сбрасывается при изменении имени финансового года.
последовательность XML
<record id="seq_cust_invoice_no" model="ir.sequence">
<field name="name">Customer Invoice No.</field>
<field name="code">cust_invoice_no</field>
<field name="prefix">%(fiscal_year)s/</field>
<field name="padding">4</field>
<field name="number_increment">1</field>
</record>
код ниже:
класс ir_sequence (osv.osv): _inherit = 'ir.sequence'
_columns = {
'fiscal_year_name': fields.char('Created Fiscal year', size=64, help="Created Fiscal year"),
}
def _interpolation_dict(self, cr, uid, fy):
res = super(ir_sequence, self)._interpolation_dict()
res['fiscal_year'] = fy.name
return res
def _next(self, cr, uid, seq_ids, context=None):
if not seq_ids:
return False
if context is None:
context = {}
company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
fiscal_year_id = self.pool.get('account.fiscalyear').search(cr, uid, [('state','=','draft'), ('company_id', '=', company_id)])
fy = self.pool.get('account.fiscalyear').browse(cr, uid, fiscal_year_id)[0]
# Honoring the changes for ir_sequence.py override in accounts
sequence_ids = seq_ids
for seq in self.browse(cr, uid, seq_ids, context):
for line in seq.fiscal_ids:
if line.fiscalyear_id.id == context.get('fiscalyear_id'):
sequence_ids = [line.sequence_id.id]
break
force_company = context.get('force_company')
if not force_company:
force_company = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
sequences = self.read(cr, uid, sequence_ids, ['name','company_id','implementation','number_next','prefix','suffix','padding', 'fiscal_year_name'])
preferred_sequences = [s for s in sequences if s['company_id'] and s['company_id'][0] == force_company ]
seq = preferred_sequences[0] if preferred_sequences else sequences[0]
if seq['implementation'] == 'standard':
if seq['prefix'] == '%(fiscal_year)s/':
if not seq['fiscal_year_name'] or fy.name != seq['fiscal_year_name']:
cr.execute("SELECT setval('ir_sequence_%03d', 1, true)" % seq['id'])
seq['number_next'] = cr.fetchone()
else:
cr.execute("SELECT nextval('ir_sequence_%03d')" % seq['id'])
seq['number_next'] = cr.fetchone()
else:
cr.execute("SELECT nextval('ir_sequence_%03d')" % seq['id'])
seq['number_next'] = cr.fetchone()
else:
cr.execute("SELECT number_next FROM ir_sequence WHERE id=%s FOR UPDATE NOWAIT", (seq['id'],))
cr.execute("UPDATE ir_sequence SET number_next=number_next+number_increment WHERE id=%s ", (seq['id'],))
d = self._interpolation_dict(cr, uid, fy)
try:
interpolated_prefix = self._interpolate(seq['prefix'], d)
interpolated_suffix = self._interpolate(seq['suffix'], d)
except ValueError:
raise osv.except_osv(_('Warning'), _('Invalid prefix or suffix for sequence \'%s\'') % (seq.get('name')))
self.write(cr, uid, sequence_ids, {'fiscal_year_name': fy.name}, context=context)
return interpolated_prefix + '%%0%sd' % seq['padding'] % seq['number_next'] + interpolated_suffix
ir_sequence()
Привет @Pravith Вы найдете решение по вышеуказанному вопросу? Если вы найдете решение, отправьте свой ответ. Спасибо. s .. – codeimplementer
если вы получаете ответ.пожалуйста, напишите здесь – Bala