2015-08-06 1 views
1

Я пытаюсь проверить состояние, когда сегодняшняя дата доступна только для того, чтобы быть выбранным в методе выбора даты в Odoo, и код выглядит следующим образом.Как сделать дату предыдущего дня и сегодняшнюю дату доступной только в режиме выбора времени в Odoo?

def onchange_date(self, cr, uid, ids, fdate, context=None): 
if fdate: 
if datetime.strptime(fdate, "%Y-%m-%d %H:%M:%S").date() <> 
datetime.now().date(): 
return { 'value': { 'fdate': False } } 
return fdate 

Я также хотел сделать предыдущий день т.е. вчерашнюю дату, чтобы быть доступным для пользователя, чтобы получить выбранный вместе с текущей датой.

ответ

1
selected_date = datetime.strptime(fdate, "%Y-%m-%d %H:%M:%S").date() 
yes_date = datetime.strptime(fdate, "%Y-%m-%d %H:%M:%S").relativedelta(days = -1).date() 
today = datetime.now().date() 
if selected_date <> today and selected_date <> yes_date 

И добавить файл импорта для относительной delte

+0

selected_date = datetime.strptime (fdate, "% Y-% m-% d% H:% M:% S"). Date() ТипError: должен быть строкой, а не bool. Я получаю эту ошибку Vigneshwaran –

1

Если вы используете только Даты, вы должны использовать date вместо datetime, и если первый, если вы только хотите, чтобы пользователь использовать дату сегодняшнего дня, получить автоматически дата сегодня и поставить его readonly, что-то вроде этого:

... 
import time 
... 
#here you got a field with the date of today. 
date_today = fields.Date('Today is: ', default = lambda *a: time.strftime("%Y-%m-%d"), readonly = True) 

и если вы хотите, что один пользователь может только выбрать дни вчера и сегодня, это немного более трудоемкий, я знаю, что это не лучший w чтобы сделать это, но он работает нормально.

... 
from openerp.exceptions import ValidationError 
... 

chosen_date = fields.Date('Chosen day: ', default = lambda *a: time.strftime("%Y-%m-%d")) 

@api.onchange('chosen_date'): 
def _onchange_chosen_date(self): 
    yesterday = str(int(time.strftime("%d")) - 1) 
    if len(yesterday) == 1: 
     yesterday = '0' + yesterday 
    yesterday_date = time.strftime("%Y-%m-" + yesterday) 
    if self.chosen_date != time.strftime("%Y-%m-%d") or self.chosen_date != yesterday_date: 
     return { 'warning': {'title':"Warning", 'message':"You are only able to choose only yesterday and today...!"}} 

EDIT

Я использую только V8, но я знаю, что-то синтаксиса V7!

1-й.

... 
import time 
... 
#here you got a field with the date of today. 
date_today = fields.date('Today is: ', default = lambda *a: time.strftime("%Y-%m-%d"), readonly = True) 

2-й.

... 
from openerp.osv import osv 
... 

chosen_date = fields.date('Chosen day: ', default = lambda *a: time.strftime("%Y-%m-%d")) 

def _onchange_chosen_date(self, cr, uid, ids, chosen_date, context=None): 
    yesterday = str(int(time.strftime("%d")) - 1) 
    if len(yesterday) == 1: 
     yesterday = '0' + yesterday 
    yesterday_date = time.strftime("%Y-%m-" + yesterday) 
    if self.chosen_date != time.strftime("%Y-%m-%d") or self.chosen_date != yesterday_date: 
     raise osv.except_osv(("Warning"),("You are only able to choose only yesterday and today...!")) 

И в XML:

<field name="chosen_date" on_change="_onchange_chosen_date(chosen_date)" /> 

Я надеюсь, что это может быть полезным для Вас !!!

+0

«module» объект не имеет атрибута «Дата» имя «api» не определено. это несколько ошибок, которые я получаю от Хуана Сальседо. любая идея по этому поводу? –

+0

, а также следующее сообщение об ошибке .... 'module' object не имеет атрибута 'many2one' –

+0

Я предположил, что вы используете Odoo v8, в этом случае вам нужно добавить эту строку вверху вашего .py-файла 'from openerp import модели, поля, api', после чего вы можете использовать 'Date' и' @ api', свою вторую ошибку, 'module object не имеет атрибута 'many2one'', который вы пытаетесь определить поле' many2one 'в синтаксисе V7 для OpenERP , вам нужно использовать 'Many2one' для синтаксиса V8, дайте мне знать ваши разряды! –

 Смежные вопросы

  • Нет связанных вопросов^_^