vtiger 0.7.8 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/ruby
2
+ usage=<<EOF_USAGE
3
+
4
+ # == Synopsis
5
+ # read a csv file and update leads in a crm system - this is specific example but you can modify as you see fit
6
+ # == Usage
7
+ # update_lead.rb -u democrm.estormtech.com -c test -e Contacts -n scott -k xxxxx -f csvfile
8
+ # csv file needs to be in the format (including headers) with destination, template, asmanyparameters as needed separated by commas
9
+ # == Author
10
+ # Scott Sproule --- Ficonab.com (scott.sproule@ficonab.com)
11
+ # == Example
12
+ # update_lead.rb -u xxxx -p yyyy -f yyy.csv
13
+ # == Copyright
14
+ # Copyright (c) 2011 Ficonab Pte. Ltd.
15
+ # See license for license details
16
+ EOF_USAGE
17
+ require 'yaml'
18
+ require 'rubygems'
19
+ require 'uri'
20
+ gem 'ficonabses'
21
+ gem 'fastercsv'
22
+ gem 'vtiger'
23
+ require 'vtiger'
24
+ require 'fastercsv'
25
+ require 'ficonabses'
26
+ require 'optparse'
27
+ #require 'java' if RUBY_PLATFORM =~ /java/
28
+ # start the processing
29
+ def process_row(vtiger,row,newgroup)
30
+ #puts "row destination: #{row['destination']} template: #{row['template']} campaign: #{row['campaign']} campaign flag: #{flag}"
31
+
32
+ # puts "row is #{row.inspect}"
33
+ if row!=nil then
34
+ result=true
35
+ result, id=vtiger.query_element_by_email(row['email'],'Leads')
36
+ row['phone']=row['telephone']
37
+ if result then #UPDATE SINCE IT EXISTS
38
+ values={}
39
+ values=vtiger.retrieve_object(id)
40
+
41
+ if values['cf_632']==nil or values['cf_632']=='' then
42
+ values['cf_632']=newgroup.to_s
43
+ else
44
+ values['cf_632']="#{values['cf_632']} |##| #{newgroup.to_s}" if !values['cf_632'].include? newgroup.to_s #NOTE multi slect separator
45
+ end
46
+ puts "found #{id} for #{row['email']} new group is #{values['cf_632']}"
47
+ # grup is cf_632
48
+ row['id']=id
49
+ values['id']=id
50
+ values = row.merge values #NOTE values will override the row where these is existing data
51
+ values['mobile']=row['cf_643']
52
+ values['lane']=row['cf_631']
53
+ values['phone']=row['cf_646']
54
+ values['fax']=row['cf_645']
55
+ row.each { |k,v| values[k]=v if values[k]==''}
56
+ values.each { |k,v| values[k]="" if v==nil} #remove nils
57
+ values.delete(nil)
58
+
59
+ @oldcount=@oldcount+1
60
+
61
+ result=vtiger.updateobject(values)
62
+ if result['success']!=true then
63
+ newvalues=values.clone
64
+ result, id=vtiger.query_element_by_email(row['email'],'Leads')
65
+ newvalues['id']=id
66
+ puts "FAILED UPDATE try again"
67
+ result=vtiger.updateobject(newvalues)
68
+ @failed << row if result['success']!=true
69
+ end
70
+ puts "result: #{result} values were #{values.inspect}"
71
+ puts "UPDATE=================END UPDATE"
72
+ else #CREATE SINCE NOT IN SYSTEM
73
+ puts "in else statement -Just add the lead"
74
+ #SET THE GROUP HERE
75
+ @newcount=@newcount+1
76
+ row['cf_632']=newgroup.to_s
77
+ row['mobile']=row['cf_643']
78
+ row['phone']=row['cf_646']
79
+ row['fax']=row['cf_645']
80
+ row['lane']=row['cf_631']
81
+ row['company']=row['email'] if row['company']==nil or row['company']==''
82
+ row['company']=row['lastname'] if row['company']==nil or row['company']==''
83
+ result,id =vtiger.addleademail(row,row['lastname'],row['company'],row['email'],row)
84
+ puts "adding lead #{row['email']} company #{row['company']} with group: #{newgroup}"
85
+ puts "result: #{result} id #{id} values were #{row.inspect}"
86
+ puts "ADD=================END ADD"
87
+ @failed << row if !result
88
+ end
89
+
90
+ end
91
+ result
92
+ end
93
+ def readfile(filename)
94
+ csvfile=File.open(filename,'r')
95
+ rawfile= FasterCSV.parse(csvfile.read, { :headers => true})
96
+ rawfile
97
+ end
98
+ def manage_row(vtiger,row,options)
99
+ begin
100
+ hash={}
101
+ hash=hash.merge row
102
+ res=process_row(vtiger,hash.clone,options[:group])
103
+ puts "COUNT: #{@count} result: #{res} row: #{hash} "
104
+ @count+=1
105
+
106
+ rescue Exception => e
107
+ @errors+=1
108
+ puts "ERROR===Found count: #{@count} error #{e.inspect}"
109
+ end
110
+ end
111
+ arg_hash=Vtiger::Options.parse_options(ARGV)
112
+ Vtiger::Options.show_usage_exit(usage) if arg_hash[:help]==true
113
+
114
+ require 'pp'
115
+ options=arg_hash
116
+ puts "[#{Time.now}] START"
117
+ VTIGERAPIHASH = {
118
+ :username => options[:username],
119
+ :key => options[:key],
120
+ # :username => 'admin',
121
+ # :key => 'ISGRkVGyEYunzQlD',
122
+ :url => options[:url],
123
+ }
124
+ puts "API HASH #{VTIGERAPIHASH.inspect}"
125
+ #Vtiger::Api.api_settings=VTIGERAPIHASH
126
+ @failed=[]
127
+ @count=0
128
+ @errors=0
129
+ vtiger_cmd =Vtiger::Commands.vtiger_factory(VTIGERAPIHASH)
130
+ @newcount=0
131
+ @oldcount=0
132
+ rows=readfile(options[:filename])
133
+ rows.each {|row| manage_row(vtiger_cmd,row,options)
134
+ #puts "row is: #{row}"
135
+
136
+ }
137
+ rows=@failed.clone
138
+ vtiger_cmd =Vtiger::Commands.vtiger_factory(VTIGERAPIHASH)
139
+ @failed=[]
140
+ rows.each {|row|
141
+ puts "processing failed row is: #{row}"
142
+ manage_row(vtiger_cmd,row,options)
143
+ }
144
+
145
+ # puts "response is list is #{list.to_yaml} #{finallist.to_yaml}"
146
+ puts "[#{Time.now}] FINISHED: sending: #{@count} error count #{@errors} new count #{@newcount} oldcount #{@oldcount}"
147
+ puts "Failures count #{@failed.size} are:====== #{@failed.inspect}"
@@ -151,7 +151,7 @@ end
151
151
  return finalres, output
