diff --git a/app/models/qbo_customer.rb b/app/models/qbo_customer.rb index e73cba6..0decd05 100644 --- a/app/models/qbo_customer.rb +++ b/app/models/qbo_customer.rb @@ -10,26 +10,67 @@ class QboCustomer < ActiveRecord::Base unloadable + has_many :issues has_many :qbo_purchases has_many :vehicles + attr_accessible :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 name end - def get_base + # 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 Qbo.get_base(:customer) end - + + # returns the QBO customer def get_customer (id) get_base.service.find_by_id(id) end + # proforms a bruteforce sync operation + # This needs to be simplified def update_all customers = get_base.service.all @@ -37,13 +78,33 @@ class QboCustomer < ActiveRecord::Base # Update the customer table customers.each { |customer| qbo_customer = QboCustomer.find_or_create_by(id: customer.id) - qbo_customer.name = customer.display_name - qbo_customer.id = customer.id - qbo_customer.save! + # only update if diffrent + if not qbo_customer.name == customer.display_name + qbo_customer.name = customer.display_name + qbo_customer.id = customer.id + qbo_customer.save! + end } end - #remove deleted customers + # remove deleted customers where.not(customers.map(&:id)).destroy_all 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 diff --git a/app/models/vehicle.rb b/app/models/vehicle.rb index 2d55e86..773e239 100644 --- a/app/models/vehicle.rb +++ b/app/models/vehicle.rb @@ -19,14 +19,17 @@ class Vehicle < ActiveRecord::Base before_validation :decode_vin after_initialize :get_details + # returns a human readable string def to_s return "#{self.year} #{self.make} #{self.model}" end + # returns the raw JSON details from EMUNDS def details return @details end + # returns the style of the vehicle def style begin return @details['years'][0]['styles'][0]['name'] if @details @@ -35,27 +38,32 @@ class Vehicle < ActiveRecord::Base end end + # returns the drive of the vehicle i.e. 2 wheel, 4 wheel, ect. def drive return @details['drivenWheels'] if @details end + # returns the number of doors of the vehicle def doors - @details['numOfDoors'] if @details + return @details['numOfDoors'] if @details end private + # init method to pull JSON details from Edmunds def get_details if self.vin? @details = JSON.parse get_decoder.full(self.vin) end end + # returns the Edmunds decoder service def get_decoder #TODO API Code via Settings return decoder = Edmunds::Vin.new('2dheutzvhxs28dzukx5tgu47') end + # decodes a vin and updates self def decode_vin get_details if self.vin? diff --git a/app/views/customers/_details.html.erb b/app/views/customers/_details.html.erb index eae7f0a..c855953 100644 --- a/app/views/customers/_details.html.erb +++ b/app/views/customers/_details.html.erb @@ -1,16 +1,36 @@ -
-
-
- - - <%= @customer%> - - -
-
- -
- <%= button_to "Edit", edit_customer_path(@customer), method: :get%> -
- -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Customer<%= @customer.name %>
Email<%= @customer.email %>
Primary Phone<%= @customer.primary_phone %>
Mobile Phone<%= @customer.mobile_phone %>
Notes<%= @customer.notes %>
+ + <%= button_to "Edit", edit_vehicle_path(@customer), method: :get%> + <%= button_to "Delete", @customer, method: :delete, data: {confirm: "You sure?"} %> +
diff --git a/app/views/customers/show.html.erb b/app/views/customers/show.html.erb index 68b8806..9a27d63 100644 --- a/app/views/customers/show.html.erb +++ b/app/views/customers/show.html.erb @@ -1,5 +1,5 @@

Customer Detail


-<%= render :partial => 'customers/detail' %> +<%= render :partial => 'customers/details' %>
<%= render :partial => 'vehicles/list' %>