/** * 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'); } } }
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); }
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); }
/** * 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); }
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—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); }
/** * 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; }
/** * 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; }
$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; }
// 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();
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; }
/** * 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'); }
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; }
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; }
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 }
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); }
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; }
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()); }