sf_migrate 1.2.8 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YzAxYzI3YTAyMWJlMzlmNGEwY2M5ZDNhMGVkNjhlYmZiYjFkZmEzYw==
5
- data.tar.gz: !binary |-
6
- ZTk1OTFhZjJhMjlkNDJjY2UwN2MzZjNjYzJiMjhhZGQ1OTk2ZmI3Mw==
2
+ SHA1:
3
+ metadata.gz: 82aec29fedabcbd9db839de6f4f4fc4af4778adf
4
+ data.tar.gz: 517dda0a66207a3462337df126134976fe8cad94
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MzA3N2VlNWE0NDEyMTE0NmViNDM3MTU2NDVjODM3NDA5MTlkYTg5MjM4YzIx
10
- MWViNjUwODE2YjIyYTI1ZTYzNTc1MzJjOTNhZTU2Y2FlOTZjYWZlMzRjODU0
11
- NjU4NDdlMDk0MWM0MzI1ZmZhNzAwNWE5Yjg4ZmE2MjFhN2Y1NWM=
12
- data.tar.gz: !binary |-
13
- MWQ4NDlmMzQzNDA0ODNiYzc2MzQ2MDQwYzgxZTBkOWJhYzAxNjliOGNiMTMx
14
- ZDk2OWU1Njk5ZTJjZTgxYjg0ODVkZTM5YmVkNzFiNTcyM2RkNDcxMWMxNGZj
15
- OWY3NjI2MzUxNjEzZjk3Njk1Y2U5MzFlZjM0NDU3MTI0ZWM2MzQ=
6
+ metadata.gz: 9a2456753dcd1539acd4353fdc435fefb33b28103c4de19b84c7fbeb934beb6b4de95e1f81e3539d691f521f85ced4098c8726e1ce37a48a2d6d6826408ea92b
7
+ data.tar.gz: 0b3b78950a7c826f03d98f55e794b55b745b79e48d1da70462b2e9d82e39f145141a7961e46d57522ef4732784c72a7e12158d253e9230f0185f21c6f6335bfd
@@ -5,13 +5,13 @@ module SalesforceMigration
5
5
  # Initilize migration export object, authenticates to SalesForce and start the export
6
6
  #
7
7
  # @param [Hash] options hash representing passed command line options
8
- def initialize(options)
9
- @csv_dir = options[:csv_dir]
10
- @action = options[:action]
11
- @last_modified_date = options[:last_modified_date]
8
+ def initialize
9
+ @csv_dir = $options[:csv_dir]
10
+ @action = $options[:action]
11
+ @last_modified_date = $options[:last_modified_date]
12
12
  $logger.info("Export action has started!")
13
- @client = Databasedotcom::Client.new :client_id => $credentials['salesforce_consumer_key'], :client_secret => $credentials['salesforce_consumer_secret']
14
- @client.authenticate :username => $credentials['salesforce_username'], :password => $credentials['salesforce_password']
13
+ @client = Databasedotcom::Client.new :client_id => $config['salesforce_consumer_key'], :client_secret => $config['salesforce_consumer_secret']
14
+ @client.authenticate :username => $config['salesforce_username'], :password => $config['salesforce_password']
15
15
  $logger.info("Authentication to SalesForce successfull")
16
16
  start
17
17
  $logger.info("Export action completed successfully!")
@@ -20,7 +20,7 @@ module SalesforceMigration
20
20
  private
21
21
  def start
22
22
  %w(ISOs__c Agent__c Account Acquirer__c Contract Payment_Methods__c Banks__c MerchantToAPM__c ccrmbasic__Email__c Email_Association__c User).each do |type|
23
- $logger.info "Writing CSV for #{type}"
23
+ $logger.info("Writing CSV for #{type}")
24
24
  write_to_csv type
25
25
  end
26
26
  end
@@ -59,11 +59,12 @@ module SalesforceMigration
59
59
  # generate_name('Account') #=> '/tmp/update/2012-07-07/Account_export.csv'
60
60
  def generate_name(type)
61
61
  if @action == 'initial_run'
62
- FileUtils.mkdir_p("#{@csv_dir}/initial/") unless Dir.exists? "#{@csv_dir}/initial/"
63
- "#{@csv_dir}/initial/#{type}_export.csv"
62
+ csv_initial_dir = "#{@csv_dir}/initial/"
63
+ FileUtils.mkdir_p(csv_initial_dir) unless Dir.exists? csv_initial_dir
64
+ "#{csv_initial_dir}/#{type}_export.csv"
64
65
  else
65
66
  today = lambda { Date.today.to_s }
66
- dir = "#{@csv_dir}/update/#{today.call}"
67
+ dir = "#{@csv_dir}/update/#{today.call}"
67
68
  FileUtils.mkdir_p(dir) unless Dir.exists? dir
68
69
  "#{dir}/#{type}_export.csv"
69
70
  end
@@ -101,12 +102,12 @@ module SalesforceMigration
101
102
  # @return [Databasedotcom::Collection] the requested records
102
103
  def get_records(type)
103
104
  if @action == 'initial_run'
104
- $logger.info "Getting all records from SalesForce for #{type} object"
105
+ $logger.info "Getting all records for SalesForce Object: #{type}"
105
106
  else
106
107
  if @last_modified_date.blank?
107
- $logger.info "Getting records for yesterday from SalesForce for #{type} object"
108
+ $logger.info "Getting records since yesterday for SalesForce Object: #{type}"
108
109
  else
109
- $logger.info "Getting records from #{Date.parse(@last_modified_date)} up until now from SalesForce for #{type} object"
110
+ $logger.info "Getting records from #{Date.parse(@last_modified_date)} up until now for SalesForce Object: #{type}"
110
111
  end
111
112
  end
112
113
  get_all_sobjects(type)
@@ -1,16 +1,16 @@
1
1
  module SalesforceMigration
2
2
  class Fields
3
3
  # Salesforce objects and the fields for import
4
- ISOS_FIELDS = %w{Active__c Address__c Adult_Chargeback_Fee__c Adult_Commission__c Adult_Transaction_Fee__c Agreement_Received__c Background_Check_Complete__c Business_Phone_Number__c Cell_Phone_Number__c Comments__c CreatedById CreatedDate Curren__c CurrencyIsoCode Email_Address__c Fax_Number__c Gambling_Chargeback_Fee__c Gambling_Commission_Fee__c Gambling_Transaction_Fee__c General_Conventional_Chargeback_Fee__c General_Conventional_Commission_Fee__c General_Conventional_Transaction_Fee__c General_Non_Conventional_Chargeback_Fee__c General_Non_Conventional_Commission_Fee__c General_Non_Conventional_Transaction_Fee__c ISO_ID_Assigned__c ISO_ID_Number__c ISO_Owner_Name__c Id IsDeleted KYC_Gathered__c LastActivityDate LastModifiedBy LastModifiedById LastModifiedDate Name New_Hire_Package_Received__c Owner OwnerId Pharmacy_Chargeback_Fee__c Pharmacy_Commission_Fee__c Pharmacy_Transaction_Fee__c Projected_Deals_Count__c Recruiter__c Region__c System_Access_Granted__c Training_Completed__c Welcome_Call_Completed__c Welcome_Package_Sent__c eMerchantPay_ISO_ID__c}
5
- AGENT_FIELDS = %w{Id IsDeleted Name LastActivityDate CreatedDate CreatedById LastModifiedDate LastModifiedById LastModifiedBy Owner OwnerId Agent_Billing_Address__c Agent_Cell_Phone__c Agent_Id__c Agent_Phone__c Agent_Skype__c Agreement_Received__c Agreement_Sent__c Background_Check_Complete__c Business_Phone_Number__c Comments__c Commission_Fee__c Email_Address__c eMerchantPay_Agent_ID__c Fee_Comments__c ISO_Company__c New_Hire_Package_Received__c One_Time_Commission_Currency__c Recruiter__c Region__c Split_percentage__c System_Access_Granted__c Title__c Transaction_Fee__c}
6
- ACCOUNT_FIELDS = %w{Additional_Url__c Agents__c AnnualRevenue Approval_Citeria__c Approve_1__c Approve_2__c Approve_3__c BillingCity BillingCountry BillingPostalCode BillingState BillingStreet City__c CreatedById CreatedDate Credit_Card__c CurrencyIsoCode Current_Volume__c Description Descriptor__c FD_Merchant_Number__c Fax ISO_Name__c Id IsDeleted Industry Info_Capture__c Integration__c Integrator__c Integrator_2__c Iovation__c IPSP__c IPSP_Name2__c IsPartner Jigsaw LastModifiedById LastModifiedDate Merchant_Email__c Merchant_Type__c Name NumberOfEmployees Overlying_Company__c OwnerId Phone Projected_Monthly_Volume__c Recruiter__c Risk_Analyst__c Secondary_FD_Merchant_Number__c ShippingCity ShippingCountry ShippingPostalCode ShippingState ShippingStreet Status_Comments__c Status__c Threat_Metrix__c Type__c Url__c VBV_MC3D__c Vacation1__c Website} # OwnerName OwnerPhone OwnerEmail}
7
- PAYMENT_METHODS_FIELDS = %w{Accounts__c Business_Contact__c Business_Type_Coments__c Business_type__c Buy_Rates__c Chargeback_Comments__c Chargeback__c Client_Integration__c Countries2__c Countries__c CreatedById CreatedDate CurrencyIsoCode Id IsDeleted Integration__c LastModifiedBy LastModifiedById LastModifiedDate Name Our_Buy_Rates__c Owner OwnerId Proccessing_Currency__c Processing_Currency__c Rebilling_Comments__c Rebilling__c Refund_Comments__c Refund__c Release_Date__c Settlement_Currency__c Settlement_Cycle__c Settlement__c Tech_Contact__c Type__c V_terminal_Comments__c V_terminal__c}
4
+ ISOS_FIELDS = %w{Active__c Address__c Adult_Chargeback_Fee__c Adult_Commission__c Adult_Transaction_Fee__c Agreement_Received__c Background_Check_Complete__c Business_Phone_Number__c Cell_Phone_Number__c Comments__c CreatedById CreatedDate Curren__c CurrencyIsoCode Email_Address__c Fax_Number__c Gambling_Chargeback_Fee__c Gambling_Commission_Fee__c Gambling_Transaction_Fee__c General_Conventional_Chargeback_Fee__c General_Conventional_Commission_Fee__c General_Conventional_Transaction_Fee__c General_Non_Conventional_Chargeback_Fee__c General_Non_Conventional_Commission_Fee__c General_Non_Conventional_Transaction_Fee__c ISO_ID_Assigned__c ISO_ID_Number__c ISO_Owner_Name__c Id IsDeleted KYC_Gathered__c LastActivityDate LastModifiedById LastModifiedDate Name New_Hire_Package_Received__c OwnerId Pharmacy_Chargeback_Fee__c Pharmacy_Commission_Fee__c Pharmacy_Transaction_Fee__c Projected_Deals_Count__c Recruiter__c Region__c System_Access_Granted__c Training_Completed__c Welcome_Call_Completed__c Welcome_Package_Sent__c eMerchantPay_ISO_ID__c}
5
+ AGENT_FIELDS = %w{Id IsDeleted Name LastActivityDate CreatedDate CreatedById LastModifiedDate LastModifiedById OwnerId Agent_Billing_Address__c Agent_Cell_Phone__c Agent_Id__c Agent_Phone__c Agent_Skype__c Agreement_Received__c Agreement_Sent__c Background_Check_Complete__c Business_Phone_Number__c Comments__c Commission_Fee__c Email_Address__c eMerchantPay_Agent_ID__c Fee_Comments__c ISO_Company__c New_Hire_Package_Received__c One_Time_Commission_Currency__c Recruiter__c Region__c Split_percentage__c System_Access_Granted__c Title__c Transaction_Fee__c}
6
+ ACCOUNT_FIELDS = %w{Additional_Url__c Agents__c AnnualRevenue Approval_Citeria__c Approve_1__c Approve_2__c Approve_3__c BillingCity BillingCountry BillingPostalCode BillingState BillingStreet City__c CreatedById CreatedDate Credit_Card__c CurrencyIsoCode Current_Volume__c Description Descriptor__c FD_Merchant_Number__c Fax ISO_Name__c Id IsDeleted Industry Info_Capture__c Integration__c Integrator__c Integrator_2__c Iovation__c IPSP__c IPSP_Name2__c IsPartner Jigsaw LastModifiedById LastModifiedDate Merchant_Email__c Merchant_Type__c Name NumberOfEmployees Overlying_Company__c OwnerId Phone Projected_Monthly_Volume__c Recruiter__c Risk_Analyst__c Secondary_FD_Merchant_Number__c ShippingCity ShippingCountry ShippingPostalCode ShippingState ShippingStreet Status_Comments__c Status__c Threat_Metrix__c Type__c Url__c VBV_MC3D__c Vacation1__c Website}
7
+ PAYMENT_METHODS_FIELDS = %w{Accounts__c Business_Contact__c Business_Type_Coments__c Business_type__c Buy_Rates__c Chargeback_Comments__c Chargeback__c Client_Integration__c Countries2__c Countries__c CreatedById CreatedDate CurrencyIsoCode Id IsDeleted Integration__c LastModifiedById LastModifiedDate Name Our_Buy_Rates__c OwnerId Proccessing_Currency__c Processing_Currency__c Rebilling_Comments__c Rebilling__c Refund_Comments__c Refund__c Release_Date__c Settlement_Currency__c Settlement_Cycle__c Settlement__c Tech_Contact__c Type__c V_terminal_Comments__c V_terminal__c}
8
8
  BANKS_FIELDS = %w{Account_Number__c BIC_Code__c Merchant_2__c Bank_Address__c Bank_Name__c Contract__c CreatedById CreatedDate CurrencyIsoCode Holder_Address__c IBAN__c Id IsDeleted LastModifiedById LastModifiedDate Name OwnerId Processing_Currency__c Routing_Number__c SWIFT__c Settlement_Currency__c}
