Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a1ef8a5fd5 |
35
.rvmrc
@@ -1,35 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# This is an RVM Project .rvmrc file, used to automatically load the ruby
|
|
||||||
# development environment upon cd'ing into the directory
|
|
||||||
|
|
||||||
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
|
|
||||||
# Only full ruby name is supported here, for short names use:
|
|
||||||
# echo "rvm use 1.8.7" > .rvmrc
|
|
||||||
environment_id="ruby-1.9.3-p385@members-hsl"
|
|
||||||
|
|
||||||
# Uncomment the following lines if you want to verify rvm version per project
|
|
||||||
# rvmrc_rvm_version="1.18.8 (stable)" # 1.10.1 seams as a safe start
|
|
||||||
# eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
|
|
||||||
# echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
|
|
||||||
# return 1
|
|
||||||
# }
|
|
||||||
|
|
||||||
# First we attempt to load the desired environment directly from the environment
|
|
||||||
# file. This is very fast and efficient compared to running through the entire
|
|
||||||
# CLI and selector. If you want feedback on which environment was used then
|
|
||||||
# insert the word 'use' after --create as this triggers verbose mode.
|
|
||||||
if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
|
|
||||||
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
|
||||||
then
|
|
||||||
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
|
||||||
[[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
|
|
||||||
\. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
|
|
||||||
else
|
|
||||||
# If the environment file has not yet been created, use the RVM CLI to select.
|
|
||||||
rvm --create "$environment_id" || {
|
|
||||||
echo "Failed to create RVM environment '${environment_id}'."
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
6
Gemfile
@@ -1,7 +1,5 @@
|
|||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
ruby '1.9.3'
|
|
||||||
|
|
||||||
gem 'rails', '3.2.3'
|
gem 'rails', '3.2.3'
|
||||||
|
|
||||||
# Bundle edge Rails instead:
|
# Bundle edge Rails instead:
|
||||||
@@ -42,9 +40,7 @@ gem 'bcrypt-ruby', '~> 3.0.0'
|
|||||||
# gem 'capistrano'
|
# gem 'capistrano'
|
||||||
|
|
||||||
# To use debugger
|
# To use debugger
|
||||||
#gem 'debugger'
|
# gem 'ruby-debug'
|
||||||
|
|
||||||
#gem "paperclip", "~> 3.0"
|
#gem "paperclip", "~> 3.0"
|
||||||
gem 'gravtastic'
|
gem 'gravtastic'
|
||||||
|
|
||||||
gem 'passenger'
|
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ GEM
|
|||||||
coffee-script-source
|
coffee-script-source
|
||||||
execjs
|
execjs
|
||||||
coffee-script-source (1.3.3)
|
coffee-script-source (1.3.3)
|
||||||
daemon_controller (1.1.5)
|
|
||||||
devise (2.1.1)
|
devise (2.1.1)
|
||||||
bcrypt-ruby (~> 3.0)
|
bcrypt-ruby (~> 3.0)
|
||||||
orm_adapter (~> 0.1)
|
orm_adapter (~> 0.1)
|
||||||
@@ -64,10 +63,6 @@ GEM
|
|||||||
mime-types (1.19)
|
mime-types (1.19)
|
||||||
multi_json (1.3.6)
|
multi_json (1.3.6)
|
||||||
orm_adapter (0.1.0)
|
orm_adapter (0.1.0)
|
||||||
passenger (4.0.14)
|
|
||||||
daemon_controller (>= 1.1.0)
|
|
||||||
rack
|
|
||||||
rake (>= 0.8.1)
|
|
||||||
polyglot (0.3.3)
|
polyglot (0.3.3)
|
||||||
rack (1.4.1)
|
rack (1.4.1)
|
||||||
rack-cache (1.2)
|
rack-cache (1.2)
|
||||||
@@ -129,7 +124,6 @@ DEPENDENCIES
|
|||||||
gravtastic
|
gravtastic
|
||||||
jquery-rails
|
jquery-rails
|
||||||
json
|
json
|
||||||
passenger
|
|
||||||
rails (= 3.2.3)
|
rails (= 3.2.3)
|
||||||
sass-rails (~> 3.2.3)
|
sass-rails (~> 3.2.3)
|
||||||
sqlite3
|
sqlite3
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
# Place all the behaviors and hooks related to the matching controller here.
|
|
||||||
# All this logic will automatically be available in application.js.
|
|
||||||
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
|
|
||||||
@@ -12,37 +12,3 @@
|
|||||||
*= require_tree .
|
*= require_tree .
|
||||||
*/
|
*/
|
||||||
.caption { display: inline-block; background-color: #eee; border: 1px solid #333; border-radius: 5px; margin-bottom: 1em; }
|
.caption { display: inline-block; background-color: #eee; border: 1px solid #333; border-radius: 5px; margin-bottom: 1em; }
|
||||||
.btn {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 4px 10px 4px;
|
|
||||||
margin-bottom: 0;
|
|
||||||
font-size: 13px;
|
|
||||||
line-height: 18px;
|
|
||||||
color: #333;
|
|
||||||
text-align: center;
|
|
||||||
text-decoration: none;
|
|
||||||
text-shadow: 0 1px 1px rgba(255,255,255,.75);
|
|
||||||
vertical-align: middle;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
background-image: -moz-linear-gradient(top, #fff, #e6e6e6);
|
|
||||||
background-image: -ms-linear-gradient(top, #fff, #e6e6e6);
|
|
||||||
background-image: -webkit-gradient(linear,0 0,0 100%,from( #fff),to( #e6e6e6));
|
|
||||||
background-image: -webkit-linear-gradient(top, #fff, #e6e6e6);
|
|
||||||
background-image: -o-linear-gradient(top, #fff, #e6e6e6);
|
|
||||||
background-image: linear-gradient(top, #fff, #e6e6e6);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
|
|
||||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
|
||||||
border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-bottom-color: #bbb;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);
|
|
||||||
-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);
|
|
||||||
box-shadow: inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);
|
|
||||||
cursor: pointer;
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
// Place all the styles related to the Ipn controller here.
|
|
||||||
// They will automatically be included in application.css.
|
|
||||||
// You can use Sass (SCSS) here: http://sass-lang.com/
|
|
||||||
@@ -5,8 +5,6 @@ def index
|
|||||||
@recent_certs = UserCertification.where("created_at > ?", DateTime.now - 7.days).count
|
@recent_certs = UserCertification.where("created_at > ?", DateTime.now - 7.days).count
|
||||||
@num_users = User.count
|
@num_users = User.count
|
||||||
@recent_users = User.where("created_at > ?", DateTime.now - 7.days).count
|
@recent_users = User.where("created_at > ?", DateTime.now - 7.days).count
|
||||||
@num_paid_users = User.all.select{|u| u.member_status >= 250 }.count
|
|
||||||
@num_delinquent_users = User.all.select{|u| !u.payment_status }.count
|
|
||||||
if can? :read, User then
|
if can? :read, User then
|
||||||
@recent_user_names = User.where("member_level > 10").accessible_by(current_ability).order('created_at desc').limit(5)
|
@recent_user_names = User.where("member_level > 10").accessible_by(current_ability).order('created_at desc').limit(5)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
class IpnsController < ApplicationController
|
|
||||||
load_and_authorize_resource :ipn, :except => [:new, :create]
|
|
||||||
before_filter :authenticate_user!, :except => [:new, :create]
|
|
||||||
|
|
||||||
protect_from_forgery :except => [:create]
|
|
||||||
|
|
||||||
def index
|
|
||||||
@ipns = Ipn.all
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
end
|
|
||||||
|
|
||||||
def new
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@ipn = Ipn.new_from_dynamic_params(params)
|
|
||||||
@ipn.data = params.to_json
|
|
||||||
@ipn.save
|
|
||||||
render :nothing => true
|
|
||||||
#unless @ipn.validate!
|
|
||||||
# Rails.logger.error "Unable to validate IPN: #{@ipn.inspect}"
|
|
||||||
#end
|
|
||||||
end
|
|
||||||
|
|
||||||
def import
|
|
||||||
@ipn = Ipn.new_from_dynamic_params(params)
|
|
||||||
@ipn.data = params.to_json
|
|
||||||
@ipn.save
|
|
||||||
redirect_to ipn_path(@ipn)
|
|
||||||
#unless @ipn.validate!
|
|
||||||
# Rails.logger.error "Unable to validate IPN: #{@ipn.inspect}"
|
|
||||||
#end
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate
|
|
||||||
if @ipn.validate!
|
|
||||||
redirect_to ipns_url, :notice => 'Valid!'
|
|
||||||
else
|
|
||||||
redirect_to ipns_url, :notice => 'INVALID'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def link
|
|
||||||
result = @ipn.link_payment
|
|
||||||
if result.first
|
|
||||||
redirect_to ipns_url, :notice => 'Payment was successfully linked.'
|
|
||||||
else
|
|
||||||
redirect_to ipns_url, :notice => result.last
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,15 +1,5 @@
|
|||||||
class MacsController < ApplicationController
|
class MacsController < ApplicationController
|
||||||
rescue_from CanCan::AccessDenied do |exception|
|
load_and_authorize_resource :mac, :except => [:index, :scan, :import]
|
||||||
today = Date.today
|
|
||||||
event = Date.new(2013,9,1)
|
|
||||||
|
|
||||||
if today == event
|
|
||||||
redirect_to main_app.root_url, :alert => "CryptoParty today; no MAC scanning. Sorry, NSA!"
|
|
||||||
else
|
|
||||||
redirect_to main_app.root_url, :alert => "Nothing to see here!"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
load_and_authorize_resource :mac
|
|
||||||
load_and_authorize_resource :user, :through => :mac, :except => [:index, :show, :scan, :import]
|
load_and_authorize_resource :user, :through => :mac, :except => [:index, :show, :scan, :import]
|
||||||
|
|
||||||
#require "active_record"
|
#require "active_record"
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
class PaypalCsvsController < ApplicationController
|
|
||||||
load_and_authorize_resource :paypal_csv
|
|
||||||
before_filter :authenticate_user!
|
|
||||||
|
|
||||||
def index
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
end
|
|
||||||
|
|
||||||
def new
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
PaypalCsv.batch_import_from_csv(params[:file].path)
|
|
||||||
redirect_to paypal_csvs_path, :notice => 'Paypal CSV batch was successfully loaded.'
|
|
||||||
end
|
|
||||||
|
|
||||||
def link
|
|
||||||
result = @paypal_csv.link_payment
|
|
||||||
if result.first
|
|
||||||
redirect_to paypal_csvs_url, :notice => 'Payment was successfully linked.'
|
|
||||||
else
|
|
||||||
redirect_to paypal_csvs_url, :notice => result.last
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -6,7 +6,7 @@ class UserCertificationsController < ApplicationController
|
|||||||
|
|
||||||
# Load users and certs based on current ability
|
# Load users and certs based on current ability
|
||||||
before_filter :only => [:new, :edit, :create, :update] do
|
before_filter :only => [:new, :edit, :create, :update] do
|
||||||
@users = User.where(:hidden => [false,nil]).accessible_by(current_ability).sort_by(&:name)
|
@users = User.where(:hidden => false).accessible_by(current_ability).sort_by(&:name)
|
||||||
@certifications = Certification.accessible_by(current_ability).sort_by(&:name)
|
@certifications = Certification.accessible_by(current_ability).sort_by(&:name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -33,10 +33,6 @@ class UsersController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def inactive
|
|
||||||
@users = @users.all.select{|u| u if u.payment_status == false }.sort_by{ |u| -u.delinquency }
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /users/1
|
# GET /users/1
|
||||||
# GET /users/1.json
|
# GET /users/1.json
|
||||||
def show
|
def show
|
||||||
@@ -73,7 +69,7 @@ class UsersController < ApplicationController
|
|||||||
def create
|
def create
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @user.save
|
if @user.save
|
||||||
format.html { redirect_to @user, :notice => 'User was successfully created.' }
|
format.html { redirect_to users_url, :notice => 'User was successfully created.' }
|
||||||
format.json { render :json => @user, :status => :created, :location => @user }
|
format.json { render :json => @user, :status => :created, :location => @user }
|
||||||
else
|
else
|
||||||
format.html { render :action => "new" }
|
format.html { render :action => "new" }
|
||||||
@@ -87,7 +83,7 @@ class UsersController < ApplicationController
|
|||||||
def update
|
def update
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @user.update_attributes(params[:user])
|
if @user.update_attributes(params[:user])
|
||||||
format.html { redirect_to @user, :notice => 'User was successfully updated.' }
|
format.html { redirect_to users_url, :notice => 'User was successfully updated.' }
|
||||||
format.json { head :no_content }
|
format.json { head :no_content }
|
||||||
else
|
else
|
||||||
format.html { render :action => "edit" }
|
format.html { render :action => "edit" }
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
module IpnHelper
|
|
||||||
end
|
|
||||||
@@ -3,20 +3,14 @@ class Ability
|
|||||||
|
|
||||||
def initialize(user)
|
def initialize(user)
|
||||||
# Anonymous can read mac
|
# Anonymous can read mac
|
||||||
today = Date.today
|
|
||||||
event = Date.new(2013,9,1)
|
|
||||||
|
|
||||||
unless today == event
|
|
||||||
can :read, Mac
|
can :read, Mac
|
||||||
can :scan, Mac # Need anonymous so CRON can scan
|
|
||||||
end
|
|
||||||
|
|
||||||
if !user.nil?
|
if !user.nil?
|
||||||
|
|
||||||
# By default, users can only see their own stuff
|
# By default, users can only see their own stuff
|
||||||
can :read, Card, :user_id => user.id
|
can :read, Card, :user_id => user.id
|
||||||
can :read, Certification
|
can :read, Certification
|
||||||
can :read_details, Mac unless today == event
|
can :read_details, Mac
|
||||||
can [:update], Mac, :user_id => nil
|
can [:update], Mac, :user_id => nil
|
||||||
can [:create,:update], Mac, :user_id => user.id
|
can [:create,:update], Mac, :user_id => user.id
|
||||||
can :read, User, :id => user.id #TODO: why can users update themselves?
|
can :read, User, :id => user.id #TODO: why can users update themselves?
|
||||||
@@ -35,11 +29,9 @@ class Ability
|
|||||||
can :read, UserCertification
|
can :read, UserCertification
|
||||||
end
|
end
|
||||||
|
|
||||||
# Accountants can manage payments
|
# Accountants can manage all
|
||||||
if user.accountant?
|
if user.accountant?
|
||||||
can :manage, Payment
|
can :manage, Payment
|
||||||
can :manage, Ipn
|
|
||||||
can :manage, PaypalCsv
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Admins can manage all
|
# Admins can manage all
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ class Card < ActiveRecord::Base
|
|||||||
require 'open-uri'
|
require 'open-uri'
|
||||||
|
|
||||||
attr_accessible :id, :user_id, :name, :card_number, :card_permissions
|
attr_accessible :id, :user_id, :name, :card_number, :card_permissions
|
||||||
validates_presence_of :user_id, :card_number, :card_permissions
|
validates_uniqueness_of :id,:card_number
|
||||||
validates_uniqueness_of :id, :card_number
|
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
def upload_to_door
|
def upload_to_door
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
require 'net/http'
|
|
||||||
class Ipn < ActiveRecord::Base
|
|
||||||
attr_accessible :data
|
|
||||||
belongs_to :payment
|
|
||||||
|
|
||||||
after_create :create_payment
|
|
||||||
|
|
||||||
def date_parsed
|
|
||||||
begin
|
|
||||||
Date.strptime(self.payment_date, "%H:%M:%S %b %e, %Y %Z")
|
|
||||||
rescue
|
|
||||||
Date.new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.new_from_dynamic_params(params)
|
|
||||||
ipn = Ipn.new()
|
|
||||||
|
|
||||||
ipn.attributes.each do |c|
|
|
||||||
unless params[c.first.to_sym].nil?
|
|
||||||
ipn[c.first.to_sym] = params[c.first.to_sym]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return ipn
|
|
||||||
end
|
|
||||||
|
|
||||||
# Post back to Paypal to make sure it's valid
|
|
||||||
def validate!
|
|
||||||
uri = URI.parse('https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate')
|
|
||||||
|
|
||||||
http = Net::HTTP.new(uri.host, uri.port)
|
|
||||||
http.open_timeout = 60
|
|
||||||
http.read_timeout = 60
|
|
||||||
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
||||||
http.use_ssl = true
|
|
||||||
response = http.post(uri.request_uri, self.data,
|
|
||||||
'Content-Length' => "#{self.data.size}",
|
|
||||||
'User-Agent' => "Ruby on Rails"
|
|
||||||
).body
|
|
||||||
|
|
||||||
unless ["VERIFIED", "INVALID"].include?(response)
|
|
||||||
Rails.logger.error "Faulty paypal result: #{response}"
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
unless response == "VERIFIED"
|
|
||||||
Rails.logger.error "Invalid IPN: #{response}"
|
|
||||||
Rails.logger.error "Data: #{self.data}"
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
def link_payment
|
|
||||||
create_payment
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def create_payment
|
|
||||||
# find user by email, then by payee
|
|
||||||
user = User.where("lower(email) = ?", self._from_email_address.downcase).first
|
|
||||||
user = User.where("lower(payee) = ?", self._from_email_address.downcase).first if user.nil? && self._from_email_address.present?
|
|
||||||
|
|
||||||
# Only create payments if the IPN matches a member
|
|
||||||
if user.present?
|
|
||||||
# And is a payment (not a cancellation, etc)
|
|
||||||
payment_types = ["subscr_payment","send_money"]
|
|
||||||
if payment_types.include?(self.txn_type)
|
|
||||||
# And a member level
|
|
||||||
if User.member_levels[self.payment_gross.to_i].present?
|
|
||||||
payment = Payment.new
|
|
||||||
payment.date = Date.strptime(self.payment_date, "%H:%M:%S %b %e, %Y %Z")
|
|
||||||
payment.user_id = user.id
|
|
||||||
payment.amount = self.payment_gross
|
|
||||||
if payment.save
|
|
||||||
self.payment_id = payment.id
|
|
||||||
self.save!
|
|
||||||
else
|
|
||||||
return [false, "Unable to link payment. Payment error: #{payment.errors.full_messages.first}"]
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return [false, "Unable to link payment. Couldn't find membership level '#{self.payment_gross.to_i}'."]
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return [false, "Unable to link payment. Transaction is a '#{self.txn_type}' instead of '#{payment_types.inspect}'."]
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return [false, "Unable to link payment. Couldn't find user/payee '#{self.payer_email}'."]
|
|
||||||
end
|
|
||||||
|
|
||||||
return [true]
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
class Payment < ActiveRecord::Base
|
class Payment < ActiveRecord::Base
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
has_one :ipn
|
attr_accessible :date, :user_id, :created_by
|
||||||
has_one :paypal_csv
|
|
||||||
attr_accessible :date, :user_id, :created_by, :amount
|
|
||||||
|
|
||||||
validates_presence_of :user_id, :date, :amount # not created_by
|
validates_presence_of :user_id, :date, :created_by
|
||||||
validates_uniqueness_of :date, :scope => :user_id, :message => ' of payment already exists for this user.'
|
validates_uniqueness_of :date, :scope => :user_id, :message => ' of payment already exists for this user.'
|
||||||
|
|
||||||
def human_date
|
def human_date
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
require 'csv'
|
|
||||||
class PaypalCsv < ActiveRecord::Base
|
|
||||||
attr_accessible :data, :_address_status, :_counterparty_status, :_currency, :_fee, :_from_email_address, :_gross, :_item_id, :_item_title, :_name, :_net, :_status, :_time, :_time_zone, :_to_email_address, :_transaction_id, :_type, :date, :string
|
|
||||||
belongs_to :payment
|
|
||||||
|
|
||||||
after_create :create_payment
|
|
||||||
|
|
||||||
def date_parsed
|
|
||||||
begin
|
|
||||||
Date.strptime(self._date, "%m/%d/%Y")
|
|
||||||
rescue
|
|
||||||
Date.new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.batch_import_from_csv(filename)
|
|
||||||
csv = CSV.table(filename)
|
|
||||||
csv.each do |row|
|
|
||||||
paypal_csv = PaypalCsv.new()
|
|
||||||
|
|
||||||
paypal_csv.attributes.each do |c|
|
|
||||||
unless row[c.first.to_sym].nil?
|
|
||||||
paypal_csv[c.first.to_sym] = row[c.first.to_sym]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
paypal_csv.data = row.to_json
|
|
||||||
paypal_csv.save
|
|
||||||
end
|
|
||||||
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
def link_payment
|
|
||||||
create_payment
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def create_payment
|
|
||||||
# find user by email, then by payee
|
|
||||||
user = User.where("lower(email) = ?", self._from_email_address.downcase).first
|
|
||||||
user = User.where("lower(payee) = ?", self._from_email_address.downcase).first if user.nil? && self._from_email_address.present?
|
|
||||||
|
|
||||||
# Only create payments if the CSV matches a member
|
|
||||||
if user.present?
|
|
||||||
# And is a payment (not a cancellation, etc)
|
|
||||||
payment_types = ["Recurring Payment Received","Payment Received"]
|
|
||||||
if payment_types.include?(self._type)
|
|
||||||
# And a member level
|
|
||||||
if User.member_levels[self._gross.to_i].present?
|
|
||||||
payment = Payment.new
|
|
||||||
payment.date = Date.strptime(self._date, "%m/%d/%Y") #7/6/2013 for Jul 06
|
|
||||||
payment.user_id = user.id
|
|
||||||
payment.amount = self._gross
|
|
||||||
if payment.save
|
|
||||||
self.payment_id = payment.id
|
|
||||||
self.save!
|
|
||||||
else
|
|
||||||
return [false, "Unable to link payment. Payment error: #{payment.errors.full_messages.first}"]
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return [false, "Unable to link payment. Couldn't find membership level '#{self._gross.to_i}'."]
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return [false, "Unable to link payment. Transaction is a '#{self._type}' instead of '#{payment_types.inspect}'."]
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return [false, "Unable to link payment. Couldn't find user/payee '#{self._from_email_address}'."]
|
|
||||||
end
|
|
||||||
|
|
||||||
return [true]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -85,108 +85,72 @@ class User < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.member_levels
|
|
||||||
{25 => "Associate", 50 => "Basic", 75 => "Basic", 100 => "Plus"}
|
|
||||||
end
|
|
||||||
|
|
||||||
def payment_status
|
|
||||||
results = payment_status_calculation
|
|
||||||
return results[:paid]
|
|
||||||
end
|
|
||||||
|
|
||||||
def member_status
|
def member_status
|
||||||
results = member_status_calculation
|
case self.member_level.to_i
|
||||||
return results[:rank]
|
when 0
|
||||||
|
if self.payments.count > 0 then
|
||||||
|
2
|
||||||
|
else
|
||||||
|
-1
|
||||||
|
end
|
||||||
|
when 1
|
||||||
|
1
|
||||||
|
when 10..24
|
||||||
|
10
|
||||||
|
when 25..999
|
||||||
|
if self.payments.count > 0 then
|
||||||
|
if self.payments.last.date < (DateTime.now - 45.days)
|
||||||
|
3
|
||||||
|
else
|
||||||
|
case self.member_level.to_i
|
||||||
|
when 25..49
|
||||||
|
25
|
||||||
|
when 50..99
|
||||||
|
50
|
||||||
|
when 100..999
|
||||||
|
100
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def member_status_symbol
|
def member_status_symbol
|
||||||
results = member_status_calculation
|
case self.member_level.to_i
|
||||||
return "<img src='/#{results[:icon]}#{results[:flair]}-coin.png' title='#{results[:message]}' />"
|
when 0
|
||||||
end
|
if self.payments.count > 0 then
|
||||||
|
"<span class='hoverinfo' title='Former Member (#{(DateTime.now - self.payments.last.date).to_i} days ago)'>:(</span>"
|
||||||
def delinquency
|
|
||||||
if self.payments.count > 0
|
|
||||||
paydate = self.payments.maximum(:date)
|
|
||||||
(Date.today - paydate).to_i
|
|
||||||
else
|
else
|
||||||
(Date.today - self.created_at.to_date).to_i
|
"<!-- Not a member -->"
|
||||||
|
end
|
||||||
|
when 1
|
||||||
|
"Unable"
|
||||||
|
when 10..24
|
||||||
|
"<span class='hoverinfo' title='Volunteer'>◔</span>"
|
||||||
|
when 25..999
|
||||||
|
if self.payments.count > 0 then
|
||||||
|
if self.payments.last.date < (DateTime.now - 45.days)
|
||||||
|
"<span class='hoverinfo' title='Recently Lapsed (#{(DateTime.now - self.payments.last.date).to_i} days ago)'>◌</span>"
|
||||||
|
else
|
||||||
|
case self.member_level.to_i
|
||||||
|
when 25..49
|
||||||
|
"<span class='hoverinfo' title='#{member_level_string}'>◑</span>"
|
||||||
|
when 50..99
|
||||||
|
"<span class='hoverinfo' title='#{member_level_string}'>◕</span>"
|
||||||
|
when 100..999
|
||||||
|
"<span class='hoverinfo' title='#{member_level_string}'>●</span>"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
"<span class='hoverinfo' title='No Payments'>?</span>"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def member_status_calculation
|
|
||||||
# Begin output buffer
|
|
||||||
message = ""
|
|
||||||
icon = ""
|
|
||||||
flair = ""
|
|
||||||
rank = 0
|
|
||||||
|
|
||||||
# First status item is level
|
|
||||||
case self.member_level.to_i
|
|
||||||
when 0..9
|
|
||||||
if self.payments.count > 0 then
|
|
||||||
message = "Former Member (#{(DateTime.now - self.payments.maximum(:date)).to_i/30} months ago)"
|
|
||||||
icon = :timeout
|
|
||||||
rank = 1
|
|
||||||
else
|
|
||||||
message = "Not a Member"
|
|
||||||
icon = :no
|
|
||||||
rank = 0
|
|
||||||
end
|
|
||||||
when 10..24
|
|
||||||
message = "Volunteer"
|
|
||||||
icon = :heart
|
|
||||||
rank = 101
|
|
||||||
when 25..49
|
|
||||||
message = member_level_string
|
|
||||||
icon = :copper
|
|
||||||
rank = 250
|
|
||||||
when 50..99
|
|
||||||
message = member_level_string
|
|
||||||
icon = :silver
|
|
||||||
rank = 500
|
|
||||||
when 100..999
|
|
||||||
message = member_level_string
|
|
||||||
icon = :gold
|
|
||||||
rank = 1000
|
|
||||||
end
|
|
||||||
|
|
||||||
payment_results = payment_status_calculation
|
|
||||||
flair = payment_results[:flair]
|
|
||||||
rank = rank/10 unless payment_results[:paid]
|
|
||||||
message = payment_results[:message] unless payment_results[:message].blank?
|
|
||||||
|
|
||||||
return {:message => message, :icon => icon, :flair => flair, :rank => rank}
|
|
||||||
end
|
|
||||||
|
|
||||||
def payment_status_calculation
|
|
||||||
flair = ""
|
|
||||||
message = ""
|
|
||||||
paid = true
|
|
||||||
|
|
||||||
# Second status item is payment status
|
|
||||||
case self.member_level.to_i
|
|
||||||
when 25..999
|
|
||||||
# There are payments
|
|
||||||
if self.payments.count > 0 then
|
|
||||||
# They're on time
|
|
||||||
if self.payments.maximum(:date) > (DateTime.now - 60.days)
|
|
||||||
flair = "-paid"
|
|
||||||
paid = true
|
|
||||||
else
|
|
||||||
message = "Last Payment #{(DateTime.now - self.payments.maximum(:date)).to_i/30} months ago"
|
|
||||||
paid = false
|
|
||||||
end
|
|
||||||
else
|
|
||||||
message = "No Payments Recorded"
|
|
||||||
paid = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return {:message => message, :paid => paid, :flair => flair}
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def send_new_user_email
|
def send_new_user_email
|
||||||
Rails.logger.info UserMailer.new_user_email(self).deliver
|
Rails.logger.info UserMailer.new_user_email(self).deliver
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
class UserCertification < ActiveRecord::Base
|
class UserCertification < ActiveRecord::Base
|
||||||
attr_accessible :certification_id, :user_id
|
attr_accessible :certification_id, :user_id
|
||||||
|
|
||||||
validates_presence_of :certification_id, :user_id
|
|
||||||
validates_uniqueness_of :certification_id, :scope => :user_id, :message => 'already exists for this user.' # Makes sure users don't get certified twice
|
validates_uniqueness_of :certification_id, :scope => :user_id, :message => 'already exists for this user.' # Makes sure users don't get certified twice
|
||||||
|
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :certification
|
belongs_to :certification
|
||||||
|
|
||||||
def user_name
|
def user_name
|
||||||
if self.user.blank?
|
if user.blank?
|
||||||
""
|
return "n/a (user ##{user_id} missing)"
|
||||||
else
|
else
|
||||||
self.user.name
|
return self.user.name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,10 +11,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% @card.user_id = params[:user] if params[:user].present? %>
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<%= f.label :user %><br />
|
<%= f.label :user %><br />
|
||||||
<%= collection_select(:card, :user_id, User.all.sort_by(&:name), :id, :name, :include_blank => true) %>
|
<%= collection_select(:card, :user_id, User.all.sort_by(&:name), :id, :name) %>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<%= f.label :name, "Card Note" %><br />
|
<%= f.label :name, "Card Note" %><br />
|
||||||
|
|||||||
@@ -8,10 +8,13 @@
|
|||||||
<%= simple_format @certification.description %>
|
<%= simple_format @certification.description %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<b>Certified Users:</b>
|
||||||
<b>Certified Users:</b>
|
<ul>
|
||||||
<%= link_to "Click Here", user_certifications_path %>
|
<% @certification_users.each do |user| %>
|
||||||
</p>
|
<li><%= link_to user.name, user %></li>
|
||||||
|
<% end %>
|
||||||
|
<% if @certification_users.blank? then %><li>n/a</li><% end %>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<% if can? :update, @certification %><%= link_to 'Edit', edit_certification_path(@certification) %> |<% end %>
|
<% if can? :update, @certification %><%= link_to 'Edit', edit_certification_path(@certification) %> |<% end %>
|
||||||
<%= link_to 'Back', certifications_path %>
|
<%= link_to 'Back', certifications_path %>
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
<dd><%= @num_users %> (<%= @recent_users %> new in the last 7 days)</dd>
|
<dd><%= @num_users %> (<%= @recent_users %> new in the last 7 days)</dd>
|
||||||
<dt># of People Certified:</dt>
|
<dt># of People Certified:</dt>
|
||||||
<dd><%= @num_certs %> (<%= @recent_certs %> new in the last 7 days)</dd>
|
<dd><%= @num_certs %> (<%= @recent_certs %> new in the last 7 days)</dd>
|
||||||
<dt># of Current Paying Members:</dt>
|
|
||||||
<dd><%= @num_paid_users %> (<%= @num_delinquent_users %> not-current)</dd>
|
|
||||||
<dt># of Door Accesses Granted:</dt>
|
<dt># of Door Accesses Granted:</dt>
|
||||||
<dd><%= @num_door_opens %> (<%= @today_door_opens %> today, <%= @recent_door_opens %> in the last 7 days)</dd>
|
<dd><%= @num_door_opens %> (<%= @today_door_opens %> today, <%= @recent_door_opens %> in the last 7 days)</dd>
|
||||||
<dt># of Door Accesses Denied:</dt>
|
<dt># of Door Accesses Denied:</dt>
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
<h2>PayPal IPN Records</h2>
|
|
||||||
<p>
|
|
||||||
<em>Automatically loaded from PayPal's servers</em>
|
|
||||||
</p>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>Date</th>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>Item</th>
|
|
||||||
<th>Amount</th>
|
|
||||||
</tr>
|
|
||||||
<% @ipns.sort_by(&:date_parsed).reverse!.each do |ipn| %>
|
|
||||||
<tr>
|
|
||||||
<td><%= ipn.payment_date %></td>
|
|
||||||
<td><%= ipn.first_name %> <%= ipn.last_name %></td>
|
|
||||||
<td><%= ipn.item_name %></td>
|
|
||||||
<td>
|
|
||||||
<% if ipn.payment_gross.blank? %>
|
|
||||||
<%= ipn.txn_type %>
|
|
||||||
<% else %>
|
|
||||||
<%= ipn.payment_gross %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<% if ipn.payment.present? %>
|
|
||||||
<%= link_to "Linked Payment", ipn.payment %>
|
|
||||||
<% else %>
|
|
||||||
<%= link_to "Try to link email '#{ipn.payer_email}' at membership level '#{ipn.payment_gross.to_i}'", link_ipn_path(ipn) %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td><%= link_to "Details", ipn %></td>
|
|
||||||
<td><%= link_to "Validate", validate_ipn_path(ipn) %></td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
</table>
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
<%= form_tag('/ipns') do |f| %>
|
|
||||||
|
|
||||||
<style type="text/css">
|
|
||||||
label {
|
|
||||||
width: 10em;
|
|
||||||
display: inline-block;}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<div class="actions">
|
|
||||||
<%= submit_tag %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :first_name %>
|
|
||||||
<%= text_field_tag :first_name, "John" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :last_name %>
|
|
||||||
<%= text_field_tag :last_name, "Smith" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :payer_email %>
|
|
||||||
<%= text_field_tag :payer_email, "jsmith@example.com" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :item_name %>
|
|
||||||
<%= text_field_tag :item_name, "Associate Membership" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :payment_gross %>
|
|
||||||
<%= text_field_tag :payment_gross, "25.00" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :transaction_subject %>
|
|
||||||
<%= text_field_tag :transaction_subject, "" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :payment_date %>
|
|
||||||
<%= text_field_tag :payment_date, "20:46:54 Jun 20, 2013 PDT" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :txn_type %>
|
|
||||||
<%= text_field_tag :txn_type, "subscr_payment" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :subscr_id %>
|
|
||||||
<%= text_field_tag :subscr_id, "I-1234567890" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :residence_country %>
|
|
||||||
<%= text_field_tag :residence_country, "US" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :mc_currency %>
|
|
||||||
<%= text_field_tag :mc_currency, "USD" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :business %>
|
|
||||||
<%= text_field_tag :business, "hslfinances@gmail.com" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :payment_type %>
|
|
||||||
<%= text_field_tag :payment_type, "instant" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :protection_eligibility %>
|
|
||||||
<%= text_field_tag :protection_eligibility, "Ineligible" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :verify_sign %>
|
|
||||||
<%= text_field_tag :verify_sign, "12ru9021j9f21j90fj1290fj2910fj0219fj0" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :payer_status %>
|
|
||||||
<%= text_field_tag :payer_status, "verified" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :txn_id %>
|
|
||||||
<%= text_field_tag :txn_id, "1234567890" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :receiver_email %>
|
|
||||||
<%= text_field_tag :receiver_email, "hslfinances@gmail.com" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :payer_id %>
|
|
||||||
<%= text_field_tag :payer_id, "V812314914" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :receiver_id %>
|
|
||||||
<%= text_field_tag :receiver_id, "V90R1280182" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :payment_status %>
|
|
||||||
<%= text_field_tag :payment_status, "Completed" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :payment_fee %>
|
|
||||||
<%= text_field_tag :payment_fee, "0.85" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :mc_fee %>
|
|
||||||
<%= text_field_tag :mc_fee, "0.85" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :mc_gross %>
|
|
||||||
<%= text_field_tag :mc_gross, "25.00" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :charset %>
|
|
||||||
<%= text_field_tag :charset, "windows-1252" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :notify_version %>
|
|
||||||
<%= text_field_tag :notify_version, "3.7" %>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :ipn_track_id %>
|
|
||||||
<%= text_field_tag :ipn_track_id, "9d3d032d9070" %>
|
|
||||||
</div>
|
|
||||||
<div class="actions">
|
|
||||||
<%= submit_tag %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<h2>IPN Details</h2>
|
|
||||||
|
|
||||||
<% @ipn.attributes.except("data","payment_id").each do |attr| %>
|
|
||||||
<p>
|
|
||||||
<b><%= attr.first.to_s %>:</b>
|
|
||||||
<%= @ipn.attributes[attr.first] %>
|
|
||||||
</p>
|
|
||||||
<% end %>
|
|
||||||
<p>
|
|
||||||
<% if @ipn.payment.present? %>
|
|
||||||
<%= link_to "Linked Payment", @ipn.payment %>
|
|
||||||
<% else %>
|
|
||||||
<span class="alert">Couldn't link automatically. Please create payment manually or adjust the user account and try again to <%= link_to "link email '#{@ipn.payer_email}' at membership level '#{@ipn.payment_gross.to_i}'", link_ipn_path(@ipn) %>.</span>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<%= link_to "Back", ipns_path %>
|
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
<a href="/" title="Home"><img src="/assets/logo.png" id="logo" /></a>
|
<a href="/" title="Home"><img src="/assets/logo.png" id="logo" /></a>
|
||||||
<%= link_to 'People', users_path if can? :read, User %>
|
<%= link_to 'People', users_path if can? :read, User %>
|
||||||
<%= link_to 'Access Cards', cards_path if can? :manage, Card %>
|
<%= link_to 'Access Cards', cards_path if can? :manage, Card %>
|
||||||
<% if can? :create, UserCertification %>
|
<% if can? :manage, UserCertification %>
|
||||||
<%= link_to 'Cert Classes', certifications_path if can? :read, Certification %>
|
<%= link_to 'Cert Classes', certifications_path if can? :read, Certification %>
|
||||||
<%= link_to 'User Certs', user_certifications_path if can? :create, UserCertification %>
|
<%= link_to 'User Certs', user_certifications_path if can? :create, UserCertification %>
|
||||||
<% else %>
|
<% else %>
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
Scanning...
|
Scanning...
|
||||||
<% if can? :read_details, Mac
|
<% @log.each do |log| %>
|
||||||
@log.each do |log| %>
|
|
||||||
<%= log.mac %> =
|
<%= log.mac %> =
|
||||||
<%= log.ip %><br/>
|
<%= log.ip %><br/>
|
||||||
<% end
|
<% end %>
|
||||||
end %>
|
|
||||||
|
|||||||
@@ -19,10 +19,6 @@
|
|||||||
<%= f.label :date, "Paid for month beginning" %><br />
|
<%= f.label :date, "Paid for month beginning" %><br />
|
||||||
<%= f.date_select :date, :default => (DateTime.now - 1.month) %>
|
<%= f.date_select :date, :default => (DateTime.now - 1.month) %>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
|
||||||
<%= f.label :amount %><br />
|
|
||||||
<%= f.number_field :amount %>
|
|
||||||
</div>
|
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<%= f.submit %>
|
<%= f.submit %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,17 +1,11 @@
|
|||||||
<h1>Listing payments</h1>
|
<h1>Listing payments</h1>
|
||||||
|
|
||||||
<p>
|
<%= link_to 'New Payment', new_payment_path %>
|
||||||
<b>Create Payments:</b>
|
<br />
|
||||||
<%= link_to 'Manually', new_payment_path %> |
|
|
||||||
<%= link_to 'Batched CSV', paypal_csvs_path %> |
|
|
||||||
<%= link_to 'IPN', ipns_path %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<th>User</th>
|
<th>User</th>
|
||||||
<th>Paid for month <br/>beginning</th>
|
<th>Paid for month <br/>beginning</th>
|
||||||
<th>Amount</th>
|
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
@@ -21,7 +15,6 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><%= link_to payment.user.name_with_payee_and_member_level, payment.user unless payment.user.blank? %></td>
|
<td><%= link_to payment.user.name_with_payee_and_member_level, payment.user unless payment.user.blank? %></td>
|
||||||
<td><%= payment.human_date %></td>
|
<td><%= payment.human_date %></td>
|
||||||
<td><%= payment.amount %></td>
|
|
||||||
<td><%= link_to 'Details', payment %></td>
|
<td><%= link_to 'Details', payment %></td>
|
||||||
<td><%= link_to 'Edit', edit_payment_path(payment) %></td>
|
<td><%= link_to 'Edit', edit_payment_path(payment) %></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<p>
|
<p>
|
||||||
<b>User:</b>
|
<b>User:</b>
|
||||||
<%= link_to @payment.user.name_with_payee_and_member_level, @payment.user unless @payment.user.blank? %>
|
<%= @payment.user.name_with_payee_and_member_level unless @payment.user.blank? %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -8,19 +8,9 @@
|
|||||||
<%= @payment.date %>
|
<%= @payment.date %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
|
||||||
<b>Amount:</b>
|
|
||||||
<%= @payment.amount %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<b>Last Modified by:</b>
|
<b>Last Modified by:</b>
|
||||||
<% user = @users.find{|u| u.id == @payment.created_by} %>
|
<%= user = @users.find{|u| u.id == @payment.created_by}; link_to user.name, user unless user.blank? %>
|
||||||
<% if user.blank? %>
|
|
||||||
n/a
|
|
||||||
<% else %>
|
|
||||||
<%= link_to user.name, user %>
|
|
||||||
<% end %>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -33,18 +23,6 @@
|
|||||||
<%= @payment.updated_at %>
|
<%= @payment.updated_at %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<% if @payment.ipn.present? %>
|
|
||||||
<p>
|
|
||||||
<%= link_to "Paid via PayPal (IPN)", @payment.ipn %>
|
|
||||||
</p>
|
|
||||||
<% end %>
|
|
||||||
<% if @payment.paypal_csv.present? %>
|
|
||||||
<p>
|
|
||||||
<%= link_to "Paid via PayPal (CSV)", @payment.paypal_csv %>
|
|
||||||
</p>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<%= link_to 'Edit', edit_payment_path(@payment) %> |
|
<%= link_to 'Edit', edit_payment_path(@payment) %> |
|
||||||
<%= link_to 'Destroy', @payment, :confirm => 'Are you sure you want to destroy this payment?', :method => :delete if can? :destroy, @payment %> |
|
<%= link_to 'Destroy', @payment, :confirm => 'Are you sure you want to destroy this payment?', :method => :delete if can? :destroy, @payment %> |
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
<h2>PayPal CSV Records</h2>
|
|
||||||
<p>
|
|
||||||
<%= link_to "Upload CSV", new_paypal_csv_path %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>Date</th>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>Item</th>
|
|
||||||
<th>Amount</th>
|
|
||||||
</tr>
|
|
||||||
<% @paypal_csvs.sort_by(&:date_parsed).reverse!.each do |paypal_csv| %>
|
|
||||||
<tr>
|
|
||||||
<td><%= paypal_csv.date %></td>
|
|
||||||
<td><%= paypal_csv._name %></td>
|
|
||||||
<td><%= paypal_csv._item_title %></td>
|
|
||||||
<td>
|
|
||||||
<% if paypal_csv._gross.blank? %>
|
|
||||||
<%= paypal_csv._type %>
|
|
||||||
<% else %>
|
|
||||||
<%= paypal_csv._gross %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<% if paypal_csv.payment.present? %>
|
|
||||||
<%= link_to "Linked Payment", paypal_csv.payment %>
|
|
||||||
<% else %>
|
|
||||||
<%= link_to "Try to link email '#{paypal_csv._from_email_address}' at membership level '#{paypal_csv._gross.to_i}'", link_paypal_csv_path(paypal_csv) %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td><%= link_to "Details", paypal_csv %></td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
</table>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<style type="text/css">
|
|
||||||
label {
|
|
||||||
width: 10em;
|
|
||||||
display: inline-block;}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<%= form_tag('/paypal_csvs', :multipart => true) do |f| %>
|
|
||||||
<div class="field">
|
|
||||||
<%= label_tag :file %>
|
|
||||||
<%= file_field_tag :file %>
|
|
||||||
</div>
|
|
||||||
<div class="actions">
|
|
||||||
<%= submit_tag %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<h2>PayPal CSV Item Details</h2>
|
|
||||||
<% @paypal_csv.attributes.except("data","payment_id").each do |attr| %>
|
|
||||||
<p>
|
|
||||||
<b><%= attr.first.to_s %>:</b>
|
|
||||||
<%= @paypal_csv.attributes[attr.first] %>
|
|
||||||
</p>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<% if @paypal_csv.payment.present? %>
|
|
||||||
<%= link_to "Linked Payment", @paypal_csv.payment %>
|
|
||||||
<% else %>
|
|
||||||
<span class="alert">Couldn't link automatically. Please create payment manually or adjust the user account and try again to <%= link_to "link email '#{@paypal_csv._from_email_address}' at membership level '#{@paypal_csv._gross.to_i}'", link_paypal_csv_path(@paypal_csv) %>.</span>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
</p>
|
|
||||||
<%= link_to "Back", paypal_csvs_path %>
|
|
||||||
@@ -11,14 +11,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% @user_certification.user_id = params[:user] if params[:user].present? %>
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<%= f.label :user_id, "User" %><br />
|
<%= f.label :user_id, "User" %><br />
|
||||||
<%= collection_select(:user_certification, :user_id, @users, :id, :name, :include_blank => true) %>
|
<%= collection_select(:user_certification, :user_id, @users, :id, :name) %>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<%= f.label :certification_id, "Certification" %><br />
|
<%= f.label :certification_id, "Certification" %><br />
|
||||||
<%= collection_select(:user_certification, :certification_id, @certifications, :id, :name, :include_blank => true) %>
|
<%= collection_select(:user_certification, :certification_id, @certifications, :id, :name) %>
|
||||||
</div>
|
</div>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<%= f.submit %>
|
<%= f.submit %>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<p>
|
<p>
|
||||||
<b>User:</b>
|
<b>User:</b>
|
||||||
<%= link_to @user_certification.user.name, @user_certification.user %>
|
<%= @user_certification.user_name %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -14,7 +14,12 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<b>Updated:</b> by <%= link_to @updated_by.name, @updated_by unless @updated_by.blank? %>
|
<b>Updated:</b> by
|
||||||
|
<% if @updated_by.blank? %>
|
||||||
|
#<%= @user_certification.updated_by ||= "nil" %>
|
||||||
|
<% else %>
|
||||||
|
<%= link_to @updated_by.name, @updated_by %>
|
||||||
|
<% end %>
|
||||||
at <%= @user_certification.updated_at %>
|
at <%= @user_certification.updated_at %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
<h1>Inactive Users</h1>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<col />
|
|
||||||
<col />
|
|
||||||
<% if current_user.admin? then %><col /><% end %>
|
|
||||||
<col />
|
|
||||||
<% if current_user.admin? %><col />
|
|
||||||
<col class="col_highlight" /><% end %>
|
|
||||||
<col />
|
|
||||||
<col class="col_highlight" />
|
|
||||||
<col />
|
|
||||||
<col class="col_highlight" />
|
|
||||||
<tr>
|
|
||||||
<th></th>
|
|
||||||
<th>Name</th>
|
|
||||||
<% if current_user.admin? then %><th>Email</th><% end %>
|
|
||||||
<th>Certifications</th>
|
|
||||||
<% if current_user.admin? then %>
|
|
||||||
<th>Orientation?</th>
|
|
||||||
<% end %>
|
|
||||||
<th>Card?</th>
|
|
||||||
<th>Pmt Method</th>
|
|
||||||
<th>Desired Level</th>
|
|
||||||
<th>Last Payment</th>
|
|
||||||
<th>Joined</th>
|
|
||||||
<th></th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<% if !@users.blank? %>
|
|
||||||
<% @users.each do |user| %>
|
|
||||||
<tr<%= " class='hidden'" if user.hidden? %>>
|
|
||||||
<td><%= image_tag user.gravatar_url(:default => "http://members.heatsynclabs.org/assets/nil.png"), :class => :avatar %></td>
|
|
||||||
<td><%= link_to user.name, user %></td>
|
|
||||||
<% if current_user.admin? then %><td><%= user.email %></td><% end %>
|
|
||||||
<td><% user.certifications.each do |c| %>
|
|
||||||
<%= link_to c.name, c %><%= "," unless c.id == user.certifications.last.id %>
|
|
||||||
<% end %></td>
|
|
||||||
<% if current_user.admin? then %><td>
|
|
||||||
<%= unless user.orientation.blank? then raw("<span class='hoverinfo' title='"+user.orientation.strftime("%B %d %Y")+"'>✓</span>") end %>
|
|
||||||
</td><% end %>
|
|
||||||
<td><%= unless user.cards.blank? then raw("<span class='iconinfo'>✓</span>") end %></td>
|
|
||||||
<td><%= user.payment_method %></td>
|
|
||||||
<td><%= user.member_level %></td>
|
|
||||||
<td><% delinquency = user.delinquency %>
|
|
||||||
<% if delinquency == 9999 %>
|
|
||||||
No Payments
|
|
||||||
<% else %>
|
|
||||||
<%= (delinquency/30).to_s+" mo. ago" %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td><%= user.created_at.to_date %></td>
|
|
||||||
<td><%= link_to 'Edit', edit_user_path(user) if can? :update, user %></td>
|
|
||||||
<td><%= link_to 'Destroy', user, :confirm => 'Are you sure? WARNING: THIS DOES NOT REMOVE THE USER FROM THE DOOR SYSTEM! DISABLE THEM FIRST.', :method => :delete if can? :destroy, user %></td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<% if current_user.orientation.blank? then %>
|
|
||||||
<p class="alert">There's a lot more to see here, but our records show you haven't completed the new member orientation yet. If that's incorrect, please contact a volunteer.</p>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
@@ -6,9 +6,6 @@
|
|||||||
<% if can? :manage, User %>
|
<% if can? :manage, User %>
|
||||||
| <%= link_to 'Merge Users', users_merge_path %>
|
| <%= link_to 'Merge Users', users_merge_path %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if current_user.admin? %>
|
|
||||||
| <%= link_to 'Inactive Users', users_inactive_path %>
|
|
||||||
<% end %>
|
|
||||||
<table>
|
<table>
|
||||||
<col />
|
<col />
|
||||||
<col />
|
<col />
|
||||||
|
|||||||
@@ -74,19 +74,17 @@
|
|||||||
</p>
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
<p>
|
<p>
|
||||||
<b>Card: </b><%= link_to "+ Add", (new_card_path+"?user="+@user.id.to_s), :class => 'btn' if can? :create, Card %>
|
<b>Card:</b>
|
||||||
<% if current_user.admin? then %>
|
<% if current_user.admin? then %>
|
||||||
<ul>
|
|
||||||
<% @user.cards.each do |c| %>
|
<% @user.cards.each do |c| %>
|
||||||
<li><%= link_to c.card_number, c %><%= "," unless c == @user.cards.last %></li>
|
<%= link_to c.card_number, c %><%= "," unless c == @user.cards.last %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= unless @user.cards.blank? then raw("✓") end %>
|
<%= unless @user.cards.blank? then raw("✓") end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<b>Certifications: </b><%= link_to "+ Add", (new_user_certification_path+"?user="+@user.id.to_s), :class => 'btn' if can? :create, UserCertification %>
|
<b>Certifications:</b>
|
||||||
<ul>
|
<ul>
|
||||||
<% @user.certifications.each do |certification| %>
|
<% @user.certifications.each do |certification| %>
|
||||||
<li><%= link_to certification.name, certification %></li>
|
<li><%= link_to certification.name, certification %></li>
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
Dooraccess::Application.routes.draw do
|
Dooraccess::Application.routes.draw do
|
||||||
match 'ipns/import' => 'ipns#import', :as => :import_ipn
|
|
||||||
resources :ipns
|
|
||||||
match 'ipns/:id/link' => 'ipns#link', :as => :link_ipn
|
|
||||||
match 'ipns/:id/validate' => 'ipns#validate', :as => :validate_ipn
|
|
||||||
|
|
||||||
resources :paypal_csvs
|
|
||||||
match 'paypal_csvs/:id/link' => 'paypal_csvs#link', :as => :link_paypal_csv
|
|
||||||
|
|
||||||
resources :payments
|
resources :payments
|
||||||
|
|
||||||
@@ -28,7 +21,6 @@ Dooraccess::Application.routes.draw do
|
|||||||
match 'user_summary/:id' => 'users#user_summary' # User summary view
|
match 'user_summary/:id' => 'users#user_summary' # User summary view
|
||||||
match 'users/merge' => 'users#merge_view', :via => :get # Merge view
|
match 'users/merge' => 'users#merge_view', :via => :get # Merge view
|
||||||
match 'users/merge' => 'users#merge_action', :via => :post # Merge action
|
match 'users/merge' => 'users#merge_action', :via => :post # Merge action
|
||||||
match 'users/inactive' => 'users#inactive' # Inactive users report
|
|
||||||
resources :users
|
resources :users
|
||||||
match 'users/create' => 'users#create', :via => :post # Use POST users/create instead of POST users to avoid devise conflict
|
match 'users/create' => 'users#create', :via => :post # Use POST users/create instead of POST users to avoid devise conflict
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
class CreateIpns < ActiveRecord::Migration
|
|
||||||
def change
|
|
||||||
create_table :ipns do |t|
|
|
||||||
t.integer :payment_id
|
|
||||||
t.text :data
|
|
||||||
t.string :txn_id
|
|
||||||
t.string :txn_type
|
|
||||||
t.string :first_name
|
|
||||||
t.string :last_name
|
|
||||||
t.string :payer_business_name
|
|
||||||
t.string :payer_email
|
|
||||||
t.string :payer_id
|
|
||||||
t.string :auth_amount
|
|
||||||
t.string :payment_date
|
|
||||||
t.string :payment_fee
|
|
||||||
t.string :payment_gross
|
|
||||||
t.string :payment_status
|
|
||||||
t.string :item_name
|
|
||||||
t.string :payment_type
|
|
||||||
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
class AddAmountToPayments < ActiveRecord::Migration
|
|
||||||
def change
|
|
||||||
add_column :payments, :amount, :decimal
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
class CreatePaypalCsvs < ActiveRecord::Migration
|
|
||||||
def change
|
|
||||||
create_table :paypal_csvs do |t|
|
|
||||||
t.integer :payment_id
|
|
||||||
t.text :data
|
|
||||||
t.string :date
|
|
||||||
t.string :_time
|
|
||||||
t.string :_time_zone
|
|
||||||
t.string :_name
|
|
||||||
t.string :_type
|
|
||||||
t.string :_status
|
|
||||||
t.string :_currency
|
|
||||||
t.string :_gross
|
|
||||||
t.string :_fee
|
|
||||||
t.string :_net
|
|
||||||
t.string :_from_email_address
|
|
||||||
t.string :_to_email_address
|
|
||||||
t.string :_transaction_id
|
|
||||||
t.string :_counterparty_status
|
|
||||||
t.string :_address_status
|
|
||||||
t.string :_item_title
|
|
||||||
t.string :_item_id
|
|
||||||
t.string :string
|
|
||||||
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
49
db/schema.rb
@@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20130828104240) do
|
ActiveRecord::Schema.define(:version => 20130212083412) do
|
||||||
|
|
||||||
create_table "cards", :force => true do |t|
|
create_table "cards", :force => true do |t|
|
||||||
t.string "card_number"
|
t.string "card_number"
|
||||||
@@ -35,27 +35,6 @@ ActiveRecord::Schema.define(:version => 20130828104240) do
|
|||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "ipns", :force => true do |t|
|
|
||||||
t.integer "payment_id"
|
|
||||||
t.text "data"
|
|
||||||
t.string "txn_id"
|
|
||||||
t.string "txn_type"
|
|
||||||
t.string "first_name"
|
|
||||||
t.string "last_name"
|
|
||||||
t.string "payer_business_name"
|
|
||||||
t.string "payer_email"
|
|
||||||
t.string "payer_id"
|
|
||||||
t.string "auth_amount"
|
|
||||||
t.string "payment_date"
|
|
||||||
t.string "payment_fee"
|
|
||||||
t.string "payment_gross"
|
|
||||||
t.string "payment_status"
|
|
||||||
t.string "item_name"
|
|
||||||
t.string "payment_type"
|
|
||||||
t.datetime "created_at", :null => false
|
|
||||||
t.datetime "updated_at", :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "mac_logs", :force => true do |t|
|
create_table "mac_logs", :force => true do |t|
|
||||||
t.string "mac"
|
t.string "mac"
|
||||||
t.string "ip"
|
t.string "ip"
|
||||||
@@ -85,36 +64,10 @@ ActiveRecord::Schema.define(:version => 20130828104240) do
|
|||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
t.integer "created_by"
|
t.integer "created_by"
|
||||||
t.decimal "amount"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "payments", ["user_id"], :name => "index_payments_on_user_id"
|
add_index "payments", ["user_id"], :name => "index_payments_on_user_id"
|
||||||
|
|
||||||
create_table "paypal_csvs", :force => true do |t|
|
|
||||||
t.integer "payment_id"
|
|
||||||
t.text "data"
|
|
||||||
t.string "date"
|
|
||||||
t.string "_time"
|
|
||||||
t.string "_time_zone"
|
|
||||||
t.string "_name"
|
|
||||||
t.string "_type"
|
|
||||||
t.string "_status"
|
|
||||||
t.string "_currency"
|
|
||||||
t.string "_gross"
|
|
||||||
t.string "_fee"
|
|
||||||
t.string "_net"
|
|
||||||
t.string "_from_email_address"
|
|
||||||
t.string "_to_email_address"
|
|
||||||
t.string "_transaction_id"
|
|
||||||
t.string "_counterparty_status"
|
|
||||||
t.string "_address_status"
|
|
||||||
t.string "_item_title"
|
|
||||||
t.string "_item_id"
|
|
||||||
t.string "string"
|
|
||||||
t.datetime "created_at", :null => false
|
|
||||||
t.datetime "updated_at", :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "user_certifications", :force => true do |t|
|
create_table "user_certifications", :force => true do |t|
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.integer "certification_id"
|
t.integer "certification_id"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 661 B After Width: | Height: | Size: 0 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
7
test/fixtures/ipns.yml
vendored
@@ -1,7 +0,0 @@
|
|||||||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
|
|
||||||
|
|
||||||
one:
|
|
||||||
data: MyText
|
|
||||||
|
|
||||||
two:
|
|
||||||
data: MyText
|
|
||||||
41
test/fixtures/paypal_csvs.yml
vendored
@@ -1,41 +0,0 @@
|
|||||||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
|
|
||||||
|
|
||||||
one:
|
|
||||||
date: MyString
|
|
||||||
_time: MyString
|
|
||||||
_time_zone: MyString
|
|
||||||
_name: MyString
|
|
||||||
_type: MyString
|
|
||||||
_status: MyString
|
|
||||||
_currency: MyString
|
|
||||||
_gross: MyString
|
|
||||||
_fee: MyString
|
|
||||||
_net: MyString
|
|
||||||
_from_email_address: MyString
|
|
||||||
_to_email_address: MyString
|
|
||||||
_transaction_id: MyString
|
|
||||||
_counterparty_status: MyString
|
|
||||||
_address_status: MyString
|
|
||||||
_item_title: MyString
|
|
||||||
_item_id: MyString
|
|
||||||
string: MyString
|
|
||||||
|
|
||||||
two:
|
|
||||||
date: MyString
|
|
||||||
_time: MyString
|
|
||||||
_time_zone: MyString
|
|
||||||
_name: MyString
|
|
||||||
_type: MyString
|
|
||||||
_status: MyString
|
|
||||||
_currency: MyString
|
|
||||||
_gross: MyString
|
|
||||||
_fee: MyString
|
|
||||||
_net: MyString
|
|
||||||
_from_email_address: MyString
|
|
||||||
_to_email_address: MyString
|
|
||||||
_transaction_id: MyString
|
|
||||||
_counterparty_status: MyString
|
|
||||||
_address_status: MyString
|
|
||||||
_item_title: MyString
|
|
||||||
_item_id: MyString
|
|
||||||
string: MyString
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
require 'test_helper'
|
|
||||||
|
|
||||||
class IpnControllerTest < ActionController::TestCase
|
|
||||||
# test "the truth" do
|
|
||||||
# assert true
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
require 'test_helper'
|
|
||||||
|
|
||||||
class IpnHelperTest < ActionView::TestCase
|
|
||||||
end
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
require 'test_helper'
|
|
||||||
|
|
||||||
class IpnTest < ActiveSupport::TestCase
|
|
||||||
# test "the truth" do
|
|
||||||
# assert true
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
require 'test_helper'
|
|
||||||
|
|
||||||
class PaypalCsvTest < ActiveSupport::TestCase
|
|
||||||
# test "the truth" do
|
|
||||||
# assert true
|
|
||||||
# end
|
|
||||||
end
|
|
||||||