Draft ProjectManagement and EventManagement models

This commit is contained in:
Dennis Eichhorn 2016-03-13 00:14:39 +01:00
parent 76d6e226b7
commit 70e342fa06
3 changed files with 424 additions and 0 deletions

View File

@ -42,7 +42,43 @@ class Installer extends InstallerAbstract
switch ($dbPool->get('core')->getType()) {
case DatabaseType::MYSQL:
$dbPool->get('core')->con->prepare(
'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'projectmanagement_project` (
`projectmanagement_project_id` int(11) NOT NULL AUTO_INCREMENT,
`projectmanagement_project_name` varchar(254) NOT NULL,
`projectmanagement_project_description` text NOT NULL,
`projectmanagement_project_calendar` int(11) NOT NULL,
`projectmanagement_project_costs` int(11) NOT NULL,
`projectmanagement_project_budget` int(11) NOT NULL,
`projectmanagement_project_earnings` int(11) NOT NULL,
`projectmanagement_project_start` datetime NOT NULL,
`projectmanagement_project_end` datetime NOT NULL,
PRIMARY KEY (`projectmanagement_project_id`),
KEY `projectmanagement_project_project` (`projectmanagement_project_project`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;'
)->execute();
$dbPool->get('core')->con->prepare(
'ALTER TABLE `' . $dbPool->get('core')->prefix . 'projectmanagement_project`
ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'projectmanagement_project_ibfk_1` FOREIGN KEY (`projectmanagement_project_calendar`) REFERENCES `' . $dbPool->get('core')->prefix . 'calendar` (`calendar_id`);'
)->execute();
$dbPool->get('core')->con->prepare(
'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'projectmanagement_task_relation` (
`projectmanagement_task_relation_id` int(11) NOT NULL AUTO_INCREMENT,
`projectmanagement_task_relation_src` int(11) NULL,
`projectmanagement_task_relation_dst` int(11) NULL,
PRIMARY KEY (`projectmanagement_task_relation_id`),
KEY `projectmanagement_task_relation_src` (`projectmanagement_task_relation_src`),
KEY `projectmanagement_task_relation_dst` (`projectmanagement_task_relation_dst`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;'
)->execute();
$dbPool->get('core')->con->prepare(
'ALTER TABLE `' . $dbPool->get('core')->prefix . 'projectmanagement_task_relation`
ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'projectmanagement_task_relation_ibfk_1` FOREIGN KEY (`projectmanagement_task_relation_src`) REFERENCES `' . $dbPool->get('core')->prefix . 'task` (`task_id`),
ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'projectmanagement_task_relation_ibfk_2` FOREIGN KEY (`projectmanagement_task_relation_dst`) REFERENCES `' . $dbPool->get('core')->prefix . 'projectmanagement_project` (`projectmanagement_project_id`);'
)->execute();
break;
}
}

238
Models/Project.php Normal file
View File

