mirror of
https://github.com/fspc/BikeShed-1.git
synced 2025-02-28 16:53:23 -05:00
Initial stab at check-in feature
This commit is contained in:
parent
c504252541
commit
d7755f00ed
43
app/assets/javascripts/login.js
Normal file
43
app/assets/javascripts/login.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
$("#checkin_menu").show();
|
||||||
|
$("#checkin").click( function(e){
|
||||||
|
var username = $("#user_email").val();
|
||||||
|
var password = $("#user_password").val();
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: '/api/v1/checkin',
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
processData: false,
|
||||||
|
data: JSON.stringify({"username": username, "password": password }),
|
||||||
|
complete: function() { },
|
||||||
|
success: function(data) {
|
||||||
|
alert("Checked IN!");
|
||||||
|
$("#user_email").val('');
|
||||||
|
$("#user_password").val('');
|
||||||
|
},
|
||||||
|
error: function(data,textStatus) {
|
||||||
|
alert( "Error: " + JSON.parse(data.responseText)["error"]);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
$("#checkout").click( function(e){
|
||||||
|
var username = $("#user_email").val();
|
||||||
|
var password = $("#user_password").val();
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: '/api/v1/checkout',
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
processData: false,
|
||||||
|
data: JSON.stringify({"username": username, "password": password }),
|
||||||
|
complete: function() { },
|
||||||
|
success: function(data) {
|
||||||
|
alert("Checked OUT!");
|
||||||
|
$("#user_email").val('');
|
||||||
|
$("#user_password").val('');
|
||||||
|
},
|
||||||
|
error: function(data,textStatus) {
|
||||||
|
alert( "Error: " + JSON.parse(data.responseText)["error"]);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
23
app/controllers/api/v1/base_controller.rb
Normal file
23
app/controllers/api/v1/base_controller.rb
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
class Api::V1::BaseController < ActionController::Base
|
||||||
|
respond_to :json
|
||||||
|
|
||||||
|
before_filter :authenticate_user
|
||||||
|
|
||||||
|
private
|
||||||
|
def authenticate_user
|
||||||
|
if params[:token]
|
||||||
|
@current_user = User.find_by_authentication_token(params[:token])
|
||||||
|
else
|
||||||
|
user = User.find_for_database_authentication( :email => params[:username] )
|
||||||
|
@current_user = user if user && user.valid_password?( params[:password] )
|
||||||
|
end
|
||||||
|
unless @current_user
|
||||||
|
render :json => {:error => "Username/Password/Token invalid" }, :status => 403
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def current_user
|
||||||
|
@current_user
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
20
app/controllers/api/v1/logs_controller.rb
Normal file
20
app/controllers/api/v1/logs_controller.rb
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
class Api::V1::LogsController < Api::V1::BaseController
|
||||||
|
|
||||||
|
def checkin
|
||||||
|
if @current_user.checked_in?
|
||||||
|
render :json => { "error" => "You are already checked in."}, :status => 404 and return
|
||||||
|
else
|
||||||
|
@current_user.checkin
|
||||||
|
render :nothing => true, :status => 204 and return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def checkout
|
||||||
|
if !@current_user.checked_in?
|
||||||
|
render :json => { "error" => "You were not even checked in."}, :status => 404 and return
|
||||||
|
else
|
||||||
|
@current_user.checkout
|
||||||
|
render :nothing => true, :status => 204 and return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -36,6 +36,8 @@ class User < ActiveRecord::Base
|
|||||||
user_role.to_s == role.to_s
|
user_role.to_s == role.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
### TODO methods below probably belong somewhere else
|
||||||
|
|
||||||
def total_hours
|
def total_hours
|
||||||
ActsAsLoggable::Log.where( :loggable_type => self.class.to_s, :loggable_id => self.id).sum { |l| (l.end_date - l.start_date)/3600 }.round(2)
|
ActsAsLoggable::Log.where( :loggable_type => self.class.to_s, :loggable_id => self.id).sum { |l| (l.end_date - l.start_date)/3600 }.round(2)
|
||||||
end
|
end
|
||||||
@ -49,4 +51,35 @@ class User < ActiveRecord::Base
|
|||||||
.sum { |l| (l.end_date - l.start_date)/3600 }
|
.sum { |l| (l.end_date - l.start_date)/3600 }
|
||||||
.round(2)
|
.round(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def checked_in?
|
||||||
|
log_action = ::ActsAsLoggable::UserAction.find_by_action("CHECKIN")
|
||||||
|
checked = logs.where( log_action_id: log_action.id).
|
||||||
|
where("start_date >= ?", Time.zone.now.beginning_of_day).
|
||||||
|
where("start_date = end_date")
|
||||||
|
!checked.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
def checkin
|
||||||
|
log_action = ::ActsAsLoggable::UserAction.find_by_action("CHECKIN")
|
||||||
|
time = Time.now
|
||||||
|
logs.create( logger_id: self.id,
|
||||||
|
logger_type: self.class.to_s,
|
||||||
|
start_date: time,
|
||||||
|
end_date: time,
|
||||||
|
log_action_id: log_action.id,
|
||||||
|
log_action_type: log_action.class.to_s)
|
||||||
|
save
|
||||||
|
puts logs.inspect
|
||||||
|
end
|
||||||
|
|
||||||
|
def checkout
|
||||||
|
log_action = ::ActsAsLoggable::UserAction.find_by_action("CHECKIN")
|
||||||
|
checked = logs.where( log_action_id: log_action.id).
|
||||||
|
where("start_date >= ?", Time.zone.now.beginning_of_day).
|
||||||
|
where("start_date = end_date").first
|
||||||
|
checked.end_date = Time.now
|
||||||
|
checked.save
|
||||||
|
puts logs.inspect
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<%= stylesheet_link_tag "bootstrap_and_overrides", :media => "all" %>
|
<%= stylesheet_link_tag "bootstrap_and_overrides", :media => "all" %>
|
||||||
|
|
||||||
<h2>Sign in</h2>
|
<h2>Velocipede</h2>
|
||||||
|
|
||||||
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
|
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
|
||||||
<div><%= f.label :email %><br />
|
<div><%= f.label :email %><br />
|
||||||
@ -14,8 +14,15 @@
|
|||||||
<% end -%>
|
<% end -%>
|
||||||
|
|
||||||
<div><%= f.submit "Sign in" %></div>
|
<div><%= f.submit "Sign in" %></div>
|
||||||
|
|
||||||
|
<div id="checkin_menu"style="display:none;">
|
||||||
|
<input id="checkin" name="checkin" type="button" value="CHECK IN">
|
||||||
|
<input id="checkout" name="checkout" type="button" value="CHECK OUT">
|
||||||
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<%= render "links" %>
|
<%= render "links" %>
|
||||||
|
|
||||||
<% if Rails.env.development? %>
|
<% if Rails.env.development? %>
|
||||||
|
@ -221,3 +221,9 @@ Devise.setup do |config|
|
|||||||
# manager.default_strategies(:scope => :user).unshift :some_external_strategy
|
# manager.default_strategies(:scope => :user).unshift :some_external_strategy
|
||||||
# end
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#Check in the user if they sign in. (Devise uses Warden)
|
||||||
|
Warden::Manager.after_authentication do |user,auth,opts|
|
||||||
|
user.checkin unless user.checked_in?
|
||||||
|
end
|
||||||
|
|
||||||
|
@ -4,4 +4,13 @@ Velocipede::Application.routes.draw do
|
|||||||
netzke
|
netzke
|
||||||
|
|
||||||
root :to => 'site#index'
|
root :to => 'site#index'
|
||||||
|
###########################
|
||||||
|
# API Routes
|
||||||
|
scope 'api', :module => :api do
|
||||||
|
scope 'v1', :module => :v1 do
|
||||||
|
post 'checkin' => "logs#checkin", :as => "api_checkin"
|
||||||
|
post 'checkout' => "logs#checkout", :as => "api_checkout"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -13,3 +13,8 @@ staff:
|
|||||||
action: STAFF
|
action: STAFF
|
||||||
created_at: <%= Time.now %>
|
created_at: <%= Time.now %>
|
||||||
updated_at: <%= Time.now %>
|
updated_at: <%= Time.now %>
|
||||||
|
checkin:
|
||||||
|
id: 4
|
||||||
|
action: CHECKIN
|
||||||
|
created_at: <%= Time.now %>
|
||||||
|
updated_at: <%= Time.now %>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user