</tr>
{/if}
{if $predefined_expenses}
-
<tr>
<td align="right">{$i18n.label.expense}:</td>
<td>{$forms.expensesForm.predefined_expense.control}</td>
<br>
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
- <td align="center"> Anuko Time Tracker 1.17.30.4018 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
+ <td align="center"> Anuko Time Tracker 1.17.31.4019 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
<a href="https://www.anuko.com/lp/tt_4.htm" target="_blank">{$i18n.footer.credits}</a> |
<a href="https://www.anuko.com/lp/tt_5.htm" target="_blank">{$i18n.footer.license}</a> |
<a href="https://www.anuko.com/lp/tt_7.htm" target="_blank">{$i18n.footer.improve}</a>
// Mandatory top option for project dropdown.
empty_label_project = '{$i18n.dropdown.select|escape:'javascript'}';
+// Prepare an array of predefined expenses.
+idx = 0;
+var defined_expenses = new Array();
+{foreach $predefined_expenses as $predefined_expense}
+ defined_expenses[idx] = new Array("{$predefined_expense.id}", "{$predefined_expense.name|escape:'javascript'}", "{$predefined_expense.cost}");
+ idx++;
+{/foreach}
+
// The fillProjectDropdown function populates the project combo box with
// projects associated with a selected client (client id is passed here as id).
function fillProjectDropdown(id) {
var date = new Date();
return date.strftime("%Y-%m-%d");
}
+
+// The recalculateCost function recalculates cost based on the current selection
+// of predefined expense and quantity and also changes the comment accordingly.
+function recalculateCost() {
+ var quantity_control = document.getElementById("quantity");
+ // Set quantity to 1 if it is not set already.
+ if (!quantity_control.value) {
+ quantity_control.value = "1";
+ }
+
+ var comment_control = document.getElementById("item_name");
+ var cost_control = document.getElementById("cost");
+ var replaceDecimalMark = ("." != "{$user->decimal_mark}");
+
+ // Calculate cost.
+ var dropdown = document.getElementById("predefined_expense");
+ if (dropdown.selectedIndex == 0) {
+ quantity_control.value = "";
+ comment_control.value = "";
+ cost_control.value = "";
+ } else {
+ comment_control.value = defined_expenses[dropdown.selectedIndex - 1][1] + " - " + quantity_control.value;
+ var quantity = quantity_control.value;
+ if (isNaN(quantity))
+ cost_control.value = "";
+ else {
+ var expenseCost = defined_expenses[dropdown.selectedIndex - 1][2];
+ if (replaceDecimalMark)
+ expenseCost = expenseCost.replace("{$user->decimal_mark}", ".");
+ var newCost = (quantity_control.value * expenseCost).toFixed(2);
+ if (replaceDecimalMark)
+ newCost = newCost.replace(".", "{$user->decimal_mark}");
+ cost_control.value = newCost;
+ }
+ }
+}
</script>
{$forms.expenseItemForm.open}
<td align="right">{$i18n.label.project} (*):</td>
<td>{$forms.expenseItemForm.project.control}</td>
</tr>
+{/if}
+{if $predefined_expenses}
+ <tr>
+ <td align="right">{$i18n.label.expense}:</td>
+ <td>{$forms.expenseItemForm.predefined_expense.control}</td>
+ </tr>
+ <tr>
+ <td align="right">{$i18n.label.quantity}:</td>
+ <td>{$forms.expenseItemForm.quantity.control}</td>
+ </tr>
{/if}
<tr>
<td align="right">{$i18n.label.item}:</td>
// Mandatory top option for project dropdown.
empty_label_project = '{$i18n.dropdown.select|escape:'javascript'}';
+// Prepare an array of predefined expenses.
+idx = 0;
+var defined_expenses = new Array();
+{foreach $predefined_expenses as $predefined_expense}
+ defined_expenses[idx] = new Array("{$predefined_expense.id}", "{$predefined_expense.name|escape:'javascript'}", "{$predefined_expense.cost}");
+ idx++;
+{/foreach}
+
// The fillProjectDropdown function populates the project combo box with
// projects associated with a selected client (client id is passed here as id).
function fillProjectDropdown(id) {
var date = new Date();
return date.strftime("%Y-%m-%d");
}
+
+// The recalculateCost function recalculates cost based on the current selection
+// of predefined expense and quantity and also changes the comment accordingly.
+function recalculateCost() {
+ var quantity_control = document.getElementById("quantity");
+ // Set quantity to 1 if it is not set already.
+ if (!quantity_control.value) {
+ quantity_control.value = "1";
+ }
+
+ var comment_control = document.getElementById("item_name");
+ var cost_control = document.getElementById("cost");
+ var replaceDecimalMark = ("." != "{$user->decimal_mark}");
+
+ // Calculate cost.
+ var dropdown = document.getElementById("predefined_expense");
+ if (dropdown.selectedIndex == 0) {
+ quantity_control.value = "";
+ comment_control.value = "";
+ cost_control.value = "";
+ } else {
+ comment_control.value = defined_expenses[dropdown.selectedIndex - 1][1] + " - " + quantity_control.value;
+ var quantity = quantity_control.value;
+ if (isNaN(quantity))
+ cost_control.value = "";
+ else {
+ var expenseCost = defined_expenses[dropdown.selectedIndex - 1][2];
+ if (replaceDecimalMark)
+ expenseCost = expenseCost.replace("{$user->decimal_mark}", ".");
+ var newCost = (quantity_control.value * expenseCost).toFixed(2);
+ if (replaceDecimalMark)
+ newCost = newCost.replace(".", "{$user->decimal_mark}");
+ cost_control.value = newCost;
+ }
+ }
+}
</script>
<!-- Inserted from time.tpl -->
<td align="right">{$i18n.label.project} (*):</td>
<td>{$forms.expensesForm.project.control}</td>
</tr>
+{/if}
+{if $predefined_expenses}
+ <tr>
+ <td align="right">{$i18n.label.expense}:</td>
+ <td>{$forms.expensesForm.predefined_expense.control}</td>
+ </tr>
+ <tr>
+ <td align="right">{$i18n.label.quantity}:</td>
+ <td>{$forms.expensesForm.quantity.control}</td>
+ </tr>
{/if}
<tr>
<td align="right">{$i18n.label.item} (*):</td>
'empty'=>array(''=>$i18n->getKey('dropdown.select'))));
}
}
+// If predefined expenses are configured, add controls to select an expense and quantity.
+$predefined_expenses = ttTeamHelper::getPredefinedExpenses($user->team_id);
+if ($predefined_expenses) {
+ $form->addInput(array('type'=>'combobox',
+ 'onchange'=>'recalculateCost();',
+ 'name'=>'predefined_expense',
+ 'style'=>'width: 250px;',
+ 'value'=>$cl_predefined_expense,
+ 'data'=>$predefined_expenses,
+ 'datakeys'=>array('id', 'name'),
+ 'empty'=>array(''=>$i18n->getKey('dropdown.select'))));
+ $form->addInput(array('type'=>'text','onchange'=>'recalculateCost();','maxlength'=>'40','name'=>'quantity','style'=>'width: 100px;','value'=>$cl_quantity));
+}
$form->addInput(array('type'=>'text','maxlength'=>'100','name'=>'item_name','style'=>'width: 250px;','value'=>$cl_item_name));
$form->addInput(array('type'=>'text','maxlength'=>'40','name'=>'cost','style'=>'width: 100px;','value'=>$cl_cost));
$form->addInput(array('type'=>'datefield','name'=>'date','maxlength'=>'20','value'=>$cl_date));
}
} // isPost
+$smarty->assign('predefined_expenses', $predefined_expenses);
$smarty->assign('client_list', $client_list);
$smarty->assign('project_list', $project_list);
$smarty->assign('task_list', $task_list);
'empty'=>array(''=>$i18n->getKey('dropdown.select'))));
}
}
+// If predefined expenses are configured, add controls to select an expense and quantity.
+$predefined_expenses = ttTeamHelper::getPredefinedExpenses($user->team_id);
+if ($predefined_expenses) {
+ $form->addInput(array('type'=>'combobox',
+ 'onchange'=>'recalculateCost();',
+ 'name'=>'predefined_expense',
+ 'style'=>'width: 250px;',
+ 'value'=>$cl_predefined_expense,
+ 'data'=>$predefined_expenses,
+ 'datakeys'=>array('id', 'name'),
+ 'empty'=>array(''=>$i18n->getKey('dropdown.select'))));
+ $form->addInput(array('type'=>'text','onchange'=>'recalculateCost();','maxlength'=>'40','name'=>'quantity','style'=>'width: 100px;','value'=>$cl_quantity));
+}
$form->addInput(array('type'=>'text','maxlength'=>'100','name'=>'item_name','style'=>'width: 250px;','value'=>$cl_item_name));
$form->addInput(array('type'=>'text','maxlength'=>'40','name'=>'cost','style'=>'width: 100px;','value'=>$cl_cost));
$form->addInput(array('type'=>'calendar','name'=>'date','highlight'=>'expenses','value'=>$cl_date)); // calendar
$smarty->assign('prev_date', $prev_date);
$smarty->assign('day_total', ttExpenseHelper::getTotalForDay($user->getActiveUser(), $cl_date));
$smarty->assign('expense_items', ttExpenseHelper::getItems($user->getActiveUser(), $cl_date));
+$smarty->assign('predefined_expenses', $predefined_expenses);
$smarty->assign('client_list', $client_list);
$smarty->assign('project_list', $project_list);
$smarty->assign('forms', array($form->getName()=>$form->toArray()));