2013-07-11 5 views
0

У меня есть приложение, которое отслеживает время сотрудников. Сотрудники должны иметь не менее 2 дней каждые 12 дней ... Сотрудник должен ввести запись с логическим значением true для day_off ... но, в случае, если они этого не сделают, я также хочу найти перерывы в днях, которые могли бы также дней выкл. Я пытаюсь просто подсчитывать записи о датах даты на один день, начиная с логического дня_о_оп или перерывать последовательные даты ... и заканчивая на заданную дату.Поиск и подсчет последовательных записей в рубине на рельсах

Это помощник, я работаю над

def consecutive_days_on(user, dutylog) 
    # dutylog will be supplied via a loop 

    last_day_off = user.dutylogs.where("entry_date < ?", dutylog.entry_date).where(day_off: true).last 
    start_date = dutylog.entry_date 

     if last_day_off.present? 
     end_date = last_day_off.entry_date 
     # if the user logged their days off 
     else 
     end_date = user.dutylogs.where("entry_date < ?", dutylog.entry_date).last.entry_date 
     # as of now this just finds the last record...it needs to iterate and increment date to find a break in days on 
     # to find break in consecutive dates...if user did not log days off 
     end 

     user.dutylogs.where("entry_date >= ? AND entry_date <= ?", start_date, end_date).count 
     # count the records between the two dates...to find consecutive days on 
    end 
+0

Придерживайтесь условностей: оставляйте комментарии * выше * заявления, а не ниже. Извините, я не могу быть другим, кроме как сбросить этот указатель. –

ответ

0

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

def consecutive_days_on(user, dutylog) 
    last_day_off = user.dutylogs.where(day_off: true).where("entry_date < ?", dutylog.entry_date).select(:entry_date).last 
    start_date = dutylog.entry_date 

     if last_day_off.present? 
     end_date = last_day_off.entry_date 
     else 
     end_date = dutylog.entry_date 
     end 

     a = user.dutylogs.where("entry_date >= ? AND entry_date <= ?", end_date, start_date).count 
     a-1 
    end 
Смежные вопросы