/**
*
*/
package net.combase.desktopcrm.data;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import net.combase.desktopcrm.domain.Campaign;
import net.combase.desktopcrm.domain.Lead;
/**
* @author "Till Freier"
*/
public class LeadImporter
{
public static Collection<Lead> importFile(File f)
{
try
{
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(new FileReader(f));
Iterator<CSVRecord> lines = records.iterator();
if (!lines.hasNext())
return null;
CSVRecord headerRow = lines.next();
List<Lead> leads = new ArrayList<>();
while (lines.hasNext())
{
final Iterator<String> content = lines.next().iterator();
final Iterator<String> header = headerRow.iterator();
Lead lead = new Lead(null, "new lead");
StringBuilder desc = new StringBuilder();
// use capterra as default campaign since it doesn't reference
// itself in the import file
Campaign camp = CrmManager.getCampaignByName("Capterra");
if (camp != null)
lead.setCampaignId(camp.getId());
int column = 0;
while (header.hasNext() && content.hasNext())
{
column++;
String key = header.next();
String value = content.next();
System.out.println(key + "=" + value);
if (column == 1 && key.startsWith("RFQ"))
{
camp = CrmManager.getCampaignByName("BuyerZone");
if (camp != null)
lead.setCampaignId(camp.getId());
}
switch (key)
{
case "Campaign Code":
camp = CrmManager.getCampaignByName(value);
if (camp != null)
lead.setCampaignId(camp.getId());
break;
case "Organization":
case "Company":
lead.setAccountName(value);
break;
case "Seqment":
desc.append(value).append("\n\n");
break;
case "Size":
desc.append("Size: ").append(value).append("\n");
break;
case "Size 2":
case "# of Employees":
desc.append("Staff: ").append(value).append("\n");
break;
case "Size 3":
desc.append("Terminals: ").append(value).append("\n");
break;
case "Applications":
desc.append("Applications: ").append(value).append("\n");
break;
case "Deployment":
desc.append("Deployment: ").append(value).append("\n");
break;
case "Call Notes":
case "Problem Buyer Needs to Solve":
desc.append("\n\nCALL NOTES\n\n").append(value).append("\n\n");
break;
case "Budget Details":
desc.append("\n\nBudget Details\n\n").append(value).append("\n\n");
case "Buyer's Requirements":
desc.append("\n\nBudget Details\n\n").append(value).append("\n\n");
break;
case "Timeframe":
case "Purchase Timeframe":
desc.append("Timeframe: ").append(value).append("\n");
break;
case "Stage in Buying Process":
desc.append("Stage in Buying Process: ").append(value).append("\n");
break;
case "Product":
case "Type of Software Needed":
desc.append("Product: ").append(value).append("\n");
break;
case "Current Software":
desc.append("Current Software: ").append(value).append("\n");
break;
case "Buyer Has Budget":
desc.append("Buyer Has Budget: ").append(value).append("\n");
break;
case "Budget Amount":
desc.append("Budget Amount: ").append(value).append("\n");
break;
case "Decision Maker":
desc.append("Decision Maker: ").append(value).append("\n");
break;
case "Name":
case "Contact Name":
String[] split = value.split(" ");
if (split.length < 2)
lead.setLastName(value);
else
{
lead.setFirstname(split[0]);
int i = 0;
StringBuilder sb = new StringBuilder();
for (String string : split)
{
i++;
if (i == 1)
continue;
sb.append(string);
if (i < split.length)
sb.append(' ');
}
lead.setLastName(sb.toString());
}
break;
case "First Name":
lead.setFirstname(value);
break;
case "Last Name":
lead.setLastName(value);
break;
case "Job Title":
case "Title":
lead.setJobTitle(value);
break;
case "Phone":
lead.setPhone(value);
break;
case "Email":
lead.setEmail(value);
break;
case "Address":
lead.setAddress(value);
break;
case "City":
lead.setCity(value);
break;
case "State":
lead.setState(value);
break;
case "ZIP Code":
case "ZIP":
case "Zip":
lead.setZip(value);
break;
case "Country":
case "Location":
lead.setCountry(value);
break;
case "Request":
desc.append("Request: ").append(value).append("\n");
break;
case "Timestamp":
desc.append("Timestamp: ").append(value).append("\n");
break;
case "Appointment":
desc.append("\nAppointment: ").append(value).append("\n\n");
break;
default:
desc.append("").append(key).append(": ").append(value).append("\n\n");
break;
}
}
lead.setDescription(desc.toString());
lead.setType("Customer");
leads.add(CrmManager.saveLead(lead));
}
return leads;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}