Hỏi Đáp

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

0

Tự động reset sequence của đơn hàng mỗi tháng

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!

Ảnh đại diện
Huỷ bỏ
2 Trả lời
1
Ảnh đại diện
Phạm Quang Lân
Bài trả lời tốt nhất

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,

1 Bình luận
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
ViindooBot
-

Đúng rồi, của một chú tàu khựa, viết theo lối API cũ. https://github.com/buke

0
Ảnh đại diện
Captcha
Bài trả lời tốt nhất

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
Ảnh đại diện
Huỷ bỏ