/**
  * Remove all scripts and styles from the estimate view and then add those specific to si.
  * @return
  */
 public static function remove_scripts_and_styles()
 {
     if (SI_Invoice::is_invoice_query() && is_single()) {
         if (apply_filters('si_remove_scripts_styles_on_doc_pages', '__return_true')) {
             global $wp_scripts, $wp_styles;
             $allowed_scripts = apply_filters('si_allowed_doc_scripts', array('sprout_doc_scripts', 'qtip', 'dropdown'));
             $allowed_admin_scripts = apply_filters('si_allowed_admin_doc_scripts', array_merge(array('admin-bar'), $allowed_scripts));
             if (current_user_can('edit_sprout_invoices')) {
                 $wp_scripts->queue = $allowed_admin_scripts;
             } else {
                 $wp_scripts->queue = $allowed_scripts;
             }
             $allowed_styles = apply_filters('si_allowed_doc_styles', array('sprout_doc_style', 'qtip', 'dropdown'));
             $allowed_admin_styles = apply_filters('si_allowed_admin_doc_styles', array_merge(array('admin-bar'), $allowed_styles));
             if (current_user_can('edit_sprout_invoices')) {
                 $wp_styles->queue = $allowed_admin_styles;
             } else {
                 $wp_styles->queue = $allowed_styles;
             }
             do_action('si_doc_enqueue_filtered');
         } else {
             // scripts
             wp_enqueue_script('sprout_doc_scripts');
             wp_enqueue_script('dropdown');
             wp_enqueue_script('qtip');
             // Styles
             wp_enqueue_style('sprout_doc_style');
             wp_enqueue_style('dropdown');
             wp_enqueue_style('qtip');
         }
     }
 }
Пример #2
0
function _change_woo_si_invoice_due_date($order_id = 0, $invoice_id = 0)
{
    $invoice = SI_Invoice::get_instance($invoice_id);
    $due_date = time() + 86400 * 5;
    // "5" is the days from now it will be due
    $invoice->set_due_date($due_date);
}
Пример #3
0
 public static function invoice_embed($atts = array())
 {
     do_action('sprout_invoices_invoice_embed');
     $invoice_id = 0;
     // Make sure id given is for an invoice
     if (isset($atts['id'])) {
         $invoice_id = (int) $atts['id'];
     }
     if (isset($_GET['si_id'])) {
         $invoice_id = (int) $_GET['si_id'];
     }
     if (SI_Invoice::POST_TYPE !== get_post_type($invoice_id)) {
         return;
     }
     // enqueue style
     self::frontend_enqueue();
     // Show snippet view or not.
     $embed_view = '';
     if (isset($atts['snippet']) && 'true' === $atts['snippet']) {
         $embed_view = '-snippet';
     }
     self::remove_actions();
     // Setup global post for filters and functions to work
     global $post;
     $post = get_post($invoice_id);
     setup_postdata($post);
     $invoice = SI_Invoice::get_instance($invoice_id);
     $line_items = $invoice->get_line_items();
     $view = self::load_addon_view_to_string('invoices/embed' . $embed_view, array('id' => $invoice_id, 'line_items' => $line_items, 'prev_type' => '', 'totals' => SI_Line_Items::line_item_totals($invoice_id)), false);
     // reset to the original post
     wp_reset_postdata();
     return $view;
 }
 public static function maybe_change_order_status(SI_Invoice $invoice, $status = '')
 {
     $order_id = get_post_meta($invoice->get_id(), self::ORDER_ID_META, true);
     if (!$order_id) {
         return;
     }
     $order = wc_get_order($order_id);
     switch ($status) {
         case SI_Invoice::STATUS_PAID:
             $order->update_status('completed', __('Invoice payment complete', 'sprout-invoices'));
             break;
         case SI_Invoice::STATUS_WO:
             $order->update_status('cancelled', __('Invoice written-off', 'sprout-invoices'));
             break;
         default:
             break;
     }
 }
 public static function save_admin_payment($post_id, $post, $callback_args, $invoice_id = null)
 {
     $invoice = SI_Invoice::get_instance($post_id);
     $amount = isset($_REQUEST['sa_metabox_payment_amount']) ? $_REQUEST['sa_metabox_payment_amount'] : 0;
     $number = isset($_REQUEST['sa_metabox_payment_transaction_id']) ? $_REQUEST['sa_metabox_payment_transaction_id'] : '';
     $date = isset($_REQUEST['sa_metabox_payment_date']) ? $_REQUEST['sa_metabox_payment_date'] : '';
     $notes = isset($_REQUEST['sa_metabox_payment_notes']) ? $_REQUEST['sa_metabox_payment_notes'] : '';
     if (!$amount) {
         return false;
     }
     self::create_admin_payment($invoice->get_id(), $amount, $number, $date, $notes);
 }
function maybe_change_invoice_status($post_id)
{
    if (!class_exists('SI_Invoice')) {
        return;
    }
    if (SI_Invoice::POST_TYPE !== get_post_type($post_id)) {
        return;
    }
    $invoice = SI_Invoice::get_instance($post_id);
    if (SI_Invoice::STATUS_TEMP === $invoice->get_status()) {
        $invoice->set_pending();
    }
}
 function setUp()
 {
     parent::setUp();
     $args = array('subject' => 'TEST');
     $this->invoice_id = SI_Invoice::create_invoice($args, SI_Invoice::STATUS_TEMP);
     $this->invoice = SI_Invoice::get_instance($this->invoice_id);
     $line_items = array();
     for ($i = 0; $i < 10; $i++) {
         $rate = rand(100, 1000);
         $qty = rand(1, 10);
         $line_items[] = array('rate' => $rate, 'qty' => $qty, 'desc' => 'This is a test line item for a test invoice.', 'type' => '', 'total' => $rate * $qty, 'tax' => 0);
     }
     $this->invoice->set_line_items($line_items);
 }
function maybe_change_invoice_id($master_invoice_id = 0, $invoice_id = 0)
{
    if (!class_exists('SI_Invoices_Recurring')) {
        return;
    }
    // master invoice
    $master_invoice = SI_Invoice::get_instance($master_invoice_id);
    $master_invoice_id = $master_invoice->get_invoice_id();
    // build id
    $clones = SI_Invoices_Recurring::get_child_clones($master_invoice_id);
    $new_id = $master_invoice_id . '-' . count($clones);
    // new invoice created
    $invoice = SI_Invoice::get_instance($invoice_id);
    $invoice->set_invoice_id($new_id);
}
Пример #9
0
 /**
  * Get the doc object
  * @param  integer $id
  * @return SI_Estimate/SI_Invoice
  */
 function si_get_doc_object($id = 0)
 {
     if (!$id) {
         $id = get_the_ID();
     }
     switch (get_post_type($id)) {
         case SI_Estimate::POST_TYPE:
             $doc = SI_Estimate::get_instance($id);
             break;
         case SI_Invoice::POST_TYPE:
             $doc = SI_Invoice::get_instance($id);
             break;
         default:
             $doc = '';
             break;
     }
     return apply_filters('si_get_doc_object', $doc);
 }
Пример #10
0
 function setUp()
 {
     parent::setUp();
     $user_args = array('user_login' => '*****@*****.**', 'display_name' => 'Unit Tester', 'user_pass' => wp_generate_password(), 'user_email' => '*****@*****.**');
     $user_id = SI_Clients::create_user($user_args);
     $args = array('company_name' => 'Test Client', 'user_id' => $user_id);
     $client_id = SI_Client::new_client($args);
     $args = array('subject' => 'TEST Payment');
     $this->invoice_id = SI_Invoice::create_invoice($args, SI_Invoice::STATUS_TEMP);
     $this->invoice = SI_Invoice::get_instance($this->invoice_id);
     $this->invoice->set_client_id($client_id);
     $line_items = array();
     for ($i = 0; $i < 10; $i++) {
         $rate = rand(100, 1000);
         $qty = rand(1, 10);
         $line_items[] = array('rate' => $rate, 'qty' => $qty, 'desc' => 'This is a test line item for a test invoice.', 'type' => '', 'total' => $rate * $qty, 'tax' => 0);
     }
     $this->invoice->set_line_items($line_items);
 }
 function build_test_payment($invoice_id, $total = 0, $date = false, $status = '')
 {
     $invoice = SI_Invoice::get_instance($invoice_id);
     // Randomize if no total is set.
     $payment_total = !$total ? rand(1, 300) : $total;
     $status = $status != '' ? $status : SI_Payment::STATUS_AUTHORIZED;
     // create new payment
     $payment_id = SI_Payment::new_payment(array('payment_method' => SI_Paypal_EC::PAYMENT_METHOD, 'invoice' => $invoice->get_id(), 'amount' => $payment_total, 'data' => array('api_response' => array())), $status);
     $this->payment_ids[] = $payment_id;
     $new_payment = SI_Payment::get_instance($payment_id);
     do_action('payment_authorized', $new_payment);
     if (!$date) {
         $date = time();
     }
     if (!is_integer($date)) {
         $date = strtotime($date);
     }
     $new_payment->set_post_date(date('Y-m-d H:i:s', $date));
     $this->assertTrue(in_array($payment_id, $this->payment_ids));
     return $payment_id;
 }
    public static function add_deposit_option($doc_id)
    {
        $context = si_get_doc_context($doc_id);
        if ('invoice' !== $context) {
            return;
        }
        $invoice = SI_Invoice::get_instance($doc_id);
        $total = is_a($invoice, 'SI_Invoice') ? $invoice->get_total() : '0.00';
        $total_payments = is_a($invoice, 'SI_Invoice') ? $invoice->get_payments_total() : '0.00';
        $deposit = is_a($invoice, 'SI_Invoice') ? $invoice->get_deposit() : '0.00';
        $status = is_a($invoice, 'SI_Invoice') && $invoice->get_status() !== 'auto-draft' ? $invoice->get_status() : SI_Invoice::STATUS_TEMP;
        if (apply_filters('show_upgrade_messaging', true, 'deposit-line-items')) {
            ?>
			<div id="deposit">
				<b title="Upgrade Sprout Invoices to enable deposits." class="helptip"><?php 
            _e('Deposit Due', 'sprout-invoices');
            ?>
</b>
				<input type="number" name="deposit" min="0" max="0" step="any" disabled="disabled">
			</div>
			<?php 
        } elseif (floatval($total - $total_payments) > 0.0 || 'auto-draft' === $status || 'temp' === $status) {
            ?>
			<div id="deposit">
				<b title="Set the amount due for the next payment&mdash;amount due will be used 0" class="helptip"><?php 
            _e('Deposit Due', 'sprout-invoices');
            ?>
</b>
				<input type="number" name="deposit" value="<?php 
            echo (double) $deposit;
            ?>
" min="0" max="<?php 
            echo floatval($total - $total_payments);
            ?>
"  step="any">
			</div>
			<?php 
        }
    }
 public static function maybe_log_invoice_view()
 {
     global $post;
     if (!is_single()) {
         return;
     }
     // Make sure this is an estimate we're viewing
     if ($post->post_type != SI_Invoice::POST_TYPE) {
         return;
     }
     // Don't log the authors views
     if ($post->post_author == get_current_user_id()) {
         return;
     }
     if (is_user_logged_in()) {
         $user = get_userdata(get_current_user_id());
         $name = $user->first_name . ' ' . $user->last_name;
         $whom = $name . ' (' . $user->user_login . ')';
     } else {
         $whom = self::get_user_ip();
     }
     if (in_array($whom, array('127.0.0.1', '::1'))) {
         return;
     }
     $invoice = SI_Invoice::get_instance($post->ID);
     $title = sprintf(__('Invoice viewed by %s for the first time.', 'sprout-invoices'), esc_html($whom));
     $found = false;
     $view_logs = SI_Record::get_records_by_type_and_association($invoice->get_id(), self::VIEWED_STATUS_UPDATE);
     foreach ($view_logs as $record_id) {
         if (!$found && $title == get_the_title($record_id)) {
             $found = true;
         }
     }
     // Record exists
     if ($found) {
         return;
     }
     do_action('si_new_record', $_SERVER, self::VIEWED_STATUS_UPDATE, $invoice->get_id(), $title);
 }
