function geodir_create_invoice($post_id = '', $pkg_id = '', $paymentmethod = '', $coupon_code = '', $post_action = 'add')
{
    global $wpdb, $current_user;
    $user_id = $current_user->data->ID;
    $post_title = get_the_title($post_id);
    $package_info = geodir_get_package_info($pkg_id);
    /// Get package info
    $package_pid = $package_info->pid;
    $package_title = $package_info->title;
    $alive_days = $package_info->days;
    $sub_units = $package_info->sub_units;
    $sub_units_num = $package_info->sub_units_num;
    if ($package_info->sub_active) {
        $sub_units_num_var = $package_info->sub_units_num;
        $sub_units_var = $package_info->sub_units;
        $alive_days = geodir_payment_get_units_to_days($sub_units_num_var, $sub_units_var);
        $sub_num_trial_days_var = $package_info->sub_num_trial_days;
        $sub_num_trial_units = isset($package_info->sub_num_trial_units) ? $package_info->sub_num_trial_units : 'D';
        $sub_num_trial_days_var = geodir_payment_get_units_to_days($sub_num_trial_days_var, $sub_num_trial_units);
        $sub_units_num_times_var = $package_info->sub_units_num_times;
        if ($package_info->sub_num_trial_days > 0) {
            $alive_days = $sub_num_trial_days_var;
        }
    }
    $amount = $package_info->amount ? $package_info->amount : 0;
    $expire_date = '';
    if ($alive_days) {
        $expire_date = date('Y-m-d', strtotime(date('Y-m-d') . "+" . (int) $alive_days . " days"));
    }
    $geodir_post_type = get_post_type($post_id);
    $discount = '';
    if ($coupon_code != '' && geodir_is_valid_coupon($geodir_post_type, $coupon_code)) {
        $discount = geodir_get_discount_amount($coupon_code, $amount);
        $paied_amount = geodir_get_payable_amount_with_coupon($amount, $coupon_code);
    } else {
        $paied_amount = $amount;
    }
    $status = 'pending';
    if ($paied_amount > 0) {
        $type = 'paid';
    } else {
        $type = 'free';
    }
    $is_current = 1;
    $date = date('Y-m-d H:i:s', time());
    $insert_invoice_query = "INSERT INTO " . INVOICE_TABLE . " SET ";
    $arr_invoice_params = array('type' => $type, 'post_id' => $post_id, 'post_title' => $post_title, 'post_action' => $post_action, 'package_id' => $package_pid, 'package_title' => $package_title, 'amount' => $amount, 'alive_days' => $alive_days, 'expire_date' => $expire_date, 'user_id' => $user_id, 'coupon_code' => $coupon_code, 'discount' => $discount, 'paied_amount' => $paied_amount, 'paymentmethod' => $paymentmethod, 'status' => $status, 'is_current' => $is_current, 'date' => $date);
    $arr_invoice_params = apply_filters('geodir_payment_invoice_params', $arr_invoice_params);
    foreach ($arr_invoice_params as $invocie_col => $invoice_value) {
        $insert_invoice_query .= " " . $invocie_col . " = '" . $invoice_value . "' , ";
    }
    $insert_invoice_query = trim($insert_invoice_query, ", ");
    $insert_invoice_query;
    $wpdb->query($insert_invoice_query);
    $lastpost_id = $wpdb->insert_id;
    do_action('geodir_payment_invoice_created', $wpdb->insert_id);
    return $lastpost_id;
}
function geodir_publish_payment_listing_form_before_msg()
{
    global $post, $wpdb;
    $post_type = $post->listing_type;
    if (isset($_REQUEST['package_id']) && $_REQUEST['package_id'] != '') {
        $package_price_info = geodir_get_post_package_info($_REQUEST['package_id']);
    } else {
        if (!empty($post) && isset($post->package_id)) {
            $package_price_info = geodir_get_post_package_info($post->package_id);
        }
    }
    $package_id = isset($package_price_info['pid']) ? $package_price_info['pid'] : '';
    $payable_amount = isset($package_price_info['amount']) ? $package_price_info['amount'] : 0;
    $alive_days = isset($package_price_info['days']) ? $package_price_info['days'] : 0;
    $type_title = isset($package_price_info['title']) ? $package_price_info['title'] : '';
    $sub_active = isset($package_price_info['sub_active']) ? $package_price_info['sub_active'] : '';
    if ($sub_active) {
        $sub_units_num_var = $package_price_info['sub_units_num'];
        $sub_units_var = $package_price_info['sub_units'];
        $alive_days = geodir_payment_get_units_to_days($sub_units_num_var, $sub_units_var);
        // paypal free trial
        $sub_num_trial_days_var = $package_price_info['sub_num_trial_days'];
        $sub_num_trial_units_var = $package_price_info['sub_num_trial_units'];
        if ($sub_num_trial_days_var > 0) {
            $alive_days = geodir_payment_get_units_to_days($sub_num_trial_days_var, $sub_num_trial_units_var);
        }
    }
    $org_payable_amount = $payable_amount;
    /* -------- START LISTING FORM MESSAGE*/
    ob_start();
    if (isset($_REQUEST['coupon_code']) && $_REQUEST['coupon_code'] != '') {
        if (geodir_is_valid_coupon($post_type, $_REQUEST['coupon_code'])) {
            $payable_amount = geodir_get_payable_amount_with_coupon($payable_amount, $_REQUEST['coupon_code']);
        } else {
            echo '<p class="error_msg_fix">' . WRONG_COUPON_MSG . '</p>';
        }
    }
    if ($payable_amount > 0) {
        if ($alive_days == 0) {
            $alive_days = UNLIMITED;
        }
        echo '<h5 class="geodir_information">';
        printf(GOING_TO_PAY_MSG, geodir_get_currency_sym() . $payable_amount, $alive_days, $type_title);
        echo '</h5>';
    } else {
        if ($alive_days == 0) {
            $alive_days = UNLIMITED;
        }
        echo '<h5 class="geodir_information">';
        if (!isset($_REQUEST['pid']) || $_REQUEST['pid'] == '') {
            printf(GOING_TO_FREE_MSG, $type_title, $alive_days);
        } else {
            printf(GOING_TO_UPDATE_MSG, geodir_get_currency_sym() . $payable_amount, $alive_days, $type_title);
        }
        echo '</h5>';
    }
    echo $form_message = ob_get_clean();
    /* -------- END LISTING FORM MESSAGE*/
    /* -------- START LISTING FORM PAYMENT OPTIONS*/
    ob_start();
    ?>
		<input type="hidden" name="price_select" value="<?php 
    if (isset($package_id)) {
        echo $package_id;
    }
    ?>
" />
		<input type="hidden" name="coupon_code" value="<?php 
    if (isset($_REQUEST['coupon_code'])) {
        echo $_REQUEST['coupon_code'];
    }
    ?>
" />
		<?php 
    if ($payable_amount > 0) {
        if ($sub_active) {
            $sub_m_arr = apply_filters('geodir_subscription_methods', array('payment_method_paypal'));
            $method_names = implode(',', array_fill(0, count($sub_m_arr), '%s'));
            $paymentsql = $wpdb->prepare("select * from {$wpdb->options} where option_name in ({$method_names}) order by option_id", $sub_m_arr);
        } else {
            $paymentsql = $wpdb->prepare("select * from {$wpdb->options} where option_name like %s order by option_id", array('payment_method_%'));
        }
        $paymentinfo = $wpdb->get_results($paymentsql);
        if ($paymentinfo) {
            ?>
			
			<h5 class="geodir_payment_head"> <?php 
            echo SELECT_PAY_MEHTOD_TEXT;
            ?>
</h5>
			<ul class="geodir_payment_method">
			
			<?php 
            $paymentOptionArray = array();
            $paymethodKeyarray = array();
            foreach ($paymentinfo as $paymentinfoObj) {
                $paymentInfo = unserialize($paymentinfoObj->option_value);
                if ($paymentInfo['isactive']) {
                    $paymethodKeyarray[] = $paymentInfo['key'];
                    $paymentOptionArray[$paymentInfo['display_order']][] = $paymentInfo;
                }
            }
            ksort($paymentOptionArray);
            if ($paymentOptionArray) {
                $poa = 0;
                foreach ($paymentOptionArray as $key => $paymentInfoval) {
                    $poa++;
                    for ($i = 0; $i < count($paymentInfoval); $i++) {
                        $paymentInfo = $paymentInfoval[$i];
                        $jsfunction = 'onclick="showoptions(this.value);"';
                        $chked = '';
                        if ($poa == 1) {
                            $chked = 'checked="checked"';
                        }
                        ?>
<li id="<?php 
                        echo $paymentInfo['key'];
                        ?>
">
							<input <?php 
                        echo $jsfunction;
                        ?>
  type="radio" value="<?php 
                        echo $paymentInfo['key'];
                        ?>
" id="<?php 
                        echo $paymentInfo['key'];
                        ?>
_id" name="paymentmethod" <?php 
                        echo $chked;
                        ?>
 />  <?php 
                        echo $paymentInfo['name'];
                        ?>
							<?php 
                        if (file_exists(GEODIR_PAYMENT_MANAGER_PATH . $paymentInfo['key'] . '/' . $paymentInfo['key'] . '.php')) {
                            include_once GEODIR_PAYMENT_MANAGER_PATH . $paymentInfo['key'] . '/' . $paymentInfo['key'] . '.php';
                        }
                        ?>
 
						</li><?php 
                    }
                }
                if (isset($paymethodKeyarray)) {
                    ?>
			<script type="application/x-javascript">
			
			
			
			jQuery(document).ready(function($){
	
				var submit_button = $('#publish_listing .geodir_publish_button');
				submit_button.on('click', function(event){
		
				var payment_method 	= $('#publish_listing input[name="paymentmethod"]:checked').val();
				
				if( payment_method === 'authorizenet' ) {
					
					if($('#cardholder_name').val()==''){
						alert('<?php 
                    _e('Please enter Cardholder name', GEODIRPAYMENT_TEXTDOMAIN);
                    ?>
');return false;
					}

					
					if($('#cc_number').val()==''){
						alert('<?php 
                    _e('Please enter card number', GEODIRPAYMENT_TEXTDOMAIN);
                    ?>
');return false;
					}
					
					if($('#cc_month').val()=='' || $('#cc_year').val()=='' ){
						alert('<?php 
                    _e('Please enter expire date', GEODIRPAYMENT_TEXTDOMAIN);
                    ?>
');return false;
					}
					
					return true;
					
				}else { 
					return true;
				}
		
			  });
			});
									   
									   
							function showoptions(paymethod){
					<?php 
                    for ($i = 0; $i < count($paymethodKeyarray); $i++) {
                        ?>
	
							showoptvar = '<?php 
                        echo $paymethodKeyarray[$i];
                        ?>
options';
							if(eval(document.getElementById(showoptvar)))
							{
								document.getElementById(showoptvar).style.display = 'none';
								if(paymethod=='<?php 
                        echo $paymethodKeyarray[$i];
                        ?>
')
								{ document.getElementById(showoptvar).style.display = ''; }
							}
						
						<?php 
                    }
                    ?>
				}
				
							<?php 
                    for ($i = 0; $i < count($paymethodKeyarray); $i++) {
                        ?>
						if(document.getElementById('<?php 
                        echo $paymethodKeyarray[$i];
                        ?>
_id').checked)
						{ showoptions(document.getElementById('<?php 
                        echo $paymethodKeyarray[$i];
                        ?>
_id').value);}
							<?php 
                    }
                    ?>
			</script>  
			 
			<?php 
                }
            } else {
                ?>
<li><?php 
                echo NO_PAYMENT_METHOD_MSG;
                ?>
</li>
				<?php 
            }
            ?>
			</ul>
			<?php 
        }
    }
    echo $html = ob_get_clean();
    /* -------- END LISTING FORM PAYMENT OPTIONS*/
    /* -------- START LISTING FORM BUTTON*/
    ob_start();
    if ((!isset($_REQUEST['pid']) || $_REQUEST['pid'] == '') && $payable_amount == 0) {
        ?>
 <input type="submit" name="Submit and Pay" value="<?php 
        echo PRO_SUBMIT_BUTTON;
        ?>
" class="geodir_button geodir_publish_button" /><?php 
    } elseif (isset($_REQUEST['pid']) && $_REQUEST['pid'] != '' && $payable_amount == 0) {
        ?>
 <input type="submit" name="Submit and Pay" value="<?php 
        echo PRO_UPDATE_BUTTON;
        ?>
" class="geodir_button geodir_publish_button" /><?php 
    } elseif (isset($_REQUEST['package_id']) && $_REQUEST['package_id'] != '' && $payable_amount > 0 && (!isset($_REQUEST['pid']) || $_REQUEST['pid'] == '')) {
        ?>
<input type="submit" name="Submit and Pay" value="<?php 
        echo PRO_SUBMIT_PAY_BUTTON;
        ?>
" class=" geodir_button geodir_publish_button" /><?php 
    } elseif (isset($_REQUEST['package_id']) && $_REQUEST['package_id'] != '' && $org_payable_amount > 0 && (isset($_REQUEST['pid']) || $_REQUEST['pid'] != '')) {
        $post_status = get_post_status($_REQUEST['pid']);
        if ($post_status == 'draft') {
            ?>
<input type="submit" name="Submit and Pay" value="<?php 
            echo PRO_RENEW_BUTTON;
            ?>
" class="geodir_button geodir_publish_button" /><?php 
        } else {
            ?>
<input type="submit" name="Submit and Pay" value="<?php 
            echo PRO_UPGRADE_BUTTON;
            ?>
" class="geodir_button geodir_publish_button" /><?php 
        }
    }
    echo $listing_form_button = ob_get_clean();
    /* -------- END LISTING FORM BUTTON*/
    /* -------- START LISTING GO BACK LINK*/
    $post_id = '';
    if (isset($post->pid)) {
        $post_id = $post->pid;
    } elseif (isset($_REQUEST['pid'])) {
        $post_id = $_REQUEST['pid'];
    }
    if (isset($_REQUEST['add_listing_page_id'])) {
        $page_id = $_REQUEST['add_listing_page_id'];
    } else {
        $page_id = get_option('geodir_add_listing_page');
    }
    //$postlink = get_permalink( $page_id );
    $postlink = get_permalink(geodir_add_listing_page_id());
    $postlink = geodir_getlink($postlink, array('pid' => $post_id, 'backandedit' => '1', 'listing_type' => $post_type), false);
    if (isset($_REQUEST['package_id']) && $_REQUEST['package_id'] != '') {
        $postlink = geodir_getlink($postlink, array('package_id' => $_REQUEST['package_id']), false);
    }
    ob_start();
    ?>
			<a href="<?php 
    echo $postlink;
    ?>
" class="geodir_goback" ><?php 
    echo PRO_BACK_AND_EDIT_TEXT;
    ?>
</a>
			<input type="button" name="Cancel" value="<?php 
    echo PRO_CANCEL_BUTTON;
    ?>
" class="geodir_button cancle_button"  onclick="window.location.href='<?php 
    echo geodir_get_ajax_url() . '&geodir_ajax=add_listing&ajax_action=cancel&pid=' . $post_id . '&listing_type=' . $post_type;
    ?>
'" />
		<?php 
    echo $listing_form_go_back = ob_get_clean();
}