DamnBigMan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2007-May-03 15:35 UTC
Trouble comparing time and date values
I have the following situation: I have a table with employee schedules in it. I need to make sure that overtime work they are claiming doesn''t overlap with scheduled work time. I have written a method in my events model to check for (date, time, day) overlap. This code works fine from the console however when I create an entry via the form the checking fails and it allows everything (bad and good). Here is the appropriate code: Model def overlap? courses = Hash.new # This will hold schedule info # The following line of code is necessary since the session # can''t be accessed from the model. id = Project.find(self.project_id).employee_id day = Regexp.new(Day.find(self.day_id).code) schedules = Schedule.find(:all, :conditions => ["employee_id = ?", id]) for entry in schedules courses["#{entry.course}"] = [entry.start_time, entry.end_time, entry.start_date, entry.end_date, "#{entry.days}"] end courses.each_pair do |key, values| if ((self.date >= values[2]) && (self.date <= values[3])) if ((self.start_time > values[0]) && (self.start_time < values[1])) if (values[4] =~ day) return true end end if ((self.end_time > values[0]) && (self.end_time < values[1])) if (values[4] =~ day) return true end end end end Controller def create @event = Event.new(params[:event]) unless @event.overlap? # We need to make sure there is no conflict. if @event.save flash[:notice] = ''Event was successfully created.'' redirect_to :action => ''list'' else render :action => ''new'' end end flash[:notice] = ''There was a problem with this event.'' end Here is a transcript of my console session:>> @event = Event.new=> #<Event:0x47d5ec0 @new_record=true, @attributes={"day_id"=>nil, "project_id"=>nil, "title"=>nil, "date"=>nil, "location"=>nil, "end_time"=>nil, "start_time"=>nil}>>> @event.day_id = 1=> 1>> @event.project_id = 1=> 1>> @event.title = "Test"=> "Test">> @event.date = "05/02/2007"=> "05/02/2007">> @event.location = "France"=> "France">> @event.end_time = "13:15"=> "13:15">> @event.start_time = "16:00"=> "16:00">> @event.overlap?=> true>> @event.day_id = 2=> 2>> @event.overlap?=> false It works perfectly here but not in the app. Any ideas would be greatly appreciated. I may be making bad assumptions here. I''m assuming that the strings I''m providing at converted into the appropriate datetime objects, as I can compare them with data from the database via the console with no trouble. The data that is being compared against in the schedule table was entered through the appropriate schedule view. Thanks, Glen --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
DamnBigMan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2007-May-03 15:38 UTC
Re: Trouble comparing time and date values
On May 3, 9:35 am, "DamnBig...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" <DamnBig...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I have the following situation: > > I have a table with employee schedules in it. I need to make sure > that overtime work they are claiming doesn''t overlap with scheduled > work time. I have written a method in my events model to check for > (date, time, day) overlap. This code works fine from the console > however when I create an entry via the form the checking fails and it > allows everything (bad and good). > > Here is the appropriate code: > > Model > > def overlap? > courses = Hash.new # This will hold schedule info > > # The following line of code is necessary since the session > # can''t be accessed from the model. > > id = Project.find(self.project_id).employee_id > > day = Regexp.new(Day.find(self.day_id).code) > > schedules = Schedule.find(:all, :conditions => ["employee_id = ?", > id]) > > for entry in schedules > courses["#{entry.course}"] = [entry.start_time, entry.end_time, > entry.start_date, entry.end_date, "#{entry.days}"] > end > > courses.each_pair do |key, values| > if ((self.date >= values[2]) && (self.date <= values[3])) > if ((self.start_time > values[0]) && (self.start_time < > values[1])) > if (values[4] =~ day) > return true > end > end > if ((self.end_time > values[0]) && (self.end_time < > values[1])) > if (values[4] =~ day) > return true > end > end > end > end >return false end Sorry forgot to copy that last important little bit.> Controller > > def create > @event = Event.new(params[:event]) > unless @event.overlap? # We need to make sure there is no > conflict. > if @event.save > flash[:notice] = ''Event was successfully created.'' > redirect_to :action => ''list'' > else > render :action => ''new'' > end > end > flash[:notice] = ''There was a problem with this event.'' > end > > Here is a transcript of my console session: > > >> @event = Event.new > > => #<Event:0x47d5ec0 @new_record=true, @attributes={"day_id"=>nil, > "project_id"=>nil, "title"=>nil, "date"=>nil, "location"=>nil, > "end_time"=>nil, "start_time"=>nil}> > > >> @event.day_id = 1 > => 1 > >> @event.project_id = 1 > => 1 > >> @event.title = "Test" > => "Test" > >> @event.date = "05/02/2007" > => "05/02/2007" > >> @event.location = "France" > => "France" > >> @event.end_time = "13:15" > => "13:15" > >> @event.start_time = "16:00" > => "16:00" > >> @event.overlap? > => true > >> @event.day_id = 2 > => 2 > >> @event.overlap? > > => false > > It works perfectly here but not in the app. Any ideas would be > greatly appreciated. I may be making bad assumptions here. > > I''m assuming that the strings I''m providing at converted into the > appropriate datetime objects, as I can compare them with data from the > database via the console with no trouble. > > The data that is being compared against in the schedule table was > entered through the appropriate schedule view. > > Thanks, > Glen--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
DamnBigMan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2007-May-03 21:46 UTC
Re: Trouble comparing time and date values
I have figured out why it''s doing what it''s doing. The time_select method creates date information too and fills it with the current date. There is no way any interval "occurring" today will fall between times "occurring" in the past. Now I just have to fix it. Figured I''d post this in case someone runs across a similar problem in the future. On May 3, 9:38 am, "DamnBig...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" <DamnBig...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On May 3, 9:35 am, "DamnBig...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" <DamnBig...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: > > > I have the following situation: > > > I have a table with employee schedules in it. I need to make sure > > that overtime work they are claiming doesn''t overlap with scheduled > > work time. I have written a method in my events model to check for > > (date, time, day) overlap. This code works fine from the console > > however when I create an entry via the form the checking fails and it > > allows everything (bad and good). > > > Here is the appropriate code: > > > Model > > > def overlap? > > courses = Hash.new # This will hold schedule info > > > # The following line of code is necessary since the session > > # can''t be accessed from the model. > > > id = Project.find(self.project_id).employee_id > > > day = Regexp.new(Day.find(self.day_id).code) > > > schedules = Schedule.find(:all, :conditions => ["employee_id = ?", > > id]) > > > for entry in schedules > > courses["#{entry.course}"] = [entry.start_time, entry.end_time, > > entry.start_date, entry.end_date, "#{entry.days}"] > > end > > > courses.each_pair do |key, values| > > if ((self.date>= values[2]) && (self.date<= values[3])) > > if ((self.start_time > values[0]) && (self.start_time < > > values[1])) > > if (values[4] =~ day) > > return true > > end > > end > > if ((self.end_time > values[0]) && (self.end_time < > > values[1])) > > if (values[4] =~ day) > > return true > > end > > end > > end > > end > > return false > end > > Sorry forgot to copy that last important little bit. > > > Controller > > > def create > > @event = Event.new(params[:event]) > > unless @event.overlap? # We need to make sure there is no > > conflict. > > if @event.save > > flash[:notice] = ''Event was successfully created.'' > > redirect_to :action => ''list'' > > else > > render :action => ''new'' > > end > > end > > flash[:notice] = ''There was a problem with this event.'' > > end > > > Here is a transcript of my console session: > > > >> @event = Event.new > > > => #<Event:0x47d5ec0 @new_record=true, @attributes={"day_id"=>nil, > > "project_id"=>nil, "title"=>nil, "date"=>nil, "location"=>nil, > > "end_time"=>nil, "start_time"=>nil}> > > > >> @event.day_id = 1 > > => 1 > > >> @event.project_id = 1 > > => 1 > > >> @event.title = "Test" > > => "Test" > > >> @event.date= "05/02/2007" > > => "05/02/2007" > > >> @event.location = "France" > > => "France" > > >> @event.end_time = "13:15" > > => "13:15" > > >> @event.start_time = "16:00" > > => "16:00" > > >> @event.overlap? > > => true > > >> @event.day_id = 2 > > => 2 > > >> @event.overlap? > > > => false > > > It works perfectly here but not in the app. Any ideas would be > > greatly appreciated. I may be making bad assumptions here. > > > I''m assuming that the strings I''m providing at converted into the > > appropriate datetime objects, as I cancomparethem with data from the > > database via the console with no trouble. > > > The data that is being compared against in the schedule table was > > entered through the appropriate schedule view. > > > Thanks, > > Glen--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---