Пример #14
0
 /**
  * Filtering the payment processor currency code option based on some predefined options.
  * @param  string  $currency_code
  * @param  integer $invoice_id
  * @param  string  $payment_method
  * @return string
  */
 public static function maybe_change_currency_code($currency_code = '', $invoice_id = 0, $payment_method = '')
 {
     $invoice = SI_Invoice::get_instance($invoice_id);
     $client = $invoice->get_client();
     if (!is_wp_error($client)) {
         $client_currency = $client->get_currency();
         if ($client_currency != '') {
             $currency_code = $client_currency;
         }
     }
     return $currency_code;
 }
 /**
  * Maybe create a status update record
  * @param  SI_Estimate $estimate
  * @param  string      $status
  * @param  string      $original_status
  * @return null
  */
 public static function maybe_create_status_update_record(SI_Invoice $invoice, $status = '', $original_status = '')
 {
     do_action('si_new_record', sprintf(__('Status changed: %s to <b>%s</b>.', 'sprout-invoices'), SI_Invoice::get_status_label($original_status), SI_Invoice::get_status_label($status)), self::HISTORY_STATUS_UPDATE, $invoice->get_id(), sprintf(__('Status update for %s.', 'sprout-invoices'), $invoice->get_id()), 0, false);
 }
 public static function payment_data(SI_Payment $payment)
 {
     $payment_data = array('title' => $payment->get_title(), 'id' => $payment->get_id(), 'status' => $payment->get_status(), 'payment_method' => $payment->get_payment_method(), 'amount' => $payment->get_amount(), 'invoice_id' => $payment->get_invoice_id(), 'data' => $payment->get_data());
     $invoice = SI_Invoice::get_instance($payment->get_invoice_id());
     if (is_a($invoice, 'SI_Invoice')) {
         $payment_data['invoice_data'] = self::invoice_data($invoice);
     }
     return $payment_data;
 }
