我在一周的每个工作日都提交了时间记录。我需要计算某一天的加班时间。如果@ timesheet.sheet小时数大于8,则找到金额> 8并添加到@ timesheet.overtime变量。
我的问题是有些人在一天内提交2张。例如7:30至11:30工作1和12至6:30工作2。
这就是我想要实现的目标:
这个失败的原因我无法使用它来比较它:date.strftime(“%A”)并且不确定如何找到差异并且仅将该数额相加...
days = 7.times
days.each do |day|
today = Date::DAYNAMES[day]
@dailysheets = @timesheet.sheets.where(:date.strftime("%A") == today)
@overtime =+ @dailysheets.sum(:hours)
end
在下面的文字中说明了我想要实现的目标
foreach day of the week do
put @timesheet.sheets that match dayofweek into a day variable then
Add the @sheet.hours fields together
If combined records > 8 then
add the difference to a overtime variable.
end
这是代码:
class Sheet < ActiveRecord::Base
has_many :worknotes, dependent: :destroy
end
class Timesheet < ActiveRecord::Base
has_many :timesheet_rows, dependent: :destroy
has_many :sheets, through: :timesheet_rows
end
Sheet db模型看起来像这样
t.string "jobNumber"
t.string "stage"
t.date "date"
t.decimal "hours"
t.time "start", default: '2000-01-01 07:00:00'
t.time "finish", default: '2000-01-01 15:30:00'
t.boolean "breakTaken", default: true
t.boolean "overTime", default: false
t.integer "job_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.boolean "active", default: true
t.integer "account_id"
答案 0 :(得分:1)
发送多少次表格并不重要。您有一个单独的表,其中有一个user_id外键链接到Users表。
然后发送的每个输入都将存储在他们的user_id下,如下所示:
TIME_SHEETS TABLE
id user_id time_in time_out
1 34 08:00 12:00
2 74 09:00 23:00
3 34 14:00 18:00
然后它是一个简单的数组迭代来获得所有
elapsed_seconds = ((time_out - time_in) * 24 * 60 * 60).to_i
或
diff = time_out - time_in
Date.day_fraction_to_time(diff) # => [h, m, s, frac_s]
在SQL中你会做这样的事情:
select sum `((time_out - time_in) * 24 * 60 * 60).to_i` group_by user_id
应该为您提供老板利用的每位员工加班的累计秒数。
答案 1 :(得分:0)
我发现加班的方式是得到工作日,然后如果每个工作日总计超过8小时,那么OT =超过
@workeddays = []
@c = 0
@timesheet.sheets.each do |sheet|
sheetday = sheet.date.strftime('%A')
@workeddays.push(sheetday) unless @workeddays.include?(sheetday)
end
@c = @workeddays.count
@amount = 8 * @c
check = @timesheet.total_hours - @amount
if check >= 0
@totalothrs = @timesheet.total_hours - @amount
else
@totalothrs = 0
end
我确定这里有一些重构但是效果很好