Making contracts awesome
This commit is contained in:
parent
daeb7713e0
commit
2f4872218e
@ -4,6 +4,13 @@ class ContractsController < ApplicationController
|
||||
layout 'resources'
|
||||
|
||||
def index
|
||||
if params[:user_id].present?
|
||||
@contracts = Contract.where(user_id: params[:user_id])
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.json { render :json => @contracts }
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
@ -16,8 +23,28 @@ class ContractsController < ApplicationController
|
||||
end
|
||||
|
||||
def create
|
||||
Rails.logger.info "CONTRACT"
|
||||
Rails.logger.info @contract.inspect
|
||||
# if @contract.first_name.blank? && @contract.last_name.blank? && @contract.cosigner.blank? # assume autodetect of filename
|
||||
# begin
|
||||
# name_split = params[:contract][:document].original_filename.sub(".jpg","").split
|
||||
# if name_split.count == 4 # we have one name
|
||||
# @contract.first_name = name_split[0]
|
||||
# @contract.last_name = name_split[1]
|
||||
# # 2 is the hyphen
|
||||
# @contract.signed_at = Date.parse(name_split[3])
|
||||
# elsif name_split.count == 7 && name_split[2] == "by" # we have two names
|
||||
# @contract.first_name = name_split[0]
|
||||
# @contract.last_name = name_split[1]
|
||||
# # 2 is "by"
|
||||
# @contract.cosigner = "#{name_split[3]} #{name_split[4]}"
|
||||
# # 5 is the hyphen
|
||||
# @contract.signed_at = Date.parse(name_split[6])
|
||||
# else
|
||||
# Rails.logger.info "Couldn't determine name from filename array: #{name_split.inspect}"
|
||||
# end
|
||||
# rescue Exception => e
|
||||
# end
|
||||
# end
|
||||
|
||||
@contract.created_by = current_user
|
||||
respond_to do |format|
|
||||
if @contract.save
|
||||
@ -30,6 +57,9 @@ class ContractsController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def find_for_user
|
||||
end
|
||||
|
||||
def update
|
||||
respond_to do |format|
|
||||
if @contract.update_attributes(params[:contract])
|
||||
|
@ -8,10 +8,17 @@ class Contract < ActiveRecord::Base
|
||||
|
||||
validates_presence_of :first_name, :signed_at #, :last_name
|
||||
|
||||
has_attached_file :document, { :styles => { :medium => "300x300>"},
|
||||
:storage => :s3,
|
||||
:s3_credentials => { :access_key_id => ENV['S3_KEY'],
|
||||
:secret_access_key => ENV['S3_SECRET'] },
|
||||
:path => ":attachment/:id/:style.:extension",
|
||||
:bucket => ENV['S3_BUCKET'] }
|
||||
has_attached_file :document,
|
||||
{ :styles =>
|
||||
{
|
||||
:medium => "300x300>",
|
||||
:large => "900x900>"
|
||||
},
|
||||
:storage => :s3,
|
||||
:s3_protocol => :https,
|
||||
:s3_credentials => { :access_key_id => ENV['S3_KEY'],
|
||||
:secret_access_key => ENV['S3_SECRET'] },
|
||||
:path => ":attachment/:id/:style.:extension",
|
||||
:bucket => ENV['S3_BUCKET']
|
||||
}
|
||||
end
|
||||
|
@ -40,7 +40,7 @@
|
||||
<p>
|
||||
<%= link_to "Upload New Document", "#", class: "btn btn-default", onclick: "$('#document_upload').removeClass('hidden'); $(this).addClass('hidden')" unless @contract.document.blank? %>
|
||||
<div id="document_upload" class="<%= "hidden" unless @contract.document.blank? %>">
|
||||
<%= f.file_field :document %>
|
||||
<%= f.file_field :document, class: "form-control", style: "width: 100%; height: 100px; background-color: #f9f9f9;" %>
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -1,4 +1,80 @@
|
||||
<h1>New Contract
|
||||
<%= link_to 'Back', contracts_path, class: "btn btn-default" %>
|
||||
</h1>
|
||||
|
||||
<div class="col-xs-12">
|
||||
<%= render 'form' %>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12">
|
||||
<div class="alert alert-info">Note: if you name your scans in one of the below formats, this form will try to fill itself out automatically when you select the file. (The spaces, hyphen, and jpg or pdf extensions are mandatory for this to work.) <em>Double-check the names, users, and dates, though!!</em><br/>
|
||||
<strong>first last - date.[jpg|pdf]</strong><br/>
|
||||
<strong>first last by cosigner name - date.[jpg|pdf]</strong><br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
function capitalizeIfIsntCapitalized(str){
|
||||
if(str[0].toLowerCase() == str[0] ){
|
||||
return str[0].toUpperCase() + str.slice(1);
|
||||
}
|
||||
else{
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$("#contract_document").change(function (){
|
||||
doc = document.getElementById("contract_document")
|
||||
if(doc.files && doc.files.length > 0) {
|
||||
name_split = doc.files[0].name.replace(".jpg","").replace(".pdf","").split(" ");
|
||||
|
||||
$("#contract_user_alert").remove(); // clear any existing alerts
|
||||
$("#contract_user_spinner").remove(); // clear spinner
|
||||
|
||||
if(name_split.length == 4){ // we have one name
|
||||
$("#contract_first_name").val(capitalizeIfIsntCapitalized(name_split[0]));
|
||||
$("#contract_last_name").val(capitalizeIfIsntCapitalized(name_split[1]));
|
||||
// 2 is the hyphen
|
||||
signed_at = new Date(name_split[3]);
|
||||
$("#contract_signed_at_1i").val(signed_at.getUTCFullYear()).change();
|
||||
$("#contract_signed_at_2i").val(signed_at.getUTCMonth()+1).change();
|
||||
$("#contract_signed_at_3i").val(signed_at.getUTCDate()).change();
|
||||
}
|
||||
else if(name_split.length == 7 && name_split[2] == "by"){ // we have two names
|
||||
$("#contract_first_name").val(capitalizeIfIsntCapitalized(name_split[0]));
|
||||
$("#contract_last_name").val(capitalizeIfIsntCapitalized(name_split[1]));
|
||||
// 2 is "by"
|
||||
$("#contract_cosigner").val(capitalizeIfIsntCapitalized(name_split[3])+" "+capitalizeIfIsntCapitalized(name_split[4]));
|
||||
// 5 is the hyphen
|
||||
signed_at = new Date(name_split[6]);
|
||||
$("#contract_signed_at_1i").val(signed_at.getUTCFullYear());
|
||||
$("#contract_signed_at_2i").val(signed_at.getUTCMonth()+1);
|
||||
$("#contract_signed_at_3i").val(signed_at.getUTCDate());
|
||||
}
|
||||
|
||||
// Try and select the relevant user if exists
|
||||
if( $("#contract_first_name").val().length > 0 && $("#contract_last_name").val().length > 0 ) {
|
||||
user_id = $('#contract_user_id option').filter(function(){
|
||||
return $(this).text() == $("#contract_first_name").val() + " " + $("#contract_last_name").val();
|
||||
}).prop("selected", "true").val();
|
||||
|
||||
// Start a spinner before AJAX request
|
||||
$("#contract_user_id").after("<i id='contract_user_spinner' class='icon-spin icon-refresh'></i>");
|
||||
// If we found a user, check how many contracts that user already has
|
||||
$.get("/users/"+user_id+"/contracts.json",function(data){
|
||||
$("#contract_user_spinner").remove(); // clear spinner
|
||||
if(data.length > 0){
|
||||
other_contract_links = $.map(data,function(item){
|
||||
output = "<a href='/contracts/"+item["id"]+"'>"+item["id"]+"</a> ";
|
||||
return output;
|
||||
});
|
||||
$("#contract_user_id").after("<span id='contract_user_alert' class='label label-danger'>Warning: this user already has "+data.length+" other contract(s). Check the existing one(s) to avoid duplication: "+other_contract_links+"</span>");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
@ -2,6 +2,7 @@
|
||||
<h1 class="col-md-8">
|
||||
Contract
|
||||
<%= link_to 'Back', contracts_path, :class => "btn btn-default" %>
|
||||
<%= link_to 'New', new_contract_path, :class => "btn btn-success" %>
|
||||
<%= link_to 'Edit', edit_contract_path(@contract), :class => "btn btn-primary" %>
|
||||
<%= link_to 'Delete', contract_path(@contract), {:confirm => 'Are you sure you want to delete this forever?', :method => :delete, :class => "btn btn-danger"} if can? :destroy, @contract %>
|
||||
</h1>
|
||||
@ -29,7 +30,8 @@
|
||||
<% else %>
|
||||
<p><%= link_to "Download Contract", @contract.document.url %>
|
||||
<div class="col-xs-12">
|
||||
<iframe src="<%= @contract.document.url %>" width="100%" height="600"></iframe>
|
||||
<% contract_url = (@contract.document.exists?(:large) ? @contract.document.url(:large) : @contract.document.url) %>
|
||||
<iframe src="<%= contract_url %>" width="100%" height="600"></iframe>
|
||||
</div>
|
||||
</p>
|
||||
<% end %>
|
||||
|
@ -20,6 +20,9 @@ Dooraccess::Application.routes.draw do
|
||||
resources :certifications
|
||||
|
||||
resources :contracts
|
||||
#collection do
|
||||
#end
|
||||
match 'contracts/find_for_user/:user_id' => 'contracts#find_for_user', as: 'find_for_user'
|
||||
|
||||
devise_for :users, :skip => :registrations
|
||||
devise_scope :user do
|
||||
@ -42,6 +45,7 @@ Dooraccess::Application.routes.draw do
|
||||
resources :users do
|
||||
get 'email' => 'users#compose_email', :as => "compose_email"
|
||||
post 'email' => 'users#send_email'
|
||||
resources 'contracts', only: [:index]
|
||||
end
|
||||
match 'users/create' => 'users#create', :via => :post # Use POST users/create instead of POST users to avoid devise conflict
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user