summaryrefslogtreecommitdiff
path: root/app/Model
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2015-03-12 23:03:51 -0400
committerFrederic Guillot <fred@kanboard.net>2015-03-12 23:03:51 -0400
commit4700139a86d1ef44eabe43edb5a4abff9c645811 (patch)
treea4bf846ff610a59d91fa6d0405b0460dbd2d9e31 /app/Model
parent925ede9b48bef67739d26f0d0a394342f2d8edf0 (diff)
Start to develop the budget module
Diffstat (limited to 'app/Model')
-rw-r--r--app/Model/Acl.php1
-rw-r--r--app/Model/Base.php1
-rw-r--r--app/Model/Budget.php101
3 files changed, 103 insertions, 0 deletions
diff --git a/app/Model/Acl.php b/app/Model/Acl.php
index 56938f9d..b52a7864 100644
--- a/app/Model/Acl.php
+++ b/app/Model/Acl.php
@@ -56,6 +56,7 @@ class Acl extends Base
'export' => array('tasks', 'subtasks', 'summary'),
'project' => array('edit', 'update', 'share', 'integration', 'users', 'alloweverybody', 'allow', 'setowner', 'revoke', 'duplicate', 'disable', 'enable'),
'swimlane' => '*',
+ 'budget' => '*',
);
/**
diff --git a/app/Model/Base.php b/app/Model/Base.php
index f836231c..8a90e286 100644
--- a/app/Model/Base.php
+++ b/app/Model/Base.php
@@ -16,6 +16,7 @@ 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\Comment $comment
* @property \Model\CommentHistory $commentHistory
diff --git a/app/Model/Budget.php b/app/Model/Budget.php
new file mode 100644
index 00000000..03a90f7f
--- /dev/null
+++ b/app/Model/Budget.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Model;
+
+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;
+ }
+
+ /**
+ * 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()
+ );
+ }
+} \ No newline at end of file