9
9
  MERCHANTTOAPM_FIELDS = %w{Merchant__c Payment_Methods__c}
10
10
  CCRMBASIC__EMAIL_FIELDS = %w{Actual_Subject__c Agent__c ccrmbasic__Account__c ccrmbasic__Body__c ccrmbasic__Cc__c ccrmbasic__Direction__c ccrmbasic__From__c ccrmbasic__Internal_Contact__c ccrmbasic__To__c Id IsDeleted Name}
11
11
  EMAIL_ASSOCIATION_FIELDS = %w{Merchant_Name__c Email__c}
12
12
  CONTRACT_FIELDS = %w{Id IsDeleted AccountId CurrencyIsoCode StartDate EndDate BillingStreet BillingCity BillingState BillingPostalCode BillingCountry ContractTerm OwnerId Status StatusCode ContractNumber CreatedDate CreatedById LastModifiedDate LastModifiedById SystemModstamp LastActivityDate Commission_Fee__c Transaction_Fee_Approved__c Transaction_Fee_Declined__c Charge_Back_Fee__c Rolling_Reserve__c Rolling_Reserve_Period__c VBV_Fee__c Wiring_Fee__c PCI_Compliance_Test_Fee__c Billing_Period_Duration_Weekly__c Discover__c Delay_in_Payment_Weeks__c Amex__c Guaranty__c Amount_Number__c Currency__c Treasury_Executive__c Acquirer__c Proccessing_Start_Date__c Proccessing_End_Date__c Acquirer_Approval_Timeframe__c Url__c Date_of_Submission_to_the_Acquirer__c Date_of_Approval__c Refund_Fee__c Registration_Fee__c Integrator_1__c Integrator_2__c Descriptor__c City_Field__c Acquirer_Rejection_Timeframe__c Date_of_Rejection__c Date_of_Issuing_the_MID__c Date_of_Terminal_Setup__c Date_of_Activation__c Deactivation_Date__c Comments__c Threat_Matrix__c Iovation__c Info_Capture__c VBV_MC3D__c PCI_Compliance__c Website_Compliance__c Reason_of_Deactivation__c VISA__c MC__c JCB__c UATP__c Integration_Type__c Payment_Status__c Payment_Suspension_Reason__c IPSP_name__c Visa_MCC_Code__c MC_MCC_Code__c Rejection_Reason__c Type_Of_Agreement__c}
