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
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,

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

Trả lời của Bạn

Vui lòng đảm bảo câu trả lời của bạn có liên quan và giải đáp đúng nội dung câu hỏi. Nếu muốn bình luận về câu hỏi hoặc câu trả lời, hãy sử dụng công cụ Bình luận. Lưu ý, bạn có thể thay đổi nội dung trả lời thay vì trả lời lại 02 lần cho cùng một câu hỏi. Đồng thời bạn có thể nhấn nút để bầu chọn câu hỏi / câu trả lời tốt nhất.