@ -0,0 +1,238 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\ProjectManagement\Models;
/**
* Project class.
*
* @category ProjectManager
* @package Framework
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Project
{
private $id = 0;
private $start = null;
private $end = null;
private $name = '';
private $description = '';
private $calendar = null;
private $costs = null;
private $budget = null;
private $earnings = null;
/**
* Created at.
*
* @var \Datetime
* @since 1.0.0
*/
private $createdAt = null;
/**
* Created by.
*
* @var int
* @since 1.0.0
*/
private $createdBy = 0;
private $tasks = [];
public function __construct(string $name = '') {
$this->start = new \DateTime('now');
$this->end = new \DateTime('now');
$this->end->modify('+1M');
$this->createdAt = new \DateTime('now');
$this->calendar = new Calendar();
$this->costs = new Money();
$this->budget = new Money();
$this->earnings = new Money();
$this->setName($name);
}
public function getId() : int
{
return $this->id;
}
public function addTask(Task $task)
{
if($task->getId() !== 0) {
$this->tasks[$task->getId()] = $task;
} else {
$this->tasks[] = $task;
}
}
public function removeTask(int $id) : bool
{
if(isset($this->tasks[$id])) {
unset($this->tasks[$id]);
return true;
}
return false;
}
public function getTask(int $id) : Task
{
return $this->tasks[$id] ?? new NullTask();
}
public function countTasks() : int
{
return count($this->tasks);
}
public function getStart() : \DateTime
{
return $this->start;
}
public function setStart(\DateTime $start)
{
$this->start = $start;
}
public function setEnd(\DateTime $end)
{
$this->end = $end;
}
public function getEnd() : \DateTime
{
return $this->end;
}
public function getCalendar() : Calendar
{
return $this->calendar;
}
public function getName() : string
{
return $this->name;
}
public function setName(string $name)
{
$this->name = $name;
$this->calendar->setName($name);
}
public function getDescription() : string
{
return $this->description;
}
public function setDescription(string $description)
{
$this->description = $description;
}
public function getCosts() : Money
{
return $this->costs;
}
public function getBudget() : Money
{
return $this->budget;
}
public function getEarnings() : Money
{
return $this->earnings;
}
public function setCosts(Money $costs)
{
$this->costs = $costs;
}
public function setBudget(Money $budget)
{
$this->budget = $budget;
}
public function setEarnings(Money $earnings)
{
$this->earnings = $earnings;
}
/**
* @return \DateTime
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getCreatedAt() : \DateTime
{
return $this->createdAt;
}
/**
* @param \DateTime $createdAt Calendar created at
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setCreatedAt(\DateTime $createdAt)
{
$this->createdAt = $createdAt;
$this->calendar->setCreatedAt($createdAt);
}
/**
* @return int
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getCreatedBy() : int
{
return $this->createdBy;
}
/**
* @param int $createdBy Creator
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setCreatedBy(int $createdBy)
{
$this->createdBy = $createdBy;
$this->calendar->setCreatedBy($createdBy);
}
}

150
Models/ProjectMapper.php Normal file
View File

@ -0,0 +1,150 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\ProjectManagement\Models;
use phpOMS\DataStorage\Database\DataMapperAbstract;
use phpOMS\DataStorage\Database\Query\Builder;
use phpOMS\DataStorage\Database\Query\Column;
/**
* Mapper class.
*
* @category Calendar
* @package Modules
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class ProjectMapper extends DataMapperAbstract
{
/**
* Columns.
*
* @var array<string, array>
* @since 1.0.0
*/
protected static $columns = [
'projectmanagement_project_id' => ['name' => 'projectmanagement_project_id', 'type' => 'int', 'internal' => 'id'],
'projectmanagement_project_name' => ['name' => 'projectmanagement_project_name', 'type' => 'string', 'internal' => 'name'],
'projectmanagement_project_description' => ['name' => 'projectmanagement_project_description', 'type' => 'string', 'internal' => 'description'],
'projectmanagement_project_calendar' => ['name' => 'projectmanagement_project_calendar', 'type' => 'int', 'internal' => 'calendar'],
'projectmanagement_project_costs' => ['name' => 'projectmanagement_project_costs', 'type' => 'Serializable', 'internal' => 'costs'],
'projectmanagement_project_budget' => ['name' => 'projectmanagement_project_budget', 'type' => 'Serializable', 'internal' => 'budget'],
'projectmanagement_project_earnings' => ['name' => 'projectmanagement_project_earnings', 'type' => 'Serializable', 'internal' => 'earnings'],
'projectmanagement_project_start' => ['name' => 'projectmanagement_project_start', 'type' => 'DateTime', 'internal' => 'start'],
'projectmanagement_project_end' => ['name' => 'projectmanagement_project_end', 'type' => 'DateTime', 'internal' => 'end'],
];
/**
* Has one relation.
*
* @var array<string, array>
* @since 1.0.0
*/
protected static $hasOne = [
'project' => [
'mapper' => \Modules\Calendar\Models\CalendarMapper::class,
'src' => 'projectmanagement_project_calendar',
],
];
/**
* Has many relation.
*
* @var array<string, array>
* @since 1.0.0
*/
protected static $hasMany = [
'sources' => [
'mapper' => \Modules\Tasks\Models\TaskMapper::class, /* mapper of the related object */
'relationmapper' => null, /* if the relation itself is a more complex object that has it's own mapper */
'table' => 'projectmanager_task_relation', /* table of the related object, null if no relation table is used (many->1) */
'dst' => 'projectmanager_task_relation_dst',
'src' => 'projectmanager_task_relation_src',
],
];
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
protected static $table = 'projectmanagement_project';
/**
* Create media.
*
* @param project $obj Media
*
* @return bool
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function create($obj)
{
try {
$objId = parent::create($obj);
$query = new Builder($this->db);
$query->prefix($this->db->getPrefix())
->insert(
'account_permission_account',
'account_permission_from',
'account_permission_for',
'account_permission_id1',
'account_permission_id2',
'account_permission_r',
'account_permission_w',
'account_permission_m',
'account_permission_d',
'account_permission_p'
)
->into('account_permission')
->values($obj->getCreatedBy(), 'calendar_project', 'calendar_project', 1, $objId, 1, 1, 1, 1, 1);
$this->db->con->prepare($query->toSql())->execute();
} catch (\Exception $e) {
var_dump($e->getMessage());
return false;
}
return $objId;
}
/**
* Find.
*
* @param array $columns Columns to select
*
* @return Builder
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function find(...$columns) : Builder
{
return parent::find(...$columns)->from('account_permission')
->where('account_permission.account_permission_for', '=', 'calendar_project')
->where('account_permission.account_permission_id1', '=', 1)
->where('calendar_project.calendar_project_id', '=', new Column('account_permission.account_permission_id2'))
->where('account_permission.account_permission_r', '=', 1);
}
}