13
- ACQUIRER_FIELDS = %w{Id IsDeleted OwnerId Owner Name CurrencyIsoCode CreatedDate CreatedById LastModifiedDate LastModifiedById LastModifiedBy SystemModstamp LastActivityDate Acquirer_Address__c Acquirer_Country__c SPLIT__c Chargeback_Fee__c One_time_Setup_Fee__c Swift_Wire_Transfer_Fee__c Card_Type__c Card_Scheme__c Currency__c Risk_Level__c Transaction__c Fees_Approved__c Fees_Declined__c Fees_other__c Flat_Commision_Fee__c EUR_Interchange__c Non_EUR_Interchange__c }
13
+ ACQUIRER_FIELDS = %w{Id IsDeleted OwnerId Name CurrencyIsoCode CreatedDate CreatedById LastModifiedDate LastModifiedById SystemModstamp LastActivityDate Acquirer_Address__c Acquirer_Country__c SPLIT__c Chargeback_Fee__c One_time_Setup_Fee__c Swift_Wire_Transfer_Fee__c Card_Type__c Card_Scheme__c Currency__c Risk_Level__c Transaction__c Fees_Approved__c Fees_Declined__c Fees_other__c Flat_Commision_Fee__c EUR_Interchange__c Non_EUR_Interchange__c }
14
14
  SYSTEM_FIELDS = %w{id acquirer ownerid createddate createdbyid integrator ipsp iso lastactivitydate lastmodifieddate lastmodifiedbyid systemmodstamp recruiter region risk_analyst}
15
15
  SYSTEM_READABLE_FIELDS = %w{id acquirer_id owner_id created_date created_by_id integrator_id ipsp_id iso_id last_activity_date last_modified_date last_modified_by_id system_modstamp recruiter_id region_id risk_analyst_id}
16
16
  USER_FIELDS = %w{Id FirstName LastName Phone Email}
@@ -14,9 +14,9 @@ module SalesforceMigration
14
14
  # Initialize migration import object and start the import
15
15
  #
16
16
  # @param [Hash] options hash representing passed command line options
17
- def initialize(options)
18
- @csv_dir = options[:csv_dir]
19
- @action = options[:action]
17
+ def initialize
18
+ @csv_dir = $options[:csv_dir]
19
+ @action = $options[:action]
20
20
  @isos, @agents, @merchants, @bank_accounts, @agent_users, @iso_users, @emails = [], [], [], [], [], [], []
21
21
  @payment_to_merchants, @emails_to_merchants, @acquirers, @contracts, @users = [], [], [], [], []
22
22
  $logger.info("Import action has started!")
@@ -124,11 +124,10 @@ module SalesforceMigration
124
124
 
125
125
  case @action
126
126
  when "initial_run"
127
- filename = "#{@csv_dir}/initial/#{module_name}_export.csv"
127
+ filename = "#{@csv_dir}/initial/#{module_name}_export.csv"
128
128
  when "update"
129
- today = lambda { Date.today.to_s }
130
- dir = "#{@csv_dir}/update/#{today.call}"
131
- filename = "#{dir}/#{module_name}_export.csv"
129
+ today = lambda { Date.today.to_s }
130
+ filename = "#{@csv_dir}/update/#{today.call}/#{module_name}_export.csv"
132
131
  end
133
132
 
134
133
  $logger.error("Could not create or find a csv filename for module #{module_name}") unless defined? filename
@@ -145,7 +144,7 @@ module SalesforceMigration
145
144
  def transform_csv_file(csv_file)
146
145
  $logger.info("Transforming CSV file")
147
146
  transformed = []
