openerpシーケンスでは、次のように、接尾辞または接頭辞として世紀を使用して現在の年を挿入できます。
/%(year)s
会計年度を接尾辞として順番に取得する必要があります。可能な方法はありますか?
例:PO / 0001 / 2012-2013
シーケンスを作成するときに、この関数を追加して、シーケンスで値を返すことができます。
この関数を試して、会計年度を見つけることができます。
def finyear(self):
today=date.today()
months=today.month
if months<=3:
return '%d-%d'%(today.year-1,today.year)
return '%d-%d'%(today.year,today.year+1)
シーケンスの接尾辞または接頭辞フィールドのみを使用してこれを行う方法がわかりません。ただし、ir_sequence
クラスを拡張するモジュールを作成することで、おそらくそれを行うことができます。現在のクラスは、シーケンスの接頭辞または接尾辞で使用できる値を持つ辞書を提供します。
def _interpolation_dict(self):
t = time.localtime() # Actually, the server is always in UTC.
return {
'year': time.strftime('%Y', t),
'month': time.strftime('%m', t),
'day': time.strftime('%d', t),
'y': time.strftime('%y', t),
'doy': time.strftime('%j', t),
'woy': time.strftime('%W', t),
'weekday': time.strftime('%w', t),
'h24': time.strftime('%H', t),
'h12': time.strftime('%I', t),
'min': time.strftime('%M', t),
'sec': time.strftime('%S', t),
}
現在の会計年度を検索して別のエントリを追加するバージョンでそれをオーバーライドすると、おそらく希望どおりになります。
データベースのルックアップはシステム時間のチェックよりもはるかに遅いため、一連のシーケンス番号を生成する必要があるいくつかの場所でパフォーマンスを測定することはおそらく賢明でしょう。しばらくの間、会計年度をキャッシュすることをお勧めします。
現在の年を生成する必要がある場合は、次のように datetime モジュールを使用して行うことができます
import datetime
print datetime.datetime.strftime(datetime.datetime.now(), '%Y')
これにより、「2012」が得られます。モジュールの詳細については、datetime ドキュメントを参照してください。
編集:これらの線に沿って何か?
import datetime
def get_fiscal_year(start_month=3):
now = datetime.datetime.now()
if now.month >= start_month:
return '%d-%d' % (now.year, now.year + 1)
return '%d-%d' % (now.year - 1, now.year)