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.

Câu hỏi này đã bị gắn cờ

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ỷ
Tác giả Câu trả lời hay 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,

Ảnh đại diện
Huỷ

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

Câu trả lời hay 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ỷ

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.