Future method cannot be called from a future or batch method

Salesforce doesn't allow a future method to be called from another future method or a batch job. Before calling your future method, you should check if a future or batch job is already running. This would be a best practice for any code you ever write that calls a future method. Good news is that it's very easy. Example below: 

if(System.IsBatch() == false && System.isFuture() == false){ 
    // make your future call here