Showing posts with label zoho. Show all posts
Showing posts with label zoho. Show all posts

Wednesday, 3 December 2014

Integrating NiftyQuoter with Zoho CRM

NiftyQuoter is an awesome tool for creating beautiful looking sales proposals/quotes. It has some out of the box integration with Zoho CRM but it's pretty rubbish to be honest:P You have to click on "Refresh contacts from Zoho" each time you want to do a sync and then wait 10-30 seconds for the sync to happen. What salesperson has time for that?

A better flow would be to click on a link in Zoho CRM and automatically load up a proposal in NiftyQuoter with the client's details pre-loaded.

I've written some code to allow that. Just upload the below HTML file to your server and set up Zoho CRM links accordingly. Here's a screencast showing it in action.



If you need any help implementing this, drop me a line at info@nuanced.it

Make sure you change the API details at the start of the code.
 <html>  
 <head>  
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  
 </head>  
 <body>  
 Adding proposal to NiftyQuoter...You'll be redirected to the new proposal in 15 seconds or less  
 <script type="text/javascript">  
 //CHANGE THIS  
 //needed for API  
 var nifty_API_key = "CHANGE";  
 var nifty_account_email = "CHANGE";  
 /**  
 * Reads URL parameters into array for easy access  
 * Courtesy Quentin: http://stackoverflow.com/a/979995  
 */  
 var QueryString = function () {  
  // This function is anonymous, is executed immediately and   
  // the return value is assigned to QueryString!  
  var query_string = {};  
  var query = window.location.search.substring(1);  
  var vars = query.split("&");  
  for (var i=0;i<vars.length;i++) {  
   var pair = vars[i].split("=");  
   // If first entry with this name  
   if (typeof query_string[pair[0]] === "undefined") {  
    query_string[pair[0]] = decodeURIComponent(pair[1]);  
        // If second entry with this name  
   } else if (typeof query_string[pair[0]] === "string") {  
    var arr = [ query_string[pair[0]], pair[1] ];  
    query_string[pair[0]] = arr;  
        // If third or later entry with this name  
   } else {  
    query_string[pair[0]].push(decodeURIComponent(pair[1]));  
   }  
  }   
   return query_string;  
 } ();  
 //get URL parameters  
 //example URL: http://www.nuancedi.wwwss10.a2hosted.com/client_jobs/mesh_direct/add_niftyquoter_proposal.html?client_first_name=testing%204&client_last_name=testing%204&client_company_name=Testing%20company&client_email=test%40testing.it  
 console.log(QueryString);  
 var client_first_name = QueryString.client_first_name;  
 var client_last_name = QueryString.client_last_name;  
 var client_company_name = QueryString.client_company_name;  
 var client_email = QueryString.client_email;  
 if (client_first_name == "" || client_first_name === "undefined")  
   alert("Please supply the client's first name" + client_first_name);  
 else if (client_last_name == "" || client_last_name === "undefined")  
   alert("Please supply the client's last name");  
 else if (client_company_name == "" || client_company_name === "undefined" )  
   alert("Please make sure you fill out the Company name in Zoho");  
 else if (client_email == "" || client_email === "undefined")  
   alert("Please make sure you fill out the client's email address in Zoho");  
 else{  
      add_proposal();  
 }  
 /**  
 * Adds a new proposal to Nifty Quoter with the client's name pre-filled in the proposal name. E.g. Proposal for <client name>  
 **/  
 function add_proposal(){  
      var proposal_id = 0;  
      $.ajax({  
         url: 'https://api.niftyquoter.com/api/v1/proposals?key=' + nifty_API_key + '&email=' + nifty_account_email,  
         type: 'POST',  
         data: {proposal: {name: 'Proposal for ' + client_company_name}},  
         success: function(result) {  
           console.log("add proposal");  
           console.log(result);  
           proposal_id = result.proposal.id;  
           add_client(proposal_id);  
         },  
         error: function(result) {  
          alert('error');  
         }  
        });  
 }  
 /**  
 * Adds a new client to Nifty Quoter with the details from Zoho (supplied in URL parameters)  
 **/  
 function add_client(proposal_id){  
      var added_client_id = 0;  
      //add client  
      $.ajax({  
         url: 'https://api.niftyquoter.com/api/v1/clients?key=' + nifty_API_key + '&email=' + nifty_account_email,  
         type: 'POST',  
         data: {client: {first_name: client_first_name, last_name: client_last_name, email: client_email, company_name: client_company_name}},  
         success: function(result) {  
           added_client_id = result.client.id;  
           add_client_to_proposal(added_client_id, proposal_id);  
         },  
         error: function(result) {  
          alert('error');  
         }  
        });  
 }  
 /**  
 * Adds the client to the proposal  
 * @param added_client_id The ID of the client in Nifty that we added via add_client()  
 * @param proposal_id The ID of the proposal in Nifty that we added via add_proposal()  
 **/  
 function add_client_to_proposal(added_client_id, proposal_id){       
      var proposal_url = 'https://api.niftyquoter.com/api/v1/proposals/' + proposal_id + '/contacts?key=' + nifty_API_key + '&email=' + nifty_account_email;  
      var payload = {contact: {client_id: added_client_id}};   
      $.ajax({  
         url: proposal_url,  
         type: 'POST',  
         data: payload,  
         success: function(result) {  
           console.log(result);  
          window.location.href = "http://mesh-direct.niftyquoter.com/proposals/" + proposal_id + "/edit";  
         },  
         error: function(result) {  
          console.log(result);  
           console.log(payload);  
         }  
        });  
 }  
 </script>  
 </body>  
 </html>  

Wednesday, 9 July 2014

What to look for when hiring a Zoho Creator developer

Preamble
I saw the below question on the Zoho Creator Linked In group and thought I'd write a reply.
"I am inquiring if anyone has any recommendations on how to find a expert level Zoho developer to help me customize the software into a complex CRM using many "bells & whistles" 

My answer
I often hire subcontractors to help me out on Zoho Creator projects when I'm overloaded. Unfortunately the majority of times I've found they've let me down either due to a lack of technical skill or due to poor reliability (e.g. leaving in the middle of a project as one other poster experienced). My recommendations for a good hire are: 
a. go for a local (as an Australian, I myself find it difficult to work with US clients due to time differences and now try to avoid it where possible) 

b. look on oDesk.com to get a realistic picture of someone's performance. If they have a tendency to drop projects, you will see that reflected in their feedback. I always look for someone with > 4.5 stars feedback and at least 200 hours on oDesk so you can see whether they can sustain that quality. Here is a link to the list of oDesk freelancers specialising in Zoho Creator.

c. give the person a 10hr test job to begin with and be ruthless if they show any signs of: 
1. poor communication 
2. poor deliverable quality 
3. slow delivery 

d. spend a lot of time planning out the project yourself. Do not rely on the developer to do the thinking for you. My favourite clients are the ones who write detailed specifications mapping out exactly what is needed and who are responsive to my questions during the project. If you don't have the time to do this then be prepared to pay a lot more because the developer basically has to act as a management consultant as well and also be prepared for the work to be done incorrectly because the developer will have a hard time understanding your requirements. If you're happy to pay more, then get someone local who can sit in the office with you and nut out your requirements. Even better if they have subject matter expertise.