Chào các bạn,
Khi khởi tạo Odoo mình đã cấu hình Order sequence bao gồm năm và tháng + số tăng dần. VD: BHHN/16/05/003
Tuy nhiên chuỗi số tăng dần cứ tăng mãi mà không reset về 1 khi sang tháng mới. VD: BHHN/16/06/001
Đã bạn nào giải quyết được vấn đề này chưa?
Cám ơn các bạn!
0
2 Trả lời
Best Answer
Mình có thấy đoạn code này trên git. Như vậy chắc không thể chỉnh được về cấu hình mà phải sửa code. Mình sẽ thử và thông tin lại.
Cám ơn bạn,
Best Answer
Override lại phương thức _next của ir.sequence. Đại loại trông nó sẽ có thể như sau (chưa test :p ):
_columns = { 'auto_reset': fields.boolean('Auto Reset'), 'reset_period': fields.selection( [('year', 'Every Year'), ('month', 'Every Month'), ('woy', 'Every Week'), ('day', 'Every Day'), ('h24', 'Every Hour'), ('min', 'Every Minute'), ('sec', 'Every Second')], 'Reset Period', required=True), 'reset_time': fields.char('Name', size=64, help=""), 'reset_init_number': fields.integer('Reset Number', required=True, help="Reset number of this sequence"), } _defaults = { 'auto_reset': False, 'reset_period': 'month', 'reset_init_number': 1, } def _next(self, cr, uid, seq_ids, context=None): if not seq_ids: return False if context is None: context = {} 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, seq_ids, ['name','company_id','implementation','number_next','prefix','suffix','padding', 'number_increment', 'auto_reset', 'reset_period', 'reset_time', 'reset_init_number']) 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': current_time =':'.join([seq['reset_period'], self._interpolation_dict().get(seq['reset_period'])]) if seq['auto_reset'] and current_time != seq['reset_time']: cr.execute("UPDATE ir_sequence SET reset_time=%s WHERE id=%s ", (current_time,seq['id'])) self._alter_sequence(cr, seq['id'], seq['number_increment'], seq['reset_init_number']) cr.commit() 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() 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'))) return interpolated_prefix + '%%0%sd' % seq['padding'] % seq['number_next'] + interpolated_suffix