57 Commits
0.2.0 ... 0.3.0

Author SHA1 Message Date
1b767f78d2 Version bump 0.3.0
* Added Payments
* Other things that I don't remember...
2016-08-05 22:00:57 -04:00
f380969082 Update payments_controller.rb 2016-08-05 21:59:21 -04:00
df6acde327 Update payments_controller.rb 2016-08-05 21:57:31 -04:00
0318ffaa10 Update payments_controller.rb 2016-08-05 21:56:23 -04:00
51c1b38197 Update init.rb 2016-08-05 21:45:08 -04:00
d96bd1a3f4 Update init.rb 2016-08-05 21:44:00 -04:00
b6e43b5837 Update payment.rb 2016-08-05 21:41:52 -04:00
62fa98a656 Update payment.rb 2016-08-05 21:39:53 -04:00
bb5a080f25 Update payment.rb 2016-08-05 21:37:20 -04:00
2afa9e4166 Update payment.rb 2016-08-05 21:36:01 -04:00
b489a2771f Update payment.rb 2016-08-05 21:28:56 -04:00
0495ac1bc5 Update payment.rb 2016-08-05 21:26:11 -04:00
e3b49358bb Update payment.rb 2016-08-05 21:25:37 -04:00
08b365e69e Update payment.rb 2016-08-05 21:24:49 -04:00
5d4c49c85d Update payment.rb 2016-08-05 21:23:07 -04:00
5bc9ca34a4 Update payment.rb 2016-08-05 21:20:58 -04:00
630a1d144b Update payment.rb 2016-08-05 21:20:06 -04:00
491684f7df Update payment.rb 2016-08-05 21:18:33 -04:00
9a28247b7f Update payment.rb 2016-08-05 21:17:31 -04:00
5a91e21d45 Update payments_controller.rb 2016-08-05 21:08:05 -04:00
f6f1ca4c04 Update _form.html.erb 2016-08-05 21:01:31 -04:00
8daa10888f Update routes.rb 2016-08-05 21:00:03 -04:00
82449642d3 Update routes.rb 2016-08-05 20:58:55 -04:00
06ad2d6971 Update and rename app/views/payment/new.html.erb to app/views/payments/new.html.erb 2016-08-05 20:58:27 -04:00
4c4ca67be8 Rename app/views/payment/_form.html.erb to app/views/payments/_form.html.erb 2016-08-05 20:58:06 -04:00
b994f7c142 Update and rename payment_controller.rb to payments_controller.rb 2016-08-05 20:57:44 -04:00
97b483031d Update payment.rb 2016-08-05 20:56:04 -04:00
c624c20354 Update payment.rb 2016-08-05 20:53:55 -04:00
695e3bd24c Update payment.rb 2016-08-05 20:43:27 -04:00
ce4883cd4c Update payment_controller.rb 2016-08-05 20:42:25 -04:00
49e19cb73f Create payment.rb 2016-08-05 20:41:52 -04:00
31bb242a61 Update new.html.erb 2016-08-05 20:39:18 -04:00
2e533e8798 Rename app/views/payments/new.html.erb to app/views/payment/new.html.erb 2016-08-05 20:37:47 -04:00
e70d0c8d17 Rename app/views/payments/_form.html.erb to app/views/payment/_form.html.erb 2016-08-05 20:37:31 -04:00
d96ecd2b66 Create new.html.erb 2016-08-05 20:28:35 -04:00
a588ac19a6 Fixed typo 2016-08-05 20:27:25 -04:00
2bc8ec4f56 Added payments 2016-08-05 20:25:34 -04:00
578a5a1228 Create payment_controller.rb 2016-08-05 20:20:05 -04:00
416595ffea Create _form.html.erb 2016-08-05 20:09:49 -04:00
d3be59fbc5 Update _details.html.erb 2016-08-05 09:07:50 -04:00
3c3b4da313 Update _details.html.erb 2016-08-05 09:06:58 -04:00
501834419b Update _details.html.erb 2016-08-05 09:02:46 -04:00
75b25a9e44 Account Balance & Adresses 2016-08-05 09:01:09 -04:00
15912b2197 QueryValidationError: property 'PrimaryPhone' is not queryable 2016-08-05 08:52:33 -04:00
b093f6136e Update customer.rb 2016-08-05 08:49:59 -04:00
33db0a53ba Update customer.rb 2016-08-05 08:46:48 -04:00
7237d2e643 Search Phone Numbers 2016-08-05 08:43:44 -04:00
77b1c1dbef Update vehicle.rb 2016-08-05 00:56:28 -04:00
f3090bd1a4 Update vehicle.rb 2016-08-05 00:54:34 -04:00
89a131018c Update vehicles_controller.rb 2016-08-05 00:47:37 -04:00
de17fb80d1 Update _form.html.erb 2016-08-05 00:45:55 -04:00
a5f1d15156 Update vehicles_controller.rb 2016-08-05 00:45:23 -04:00
d3463ce41b Removed link 2016-08-05 00:39:53 -04:00
4503150b02 Removed hiding of notes 2016-08-05 00:37:29 -04:00
36cd00822e Removed New Vehicle Button 2016-08-05 00:33:14 -04:00
d285344a61 Added customer count 2016-08-05 00:30:00 -04:00
8418dfc0b5 Update vehicles_controller.rb 2016-08-05 00:04:31 -04:00
13 changed files with 206 additions and 35 deletions

