Project

General

Profile

Exporting Salsa for CiviCRM » History » Version 52

Jon Goldberg, 10/28/2015 01:49 PM

1 24 Jon Goldberg
{{lastupdated_at}} by {{lastupdated_by}}
2
3 1 Jon Goldberg
h1. Exporting Salsa for CiviCRM
4
5 50 Jon Goldberg
h2. Before you begin
6 1 Jon Goldberg
7 50 Jon Goldberg
* When exporting from Salsa, exporting to screen and exporting to a file yield different formats!  Be sure to be consistent, or you'll find that your field names change, your date formats change, etc.  *If you're exporting to give data to Palante, please use the scheduled export*.
8
* Salsa data is VERY messy compared to Civi data.  Expect to find a lot of records that don't have a first name, last name OR e-mail address.  Expect to find donations, participant records, etc. not attached to a supporter (most likely from a legacy import).  Expect to find records with NULL for their "Date Created" values.  Plan your transformations accordingly.
9 1 Jon Goldberg
10 50 Jon Goldberg
h2. Exporting Supporter Data
11
12
When logged in as a Manager, go to "Supporter Management" tab, and "Query/Export" will give you a full export of contact data.  There's a "Select My Entire List" button.  There's also an "include my deleted supporters" checkbox, which you may want to check (but probably not).  This will NOT get you groups/tags, but WILL get you the equivalent of @civicrm_contact@ plus all custom fields attached to the contact.
13
14 25 Jon Goldberg
h2. Exporting Data not on the Contact Entity
15 1 Jon Goldberg
16 8 Jon Goldberg
You need to get to custom reports.  If you have the Reports tab, great; if not, you can get there by clicking "Supporter Management" tab, then "Built-in Reports", then "Clone and Edit" a report, then select "List Your Custom Reports".  Or go straight here: https://hq-org.salsalabs.com/dia/hq/reports/list.jsp?table=report
17
18 11 Jon Goldberg
h3. Groups
19 12 Jon Goldberg
20 3 Jon Goldberg
* Create a new report.
21
* Select the type of report you would like to create: Standard report
22
* Use "Advanced Object Chooser".
23 9 Jon Goldberg
* Report "Supporter Groups", then "Groups".  Press "Save".
24 1 Jon Goldberg
* Select the "Columns" tab and select your columns.  I like just "Supporter Key" and "Group Name".
25 7 Jon Goldberg
* In Conditions, "Group Name" should be "Not Empty".
26 4 Jon Goldberg
* Save, Run the report.
27
* Click the "Export" link.
28 1 Jon Goldberg
29 11 Jon Goldberg
h3. Tags
30 12 Jon Goldberg
31 5 Jon Goldberg
* Create a new report.
32
* Select the type of report you would like to create: Standard report
33
* Use "Advanced Object Chooser".
34
* Report on "Tags", then "Tags Data", then "Database Table".  Press "Save".
35
* Select the "Columns" tab and select your columns.  I like just "Tag" and "Table Key".
36 1 Jon Goldberg
** "Table Key" is the Supporter Key.  It's similar to "entity_id" in CiviCRM.
37 7 Jon Goldberg
* In "Conditions", "Table Name" should equal "supporter".
38 10 Jon Goldberg
* Add another condition: "Tag.Tag" is "Not Empty".
39 1 Jon Goldberg
* Save, Run the report.
40
* Click the "Export" link.
41
42 11 Jon Goldberg
h3. Events
43 1 Jon Goldberg
44 15 Jon Goldberg
As above, but no conditions, and report on the "Event" table.  If you're only importing legacy events, this is a good list of easy fields to import:
45
Event KEY
46
Reference Name
47
Event Name
48
Description
49
Start
50
End
51
Deadline
52
Maximum Attendees
53 46 Jon Goldberg
Date Created (is a useful proxy when "Start" isn't defined)
54 15 Jon Goldberg
55 1 Jon Goldberg
h3. Participants
56 16 Jon Goldberg
57
As above.  Report on tables "Supporter Event", then "Event".  Note that there are a lot of tables that _look_ like "Supporter Event", like "Supporterevent" and "Supporter Events"!
58
59
Note that if you're matching on a unique field from "Events", you can just export "Supporter Event" and not the "Event" table.
60
Here are the fields I exported and what I matched them to:
61
Supporter KEY	external_identifier
62
Event KEY	event_key
63
Status	status
64
Type	role
65
Date Created	register_date
66 51 Jon Goldberg
Last Modified	register_date
67
68
(I didn't actually map both the date fields to register_date.  I use "Date Created" unless it's NULL.
69 16 Jon Goldberg
70 28 Jon Goldberg
h3. Recurring Donations
71
72
Export on table "Recurring Donation".  Here's the field mapping:
73
74
Recurring Donation Key -> trxn_id
75
Supporter Key -> external_identifier
76
Transaction date -> create_date
77
Start Date -> start_date
78
RPREF -> invoice_id
79
RESULT (exclude 37, they're tests)
80
Amount -> amount
81
Pay Period -> use to remap to frequency_unit and frequency_interval
82
TERM -> installments
83
Status(?)
84
85
Note that in Salsa, there's no clear-cut way to tell whether a contact's recurring donation is still working or not - "Status" isn't a complete indicator, and thus doesn't cleanly map into Civi.
86
87 27 Jon Goldberg
h3. Donations
88
89
It's important to link the recurring donations to the donations when exporting if you need to identify the first recurring donation (e.g. to generate thank-you letters if it's a first donation and recurring).
90
91 30 Jon Goldberg
Under "Conditions", filter by "Supporter KEY is not empty" - when Salsa imports legacy data into their system, sometimes they don't do such a hot job.
92
93 29 Jon Goldberg
Export on table "Donation" linked to table "Donate Page".  You'll want these fields (more or less):
94 27 Jon Goldberg
95
Donation.donation KEY(donation)	
96 1 Jon Goldberg
Donation.supporter KEY(donation)
97 42 Jon Goldberg
donate_page.Reference_Name  (contribution_page_id)
98
Donation.Date_Entered  
99 27 Jon Goldberg
Donation.Transaction Date(donation)
100 1 Jon Goldberg
Donation.amount(donation)
101 43 Jon Goldberg
Donation.Transaction Type(donation) (financial_type)
102
Donation.RESULT(donation) (only 0 and -1 should be accepted, others are tests)
103 42 Jon Goldberg
Donation.Tracking Code(donation)  (source)
104
Donation.Designation Code(donation)  (source - not sure what the differentiation between designation and tracking codes is)
105 1 Jon Goldberg
Donation.In Honor Name(donation)
106
Donation.In Honor Email(donation)
107 27 Jon Goldberg
Donation.In Honor Address(donation)
108
Recurring donation.Transaction Date(recurring_donation)
109 1 Jon Goldberg
Donation.Order_Info
110 42 Jon Goldberg
Donation.Form of Payment (payment_instrument)
111 27 Jon Goldberg
112 44 Jon Goldberg
*Special Note:* Salsa seems to keep donations that are tied to supporters that don't exist (that is, the supporter_key on the donation doesn't match anyone in Salsa).  I've seen this multiple times; I don't know why this is, but this is normal.
113
114 19 Jon Goldberg
h3. Actions
115 17 Jon Goldberg
116 19 Jon Goldberg
Salsa has a separate table for actions, making them structurally comparable to Civi Events.  A good match in Civi is the Survey entity, which is used for petitions.
117 1 Jon Goldberg
118 19 Jon Goldberg
Export as above. Report on table "Action".
119 1 Jon Goldberg
Condition: "Reference Name" is not empty.
120 47 Jon Goldberg
121
Fields:
122
Action.action KEY
123
Action.Reference Name
124
Action.Date Created
125
Action.Signatures
126
Action.Last Modified
127
Action.Title
128
Action.Description
129
130 19 Jon Goldberg
131
*Note*: "Description" is likely to contain HTML that breaks the export.  I find it helpful to export it as the last column.
132
133
h3. Supporter_Actions
134 11 Jon Goldberg
135 22 Jon Goldberg
Export "action" and "supporter_action" and "supporter_action_comment" in that order.
136 23 Jon Goldberg
Condition: supporter_key IS NOT NULL
137 20 Jon Goldberg
138
Here's the fields I grabbed with their mapping:
139 22 Jon Goldberg
supporter_action.supporter_key	
140 21 Jon Goldberg
action.Reference Name
141 22 Jon Goldberg
supporter_action.Date_Created
142 48 Jon Goldberg
supporter_action_comment.Comment
143 52 Jon Goldberg
supporter_action.Last_Modified 
144
145
(I didn't actually map both the date fields to activity_date_time. I use "Date Created" unless it's NULL.
146 20 Jon Goldberg
147 31 Jon Goldberg
h3. Letter to the Editor
148
149
This isn't a feature CiviCRM has, but it maps reasonably well to an activity when migrating.
150
* Create a new report.
151
* Select the type of report you would like to create: Standard report
152
* Use "Advanced Object Chooser".
153 49 Jon Goldberg
* Report "Supporter Letter", then "Letter".  Press "Save".
154 31 Jon Goldberg
* Select the "Columns" tab and select your columns:
155
> Date_Created -> activity_date_time
156
> supporter_KEY -> external_identifier
157
> person_media_ID? -> seems important - but I can't find a matching table, and this data doesn't seem to be accessible from Salsa.
158
> Letter_Subject -> details (concatenated)
159
> Letter_Content -> details
160
> Reference_Name -> subject
161
* Save, Run the report.
162
* Click the "Export" link.
163
164 11 Jon Goldberg
h3. Chapters
165 12 Jon Goldberg
166 7 Jon Goldberg
* Create a new report.
167 1 Jon Goldberg
* Select the type of report you would like to create: Standard report
168 7 Jon Goldberg
* Use "Advanced Object Chooser".
169 8 Jon Goldberg
* Report "Supporter Chapter", then "Chapter".  Press "Save".
170
* Select the "Columns" tab and select your columns.  I like just "Supporter KEY" and "Chapter.Name".
171
* In Conditions, "Chapter.Name" should be "Not Empty".
172 5 Jon Goldberg
* Save, Run the report.
173 1 Jon Goldberg
* Click the "Export" link.
174
175 32 Jon Goldberg
h2. Programmatically creating custom fields in CiviCRM
176
177
To do this, you'll need to create a custom group, custom fields, option groups, and option values.
178
179
h3. Custom Field Group
180
181
Don't export anything from Salsa - just create this manually, or using my Kettle transform.
182
183
h3. Custom Fields, Option Groups, Option Values
184
185 33 Jon Goldberg
_Custom Columns_
186
* Create a new report.
187
* Select the type of report you would like to create: Standard report
188
* Use "Advanced Object Chooser".
189
* Report "Custom Columns".  Press "Save".
190
* Select the "Columns" tab and select your columns:
191 36 Jon Goldberg
> custom_column_key -> needed to relate to custom_column_options.  Store in filter temporarily.
192 34 Jon Goldberg
> data_table (should = supporter_custom.  In theory, we can probably export non-contact custom fields in this same process)
193 33 Jon Goldberg
> Date_Created -> created_date
194
> label -> label
195
> type -> data_type, html_type (can be bool, enum, text, varchar)
196
> Description -> help_pre
197
> Order -> weight
198 38 Jon Goldberg
> Name
199 33 Jon Goldberg
* Save, Run the report.
200 1 Jon Goldberg
* Click the "Export" link.
201 37 Jon Goldberg
* Do NOT import the Salsa name, it'll screw up Civi.
202 1 Jon Goldberg
203 35 Jon Goldberg
_Option Groups_
204 36 Jon Goldberg
These will be created automatically when you create custom fields.
205 35 Jon Goldberg
206 1 Jon Goldberg
_Custom Column Options_
207 33 Jon Goldberg
* Create a new report.
208
* Select the type of report you would like to create: Standard report
209
* Use "Advanced Object Chooser".
210
* Report "Custom Column Options".  Press "Save".
211
* Select the "Columns" tab and select your columns:
212 1 Jon Goldberg
> custom_column_KEY -> a lookup field (against civicrm_custom_field.filter to get option_group_id)
213 37 Jon Goldberg
> custom_column_option_KEY -> value
214
> value -> name
215 33 Jon Goldberg
> label -> label
216
> isDefault -> is_default
217
> isDisplayed -> is_active
218
> _Order -> weight
219
* Save, Run the report.
220
* Click the "Export" link.
221 7 Jon Goldberg
222 1 Jon Goldberg
h3. Receive_Email field
223
224 26 Jon Goldberg
Here's a TSV of how to interpret the "Receive_Email" field.
225
|*code*|*meaning*|
226
|-24|INACTIVE: (5.1.1 User Unknown)|
227
|-26|INACTIVE: Address contains RFC spec. invalid characters / is improperly formatted|
228
|-3|INACTIVE: UNSUBSCRIBED (actively unsubscribed by user)|
229
|-30|INACTIVE (Reported as Spam): Other Blacklist (BLACKLIST)|
230
|-32|(Unknown Status)|
231
|-35|INACTIVE (Reported as Spam): Outblaze|
232
|-4|(Unknown Status)|
233
|-42|INACTIVE (Recipient Initiated Spam Report): MSN/Hotmail/WebTV|
234
|-44|INACTIVE (Recipient Initiated Spam Report): UNTI (Juno/NetZero/FreeServers)|
235
|-45|INACTIVE (Recipient Initiated Spam Report): Yahoo|
236
|-46|INACTIVE (Recipient Initiated Spam Report): Comcast.net|
237
|-47|INACTIVE (Recipient Initiated Spam Report): AOL|
238
|-48|INACTIVE (Recipient Initiated Spam Report): RoadRunner|
239
|-50|ISP Specific Bounces: AIM.com Unactivated account|
240
|-51|INACTIVE (Recipient Initiated Spam Report): Excite|
241
|-52|INACTIVE (Reported as Spam): Earthlink|
242
|-53|(Unknown Status)|
243
|-54|(Unknown Status)|
244
|-60|Bad Address/Expired address, etc (n.b.: These addresses are all @democracyinaction.org)|
245
|-9|INACTIVE: DEATH (supporter has died)|
246
|0|0 - Inactive or Unknown(not subscribed)|
247
|1|1 - Imported or unknown (subscribed)|
248
|10|ACTIVE: CONFIRMED (Double opt-in)|
249 1 Jon Goldberg
|3|ACTIVE: CLIENT (Client has directly signed up)|
Go to top