148
- headers = csv_file.shift
147
+ headers = csv_file.shift
149
148
  headers.map!(&method(:prepare_custom_headers))
150
149
 
151
150
  csv_file.each do |row|
@@ -167,11 +166,11 @@ module SalesforceMigration
167
166
  #
168
167
  # @return [Array<SugarCRM::Namespace::Object>] records
169
168
  def prefix_sf_attribute_names(records)
170
- field_names_default = SalesforceMigration::Fields::SYSTEM_FIELDS
169
+ field_names_system = SalesforceMigration::Fields::SYSTEM_FIELDS
171
170
  field_names_readable = SalesforceMigration::Fields::SYSTEM_READABLE_FIELDS
172
171
 
173
172
  records.each do |record|
174
- field_names_default.each_with_index do |field, index|
173
+ field_names_system.each_with_index do |field, index|
175
174
  if record.key?(field)
176
175
  record["sf_#{field_names_readable[index].downcase}"] = record[field]
177
176
  record.delete(field)
@@ -235,7 +234,7 @@ module SalesforceMigration
235
234
  $logger.info("Transforming Acquirer fields")
236
235
  records.each do |record|
237
236
  record['currency_iso_code'] = record['currencyisocode']
238
- record['fees_transaction'] = record['transaction']
237
+ record['fees_transaction'] = record['transaction']
239
238
 
240
239
  record.delete 'currencyisocode'
241
240
  record.delete 'transaction'
@@ -245,37 +244,37 @@ module SalesforceMigration
245
244
  def transform_contracts!(records)
246
245
  $logger.info("Transforming Contract fields")
247
246
  records.each do |record|
248
- record['name'] = record['contractnumber']
249
- record['sf_account_id'] = record['accountid']
250
- record['currency_iso_code'] = record['currencyisocode']
251
- record['start_date'] = record['startdate']
252
- record['end_date'] = record['enddate']
253
- record['billing_street'] = record['billingstreet']
254
- record['billing_city'] = record['billingcity']
255
- record['billing_state'] = record['billingstate']
256
- record['billing_postal_code'] = record['billingpostalcode']
257
- record['billing_country'] = record['billingcountry']
258
- record['contract_term'] = record['contractterm']
259
- record['status_code'] = record['statuscode']
260
- record['contract_number'] = record['contractnumber']
261
- record['guarantee'] = record['guaranty']
262
- record['guaranteed_amount'] = record['amount_number']
263
- record['treasury_executive_sf_id'] = record['treasury_executive']
264
- record['processing_start_date'] = record['proccessing_start_date']
265
- record['processing_end_date'] = record['proccessing_end_date']
247
+ record['name'] = record['contractnumber']
248
+ record['sf_account_id'] = record['accountid']
249
+ record['currency_iso_code'] = record['currencyisocode']
250
+ record['start_date'] = record['startdate']
251
+ record['end_date'] = record['enddate']
252
+ record['billing_street'] = record['billingstreet']
253
+ record['billing_city'] = record['billingcity']
254
+ record['billing_state'] = record['billingstate']
255
+ record['billing_postal_code'] = record['billingpostalcode']
256
+ record['billing_country'] = record['billingcountry']
257
+ record['contract_term'] = record['contractterm']
258
+ record['status_code'] = record['statuscode']
259
+ record['contract_number'] = record['contractnumber']
260
+ record['guarantee'] = record['guaranty']
261
+ record['guaranteed_amount'] = record['amount_number']
262
+ record['treasury_executive_sf_id'] = record['treasury_executive']
263
+ record['processing_start_date'] = record['proccessing_start_date']
264
+ record['processing_end_date'] = record['proccessing_end_date']
266
265
  record['date_of_submission_to_acqirer'] = record['date_of_submission_to_the_acquirer']
267
- record['chargeback_fee'] = record['charge_back_fee']
268
- record['billing_period_duration'] = record['billing_period_duration_weekly']
269
- record['payment_delay'] = record['delay_in_payment_weeks']
270
- record['integrator_1_sf_id'] = record['integrator_1']
271
- record['integrator_2_sf_id'] = record['integrator_2']
272
- record['date_of_issuing_mid'] = record['date_of_issuing_the_mid']
273
- record['date_of_deactivation'] = record['deactivation_date']
274
- record['threatmetrix'] = record['threat_matrix']
275
- record['deactivation_reason'] = record['reason_of_deactivation']
276
- record['mastercard'] = record['mc']
277
- record['ipsp_name_sf_id'] = record['ipsp_name']
278
- record['mastercard_mcc_code'] = record['mc_mcc_code']
266
+ record['chargeback_fee'] = record['charge_back_fee']
267
+ record['billing_period_duration'] = record['billing_period_duration_weekly']
268
+ record['payment_delay'] = record['delay_in_payment_weeks']
269
+ record['integrator_1_sf_id'] = record['integrator_1']
270
+ record['integrator_2_sf_id'] = record['integrator_2']
271
+ record['date_of_issuing_mid'] = record['date_of_issuing_the_mid']
272
+ record['date_of_deactivation'] = record['deactivation_date']
273
+ record['threatmetrix'] = record['threat_matrix']
274
+ record['deactivation_reason'] = record['reason_of_deactivation']
275
+ record['mastercard'] = record['mc']
276
+ record['ipsp_name_sf_id'] = record['ipsp_name']
277
+ record['mastercard_mcc_code'] = record['mc_mcc_code']
279
278
 