Пример #17
0
 /**
  * Override the template and use something custom.
  * @param  string $template
  * @return string           full path.
  */
 public static function override_template($template)
 {
     // Invoicing
     if (SI_Invoice::is_invoice_query()) {
         if (is_single()) {
             if (!current_user_can('edit_sprout_invoices') && apply_filters('si_redirect_temp_status', true)) {
                 $status = get_post_status();
                 if (SI_Invoice::STATUS_TEMP === $status) {
                     wp_safe_redirect(add_query_arg(array('si_id' => get_the_id()), get_home_url()));
                     exit;
                 }
             }
             $custom_template = self::get_doc_current_template(get_the_id());
             $custom_path = $custom_template != '' ? 'invoice/' . $custom_template : '';
             $template = self::locate_template(array($custom_path, 'invoice-' . get_locale() . '.php', 'invoice.php', 'invoice/invoice.php'), $template);
         } else {
             $status = get_query_var(self::FILTER_QUERY_VAR);
             $template = self::locate_template(array('invoice/' . $status . '-invoices.php', $status . '-invoices.php', 'invoices.php', 'invoice/invoices.php'), $template);
         }
         $template = apply_filters('si_doc_template', $template, 'invoice');
     }
     // Estimates
     if (SI_Estimate::is_estimate_query()) {
         if (is_single()) {
             if (!current_user_can('edit_sprout_invoices') && apply_filters('si_redirect_temp_status', true)) {
                 $status = get_post_status();
                 if (SI_Estimate::STATUS_TEMP === $status) {
                     wp_safe_redirect(add_query_arg(array('si_id' => get_the_id()), get_home_url()));
                     exit;
                 }
             }
             $custom_template = self::get_doc_current_template(get_the_id());
             $custom_path = $custom_template != '' ? 'estimate/' . $custom_template : '';
             $template = self::locate_template(array($custom_path, 'estimate-' . get_locale() . '.php', 'estimate.php', 'estimate/estimate.php'), $template);
         } else {
             $status = get_query_var(self::FILTER_QUERY_VAR);
             $template = self::locate_template(array('estimate/' . $status . '-estimates.php', $status . '-estimates.php', 'estimates.php', 'estimate/estimates.php'), $template);
         }
         $template = apply_filters('si_doc_template', $template, 'estimate');
     }
     return $template;
 }
 public static function time_entry_fields($context = 0, $hide_project_select = false)
 {
     $projects = array();
     $time_types = array();
     if (!$context) {
         $context = get_the_id();
     }
     // Get associated projects based on context
     switch (get_post_type($context)) {
         case SI_Project::POST_TYPE:
             $project_id = $context;
             // Projects
             $projects = array($project_id);
             break;
         case SI_Client::POST_TYPE:
             $client_id = $context;
             // Projects
             $projects = SI_Project::get_projects_by_client($client_id);
             break;
         case SI_Invoice::POST_TYPE:
             $invoice_id = $context;
             // Projects
             $invoice = SI_Invoice::get_instance($invoice_id);
             $project_id = $invoice->get_project();
             if ($project_id) {
                 $projects = array($project_id);
             }
             break;
         default:
             // Projects
             $args = array('post_type' => SI_Project::POST_TYPE, 'post_status' => 'any', 'posts_per_page' => -1, 'fields' => 'ids');
             $projects = get_posts($args);
             break;
     }
     $fields = array();
     $project_options = array();
     foreach ($projects as $project_id) {
         $title = get_the_title($project_id);
         $title = $title == __('Auto Draft') ? __('Current Project', 'sprout-invoices') : $title;
         $project_options[$project_id] = $title;
     }
     $fields['project_id'] = array('weight' => 1, 'label' => __('Project', 'sprout-invoices'), 'type' => 'select', 'options' => $project_options);
     $description = sprintf(__('Select an activity, <a href="%s">create a new activity</a> or <a class="thickbox" href="%s" title="Edit Activities">manage existing activities</a>.', 'sprout-invoices'), 'javascript:void(0)" id="show_time_creation_modal"', admin_url('admin-ajax.php?action=sa_manage_time&width=750&height=450'));
     $time_types_options = SI_Time::get_activities();
     $fields['activity_id'] = array('weight' => 10, 'label' => __('Activity', 'sprout-invoices'), 'type' => 'select', 'description' => $description, 'options' => $time_types_options);
     $fields['time_inc'] = array('weight' => 20, 'label' => __('Time', 'sprout-invoices'), 'type' => 'text', 'description' => __('In hours, e.g. 1.25 for 75 minutes.', 'sprout-invoices'));
     $fields['note'] = array('weight' => 30, 'label' => __('Note', 'sprout-invoices'), 'type' => 'textarea', 'default' => '');
     $fields['date'] = array('weight' => 100, 'label' => __('Date', 'sprout-invoices'), 'type' => 'date', 'default' => date('Y-m-d', current_time('timestamp')), 'placeholder' => '');
     $fields['nonce'] = array('type' => 'hidden', 'value' => wp_create_nonce(self::SUBMISSION_NONCE), 'weight' => 10000);
     $fields = apply_filters('si_time_entry_form_fields', $fields);
     uasort($fields, array(__CLASS__, 'sort_by_weight'));
     return $fields;
 }
Пример #19
0
$expenses = $expense->getUnbilled();
if ($expenses === FALSE) {
    echo "****ERR: Could not retreive unbilled expenses! ****\n";
    debug_message($expense->getLastError());
} elseif (count($expenses) > 0) {
    foreach ($expenses as $exp) {
        $comp_ids[] = $exp->getCompany()->id;
        echo "  * " . $exp->getCompany()->id . " \n";
    }
}
echo "\n\n\$\$\$\$ START MAKIN MONEY \$\$\$\$\n\n";
$comp_ids = array_unique($comp_ids);
if (count($comp_ids) > 0) {
    foreach ($comp_ids as $compid) {
        echo "\$\$\$ Generating Invoice for Company_id - {$compid}\n";
        $invoice = new SI_Invoice();
        $company = new SI_Company();
        if ($company->get($compid)) {
            $company_array = get_object_vars($company);
            $company_array['company_id'] = $company->id;
            unset($company_array['id']);
        }
        $invoice->updateFromAssocArray($company_array);
        if ($invoice->add() !== FALSE) {
            $activity = new SI_TaskActivity();
            $temp_array = $activity->getActivitiesForCompany($compid);
            if ($temp_array != NULL) {
                $ta_ids = '';
                foreach ($temp_array as $temptask) {
                    $ta_ids[] = $temptask->id;
                }
Пример #20
0
// Migrate task activities
$invoices = array();
$checks = array();
$ta_count = 0;
$task_activity_count_sql = "\nSELECT count(ta.id) FROM `task_activities` AS ta\n";
$task_activity_count_result = $dt_db->query($task_activity_count_sql, TRUE);
assert_die($task_activity_count_result, "Could not get task activities!\n" . $dt_db->getLastError());
if ($row = $task_activity_count_result->fetchRow()) {
    $ta_count = $row[0];
}
$task_activity_count_result->free();
for ($i = 0; $i < $ta_count; $i += 50) {
    add_activities($i, 50);
}
// Create invoices
$invoice = new SI_Invoice();
foreach ($invoices as $number => $data) {
    if ($number == 0) {
        continue;
    }
    //	debug("Going to create invoice $number for company id ".$data['company_id']." with ids ".join(', ', $data['ids']));
    $company =& $companies[$data['company_id']];
    $invoice_insert_sql = "\nINSERT INTO invoices (id, company_id, address1, address2, city, \nstate, zip, timestamp, terms, trans_id)\nVALUES(" . $number . ", " . $data['company_id'] . ", '" . $company['address1'] . "', '" . $company['address2'] . "', '" . $company['city'] . "', \n'" . $company['state'] . "', '" . $company['zip'] . "', " . $data['timestamp'] . ", 'NET15', 0)\n\t";
    $invoice_result = $si_db->query($invoice_insert_sql, TRUE);
    assert_die($invoice_result, "Could not add invoice!\n" . $si_db->getLastError());
    // Add activities
    $invoice->get($number);
    //	debug("Adding line items to invoice ".$invoice->id);
    assert_die($invoice->addTaskActivities($data['ids']), "Error adding task activities to invoice: " . $invoice->getLastError());
    // Add the company transaction
    $ct = new SI_CompanyTransaction();
Пример #21
0
 private function load_invoice()
 {
     $invoice_id = 0;
     if (isset($_GET['sa_invoice']) && !self::using_permalinks()) {
         if (is_numeric($_GET['sa_invoice'])) {
             $invoice_id = (int) $_GET['sa_invoice'];
         } else {
             $posts = get_posts(array('name' => $_GET['sa_invoice'], 'posts_per_page' => 1, 'post_type' => SI_Invoice::POST_TYPE));
             $post = $posts[0];
             $invoice_id = $post->ID;
         }
     }
     // If permalinks are used this is the default method of finding the post id.
     if (!$invoice_id) {
         $invoice_id = url_to_postid(esc_url_raw($_SERVER['REQUEST_URI']));
     }
     if (!$invoice_id || get_post_type($invoice_id) !== SI_Invoice::POST_TYPE) {
         self::set_message(__('Invoice ID invalid. Payments are disabled.', 'sprout-invoices'), self::MESSAGE_STATUS_ERROR);
         return;
     }
     $this->invoice = SI_Invoice::get_instance($invoice_id);
     if (!$this->invoice && !$this->checkout_complete) {
         self::set_message(__('No invoice associated with this checkout.', 'sprout-invoices'), self::MESSAGE_STATUS_ERROR);
         wp_redirect('/', 303);
         exit;
     }
     do_action('si_load_invoice', $this, $this->invoice);
 }
 public static function get_recurring_payment(SI_Invoice $invoice)
 {
     $payment_ids = $invoice->get_payments();
     if (empty($payment_ids)) {
         return 0;
     }
     $r_payment_id = 0;
     foreach ($payment_ids as $pid) {
         if (in_array(get_post_status($pid), array(SI_Payment::STATUS_RECURRING, SI_Payment::STATUS_CANCELLED))) {
             $r_payment_id = $pid;
         }
     }
     if (!$r_payment_id) {
         return false;
     }
     $payment = SI_Payment::get_instance($r_payment_id);
     return $payment;
 }
Пример #23
0
/**
 * Load the SI application
 * (function called at the bottom of this page)
 *
 * @package Sprout_Invoices
 * @return void
 */
function sprout_invoices_load()
{
    if (class_exists('Sprout_Invoices')) {
        error_log('** Sprout_Invoices Already Loaded **');
        return;
        // already loaded, or a name collision
    }
    do_action('sprout_invoices_preload');
    //////////
    // Load //
    //////////
    // Master class
    require_once SI_PATH . '/Sprout_Invoices.class.php';
    // base classes
    require_once SI_PATH . '/models/_Model.php';
    require_once SI_PATH . '/controllers/_Controller.php';
    do_action('si_require_base_classes');
    // models
    require_once SI_PATH . '/models/Client.php';
    require_once SI_PATH . '/models/Estimate.php';
    require_once SI_PATH . '/models/Invoice.php';
    require_once SI_PATH . '/models/Notification.php';
    require_once SI_PATH . '/models/Payment.php';
    require_once SI_PATH . '/models/Record.php';
    // Premium models
    require_once SI_PATH . '/models/Project.php';
    // i18n
    require_once SI_PATH . '/controllers/i18n/Countries_States.php';
    require_once SI_PATH . '/controllers/i18n/Locales.php';
    do_action('si_require_model_classes');
    /////////////////
    // Controllers //
    /////////////////
    // settings
    require_once SI_PATH . '/controllers/admin/Settings.php';
    if (!class_exists('SA_Settings_API')) {
        require_once SI_PATH . '/controllers/admin/Settings_API.php';
    }
    require_once SI_PATH . '/controllers/admin/Capabilities.php';
    require_once SI_PATH . '/controllers/admin/Help.php';
    // json api
    require_once SI_PATH . '/controllers/api/JSON_API.php';
    // checkouts
    require_once SI_PATH . '/controllers/checkout/Checkouts.php';
    // clients
    require_once SI_PATH . '/controllers/clients/Clients.php';
    // developer logs
    require_once SI_PATH . '/controllers/developer/Logs.php';
    // Estimates
    require_once SI_PATH . '/controllers/estimates/Estimate_Submission.php';
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/estimates/Estimate_Submission_Premium.php')) {
        require_once SI_PATH . '/controllers/estimates/Estimate_Submission_Premium.php';
    }
    require_once SI_PATH . '/controllers/estimates/Estimates.php';
    require_once SI_PATH . '/controllers/estimates/Estimates_Admin.php';
    require_once SI_PATH . '/controllers/estimates/Estimates_Edit.php';
    require_once SI_PATH . '/controllers/estimates/Estimates_Records.php';
    require_once SI_PATH . '/controllers/estimates/Estimates_Template.php';
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/estimates/Estimates_Premium.php')) {
        require_once SI_PATH . '/controllers/estimates/Estimates_Premium.php';
    }
    // invoices
    require_once SI_PATH . '/controllers/invoices/Invoices.php';
    require_once SI_PATH . '/controllers/invoices/Invoices_Admin.php';
    require_once SI_PATH . '/controllers/invoices/Invoices_Edit.php';
    require_once SI_PATH . '/controllers/invoices/Invoices_Records.php';
    require_once SI_PATH . '/controllers/invoices/Invoices_Template.php';
    require_once SI_PATH . '/controllers/invoices/Invoices_Deposit.php';
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/invoices/Invoices_Premium.php')) {
        require_once SI_PATH . '/controllers/invoices/Invoices_Premium.php';
    }
    // Line Items
    require_once SI_PATH . '/controllers/line-items/Line_Items.php';
    // notifications
    require_once SI_PATH . '/controllers/notifications/Notifications_Control.php';
    require_once SI_PATH . '/controllers/notifications/Notifications.php';
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/notifications/Notifications_Premium.php')) {
        require_once SI_PATH . '/controllers/notifications/Notifications_Premium.php';
    }
    require_once SI_PATH . '/controllers/notifications/Notifications_Admin_Table.php';
    // payment processing
    require_once SI_PATH . '/controllers/payment-processing/Payment_Processors.php';
    require_once SI_PATH . '/controllers/payment-processing/Credit_Card_Processors.php';
    require_once SI_PATH . '/controllers/payment-processing/Offsite_Processors.php';
    // payment processors
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/payment-processing/processors/SI_Paypal_EC.php')) {
        require_once SI_PATH . '/controllers/payment-processing/processors/SI_Paypal_EC.php';
    }
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/payment-processing/processors/SI_Paypal_Pro.php')) {
        require_once SI_PATH . '/controllers/payment-processing/processors/SI_Paypal_Pro.php';
    }
    require_once SI_PATH . '/controllers/payment-processing/processors/SI_Checks.php';
    require_once SI_PATH . '/controllers/payment-processing/processors/SI_Admin_Payment.php';
    do_action('si_payment_processors_loaded');
    // payments
    require_once SI_PATH . '/controllers/payments/Payments.php';
    require_once SI_PATH . '/controllers/payments/Payments_Admin_Table.php';
    // Projects
    require_once SI_PATH . '/controllers/projects/Projects.php';
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/projects/Projects_Premium.php')) {
        require_once SI_PATH . '/controllers/projects/Projects_Premium.php';
    }
    // internal records
    require_once SI_PATH . '/controllers/records/Internal_Records.php';
    require_once SI_PATH . '/controllers/records/Records_Admin_Table.php';
    // reporting
    require_once SI_PATH . '/controllers/reporting/Dashboard.php';
    require_once SI_PATH . '/controllers/reporting/Reporting.php';
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/reporting/Reporting_Premium.php')) {
        require_once SI_PATH . '/controllers/reporting/Reporting_Premium.php';
    }
    require_once SI_PATH . '/controllers/templating/Templating.php';
    require_once SI_PATH . '/controllers/templating/Customizer.php';
    // updates
    if (!SI_FREE_TEST && file_exists(SI_PATH . '/controllers/updates/Updates.php')) {
        require_once SI_PATH . '/controllers/updates/Updates.php';
    }
    if (file_exists(SI_PATH . '/controllers/updates/Free_License.php')) {
        require_once SI_PATH . '/controllers/updates/Free_License.php';
    }
    // importers
    require_once SI_PATH . '/importers/Importer.php';
    require_once SI_PATH . '/importers/Freshbooks.php';
    require_once SI_PATH . '/importers/Harvest.php';
    require_once SI_PATH . '/importers/WP-Invoice.php';
    require_once SI_PATH . '/importers/CSV.php';
    do_action('si_importers_loaded');
    // Fix others problems
    require_once SI_PATH . '/controllers/compat/Compatibility.php';
    // all done
    do_action('si_require_controller_classes');
    // Template tags
    require_once SI_PATH . '/template-tags/estimates.php';
    require_once SI_PATH . '/template-tags/clients.php';
    require_once SI_PATH . '/template-tags/forms.php';
    require_once SI_PATH . '/template-tags/invoices.php';
    require_once SI_PATH . '/template-tags/line-items.php';
    require_once SI_PATH . '/template-tags/projects.php';
    require_once SI_PATH . '/template-tags/ui.php';
    require_once SI_PATH . '/template-tags/utility.php';
    require_once SI_PATH . '/template-tags/docs.php';
    // l18n
    require_once SI_PATH . '/languages/SI_l10n.php';
    require_once SI_PATH . '/languages/SI_Strings.php';
    // i18n & l10n
    SI_l10n::init();
    SI_Strings::load_additional_strings();
    SI_Locales::init();
    SI_Countries_States::init();
    ///////////////////
    // init() models //
    ///////////////////
    do_action('si_models_init');
    SI_Post_Type::init();
    // _Model
    SI_Record::init();
    SI_Notification::init();
    SI_Invoice::init();
    SI_Estimate::init();
    SI_Client::init();
    SI_Payment::init();
    SI_Project::init();
    /////////////////////////
    // init() controllers //
    /////////////////////////
    do_action('si_controllers_init');
    SI_Controller::init();
    SA_Settings_API::init();
    SI_Templating_API::init();
    SI_Customizer::init();
    SI_Admin_Capabilities::init();
    // updates
    if (!SI_FREE_TEST && class_exists('SI_Updates')) {
        SI_Updates::init();
    }
    if (class_exists('SI_Free_License')) {
        SI_Free_License::init();
    }
    // api
    SI_JSON_API::init();
    // reports
    SI_Dashboard::init();
    SI_Reporting::init();
    if (!SI_FREE_TEST && class_exists('SI_Reporting_Premium')) {
        SI_Reporting_Premium::init();
    }
    // records and logs
    SI_Internal_Records::init();
    SI_Dev_Logs::init();
    // settings
    SI_Admin_Settings::init();
    // payments and processing
    SI_Payment_Processors::init();
    SI_Payments::init();
    // notifications
    SI_Notifications::init();
    // Hooks come before parent class.
    if (!SI_FREE_TEST && class_exists('SI_Notifications_Premium')) {
        SI_Notifications_Premium::init();
    }
    SI_Notifications_Control::init();
    // clients
    SI_Clients::init();
    // estimates
    SI_Estimates::init();
    if (!SI_FREE_TEST && class_exists('SI_Estimates_Premium')) {
        SI_Estimates_Premium::init();
    }
    if (!SI_FREE_TEST && class_exists('SI_Estimates_Submission_Premium')) {
        SI_Estimates_Submission_Premium::init();
    }
    SI_Estimate_Submissions::init();
    SI_Estimates_Admin::init();
    SI_Estimates_Edit::init();
    SI_Estimates_Template::init();
    SI_Estimates_Records::init();
    // checkouts
    SI_Checkouts::init();
    // invoices
    SI_Invoices::init();
    SI_Invoices_Admin::init();
    SI_Invoices_Edit::init();
    SI_Invoices_Template::init();
    SI_Invoices_Records::init();
    SI_Invoices_Deposit::init();
    if (!SI_FREE_TEST && class_exists('SI_Invoices_Premium')) {
        SI_Invoices_Premium::init();
    }
    // Line items
    SI_Line_Items::init();
    // projects
    SI_Projects::init();
    if (!SI_FREE_TEST && class_exists('SI_Projects_Premium')) {
        SI_Projects_Premium::init();
    }
    // importer
    SI_Importer::init();
    // help
    SI_Help::init();
    // Compat
    SI_Compatibility::init();
    // addons
    require_once SI_PATH . '/add-ons/Addons.php';
    require_once SI_PATH . '/add-ons/updates/edd_plugin_updater.class.php';
    SA_Addons::init();
    do_action('sprout_invoices_loaded');
}
Пример #24
0
 public static function create_payment($payment = array())
 {
     if (!isset($payment['Invoice ID'])) {
         do_action('si_error', 'No Invoice ID given within payment import', $payment);
         return;
     }
     // Find the associated invoice
     $invoices = SI_Post_Type::find_by_meta(SI_Invoice::POST_TYPE, array(self::CSV_ID => $payment['Invoice ID']));
     // Can't assign a payment without an invoice
     if (empty($invoices)) {
         do_action('si_error', 'No invoice found for this payment', $payment['Payment ID']);
         return;
     }
     $invoice = SI_Invoice::get_instance($invoices[0]);
     if (!is_a($invoice, 'SI_Invoice')) {
         return;
     }
     $payment_id = SI_Payment::new_payment(array('payment_method' => isset($payment['Payment Method']) ? $payment['Payment Method'] : self::PAYMENT_METHOD, 'invoice' => $invoice->get_id(), 'amount' => round($payment['Amount'], 2), 'transaction_id' => isset($payment['Payment ID']) ? $payment['Payment ID'] : '', 'data' => array('api_response' => $payment)));
     $new_payment = SI_Payment::get_instance($payment_id);
     $new_payment->set_post_date(date('Y-m-d H:i:s', strtotime($payment['Date'])));
     return $new_payment;
 }
Пример #25
0
 public static function create_payment($payment)
 {
     $possible_dups = SI_Post_Type::find_by_meta(SI_Payment::POST_TYPE, array(self::FRESHBOOKS_ID => $payment['payment_id']));
     // Don't create a duplicate if this was already imported.
     if (!empty($possible_dups)) {
         do_action('si_error', 'Invoice imported already', $payment['payment_id']);
         return;
     }
     // Find the associated invoice
     $invoices = SI_Post_Type::find_by_meta(SI_Invoice::POST_TYPE, array(self::FRESHBOOKS_ID => $payment['invoice_id']));
     $invoice = SI_Invoice::get_instance($invoices[0]);
     $invoice_id = is_a($invoice, 'SI_Invoice') ? $invoice->get_id() : 0;
     // Can't assign a payment without an invoice
     if (!$invoice_id) {
         do_action('si_error', 'No invoice found for this payment', $payment['payment_id']);
         return;
     }
     $payment_id = SI_Payment::new_payment(array('payment_method' => isset($payment['type']) && !is_array($payment['type']) ? $payment['type'] : self::PAYMENT_METHOD, 'invoice' => $invoice_id, 'amount' => round($payment['amount'], 2), 'transaction_id' => isset($payment['payment_id']) ? $payment['payment_id'] : '', 'data' => array('api_response' => $payment)));
     $new_payment = SI_Payment::get_instance($payment_id);
     $new_payment->set_post_date(date('Y-m-d H:i:s', strtotime($payment['date'])));
     return $new_payment;
 }
Пример #26
0
 public function get_invoice_id()
 {
     $invoice_ids = SI_Invoice::get_invoices_by_estimate_id($this->ID);
     return array_pop($invoice_ids);
     // A single invoice should be associated
 }
Пример #27
0
 public static function status_change_dropdown($id)
 {
     if (!$id) {
         global $post;
         $id = $post->ID;
     }
     $invoice = SI_Invoice::get_instance($id);
     if (!is_a($invoice, 'SI_Invoice')) {
         return;
         // return for that temp post
     }
     self::load_view('admin/sections/invoice-status-change-drop', array('id' => $id, 'status' => $invoice->get_status()), false);
 }
Пример #28
0
 public function get_payments()
 {
     $payments = array();
     $invoices = $this->get_invoices();
     foreach ($invoices as $invoice_id) {
         $invoice = SI_Invoice::get_instance($invoice_id);
         $payments = array_merge($payments, $invoice->get_payments());
     }
     return $payments;
 }
Пример #29
0
		if($ct->add() === FALSE){
			$error_msg .= "Error adding transaction to company account!\n";
			debug_message($ct->getLastError());
		}

		// Update the payment with the company transaction id and auth code
		$payment->trans_id = $ct->id;
		$payment->auth_code = $cc_processor->getAuthCode();
		if($payment->update() === FALSE){
			$error_msg .= "Error updating payment with company transaction id!\n";
			debug_message($payment->getLastError());
		}

		if(empty($error_msg)){
			if(isset($_POST['email_invoice']) && $_POST['email_invoice'] == 'Y'){
				$invoice = new SI_Invoice();
				if($invoice->get(intval($_POST['invoice_id'])) === FALSE){
					$error_msg .= "Error retreiving invoice!\n";
					debug_message($invoice->getLastError());
				}
				
				if($invoice->sendEmail('InvoiceEmail') === FALSE){
					$error_msg .= "Error sending invoice notification!\n";
					debug_message($invoice->getLastError());
				}
			}
			if(empty($error_msg)){
				goBack();
			}
		}
	}else{
function si_is_invoice_recurring(SI_Invoice $invoice)
{
    return SI_Subscription_Payments::has_subscription_payment($invoice->get_id());
}