/** * 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; }
/** * 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; }