I have been trying to customize my Sales Order numbers to contain information about the date, and was able to do so by going to Settings: Technical -> Sequences & Identifiers -> Sequences and change the prefix for Sales Order to 'SO%(y)s%(month)s%(day)s'. This gives me close to what I want. An order placed today would read as SO140618xxx, where xxx is the padding. That padding number is incremented sequentially, however. So if I genereated SO140618005 today, tomorrow it would generate SO140619006. Is there any way to get OpenERP to reset that padding number daily? I would much prefer it to be sequenced individually by day. Would I have to change this via a custom module? Thanks!
Edit: Since the code in my comment looked herrible, I am posting it again here:
class reset_serial(osv.osv):
_name ="reset.serial"
def sales_number_update(self, cr, uid, ids=None, context=None):
sequence_obj = self.pool.get('ir.sequence')
seq_id = sequence_obj.search(cr, uid, [('code', '=', 'sale.order')])
if seq_id:
value = sequence_obj.browse(cr, uid, seq_id[0])
number_next = value.number_next
sequence_obj.write(cr, uid, seq_id, {'number_next': 1})
return None
prakash - I got this code running and it works pretty well. The problem is that it doens't reset the seiral, it adds another digit to it. So if I entered SO140619006, running the sequencer would give SO1406191001. I tried modifying your code a bit, changing: sequence_obj.write(cr, uid, seq_id, {'number_next': number_next+1000}) to sequence_obj.write(cr, uid, seq_id, {'number_next': 0}) but that didn't work either. Are the serial numbers inherintly tied to the Sales Order that first used them? That is the impression I am getting now. Anybody know? Thanks!
In your examples taken last four digit 8005 so in the code updated with 8005 + 1000 = 90006. Try the code sequence_obj.write(cr, uid, seq_id, {'number_next': 1})
To set next number everyday update the number_next is 1. I updated in the code please check the same.
sequence_obj.write(cr, uid, seq_id, {'number_next': 1}) is working tested. In openepr default sequence next value start with 1. If set to 0 its shows the DataError: RESTART value (0) cannot be less than MINVALUE (1)
Ah I see where you got confused there, the format is SOyymmddxxx, with xxx being the serial. It incremented from 8 to 9 because of the date change. For whatever reason when I use your code 'sequence_obj.write(cr, uid, seq_id, {'number_next': 1} it sets my next number to 1001. Any idea why that might be? This is how my code currently looks: class reset_serial(osv.osv): _name ="reset.serial" def sales_number_update(self, cr, uid, ids=None, context=None): sequence_obj = self.pool.get('ir.sequence') seq_id = sequence_obj.search(cr, uid, [('code', '=', 'sale.order')]) if seq_id: value = sequence_obj.browse(cr, uid, seq_id[0]) number_next = value.number_next sequence_obj.write(cr, uid, seq_id, {'number_next': 1}) return None
I edited my original post with the code, since it is hard to read in this comment. Thanks for your help prakash! This is really bugging me, I have tried so many variations at this point.
I updated my answer with example please check the same. I think in your example Day1 SO140618005 Day2 SO140619006 no need to set scheduler it already increment by one number.
Turns out the issue was totally unrelated - somehow another instance of openerp-server was running and messing up my module updates. Thank you so much for your help, it's working now.