Created
October 10, 2008 22:23
-
-
Save danahern/16168 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'net/http' | |
require 'uri' | |
require 'hpricot' | |
module PhoneSystem | |
class Phone | |
attr_accessor :action, :destination_number, :upbid, :published_number | |
attr_accessor :local_to_number, :unassigned_type, :allowed_delayed_provisions, :toll_free_if_no_match, :local_assignment_order, :local_require_rc_match | |
attr_accessor :local_require_npa_match, :local_distance_match, :max_numbers, :extension, :name, :allow_delayed_provisioning, :start_date, :end_date, :suspended | |
attr_accessor :new_number_date, :new_number, :toll_free_if_no_match, :permitted_area_codes, :prohibitied_area_codes, :prohibitied_numbers, :verify_company_name | |
attr_accessor :min_miles_verify, :min_miles_prohibit, :days_outbound_is_sticky, :record_calls, :email, :send_email, :caller_audio, :destination_audio | |
attr_accessor :var1, :var2, :var3, :var4, :var5, :var6, :var7, :var8, :var9, :var10, :ring_timeout_1, :phone_2, :ring_timeout2, :phone3, :cost_per_call | |
attr_accessor :cost_per_call_field, :request_number, :filter_field, :filter_value, :days_since_deleted | |
def initialize(attrs = {}) | |
attrs.each do |key, value| | |
__send__("#{key}=", value) | |
end | |
end | |
def destination_number=(value) | |
@destination_number = "1"+value.scan(/\d{3}-\d{3}-\d{4}/).first.gsub("-",'') | |
end | |
def phone2=(value) | |
@phone2 = "1"+value.scan(/\d{3}-\d{3}-\d{4}/).first.gsub("-",'') | |
end | |
def extension=(value) | |
phone = value.split(/\d{3}-\d{3}-\d{4}/) | |
if phone.size > 1 | |
unless phone.last.gsub(/-x/,'').blank? | |
return @extension = ","+phone.last.gsub(/[-|x]/,'') | |
end | |
end | |
@extension = nil | |
end | |
end | |
class Generator | |
class << self | |
def generate_request(phone_system) | |
xml = Builder::XmlMarkup.new() | |
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8" | |
xml.PhoneBuilder do | |
xml.login("ctpartner") | |
xml.password("ctpartner") | |
xml.action("request") | |
xml.DestinationNumber(phone_system.destination_number) | |
xml.Extension(phone_system.extension) | |
xml.Name(phone_system.name) | |
xml.RecordCalls("1") | |
xml.CallerAudio("") | |
xml.DestinationAudio("") | |
xml.var1(phone_system.var1) | |
xml.var2(phone_system.var2) | |
xml.RingTimeout1(phone_system.ring_timeout_1) | |
xml.Phone2(phone_system.phone_2) | |
# xml.LocalToNumber("17038600000") | |
# xml.UnassignedType("Trak Auto Listing") | |
# xml.AllowDelayedProvisioning("Trak Auto Listing") | |
# xml.StartDate("Trak Auto Listing") | |
# xml.NewNumberDate("Trak Auto Listing") | |
# xml.NewNumber("Trak Auto Listing") | |
# xml.EndDate("Trak Auto Listing") | |
# xml.suspended("Trak Auto Listing") | |
# xml.TollFreeIfNoMatch("Trak Auto Listing") | |
# xml.LocalAssignmentOrder("Trak Auto Listing") | |
# xml.LocalRequireRCMatch("Trak Auto Listing") | |
# xml.LocalRequireNPAMatch("Trak Auto Listing") | |
# xml.LocalDistanceMatch("Trak Auto Listing") | |
# xml.PermittedAreaCodes("Trak Auto Listing") | |
# xml.ProhibitiedAreaCodes("Trak Auto Listing") | |
# xml.ProhibitedNumbers("Trak Auto Listing") | |
# xml.VerifyCompanyName("Trak Auto Listing") | |
# xml.MinMilesVerify("Trak Auto Listing") | |
# xml.MinMilesProhibit("Trak Auto Listing") | |
# xml.DaysOutboundIsSticky("Trak Auto Listing") | |
# xml.AllowDelayedProvisioning("Trak Auto Listing") | |
# xml.Email("Trak Auto Listing") | |
# xml.SendEmail("Trak Auto Listing") | |
# xml.var3("Parts and Services") | |
# xml.var4("Trak Auto") | |
# xml.var5("Vienna Trak Auto") | |
# xml.var6("Parts department") | |
# xml.var7("") | |
# xml.var8("") | |
# xml.var9("") | |
# xml.var10("") | |
# xml.RingTimeout2("") | |
# xml.Phone3("") | |
# xml.Balance("5.00") | |
# xml.CostPerCall("Trak Auto Listing") | |
# xml.CostPerCallField("Trak Auto Listing") | |
# xml.DaysOutboundIsSticky("Trak Auto Listing") | |
# xml.RequestNumber("Trak Auto Listing") | |
end | |
end | |
def generate_inventory(phone_system) | |
xml = Builder::XmlMarkup.new() | |
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8" | |
xml.PhoneBuilder do | |
xml.login("ctpartner") | |
xml.password("ctpartner") | |
xml.action("inventory") | |
xml.DestinationNumber(phone_system.destination_number) | |
# xml.LocalToNumber("17038600000") | |
# xml.UnassignedType("local") | |
# xml.TollFreeIfNoMatch("0") | |
# xml.LocalRequireNPAMatch("1") | |
# xml.LocalAssignmentOrder("rc npa dist") | |
# xml.AllowDelayedProvisioning("1") | |
end | |
end | |
def generate_getfulfilled(phone_system, field, value) | |
xml = Builder::XmlMarkup.new() | |
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8" | |
xml.PhoneBuilder do | |
xml.login("ctpartner") | |
xml.password("ctpartner") | |
xml.action("getfulfilled") | |
xml.UPBID(phone_system.upbid) | |
xml.FilterField(field) unless field.blank? | |
xml.FilterValue(value) unless value.blank? | |
end | |
end | |
def generate_updatefulfilled(phone_system) | |
xml = Builder::XmlMarkup.new() | |
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8" | |
xml.PhoneBuilder do | |
xml.login("ctpartner") | |
xml.password("ctpartner") | |
xml.action("updatefulfilled") | |
xml.UPBID(phone_system.upbid) | |
xml.PublishedNumber(phone_system.published_number) | |
xml.DestinationNumber(phone_system.destination_number) | |
xml.Name(phone_system.name) | |
xml.Extension(phone_system.extension) | |
xml.var1(phone_system.var1) | |
xml.var2(phone_system.var2) | |
xml.RingTimeout1(phone_system.ring_timeout_1) | |
xml.Phone2(phone_system.phone_2) | |
#xml.RingTimeout2("") | |
# xml.var3("") | |
# xml.var4("") | |
# xml.var5("") | |
# xml.var6("") | |
# xml.var7("") | |
# xml.var8("") | |
# xml.var9("") | |
# xml.var10("") | |
# xml.Phone3("") | |
# xml.BalanceIncrement("") | |
end | |
end | |
def generate_deletefulfilled(phone_system) | |
xml = Builder::XmlMarkup.new() | |
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8" | |
xml.PhoneBuilder do | |
xml.login("ctpartner") | |
xml.password("ctpartner") | |
xml.action("deletefulfilled") | |
xml.PublishedNumber(phone_system.published_number) unless phone_system.published_number.blank? | |
xml.DestinationNumber(phone_system.destination_number) unless phone_system.destination_number.blank? | |
xml.UPBID(phone_system.upbid) unless phone_system.upbid.blank? | |
end | |
end | |
def generate_getdeleted(phone_system) | |
xml = Builder::XmlMarkup.new() | |
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8" | |
xml.PhoneBuilder do | |
xml.login("ctpartner") | |
xml.password("ctpartner") | |
xml.action("getdeleted") | |
xml.UPBID(phone_system.upbid) unless phone_system.upbid.blank? | |
#xml.FilterField() | |
#xml.FilterValue() | |
#xml.dayssincedeleted("") | |
end | |
end | |
def generate_undeletedeleted(phone_system) | |
xml = Builder::XmlMarkup.new() | |
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8" | |
xml.PhoneBuilder do | |
xml.login("ctpartner") | |
xml.password("ctpartner") | |
xml.action("deletefulfilled") | |
xml.PublishedNumber(phone_system.published_number) | |
xml.DestinationNumber(phone_system.destination_number) | |
end | |
end | |
end | |
end | |
def gather_information(type, objects = {}) | |
url = URI.parse('http://as00.estara.com/webcare/phonebuilder/xml.php') | |
server = Net::HTTP.new(url.host, url.port) | |
data = case type | |
when "request" | |
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone, :extension => objects[:dealership].phone, | |
:name => objects[:dealership].companyname, :var1 => objects[:dealership].id, :var2 => "motors", :ring_timeout_1 => "10", :phone_2 => objects[:dealership].phone2) | |
Generator.generate_request(phone_system) | |
when "inventory" | |
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone) | |
Generator.generate_inventory(phone_system) | |
when "getfulfilled" | |
phone_system = PhoneSystem::Phone.new(:upbid => objects[:dealership].upbid, | |
:filter_field => objects[:phone][:filter_field], :filter_value => objects[:phone][:filter_value]) | |
Generator.generate_getfulfilled(phone_system) | |
when "updatefulfilled" | |
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone, :extension => objects[:dealership].phone, | |
:published_number => objects[:dealership].estara_phone, :upbid => objects[:dealership].upbid, | |
:name => objects[:dealership].companyname, :var1 => objects[:dealership].id, :var2 => "motors", :ring_timeout_1 => "10", :phone_2 => objects[:dealership].phone2) | |
Generator.generate_updatefulfilled(phone_system) | |
when "deletefulfilled" | |
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone, | |
:published_number => objects[:dealership].estara_phone, :upbid => objects[:dealership].upbid) | |
Generator.generate_deletefulfilled(phone_system) | |
when "getdeleted" | |
phone_system = PhoneSystem::Phone.new(:upbid => objects[:dealership].upbid) | |
Generator.generate_getdeleted(phone_system) | |
when "undeletedeleted" | |
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone, :published_number => objects[:dealership].estara_phone) | |
Generator.generate_undeletedeleted(phone_system) | |
end | |
response = server.post(url.path, data) | |
doc = Hpricot.XML(response.body) | |
case type | |
when "inventory" | |
use_inventory(doc) | |
when "getfulfilled" | |
use_getfulfilled(doc) | |
when "updatefulfilled" | |
use_updatefulfilled(doc, objects[:dealership]) | |
when "request" | |
use_request(doc, objects[:dealership]) | |
when "deletefulfilled" | |
use_deletefulfilled(doc, objects[:dealership]) | |
when "getdeleted" | |
use_getdeleted(doc) | |
when "undeletedeleted" | |
use_undeletedeleted(doc) | |
end | |
end | |
def use_request(doc, dealership) | |
if doc.at("status")['code'] == "0" | |
dealership.estara_phone = doc.at("status").inner_html | |
dealership.upbid = doc.at("UPBID").inner_html | |
dealership.save | |
end | |
end | |
def use_inventory(doc) | |
#Don't know what we'll use this for | |
end | |
def use_getfulfilled(doc) | |
#Don't know what we'll use this for | |
end | |
def use_updatefulfilled(doc, dealership) | |
if doc.at("status")['code'] == "0" | |
dealership.estara_phone = doc.at("status").inner_html | |
dealership.upbid = doc.at("UPBID").inner_html | |
dealership.save | |
end | |
end | |
def use_deletefulfilled(doc, dealership) | |
if doc.at("status")['code'] == "0" | |
dealership.estara_phone = nil | |
dealership.upbid = nil | |
dealership.save | |
end | |
end | |
def use_getdeleted(doc) | |
#Don't know what we'll use this for | |
end | |
def use_undeletedeleted(doc) | |
#Don't know what we'll use this for | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment