This repository has been archived on 2025-06-21. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
suitedesk/modules/storm/storminvoice/storminvoice.auto_add.inc

97 lines
3.5 KiB
PHP

<?php
/**
* @file
* Contains functions relating to the SuiteDesk Invoice auto_add functionality
* (creating invoices based on other SuiteDesk nodes)
*/
function storminvoice_auto_add($node, $invoice = NULL) {
switch ($node->type) {
case 'stormorganization':
$invoice_nid = stormorganization_storminvoice_auto_add($node, $invoice);
break;
case 'stormproject':
$invoice_nid = stormproject_storminvoice_auto_add($node, $invoice);
break;
case 'stormtask':
$invoice_nid = stormtask_storminvoice_auto_add($node, $invoice);
break;
case 'stormticket':
$invoice_nid = stormticket_storminvoice_auto_add($node, $invoice);
break;
case 'stormtimetracking':
$invoice_nid = stormtimetracking_storminvoice_auto_add($node, $invoice);
break;
case 'stormexpense':
$invoice_nid = stormexpense_storminvoice_auto_add($node, $invoice);
break;
default:
drupal_set_message(t('This type of node cannot be automatically added to an invoice'), 'error');
// watchdog - add link to record error in more detail?
drupal_goto('node/'. $node->nid);
}
if ($invoice) {
drupal_set_message(t('The @type has been added to the selected invoice.', array('@type' => $node->type)));
}
else {
drupal_set_message(t('This invoice was created automatically from the selected @type.', array('@type' => $node->type)));
}
drupal_goto('node/'. $invoice_nid);
}
function storminvoice_auto_add_select() {
$form['node'] = array(
'#title' => t('Node'),
'#type' => 'hidden',
'#value' => arg(4),
);
$form['invoice'] = array(
'#title' => t('Invoice'),
'#type' => 'select',
'#options' => array(),
'#description' => t('Please choose the invoice that you would like to add to'),
);
// THIS CODE LOADS OPTIONS INTO THE INVOICE SELECTOR
// Load the node object, but don't know how to handle it yet because it could be a node of several types.
$node = node_load(arg(4));
/* This function does not know the type of node that is being billed for. To avoid recording all relationships between the SuiteDesk nodes,
* we simply check for the existance of a parent node (perhaps project, task, ticket etc). Organization will always be set.
* The invoices we show in the list are those that match these parents or where these attributes are not set.
*/
if (($node->type == 'stormorganization') && !($node->organization_nid)) {
$node->organization_nid = $node->nid;
}
elseif (($node->type == 'stormproject') && !($node->project_nid)) {
$node->project_nid = $node->nid;
}
$sql = "SELECT n.nid, n.title, sin.* FROM {node} AS n INNER JOIN {storminvoice} AS sin ON n.nid=sin.nid";
// Ensure node is published, correct type. Always filter by Organization
$sql .= " WHERE n.status=1 AND n.type='storminvoice' AND sin.organization_nid=". $node->organization_nid;
if ($node->project_nid) {
$sql .= " AND (sin.project_nid=". $node->project_nid ." OR sin.project_nid=0)";
}
$sql = storminvoice_access_sql($sql);
$sql = db_rewrite_sql($sql);
$r = db_query($sql);
while ($r_invoice = db_fetch_object($r)) {
$form['invoice']['#options'][$r_invoice->nid] = $r_invoice->number ." | ". $r_invoice->title;
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Select'),
);
return $form;
}
function storminvoice_auto_add_select_submit($form_id, $form_state) {
$node = node_load($form_state['values']['node']);
$invoice = $form_state['values']['invoice'];
storminvoice_auto_add($node, $invoice);
}