View File

@@ -0,0 +1,51 @@
#The MIT License (MIT)
#
#Copyright (c) 2016 rick barrette
#
#Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
#
#The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
class PaymentsController < ApplicationController
unloadable
include AuthHelper
before_filter :require_user
def new
@payment = Payment.new
@customers = Customer.all
@accounts = Qbo.get_base(:account).service.query("SELECT Id, Name FROM Account WHERE AccountType = 'Bank' ")
@payment_methods = Qbo.get_base(:payment_method).service.all
end
def create
@payment = Payment.new(params[:payment])
if @payment.save
flash[:notice] = "Payment Saved"
redirect_to Customer.find_by_id(@payment.customer_id)
else
flash[:error] = @payment.errors.full_messages.to_sentence
redirect_to new_customer_path
end
end
private
def only_one_non_zero?( array )
found_non_zero = false
array.each do |val|
if val!=0
return false if found_non_zero
found_non_zero = true
end
end
found_non_zero
end
end

View File

@@ -38,9 +38,7 @@ class VehiclesController < ApplicationController
def new
@vehicle = Vehicle.new
@customers = Customer.all.order(:name)
if params[:customer]
@customer = Customer.find_by_id(params[:customer])
end
@customer = params[:customer_id] if params[:customer_id]
end
# create a new vehicle

View File

@@ -142,7 +142,18 @@ class Customer < ActiveRecord::Base
# Searchs the database for a customer by name
def self.search(search)
where("name LIKE ?", "%#{search}%").order(:name)
customers = where("name LIKE ?", "%#{search}%")
#if customers.empty?
# service = Qbo.get_base(:customer).service
# results = service.query("Select Id From Customer Where PrimaryPhone LIKE '%#{search}%' AND Mobile LIKE '%#{search}%'")
# results.each do |customer|
# customers << Customer.find_by_id(customer.id)
# end
#end
return customers.order(:name)
end
# proforms a bruteforce sync operation

37
app/models/payment.rb Normal file
View File

@@ -0,0 +1,37 @@
#The MIT License (MIT)
#
#Copyright (c) 2016 rick barrette
#
#Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
#
#The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
class Payment
unloadable
include ActiveModel::Model
attr_accessor :errors, :customer_id, :account_id, :payment_method_id, :total_amount
validates_presence_of :customer_id, :account_id, :payment_method_id, :total_amount
validates :total_amount, numericality: true
def save
payment = Quickbooks::Model::Payment.new
payment.customer_id = @customer_id.to_i
payment.deposit_to_account_id = @account_id.to_i
payment.payment_method_id = @payment_method_id.to_i
payment.total = @total_amount
Qbo.get_base(:payment).service.update(payment)
end
def save!
save
end
# Dummy stub to make validtions happy.
def update_attribute
end
end

