Merge branch 'vehicles' of github.com:rickbarrette/redmine_qbo into vehicles

This commit is contained in:
2016-04-28 08:57:40 -04:00
4 changed files with 114 additions and 25 deletions

View File

@@ -10,26 +10,67 @@
class QboCustomer < ActiveRecord::Base class QboCustomer < ActiveRecord::Base
unloadable unloadable
has_many :issues has_many :issues
has_many :qbo_purchases has_many :qbo_purchases
has_many :vehicles has_many :vehicles
attr_accessible :name attr_accessible :name
validates_presence_of :id, :name validates_presence_of :id, :name
self.primary_key = "id" after_initialize :get_details
self.primary_key = :id
# returns true if the customer is active
def active?
@details.active? if @details
end
# returns a human readable string
def to_s def to_s
name name
end end
# returns the customer's email
def email
@details.primary_email_address if @details
end
# returns the customer's primary phone
def primary_phone
@details.primary_phone if @details
end
# returns the customer's mobile phone
def mobile_phone
@detail.mobile_phone if @details
end
# returns the customer's notes
def notes
@details.notes if @details
end
# updates the customer's notes in QBO
def notes (s)
customer = get_customer(self.id)
customer.notes = s
get_base.update(customer)
end
# returns the bases QBO service for customers
def get_base def get_base
Qbo.get_base(:customer) Qbo.get_base(:customer)
end end
# returns the QBO customer
def get_customer (id) def get_customer (id)
get_base.service.find_by_id(id) get_base.service.find_by_id(id)
end end
# proforms a bruteforce sync operation
# This needs to be simplified
def update_all def update_all
customers = get_base.service.all customers = get_base.service.all
@@ -37,13 +78,33 @@ class QboCustomer < ActiveRecord::Base
# Update the customer table # Update the customer table
customers.each { |customer| customers.each { |customer|
qbo_customer = QboCustomer.find_or_create_by(id: customer.id) qbo_customer = QboCustomer.find_or_create_by(id: customer.id)
# only update if diffrent
if not qbo_customer.name == customer.display_name
qbo_customer.name = customer.display_name qbo_customer.name = customer.display_name
qbo_customer.id = customer.id qbo_customer.id = customer.id
qbo_customer.save! qbo_customer.save!
end
} }
end end
# remove deleted customers # remove deleted customers
where.not(customers.map(&:id)).destroy_all where.not(customers.map(&:id)).destroy_all
end end
private
# init details
def get_details
if self.id
@details = get_customer(self.id)
update
end
end
# update's the customers name
def update
self.name = @details.display_name
self.save
end
end end

View File

@@ -19,14 +19,17 @@ class Vehicle < ActiveRecord::Base
before_validation :decode_vin before_validation :decode_vin
after_initialize :get_details after_initialize :get_details
# returns a human readable string
def to_s def to_s
return "#{self.year} #{self.make} #{self.model}" return "#{self.year} #{self.make} #{self.model}"
end end
# returns the raw JSON details from EMUNDS
def details def details
return @details return @details
end end
# returns the style of the vehicle
def style def style
begin begin
return @details['years'][0]['styles'][0]['name'] if @details return @details['years'][0]['styles'][0]['name'] if @details
@@ -35,27 +38,32 @@ class Vehicle < ActiveRecord::Base
end end
end end
# returns the drive of the vehicle i.e. 2 wheel, 4 wheel, ect.
def drive def drive
return @details['drivenWheels'] if @details return @details['drivenWheels'] if @details
end end
# returns the number of doors of the vehicle
def doors def doors
@details['numOfDoors'] if @details return @details['numOfDoors'] if @details
end end
private private
# init method to pull JSON details from Edmunds
def get_details def get_details
if self.vin? if self.vin?
@details = JSON.parse get_decoder.full(self.vin) @details = JSON.parse get_decoder.full(self.vin)
end end
end end
# returns the Edmunds decoder service
def get_decoder def get_decoder
#TODO API Code via Settings #TODO API Code via Settings
return decoder = Edmunds::Vin.new('2dheutzvhxs28dzukx5tgu47') return decoder = Edmunds::Vin.new('2dheutzvhxs28dzukx5tgu47')
end end
# decodes a vin and updates self
def decode_vin def decode_vin
get_details get_details
if self.vin? if self.vin?

View File

@@ -1,16 +1,36 @@
<div style="width: 100%; display: table;"> <table>
<div style="display: table-row"> <tbody>
<div style="width: 600px; display: table-cell;"> <tr>
<th>Customer</th>
<td><%= @customer.name %></td>
</tr>
<strong> <tr>
<%= @customer%> <th>Email</th>
</strong> <td><%= @customer.email %></td>
</tr>
</div> <tr>
</div> <th>Primary Phone</th>
<td><%= @customer.primary_phone %></td>
</tr>
<div style="display: table-cell;"> <tr>
<%= button_to "Edit", edit_customer_path(@customer), method: :get%> <th>Mobile Phone</th>
</div> <td><%= @customer.mobile_phone %></td>
</tr>
</div> <tr>
<th>Notes</th>
<td><%= @customer.notes %></td>
</tr>
<tr>
<td/>
<td>
<%= button_to "Edit", edit_vehicle_path(@customer), method: :get%>
<%= button_to "Delete", @customer, method: :delete, data: {confirm: "You sure?"} %>
</td>
</tr>
</tbody>
</table>

View File

@@ -1,5 +1,5 @@
<h1>Customer Detail</h1> <h1>Customer Detail</h1>
<br/> <br/>
<%= render :partial => 'customers/detail' %> <%= render :partial => 'customers/details' %>
<br/> <br/>
<%= render :partial => 'vehicles/list' %> <%= render :partial => 'vehicles/list' %>