/**
  * Creates a transaction
  *
  * @since 	1.3
  * @param 	arr		$data Array of attributes for a transaction. See $defaults.
  * @return	mixed	false if data isn't passed and class not instantiated for creation, or New Transaction ID
  */
 public function create($data = array(), $meta = array())
 {
     if ($this->id != 0) {
         return false;
     }
     remove_action('save_post_mdjm-transaction', 'mdjm_save_txn_post', 10, 3);
     $default_data = array('post_type' => 'mdjm-transaction', 'post_status' => 'mdjm-income', 'post_title' => __('New Transaction', 'mobile-dj-manager'), 'post_content' => '');
     $default_meta = array('_mdjm_txn_source' => mdjm_get_option('default_type', __('Cash')), '_mdjm_txn_currency' => mdjm_get_currency(), '_mdjm_txn_status' => 'Pending');
     $data = wp_parse_args($data, $default_data);
     $meta = wp_parse_args($meta, $default_meta);
     do_action('mdjm_pre_txn_create', $data, $meta);
     $id = wp_insert_post($data, true);
     if (is_wp_error($id)) {
         MDJM()->debug->log_it('ERROR: ' . $id->get_error_message());
     }
     $txn = WP_Post::get_instance($id);
     if ($txn) {
         mdjm_update_txn_meta($txn->ID, $meta);
         wp_update_post(array('ID' => $id, 'post_title' => mdjm_get_option('event_prefix') . $id, 'post_name' => mdjm_get_option('event_prefix') . $id));
     }
     do_action('mdjm_post_txn_create', $id, $data, $meta);
     add_action('save_post_mdjm-transaction', 'mdjm_save_txn_post', 10, 3);
     return $this->setup_txn($txn);
 }
/**
 * Mark an event employee as paid.
 *
 * @since	1.3
 * @param	int		$employee_id	User ID of employee
 * @param	int		$event_id		Event ID
 * @param	int		$txn_id			The transaction ID associated with this payment.
 * @return	bool	True if payment data updated for event employee, otherwise false.
 */
