public static function widget_dashboard_invoices() { $si_project_id = self::get_si_project_id_from_psp_project_id(); if (is_a($si_project_id, 'WP_Post')) { $si_project_id = $si_project_id->ID; } $si_project = SI_Project::get_instance($si_project_id); if (!is_a($si_project, 'SI_Project')) { return; } $invoices = $si_project->get_invoices(); $estimates = $si_project->get_estimates(); $payments = $si_project->get_payments(); if ($invoices) { self::load_addon_view('panorama/invoices-widget', array('invoices' => $invoices, 'estimates' => $estimates, 'payments' => $payments), true); } /** * By default we are only going to show estimates * that do not have invoices associated. That estimate can * be linked from the invoices table instead. */ $estimates_to_show = array(); foreach ($estimates as $estimate_id) { $ass_invoice_id = si_get_estimate_invoice_id($estimate_id); if (!$ass_invoice_id || get_post_type($ass_invoice_id) != SI_Invoice::POST_TYPE) { $estimates_to_show[] = $estimate_id; } } if ($estimates) { self::load_addon_view('panorama/estimates-widget', array('invoices' => $invoices, 'estimates' => $estimates_to_show, 'payments' => $payments), true); } }
/** * Show the history * * @param WP_Post $post * @param array $metabox * @return */ public static function show_project_history_view($post, $metabox) { if ($post->post_status == 'auto-draft') { printf('<p>%s</p>', __('No history available.', 'sprout-invoices')); return; } $project = SI_Project::get_instance($post->ID); self::load_view('admin/meta-boxes/projects/history-premium', array('id' => $post->ID, 'post' => $post, 'project' => $project, 'historical_records' => array_reverse($project->get_history())), false); }
public static function show_pspsi_meta_box($post, $metabox) { $si_project_id = get_post_meta($post->ID, self::META_KEY, true); $invoices = array(); $estimates = array(); $payments = array(); if ($si_project_id) { $si_project = SI_Project::get_instance($si_project_id); $invoices = $si_project->get_invoices(); $estimates = $si_project->get_estimates(); $payments = $si_project->get_payments(); } wp_enqueue_script('select2_4.0'); wp_enqueue_style('select2_4.0_css'); self::load_addon_view('admin/meta-boxes/panorama-si', array('si_project_id' => $si_project_id, 'invoices' => $invoices, 'estimates' => $estimates, 'payments' => $payments), false); }
/** * Query sa_client posts with assigned user ID * * @param (int) $user_id wp_user ID * @return (array) sa_client post ID's **/ public static function get_client_si_projects($user_id = 0) { $project_ids = array(); if (!$user_id) { $user_id = get_current_user_id(); } if (!$user_id) { return $project_ids; } $client_ids = SI_Client::get_clients_by_user($user_id); if (empty($client_ids)) { return $project_ids; } foreach ($client_ids as $client_id) { $project_ids[] = SI_Project::get_projects_by_client($client_id); } return $project_ids; }
public static function maybe_disassociate_records($post_id = 0) { if (SI_Client::POST_TYPE === get_post_type($post_id)) { $client = SI_Client::get_instance($post_id); $invoices = $client->get_invoices(); foreach ($invoices as $invoice_id) { $invoice = SI_Invoice::get_instance($invoice_id); $invoice->set_client_id(0); } $estimates = $client->get_estimates(); foreach ($estimates as $estimate_id) { $estimate = SI_Estimate::get_instance($estimate_id); $estimate->set_client_id(0); } $projects = SI_Project::get_projects_by_client($post_id); foreach ($projects as $project_id) { $project = SI_Project::get_instance($project_id); $project->set_associated_clients(array()); } } }
/** * Display the content for the column * * @param string $column_name * @param int $id post_id * @return string */ public static function column_display($column_name, $id) { $project = SI_Project::get_instance($id); if (!is_a($project, 'SI_Project')) { return; // return for that temp post } switch ($column_name) { case 'psp': $psp_project_id = self::get_psp_project_id_from_si_project_id($id); printf('<a href="%s">%s</a>', get_edit_post_link($psp_project_id), get_the_title($psp_project_id)); $completed = psp_compute_progress($psp_project_id); if ($completed > 10) { echo '<p class="psp-progress"><span class="psp-' . $completed . '"><strong>%' . $completed . '</strong></span></p>'; } else { echo '<p class="psp-progress"><span class="psp-' . $completed . '"></span></p>'; } break; default: // code... break; } }
/** * Checks to see if the user is accessing a post they have access to as part of an sa_client * @param boolean $result Current pass/fail of access * @param integer $psp_id The project id of the current viewed psp project * @return boolean Access or not. */ public static function check_access_on_post($result = false, $psp_id = 0) { $current_user_id = get_current_user_id(); $user_associated_clients = SI_Client::get_clients_by_user($current_user_id); // If the result is true, then nothing will override it below // Plus if there are not associated clients than tough luck. if ($result || empty($user_associated_clients)) { return $result; } $si_project_id = get_field(self::META_KEY, $psp_id); // what si_project is assigned to this project access if (!$si_project_id || '' === $si_project_id) { return false; } $si_project = SI_Project::get_instance($si_project_id); $project_associated_clients = $si_project->get_associated_clients(); $matches = array_intersect($project_associated_clients, $user_associated_clients); // If there are no matches if (empty($matches)) { return false; } // there were matches return true; }
function process_ajax_on_project_change() { $has_admin = array(); //@TODO ADD NONCE CHECK $post_id = $_POST['post_id']; if ($post_id <= 0) { return; } $SI_Project = SI_Project::get_instance($post_id); $invoice_ids = $SI_Project->get_invoices(); $estimate_ids = $SI_Project->get_estimates(); $client_ids = $SI_Project->get_associated_clients(); $clients = array(); $estimates = array(); $invoices = array(); $asscoiativeTasks = array(); foreach ($client_ids as $clients_id) { $SI_Client = SI_Client::get_instance($clients_id); $user_ids = $SI_Client->get_associated_users(); foreach ($user_ids as $user_id) { if (user_can($user_id, 'update_core')) { $has_admin[] = $user_id; } $user = get_user_by('ID', $user_id); $display_name = $user->data->display_name; $clients[] = array('user_id' => (int) $user_id, 'display_name' => $display_name); } } if (empty($has_admin) && current_user_can('update_core')) { $args = array('role' => 'administrator'); $users = get_users($args); foreach ($users as $user) { $clients[] = array('user_id' => (int) $user->ID, 'display_name' => $user->data->display_name); } } $blank_option = array('user_id' => '', 'display_name' => ''); array_unshift($clients, $blank_option); foreach ($estimate_ids as $estimate_id) { $title = get_the_title($estimate_id); $estimates[] = array('est_id' => (int) $estimate_id, 'est_title' => $title); } foreach ($invoice_ids as $invoice_id) { $title = get_the_title($invoice_id); $invoices[] = array('inv_id' => (int) $invoice_id, 'inv_title' => $title); } $args = array('post_type' => 'mg_task', 'meta_key' => 'project', 'meta_value' => $post_id, 'post_status' => array('complete', 'in-progress', 'not-started', 'publish', 'published')); $the_query = new WP_Query($args); while ($the_query->have_posts()) { $the_query->the_post(); $asscoiativeTasks[] = array('task_title' => get_the_title(), 'task_id' => get_the_ID()); } $data = array('clients' => $clients, 'estimates' => $estimates, 'invoices' => $invoices, 'tasks' => $asscoiativeTasks); $output = json_encode($data); exit($output); }
function si_get_project_website($id = 0) { if (!$id) { global $post; $id = $post->ID; } $project = SI_Project::get_instance($id); return apply_filters('si_get_project_website', $project->get_website(), $project); }
* * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * */ require_once('includes/common.php'); require_once('includes/SI_Project.php'); require_once('includes/SI_Task.php'); require_once('includes/SI_TaskActivity.php'); require_once('includes/SI_PaymentSchedule.php'); checkLogin(); $project = new SI_Project(); $task = new SI_Task(); $ta = new SI_TaskActivity(); $activities = array(); if(!empty($_REQUEST['task_id'])){ $task->get($_REQUEST['task_id']); $project->get($task->project_id); if(!$project->hasRights(PROJECT_RIGHT_VIEW)){ fatal_error('Insufficent access rights for this project!'); } $activities = $ta->retrieveSet("task_id = ".$task->id); if($activities === FALSE){ $error_msg .= "Error getting list of task time!\n"; debug_message($ta->getLastError()); }
public function get_project() { if (class_exists('SI_Project')) { $project_id = $this->get_project_id(); $project = SI_Project::get_instance($project_id); return $project; } }
public static function unbilled_time_tracking_dashboard() { $args = array('post_type' => SI_Project::POST_TYPE, 'post_status' => 'any', 'posts_per_page' => 3, 'fields' => 'ids', 'orderby' => 'modified'); $projects = get_posts($args); if (empty($projects)) { _e('No new projects.', 'sprout-invoices'); return; } $something_shown = false; foreach ($projects as $project_id) { $project = SI_Project::get_instance($project_id); $times = $project->get_associated_times(); if (empty($times)) { continue; } self::load_addon_view('admin/dashboards/project-time-tracking-unbilled', array('project' => $project, 'times' => $times), true); $something_shown = true; } if (!$something_shown) { _e('No unbilled time from your most recent projects.', 'sprout-invoices'); } }
* GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * */ require_once('includes/common.php'); require_once('includes/SI_Project.php'); require_once('includes/SI_Company.php'); require_once('includes/SI_Task.php'); checkLogin(); $project = new SI_Project(); if($loggedin_user->hasRight('admin') && isset($_REQUEST['user_id'])){ $user_id = $_REQUEST['user_id']; }else{ $user_id = $loggedin_user->id; } if($_REQUEST['filter'] == "all"){ $projects = $project->getMyProjects($user_id, FALSE); }else{ $_REQUEST['filter'] = "pending"; $projects = $project->getMyProjects($user_id, TRUE); } if($projects === FALSE){
* with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * */ require_once('includes/common.php'); checkLogin(); require_once('includes/SI_Project.php'); require_once('includes/SI_Company.php'); require_once('includes/SI_ProjectStatus.php'); require_once('includes/SI_ProjectPriority.php'); require_once('includes/SI_SalesCommissionType.php'); $title = ''; $project = new SI_Project(); if($_REQUEST['mode'] == 'add'){ $title = "Add Project"; $project->owner_id = $loggedin_user->id; $project->due_ts = ''; if(isset($_REQUEST['company_id'])) $project->company_id = $_REQUEST['company_id']; if($_POST['save']){ $_POST['due_ts'] = getTSFromInput($_POST['due_ts']); $project->updateFromAssocArray($_POST); if($project->add() !== false){ goBack(); }else{ $error_msg .= "Error adding Project!\n"; debug_message($project->getLastError());
public static function maybe_create_toggl_project(SI_Project $project, $args = array()) { $data = array('project' => array('name' => $args['project_name'])); $response = Toggl_API::api_request('projects', $data); if (!isset($response->data->id)) { return; // not created } self::set_projects_toggl_id($project->get_id(), $response->data->id); return $response->data->id; }
function run($preview = true) { $results = array(); if (is_readable($this->file)) { $handle = fopen($this->file, "r"); $first_row = true; while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) { if ($first_row) { $first_row = false; continue; } // Process a row $result = array(); $result['action'] = 'Import'; $result['start_ts'] = strtotime($data[$this->column_mappings[SI_IMPORT_COLUMN_START]]); if (isset($this->column_mappings[SI_IMPORT_COLUMN_DURATION])) { // Duration based import $result['end_ts'] = $result['start_ts'] + floatval($data[$this->column_mappings[SI_IMPORT_COLUMN_DURATION]]) * 60 * 60; } else { // Start and end time provided $result['start_ts'] = strtotime($data[$this->column_mappings[SI_IMPORT_COLUMN_END]]); } if (isset($this->column_mappings[SI_IMPORT_COLUMN_COMMENTS])) { $result['comments'] = $data[$this->column_mappings[SI_IMPORT_COLUMN_COMMENTS]]; } else { $results['comments'] = ''; } $user = $data[$this->column_mappings[SI_IMPORT_COLUMN_USER]]; $normalized_user = $this->normalize($user); if (empty($normalized_user)) { $normalized_user = '******'; } if ($this->users[$normalized_user]['action'] == SI_IMPORT_ACTION_SKIP) { $result['user_id'] = 0; $result['message'] = "Skipped because no user map for '{$user}' was configured"; $result['action'] = "Skip"; $results[] = $result; continue; } else { $result['user_id'] = $this->users[$normalized_user]['param']; } $task = $data[$this->column_mappings[SI_IMPORT_COLUMN_TASK]]; $normalized_task = $this->normalize($task); if (empty($normalized_task)) { $normalized_task = '_blank_'; } if ($this->tasks[$normalized_task]['action'] == SI_IMPORT_ACTION_SKIP) { $result['task_id'] = 0; $result['message'] = "Skipped because no task map for '{$task}' was configured"; $result['action'] = "Skip"; $results[] = $result; continue; } else { $result['task_id'] = $this->tasks[$normalized_task]['param']; } $task = new SI_Task(); $task->get($result['task_id']); $ic = $data[$this->column_mappings[SI_IMPORT_COLUMN_ITEMCODE]]; $normalized_ic = $this->normalize($ic); if (empty($normalized_ic)) { $normalized_ic = '_blank_'; } if ($this->item_codes[$normalized_ic]['action'] == SI_IMPORT_ACTION_SKIP) { $result['item_code_id'] = $task->getDefaultItemCode(); if ($result['item_code_id'] == 0) { $result['message'] = "Skipped because no item code map for '{$ic}' was configured and no default item code exists for project"; $result['action'] = "Skip"; $results[] = $result; continue; } else { $result['message'] = "Item Code retreived from project"; } } else { $result['item_code_id'] = $this->item_codes[$normalized_ic]['param']; } if ($result['start_ts'] <= 0 || $result['end_ts'] <= 0) { $result['message'] = "Invalid start or end time"; $result['action'] = "Skip"; $results[] = $result; continue; } if ($result['start_ts'] > $result['end_ts']) { $result['message'] = "Start Time is before end time"; $result['action'] = "Skip"; $results[] = $result; continue; } if ($result['end_ts'] - $result['start_ts'] > 12 * 60 * 60) { $result['message'] = "Length of time is too long, >12 hours"; $result['action'] = "Skip"; $results[] = $result; continue; } $project = new SI_Project(); $company = new SI_Company(); $task = new SI_Task(); $item_code = new SI_ItemCode(); $task_activity = new SI_TaskActivity(); $task_activity->start_ts = $result['start_ts']; $task_activity->end_ts = $result['end_ts']; $task_activity->task_id = $result['task_id']; $task_activity->user_id = $result['user_id']; $task_activity->text = $result['comments']; $task_activity->item_code_id = $result['item_code_id']; if ($task_activity->task_id > 0 || $task_activity->start_ts > 0 || $task_activity->end_ts > 0) { if ($task_activity->task_id <= 0 || $task_activity->start_ts <= 0 || $task_activity->end_ts <= 0) { $result['action'] = "Skip"; $result['message'] = "Skipping incomplete entry\n"; $results[] = $result; continue; } } else { $result['action'] = "Skip"; $result['message'] = "Skipping incomplete entry\n"; $results[] = $result; continue; } if ($task->get($task_activity->task_id) === FALSE) { $result['action'] = "Skip"; $result['message'] = "Could not retreive task:\n" . $task->getLastError(); $results[] = $result; continue; } if ($project->get($task->project_id) === FALSE) { $result['action'] = "Skip"; $result['message'] = "Could not retreive project:\n" . $project->getLastError(); $results[] = $result; continue; } $user = new SI_User(); if ($user->get($task_activity->user_id) === FALSE) { $result['action'] = "Skip"; $result['message'] = "Could not retreive user:\n" . $user->getLastError(); $results[] = $result; continue; } $task_activity->hourly_cost = $user->hourly_rate; $company = $project->getCompany(); if ($company === FALSE) { $result['action'] = "Skip"; $result['message'] = "Could not get company information:\n" . $project->getLastError(); $results[] = $result; continue; } $task_activity->hourly_rate = $item_code->getCompanyPrice($company->id, $task_activity->item_code_id); if ($task_activity->hourly_rate === FALSE) { $result['action'] = "Skip"; $result['message'] = "Error getting price for this item code:\n" . $item_code->getLastError(); $results[] = $result; continue; } $sct = $task->getSalesCommissionType(); $task_activity->sales_com_type_id = $sct->id; if (!$preview) { if (!$task_activity->add()) { $result['action'] = "Skip"; $result['message'] = "Error adding Task Activity:\n" . $task_activity->getLastError(); } } $results[] = $result; } } return $results; }
function get($id = NULL){ global $db_conn; if(!isset($id)){ $id = $this->id; } if(!isset($id)){ $this->error = "SI_Project::get() : Project id not set\n"; return FALSE; } $Project = SI_Project::retrieveSet("WHERE p.id = $id", TRUE); if($Project === FALSE){ return FALSE; } if(isset($Project[0])){ $this->updateFromAssocArray($Project[0]); if($this->_populateAttachments() === FALSE) return FALSE; if($this->_populateCCUsers() === FALSE) return FALSE; $this->stripSlashes(); }else{ $this->error = "SI_Project::get() : No data retrieved from query\n"; return FALSE; } return TRUE; }
* http://www.gnu.org/copyleft/gpl.html * */ require_once('includes/common.php'); require_once('includes/SI_Expense.php'); require_once('includes/SI_CompanyTransaction.php'); require_once('includes/SI_Project.php'); require_once('includes/SI_Task.php'); require_once('includes/SI_ItemCode.php'); checkLogin('accounting'); $title = ''; $expense = new SI_Expense(); $company = new SI_Company(); $project = new SI_Project(); $task = new SI_Task(); $item_code = new SI_ItemCode(); // Clean up cost if(!empty($_POST['cost'])){ $_POST['cost'] = preg_replace('/[^0-9\.]/','', $_POST['cost']); } // Clean up price if(!empty($_POST['price'])){ $_POST['price'] = preg_replace('/[^0-9\.]/','', $_POST['price']); } if($_REQUEST['mode'] == 'add'){ $title = "Add Expense";
* http://www.gnu.org/copyleft/gpl.html * */ require_once('includes/common.php'); checkLogin(); require_once('includes/SI_Project.php'); require_once('includes/SI_Task.php'); require_once('includes/SI_TaskActivity.php'); require_once('includes/SI_Expense.php'); require_once('includes/SI_ItemCode.php'); $title = ''; $task_activity = new SI_TaskActivity(); $task = new SI_Task(); $project = new SI_Project(); $user = new SI_User(); $item_code = new SI_ItemCode(); $disabled = false; if($_REQUEST['mode'] == 'add'){ $title = "Add Time Entry"; if(empty($_REQUEST['task_id'])){ fatal_error("No Task ID specified!\n"); }else{ $task_activity->task_id = $_REQUEST['task_id']; $task_activity->completed_ts = time(); $task_activity->user_id = $loggedin_user->id; if($task->get($task_activity->task_id) === FALSE){ fatal_error("Could not retreive task!"); debug_message($task->getLastError());
function si_get_project_website($id = 0) { if (!$id) { $id = get_the_ID(); } $project = SI_Project::get_instance($id); return apply_filters('si_get_project_website', $project->get_website(), $project); }
/** * 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'); }
function soap_get_projects($username, $password) { $user = auth_user($username, $password); if ($user === FALSE) { return new soap_fault('Client', '', 'Access Denied'); } $project = new SI_Project(); $projects = $project->getMyProjects($user->id); return object_to_data($projects, array('id', 'company_id', 'name', 'default_item_code_id')); }
* */ require_once('includes/common.php'); checkLogin(); require_once('includes/SI_Project.php'); require_once('includes/SI_Task.php'); require_once('includes/SI_TaskStatus.php'); require_once('includes/SI_TaskItem.php'); require_once('includes/SI_TaskPriority.php'); require_once('includes/SI_SalesCommissionType.php'); $title = ''; $task = new SI_Task(); $project = new SI_Project(); if($_REQUEST['mode'] == 'add'){ $title = "Add Task"; $task->due_ts = ''; if(empty($_REQUEST['project_id'])){ fatal_error("Error: No Project ID specified!\n"); }else{ $task->project_id = $_REQUEST['project_id']; if($project->get($task->project_id) === FALSE){ fatal_error("Could not retreive project!"); debug_message($project->getLastError()); } if(!$project->hasRights(PROJECT_RIGHT_EDIT)){ fatal_error('Insufficent access rights for this project!'); }
public static function save_meta_box_time_tracking_toggl($post_id, $post, $callback_args, $invoice_id = null) { $toggl_id = isset($_POST['sa_toggl_toggl_id']) ? $_POST['sa_toggl_toggl_id'] : 0; // Create new toggl project if selection permits if ($toggl_id == 'create_new') { // args $project = SI_Project::get_instance($post_id); $args = array('project_name' => $post->post_title); // create $toggl_id = self::maybe_create_toggl_project($project, $args); return; } // set the meta self::set_projects_toggl_id($post_id, (int) $toggl_id); self::set_to_sync_time($post_id); // Reset if (isset($_POST['sa_toggl_sync_time']) && $_POST['sa_toggl_sync_time']) { self::set_to_sync_time($post_id, true); } $default_activity = isset($_POST['sa_toggl_default_activity']) ? $_POST['sa_toggl_default_activity'] : 0; self::set_projects_default_time_import_activity($post_id, (int) $default_activity); if (isset($_POST['sa_toggl_pulldown_time']) && $_POST['sa_toggl_pulldown_time']) { self::download_toggl_time($post_id); } }
$tasks = $task->findTasks($_GET['query']); } else { $output['error'] = 'Invalid parameters for findTasks action'; break; } } else { $tasks = $task->findTasks($params[0]); } if ($tasks === false) { $output['error'] = $task->getLastError(); } else { $output['tasks'] = $tasks; } break; case 'addTaskActivity': $project = new SI_Project(); $company = new SI_Company(); $task = new SI_Task(); $item_code = new SI_ItemCode(); $task_activity = new SI_TaskActivity(); $task_activity->start_ts = getTSFromInput($_POST['ta_popup_start_ts']['date'], $_POST['ta_popup_start_ts']['time']); $task_activity->end_ts = getTSFromInput($_POST['ta_popup_end_ts']['date'], $_POST['ta_popup_end_ts']['time']); $task_activity->task_id = intval($_POST['ta_popup_task_id']); $task_activity->user_id = $loggedin_user->id; $task_activity->text = $_POST['ta_popup_text']; $task_activity->item_code_id = $_POST['ta_popup_item_code_id']; $debug_info = "\n\t\t\tPOST = " . print_r($_POST, true) . "\n\n\t\t\tstart_ts = {$task_activity->start_ts}\n\n\t\t\tend_ts = {$task_activity->end_ts}\n\n\t\t\ttask_id = {$task_activity->task_id}\n\n\t\t\tuser_id = {$task_activity->user_id}\n\n\t\t\titem_code_id = {$task_activity->item_code_id}\n\n\t\t\ttext = {$task_activity->text}\n\n\t\t"; $output['debug'] = $debug_info; if ($task_activity->task_id > 0 || $task_activity->start_ts > 0 || $task_activity->end_ts > 0) { if ($task_activity->task_id <= 0 || $task_activity->start_ts <= 0 || $task_activity->end_ts <= 0) { $output['error'] = "Skipping incomplete entry\n";
<p> <b><?php _e('Projects', 'sprout-invoices'); ?> </b> <?php if (!empty($projects)) { ?> <dl> <?php foreach ($projects as $project_id) { ?> <?php $project = SI_Project::get_instance($project_id); ?> <dt><?php printf('<a href="%s">%s</a>', get_edit_post_link($project_id), get_the_title($project_id)); ?> </dt> <dd> <?php if ($project->get_start_date() && $project->get_end_date()) { ?> <?php printf('%s—%s', date_i18n(get_option('date_format'), $project->get_start_date()), date_i18n(get_option('date_format'), $project->get_end_date())); ?> <?php } elseif ($project->get_start_date()) { ?> <?php printf('<b>Start</b>—%s', date_i18n(get_option('date_format'), $project->get_start_date()));
/** * Display the content for the column * * @param string $column_name * @param int $id post_id * @return string */ public static function column_display($column_name, $id) { $project = SI_Project::get_instance($id); if (!is_a($project, 'SI_Project')) { return; } // return for that temp post switch ($column_name) { case 'info': $associated_clients = $project->get_associated_clients(); echo '<p>'; printf('<b>%s</b>: ', si__('Client')); if (!empty($associated_clients)) { $clients_print = array(); foreach ($associated_clients as $client_id) { $clients_print[] = sprintf('<span class="associated_client"><a href="%s">%s</a></span>', get_edit_post_link($client_id), get_the_title($client_id)); } } if (!empty($clients_print)) { echo implode(', ', $clients_print); } else { echo si__('No associated clients'); } echo '</p>'; echo '<p>'; printf('<b>%s</b>: ', si__('Site')); echo make_clickable(esc_url($project->get_website())); echo '</p>'; break; case 'invoices': $invoices = $project->get_invoices(); $split = 2; $split_invoices = array_slice($invoices, 0, $split); if (!empty($split_invoices)) { echo "<dl>"; foreach ($split_invoices as $invoice_id) { printf('<dt>%s</dt><dd><a href="%s">%s</a></dd>', get_post_time(get_option('date_format'), false, $invoice_id), get_edit_post_link($invoice_id), get_the_title($invoice_id)); } echo "</dl>"; if (count($invoices) > $split) { printf('<span class="description">' . si__('...%s of <a href="%s">%s</a> most recent shown') . '</span>', $split, get_edit_post_link($id), count($invoices)); } } else { printf('<em>%s</em>', si__('No invoices')); } break; case 'estimates': $estimates = $project->get_estimates(); $split = 2; $split_estimates = array_slice($estimates, 0, $split); if (!empty($split_estimates)) { echo "<dl>"; foreach ($split_estimates as $estimate_id) { printf('<dt>%s</dt><dd><a href="%s">%s</a></dd>', get_post_time(get_option('date_format'), false, $estimate_id), get_edit_post_link($estimate_id), get_the_title($estimate_id)); } echo "</dl>"; if (count($estimates) > $split) { printf('<span class="description">' . si__('...%s of <a href="%s">%s</a> most recent shown') . '</span>', $split, get_edit_post_link($id), count($estimates)); } } else { printf('<em>%s</em>', si__('No estimates')); } break; default: // code... break; } }
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * */ require_once 'includes/common.php'; require_once 'includes/SI_Project.php'; require_once 'includes/SI_Company.php'; require_once 'includes/SI_Task.php'; checkLogin(); $company = new SI_Company(); $project = new SI_Project(); $title = "Create Project"; if ($_POST['save']) { $project->owner_id = $loggedin_user->id; $_POST['due_ts'] = getTSFromInput($_POST['due_ts']); $project->updateFromAssocArray($_POST); if ($project->add()) { foreach ($_POST['tasks'] as $task_data) { if (!empty($task_data['name'])) { $task = new SI_Task(); $task->name = $task_data['name']; $task->billable = 'D'; $task->task_status_id = $task_data['status']; $task->task_priority_id = $task_data['priority']; $task->project_id = $project->id; if (!$task->add()) {
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * */ require_once('includes/common.php'); require_once('includes/SI_PaymentSchedule.php'); require_once('includes/SI_CompanyTransaction.php'); require_once('includes/SI_Project.php'); require_once('includes/SI_Task.php'); require_once('includes/SI_ItemCode.php'); checkLogin('accounting'); $title = ''; $ps = new SI_PaymentSchedule(); $project = new SI_Project(); $task = new SI_Task(); $item_code = new SI_ItemCode(); // Clean up amount if(!empty($_POST['amount'])){ $_POST['amount'] = preg_replace('/[^0-9\.]/','', $_POST['amount']); } if($_REQUEST['mode'] == 'add'){ $title = "Add Scheduled Billing"; $project_id = intval($_REQUEST['project_id']); $task_id = intval($_REQUEST['task_id']); if($project_id == 0 && $task_id == 0){ fatal_error("You must provide a task_id or project_id for this scheduled payment!\n");
} $transactions = $company->getTransactions(NULL, 5); if($transactions === FALSE){ $error_msg .= "Error getting transactions for company!\n"; debug_message($company->getLastError()); } $invoice = new SI_Invoice(); $invoices = $invoice->getOutstanding($company->id); if($invoices === FALSE){ $error_msg .= "Could not retrieve Outstanding Invoice list!\n"; debug_message($invoice->getLastError()); } $project = new SI_Project(); $active_projects = TRUE; if(isset($_REQUEST['show_all']) && $_REQUEST['show_all'] == 'Y'){ $active_projects = FALSE; } $projects = $project->getCompanyProjects($company->id, $active_projects); if($projects === FALSE){ $error_msg .= "Could not retrieve active project list!\n"; debug_message($project->getLastError()); } if(isset($_POST['save'])){ if(is_array($_POST['expense']) && !empty($_POST['expense']['description'])){ $_POST['expense']['cost'] = preg_replace('/[^0-9\.]/','', $_POST['expense']['cost']); $_POST['expense']['price'] = preg_replace('/[^0-9\.]/','', $_POST['expense']['price']); if($company->addExpense($_POST['expense']['item_code_id'], $_POST['expense']['description'], $_POST['expense']['cost'], $_POST['expense']['price']) === FALSE){