152
152
  end
153
153
  def add_object(object_map,hashv,element)
154
- object_map=object_map.merge hashv
154
+ object_map=hashv.merge object_map # object map overrides
155
155
  # 'tsipid'=>"1234"
156
156
  tmp=self.json_please(object_map)
157
157
  input_array ={'operation'=>'create','elementType'=>"#{element}",'sessionName'=>"#{self.session_name}", 'element'=>tmp} # removed the true
@@ -33,6 +33,11 @@ module Vtiger
33
33
  puts "in addobject"
34
34
  object_map= { 'assigned_user_id'=>"#{self.userid}",'lastname'=>"#{ln}", 'company'=>"#{co}"}
35
35
  add_object(object_map,hashv,'Leads')
36
+ end
37
+ def addleademail(options,ln,co,email,hashv)
38
+ puts "in addobject"
39
+ object_map= { 'assigned_user_id'=>"#{self.userid}",'lastname'=>"#{ln}", 'company'=>"#{co}", 'email'=>"#{email}"}
40
+ add_object(object_map,hashv,'Leads')
36
41
  end
37
42
  def add_account(options,accountname,hashv)
38
43
  puts "in addobject"
@@ -44,6 +49,7 @@ module Vtiger
44
49
  object_map= { 'assigned_user_id'=>"#{self.userid}",'lastname'=>"#{ln}", 'email'=>"#{email}"}
45
50
  add_object(object_map,hashv,'Contacts')
46
51
  end
52
+
47
53
  def find_contact_by_email_or_add(options,ln,email,hashv)
48
54
  success,id = query_element_by_email(email,"Contacts")
49
55
  success,id =add_contact(options,ln,email,hashv) if !success
@@ -46,6 +46,8 @@ module Vtiger
46
46
  puts "objectid #{val}" }
47
47
  opts.on("-q","--query VAL", String) {|val| temp_hash[:query ] = val
48
48
  puts "contact #{val}" }
49
+ opts.on("-g","--group VAL", String) {|val| temp_hash[:group ] = val
50
+ puts "group #{val}" }
49
51
  opts.on("-e","--elementtype VAL", String) {|val| temp_hash[:element_type ] = val
50
52
  puts "elementtype #{val}" }
51
53
  opts.on("-k","--access_key VAL", String) {|val| temp_hash[:key ] = val
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 7
8
7
  - 8
9
- version: 0.7.8
8
+ - 0
9
+ version: 0.8.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Scott Sproule
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-05-05 00:00:00 +08:00
17
+ date: 2012-08-06 00:00:00 +08:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -23,6 +23,7 @@ email: scott.sproule@estormtech.com
23
23
  executables:
24
24
  - add_contact.rb
25
25
  - add_lead.rb
26
+ - update_lead.rb
26
27
  - add_email.rb
27
28
  - describe_object.rb
28
29
  - list_types.rb
@@ -52,6 +53,7 @@ files:
52
53
  - bin/helloworld.rb
53
54
  - bin/list_types.rb
54
55
  - bin/query.rb
56
+ - bin/update_lead.rb
55
57
  - bin/update_stock_inventory.rb
56
58
  - bin/yahoo_csv.rb
57
59
  - History.txt