function mdjm_set_employee_paid($employee_id, $event_id, $txn_id = '')
{
    global $wp_roles;
    if (!mdjm_get_option('enable_employee_payments')) {
        return;
    }
    if (!mdjm_is_employee($employee_id)) {
        return false;
    }
    $return = false;
    if ($employee_id == mdjm_get_event_primary_employee($event_id)) {
        /**
         *
         * Hook fires before marking event employee as paid.
         *
         * @since	1.3
         * @param	int	$event_id	The event ID.
         */
        do_action("mdjm_pre_mdjm_set_employee_paid_{$employee_id}", $event_id);
        $role = 'dj';
        $payment = mdjm_get_txn_price($txn_id);
        $payment_data = get_post_meta($event_id, '_mdjm_event_dj_payment_status', true);
        $payment_data['payment_status'] = mdjm_get_employees_event_wage($event_id, $employee_id) > $payment ? 'part-paid' : 'paid';
        $payment_data['payment_date'] = current_time('mysql');
        $payment_data['txn_id'] = $txn_id;
        $payment_data['payment_amount'] = $payment;
        $payment_update = update_post_meta($event_id, '_mdjm_event_dj_payment_status', $payment_data);
        if (!empty($payment_update)) {
            MDJM()->debug->log_it(sprintf('%s successfully paid %s for Event %d', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_get_txn_price($txn_id)), $event_id));
            $return = true;
        } else {
            MDJM()->debug->log_it(sprintf('Unable to pay %s for Event %d', mdjm_get_employee_display_name($employee_id), $event_id));
            $return = false;
        }
    } else {
        $payment_data = get_post_meta($event_id, '_mdjm_event_employees_data', true);
        if (!mdjm_employee_working_event($event_id, $employee_id)) {
            MDJM()->debug->log_it('Employee not working this event');
            return false;
        } else {
            /**
             *
             * Hook fires before marking event employee as paid.
             *
             * @since	1.3
             * @param	int	$event_id	The event ID.
             */
            do_action("mdjm_pre_mdjm_set_employee_paid_{$employee_id}", $event_id);
            $role = $payment_data[$employee_id]['role'];
            $payment = mdjm_get_txn_price($payment_data[$employee_id]['txn_id']);
            $payment_data[$employee_id]['payment_status'] = mdjm_get_employees_event_wage($event_id, $employee_id) > $payment ? 'part-paid' : 'paid';
            $payment_data[$employee_id]['payment_date'] = current_time('mysql');
            $payment_data[$employee_id]['payment_amount'] = $payment;
            $payment_update = mdjm_update_txn_meta($payment_data[$employee_id]['txn_id'], array('_mdjm_txn_status' => 'Completed'));
            if (!empty($payment_update)) {
                $payment_update = update_post_meta($event_id, '_mdjm_event_employees_data', $payment_data);
            }
            if (!empty($payment_update)) {
                MDJM()->debug->log_it(sprintf('%s successfully paid %s for Event %d', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_get_txn_price($txn_id)), $event_id));
                $return = true;
            } else {
                MDJM()->debug->log_it(sprintf('Unable to pay %s for Event %d', mdjm_get_employee_display_name($employee_id), $event_id));
                $return = false;
            }
        }
    }
    if (!empty($return)) {
        $journal_args = array('user_id' => 1, 'event_id' => $event_id, 'comment_content' => sprintf(__('Employee %s paid %s for their role as %s', 'mobile-dj-manager'), mdjm_get_employee_display_name($employee_id), $payment, translate_user_role($wp_roles->roles[$role]['name'])));
        $journal_meta = array('mdjm_visibility' => !empty($meta['visibility']) ? $meta['visibility'] : '2');
        mdjm_add_journal($journal_args, $journal_meta);
        /**
         *
         * Hook fires after successfully marking event employee as paid.
         *
         * @since	1.3
         * @param	int	$event_id	The event ID.
         * @param	int	$txn_id		The transaction ID associated with the payment
         */
        do_action("mdjm_post_mdjm_set_employee_paid_{$employee_id}", $event_id, $txn_id);
    }
    return $return;
}
Beispiel #3
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 event employees salaries as paid.
 *
 * @since	1.3
 * @param	int		$event_id		The event ID.
 * @param	int		$_employee_id	User ID of employee to pay.
 * @param	str		$amount			Amount to pay.
 * @return	mixed	Array of 'success' and 'failed' payments or if individual employee, true or false.
 */
function mdjm_pay_event_employees($event_id, $_employee_id = 0, $amount = 0)
{
    if (!mdjm_get_option('enable_employee_payments')) {
        return;
    }
    $mdjm_event = mdjm_get_event($event_id);
    if (!$mdjm_event) {
        return false;
    }
    $employees = $mdjm_event->get_all_employees();
    if (!$employees) {
        return false;
    }
    do_action('mdjm_pre_pay_event_employees', $event_id, $_employee_id, $mdjm_event);
    foreach ($employees as $employee_id => $employee_data) {
        if ($employee_data['payment_status'] == 'paid') {
            MDJM()->debug->log_it(sprintf('Skipping payment to %s. Employee already paid.', mdjm_get_employee_display_name($employee_id)));
        }
        $mdjm_txn = new MDJM_Txn($employee_data['txn_id']);
        if (!$mdjm_txn) {
            return false;
        }
        MDJM()->debug->log_it(sprintf('Starting payment to %s for %s', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_format_amount($mdjm_txn->price))), true);
        if (!mdjm_set_employee_paid($employee_id, $event_id, $mdjm_txn->ID)) {
            MDJM()->debug->log_it(sprintf('Payment to %s failed', mdjm_get_employee_display_name($employee_id)));
            if (!empty($_employee_id)) {
                $return = false;
            } else {
                $return['failed'] = $employee_id;
            }
        } else {
            MDJM()->debug->log_it(sprintf('%s successfully paid %s', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_format_amount($mdjm_txn->price))));
            mdjm_update_txn_meta($mdjm_txn->ID, array('_mdjm_txn_status' => 'Completed'));
            if (!empty($_employee_id)) {
                $return = true;
            } else {
                $return['success'] = $employee_id;
            }
        }
    }
    do_action('mdjm_post_pay_event_employees', $event_id, $_employee_id, $mdjm_event, $mdjm_txn->ID);
    return $return;
}