need to create an auto increamet Field that reset to 1 every Year.
db.define_table('protocol',
Field('n_protocol'),
Field('year_protocol',type='datetime', writable = False, readable = False, default=request.now, requires=(IS_DATETIME(timezone=pytz.timezone("Europe/Gibraltar"),format=('%Y'))))
The field 'n_protocol' must start to 1 auto increment and return to 1 next year.
Why the date is correct when i insert data but is not correct when i see the data stored in db the date is wrong?
I also tried this:
ultimo_protocollo= db(db.protocollo.data_protocollo).select().last()
ieri = ultimo_protocollo.yeardata = datetime.datetimeoggi = data.yeardb.protocollo.n_protocollo = Field.Virtual('n_protocollo', lambda n_protocollo: (n_protocollo ++ 1) if (ieri == oggi) else (db.protocollo.n_protocollo =="1"))
but i recive error.
Can you please help me?
Thank you guys
protocollo_ieri= db(db.protocollo.anno_registro).select().last()ieri = protocollo_ieri.anno_registro.yeardata = request.nowoggi = data.year
ultimo_protocollo = db(db.protocollo).select(db.protocollo.numero_protocollo,orderby=~db.protocollo.numero_protocollo,limitby=(0,1)).first()ult_prot = ultimo_protocollo.numero_protocollo
if ieri==oggi: db.protocollo.numero_protocollo.default= (ult_prot +1)else: db.protocollo.numero_protocollo.default= 1
i was looking on the net and solved my problem using this code:
protocollo_ieri= db(db.protocollo.anno_registro).select().last()ieri = protocollo_ieri.anno_registro.yeardata = request.nowoggi = data.yearultimo_protocollo = db(db.protocollo).select(db.protocollo.numero_protocollo,orderby=~db.protocollo.numero_protocollo,limitby=(0,1)).first()ult_prot = ultimo_protocollo.numero_protocolloif ieri==oggi:db.protocollo.numero_protocollo.default= (ult_prot +1)else:db.protocollo.numero_protocollo.default= 1
idb.define_table(
'next_id',
Field('year', 'id'),
Field('next', 'integer'),
)
def get_next_id(year):
record = idb.next_id(year)
if not record:
# Auto add new years
idb.next_id.insert(year=year, next=1)
record = idb.next_id(year)
# Return the id while incrementing the seed for the next call
id = record.next
record.update_record(next=id + 1)
return id