280
279
  record.delete 'contractnumber'
281
280
  record.delete 'accountid'
@@ -501,6 +500,7 @@ module SalesforceMigration
501
500
  when 'initial_run'
502
501
  $logger.info("Creating new records for #{type} type")
503
502
  records.each do |record|
503
+ correct_field_types! record
504
504
  create_sugar_record(module_type, record, type)
505
505
  end
506
506
  when 'update'
@@ -511,7 +511,7 @@ module SalesforceMigration
511
511
 
512
512
  if existing_record
513
513
  if existing_record.is_a?(Array)
514
- $logger.error("More than one record for #{type} #{record['name']} - SalesForce Id (#{record['sf_id']}")
514
+ $logger.error("Duplicated record found: #{record['name']} (#{type}) - SalesForceId (#{record['sf_id']}")
515
515
  existing_record = existing_record.first
516
516
  end
517
517
 
@@ -539,14 +539,14 @@ module SalesforceMigration
539
539
  # @param record [SugarCRM::Namespace::Object]
540
540
  # @param type
541
541
  def create_sugar_record(module_type, record, type)
542
- correct_field_types!(record)
543
-
542
+
544
543
  obj = module_type.new(record)
545
544
  obj.save!
546
- obj = create_associations(obj, type) unless %(email payment_method).include? type
545
+ obj = create_associations(obj, type)
546
+
547
547
  create_security_group_iso obj if type == 'iso'
548
-
549
548
  create_user(obj, type) if %(iso agent).include? type
549
+
550
550
  populate_var_pool(obj, type)
551
551
  end
552
552
 
@@ -617,19 +617,14 @@ module SalesforceMigration
617
617
 
618
618
  case type
619
619
  when "agent"
620
- associate_with!('iso', @isos, 'sf_id', obj)
621
-
622
- associate_with!('email', @emails, 'sf_agent_id', obj)
620
+ associate_with! 'iso', @isos, 'sf_id', obj
621
+ associate_with! 'email', @emails, 'sf_agent_id', obj
623
622
  when "merchant"
624
- associate_with!('agent', @agents, 'sf_id', obj)
625
-
626
- associate_with!('contract', @contracts, 'sf_account_id', obj)
627
-
628
- associate_with!('email', @emails_to_merchants, 'sf_merchant_id', obj)
629
-
630
- associate_with!('payment_method', @payment_to_merchants, 'sf_merchant_id', obj)
631
-
632
- associate_with!('settlement_bank_account', @bank_accounts, 'sf_merchant_id', obj)
623
+ associate_with! 'agent', @agents, 'sf_id', obj
624
+ associate_with! 'contract', @contracts, 'sf_account_id', obj
625
+ associate_with! 'email', @emails_to_merchants, 'sf_merchant_id', obj
626
+ associate_with! 'payment_method', @payment_to_merchants, 'sf_merchant_id', obj
627
+ associate_with! 'settlement_bank_account', @bank_accounts, 'sf_merchant_id', obj
633
628
 
634
629
  assign_user_as_owner_to_record(obj, obj)
635
630
  end
@@ -660,7 +655,7 @@ module SalesforceMigration
660
655
  user.user_name = (type == 'agent') ? obj.emerchantpay_agent_id : obj.emerchantpay_iso_id
661
656
  user.last_name = obj.name
662
657
  user.emp_type = type
663
- user.email1 = obj.email_address || ""
658
+ user.email1 = obj.email_address
664
659
  user.status = 'Inactive'
665
660
  user.salesforce_id = obj.sf_id
666
661
  user.system_generated_password = false
@@ -742,9 +737,8 @@ module SalesforceMigration
742
737
 
743
738
  return if user.blank?
744
739
 
745
- # Warn the user that we might've stumbbled upon some duplication or non-empty database (SalesForce Ids shoud be unique)
746
740
  if user.is_a?(Array)
747
- $logger.error("We found a SalesForce Id with two created SugarCRM users.")
741
+ $logger.error("Duplicated User found, SalesForceId: #{salesforce_id}")
748
742
  user = user.first
749
743
  end
750
744
 
@@ -763,19 +757,18 @@ module SalesforceMigration
763
757
  when "initial_run"
764
758
  relation_data.each do |record|
765
759
  # Check if we are dealing with file-relations (stored as Array)
766
- # OR if we're using SugarCRM records (store as Object)
767
-
768
760
  record_id = (relation_data.first.is_a?(Hash)) ? record['sf_id'] : record.sf_id
761
+ # OR if we're using SugarCRM records (store as Object)
769
762
  relate_id = (relation_data.first.is_a?(Hash)) ? record[relation_field] : record.send(relation_field.to_sym)
770
763
 
771
764
  search_results << record_id if compare_salesforce_ids(relate_id, related_to_id)
