public static function get_finance_recurring_items($hook, $search) { /** * next_due_date * url * type (i or e) * amount * currency_id * days * months * years * last_transaction_finance_id * account_name * categories * finance_recurring_id */ // find any unpaid invoices. $invoices = self::get_invoices(array('date_paid' => '0000-00-00')); $return = array(); foreach ($invoices as $invoice) { // filter out invoices that haven't been sent yet? probably should... //$invoice = self::get_invoice($invoice['invoice_id']); if (isset($invoice['date_cancel']) && $invoice['date_cancel'] != '0000-00-00') { continue; } // check if this invoice is part of a subscription, put in some additional info for this subscriptions // 'recurring_text' if ($invoice['member_id']) { $member_name = module_member::link_open($invoice['member_id'], true); } else { if ($invoice['customer_id']) { $member_name = module_customer::link_open($invoice['customer_id'], true); } else { $member_name = _l('N/A'); } } $recurring_text = _l('Payment from %s', $member_name); if (class_exists('module_subscription', false) && isset($invoice['invoice_subscription_ids'])) { $sql = "SELECT sh.*, s.name FROM `" . _DB_PREFIX . "subscription_history` sh LEFT JOIN `" . _DB_PREFIX . "subscription` s USING (subscription_id) WHERE sh.invoice_id = " . (int) $invoice['invoice_id'] . ""; $res = qa1($sql); if ($res) { $subscription_name = module_subscription::link_open($res['subscription_id'], true, $res); $recurring_text = _l('Payment from %s on subscription %s', $member_name, $subscription_name); } } if (!isset($invoice['c_total_amount_due'])) { $invoice = module_invoice::get_invoice($invoice['invoice_id']); $invoice['c_total_amount_due'] = $invoice['total_amount_due']; } $return[$invoice['invoice_id']] = array('next_due_date' => $invoice['date_due'] && $invoice['date_due'] != '0000-00-00' ? $invoice['date_due'] : $invoice['date_created'], 'url' => module_invoice::link_open($invoice['invoice_id'], true, $invoice), 'type' => 'i', 'amount' => $invoice['c_total_amount_due'], 'currency_id' => $invoice['currency_id'], 'days' => 0, 'months' => 0, 'years' => 0, 'last_transaction_finance_id' => 0, 'account_name' => '', 'categories' => '', 'finance_recurring_id' => 0, 'recurring_text' => $recurring_text); } // find any automatically renewing invoices. $invoices = self::get_invoices(array('renewing' => 1)); foreach ($invoices as $invoice) { // filter out invoices that haven't been sent yet? probably should... //$invoice = self::get_invoice($invoice['invoice_id']); if (isset($invoice['date_cancel']) && $invoice['date_cancel'] != '0000-00-00') { continue; } // check if this invoice is part of a subscription, put in some additional info for this subscriptions // 'recurring_text' if ($invoice['member_id']) { $member_name = module_member::link_open($invoice['member_id'], true); } else { if ($invoice['customer_id']) { $member_name = module_customer::link_open($invoice['customer_id'], true); } else { $member_name = _l('N/A'); } } if ($invoice['renew_auto']) { $recurring_text = _l('Automatically Renewing invoice for %s', $member_name); } else { $recurring_text = _l('Manually Renewing invoice for %s', $member_name); } if (!isset($invoice['c_total_amount'])) { $invoice = module_invoice::get_invoice($invoice['invoice_id']); $invoice['c_total_amount'] = $invoice['total_amount']; } $return[] = array('next_due_date' => date('Y-m-d', strtotime('+' . module_config::c('invoice_due_days', 30) . ' days', strtotime($invoice['date_renew']))), 'url' => module_invoice::link_open($invoice['invoice_id'], true, $invoice), 'type' => 'i', 'amount' => $invoice['c_total_amount'], 'currency_id' => $invoice['currency_id'], 'days' => 0, 'months' => 0, 'years' => 0, 'last_transaction_finance_id' => 0, 'account_name' => '', 'categories' => '', 'finance_recurring_id' => 0, 'recurring_text' => $recurring_text); } return $return; }
public static function get_finance_recurring_items($hook, $search) { /** * next_due_date * url * type (i or e) * amount * currency_id * days * months * years * last_transaction_finance_id * account_name * categories * finance_recurring_id */ // find list of all members. // then go through and fine list of all upcoming subscription payments. // add these ones (and future ones up to (int)module_config::c('finance_recurring_months',6) months from todays date. $end_date = isset($search['date_to']) && !empty($search['date_to']) ? strtotime(input_date($search['date_to'])) : strtotime("+" . (int) module_config::c('finance_recurring_months', 6) . ' months'); /*$sql = "SELECT s.*, sm.*"; $sql .= " FROM `"._DB_PREFIX."subscription_member` sm "; $sql .= " LEFT JOIN `"._DB_PREFIX."subscription` s USING (subscription_id)"; $sql .= " WHERE sm.`deleted` = 0"; $members = qa($sql); $sql = "SELECT s.*, sc.*"; $sql .= " FROM `"._DB_PREFIX."subscription_customer` sc "; $sql .= " LEFT JOIN `"._DB_PREFIX."subscription` s USING (subscription_id)"; $sql .= " WHERE sc.`deleted` = 0"; $customers = qa($sql); $items = array_merge($members,$customers);*/ //$members = module_member::ge $sql = "SELECT s.*, so.*"; $sql .= " FROM `" . _DB_PREFIX . "subscription_owner` so "; $sql .= " LEFT JOIN `" . _DB_PREFIX . "subscription` s USING (subscription_id)"; $sql .= " WHERE so.`deleted` = 0"; $sql .= " GROUP BY `owner_table`, `owner_id`"; $items = qa($sql); //$members = module_member::get_members(array()); $return = array(); foreach ($items as $member) { $subscriptions = module_subscription::get_subscriptions_by($member['owner_table'], $member['owner_id']); /*if(isset($member['member_id']) && $member['member_id']){ }else if(isset($member['customer_id']) && $member['customer_id']){ $subscriptions = module_subscription::get_subscriptions_by_customer($member['customer_id']); }else{ $subscriptions = array(); }*/ foreach ($subscriptions as $subscription) { $time = strtotime($subscription['next_generation_date'] ? $subscription['next_generation_date'] : $subscription['next_due_date']); if (!$time) { continue; } switch ($member['owner_table']) { case 'customer': $type = 'customer'; $member_name = module_customer::link_open($member['owner_id'], true); $subscription_invoices = self::get_subscription_history($subscription['subscription_id'], $member['owner_table'], $member['owner_id']); break; case 'website': $type = 'website'; $member_name = module_website::link_open($member['owner_id'], true); $subscription_invoices = self::get_subscription_history($subscription['subscription_id'], $member['owner_table'], $member['owner_id']); break; case 'member': $type = 'member'; $member_name = module_member::link_open($member['owner_id'], true); $subscription_invoices = self::get_subscription_history($subscription['subscription_id'], $member['owner_table'], $member['owner_id']); break; default: $subscription_invoices = array(); $member_name = 'unknown2'; $type = 'unknown2'; } $subscription_name = module_subscription::link_open($subscription['subscription_id'], true); foreach ($subscription_invoices as $subscription_invoice_id => $subscription_invoice) { if ($subscription_invoice['invoice_id']) { $subscription_invoices[$subscription_invoice_id] = array_merge($subscription_invoice, module_invoice::get_invoice($subscription_invoice['invoice_id'], 2)); } } $original = true; $c = 0; while ($time < $end_date) { if ($c++ > 200) { break; } $next_time = 0; if (!$subscription['days'] && !$subscription['months'] && !$subscription['years']) { // it's a once off.. // add it to the list but dont calculate the next one. } else { if (!$original) { // work out when the next one will be. $next_time = self::_calculate_next_time($time, $subscription); $time = $next_time; } else { $original = false; // it's the original one. $next_time = $time; } } if ($next_time) { // don't show it here if an invoice has already been generated. // because invoice will already be in the list as outstanding foreach ($subscription_invoices as $subscription_invoice) { if (isset($subscription_invoice['date_create']) && $subscription_invoice['date_create'] == date('Y-m-d', $next_time)) { //echo 'match'; continue 2; } } $return[] = array('next_due_date' => date('Y-m-d', $next_time), 'url' => _l('Subscription: %s', $member_name), 'type' => 'i', 'amount' => $subscription['amount'], 'currency_id' => $subscription['currency_id'], 'days' => $subscription['days'], 'months' => $subscription['months'], 'years' => $subscription['years'], 'last_transaction_finance_id' => 0, 'account_name' => '', 'categories' => '', 'finance_recurring_id' => 0, 'last_transaction_text' => '(see member page)', 'end_date' => '0000-00-00', 'start_date' => $subscription['start_date'], 'recurring_text' => _l('Payment from %s %s on subscription %s', $type, $member_name, $subscription_name)); } } } } return $return; }
<form action="" method="post"> <?php $search_bar = array('elements' => array('name' => array('title' => _l('Names, Phone or Email:'), 'field' => array('type' => 'text', 'name' => 'search[generic]', 'value' => isset($search['generic']) ? $search['generic'] : '')))); if (class_exists('module_group', false) && module_member::can_i('view', 'Member Groups')) { $search_bar['elements']['group'] = array('title' => _l('Group:'), 'field' => array('type' => 'select', 'name' => 'search[group_id]', 'value' => isset($search['group_id']) ? $search['group_id'] : '', 'options' => module_group::get_groups('member'), 'options_array_id' => 'name')); } if (class_exists('module_newsletter', false)) { $search_bar['elements']['group'] = array('title' => _l('Newsletter:'), 'field' => array('type' => 'select', 'name' => 'search[group_id2]', 'value' => isset($search['group_id2']) ? $search['group_id2'] : '', 'options' => module_group::get_groups('newsletter_subscription'), 'options_array_id' => 'name')); } echo module_form::search_bar($search_bar); $table_manager = module_theme::new_table_manager(); $columns = array(); $columns['member_name'] = array('title' => 'Member Name', 'callback' => function ($member) { echo module_member::link_open($member['member_id'], true); }, 'cell_class' => 'row_action'); $columns['member_business'] = array('title' => 'Business', 'callback' => function ($member) { echo htmlspecialchars($member['business']); }); $columns['member_phone'] = array('title' => 'Phone', 'callback' => function ($member) { echo htmlspecialchars($member['phone']); }); $columns['member_mobile'] = array('title' => 'Mobile', 'callback' => function ($member) { echo htmlspecialchars($member['mobile']); }); $columns['member_email'] = array('title' => 'Email Address', 'callback' => function ($member) { echo htmlspecialchars($member['email']); }); if (class_exists('module_subscription', false)) { $columns['member_subscription'] = array('title' => 'Subscription', 'callback' => function ($member) {
foreach ($total_unpaid as $id => $t) { $total_unpaid[$id] = dollar($t, true, $id); } ?> <tr> <td><?php switch ($subscribed_customer['owner_table']) { case 'customer': echo module_customer::link_open($subscribed_customer['owner_id'], true); break; case 'website': echo module_website::link_open($subscribed_customer['owner_id'], true); break; case 'member': echo module_member::link_open($subscribed_customer['owner_id'], true); break; } ?> </td> <td><?php echo print_date($subscribed_customer['start_date']); ?> </td> <td><?php echo print_date($subscribed_customer['next_due_date']); ?> </td> <td> <?php echo count($history);
</td> <td> <?php $total_members += count($subscription_report['members']); echo count($subscription_report['members']); ?> <br/> <ul> <?php foreach ($subscription_report['members'] as $member_id => $member_data) { ?> <li> <?php echo module_member::link_open($member_id, true); ?> (<?php echo $member_data['received_payments'] . ' = ' . dollar($member_data['received_total']); ?> ) <?php if ($member_data['unpaid_payments'] > 0) { ?> <strong><?php echo $member_data['unpaid_payments']; ?> UNPAID! = <?php echo dollar($member_data['unpaid_total']); ?>
* Package Date: 2015-11-25 02:55:20 * IP Address: 67.79.165.254 */ if ($subscription['subscription_owner_id']) { $subscription_owner = get_single('subscription_owner', 'subscription_owner_id', $subscription['subscription_owner_id']); if (count($subscription_owner)) { ob_start(); ?> <table border="0" cellspacing="0" cellpadding="2" class="tableclass tableclass_form tableclass_full"> <tbody> <tr> <td> <?php switch ($subscription_owner['owner_table']) { case 'member': $member_name = module_member::link_open($subscription_owner['owner_id'], true); break; case 'website': $member_name = module_website::link_open($subscription_owner['owner_id'], true); break; case 'customer': $member_name = module_customer::link_open($subscription_owner['owner_id'], true); break; } $subscription_name = module_subscription::link_open($subscription['subscription_id'], true); _e('This is a subscription payment for %s %s on the subscription: %s', $subscription_owner['owner_table'], $member_name, $subscription_name); ?> </td> </tr> </tbody> </table>