2016-02-18 177 views
0

我需要計算hr_holidays類中任何給定兩天之間的天數,並且需要忽略從該計算中給出hr_company_holidays類的波紋管天數。 像hr_holiday類這種方法要求完成這項計算....如何計算Openerp中兩個日期之間的天數

def _get_number_of_days(self, date_from, date_to): 
    diffdays = end_date-startdate+hr_comapny_holidays.dates 

return diffdays 

如何做到這一點?我需要知道其他行的上述功能

hr_company_holidays

class hr_company_holidays(osv.osv): 
    _name = "hr.company.holidays" 
    _description = "hr.company.holidays" 
    _columns = { 
     'name': fields.char('Holiday', size=256, required=True), 
     'date': fields.date('Day', size=256, required=True), 
    } 
+0

聽起來好像你想得到兩個日期之間的「工作日」的數量。你想計算週末嗎? –

+0

目前尚不清楚你想要做什麼,試圖澄清你的問題。 – Forge

+0

如果不清楚,我很抱歉,我需要做的是計算兩天之間的日子,忽略這兩天之間的假期。 – ManishaS

回答

1

導入datetime模塊。將日期轉換爲日期對象,然後減去它們。

from datetime import datetime 
from openerp import tools 

start_date = datetime.strptime("1995-03-13", tools.DEFAULT_SERVER_DATE_FORMAT) 
end_date = datetime.strptime("1995-03-19", tools.DEFAULT_SERVER_DATE_FORMAT) 

delta = d1 - d0 
print(delta.days) 

OpenERP/Odoo中的日期字段採用字符串格式,YYYY-MM-DD。你的方法可以採用日期對象或字符串(你應該使用strptime()方法將其轉換爲日期對象),並且在你的方法中,只要做一些類似的事情。最後,由於您有一些要忽略的日期,因此只需測試hr_holiday_start_date < hr_company_holiday_date < hr_holiday_end_date,計算通過此日期的日期並將其減去差值。

更新:

你的方法應該是這個樣子的新API:

@api.one 
def _get_number_of_days(self, start_date, end_date): 
    # start_date and end_date are date strings in YYYY-MM-DD format 
    # First, get the hr_company_holidays models 
    hr_company_holidays_model = self.env['hr_company_holidays'] 
    # Then, get how many holidays that are within start_date and end_date 
    holiday_count = hr_company_holidays.search_count([('date', '>', start_date), ('date', '<', end_date)]) 
    # Convert start_date and end_date to date objects 
    start_date_obj = datetime.strptime(start_date, tools.DEFAULT_SERVER_DATE_FORMAT) 
    end_date_obj = datetime.strptime(end_date, tools.DEFAULT_SERVER_DATE_FORMAT) 
    # Get the delta object 
    delta = end_date_obj - start_date_obj 
    # Lastly, get number of days, ignoring holidays 
    total_days = delta.days - holiday_count 
    # It's up to you what to do next with this total_days 

希望這有助於!

+0

感謝您的回覆macdelacruz ...我已經設置了一個驗證規則來檢查start_date ManishaS

+0

@ManishaS我更新了我的答案。根本不需要循環,因爲您可以直接在數據庫中搜索日期字段在「start_date」和「end_date」內的記錄。 – macdelacruz

+0

當我使用它說 TypeError:search_count()至少需要4個參數(給出2) – ManishaS

相關問題