772
765
  end
773
766
  when "update"
774
- # Check if we are dealing with file-relations (stored as Array)
775
767
  unless relation_data.is_a?(String)
768
+ # Check if we are dealing with file-relations (stored as Array)
776
769
  relation_data.each { |record| search_results << record['sf_id'] if compare_salesforce_ids(record[relation_field], related_to_id) }
777
- # OR extract the objects from SugarCRM
778
770
  else
771
+ # OR extract the objects from SugarCRM
779
772
  records = find_sugarcrm_object(relation_data, relation_field, related_to_id)
780
773
 
781
774
  return if records.blank?
@@ -4,10 +4,10 @@ module SalesforceMigration
4
4
 
5
5
  class Mailer
6
6
 
7
- def initialize(options)
8
- @smtp_options = { :address => $credentials['smtp_host'],
9
- :port => $credentials['smtp_port'],
10
- :domain => $credentials['smtp_domain'],
7
+ def initialize
8
+ @smtp_options = { :address => $config['smtp_host'],
9
+ :port => $config['smtp_port'],
10
+ :domain => $config['smtp_domain'],
11
11
  :authentication => nil,
12
12
  :enable_starttls_auto => true}
13
13
 
@@ -58,7 +58,7 @@ module SalesforceMigration
58
58
  # @return [Boolean] true on successful delivery / false otherwise
59
59
  def send_mail(email, username, password)
60
60
  mail = Mail.new do
61
- from @@config['mail_from']
61
+ from $config['mail_from']
62
62
  to email
63
63
  subject 'Welcome to Emerchantpay Agent Portal'
64
64
  html_part do
@@ -87,14 +87,14 @@ module SalesforceMigration
87
87
  email_template = <<-TEMPLATE
88
88
  Dear Valued Partner,<br/><br/>
89
89
 
90
- We have created an account for you to access the newly created eMerchantPay <a href="#{@@config["sugar_url"]}">Agent Portal</a><br/><br/>
90
+ We have created an account for you to access the newly created eMerchantPay <a href="#{$config["sugar_url"]}">Agent Portal</a><br/><br/>
91
91
 
92
92
  Your account data is:<br/><br/>
93
93
 
94
94
  Login: <b>#{username}</b><br/>
95
95
  Password: <b>#{password}</b><br/><br/>
96
96
 
97
- Note: We've made significant upgrades to the <a href="#{@@config["sugar_url"]}">Agent Portal</a>. Please be so kind enough to use your new credentials, enhanced for security and better hashing.<br/><br/>
97
+ Note: We've made significant upgrades to the <a href="#{$config["sugar_url"]}">Agent Portal</a>. Please be so kind enough to use your new credentials, enhanced for security and better hashing.<br/><br/>
98
98
 
99
99
  Features:<br/>
100
100
 
@@ -108,7 +108,7 @@ module SalesforceMigration
108
108
  </ul>
109
109
 
110
110
  <br/>
111
- If you have any questions, send an email to support@emerchantpay.com (also available by clicking the Support link from the main menu in the <a href="#{@@config["sugar_url"]}">Agent Portal</a>)
111
+ If you have any questions, send an email to support@emerchantpay.com (also available by clicking the Support link from the main menu in the <a href="#{$config["sugar_url"]}">Agent Portal</a>)
112
112
  <br/><br/>
113
113
  ---<br/><br/>
114
114
 
@@ -5,85 +5,90 @@ require 'csv'
5
5
  require 'yaml'
6
6
  require 'fileutils'
7
7
  require 'databasedotcom'
8
- require 'sugarcrm'
9
- require 'mail'
10
- require 'securerandom'
11
- require 'unix_crypt'
12
- require 'fields'
13
8
  require 'export'
9
+ require 'fields'
10
+ require 'sugarcrm'
14
11
  require 'import'
12
+ require 'mail'
15
13
  require 'mailer'
14
+ require 'unix_crypt'
15
+ require 'securerandom'
16
16
 
17
17
  module SalesforceMigration
18
18
  module Runner
19
19
  extend self
20
-
21
- # Start the migration dependening on command line argument: `initial_run` or `update`
22
20
  def start
23
- options = {}
24
- # Where do we need to store the csvs?
25
- options[:csv_dir] = "/var/sugarcrm/csv"
26
- options[:log_dir] = "/var/log/sugarcrm"
27
- options[:config_file] = "/var/sugarcrm/credentials.yaml"
28
- @log_dir = options[:log_dir]
29
- create_logger
21
+ options = {}
22
+ options[:config_file] = "/var/sugarcrm/credentials.yaml"
23
+ options[:csv_dir] = "/var/sugarcrm/csv"
24
+ options[:log_dir] = "/var/log/sugarcrm"
30
25
  optparse = OptionParser.new do |opts|
31
26
  opts.banner = "Usage: sf_migrate [options]"
32
- opts.on("-a", "--action NAME", "Start the initial_run or the daily update") do |action|
27
+ opts.on("-a", "--action NAME", "Specify the action type: initial_run or update") do |action|
33
28
  options[:action] = action
34
29
  end
35
- opts.on("-f", "--config_file CONFIG_FILE", "Supply an optional config file") do |f|
30
+ opts.on("-f", "--config-file CONFIG_FILE", "Supply an optional config file") do |f|
36
31
  options[:config_file] = File.expand_path(f) if File.exists? f
37
32
  end
38
- opts.on("-c", "--csv_dir CSV_DIR", "Set the directory in which exported csv from Salesforce will be kept") do |c|
33
+ opts.on("-c", "--csv-dir CSV_DIR", "Set the directory for storing SalesForce's exported CSV objects") do |c|
39
34
  options[:csv_dir] = c
40
35
  end
41
- opts.on("-l", "--log_dir LOG_DIR", "Set the directory in which the logger will reside") do |l|
36
+ opts.on("-l", "--log-dir LOG_DIR", "Set the directory for migration.log (invactive in Verbose mode)") do |l|
42
37
  options[:log_dir] = l
43
38
  end
44
- opts.on("-t", "--last_modified_date DATE/DATETIME", "Set the date from which you would like to get results") do |t|
39
+ opts.on("-t", "--last-modified-date DATE/DATETIME", "Set the date from which you would like to get results (up until now)") do |t|
45
40
  options[:last_modified_date] = t
46
41
  end
47
- opts.on("-m", "--send_mail", "Send activation email to every new user") do |m|
42
+ opts.on("-m", "--send-mail", "Send activation email to every new user") do |m|
48
43
  options[:send_mail] = m
49
44
  end
45
+ opts.on("-v", "--verbose", "Set verbose logging to the terminal") do |v|
46
+ options[:verbose] = v
47
+ end
50
48
  opts.on("-h", "--help", "Display this screen") do
51
49
  puts opts
52
50
  exit
53
51
  end
54
52
  end
55
53
  optparse.parse!
54
+ pre_init_with options
56
55
  begin
57
- pre_init_with options
58
56
  alter_log_formatter_to "EXPORT"
59
- SalesforceMigration::Export.new(options) if options[:action]
57
+ SalesforceMigration::Export.new() if options[:action]
60
58
  alter_log_formatter_to "IMPORT"
61
- SalesforceMigration::Import.new(options) if options[:action]
62
- alter_log_formatter_to "MAIL"
63
- SalesforceMigration::Mailer.new(options) if options[:send_mail]
59
+ SalesforceMigration::Import.new() if options[:action]
60
+ alter_log_formatter_to "MAILER"
61
+ SalesforceMigration::Mailer.new() if options[:send_mail]
64
62
  rescue => e
65
63
  $logger.error(e)
66
64
  end
67
65
  end
68
66
 
69
67
  def pre_init_with options
70
- $logger = create_logger
71
- $credentials = YAML.load_file(options[:config_file])
72
- SugarCRM.connect($credentials['sugar_url'], $credentials['sugar_username'], $credentials['sugar_password'])
68
+ $options = options
69
+ $config = YAML.load_file(options[:config_file])
70
+ $logger = start_log
71
+
72
+ SugarCRM.connect($config['sugar_url'], $config['sugar_username'], $config['sugar_password'])
73
73
  end
74
74
 
75
- def create_logger
76
- formatter = Logger::Formatter.new
77
- today = lambda { Date.today.to_s }
78
- dateDir = "#{@log_dir}/#{today.call}"
79
- dateLog = "#{dateDir}/migration.log"
80
- FileUtils.mkdir_p(dateDir) unless Dir.exists? dateDir
75
+ def start_log
76
+ formatter = Logger::Formatter.new
77
+ today = lambda { Date.today.to_s }
78
+ dateDir = "#{$options[:log_dir]}/#{today.call}"
79
+ dateLog = "#{dateDir}/migration.log"
80
+ FileUtils.mkdir_p(dateDir) unless Dir.exists? dateDir
81
+
82
+ unless $options[:verbose]
83
+ logger = Logger.new dateLog
84
+ else
85
+ logger = Logger.new STDOUT
86
+ end
81
87
 
82
- logger = Logger.new(dateLog)
83
- logger.formatter = proc { |severity, datetime, progname, msg|
84
- formatter.call("IMPORT", datetime, progname, msg)
85
- }
86
- logger
88
+ logger.formatter = proc { |severity, datetime, progname, msg|
89
+ formatter.call("IMPORT", datetime, progname, msg)
90
+ }
91
+ logger
87
92
  end
88
93
 
89
94
  def alter_log_formatter_to action
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sf_migrate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.8
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Petkov
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-20 00:00:00.000000000 Z
12
+ date: 2014-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sugarcrm_emp
@@ -107,17 +107,17 @@ require_paths:
107
107
  - lib
108
108
  required_ruby_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - ! '>='
110
+ - - '>='
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  requirements: []
119
119
  rubyforge_project:
120
- rubygems_version: 2.1.11
120
+ rubygems_version: 2.0.3
121
121
  signing_key:
122
122
  specification_version: 4
123
123
  summary: Makes a bridge between Salesforce and SugarCRM