Move budget outside of the core
The budget planning feature is now a plugin See: https://github.com/kanboard/plugin-budget
This commit is contained in:
parent
d400f7c5be
commit
4b6672d0b3
2
Makefile
2
Makefile
|
|
@ -4,7 +4,7 @@ CSS_APP = $(addprefix assets/css/src/, $(addsuffix .css, base links title table
|
|||
CSS_PRINT = $(addprefix assets/css/src/, $(addsuffix .css, print links table board task comment subtask markdown))
|
||||
CSS_VENDOR = $(addprefix assets/css/vendor/, $(addsuffix .css, jquery-ui.min jquery-ui-timepicker-addon.min chosen.min fullcalendar.min font-awesome.min c3.min))
|
||||
|
||||
JS_APP = $(addprefix assets/js/src/, $(addsuffix .js, Popover Dropdown Tooltip Markdown Sidebar Search App Screenshot Calendar Board Swimlane Gantt Task TaskRepartitionChart UserRepartitionChart CumulativeFlowDiagram BurndownChart BudgetChart AvgTimeColumnChart TaskTimeColumnChart LeadCycleTimeChart Router))
|
||||
JS_APP = $(addprefix assets/js/src/, $(addsuffix .js, Popover Dropdown Tooltip Markdown Sidebar Search App Screenshot Calendar Board Swimlane Gantt Task TaskRepartitionChart UserRepartitionChart CumulativeFlowDiagram BurndownChart AvgTimeColumnChart TaskTimeColumnChart LeadCycleTimeChart Router))
|
||||
JS_VENDOR = $(addprefix assets/js/vendor/, $(addsuffix .js, jquery-1.11.1.min jquery-ui.min jquery-ui-timepicker-addon.min jquery.ui.touch-punch.min chosen.jquery.min moment.min fullcalendar.min mousetrap.min mousetrap-global-bind.min))
|
||||
JS_LANG = $(addprefix assets/js/vendor/lang/, $(addsuffix .js, da de es fi fr hu it ja nl nb pl pt pt-br ru sv sr th tr zh-cn))
|
||||
|
||||
|
|
|
|||
|
|
@ -1,135 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Controller;
|
||||
|
||||
/**
|
||||
* Budget
|
||||
*
|
||||
* @package controller
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class Budget extends Base
|
||||
{
|
||||
/**
|
||||
* Budget index page
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$project = $this->getProject();
|
||||
|
||||
$this->response->html($this->projectLayout('budget/index', array(
|
||||
'daily_budget' => $this->budget->getDailyBudgetBreakdown($project['id']),
|
||||
'project' => $project,
|
||||
'title' => t('Budget')
|
||||
), 'budget/sidebar'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Cost breakdown by users/subtasks/tasks
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function breakdown()
|
||||
{
|
||||
$project = $this->getProject();
|
||||
|
||||
$paginator = $this->paginator
|
||||
->setUrl('budget', 'breakdown', array('project_id' => $project['id']))
|
||||
->setMax(30)
|
||||
->setOrder('start')
|
||||
->setDirection('DESC')
|
||||
->setQuery($this->budget->getSubtaskBreakdown($project['id']))
|
||||
->calculate();
|
||||
|
||||
$this->response->html($this->projectLayout('budget/breakdown', array(
|
||||
'paginator' => $paginator,
|
||||
'project' => $project,
|
||||
'title' => t('Budget')
|
||||
), 'budget/sidebar'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create budget lines
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function create(array $values = array(), array $errors = array())
|
||||
{
|
||||
$project = $this->getProject();
|
||||
|
||||
if (empty($values)) {
|
||||
$values['date'] = date('Y-m-d');
|
||||
}
|
||||
|
||||
$this->response->html($this->projectLayout('budget/create', array(
|
||||
'lines' => $this->budget->getAll($project['id']),
|
||||
'values' => $values + array('project_id' => $project['id']),
|
||||
'errors' => $errors,
|
||||
'project' => $project,
|
||||
'title' => t('Budget lines')
|
||||
), 'budget/sidebar'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate and save a new budget
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
$project = $this->getProject();
|
||||
|
||||
$values = $this->request->getValues();
|
||||
list($valid, $errors) = $this->budget->validateCreation($values);
|
||||
|
||||
if ($valid) {
|
||||
|
||||
if ($this->budget->create($values['project_id'], $values['amount'], $values['comment'], $values['date'])) {
|
||||
$this->session->flash(t('The budget line have been created successfully.'));
|
||||
$this->response->redirect($this->helper->url->to('budget', 'create', array('project_id' => $project['id'])));
|
||||
}
|
||||
else {
|
||||
$this->session->flashError(t('Unable to create the budget line.'));
|
||||
}
|
||||
}
|
||||
|
||||
$this->create($values, $errors);
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirmation dialog before removing a budget
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function confirm()
|
||||
{
|
||||
$project = $this->getProject();
|
||||
|
||||
$this->response->html($this->projectLayout('budget/remove', array(
|
||||
'project' => $project,
|
||||
'budget_id' => $this->request->getIntegerParam('budget_id'),
|
||||
'title' => t('Remove a budget line'),
|
||||
), 'budget/sidebar'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a budget
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function remove()
|
||||
{
|
||||
$this->checkCSRFParam();
|
||||
$project = $this->getProject();
|
||||
|
||||
if ($this->budget->remove($this->request->getIntegerParam('budget_id'))) {
|
||||
$this->session->flash(t('Budget line removed successfully.'));
|
||||
} else {
|
||||
$this->session->flashError(t('Unable to remove this budget line.'));
|
||||
}
|
||||
|
||||
$this->response->redirect($this->helper->url->to('budget', 'create', array('project_id' => $project['id'])));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Controller;
|
||||
|
||||
/**
|
||||
* Hourly Rate controller
|
||||
*
|
||||
* @package controller
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class Hourlyrate extends User
|
||||
{
|
||||
/**
|
||||
* Display rate and form
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function index(array $values = array(), array $errors = array())
|
||||
{
|
||||
$user = $this->getUser();
|
||||
|
||||
$this->response->html($this->layout('hourlyrate/index', array(
|
||||
'rates' => $this->hourlyRate->getAllByUser($user['id']),
|
||||
'currencies_list' => $this->config->getCurrencies(),
|
||||
'values' => $values + array('user_id' => $user['id']),
|
||||
'errors' => $errors,
|
||||
'user' => $user,
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate and save a new rate
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
$values = $this->request->getValues();
|
||||
list($valid, $errors) = $this->hourlyRate->validateCreation($values);
|
||||
|
||||
if ($valid) {
|
||||
|
||||
if ($this->hourlyRate->create($values['user_id'], $values['rate'], $values['currency'], $values['date_effective'])) {
|
||||
$this->session->flash(t('Hourly rate created successfully.'));
|
||||
$this->response->redirect($this->helper->url->to('hourlyrate', 'index', array('user_id' => $values['user_id'])));
|
||||
}
|
||||
else {
|
||||
$this->session->flashError(t('Unable to save the hourly rate.'));
|
||||
}
|
||||
}
|
||||
|
||||
$this->index($values, $errors);
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirmation dialag box to remove a row
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function confirm()
|
||||
{
|
||||
$user = $this->getUser();
|
||||
|
||||
$this->response->html($this->layout('hourlyrate/remove', array(
|
||||
'rate_id' => $this->request->getIntegerParam('rate_id'),
|
||||
'user' => $user,
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a row
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function remove()
|
||||
{
|
||||
$this->checkCSRFParam();
|
||||
$user = $this->getUser();
|
||||
|
||||
if ($this->hourlyRate->remove($this->request->getIntegerParam('rate_id'))) {
|
||||
$this->session->flash(t('Rate removed successfully.'));
|
||||
}
|
||||
else {
|
||||
$this->session->flash(t('Unable to remove this rate.'));
|
||||
}
|
||||
|
||||
$this->response->redirect($this->helper->url->to('hourlyrate', 'index', array('user_id' => $user['id'])));
|
||||
}
|
||||
}
|
||||
|
|
@ -35,7 +35,6 @@ use Pimple\Container;
|
|||
* @property \Model\Action $action
|
||||
* @property \Model\Authentication $authentication
|
||||
* @property \Model\Board $board
|
||||
* @property \Model\Budget $budget
|
||||
* @property \Model\Category $category
|
||||
* @property \Model\Color $color
|
||||
* @property \Model\Comment $comment
|
||||
|
|
@ -43,7 +42,6 @@ use Pimple\Container;
|
|||
* @property \Model\Currency $currency
|
||||
* @property \Model\DateParser $dateParser
|
||||
* @property \Model\File $file
|
||||
* @property \Model\HourlyRate $hourlyRate
|
||||
* @property \Model\LastLogin $lastLogin
|
||||
* @property \Model\Link $link
|
||||
* @property \Model\Notification $notification
|
||||
|
|
|
|||
|
|
@ -28,4 +28,20 @@ abstract class PluginBase extends Base
|
|||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen on internal events
|
||||
*
|
||||
* @access public
|
||||
* @param string $event
|
||||
* @param callable $callback
|
||||
*/
|
||||
public function on($event, $callback)
|
||||
{
|
||||
$container = $this->container;
|
||||
|
||||
$this->container['dispatcher']->addListener($event, function() use ($container, $callback) {
|
||||
call_user_func($callback, $container);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,13 +20,6 @@ class PluginLoader extends Base
|
|||
*/
|
||||
const TABLE_SCHEMA = 'plugin_schema_versions';
|
||||
|
||||
/**
|
||||
* Plugin folder
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const PATH = __DIR__.'/../../plugins';
|
||||
|
||||
/**
|
||||
* Scan plugin folder and load plugins
|
||||
*
|
||||
|
|
@ -34,8 +27,8 @@ class PluginLoader extends Base
|
|||
*/
|
||||
public function scan()
|
||||
{
|
||||
if (file_exists(self::PATH)) {
|
||||
$dir = new DirectoryIterator(self::PATH);
|
||||
if (file_exists(__DIR__.'/../../plugins')) {
|
||||
$dir = new DirectoryIterator(__DIR__.'/../../plugins');
|
||||
|
||||
foreach ($dir as $fileinfo) {
|
||||
if (! $fileinfo->isDot() && $fileinfo->isDir()) {
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Vzdálený',
|
||||
'Enabled' => 'Povoleno',
|
||||
'Disabled' => 'Zakázáno',
|
||||
'Google account linked' => 'Google účet byl propojen',
|
||||
'Github account linked' => 'Mit Githubaccount verbunden',
|
||||
'Username:' => 'Uživatelské jméno:',
|
||||
'Name:' => 'Jméno:',
|
||||
'Email:' => 'e-mail',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Horizontální rolování',
|
||||
'Compact/wide view' => 'Kompaktní/plné zobrazení',
|
||||
'No results match:' => 'Žádná shoda:',
|
||||
'Remove hourly rate' => 'Stundensatz entfernen',
|
||||
'Do you really want to remove this hourly rate?' => 'Opravdu chcete odstranit tuto hodinovou sazbu?',
|
||||
'Hourly rates' => 'Hodinové sazby',
|
||||
'Hourly rate' => 'Hodinová sazba',
|
||||
'Currency' => 'Měna',
|
||||
'Effective date' => 'Datum účinnosti',
|
||||
'Add new rate' => 'Přidat novou hodinovou sazbu',
|
||||
'Rate removed successfully.' => 'Sazba byla úspěšně odstraněna',
|
||||
'Unable to remove this rate.' => 'Sazbu nelze odstranit.',
|
||||
'Unable to save the hourly rate.' => 'Hodinovou sazbu nelze uložit',
|
||||
'Hourly rate created successfully.' => 'Hodinová sazba byla úspěšně vytvořena.',
|
||||
'Start time' => 'Počáteční datum',
|
||||
'End time' => 'Konečné datum',
|
||||
'Comment' => 'Komentář',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Soubory',
|
||||
'Images' => 'Obrázky',
|
||||
'Private project' => 'Soukromý projekt',
|
||||
'Amount' => 'Částka',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
'Budget' => 'Rozpočet',
|
||||
'Budget line' => 'Položka rozpočtu',
|
||||
'Budget line removed successfully.' => 'Položka rozpočtu byla odstraněna',
|
||||
'Budget lines' => 'Položky rozpočtu',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
'Cost' => 'Cena',
|
||||
'Cost breakdown' => 'Rozpis nákladů',
|
||||
'Custom Stylesheet' => 'Vlastní šablony stylů',
|
||||
'download' => 'Stáhnout',
|
||||
'Do you really want to remove this budget line?' => 'Opravdu chcete odstranit tuto rozpočtovou řádku?',
|
||||
'EUR - Euro' => 'EUR - Euro',
|
||||
'Expenses' => 'Náklady',
|
||||
'GBP - British Pound' => 'GBP - Britská Libra',
|
||||
'INR - Indian Rupee' => 'INR - Indische Rupien',
|
||||
'JPY - Japanese Yen' => 'JPY - Japanischer Yen',
|
||||
'New budget line' => 'Nová položka rozpočtu',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Neuseeland-Dollar',
|
||||
'Remove a budget line' => 'Budgetlinie entfernen',
|
||||
'Remove budget line' => 'Budgetlinie entfernen',
|
||||
'RSD - Serbian dinar' => 'RSD - Serbische Dinar',
|
||||
'The budget line have been created successfully.' => 'Položka rozpočtu byla úspěšně vytvořena.',
|
||||
'Unable to create the budget line.' => 'Nelze vytvořit rozpočtovou řádku.',
|
||||
'Unable to remove this budget line.' => 'Nelze vyjmout rozpočtovou řádku.',
|
||||
'USD - US Dollar' => 'USD - US Dollar',
|
||||
'Remaining' => 'Zbývající',
|
||||
'Destination column' => 'Cílový sloupec',
|
||||
'Move the task to another column when assigned to a user' => 'Přesunout úkol do jiného sloupce, když je úkol přiřazen uživateli.',
|
||||
'Move the task to another column when assignee is cleared' => 'Přesunout úkol do jiného sloupce, když je pověření uživatele vymazáno.',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Kurz',
|
||||
'Change reference currency' => 'Změnit referenční měnu',
|
||||
'Add a new currency rate' => 'Přidat nový směnný kurz',
|
||||
'Currency rates are used to calculate project budget.' => 'Měnové sazby se používají k výpočtu rozpočtu projektu.',
|
||||
'Reference currency' => 'Referenční měna',
|
||||
'The currency rate have been added successfully.' => 'Směnný kurz byl úspěšně přidán.',
|
||||
'Unable to add this currency rate.' => 'Nelze přidat tento směnný kurz',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
'%s moved the task #%d to the first swimlane' => '%s hat die Aufgabe #%d in die erste Swimlane verschoben',
|
||||
'%s moved the task #%d to the swimlane "%s"' => '%s hat die Aufgabe #%d in die Swimlane "%s" verschoben',
|
||||
// 'Swimlane' => '',
|
||||
'Budget overview' => 'Budget Übersicht',
|
||||
'Type' => 'Typ',
|
||||
'There is not enough data to show something.' => 'Es gibt nicht genug Daten für die Anzeige',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Remote',
|
||||
'Enabled' => 'Aktiv',
|
||||
'Disabled' => 'Deaktiveret',
|
||||
'Google account linked' => 'Google-konto forbundet',
|
||||
'Github account linked' => 'Github-konto forbundet',
|
||||
'Username:' => 'Brugernavn',
|
||||
'Name:' => 'Navn:',
|
||||
'Email:' => 'Email:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
// 'Horizontal scrolling' => '',
|
||||
// 'Compact/wide view' => '',
|
||||
// 'No results match:' => '',
|
||||
// 'Remove hourly rate' => '',
|
||||
// 'Do you really want to remove this hourly rate?' => '',
|
||||
// 'Hourly rates' => '',
|
||||
// 'Hourly rate' => '',
|
||||
// 'Currency' => '',
|
||||
// 'Effective date' => '',
|
||||
// 'Add new rate' => '',
|
||||
// 'Rate removed successfully.' => '',
|
||||
// 'Unable to remove this rate.' => '',
|
||||
// 'Unable to save the hourly rate.' => '',
|
||||
// 'Hourly rate created successfully.' => '',
|
||||
// 'Start time' => '',
|
||||
// 'End time' => '',
|
||||
// 'Comment' => '',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
// 'Files' => '',
|
||||
// 'Images' => '',
|
||||
// 'Private project' => '',
|
||||
// 'Amount' => '',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
// 'Budget' => '',
|
||||
// 'Budget line' => '',
|
||||
// 'Budget line removed successfully.' => '',
|
||||
// 'Budget lines' => '',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
// 'Cost' => '',
|
||||
// 'Cost breakdown' => '',
|
||||
// 'Custom Stylesheet' => '',
|
||||
// 'download' => '',
|
||||
// 'Do you really want to remove this budget line?' => '',
|
||||
// 'EUR - Euro' => '',
|
||||
// 'Expenses' => '',
|
||||
// 'GBP - British Pound' => '',
|
||||
// 'INR - Indian Rupee' => '',
|
||||
// 'JPY - Japanese Yen' => '',
|
||||
// 'New budget line' => '',
|
||||
// 'NZD - New Zealand Dollar' => '',
|
||||
// 'Remove a budget line' => '',
|
||||
// 'Remove budget line' => '',
|
||||
// 'RSD - Serbian dinar' => '',
|
||||
// 'The budget line have been created successfully.' => '',
|
||||
// 'Unable to create the budget line.' => '',
|
||||
// 'Unable to remove this budget line.' => '',
|
||||
// 'USD - US Dollar' => '',
|
||||
// 'Remaining' => '',
|
||||
// 'Destination column' => '',
|
||||
// 'Move the task to another column when assigned to a user' => '',
|
||||
// 'Move the task to another column when assignee is cleared' => '',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
// 'Rate' => '',
|
||||
// 'Change reference currency' => '',
|
||||
// 'Add a new currency rate' => '',
|
||||
// 'Currency rates are used to calculate project budget.' => '',
|
||||
// 'Reference currency' => '',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
// 'Unable to add this currency rate.' => '',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Remote',
|
||||
'Enabled' => 'angeschaltet',
|
||||
'Disabled' => 'abgeschaltet',
|
||||
'Google account linked' => 'Mit Google-Account verbunden',
|
||||
'Github account linked' => 'Mit Github-Account verbunden',
|
||||
'Username:' => 'Benutzername',
|
||||
'Name:' => 'Name',
|
||||
'Email:' => 'E-Mail',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Horizontales Scrollen',
|
||||
'Compact/wide view' => 'Kompakt/Breite-Ansicht',
|
||||
'No results match:' => 'Keine Ergebnisse:',
|
||||
'Remove hourly rate' => 'Stundensatz entfernen',
|
||||
'Do you really want to remove this hourly rate?' => 'Diesen Stundensatz wirklich entfernen?',
|
||||
'Hourly rates' => 'Stundensätze',
|
||||
'Hourly rate' => 'Stundensatz',
|
||||
'Currency' => 'Währung',
|
||||
'Effective date' => 'Inkraftsetzung',
|
||||
'Add new rate' => 'Neue Rate hinzufügen',
|
||||
'Rate removed successfully.' => 'Rate erfolgreich entfernt',
|
||||
'Unable to remove this rate.' => 'Nicht in der Lage, diese Rate zu entfernen.',
|
||||
'Unable to save the hourly rate.' => 'Nicht in der Lage, diese Rate zu speichern',
|
||||
'Hourly rate created successfully.' => 'Stundensatz erfolgreich angelegt.',
|
||||
'Start time' => 'Startzeit',
|
||||
'End time' => 'Endzeit',
|
||||
'Comment' => 'Kommentar',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Dateien',
|
||||
'Images' => 'Bilder',
|
||||
'Private project' => 'privates Projekt',
|
||||
'Amount' => 'Betrag',
|
||||
'AUD - Australian Dollar' => 'AUD - Australische Dollar',
|
||||
'Budget' => 'Budget',
|
||||
'Budget line' => 'Budgetlinie',
|
||||
'Budget line removed successfully.' => 'Budgetlinie erfolgreich entfernt',
|
||||
'Budget lines' => 'Budgetlinien',
|
||||
'CAD - Canadian Dollar' => 'CAD - Kanadische Dollar',
|
||||
'CHF - Swiss Francs' => 'CHF - Schweizer Franken',
|
||||
'Cost' => 'Kosten',
|
||||
'Cost breakdown' => 'Kostenaufschlüsselung',
|
||||
'Custom Stylesheet' => 'benutzerdefiniertes Stylesheet',
|
||||
'download' => 'Download',
|
||||
'Do you really want to remove this budget line?' => 'Soll diese Budgetlinie wirklich entfernt werden?',
|
||||
'EUR - Euro' => 'EUR - Euro',
|
||||
'Expenses' => 'Kosten',
|
||||
'GBP - British Pound' => 'GBP - Britische Pfund',
|
||||
'INR - Indian Rupee' => 'INR - Indische Rupien',
|
||||
'JPY - Japanese Yen' => 'JPY - Japanische Yen',
|
||||
'New budget line' => 'Neue Budgetlinie',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Neuseeland-Dollar',
|
||||
'Remove a budget line' => 'Budgetlinie entfernen',
|
||||
'Remove budget line' => 'Budgetlinie entfernen',
|
||||
'RSD - Serbian dinar' => 'RSD - Serbische Dinar',
|
||||
'The budget line have been created successfully.' => 'Die Budgetlinie wurde erfolgreich angelegt.',
|
||||
'Unable to create the budget line.' => 'Budgetlinie konnte nicht erstellt werden.',
|
||||
'Unable to remove this budget line.' => 'Budgetlinie konnte nicht gelöscht werden.',
|
||||
'USD - US Dollar' => 'USD - US-Dollar',
|
||||
'Remaining' => 'Verbleibend',
|
||||
'Destination column' => 'Zielspalte',
|
||||
'Move the task to another column when assigned to a user' => 'Aufgabe in eine andere Spalte verschieben, wenn ein User zugeordnet wurde.',
|
||||
'Move the task to another column when assignee is cleared' => 'Aufgabe in eine andere Spalte verschieben, wenn die Zuordnung gelöscht wurde.',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Kurse',
|
||||
'Change reference currency' => 'Referenzwährung ändern',
|
||||
'Add a new currency rate' => 'Neuen Währungskurs hinzufügen',
|
||||
'Currency rates are used to calculate project budget.' => 'Währungskurse werden verwendet, um das Projektbudget zu berechnen.',
|
||||
'Reference currency' => 'Referenzwährung',
|
||||
'The currency rate have been added successfully.' => 'Der Währungskurs wurde erfolgreich hinzugefügt.',
|
||||
'Unable to add this currency rate.' => 'Währungskurs konnte nicht hinzugefügt werden',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
'%s moved the task #%d to the first swimlane' => '%s hat die Aufgabe #%d in die erste Swimlane verschoben',
|
||||
'%s moved the task #%d to the swimlane "%s"' => '%s hat die Aufgabe #%d in die Swimlane "%s" verschoben',
|
||||
// 'Swimlane' => '',
|
||||
'Budget overview' => 'Budget-Übersicht',
|
||||
'Type' => 'Typ',
|
||||
'There is not enough data to show something.' => 'Es gibt nicht genügend Daten für diese Anzeige',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Remota',
|
||||
'Enabled' => 'Activada',
|
||||
'Disabled' => 'Desactivada',
|
||||
'Google account linked' => 'Vinculada con Cuenta de Google',
|
||||
'Github account linked' => 'Vinculada con Cuenta de Gitgub',
|
||||
'Username:' => 'Nombre de Usuario:',
|
||||
'Name:' => 'Nombre:',
|
||||
'Email:' => 'Correo electrónico:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Desplazamiento horizontal',
|
||||
'Compact/wide view' => 'Vista compacta/amplia',
|
||||
'No results match:' => 'No hay resultados coincidentes:',
|
||||
'Remove hourly rate' => 'Quitar cobro horario',
|
||||
'Do you really want to remove this hourly rate?' => '¿Realmente quire quitar el cobro horario?',
|
||||
'Hourly rates' => 'Cobros horarios',
|
||||
'Hourly rate' => 'Cobro horario',
|
||||
'Currency' => 'Moneda',
|
||||
'Effective date' => 'Fecha efectiva',
|
||||
'Add new rate' => 'Añadir nuevo cobro',
|
||||
'Rate removed successfully.' => 'Cobro quitado con éxito.',
|
||||
'Unable to remove this rate.' => 'No pude quitar este cobro.',
|
||||
'Unable to save the hourly rate.' => 'No pude grabar el cobro horario.',
|
||||
'Hourly rate created successfully.' => 'Cobro horario creado con éxito',
|
||||
'Start time' => 'Tiempo de inicio',
|
||||
'End time' => 'Tiempo de fin',
|
||||
'Comment' => 'Comentario',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Ficheros',
|
||||
'Images' => 'Imágenes',
|
||||
'Private project' => 'Proyecto privado',
|
||||
'Amount' => 'Cantidad',
|
||||
'AUD - Australian Dollar' => 'AUD - Dólar australiano',
|
||||
'Budget' => 'Presupuesto',
|
||||
'Budget line' => 'Línea de presupuesto',
|
||||
'Budget line removed successfully.' => 'Línea de presupuesto quitada con éxito',
|
||||
'Budget lines' => 'Líneas de presupuesto',
|
||||
'CAD - Canadian Dollar' => 'CAD - Dólar canadiense',
|
||||
'CHF - Swiss Francs' => 'CHF - Francos suizos',
|
||||
'Cost' => 'Costo',
|
||||
'Cost breakdown' => 'Desglose de costes',
|
||||
'Custom Stylesheet' => 'Hoja de estilo Personalizada',
|
||||
'download' => 'descargar',
|
||||
'Do you really want to remove this budget line?' => '¿Realmente quiere quitar esta línea de presupuesto?',
|
||||
'EUR - Euro' => 'EUR - Euro',
|
||||
'Expenses' => 'Gastos',
|
||||
'GBP - British Pound' => 'GBP - Libra británica',
|
||||
'INR - Indian Rupee' => 'INR - Rupias indúes',
|
||||
'JPY - Japanese Yen' => 'JPY - Yen japonés',
|
||||
'New budget line' => 'Nueva línea de presupuesto',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Dóloar neocelandés',
|
||||
'Remove a budget line' => 'Quitar una línea de presupuesto',
|
||||
'Remove budget line' => 'Quitar línea de presupuesto',
|
||||
'RSD - Serbian dinar' => 'RSD - Dinar serbio',
|
||||
'The budget line have been created successfully.' => 'Se ha creado la línea de presupuesto con éxito.',
|
||||
'Unable to create the budget line.' => 'No pude crear la línea de presupuesto.',
|
||||
'Unable to remove this budget line.' => 'No pude quitar esta línea de presupuesto.',
|
||||
'USD - US Dollar' => 'USD - Dólar Estadounidense',
|
||||
'Remaining' => 'Restante',
|
||||
'Destination column' => 'Columna destino',
|
||||
'Move the task to another column when assigned to a user' => 'Mover la tarea a otra columna al asignarse al usuario',
|
||||
'Move the task to another column when assignee is cleared' => 'Mover la tarea a otra columna al quitar el concesionario',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Cambio',
|
||||
'Change reference currency' => 'Cambiar moneda de referencia',
|
||||
'Add a new currency rate' => 'Añadir nuevo cambio de moneda',
|
||||
'Currency rates are used to calculate project budget.' => 'Se usan los cambios de moneda para calcular el presupuesto del proyecto.',
|
||||
'Reference currency' => 'Moneda de referencia',
|
||||
'The currency rate have been added successfully.' => 'Se ha añadido el cambio de moneda con éxito',
|
||||
'Unable to add this currency rate.' => 'No pude añadir este cambio de moneda.',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
'%s moved the task #%d to the first swimlane' => '%s movió la tarea #%d a la primera calle',
|
||||
'%s moved the task #%d to the swimlane "%s"' => '%s movió la tarea #%d a la calle "%s"',
|
||||
'Swimlane' => 'Calle',
|
||||
'Budget overview' => 'Resumen del Presupuesto',
|
||||
'Type' => 'Tipo',
|
||||
'There is not enough data to show something.' => 'No hay datos suficientes como para mostrar algo.',
|
||||
'Gravatar' => 'Gravatar',
|
||||
'Hipchat' => 'Hipchat',
|
||||
'Slack' => 'Desatendida',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Etä',
|
||||
'Enabled' => 'Käytössä',
|
||||
'Disabled' => 'Pois käytöstä',
|
||||
'Google account linked' => 'Google-tili liitetty',
|
||||
'Github account linked' => 'Github-tili liitetty',
|
||||
'Username:' => 'Käyttäjänimi:',
|
||||
'Name:' => 'Nimi:',
|
||||
'Email:' => 'Sähköpostiosoite:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
// 'Horizontal scrolling' => '',
|
||||
// 'Compact/wide view' => '',
|
||||
// 'No results match:' => '',
|
||||
// 'Remove hourly rate' => '',
|
||||
// 'Do you really want to remove this hourly rate?' => '',
|
||||
// 'Hourly rates' => '',
|
||||
// 'Hourly rate' => '',
|
||||
// 'Currency' => '',
|
||||
// 'Effective date' => '',
|
||||
// 'Add new rate' => '',
|
||||
// 'Rate removed successfully.' => '',
|
||||
// 'Unable to remove this rate.' => '',
|
||||
// 'Unable to save the hourly rate.' => '',
|
||||
// 'Hourly rate created successfully.' => '',
|
||||
// 'Start time' => '',
|
||||
// 'End time' => '',
|
||||
// 'Comment' => '',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
// 'Files' => '',
|
||||
// 'Images' => '',
|
||||
// 'Private project' => '',
|
||||
// 'Amount' => '',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
// 'Budget' => '',
|
||||
// 'Budget line' => '',
|
||||
// 'Budget line removed successfully.' => '',
|
||||
// 'Budget lines' => '',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
// 'Cost' => '',
|
||||
// 'Cost breakdown' => '',
|
||||
// 'Custom Stylesheet' => '',
|
||||
// 'download' => '',
|
||||
// 'Do you really want to remove this budget line?' => '',
|
||||
// 'EUR - Euro' => '',
|
||||
// 'Expenses' => '',
|
||||
// 'GBP - British Pound' => '',
|
||||
// 'INR - Indian Rupee' => '',
|
||||
// 'JPY - Japanese Yen' => '',
|
||||
// 'New budget line' => '',
|
||||
// 'NZD - New Zealand Dollar' => '',
|
||||
// 'Remove a budget line' => '',
|
||||
// 'Remove budget line' => '',
|
||||
// 'RSD - Serbian dinar' => '',
|
||||
// 'The budget line have been created successfully.' => '',
|
||||
// 'Unable to create the budget line.' => '',
|
||||
// 'Unable to remove this budget line.' => '',
|
||||
// 'USD - US Dollar' => '',
|
||||
// 'Remaining' => '',
|
||||
// 'Destination column' => '',
|
||||
// 'Move the task to another column when assigned to a user' => '',
|
||||
// 'Move the task to another column when assignee is cleared' => '',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
// 'Rate' => '',
|
||||
// 'Change reference currency' => '',
|
||||
// 'Add a new currency rate' => '',
|
||||
// 'Currency rates are used to calculate project budget.' => '',
|
||||
// 'Reference currency' => '',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
// 'Unable to add this currency rate.' => '',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -397,8 +397,6 @@ return array(
|
|||
'Remote' => 'Distant',
|
||||
'Enabled' => 'Activé',
|
||||
'Disabled' => 'Désactivé',
|
||||
'Google account linked' => 'Compte Google attaché',
|
||||
'Github account linked' => 'Compte Github attaché',
|
||||
'Username:' => 'Nom d\'utilisateur :',
|
||||
'Name:' => 'Nom :',
|
||||
'Email:' => 'Email :',
|
||||
|
|
@ -669,17 +667,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Défilement horizontal',
|
||||
'Compact/wide view' => 'Basculer entre la vue compacte et étendue',
|
||||
'No results match:' => 'Aucun résultat :',
|
||||
'Remove hourly rate' => 'Supprimer un taux horaire',
|
||||
'Do you really want to remove this hourly rate?' => 'Voulez-vous vraiment supprimer ce taux horaire ?',
|
||||
'Hourly rates' => 'Taux horaires',
|
||||
'Hourly rate' => 'Taux horaire',
|
||||
'Currency' => 'Devise',
|
||||
'Effective date' => 'Date d\'effet',
|
||||
'Add new rate' => 'Ajouter un nouveau taux horaire',
|
||||
'Rate removed successfully.' => 'Taux horaire supprimé avec succès.',
|
||||
'Unable to remove this rate.' => 'Impossible de supprimer ce taux horaire.',
|
||||
'Unable to save the hourly rate.' => 'Impossible de sauvegarder ce taux horaire.',
|
||||
'Hourly rate created successfully.' => 'Taux horaire créé avec succès.',
|
||||
'Start time' => 'Date de début',
|
||||
'End time' => 'Date de fin',
|
||||
'Comment' => 'Commentaire',
|
||||
|
|
@ -705,34 +693,18 @@ return array(
|
|||
'Files' => 'Fichiers',
|
||||
'Images' => 'Images',
|
||||
'Private project' => 'Projet privé',
|
||||
'Amount' => 'Montant',
|
||||
'AUD - Australian Dollar' => 'AUD - Dollar australien',
|
||||
'Budget' => 'Budget',
|
||||
'Budget line' => 'Ligne budgétaire',
|
||||
'Budget line removed successfully.' => 'Ligne budgétaire supprimée avec succès.',
|
||||
'Budget lines' => 'Lignes budgétaire',
|
||||
'CAD - Canadian Dollar' => 'CAD - Dollar canadien',
|
||||
'CHF - Swiss Francs' => 'CHF - Franc suisse',
|
||||
'Cost' => 'Coût',
|
||||
'Cost breakdown' => 'Détail des coûts',
|
||||
'Custom Stylesheet' => 'Feuille de style personalisée',
|
||||
'download' => 'télécharger',
|
||||
'Do you really want to remove this budget line?' => 'Voulez-vous vraiment supprimer cette ligne budgétaire ?',
|
||||
'EUR - Euro' => 'EUR - Euro',
|
||||
'Expenses' => 'Dépenses',
|
||||
'GBP - British Pound' => 'GBP - Livre sterling',
|
||||
'INR - Indian Rupee' => 'INR - Roupie indienne',
|
||||
'JPY - Japanese Yen' => 'JPY - Yen',
|
||||
'New budget line' => 'Nouvelle ligne budgétaire',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Dollar néo-zélandais',
|
||||
'Remove a budget line' => 'Supprimer une ligne budgétaire',
|
||||
'Remove budget line' => 'Supprimer une ligne budgétaire',
|
||||
'RSD - Serbian dinar' => 'RSD - Dinar serbe',
|
||||
'The budget line have been created successfully.' => 'La ligne de budgétaire a été créée avec succès.',
|
||||
'Unable to create the budget line.' => 'Impossible de créer cette ligne budgétaire.',
|
||||
'Unable to remove this budget line.' => 'Impossible de supprimer cette ligne budgétaire.',
|
||||
'USD - US Dollar' => 'USD - Dollar américain',
|
||||
'Remaining' => 'Restant',
|
||||
'Destination column' => 'Colonne de destination',
|
||||
'Move the task to another column when assigned to a user' => 'Déplacer la tâche dans une autre colonne lorsque celle-ci est assignée à quelqu\'un',
|
||||
'Move the task to another column when assignee is cleared' => 'Déplacer la tâche dans une autre colonne lorsque celle-ci n\'est plus assignée',
|
||||
|
|
@ -748,7 +720,6 @@ return array(
|
|||
'Rate' => 'Taux',
|
||||
'Change reference currency' => 'Changer la monnaie de référence',
|
||||
'Add a new currency rate' => 'Ajouter un nouveau taux pour une devise',
|
||||
'Currency rates are used to calculate project budget.' => 'Le cours des devises est utilisé pour calculer le budget des projets.',
|
||||
'Reference currency' => 'Devise de référence',
|
||||
'The currency rate have been added successfully.' => 'Le taux de change a été ajouté avec succès.',
|
||||
'Unable to add this currency rate.' => 'Impossible d\'ajouter ce taux de change',
|
||||
|
|
@ -880,9 +851,6 @@ return array(
|
|||
'%s moved the task #%d to the first swimlane' => '%s a déplacé la tâche n°%d dans la première swimlane',
|
||||
'%s moved the task #%d to the swimlane "%s"' => '%s a déplacé la tâche n°%d dans la swimlane « %s »',
|
||||
'Swimlane' => 'Swimlane',
|
||||
'Budget overview' => 'Vue d\'ensemble du budget',
|
||||
'Type' => 'Type',
|
||||
'There is not enough data to show something.' => 'Il n\'y a pas assez de données pour montrer quelque chose.',
|
||||
'Gravatar' => 'Gravatar',
|
||||
'Hipchat' => 'Hipchat',
|
||||
'Slack' => 'Slack',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Távoli',
|
||||
'Enabled' => 'Engedélyezve',
|
||||
'Disabled' => 'Letiltva',
|
||||
'Google account linked' => 'Google fiók összekapcsolva',
|
||||
'Github account linked' => 'Github fiók összekapcsolva',
|
||||
'Username:' => 'Felhasználónév:',
|
||||
'Name:' => 'Név:',
|
||||
'Email:' => 'E-mail:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Vízszintes görgetés',
|
||||
'Compact/wide view' => 'Kompakt/széles nézet',
|
||||
'No results match:' => 'Nincs találat:',
|
||||
'Remove hourly rate' => 'Órabér törlése',
|
||||
'Do you really want to remove this hourly rate?' => 'Valóban törölni kívánja az órabért?',
|
||||
'Hourly rates' => 'Órabérek',
|
||||
'Hourly rate' => 'Órabér',
|
||||
'Currency' => 'Pénznem',
|
||||
'Effective date' => 'Hatálybalépés ideje',
|
||||
'Add new rate' => 'Új bér',
|
||||
'Rate removed successfully.' => 'Bér sikeresen törölve.',
|
||||
'Unable to remove this rate.' => 'Bér törlése sikertelen.',
|
||||
'Unable to save the hourly rate.' => 'Órabér mentése sikertelen.',
|
||||
'Hourly rate created successfully.' => 'Órabér sikeresen mentve.',
|
||||
'Start time' => 'Kezdés ideje',
|
||||
'End time' => 'Végzés ideje',
|
||||
'Comment' => 'Megjegyzés',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Fájlok',
|
||||
'Images' => 'Képek',
|
||||
'Private project' => 'Privát projekt',
|
||||
'Amount' => 'Összeg',
|
||||
'AUD - Australian Dollar' => 'AUD - Ausztrál dollár',
|
||||
'Budget' => 'Költségvetés',
|
||||
'Budget line' => 'Költségvetési tétel',
|
||||
'Budget line removed successfully.' => 'Költségvetési tétel sikeresen törölve.',
|
||||
'Budget lines' => 'Költségvetési tételek',
|
||||
'CAD - Canadian Dollar' => 'CAD - Kanadai dollár',
|
||||
'CHF - Swiss Francs' => 'CHF - Svájci frank',
|
||||
'Cost' => 'Költség',
|
||||
'Cost breakdown' => 'Költség visszaszámlálás',
|
||||
'Custom Stylesheet' => 'Egyéni sítluslap',
|
||||
'download' => 'letöltés',
|
||||
'Do you really want to remove this budget line?' => 'Biztos törölni akarja ezt a költségvetési tételt?',
|
||||
'EUR - Euro' => 'EUR - Euro',
|
||||
'Expenses' => 'Kiadások',
|
||||
'GBP - British Pound' => 'GBP - Angol font',
|
||||
'INR - Indian Rupee' => 'INR - Indiai rúpia',
|
||||
'JPY - Japanese Yen' => 'JPY - Japán Yen',
|
||||
'New budget line' => 'Új költségvetési tétel',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Új-Zélandi dollár',
|
||||
'Remove a budget line' => 'Költségvetési tétel törlése',
|
||||
'Remove budget line' => 'Költségvetési tétel törlése',
|
||||
'RSD - Serbian dinar' => 'RSD - Szerb dínár',
|
||||
'The budget line have been created successfully.' => 'Költségvetési tétel sikeresen létrehozva.',
|
||||
'Unable to create the budget line.' => 'Költségvetési tétel létrehozása sikertelen.',
|
||||
'Unable to remove this budget line.' => 'Költségvetési tétel törlése sikertelen.',
|
||||
'USD - US Dollar' => 'USD - Amerikai ollár',
|
||||
'Remaining' => 'Maradék',
|
||||
'Destination column' => 'Cél oszlop',
|
||||
'Move the task to another column when assigned to a user' => 'Feladat másik oszlopba helyezése felhasználóhoz rendélés után',
|
||||
'Move the task to another column when assignee is cleared' => 'Feladat másik oszlopba helyezése felhasználóhoz rendélés törlésekor',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
// 'Rate' => '',
|
||||
// 'Change reference currency' => '',
|
||||
// 'Add a new currency rate' => '',
|
||||
// 'Currency rates are used to calculate project budget.' => '',
|
||||
// 'Reference currency' => '',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
// 'Unable to add this currency rate.' => '',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Remoto',
|
||||
'Enabled' => 'Abilitato',
|
||||
'Disabled' => 'Disabilitato',
|
||||
'Google account linked' => 'Account Google collegato',
|
||||
'Github account linked' => 'Account Github collegato',
|
||||
// 'Username:' => '',
|
||||
'Name:' => 'Nome:',
|
||||
// 'Email:' => '',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Scrolling orizzontale',
|
||||
'Compact/wide view' => 'Vista compatta/estesa',
|
||||
'No results match:' => 'Nessun risultato trovato:',
|
||||
'Remove hourly rate' => 'Rimuovi tariffa oraria',
|
||||
'Do you really want to remove this hourly rate?' => 'Vuoi davvero rimuovere questa tariffa oraria?',
|
||||
'Hourly rates' => 'Tariffe orarie',
|
||||
'Hourly rate' => 'Tariffa oraria',
|
||||
'Currency' => 'Valuta',
|
||||
'Effective date' => 'Data effettiva',
|
||||
'Add new rate' => 'Aggiungi una nuova tariffa',
|
||||
'Rate removed successfully.' => 'Tariffa rimossa con successo.',
|
||||
'Unable to remove this rate.' => 'Impossibile rimuovere questa tariffa.',
|
||||
'Unable to save the hourly rate.' => 'Impossibile salvare la tariffa oraria.',
|
||||
'Hourly rate created successfully.' => 'Tariffa oraria creata con successo.',
|
||||
'Start time' => 'Data di inizio',
|
||||
'End time' => 'Data di completamento',
|
||||
'Comment' => 'Commento',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
// 'Files' => '',
|
||||
'Images' => 'Immagini',
|
||||
'Private project' => 'Progetto privato',
|
||||
'Amount' => 'Totale',
|
||||
'AUD - Australian Dollar' => 'AUD - Dollari Australiani',
|
||||
'Budget' => 'Bilancio',
|
||||
'Budget line' => 'Limite di bilancio',
|
||||
'Budget line removed successfully.' => 'Limite al bilancio rimosso con successo.',
|
||||
'Budget lines' => 'Limiti al bilancio',
|
||||
'CAD - Canadian Dollar' => 'CAD - Dollari Canadesi',
|
||||
'CHF - Swiss Francs' => 'CHF - Franchi Svizzeri',
|
||||
'Cost' => 'Costi',
|
||||
'Cost breakdown' => 'Abbattimento dei costi',
|
||||
'Custom Stylesheet' => 'CSS personalizzato',
|
||||
// 'download' => '',
|
||||
'Do you really want to remove this budget line?' => 'Vuoi davvero rimuovere questo limite al bilancio?',
|
||||
// 'EUR - Euro' => '',
|
||||
'Expenses' => 'Spese',
|
||||
'GBP - British Pound' => 'GBP - Pound Inglesi',
|
||||
'INR - Indian Rupee' => 'INR - Rupie Indiani',
|
||||
'JPY - Japanese Yen' => 'JPY - Yen Giapponesi',
|
||||
'New budget line' => 'Nuovo limite al bilancio',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Dollari della Nuova Zelanda',
|
||||
'Remove a budget line' => 'Rimuovi un limite al bilancio',
|
||||
'Remove budget line' => 'Rimuovi limite di bilancio',
|
||||
'RSD - Serbian dinar' => 'RSD - Dinar Serbi',
|
||||
'The budget line have been created successfully.' => 'Il limite al bilancio è stato creato correttamente',
|
||||
'Unable to create the budget line.' => 'Impossibile creare il limite al bilancio',
|
||||
'Unable to remove this budget line.' => 'Impossibile rimuovere questo limite al bilancio.',
|
||||
'USD - US Dollar' => 'USD - Dollari Americani',
|
||||
'Remaining' => 'Restanti',
|
||||
'Destination column' => 'Colonna destinazione',
|
||||
'Move the task to another column when assigned to a user' => 'Sposta il compito in un\'altra colonna quando viene assegnato ad un utente',
|
||||
'Move the task to another column when assignee is cleared' => 'Sposta il compito in un\'altra colonna quando l\'assegnatario cancellato',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Cambio',
|
||||
'Change reference currency' => 'Cambia la valuta di riferimento',
|
||||
'Add a new currency rate' => 'Aggiungi un nuovo tasso di cambio',
|
||||
'Currency rates are used to calculate project budget.' => 'I tassi di cambio sono utilizzati per calcolare i bilanci dei progetti',
|
||||
'Reference currency' => 'Valuta di riferimento',
|
||||
'The currency rate have been added successfully.' => 'Il tasso di cambio è stato aggiunto con successo.',
|
||||
'Unable to add this currency rate.' => 'Impossibile aggiungere questo tasso di cambio.',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'リモート',
|
||||
'Enabled' => '有効',
|
||||
'Disabled' => '無効',
|
||||
'Google account linked' => 'Google アカウントがリンク',
|
||||
'Github account linked' => 'Github のアカウントがリンク',
|
||||
'Username:' => 'ユーザ名:',
|
||||
'Name:' => '名前:',
|
||||
'Email:' => 'Email:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => '縦スクロール',
|
||||
'Compact/wide view' => 'コンパクト/ワイドビュー',
|
||||
'No results match:' => '結果が一致しませんでした',
|
||||
'Remove hourly rate' => '毎時レートを削除',
|
||||
'Do you really want to remove this hourly rate?' => '毎時レートを削除しますか?',
|
||||
'Hourly rates' => '毎時レート',
|
||||
'Hourly rate' => '毎時レート',
|
||||
'Currency' => '通貨',
|
||||
'Effective date' => '有効期限',
|
||||
'Add new rate' => '新しいレート',
|
||||
'Rate removed successfully.' => 'レートの削除に成功しました。',
|
||||
'Unable to remove this rate.' => 'レートを削除できませんでした。',
|
||||
'Unable to save the hourly rate.' => '時間毎のレートを保存できませんでした。',
|
||||
'Hourly rate created successfully.' => '時間毎のレートを作成しました。',
|
||||
'Start time' => '開始時間',
|
||||
'End time' => '終了時間',
|
||||
'Comment' => 'コメント',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'ファイル',
|
||||
'Images' => '画像',
|
||||
'Private project' => 'プライベートプロジェクト',
|
||||
'Amount' => '数量',
|
||||
'AUD - Australian Dollar' => 'AUD - 豪ドル',
|
||||
'Budget' => '予算',
|
||||
'Budget line' => '予算ライン',
|
||||
'Budget line removed successfully.' => '予算ラインを削除しました.',
|
||||
'Budget lines' => '予算ライン',
|
||||
'CAD - Canadian Dollar' => 'CAD - 加ドル',
|
||||
'CHF - Swiss Francs' => 'CHF - スイスフラン',
|
||||
'Cost' => 'コスト',
|
||||
'Cost breakdown' => 'コストブレークダウン',
|
||||
'Custom Stylesheet' => 'カスタムスタイルシート',
|
||||
'download' => 'ダウンロード',
|
||||
'Do you really want to remove this budget line?' => 'この予算ラインを本当に削除しますか?',
|
||||
'EUR - Euro' => 'EUR - ユーロ',
|
||||
'Expenses' => '支出',
|
||||
'GBP - British Pound' => 'GBP - 独ポンド',
|
||||
'INR - Indian Rupee' => 'INR - 伊ルピー',
|
||||
'JPY - Japanese Yen' => 'JPY - 日本円',
|
||||
'New budget line' => '新しい予算ライン',
|
||||
'NZD - New Zealand Dollar' => 'NZD - NZ ドル',
|
||||
'Remove a budget line' => '予算ラインの削除',
|
||||
'Remove budget line' => '予算ラインの削除',
|
||||
'RSD - Serbian dinar' => 'RSD - セルビアデナール',
|
||||
'The budget line have been created successfully.' => '予算ラインを作成しました',
|
||||
'Unable to create the budget line.' => '予算ラインを作成できませんでした。',
|
||||
'Unable to remove this budget line.' => '予算ラインを削除できませんでした。',
|
||||
'USD - US Dollar' => 'USD - 米ドル',
|
||||
'Remaining' => '残り',
|
||||
'Destination column' => '移動先のカラム',
|
||||
'Move the task to another column when assigned to a user' => 'ユーザの割り当てをしたらタスクを他のカラムに移動',
|
||||
'Move the task to another column when assignee is cleared' => 'ユーザの割り当てがなくなったらタスクを他のカラムに移動',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'レート',
|
||||
'Change reference currency' => '現在の基軸通貨',
|
||||
'Add a new currency rate' => '新しい通貨レートを追加',
|
||||
'Currency rates are used to calculate project budget.' => '通貨レートはプロジェクト予算の算出に利用されます。',
|
||||
'Reference currency' => '基軸通貨',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
'Unable to add this currency rate.' => 'この通貨レートを追加できません。',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Fjernstyrt',
|
||||
'Enabled' => 'Aktiv',
|
||||
'Disabled' => 'Deaktivert',
|
||||
'Google account linked' => 'Google-konto knyttet',
|
||||
'Github account linked' => 'GitHub-konto knyttet',
|
||||
'Username:' => 'Brukernavn',
|
||||
'Name:' => 'Navn:',
|
||||
'Email:' => 'Epost:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Bla horisontalt',
|
||||
'Compact/wide view' => 'Kompakt/bred visning',
|
||||
'No results match:' => 'Ingen resultater',
|
||||
// 'Remove hourly rate' => '',
|
||||
// 'Do you really want to remove this hourly rate?' => '',
|
||||
'Hourly rates' => 'Timepriser',
|
||||
'Hourly rate' => 'Timepris',
|
||||
'Currency' => 'Valuta',
|
||||
// 'Effective date' => '',
|
||||
// 'Add new rate' => '',
|
||||
// 'Rate removed successfully.' => '',
|
||||
// 'Unable to remove this rate.' => '',
|
||||
// 'Unable to save the hourly rate.' => '',
|
||||
// 'Hourly rate created successfully.' => '',
|
||||
// 'Start time' => '',
|
||||
// 'End time' => '',
|
||||
// 'Comment' => '',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Filer',
|
||||
'Images' => 'Bilder',
|
||||
'Private project' => 'Privat prosjekt',
|
||||
// 'Amount' => '',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
'Budget' => 'Budsjett',
|
||||
// 'Budget line' => '',
|
||||
// 'Budget line removed successfully.' => '',
|
||||
// 'Budget lines' => '',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
// 'Cost' => '',
|
||||
// 'Cost breakdown' => '',
|
||||
// 'Custom Stylesheet' => '',
|
||||
// 'download' => '',
|
||||
// 'Do you really want to remove this budget line?' => '',
|
||||
// 'EUR - Euro' => '',
|
||||
// 'Expenses' => '',
|
||||
// 'GBP - British Pound' => '',
|
||||
// 'INR - Indian Rupee' => '',
|
||||
// 'JPY - Japanese Yen' => '',
|
||||
// 'New budget line' => '',
|
||||
// 'NZD - New Zealand Dollar' => '',
|
||||
// 'Remove a budget line' => '',
|
||||
// 'Remove budget line' => '',
|
||||
// 'RSD - Serbian dinar' => '',
|
||||
// 'The budget line have been created successfully.' => '',
|
||||
// 'Unable to create the budget line.' => '',
|
||||
// 'Unable to remove this budget line.' => '',
|
||||
// 'USD - US Dollar' => '',
|
||||
// 'Remaining' => '',
|
||||
// 'Destination column' => '',
|
||||
'Move the task to another column when assigned to a user' => 'Flytt oppgaven til en annen kolonne når den er tildelt en bruker',
|
||||
'Move the task to another column when assignee is cleared' => 'Flytt oppgaven til en annen kolonne når ppgavetildeling fjernes ',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
// 'Rate' => '',
|
||||
// 'Change reference currency' => '',
|
||||
// 'Add a new currency rate' => '',
|
||||
// 'Currency rates are used to calculate project budget.' => '',
|
||||
// 'Reference currency' => '',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
// 'Unable to add this currency rate.' => '',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Remote',
|
||||
'Enabled' => 'Actief',
|
||||
'Disabled' => 'Inactief',
|
||||
'Google account linked' => 'Gelinkt Google Account',
|
||||
'Github account linked' => 'Gelinkt Github Account',
|
||||
'Username:' => 'Gebruikersnaam :',
|
||||
'Name:' => 'Naam :',
|
||||
'Email:' => 'Email :',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
// 'Horizontal scrolling' => '',
|
||||
// 'Compact/wide view' => '',
|
||||
// 'No results match:' => '',
|
||||
// 'Remove hourly rate' => '',
|
||||
// 'Do you really want to remove this hourly rate?' => '',
|
||||
// 'Hourly rates' => '',
|
||||
// 'Hourly rate' => '',
|
||||
// 'Currency' => '',
|
||||
// 'Effective date' => '',
|
||||
// 'Add new rate' => '',
|
||||
// 'Rate removed successfully.' => '',
|
||||
// 'Unable to remove this rate.' => '',
|
||||
// 'Unable to save the hourly rate.' => '',
|
||||
// 'Hourly rate created successfully.' => '',
|
||||
// 'Start time' => '',
|
||||
// 'End time' => '',
|
||||
// 'Comment' => '',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
// 'Files' => '',
|
||||
// 'Images' => '',
|
||||
// 'Private project' => '',
|
||||
// 'Amount' => '',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
// 'Budget' => '',
|
||||
// 'Budget line' => '',
|
||||
// 'Budget line removed successfully.' => '',
|
||||
// 'Budget lines' => '',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
// 'Cost' => '',
|
||||
// 'Cost breakdown' => '',
|
||||
// 'Custom Stylesheet' => '',
|
||||
// 'download' => '',
|
||||
// 'Do you really want to remove this budget line?' => '',
|
||||
// 'EUR - Euro' => '',
|
||||
// 'Expenses' => '',
|
||||
// 'GBP - British Pound' => '',
|
||||
// 'INR - Indian Rupee' => '',
|
||||
// 'JPY - Japanese Yen' => '',
|
||||
// 'New budget line' => '',
|
||||
// 'NZD - New Zealand Dollar' => '',
|
||||
// 'Remove a budget line' => '',
|
||||
// 'Remove budget line' => '',
|
||||
// 'RSD - Serbian dinar' => '',
|
||||
// 'The budget line have been created successfully.' => '',
|
||||
// 'Unable to create the budget line.' => '',
|
||||
// 'Unable to remove this budget line.' => '',
|
||||
// 'USD - US Dollar' => '',
|
||||
// 'Remaining' => '',
|
||||
// 'Destination column' => '',
|
||||
// 'Move the task to another column when assigned to a user' => '',
|
||||
// 'Move the task to another column when assignee is cleared' => '',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
// 'Rate' => '',
|
||||
// 'Change reference currency' => '',
|
||||
// 'Add a new currency rate' => '',
|
||||
// 'Currency rates are used to calculate project budget.' => '',
|
||||
// 'Reference currency' => '',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
// 'Unable to add this currency rate.' => '',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Zdalne',
|
||||
'Enabled' => 'Odblokowane',
|
||||
'Disabled' => 'Zablokowane',
|
||||
'Google account linked' => 'Połączone konto Google',
|
||||
'Github account linked' => 'Połączone konto Github',
|
||||
'Username:' => 'Nazwa Użytkownika:',
|
||||
'Name:' => 'Imię i Nazwisko',
|
||||
'Email:' => 'Email: ',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Przewijanie poziome',
|
||||
'Compact/wide view' => 'Pełny/Kompaktowy widok',
|
||||
'No results match:' => 'Brak wyników:',
|
||||
'Remove hourly rate' => 'Usuń stawkę godzinową',
|
||||
'Do you really want to remove this hourly rate?' => 'Czy na pewno chcesz usunąć stawkę godzinową?',
|
||||
'Hourly rates' => 'Stawki godzinowe',
|
||||
'Hourly rate' => 'Stawka godzinowa',
|
||||
'Currency' => 'Waluta',
|
||||
'Effective date' => 'Data efektywna',
|
||||
'Add new rate' => 'Dodaj nową stawkę',
|
||||
'Rate removed successfully.' => 'Stawka usunięta.',
|
||||
'Unable to remove this rate.' => 'Nie można usunąć tej stawki.',
|
||||
'Unable to save the hourly rate.' => 'Nie można zapisać tej stawki godzinowej.',
|
||||
'Hourly rate created successfully.' => 'Stawka godzinowa utworzona pomyślnie.',
|
||||
'Start time' => 'Rozpoczęto',
|
||||
'End time' => 'Zakończono',
|
||||
'Comment' => 'Komentarz',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Pliki',
|
||||
'Images' => 'Obrazy',
|
||||
'Private project' => 'Projekt prywatny',
|
||||
'Amount' => 'Ilość',
|
||||
'AUD - Australian Dollar' => 'AUD - Dolar australijski',
|
||||
'Budget' => 'Budżet',
|
||||
'Budget line' => 'Linia budżetowa',
|
||||
'Budget line removed successfully.' => 'Linia budżetowa usunięta.',
|
||||
'Budget lines' => 'Linie budżetowe',
|
||||
'CAD - Canadian Dollar' => 'CAD - Dolar kanadyjski',
|
||||
'CHF - Swiss Francs' => 'CHF - Frank szwajcarski',
|
||||
'Cost' => 'Koszt',
|
||||
'Cost breakdown' => 'Analiza kosztów',
|
||||
'Custom Stylesheet' => 'Niestandardowy arkusz stylów',
|
||||
'download' => 'pobierz',
|
||||
'Do you really want to remove this budget line?' => 'Czy chcesz usunąć tą linię budżetową?',
|
||||
// 'EUR - Euro' => '',
|
||||
'Expenses' => 'Wydatki',
|
||||
'GBP - British Pound' => 'GBP - Funt brytyjski',
|
||||
'INR - Indian Rupee' => 'INR - Rupia indyjska',
|
||||
'JPY - Japanese Yen' => 'JPY - Jen japoński',
|
||||
'New budget line' => 'Nowa linia budżetowa',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Dolar nowozelandzki',
|
||||
'Remove a budget line' => 'Usuń linię budżetową',
|
||||
'Remove budget line' => 'Usuń linię budżetową',
|
||||
'RSD - Serbian dinar' => 'RSD - Dinar serbski',
|
||||
// 'The budget line have been created successfully.' => '',
|
||||
'Unable to create the budget line.' => 'Nie można utworzyć linii budżetowej',
|
||||
'Unable to remove this budget line.' => 'Nie można usunąć tej linii budżetowej',
|
||||
'USD - US Dollar' => 'USD - Dolar amerykański',
|
||||
'Remaining' => 'Pozostało',
|
||||
'Destination column' => 'Kolumna docelowa',
|
||||
'Move the task to another column when assigned to a user' => 'Przenieś zadanie do innej kolumny gdy zostanie przypisane do osoby',
|
||||
'Move the task to another column when assignee is cleared' => 'Przenieś zadanie do innej kolumny gdy osoba odpowiedzialna zostanie usunięta',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Kurs',
|
||||
'Change reference currency' => 'Zmień walutę referencyjną',
|
||||
'Add a new currency rate' => 'Dodaj nowy kurs waluty',
|
||||
'Currency rates are used to calculate project budget.' => 'Kursy walut są używane do obliczeń budżetu projektu.',
|
||||
'Reference currency' => 'Waluta referencyjna',
|
||||
'The currency rate have been added successfully.' => 'Dodano kurs waluty',
|
||||
'Unable to add this currency rate.' => 'Nie można dodać kursu waluty',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Remoto',
|
||||
'Enabled' => 'Habilitado',
|
||||
'Disabled' => 'Desabilitado',
|
||||
'Google account linked' => 'Conta do Google associada',
|
||||
'Github account linked' => 'Conta do Github associada',
|
||||
'Username:' => 'Usuário:',
|
||||
'Name:' => 'Nome:',
|
||||
'Email:' => 'E-mail:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Rolagem horizontal',
|
||||
'Compact/wide view' => 'Alternar entre a vista compacta e ampliada',
|
||||
'No results match:' => 'Nenhum resultado:',
|
||||
'Remove hourly rate' => 'Retirar taxa horária',
|
||||
'Do you really want to remove this hourly rate?' => 'Você deseja realmente remover esta taxa horária?',
|
||||
'Hourly rates' => 'Taxas horárias',
|
||||
'Hourly rate' => 'Taxa horária',
|
||||
'Currency' => 'Moeda',
|
||||
'Effective date' => 'Data efetiva',
|
||||
'Add new rate' => 'Adicionar nova taxa',
|
||||
'Rate removed successfully.' => 'Taxa removido com sucesso.',
|
||||
'Unable to remove this rate.' => 'Impossível de remover esta taxa.',
|
||||
'Unable to save the hourly rate.' => 'Impossível salvar a taxa horária.',
|
||||
'Hourly rate created successfully.' => 'Taxa horária criada com sucesso.',
|
||||
'Start time' => 'Horário de início',
|
||||
'End time' => 'Horário de término',
|
||||
'Comment' => 'comentário',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Arquivos',
|
||||
'Images' => 'Imagens',
|
||||
'Private project' => 'Projeto privado',
|
||||
'Amount' => 'Quantia',
|
||||
'AUD - Australian Dollar' => 'AUD - Dólar australiano',
|
||||
'Budget' => 'Orçamento',
|
||||
'Budget line' => 'Rubrica orçamental',
|
||||
'Budget line removed successfully.' => 'Rubrica orçamental removida com sucesso',
|
||||
'Budget lines' => 'Rubricas orçamentais',
|
||||
'CAD - Canadian Dollar' => 'CAD - Dólar canadense',
|
||||
'CHF - Swiss Francs' => 'CHF - Francos Suíços',
|
||||
'Cost' => 'Custo',
|
||||
'Cost breakdown' => 'Repartição dos custos',
|
||||
'Custom Stylesheet' => 'Folha de estilo personalizado',
|
||||
'download' => 'baixar',
|
||||
'Do you really want to remove this budget line?' => 'Você deseja realmente remover esta rubrica orçamental?',
|
||||
'EUR - Euro' => 'EUR - Euro',
|
||||
'Expenses' => 'Despesas',
|
||||
'GBP - British Pound' => 'GBP - Libra Esterlina',
|
||||
'INR - Indian Rupee' => 'INR - Rúpia indiana',
|
||||
'JPY - Japanese Yen' => 'JPY - Iene japonês',
|
||||
'New budget line' => 'Nova rubrica orçamental',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Dólar Neozelandês',
|
||||
'Remove a budget line' => 'Remover uma rubrica orçamental',
|
||||
'Remove budget line' => 'Remover uma rubrica orçamental',
|
||||
'RSD - Serbian dinar' => 'RSD - Dinar sérvio',
|
||||
'The budget line have been created successfully.' => 'A rubrica orçamental foi criada com sucesso.',
|
||||
'Unable to create the budget line.' => 'Impossível de adicionar esta rubrica orçamental.',
|
||||
'Unable to remove this budget line.' => 'Impossível de remover esta rubrica orçamental.',
|
||||
'USD - US Dollar' => 'USD - Dólar norte-americano',
|
||||
'Remaining' => 'Restante',
|
||||
'Destination column' => 'Coluna de destino',
|
||||
'Move the task to another column when assigned to a user' => 'Mover a tarefa para uma outra coluna quando esta está atribuída a um usuário',
|
||||
'Move the task to another column when assignee is cleared' => 'Mover a tarefa para uma outra coluna quando esta não está atribuída',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Taxa',
|
||||
'Change reference currency' => 'Mudar a moeda de referência',
|
||||
'Add a new currency rate' => 'Adicionar uma nova taxa para uma moeda',
|
||||
'Currency rates are used to calculate project budget.' => 'As taxas de câmbio são utilizadas para calcular o orçamento do projeto.',
|
||||
'Reference currency' => 'Moeda de Referência',
|
||||
'The currency rate have been added successfully.' => 'A taxa de câmbio foi adicionada com sucesso.',
|
||||
'Unable to add this currency rate.' => 'Impossível de adicionar essa taxa de câmbio.',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
'%s moved the task #%d to the first swimlane' => '%s moveu a tarefa n° %d no primeiro swimlane',
|
||||
'%s moved the task #%d to the swimlane "%s"' => '%s moveu a tarefa n° %d no swimlane "%s"',
|
||||
'Swimlane' => 'Swimlane',
|
||||
'Budget overview' => 'Visão geral do orçamento',
|
||||
'Type' => 'Tipo',
|
||||
'There is not enough data to show something.' => 'Não há dados suficientes para mostrar alguma coisa.',
|
||||
'Gravatar' => 'Gravatar',
|
||||
'Hipchat' => 'Hipchat',
|
||||
'Slack' => 'Slack',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Remoto',
|
||||
'Enabled' => 'Activado',
|
||||
'Disabled' => 'Desactivado',
|
||||
'Google account linked' => 'Conta do Google associada',
|
||||
'Github account linked' => 'Conta do Github associada',
|
||||
'Username:' => 'Utilizador:',
|
||||
'Name:' => 'Nome:',
|
||||
'Email:' => 'E-mail:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Deslocamento horizontal',
|
||||
'Compact/wide view' => 'Alternar entre a vista compacta e ampliada',
|
||||
'No results match:' => 'Nenhum resultado:',
|
||||
'Remove hourly rate' => 'Retirar taxa horária',
|
||||
'Do you really want to remove this hourly rate?' => 'Tem a certeza que quer remover esta taxa horária?',
|
||||
'Hourly rates' => 'Taxas horárias',
|
||||
'Hourly rate' => 'Taxa horária',
|
||||
'Currency' => 'Moeda',
|
||||
'Effective date' => 'Data efectiva',
|
||||
'Add new rate' => 'Adicionar nova taxa',
|
||||
'Rate removed successfully.' => 'Taxa removido com sucesso.',
|
||||
'Unable to remove this rate.' => 'Impossível de remover esta taxa.',
|
||||
'Unable to save the hourly rate.' => 'Impossível salvar a taxa horária.',
|
||||
'Hourly rate created successfully.' => 'Taxa horária criada com sucesso.',
|
||||
'Start time' => 'Horário de início',
|
||||
'End time' => 'Horário de término',
|
||||
'Comment' => 'comentário',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Arquivos',
|
||||
'Images' => 'Imagens',
|
||||
'Private project' => 'Projecto privado',
|
||||
'Amount' => 'Quantia',
|
||||
'AUD - Australian Dollar' => 'AUD - Dólar australiano',
|
||||
'Budget' => 'Orçamento',
|
||||
'Budget line' => 'Rubrica orçamental',
|
||||
'Budget line removed successfully.' => 'Rubrica orçamental removida com sucesso',
|
||||
'Budget lines' => 'Rubricas orçamentais',
|
||||
'CAD - Canadian Dollar' => 'CAD - Dólar canadense',
|
||||
'CHF - Swiss Francs' => 'CHF - Francos Suíços',
|
||||
'Cost' => 'Custo',
|
||||
'Cost breakdown' => 'Repartição dos custos',
|
||||
'Custom Stylesheet' => 'Folha de estilos personalizada',
|
||||
'download' => 'transferir',
|
||||
'Do you really want to remove this budget line?' => 'Tem a certeza que quer remover esta rubrica orçamental?',
|
||||
'EUR - Euro' => 'EUR - Euro',
|
||||
'Expenses' => 'Despesas',
|
||||
'GBP - British Pound' => 'GBP - Libra Esterlina',
|
||||
'INR - Indian Rupee' => 'INR - Rúpia indiana',
|
||||
'JPY - Japanese Yen' => 'JPY - Iene japonês',
|
||||
'New budget line' => 'Nova rubrica orçamental',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Dólar Neozelandês',
|
||||
'Remove a budget line' => 'Remover uma rubrica orçamental',
|
||||
'Remove budget line' => 'Remover uma rubrica orçamental',
|
||||
'RSD - Serbian dinar' => 'RSD - Dinar sérvio',
|
||||
'The budget line have been created successfully.' => 'A rubrica orçamental foi criada com sucesso.',
|
||||
'Unable to create the budget line.' => 'Impossível adicionar esta rubrica orçamental.',
|
||||
'Unable to remove this budget line.' => 'Impossível remover esta rubrica orçamental.',
|
||||
'USD - US Dollar' => 'USD - Dólar norte-americano',
|
||||
'Remaining' => 'Restante',
|
||||
'Destination column' => 'Coluna de destino',
|
||||
'Move the task to another column when assigned to a user' => 'Mover a tarefa para uma outra coluna quando esta está atribuída a um utilizador',
|
||||
'Move the task to another column when assignee is cleared' => 'Mover a tarefa para uma outra coluna quando esta não está atribuída',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Taxa',
|
||||
'Change reference currency' => 'Mudar a moeda de referência',
|
||||
'Add a new currency rate' => 'Adicionar uma nova taxa para uma moeda',
|
||||
'Currency rates are used to calculate project budget.' => 'As taxas de câmbio são utilizadas para calcular o orçamento do projecto.',
|
||||
'Reference currency' => 'Moeda de Referência',
|
||||
'The currency rate have been added successfully.' => 'A taxa de câmbio foi adicionada com sucesso.',
|
||||
'Unable to add this currency rate.' => 'Impossível adicionar essa taxa de câmbio.',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
'%s moved the task #%d to the first swimlane' => '%s moveu a tarefa n° %d no primeiro swimlane',
|
||||
'%s moved the task #%d to the swimlane "%s"' => '%s moveu a tarefa n° %d no swimlane "%s"',
|
||||
'Swimlane' => 'Swimlane',
|
||||
'Budget overview' => 'Visão geral do orçamento',
|
||||
'Type' => 'Tipo',
|
||||
'There is not enough data to show something.' => 'Não há dados suficientes para mostrar alguma coisa.',
|
||||
'Gravatar' => 'Gravatar',
|
||||
'Hipchat' => 'Hipchat',
|
||||
'Slack' => 'Slack',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Удаленный',
|
||||
'Enabled' => 'Включен',
|
||||
'Disabled' => 'Выключены',
|
||||
'Google account linked' => 'Профиль Google связан',
|
||||
'Github account linked' => 'Профиль Github связан',
|
||||
'Username:' => 'Имя пользователя:',
|
||||
'Name:' => 'Имя:',
|
||||
'Email:' => 'E-mail:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Широкий вид',
|
||||
'Compact/wide view' => 'Компактный/широкий вид',
|
||||
'No results match:' => 'Отсутствуют результаты:',
|
||||
'Remove hourly rate' => 'Удалить почасовую ставку',
|
||||
'Do you really want to remove this hourly rate?' => 'Вы действительно хотите удалить эту почасовую ставку?',
|
||||
'Hourly rates' => 'Почасовые ставки',
|
||||
'Hourly rate' => 'Почасовая ставка',
|
||||
'Currency' => 'Валюта',
|
||||
'Effective date' => 'Дата вступления в силу',
|
||||
'Add new rate' => 'Добавить новый показатель',
|
||||
'Rate removed successfully.' => 'Показатель успешно удален.',
|
||||
'Unable to remove this rate.' => 'Не удается удалить этот показатель.',
|
||||
'Unable to save the hourly rate.' => 'Не удается сохранить почасовую ставку.',
|
||||
'Hourly rate created successfully.' => 'Почасовая ставка успешно создана.',
|
||||
'Start time' => 'Время начала',
|
||||
'End time' => 'Время завершения',
|
||||
'Comment' => 'Комментарий',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Файлы',
|
||||
'Images' => 'Изображения',
|
||||
'Private project' => 'Приватный проект',
|
||||
'Amount' => 'Количество',
|
||||
'AUD - Australian Dollar' => 'AUD - Австралийский доллар',
|
||||
'Budget' => 'Бюджет',
|
||||
'Budget line' => 'Статья бюджета',
|
||||
'Budget line removed successfully.' => 'Бюджетная статья успешно удалена.',
|
||||
'Budget lines' => 'Статьи бюджета',
|
||||
'CAD - Canadian Dollar' => 'CAD - Канадский доллар',
|
||||
'CHF - Swiss Francs' => 'CHF - Швейцарский Франк',
|
||||
'Cost' => 'Стоимость',
|
||||
'Cost breakdown' => 'Детализация затрат',
|
||||
'Custom Stylesheet' => 'Пользовательский стиль',
|
||||
'download' => 'загрузить',
|
||||
'Do you really want to remove this budget line?' => 'Вы действительно хотите удалить эту статью бюджета?',
|
||||
'EUR - Euro' => 'EUR - Евро',
|
||||
'Expenses' => 'Расходы',
|
||||
'GBP - British Pound' => 'GBP - Британский фунт',
|
||||
'INR - Indian Rupee' => 'INR - Индийский рупий',
|
||||
'JPY - Japanese Yen' => 'JPY - Японскай йена',
|
||||
'New budget line' => 'Новая статья бюджета',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Новозеландский доллар',
|
||||
'Remove a budget line' => 'Удалить строку в бюджете',
|
||||
'Remove budget line' => 'Удалить статью бюджета',
|
||||
'RSD - Serbian dinar' => 'RSD - Сербский динар',
|
||||
'The budget line have been created successfully.' => 'Статья бюджета успешно создана.',
|
||||
'Unable to create the budget line.' => 'Не удается создать эту статью бюджета.',
|
||||
'Unable to remove this budget line.' => 'Не удается удалить эту статью бюджета.',
|
||||
'USD - US Dollar' => 'USD - доллар США',
|
||||
'Remaining' => 'Прочее',
|
||||
'Destination column' => 'Колонка назначения',
|
||||
'Move the task to another column when assigned to a user' => 'Переместить задачу в другую колонку, когда она назначена пользователю',
|
||||
'Move the task to another column when assignee is cleared' => 'Переместить задачу в другую колонку, когда назначение снято ',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Курс',
|
||||
'Change reference currency' => 'Изменить справочник валют',
|
||||
'Add a new currency rate' => 'Add a new currency rate',
|
||||
'Currency rates are used to calculate project budget.' => 'Курсы валют используются для расчета бюджета проекта.',
|
||||
'Reference currency' => 'Справочник валют',
|
||||
'The currency rate have been added successfully.' => 'Курс валюты был успешно добавлен.',
|
||||
'Unable to add this currency rate.' => 'Невозможно добавить этот курс валюты.',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Udaljno',
|
||||
'Enabled' => 'Omogući',
|
||||
'Disabled' => 'Onemogući',
|
||||
'Google account linked' => 'Połączone konto Google',
|
||||
'Github account linked' => 'Połączone konto Github',
|
||||
'Username:' => 'Korisničko ime:',
|
||||
'Name:' => 'Ime i Prezime',
|
||||
'Email:' => 'Email: ',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
// 'Horizontal scrolling' => '',
|
||||
// 'Compact/wide view' => '',
|
||||
// 'No results match:' => '',
|
||||
// 'Remove hourly rate' => '',
|
||||
// 'Do you really want to remove this hourly rate?' => '',
|
||||
// 'Hourly rates' => '',
|
||||
// 'Hourly rate' => '',
|
||||
// 'Currency' => '',
|
||||
// 'Effective date' => '',
|
||||
// 'Add new rate' => '',
|
||||
// 'Rate removed successfully.' => '',
|
||||
// 'Unable to remove this rate.' => '',
|
||||
// 'Unable to save the hourly rate.' => '',
|
||||
// 'Hourly rate created successfully.' => '',
|
||||
// 'Start time' => '',
|
||||
// 'End time' => '',
|
||||
// 'Comment' => '',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
// 'Files' => '',
|
||||
// 'Images' => '',
|
||||
// 'Private project' => '',
|
||||
// 'Amount' => '',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
// 'Budget' => '',
|
||||
// 'Budget line' => '',
|
||||
// 'Budget line removed successfully.' => '',
|
||||
// 'Budget lines' => '',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
// 'Cost' => '',
|
||||
// 'Cost breakdown' => '',
|
||||
// 'Custom Stylesheet' => '',
|
||||
// 'download' => '',
|
||||
// 'Do you really want to remove this budget line?' => '',
|
||||
// 'EUR - Euro' => '',
|
||||
// 'Expenses' => '',
|
||||
// 'GBP - British Pound' => '',
|
||||
// 'INR - Indian Rupee' => '',
|
||||
// 'JPY - Japanese Yen' => '',
|
||||
// 'New budget line' => '',
|
||||
// 'NZD - New Zealand Dollar' => '',
|
||||
// 'Remove a budget line' => '',
|
||||
// 'Remove budget line' => '',
|
||||
// 'RSD - Serbian dinar' => '',
|
||||
// 'The budget line have been created successfully.' => '',
|
||||
// 'Unable to create the budget line.' => '',
|
||||
// 'Unable to remove this budget line.' => '',
|
||||
// 'USD - US Dollar' => '',
|
||||
// 'Remaining' => '',
|
||||
// 'Destination column' => '',
|
||||
// 'Move the task to another column when assigned to a user' => '',
|
||||
// 'Move the task to another column when assignee is cleared' => '',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
// 'Rate' => '',
|
||||
// 'Change reference currency' => '',
|
||||
// 'Add a new currency rate' => '',
|
||||
// 'Currency rates are used to calculate project budget.' => '',
|
||||
// 'Reference currency' => '',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
// 'Unable to add this currency rate.' => '',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Fjärr',
|
||||
'Enabled' => 'Aktiverad',
|
||||
'Disabled' => 'Inaktiverad',
|
||||
'Google account linked' => 'Googlekonto länkat',
|
||||
'Github account linked' => 'Githubkonto länkat',
|
||||
'Username:' => 'Användarnam:',
|
||||
'Name:' => 'Namn:',
|
||||
'Email:' => 'E-post:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Horisontell scroll',
|
||||
'Compact/wide view' => 'Kompakt/bred vy',
|
||||
'No results match:' => 'Inga matchande resultat',
|
||||
'Remove hourly rate' => 'Ta bort timtaxa',
|
||||
'Do you really want to remove this hourly rate?' => 'Vill du verkligen ta bort denna timtaxa?',
|
||||
'Hourly rates' => 'Timtaxor',
|
||||
'Hourly rate' => 'Timtaxa',
|
||||
'Currency' => 'Valuta',
|
||||
'Effective date' => 'Giltighetsdatum',
|
||||
'Add new rate' => 'Lägg till ny taxa',
|
||||
'Rate removed successfully.' => 'Taxan togs bort.',
|
||||
'Unable to remove this rate.' => 'Kunde inte ta bort taxan.',
|
||||
'Unable to save the hourly rate.' => 'Kunde inte spara timtaxan.',
|
||||
'Hourly rate created successfully.' => 'Timtaxan skapades.',
|
||||
'Start time' => 'Starttid',
|
||||
'End time' => 'Sluttid',
|
||||
'Comment' => 'Kommentar',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'Filer',
|
||||
'Images' => 'Bilder',
|
||||
'Private project' => 'Privat projekt',
|
||||
'Amount' => 'Belopp',
|
||||
'AUD - Australian Dollar' => 'AUD - Australiska dollar',
|
||||
'Budget' => 'Budget',
|
||||
'Budget line' => 'Budgetlinje',
|
||||
'Budget line removed successfully.' => 'Budgetlinjen togs bort.',
|
||||
'Budget lines' => 'Budgetlinjer',
|
||||
'CAD - Canadian Dollar' => 'CAD - Kanadensiska dollar',
|
||||
'CHF - Swiss Francs' => 'CHF - Schweiziska Franc',
|
||||
'Cost' => 'Kostnad',
|
||||
'Cost breakdown' => 'Kostnadssammanställning',
|
||||
'Custom Stylesheet' => 'Anpassad stilmall',
|
||||
'download' => 'ladda ned',
|
||||
'Do you really want to remove this budget line?' => 'Vill du verkligen ta bort budgetlinjen?',
|
||||
'EUR - Euro' => 'EUR - Euro',
|
||||
'Expenses' => 'Utgifter',
|
||||
'GBP - British Pound' => 'GBP - Brittiska Pund',
|
||||
'INR - Indian Rupee' => 'INR - Indiska Rupier',
|
||||
'JPY - Japanese Yen' => 'JPY - Japanska Yen',
|
||||
'New budget line' => 'Ny budgetlinje',
|
||||
'NZD - New Zealand Dollar' => 'NZD - Nya Zeeländska Dollar',
|
||||
'Remove a budget line' => 'Ta bort en budgetlinje',
|
||||
'Remove budget line' => 'Ta bort budgetlinje',
|
||||
'RSD - Serbian dinar' => 'RSD - Serbiska Dinarer',
|
||||
'The budget line have been created successfully.' => 'Budgetlinjen har skapats.',
|
||||
'Unable to create the budget line.' => 'Kunde inte skapa budgetlinjen.',
|
||||
'Unable to remove this budget line.' => 'Kunde inte ta bort budgetlinjen.',
|
||||
'USD - US Dollar' => 'USD - Amerikanska Dollar',
|
||||
'Remaining' => 'Återstående',
|
||||
'Destination column' => 'Målkolumn',
|
||||
'Move the task to another column when assigned to a user' => 'Flytta uppgiften till en annan kolumn när den tilldelats en användare',
|
||||
'Move the task to another column when assignee is cleared' => 'Flytta uppgiften till en annan kolumn när tilldelningen tas bort.',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'Kurs',
|
||||
'Change reference currency' => 'Ändra referenskurs',
|
||||
'Add a new currency rate' => 'Lägg till ny valutakurs',
|
||||
'Currency rates are used to calculate project budget.' => 'Valutakurser används för att beräkna projektbudget.',
|
||||
'Reference currency' => 'Referensvaluta',
|
||||
'The currency rate have been added successfully.' => 'Valutakursen har lagts till.',
|
||||
'Unable to add this currency rate.' => 'Kunde inte lägga till valutakursen.',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
'%s moved the task #%d to the first swimlane' => '%s flyttade uppgiften #%d till första swimlane',
|
||||
'%s moved the task #%d to the swimlane "%s"' => '%s flyttade uppgiften #%d till swimlane "%s"',
|
||||
'Swimlane' => 'Swimlane',
|
||||
'Budget overview' => 'Budgetöversikt',
|
||||
'Type' => 'Typ',
|
||||
'There is not enough data to show something.' => 'Det finns inte tillräckligt mycket data för att visa något.',
|
||||
'Gravatar' => 'Gravatar',
|
||||
'Hipchat' => 'Hipchat',
|
||||
'Slack' => 'Slack',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'รีโมท',
|
||||
'Enabled' => 'เปิดการใช้',
|
||||
'Disabled' => 'ปิดการใช้',
|
||||
'Google account linked' => 'เชื่อมกับกูเกิลแอคเคาท์',
|
||||
'Github account linked' => 'เชื่อมกับกิทฮับแอคเคาท์',
|
||||
'Username:' => 'ชื่อผู้ใช้:',
|
||||
'Name:' => 'ชื่อ:',
|
||||
'Email:' => 'อีเมล:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'เลื่อนตามแนวนอน',
|
||||
'Compact/wide view' => 'พอดี/กว้าง มุมมอง',
|
||||
'No results match:' => 'ไม่มีผลลัพท์ที่ตรง',
|
||||
'Remove hourly rate' => 'ลบอัตรารายชั่วโมง',
|
||||
'Do you really want to remove this hourly rate?' => 'คุณต้องการลบอัตรารายชั่วโมง?',
|
||||
'Hourly rates' => 'อัตรารายชั่วโมง',
|
||||
'Hourly rate' => 'อัตรารายชั่วโมง',
|
||||
'Currency' => 'สกุลเงิน',
|
||||
'Effective date' => 'วันที่จ่าย',
|
||||
'Add new rate' => 'เพิ่มอัตราใหม่',
|
||||
'Rate removed successfully.' => 'ลบอัตราเรียบร้อยแล้ว',
|
||||
'Unable to remove this rate.' => 'ไม่สามารถลบอัตรานี้ได้',
|
||||
'Unable to save the hourly rate.' => 'ไม่สามารถบันทึกอัตรารายชั่วโมง',
|
||||
'Hourly rate created successfully.' => 'อัตรารายชั่วโมงสร้างเรียบร้อยแล้ว',
|
||||
'Start time' => 'เวลาเริ่มต้น',
|
||||
'End time' => 'เวลาจบ',
|
||||
'Comment' => 'ความคิดเห็น',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => 'ไฟล์',
|
||||
'Images' => 'รูปภาพ',
|
||||
'Private project' => 'โปรเจคส่วนตัว',
|
||||
'Amount' => 'จำนวนเงิน',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
'Budget' => 'งบประมาณ',
|
||||
'Budget line' => 'วงเงินงบประมาณ',
|
||||
'Budget line removed successfully.' => 'ลบวงเงินประมาณเรียบร้อยแล้ว',
|
||||
'Budget lines' => 'วงเงินงบประมาณ',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
'Cost' => 'มูลค่า',
|
||||
'Cost breakdown' => 'รายละเอียดค่าใช้จ่าย',
|
||||
// 'Custom Stylesheet' => '',
|
||||
'download' => 'ดาวน์โหลด',
|
||||
'Do you really want to remove this budget line?' => 'คุณต้องการลบวงเงินงบประมาณนี้?',
|
||||
// 'EUR - Euro' => '',
|
||||
'Expenses' => 'รายจ่าย',
|
||||
// 'GBP - British Pound' => '',
|
||||
// 'INR - Indian Rupee' => '',
|
||||
// 'JPY - Japanese Yen' => '',
|
||||
'New budget line' => 'วงเงินงบประมาณใหม่',
|
||||
// 'NZD - New Zealand Dollar' => '',
|
||||
'Remove a budget line' => 'ลบวงเงินประมาณ',
|
||||
'Remove budget line' => 'ลบวงเงินประมาณ',
|
||||
// 'RSD - Serbian dinar' => '',
|
||||
'The budget line have been created successfully.' => 'สร้างวงเงินงบประมาณเรียบร้อยแล้ว',
|
||||
'Unable to create the budget line.' => 'ไม่สามารถสร้างวงเงินงบประมาณได้',
|
||||
'Unable to remove this budget line.' => 'ไม่สามารถลบวงเงินงบประมาณนี้',
|
||||
// 'USD - US Dollar' => '',
|
||||
'Remaining' => 'เหลืออยู่',
|
||||
'Destination column' => 'คอลัมน์เป้าหมาย',
|
||||
'Move the task to another column when assigned to a user' => 'ย้ายงานไปคอลัมน์อื่นเมื่อกำหนดบุคคลรับผิดชอบ',
|
||||
'Move the task to another column when assignee is cleared' => 'ย้ายงานไปคอลัมน์อื่นเมื่อไม่กำหนดบุคคลรับผิดชอบ',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => 'อัตรา',
|
||||
// 'Change reference currency' => '',
|
||||
'Add a new currency rate' => 'เพิ่มอัตราแลกเปลี่ยนเงินตราใหม่',
|
||||
'Currency rates are used to calculate project budget.' => 'อัตราแลกเปลี่ยนเงินตราถูกใช้ในการคำนวณงบประมาณของโปรเจค',
|
||||
// 'Reference currency' => '',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
// 'Unable to add this currency rate.' => '',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => 'Uzak',
|
||||
'Enabled' => 'Etkinleştirildi',
|
||||
'Disabled' => 'Devre dışı bırakıldı',
|
||||
'Google account linked' => 'Google hesabıyla bağlı',
|
||||
'Github account linked' => 'Github hesabıyla bağlı',
|
||||
'Username:' => 'Kullanıcı adı',
|
||||
'Name:' => 'Ad',
|
||||
'Email:' => 'E-Posta',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => 'Geniş görünüm',
|
||||
'Compact/wide view' => 'Ekrana sığdır / Geniş görünüm',
|
||||
// 'No results match:' => '',
|
||||
// 'Remove hourly rate' => '',
|
||||
// 'Do you really want to remove this hourly rate?' => '',
|
||||
// 'Hourly rates' => '',
|
||||
// 'Hourly rate' => '',
|
||||
// 'Currency' => '',
|
||||
// 'Effective date' => '',
|
||||
// 'Add new rate' => '',
|
||||
// 'Rate removed successfully.' => '',
|
||||
// 'Unable to remove this rate.' => '',
|
||||
// 'Unable to save the hourly rate.' => '',
|
||||
// 'Hourly rate created successfully.' => '',
|
||||
// 'Start time' => '',
|
||||
// 'End time' => '',
|
||||
// 'Comment' => '',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
// 'Files' => '',
|
||||
// 'Images' => '',
|
||||
// 'Private project' => '',
|
||||
// 'Amount' => '',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
// 'Budget' => '',
|
||||
// 'Budget line' => '',
|
||||
// 'Budget line removed successfully.' => '',
|
||||
// 'Budget lines' => '',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
// 'Cost' => '',
|
||||
// 'Cost breakdown' => '',
|
||||
// 'Custom Stylesheet' => '',
|
||||
// 'download' => '',
|
||||
// 'Do you really want to remove this budget line?' => '',
|
||||
// 'EUR - Euro' => '',
|
||||
// 'Expenses' => '',
|
||||
// 'GBP - British Pound' => '',
|
||||
// 'INR - Indian Rupee' => '',
|
||||
// 'JPY - Japanese Yen' => '',
|
||||
// 'New budget line' => '',
|
||||
// 'NZD - New Zealand Dollar' => '',
|
||||
// 'Remove a budget line' => '',
|
||||
// 'Remove budget line' => '',
|
||||
// 'RSD - Serbian dinar' => '',
|
||||
// 'The budget line have been created successfully.' => '',
|
||||
// 'Unable to create the budget line.' => '',
|
||||
// 'Unable to remove this budget line.' => '',
|
||||
// 'USD - US Dollar' => '',
|
||||
// 'Remaining' => '',
|
||||
// 'Destination column' => '',
|
||||
// 'Move the task to another column when assigned to a user' => '',
|
||||
// 'Move the task to another column when assignee is cleared' => '',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
// 'Rate' => '',
|
||||
// 'Change reference currency' => '',
|
||||
// 'Add a new currency rate' => '',
|
||||
// 'Currency rates are used to calculate project budget.' => '',
|
||||
// 'Reference currency' => '',
|
||||
// 'The currency rate have been added successfully.' => '',
|
||||
// 'Unable to add this currency rate.' => '',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
// 'Budget overview' => '',
|
||||
// 'Type' => '',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -395,8 +395,6 @@ return array(
|
|||
'Remote' => '远程',
|
||||
'Enabled' => '启用',
|
||||
'Disabled' => '停用',
|
||||
'Google account linked' => '已经链接谷歌账号',
|
||||
'Github account linked' => '已经链接Github账号',
|
||||
'Username:' => '用户名:',
|
||||
'Name:' => '姓名:',
|
||||
'Email:' => '电子邮件:',
|
||||
|
|
@ -667,17 +665,7 @@ return array(
|
|||
'Horizontal scrolling' => '水平滚动',
|
||||
'Compact/wide view' => '紧凑/宽视图',
|
||||
'No results match:' => '无匹配结果:',
|
||||
'Remove hourly rate' => '删除小时工资',
|
||||
'Do you really want to remove this hourly rate?' => '确定要删除此计时工资吗?',
|
||||
'Hourly rates' => '小时工资',
|
||||
'Hourly rate' => '小时工资',
|
||||
'Currency' => '货币',
|
||||
'Effective date' => '开始时间',
|
||||
'Add new rate' => '添加小时工资',
|
||||
'Rate removed successfully.' => '成功删除工资。',
|
||||
'Unable to remove this rate.' => '无法删除此小时工资。',
|
||||
'Unable to save the hourly rate.' => '无法删除小时工资。',
|
||||
'Hourly rate created successfully.' => '成功创建小时工资。',
|
||||
'Start time' => '开始时间',
|
||||
'End time' => '结束时1间',
|
||||
'Comment' => '注释',
|
||||
|
|
@ -703,34 +691,18 @@ return array(
|
|||
'Files' => '文件',
|
||||
'Images' => '图片',
|
||||
'Private project' => '私人项目',
|
||||
'Amount' => '数量',
|
||||
// 'AUD - Australian Dollar' => '',
|
||||
'Budget' => '预算',
|
||||
'Budget line' => '预算线',
|
||||
'Budget line removed successfully.' => '成功删除预算线',
|
||||
'Budget lines' => '预算线',
|
||||
// 'CAD - Canadian Dollar' => '',
|
||||
// 'CHF - Swiss Francs' => '',
|
||||
'Cost' => '成本',
|
||||
'Cost breakdown' => '成本分解',
|
||||
'Custom Stylesheet' => '自定义样式表',
|
||||
'download' => '下载',
|
||||
'Do you really want to remove this budget line?' => '确定要删除此预算线吗?',
|
||||
// 'EUR - Euro' => '',
|
||||
'Expenses' => '花费',
|
||||
// 'GBP - British Pound' => '',
|
||||
// 'INR - Indian Rupee' => '',
|
||||
// 'JPY - Japanese Yen' => '',
|
||||
'New budget line' => '新预算线',
|
||||
// 'NZD - New Zealand Dollar' => '',
|
||||
'Remove a budget line' => '删除预算线',
|
||||
'Remove budget line' => '删除预算线',
|
||||
// 'RSD - Serbian dinar' => '',
|
||||
'The budget line have been created successfully.' => '成功创建预算线。',
|
||||
'Unable to create the budget line.' => '无法创建预算线。',
|
||||
'Unable to remove this budget line.' => '无法删除此预算线。',
|
||||
// 'USD - US Dollar' => '',
|
||||
'Remaining' => '剩余',
|
||||
'Destination column' => '目标栏目',
|
||||
'Move the task to another column when assigned to a user' => '指定负责人时移动到其它栏目',
|
||||
'Move the task to another column when assignee is cleared' => '移除负责人时移动到其它栏目',
|
||||
|
|
@ -746,7 +718,6 @@ return array(
|
|||
'Rate' => '汇率',
|
||||
'Change reference currency' => '修改参考货币',
|
||||
'Add a new currency rate' => '添加新汇率',
|
||||
'Currency rates are used to calculate project budget.' => '汇率会用来计算项目预算。',
|
||||
'Reference currency' => '参考货币',
|
||||
'The currency rate have been added successfully.' => '成功添加汇率。',
|
||||
'Unable to add this currency rate.' => '无法添加此汇率',
|
||||
|
|
@ -878,9 +849,6 @@ return array(
|
|||
// '%s moved the task #%d to the first swimlane' => '',
|
||||
// '%s moved the task #%d to the swimlane "%s"' => '',
|
||||
// 'Swimlane' => '',
|
||||
'Budget overview' => '预算概览',
|
||||
'Type' => '类型',
|
||||
// 'There is not enough data to show something.' => '',
|
||||
// 'Gravatar' => '',
|
||||
// 'Hipchat' => '',
|
||||
// 'Slack' => '',
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ class Acl extends Base
|
|||
'export' => '*',
|
||||
'project' => array('edit', 'update', 'share', 'integration', 'users', 'alloweverybody', 'allow', 'setowner', 'revoke', 'duplicate', 'disable', 'enable'),
|
||||
'swimlane' => '*',
|
||||
'budget' => '*',
|
||||
'gantt' => array('project', 'savetaskdate', 'task', 'savetask'),
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,214 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Model;
|
||||
|
||||
use DateInterval;
|
||||
use DateTime;
|
||||
use SimpleValidator\Validator;
|
||||
use SimpleValidator\Validators;
|
||||
|
||||
/**
|
||||
* Budget
|
||||
*
|
||||
* @package model
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class Budget extends Base
|
||||
{
|
||||
/**
|
||||
* SQL table name
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const TABLE = 'budget_lines';
|
||||
|
||||
/**
|
||||
* Get all budget lines for a project
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_id
|
||||
* @return array
|
||||
*/
|
||||
public function getAll($project_id)
|
||||
{
|
||||
return $this->db->table(self::TABLE)->eq('project_id', $project_id)->desc('date')->findAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current total of the budget
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_id
|
||||
* @return float
|
||||
*/
|
||||
public function getTotal($project_id)
|
||||
{
|
||||
$result = $this->db->table(self::TABLE)->columns('SUM(amount) as total')->eq('project_id', $project_id)->findOne();
|
||||
return isset($result['total']) ? (float) $result['total'] : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get breakdown by tasks/subtasks/users
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_id
|
||||
* @return \PicoDb\Table
|
||||
*/
|
||||
public function getSubtaskBreakdown($project_id)
|
||||
{
|
||||
return $this->db
|
||||
->table(SubtaskTimeTracking::TABLE)
|
||||
->columns(
|
||||
SubtaskTimeTracking::TABLE.'.id',
|
||||
SubtaskTimeTracking::TABLE.'.user_id',
|
||||
SubtaskTimeTracking::TABLE.'.subtask_id',
|
||||
SubtaskTimeTracking::TABLE.'.start',
|
||||
SubtaskTimeTracking::TABLE.'.time_spent',
|
||||
Subtask::TABLE.'.task_id',
|
||||
Subtask::TABLE.'.title AS subtask_title',
|
||||
Task::TABLE.'.title AS task_title',
|
||||
Task::TABLE.'.project_id',
|
||||
User::TABLE.'.username',
|
||||
User::TABLE.'.name'
|
||||
)
|
||||
->join(Subtask::TABLE, 'id', 'subtask_id')
|
||||
->join(Task::TABLE, 'id', 'task_id', Subtask::TABLE)
|
||||
->join(User::TABLE, 'id', 'user_id')
|
||||
->eq(Task::TABLE.'.project_id', $project_id)
|
||||
->callback(array($this, 'applyUserRate'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gather necessary information to display the budget graph
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_id
|
||||
* @return array
|
||||
*/
|
||||
public function getDailyBudgetBreakdown($project_id)
|
||||
{
|
||||
$out = array();
|
||||
$in = $this->db->hashtable(self::TABLE)->eq('project_id', $project_id)->gt('amount', 0)->asc('date')->getAll('date', 'amount');
|
||||
$time_slots = $this->getSubtaskBreakdown($project_id)->findAll();
|
||||
|
||||
foreach ($time_slots as $slot) {
|
||||
$date = date('Y-m-d', $slot['start']);
|
||||
|
||||
if (! isset($out[$date])) {
|
||||
$out[$date] = 0;
|
||||
}
|
||||
|
||||
$out[$date] += $slot['cost'];
|
||||
}
|
||||
|
||||
$start = key($in) ?: key($out);
|
||||
$end = new DateTime;
|
||||
$left = 0;
|
||||
$serie = array();
|
||||
|
||||
for ($today = new DateTime($start); $today <= $end; $today->add(new DateInterval('P1D'))) {
|
||||
|
||||
$date = $today->format('Y-m-d');
|
||||
$today_in = isset($in[$date]) ? (int) $in[$date] : 0;
|
||||
$today_out = isset($out[$date]) ? (int) $out[$date] : 0;
|
||||
|
||||
if ($today_in > 0 || $today_out > 0) {
|
||||
|
||||
$left += $today_in;
|
||||
$left -= $today_out;
|
||||
|
||||
$serie[] = array(
|
||||
'date' => $date,
|
||||
'in' => $today_in,
|
||||
'out' => -$today_out,
|
||||
'left' => $left,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $serie;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter callback to apply the rate according to the effective date
|
||||
*
|
||||
* @access public
|
||||
* @param array $records
|
||||
* @return array
|
||||
*/
|
||||
public function applyUserRate(array $records)
|
||||
{
|
||||
$rates = $this->hourlyRate->getAllByProject($records[0]['project_id']);
|
||||
|
||||
foreach ($records as &$record) {
|
||||
|
||||
$hourly_price = 0;
|
||||
|
||||
foreach ($rates as $rate) {
|
||||
|
||||
if ($rate['user_id'] == $record['user_id'] && date('Y-m-d', $rate['date_effective']) <= date('Y-m-d', $record['start'])) {
|
||||
$hourly_price = $this->currency->getPrice($rate['currency'], $rate['rate']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$record['cost'] = $hourly_price * $record['time_spent'];
|
||||
}
|
||||
|
||||
return $records;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new budget line in the database
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_id
|
||||
* @param float $amount
|
||||
* @param string $comment
|
||||
* @param string $date
|
||||
* @return boolean|integer
|
||||
*/
|
||||
public function create($project_id, $amount, $comment, $date = '')
|
||||
{
|
||||
$values = array(
|
||||
'project_id' => $project_id,
|
||||
'amount' => $amount,
|
||||
'comment' => $comment,
|
||||
'date' => $date ?: date('Y-m-d'),
|
||||
);
|
||||
|
||||
return $this->persist(self::TABLE, $values);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a specific budget line
|
||||
*
|
||||
* @access public
|
||||
* @param integer $budget_id
|
||||
* @return boolean
|
||||
*/
|
||||
public function remove($budget_id)
|
||||
{
|
||||
return $this->db->table(self::TABLE)->eq('id', $budget_id)->remove();
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate creation
|
||||
*
|
||||
* @access public
|
||||
* @param array $values Form values
|
||||
* @return array $valid, $errors [0] = Success or not, [1] = List of errors
|
||||
*/
|
||||
public function validateCreation(array $values)
|
||||
{
|
||||
$v = new Validator($values, array(
|
||||
new Validators\Required('project_id', t('Field required')),
|
||||
new Validators\Required('amount', t('Field required')),
|
||||
));
|
||||
|
||||
return array(
|
||||
$v->execute(),
|
||||
$v->getErrors()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,121 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Model;
|
||||
|
||||
use SimpleValidator\Validator;
|
||||
use SimpleValidator\Validators;
|
||||
|
||||
/**
|
||||
* Hourly Rate
|
||||
*
|
||||
* @package model
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class HourlyRate extends Base
|
||||
{
|
||||
/**
|
||||
* SQL table name
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const TABLE = 'hourly_rates';
|
||||
|
||||
/**
|
||||
* Get all user rates for a given project
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_id
|
||||
* @return array
|
||||
*/
|
||||
public function getAllByProject($project_id)
|
||||
{
|
||||
$members = $this->projectPermission->getMembers($project_id);
|
||||
|
||||
if (empty($members)) {
|
||||
return array();
|
||||
}
|
||||
|
||||
return $this->db->table(self::TABLE)->in('user_id', array_keys($members))->desc('date_effective')->findAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all rates for a given user
|
||||
*
|
||||
* @access public
|
||||
* @param integer $user_id User id
|
||||
* @return array
|
||||
*/
|
||||
public function getAllByUser($user_id)
|
||||
{
|
||||
return $this->db->table(self::TABLE)->eq('user_id', $user_id)->desc('date_effective')->findAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current rate for a given user
|
||||
*
|
||||
* @access public
|
||||
* @param integer $user_id User id
|
||||
* @return float
|
||||
*/
|
||||
public function getCurrentRate($user_id)
|
||||
{
|
||||
return $this->db->table(self::TABLE)->eq('user_id', $user_id)->desc('date_effective')->findOneColumn('rate') ?: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new rate in the database
|
||||
*
|
||||
* @access public
|
||||
* @param integer $user_id User id
|
||||
* @param float $rate Hourly rate
|
||||
* @param string $currency Currency code
|
||||
* @param string $date ISO8601 date format
|
||||
* @return boolean|integer
|
||||
*/
|
||||
public function create($user_id, $rate, $currency, $date)
|
||||
{
|
||||
$values = array(
|
||||
'user_id' => $user_id,
|
||||
'rate' => $rate,
|
||||
'currency' => $currency,
|
||||
'date_effective' => $this->dateParser->removeTimeFromTimestamp($this->dateParser->getTimestamp($date)),
|
||||
);
|
||||
|
||||
return $this->persist(self::TABLE, $values);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a specific rate
|
||||
*
|
||||
* @access public
|
||||
* @param integer $rate_id
|
||||
* @return boolean
|
||||
*/
|
||||
public function remove($rate_id)
|
||||
{
|
||||
return $this->db->table(self::TABLE)->eq('id', $rate_id)->remove();
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate creation
|
||||
*
|
||||
* @access public
|
||||
* @param array $values Form values
|
||||
* @return array $valid, $errors [0] = Success or not, [1] = List of errors
|
||||
*/
|
||||
public function validateCreation(array $values)
|
||||
{
|
||||
$v = new Validator($values, array(
|
||||
new Validators\Required('user_id', t('Field required')),
|
||||
new Validators\Required('rate', t('Field required')),
|
||||
new Validators\Numeric('rate', t('This value must be numeric')),
|
||||
new Validators\Required('date_effective', t('Field required')),
|
||||
new Validators\Required('currency', t('Field required')),
|
||||
));
|
||||
|
||||
return array(
|
||||
$v->execute(),
|
||||
$v->getErrors()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -322,19 +322,6 @@ function version_53($pdo)
|
|||
$pdo->exec("ALTER TABLE subtask_time_tracking ADD COLUMN time_spent FLOAT DEFAULT 0");
|
||||
}
|
||||
|
||||
function version_52($pdo)
|
||||
{
|
||||
$pdo->exec('CREATE TABLE budget_lines (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`project_id` INT NOT NULL,
|
||||
`amount` FLOAT NOT NULL,
|
||||
`date` VARCHAR(10) NOT NULL,
|
||||
`comment` TEXT,
|
||||
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY(id)
|
||||
) ENGINE=InnoDB CHARSET=utf8');
|
||||
}
|
||||
|
||||
function version_51($pdo)
|
||||
{
|
||||
$pdo->exec('CREATE TABLE timetable_day (
|
||||
|
|
@ -381,19 +368,6 @@ function version_51($pdo)
|
|||
) ENGINE=InnoDB CHARSET=utf8');
|
||||
}
|
||||
|
||||
function version_50($pdo)
|
||||
{
|
||||
$pdo->exec("CREATE TABLE hourly_rates (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
user_id INT NOT NULL,
|
||||
rate FLOAT DEFAULT 0,
|
||||
date_effective INTEGER NOT NULL,
|
||||
currency CHAR(3) NOT NULL,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY(id)
|
||||
) ENGINE=InnoDB CHARSET=utf8");
|
||||
}
|
||||
|
||||
function version_49($pdo)
|
||||
{
|
||||
$pdo->exec('ALTER TABLE subtasks ADD COLUMN position INTEGER DEFAULT 1');
|
||||
|
|
|
|||
|
|
@ -315,18 +315,6 @@ function version_34($pdo)
|
|||
$pdo->exec("ALTER TABLE subtask_time_tracking ADD COLUMN time_spent REAL DEFAULT 0");
|
||||
}
|
||||
|
||||
function version_33($pdo)
|
||||
{
|
||||
$pdo->exec('CREATE TABLE budget_lines (
|
||||
"id" SERIAL PRIMARY KEY,
|
||||
"project_id" INTEGER NOT NULL,
|
||||
"amount" REAL NOT NULL,
|
||||
"date" VARCHAR(10) NOT NULL,
|
||||
"comment" TEXT,
|
||||
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
|
||||
)');
|
||||
}
|
||||
|
||||
function version_32($pdo)
|
||||
{
|
||||
$pdo->exec('CREATE TABLE timetable_day (
|
||||
|
|
@ -369,18 +357,6 @@ function version_32($pdo)
|
|||
)');
|
||||
}
|
||||
|
||||
function version_31($pdo)
|
||||
{
|
||||
$pdo->exec("CREATE TABLE hourly_rates (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL,
|
||||
rate REAL DEFAULT 0,
|
||||
date_effective INTEGER NOT NULL,
|
||||
currency CHAR(3) NOT NULL,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
)");
|
||||
}
|
||||
|
||||
function version_30($pdo)
|
||||
{
|
||||
$pdo->exec('ALTER TABLE subtasks ADD COLUMN position INTEGER DEFAULT 1');
|
||||
|
|
|
|||
|
|
@ -292,18 +292,6 @@ function version_52($pdo)
|
|||
$pdo->exec("ALTER TABLE subtask_time_tracking ADD COLUMN time_spent REAL DEFAULT 0");
|
||||
}
|
||||
|
||||
function version_51($pdo)
|
||||
{
|
||||
$pdo->exec('CREATE TABLE budget_lines (
|
||||
"id" INTEGER PRIMARY KEY,
|
||||
"project_id" INTEGER NOT NULL,
|
||||
"amount" REAL NOT NULL,
|
||||
"date" TEXT NOT NULL,
|
||||
"comment" TEXT,
|
||||
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
|
||||
)');
|
||||
}
|
||||
|
||||
function version_50($pdo)
|
||||
{
|
||||
$pdo->exec('CREATE TABLE timetable_day (
|
||||
|
|
@ -346,18 +334,6 @@ function version_50($pdo)
|
|||
)');
|
||||
}
|
||||
|
||||
function version_49($pdo)
|
||||
{
|
||||
$pdo->exec("CREATE TABLE hourly_rates (
|
||||
id INTEGER PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL,
|
||||
rate REAL DEFAULT 0,
|
||||
date_effective INTEGER NOT NULL,
|
||||
currency TEXT NOT NULL,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
)");
|
||||
}
|
||||
|
||||
function version_48($pdo)
|
||||
{
|
||||
$pdo->exec('ALTER TABLE subtasks ADD COLUMN position INTEGER DEFAULT 1');
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ class ClassProvider implements ServiceProviderInterface
|
|||
'Action',
|
||||
'Authentication',
|
||||
'Board',
|
||||
'Budget',
|
||||
'Category',
|
||||
'Color',
|
||||
'Comment',
|
||||
|
|
@ -28,7 +27,6 @@ class ClassProvider implements ServiceProviderInterface
|
|||
'Currency',
|
||||
'DateParser',
|
||||
'File',
|
||||
'HourlyRate',
|
||||
'LastLogin',
|
||||
'Link',
|
||||
'Notification',
|
||||
|
|
|
|||
|
|
@ -1,30 +0,0 @@
|
|||
<div class="page-header">
|
||||
<h2><?= t('Cost breakdown') ?></h2>
|
||||
</div>
|
||||
|
||||
<?php if ($paginator->isEmpty()): ?>
|
||||
<p class="alert"><?= t('There is nothing to show.') ?></p>
|
||||
<?php else: ?>
|
||||
<table class="table-fixed">
|
||||
<tr>
|
||||
<th class="column-20"><?= $paginator->order(t('Task'), 'task_title') ?></th>
|
||||
<th class="column-25"><?= $paginator->order(t('Subtask'), 'subtask_title') ?></th>
|
||||
<th class="column-20"><?= $paginator->order(t('User'), 'username') ?></th>
|
||||
<th class="column-10"><?= t('Cost') ?></th>
|
||||
<th class="column-10"><?= $paginator->order(t('Time spent'), \Model\SubtaskTimeTracking::TABLE.'.time_spent') ?></th>
|
||||
<th class="column-15"><?= $paginator->order(t('Date'), 'start') ?></th>
|
||||
</tr>
|
||||
<?php foreach ($paginator->getCollection() as $record): ?>
|
||||
<tr>
|
||||
<td><?= $this->url->link($this->e($record['task_title']), 'task', 'show', array('project_id' => $project['id'], 'task_id' => $record['task_id'])) ?></td>
|
||||
<td><?= $this->url->link($this->e($record['subtask_title']), 'task', 'show', array('project_id' => $project['id'], 'task_id' => $record['task_id'])) ?></td>
|
||||
<td><?= $this->url->link($this->e($record['name'] ?: $record['username']), 'user', 'show', array('user_id' => $record['user_id'])) ?></td>
|
||||
<td><?= n($record['cost']) ?></td>
|
||||
<td><?= n($record['time_spent']).' '.t('hours') ?></td>
|
||||
<td><?= dt('%B %e, %Y', $record['start']) ?></td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
</table>
|
||||
|
||||
<?= $paginator ?>
|
||||
<?php endif ?>
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
<div class="page-header">
|
||||
<h2><?= t('Budget lines') ?></h2>
|
||||
</div>
|
||||
|
||||
<?php if (! empty($lines)): ?>
|
||||
<table class="table-fixed table-stripped">
|
||||
<tr>
|
||||
<th class="column-20"><?= t('Budget line') ?></th>
|
||||
<th class="column-20"><?= t('Date') ?></th>
|
||||
<th><?= t('Comment') ?></th>
|
||||
<th><?= t('Action') ?></th>
|
||||
</tr>
|
||||
<?php foreach ($lines as $line): ?>
|
||||
<tr>
|
||||
<td><?= n($line['amount']) ?></td>
|
||||
<td><?= dt('%B %e, %Y', strtotime($line['date'])) ?></td>
|
||||
<td><?= $this->e($line['comment']) ?></td>
|
||||
<td>
|
||||
<?= $this->url->link(t('Remove'), 'budget', 'confirm', array('project_id' => $project['id'], 'budget_id' => $line['id'])) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
</table>
|
||||
|
||||
<h3><?= t('New budget line') ?></h3>
|
||||
<?php endif ?>
|
||||
|
||||
<form method="post" action="<?= $this->url->href('budget', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off">
|
||||
|
||||
<?= $this->form->csrf() ?>
|
||||
|
||||
<?= $this->form->hidden('id', $values) ?>
|
||||
<?= $this->form->hidden('project_id', $values) ?>
|
||||
|
||||
<?= $this->form->label(t('Amount'), 'amount') ?>
|
||||
<?= $this->form->text('amount', $values, $errors, array('required'), 'form-numeric') ?>
|
||||
|
||||
<?= $this->form->label(t('Date'), 'date') ?>
|
||||
<?= $this->form->text('date', $values, $errors, array('required'), 'form-date') ?>
|
||||
|
||||
<?= $this->form->label(t('Comment'), 'comment') ?>
|
||||
<?= $this->form->text('comment', $values, $errors) ?>
|
||||
|
||||
<div class="form-actions">
|
||||
<input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
<div class="page-header">
|
||||
<h2><?= t('Budget overview') ?></h2>
|
||||
</div>
|
||||
|
||||
<?php if (! empty($daily_budget)): ?>
|
||||
<div id="budget-chart">
|
||||
<div id="chart"
|
||||
data-date-format="<?= e('%%Y-%%m-%%d') ?>"
|
||||
data-metrics='<?= json_encode($daily_budget, JSON_HEX_APOS) ?>'
|
||||
data-labels='<?= json_encode(array('in' => t('Budget line'), 'out' => t('Expenses'), 'left' => t('Remaining'), 'value' => t('Amount'), 'date' => t('Date'), 'type' => t('Type')), JSON_HEX_APOS) ?>'></div>
|
||||
</div>
|
||||
<hr/>
|
||||
<table class="table-fixed table-stripped">
|
||||
<tr>
|
||||
<th><?= t('Date') ?></td>
|
||||
<th><?= t('Budget line') ?></td>
|
||||
<th><?= t('Expenses') ?></td>
|
||||
<th><?= t('Remaining') ?></td>
|
||||
</tr>
|
||||
<?php foreach ($daily_budget as $line): ?>
|
||||
<tr>
|
||||
<td><?= dt('%B %e, %Y', strtotime($line['date'])) ?></td>
|
||||
<td><?= n($line['in']) ?></td>
|
||||
<td><?= n($line['out']) ?></td>
|
||||
<td><?= n($line['left']) ?></td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
</table>
|
||||
<?php else: ?>
|
||||
<p class="alert"><?= t('There is not enough data to show something.') ?></p>
|
||||
<?php endif ?>
|
||||
|
||||
<?= $this->asset->js('assets/js/vendor/d3.v3.min.js') ?>
|
||||
<?= $this->asset->js('assets/js/vendor/c3.min.js') ?>
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
<div class="page-header">
|
||||
<h2><?= t('Remove budget line') ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="confirm">
|
||||
<p class="alert alert-info"><?= t('Do you really want to remove this budget line?') ?></p>
|
||||
|
||||
<div class="form-actions">
|
||||
<?= $this->url->link(t('Yes'), 'budget', 'remove', array('project_id' => $project['id'], 'budget_id' => $budget_id), true, 'btn btn-red') ?>
|
||||
<?= t('or') ?>
|
||||
<?= $this->url->link(t('cancel'), 'budget', 'create', array('project_id' => $project['id'])) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<div class="sidebar">
|
||||
<h2><?= t('Budget') ?></h2>
|
||||
<ul>
|
||||
<li <?= $this->app->getRouterAction() === 'index' ? 'class="active"' : '' ?>>
|
||||
<?= $this->url->link(t('Budget overview'), 'budget', 'index', array('project_id' => $project['id'])) ?>
|
||||
</li>
|
||||
<li <?= $this->app->getRouterAction() === 'create' ? 'class="active"' : '' ?>>
|
||||
<?= $this->url->link(t('Budget lines'), 'budget', 'create', array('project_id' => $project['id'])) ?>
|
||||
</li>
|
||||
<li <?= $this->app->getRouterAction() === 'breakdown' ? 'class="active"' : '' ?>>
|
||||
<?= $this->url->link(t('Cost breakdown'), 'budget', 'breakdown', array('project_id' => $project['id'])) ?>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="sidebar-collapse"><a href="#" title="<?= t('Hide sidebar') ?>"><i class="fa fa-chevron-left"></i></a></div>
|
||||
<div class="sidebar-expand" style="display: none"><a href="#" title="<?= t('Expand sidebar') ?>"><i class="fa fa-chevron-right"></i></a></div>
|
||||
</div>
|
||||
|
|
@ -52,5 +52,3 @@
|
|||
<input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<p class="alert alert-info"><?= t('Currency rates are used to calculate project budget.') ?></p>
|
||||
|
|
|
|||
|
|
@ -1,46 +0,0 @@
|
|||
<div class="page-header">
|
||||
<h2><?= t('Hourly rates') ?></h2>
|
||||
</div>
|
||||
|
||||
<?php if (! empty($rates)): ?>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th><?= t('Hourly rate') ?></th>
|
||||
<th><?= t('Currency') ?></th>
|
||||
<th><?= t('Effective date') ?></th>
|
||||
<th><?= t('Action') ?></th>
|
||||
</tr>
|
||||
<?php foreach ($rates as $rate): ?>
|
||||
<tr>
|
||||
<td><?= n($rate['rate']) ?></td>
|
||||
<td><?= $rate['currency'] ?></td>
|
||||
<td><?= dt('%b %e, %Y', $rate['date_effective']) ?></td>
|
||||
<td>
|
||||
<?= $this->url->link(t('Remove'), 'hourlyrate', 'confirm', array('user_id' => $user['id'], 'rate_id' => $rate['id'])) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
</table>
|
||||
|
||||
<h3><?= t('Add new rate') ?></h3>
|
||||
<?php endif ?>
|
||||
|
||||
<form method="post" action="<?= $this->url->href('hourlyrate', 'save', array('user_id' => $user['id'])) ?>" autocomplete="off">
|
||||
|
||||
<?= $this->form->hidden('user_id', $values) ?>
|
||||
<?= $this->form->csrf() ?>
|
||||
|
||||
<?= $this->form->label(t('Hourly rate'), 'rate') ?>
|
||||
<?= $this->form->text('rate', $values, $errors, array('required'), 'form-numeric') ?>
|
||||
|
||||
<?= $this->form->label(t('Currency'), 'currency') ?>
|
||||
<?= $this->form->select('currency', $currencies_list, $values, $errors, array('required')) ?>
|
||||
|
||||
<?= $this->form->label(t('Effective date'), 'date_effective') ?>
|
||||
<?= $this->form->text('date_effective', $values, $errors, array('required'), 'form-date') ?>
|
||||
|
||||
<div class="form-actions">
|
||||
<input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
<div class="page-header">
|
||||
<h2><?= t('Remove hourly rate') ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="confirm">
|
||||
<p class="alert alert-info"><?= t('Do you really want to remove this hourly rate?') ?></p>
|
||||
|
||||
<div class="form-actions">
|
||||
<?= $this->url->link(t('Yes'), 'hourlyrate', 'remove', array('user_id' => $user['id'], 'rate_id' => $rate_id), true, 'btn btn-red') ?>
|
||||
<?= t('or') ?>
|
||||
<?= $this->url->link(t('cancel'), 'hourlyrate', 'index', array('user_id' => $user['id'])) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -16,10 +16,6 @@
|
|||
<i class="fa fa-line-chart fa-fw"></i>
|
||||
<?= $this->url->link(t('Analytics'), 'analytic', 'tasks', array('project_id' => $project['id'])) ?>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fa fa-pie-chart fa-fw"></i>
|
||||
<?= $this->url->link(t('Budget'), 'budget', 'index', array('project_id' => $project['id'])) ?>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fa fa-download fa-fw"></i>
|
||||
<?= $this->url->link(t('Exports'), 'export', 'tasks', array('project_id' => $project['id'])) ?>
|
||||
|
|
|
|||
|
|
@ -62,9 +62,6 @@
|
|||
<li <?= $this->app->getRouterController() === 'user' && $this->app->getRouterAction() === 'authentication' ? 'class="active"' : '' ?>>
|
||||
<?= $this->url->link(t('Edit Authentication'), 'user', 'authentication', array('user_id' => $user['id'])) ?>
|
||||
</li>
|
||||
<li <?= $this->app->getRouterController() === 'hourlyrate' ? 'class="active"' : '' ?>>
|
||||
<?= $this->url->link(t('Hourly rates'), 'hourlyrate', 'index', array('user_id' => $user['id'])) ?>
|
||||
</li>
|
||||
<li <?= $this->app->getRouterController() === 'timetable' ? 'class="active"' : '' ?>>
|
||||
<?= $this->url->link(t('Manage timetable'), 'timetable', 'index', array('user_id' => $user['id'])) ?>
|
||||
</li>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,55 +0,0 @@
|
|||
function BudgetChart() {
|
||||
}
|
||||
|
||||
BudgetChart.prototype.execute = function() {
|
||||
var categories = [];
|
||||
var metrics = $("#chart").data("metrics");
|
||||
var labels = $("#chart").data("labels");
|
||||
var inputFormat = d3.time.format("%Y-%m-%d");
|
||||
var outputFormat = d3.time.format($("#chart").data("date-format"));
|
||||
|
||||
var columns = [
|
||||
[labels["in"]],
|
||||
[labels["left"]],
|
||||
[labels["out"]]
|
||||
];
|
||||
|
||||
var colors = {};
|
||||
colors[labels["in"]] = '#5858FA';
|
||||
colors[labels["left"]] = '#04B404';
|
||||
colors[labels["out"]] = '#DF3A01';
|
||||
|
||||
for (var i = 0; i < metrics.length; i++) {
|
||||
categories.push(outputFormat(inputFormat.parse(metrics[i]["date"])));
|
||||
columns[0].push(metrics[i]["in"]);
|
||||
columns[1].push(metrics[i]["left"]);
|
||||
columns[2].push(metrics[i]["out"]);
|
||||
}
|
||||
|
||||
c3.generate({
|
||||
data: {
|
||||
columns: columns,
|
||||
colors: colors,
|
||||
type : 'bar'
|
||||
},
|
||||
bar: {
|
||||
width: {
|
||||
ratio: 0.25
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
x: {
|
||||
show: true
|
||||
},
|
||||
y: {
|
||||
show: true
|
||||
}
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'category',
|
||||
categories: categories
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
@ -27,7 +27,6 @@ jQuery(document).ready(function() {
|
|||
router.addRoute('analytic-user-repartition', UserRepartitionChart);
|
||||
router.addRoute('analytic-cfd', CumulativeFlowDiagram);
|
||||
router.addRoute('analytic-burndown', BurndownChart);
|
||||
router.addRoute('budget-chart', BudgetChart);
|
||||
router.addRoute('analytic-avg-time-column', AvgTimeColumnChart);
|
||||
router.addRoute('analytic-task-time-column', TaskTimeColumnChart);
|
||||
router.addRoute('analytic-lead-cycle-time', LeadCycleTimeChart);
|
||||
|
|
|
|||
|
|
@ -1,43 +0,0 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__.'/../Base.php';
|
||||
|
||||
use Model\User;
|
||||
use Model\HourlyRate;
|
||||
|
||||
class HourlyRateTest extends Base
|
||||
{
|
||||
public function testCreation()
|
||||
{
|
||||
$hr = new HourlyRate($this->container);
|
||||
$this->assertEquals(1, $hr->create(1, 32.4, 'EUR', '2015-01-01'));
|
||||
$this->assertEquals(2, $hr->create(1, 42, 'CAD', '2015-02-01'));
|
||||
|
||||
$rates = $hr->getAllByUser(0);
|
||||
$this->assertEmpty($rates);
|
||||
|
||||
$rates = $hr->getAllByUser(1);
|
||||
$this->assertNotEmpty($rates);
|
||||
$this->assertCount(2, $rates);
|
||||
|
||||
$this->assertEquals(42, $rates[0]['rate']);
|
||||
$this->assertEquals('CAD', $rates[0]['currency']);
|
||||
$this->assertEquals('2015-02-01', date('Y-m-d', $rates[0]['date_effective']));
|
||||
|
||||
$this->assertEquals(32.4, $rates[1]['rate']);
|
||||
$this->assertEquals('EUR', $rates[1]['currency']);
|
||||
$this->assertEquals('2015-01-01', date('Y-m-d', $rates[1]['date_effective']));
|
||||
|
||||
$this->assertEquals(0, $hr->getCurrentRate(0));
|
||||
$this->assertEquals(42, $hr->getCurrentRate(1));
|
||||
|
||||
$this->assertTrue($hr->remove(2));
|
||||
$this->assertEquals(32.4, $hr->getCurrentRate(1));
|
||||
|
||||
$this->assertTrue($hr->remove(1));
|
||||
$this->assertEquals(0, $hr->getCurrentRate(1));
|
||||
|
||||
$rates = $hr->getAllByUser(1);
|
||||
$this->assertEmpty($rates);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue