<?php
/*
Plugin Name: Paid Memberships Pro - Australia GST
Plugin URI: http://www.paidmembershipspro.com/wp/pmpro-australia-gst/
Description: Apply Australia GST to Checkouts with PMPro
Version: .1
Author: Stranger Studios
Author URI: http://www.strangerstudios.com
*/
/*  
  Tax solution for Australia
  
  This solution assume the GST tax rate of 10% from March 15th, 2017. Ask your accountant how much tax you must charge.
  More info: https://www.business.gov.au/info/run/tax/register-for-goods-and-services-tax-gst
  
  Edit as needed, then save this file in your plugins folder and activate it through the plugins page in the WP dashboard.
*/ 
//add tax info to cost text. this is enabled if the danish checkbox is checked.
function agst_pmpro_tax($tax, $values, $order)
{  	
	$tax = round((float)$values[price] * 0.1, 2);
	return $tax;
}
 
function agst_pmpro_level_cost_text($cost, $level)
{
	//only applicable for levels > 1
	$cost .= __(" Customers in Australia will be charged a 10% tax.", 'pmpro-australia-gst');
	
	return $cost;
}
add_filter("pmpro_level_cost_text", "agst_pmpro_level_cost_text", 10, 2);
 
//set the default country to Australia
function agst_pmpro_default_country($country) {
	return 'AU';
}
add_filter('pmpro_default_country', 'agst_pmpro_default_country');
 
//add AU checkbox to the checkout page
function agst_pmpro_checkout_boxes()
{
?>
<table id="pmpro_pricing_fields" class="pmpro_checkout" width="100%" cellpadding="0" cellspacing="0" border="0">
<thead>
	<tr>
		<th>
			<?php _e('Australian Residents', 'pmpro-australia-gst');?>
		</th>						
	</tr>
</thead>
<tbody>                
	<tr>	
		<td>
			<div>				
				<input id="taxregion" name="taxregion" type="checkbox" value="1" <?php if(!empty($_REQUEST['taxregion']) || !empty($_SESSION['taxregion'])) {?>checked="checked"<?php } ?> /> <label for="taxregion" class="pmpro_normal pmpro_clickable"><?php _e('Check this box if your billing address is in Australia.', 'pmpro-australia-gst');?></label>
			</div>				
		</td>
	</tr>
</tbody>
</table>
<?php
}
add_action("pmpro_checkout_boxes", "agst_pmpro_checkout_boxes");
 
//update tax calculation if buyer is danish
function agst_region_tax_check()
{
	//check request and session
	if(isset($_REQUEST['taxregion']))
	{
		//update the session var
		$_SESSION['taxregion'] = $_REQUEST['taxregion'];	
		
		//not empty? setup the tax function
		if(!empty($_REQUEST['taxregion']))
			add_filter("pmpro_tax", "agst_pmpro_tax", 10, 3);
	}
	elseif(!empty($_SESSION['taxregion']))
	{
		//add the filter
		add_filter("pmpro_tax", "agst_pmpro_tax", 10, 3);
	}
	else
	{
		//check state and country
		if(!empty($_REQUEST['bcountry']))
		{			
			$bcountry = trim(strtolower($_REQUEST['bcountry']));
			if($bcountry == "au")
			{
				//billing address is in AU
				add_filter("pmpro_tax", "agst_pmpro_tax", 10, 3);
			}
		}
	}
}
add_action("init", "agst_region_tax_check");
 
//remove the taxregion session var on checkout
function agst_pmpro_after_checkout()
{
	if(isset($_SESSION['taxregion']))
		unset($_SESSION['taxregion']);
}
add_action("pmpro_after_checkout", "agst_pmpro_after_checkout");