/**
 * Log the primary employees payment settings and update if employee or wage changes.
 *
 * @since	1.3
 * @param	int			$event_id	Event ID.
 * @param	arr			$old_meta	Old meta values from before event save.
 * @param	arr			$new_meta	New meta values after event save.
 * @return	void
 */
function mdjm_manage_primary_employee_payment_status($event_id, $old_meta, $new_meta)
{
    if (!mdjm_get_option('enable_employee_payments')) {
        return;
    }
    $mdjm_event = new MDJM_Event($event_id);
    $employee_id = $mdjm_event->get_employee();
    if (empty($employee_id)) {
        return;
    }
    $payment_amount = mdjm_get_employees_event_wage($event_id, $employee_id);
    $payment_status = get_post_meta($event_id, '_mdjm_event_dj_payment_status', true);
    if (empty($payment_status)) {
        if (empty($payment_amount) || $payment_amount < 1) {
            return;
        }
        $mdjm_txn = new MDJM_Txn();
        $mdjm_txn->create(array('post_title' => sprintf(__('Wage payment to %s for %d', 'mobile-dj-manager'), mdjm_get_employee_display_name($employee_id), $event_id), 'post_status' => 'mdjm-expenditure', 'post_author' => 1, 'post_parent' => $event_id), array('_mdjm_txn_status' => 'Pending', '_mdjm_payment_to' => $employee_id, '_mdjm_txn_total' => $payment_amount));
        if (!empty($mdjm_txn)) {
            $data['txn_id'] = $mdjm_txn->ID;
        }
        mdjm_set_txn_type($mdjm_txn->ID, mdjm_get_txn_cat_id('slug', 'mdjm-employee-wages'));
        $payment_data = array('payment_status' => 'unpaid', 'payment_date' => '', 'txn_id' => $mdjm_txn->ID, 'payment_amount' => '');
        update_post_meta($event_id, '_mdjm_event_dj_payment_status', $payment_data);
    } else {
        if ($payment_status['payment_status'] == 'paid') {
            return;
        }
        if (in_array($mdjm_event->post_status, array('mdjm-cancelled', 'mdjm-rejected', 'mdjm-failed'))) {
            update_post_meta($mdjm_txn->ID, '_mdjm_txn_status', 'Cancelled');
        }
        $mdjm_txn = new MDJM_Txn($payment_status['txn_id']);
        if ($mdjm_txn->recipient_id != $employee_id) {
            update_post_meta($mdjm_txn->ID, '_mdjm_payment_to', $employee_id);
        }
        if ($payment_amount != $mdjm_txn->price) {
            update_post_meta($mdjm_txn->ID, '_mdjm_txn_total', $payment_amount);
        }
    }
}
Example #2
0
/**
 * Records the merchant fee transaction.
 *
 * @since	1.0
 * @param	arr		$gateway_data	Transaction data received from the gateway.
 * @return	void
 */
function mdjm_create_merchant_fee_txn($gateway_data)
{
    if (isset($gateway_data['gateway'])) {
        $gateway = mdjm_get_gateway_payment_label($gateway_data['gateway']);
    } else {
        $gateway = mdjm_get_gateway_payment_label(mdjm_get_default_gateway());
    }
    if (!isset($gateway_data['fee']) || $gateway_data['fee'] < '0.01') {
        return;
    }
    $txn_data = apply_filters('mdjm_merchant_fee_transaction_data', array('post_author' => mdjm_get_event_client_id($gateway_data['event_id']), 'post_type' => 'mdjm-transaction', 'post_title' => sprintf(__('%s Merchant Fee for Transaction %s', 'mobile-dj-manager'), $gateway, $gateway_data['txn_id']), 'post_status' => 'mdjm-expenditure', 'post_parent' => $gateway_data['event_id']));
    $txn_meta = apply_filters('mdjm_merchant_fee_transaction_meta', array('_mdjm_txn_status' => 'Completed', '_mdjm_txn_source' => $gateway, '_mdjm_txn_currency' => $gateway_data['currency'], '_mdjm_txn_total' => $gateway_data['fee'], '_mdjm_payment_to' => $gateway));
    do_action('mdjm_before_create_merchant_fee', $gateway_data, $txn_data, $txn_meta);
    $mdjm_txn = new MDJM_Txn();
    $mdjm_txn->create($txn_data, $txn_meta);
    $merchant_fee_id = $mdjm_txn->ID;
    if (!empty($merchant_fee_id)) {
        mdjm_set_txn_type($mdjm_txn->ID, mdjm_get_txn_cat_id('slug', 'mdjm-merchant-fees'));
        // Update the incoming transaction meta to include the merchant txn ID.
        mdjm_update_txn_meta($gateway_data['txn_id'], array('_mdjm_merchant_fee_txn_id' => $merchant_fee_id));
    }
    do_action('mdjm_after_create_merchant_fee', $merchant_fee_id, $gateway_data);
}
/**
 * Mark the event balance as paid.
 *
 * Determines if any balance remains and if so, assumes it has been paid and
 * creates an associted transaction.
 *
 * @since	1.3
 * @param	int		$event_id	The event ID.
 * @return	void
 */
function mdjm_mark_event_balance_paid($event_id)
{
    $mdjm_event = new MDJM_Event($event_id);
    $txn_id = 0;
    if ('Paid' == $mdjm_event->get_balance_status()) {
        return;
    }
    $remaining = $mdjm_event->get_balance();
    do_action('mdjm_pre_mark_event_balance_paid', $event_id, $remaining);
    if (!empty($remaining) && $remaining > 0) {
        $mdjm_txn = new MDJM_Txn();
        $txn_meta = array('_mdjm_txn_source' => mdjm_get_option('default_type', __('Cash', 'mobile-dj-manager')), '_mdjm_txn_currency' => mdjm_get_currency(), '_mdjm_txn_status' => 'Completed', '_mdjm_txn_total' => $remaining, '_mdjm_payer_firstname' => mdjm_get_client_firstname($mdjm_event->client), '_mdjm_payer_lastname' => mdjm_get_client_lastname($mdjm_event->client), '_mdjm_payer_email' => mdjm_get_client_email($mdjm_event->client), '_mdjm_payment_from' => mdjm_get_client_display_name($mdjm_event->client));
        $mdjm_txn->create(array('post_parent' => $event_id), $txn_meta);
        if ($mdjm_txn->ID > 0) {
            mdjm_set_txn_type($mdjm_txn->ID, mdjm_get_txn_cat_id('slug', 'mdjm-balance-payments'));
            $args = array('user_id' => get_current_user_id(), 'event_id' => $event_id, 'comment_content' => sprintf(__('%1$s payment of %2$s received and %1$s marked as paid.', 'mobile-dj-manager'), mdjm_get_balance_label(), mdjm_currency_filter(mdjm_format_amount($remaining))));
            mdjm_add_journal($args);
            mdjm_add_content_tag('payment_for', __('Reason for payment', 'mobile-dj-manager'), 'mdjm_content_tag_balance_label');
            mdjm_add_content_tag('payment_amount', __('Payment amount', 'mobile-dj-manager'), function () use($remaining) {
                return mdjm_currency_filter(mdjm_format_amount($remaining));
            });
            mdjm_add_content_tag('payment_date', __('Date of payment', 'mobile-dj-manager'), 'mdjm_content_tag_ddmmyyyy');
            do_action('mdjm_post_add_manual_txn_in', $event_id, $mdjm_txn->ID);
        }
    }
    mdjm_update_event_meta($mdjm_event->ID, array('_mdjm_event_deposit_status' => 'Paid', '_mdjm_event_balance_status' => 'Paid'));
    do_action('mdjm_post_mark_event_balance_paid', $event_id);
}