View File

@@ -72,7 +72,7 @@ class Vehicle < ActiveRecord::Base
# Force Upper Case for VIN numbers
def vin=(val)
# The to_s is in case you get nil/non-string
write_attribute(:vin, val.to_s.upcase)
write_attribute(:vin, val.to_s.scan(/^[A-Za-z0-9]+$/).join.upcase)
end
# search for a vin

View File

@@ -12,17 +12,22 @@
<tr>
<th>Primary Phone</th>
<td><%= customer.primary_phone %></td>
<td><%= number_to_phone(customer.primary_phone.gsub(/[^\d]/, '').to_i, area_code: true) if customer.primary_phone %></td>
</tr>
<tr>
<th>Mobile Phone</th>
<td><%= customer.mobile_phone %></td>
<td><%= number_to_phone(customer.mobile_phone.gsub(/[^\d]/, '').to_i, area_code: true) if customer.mobile_phone %></td>
</tr>
<tr>
<th>Notes</th>
<td><%= customer.notes %></td>
<tr>
<th>Bill Address</th>
<td><%= customer.billing_address %></td>
</tr>
<tr>
<th>Shipping Address</th>
<td><%= customer.shipping_address %></td>
</tr>
<tr>
@@ -30,6 +35,21 @@
<td><%= customer.issues.count %></td>
</tr>
<tr>
<th>Account Balance</th>
<td>$<%= customer.balance %></td>
</tr>
<tr>
<th>Balance With Jobs</th>
<td>$<%= customer.balance_with_jobs %></td>
</tr>
<tr>
<th>Notes</th>
<td><%= customer.notes %></td>
</tr>
<tr>
<td>
<%= button_to "Edit Customer", edit_customer_path(customer), method: :get%>

View File

@@ -3,19 +3,17 @@
<%= form_tag(customers_path, :method => "get", id: "search-form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Customers" %>
<%= submit_tag "Search" %>
<%= button_to "New Customer", new_customer_path, method: :get %>
<% end %>
<br/>
<% if @customers.present? %>
<br/>
<% @customers.each do |c| %>
<div class="row">
<div class="span6 columns">
<%= link_to c, customer_path(c.id) %>
<br/>
<% @customers.each do |c| %>
<div class="row">
<div class="span6 columns">
<%= link_to c, customer_path(c.id) %>
</div>
</div>
</div>
<% end %>
<% end %>
<div class="actions">
<%= will_paginate @customers %>
@@ -26,5 +24,5 @@
<% end %>
<div>
<b>Last Sync: </b> <%= Qbo.last_sync %>
<%= Customer.count %> Customers - <b>Last Sync: </b> <%= Qbo.last_sync %>
</div>

View File

@@ -0,0 +1,42 @@
<div class="row">
<div class="span6 columns">
<fieldset>
<%= form_for @payment do |f| %>
<div class="clearfix">
Customer:
<div class="input">
<%= f.collection_select :customer_id, @customers, :id, :name, include_blank: true, :selected => @customer, :required => true%>
</div>
</div>
<div class="clearfix">
Deposit to Account:
<div class="input">
<%= f.collection_select :account_id, @accounts, :id, :name, include_blank: true, :selected => @account, :required => true%>
</div>
</div>
<div class="clearfix">
Payment Method:
<div class="input">
<%= f.collection_select :payment_method_id, @payment_methods, :id, :name, include_blank: true, :selected => @payment_method, :required => true%>
</div>
</div>
<div class="clearfix">
Amount:
<div class="input">
<%= f.number_field :total_amount %>
</div>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
</fieldset>
</div>
</div>

View File

@@ -0,0 +1,3 @@
<h1>New Payment</h1>
<br/>
<%= render :partial => 'payments/form' %>

View File

@@ -6,7 +6,7 @@
<div class="clearfix">
Customer:
<div class="input">
<%= f.collection_select :customer_id, @customers, :id, :name, include_blank: true, :selected => params[:customer_id], :required => true%>
<%= f.collection_select :customer_id, @customers, :id, :name, include_blank: true, :selected => @customer, :required => true%>
</div>
</div>
@@ -41,18 +41,14 @@
<div class="clearfix">
Notes:
<div class="input">
<p>
<%= link_to_function content_tag(:span, l(:button_edit), :class => 'icon icon-edit'), '$(this).hide(); $("#issue_description_and_toolbar").show()' unless @vehicle.new_record? %>
<p>
<%= content_tag 'span', :id => "issue_description_and_toolbar", :style => (@vehicle.new_record? ? nil : 'display:none') do %>
<%= f.text_area :notes,
<%= f.text_area :notes,
:cols => 60,
:rows => 10,
:accesskey => accesskey(:edit),
:class => 'wiki-edit',
:no_label => true %>
<% end %>
</p>
<%= wikitoolbar_for 'issue_description' %>
</div>
</div>

View File

@@ -2,9 +2,8 @@
<br/>
<%= form_tag(vehicles_path, :method => "get", id: "search-form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Vehicles by VIN" %>
<%= submit_tag "Search" %>
<%= button_to "New Vehicle", new_vehicle_path, method: :get %>
<%= text_field_tag :search, params[:search], placeholder: "Search Vehicles by VIN" %>
<%= submit_tag "Search" %>
<% end %>
<%= render :partial => 'vehicles/list' %>

View File

@@ -8,23 +8,35 @@
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# Plugin's routes
# See: http://guides.rubyonrails.org/routing.html
#
# Main Quickbooks landing page
get 'qbo', :to=> 'qbo#index'
#authentication
get 'qbo/authenticate', :to => 'qbo#authenticate'
get 'qbo/oauth_callback', :to => 'qbo#oauth_callback'
#manual sync
get 'qbo/sync', :to => 'qbo#sync'
# Estimate & Invoice PDF
get 'qbo/estimate/:id', :to => 'estimate#show', as: :estimate
get 'qbo/invoice/:id', :to => 'invoice#show', as: :invoice
#payments
#get 'qbo/payments', :to => 'payments#new'
#post 'qbo/payments', :to => 'payments#create'
resources :payments
#webhook
post 'qbo/webhook', :to => 'qbo#qbo_webhook'
#ajax
get "update_vehicles" => 'vehicles#update_vehicles', as: 'update_vehicles'
# Nest Vehicles under customers
resources :customers do
resources :vehicles
end
#allow for just vehicles too
resources :vehicles

View File

@@ -25,7 +25,7 @@ Redmine::Plugin.register :redmine_qbo do
name 'Redmine Quickbooks Online plugin'
author 'Rick Barrette'
description 'This is a plugin for Redmine to intergrate with Quickbooks Online to allow for seamless intergration CRM and invoicing of completed issues'
version '0.2.0'
version '0.3.0'
url 'https://github.com/rickbarrette/redmine_qbo'
author_url 'http://rickbarrette.org'
settings :default => {'empty' => true}, :partial => 'qbo/settings'
@@ -51,7 +51,11 @@ Redmine::Plugin.register :redmine_qbo do
menu :top_menu, :vehicles, { :controller => :vehicles, :action => :index }, :caption => 'Vehicles', :if => Proc.new { User.current.logged? }
menu :application_menu, :new_customer, { :controller => :customers, :action => :new }, :caption => 'New Customer', :if => Proc.new { User.current.logged? }
menu :application_menu, :new_payment, { :controller => :payments, :action => :new }, :caption => 'New Payment', :if => Proc.new { User.current.logged? }
permission :customers, { :customers => [:index, :new] }, :public => false
menu :project_menu, :customers, { :controller => 'customers', :action => 'new' }, :caption => 'New Customer', :after => :activity, :param => :project_id
menu :project_menu, :customers, { :controller => 'customers', :action => 'new' }, :caption => 'New Customer', :after => :new_issue, :param => :project_id
permission :payments, { :payments => [:index, :new] }, :public => false
menu :project_menu, :payments, { :controller => 'payments', :action => 'new' }, :caption => 'New Payment', :after => :customers, :param => :project_id
end