Merge branch '12.x' of github.com:easysoft/zentaopms into 12.x

This commit is contained in:
z
2020-09-18 16:21:09 +08:00
13 changed files with 129 additions and 93 deletions
+2 -2
View File
@@ -183,7 +183,7 @@ $lang->install->promotion = "为您推荐易软天创旗下其他产品:"
$lang->install->chanzhi = new stdclass();
$lang->install->chanzhi->name = '蝉知门户';
$lang->install->chanzhi->logo = 'images/main/chanzhi.ico';
$lang->install->chanzhi->url = 'http://www.chanzhi.org';
$lang->install->chanzhi->url = 'http://www.zsite.com';
$lang->install->chanzhi->desc = <<<EOD
<ul>
<li>专业的企业营销门户系统</li>
@@ -209,7 +209,7 @@ EOD;
$lang->install->xuanxuan = new stdclass();
$lang->install->xuanxuan->name = '喧喧聊天';
$lang->install->xuanxuan->logo = 'images/main/xuanxuan.ico';
$lang->install->xuanxuan->url = 'http://www.xuan.im';
$lang->install->xuanxuan->url = 'http://www.xuanim.com';
$lang->install->xuanxuan->desc = <<<EOD
<ul>
<li>轻:轻量级架构,容易部署</li>
+2 -2
View File
@@ -183,7 +183,7 @@ $lang->install->promotion = "為您推薦易軟天創旗下其他產品:"
$lang->install->chanzhi = new stdclass();
$lang->install->chanzhi->name = '蟬知門戶';
$lang->install->chanzhi->logo = 'images/main/chanzhi.ico';
$lang->install->chanzhi->url = 'http://www.chanzhi.org';
$lang->install->chanzhi->url = 'http://www.zsite.com';
$lang->install->chanzhi->desc = <<<EOD
<ul>
<li>專業的企業營銷門戶系統</li>
@@ -209,7 +209,7 @@ EOD;
$lang->install->xuanxuan = new stdclass();
$lang->install->xuanxuan->name = '喧喧聊天';
$lang->install->xuanxuan->logo = 'images/main/xuanxuan.ico';
$lang->install->xuanxuan->url = 'http://www.xuan.im';
$lang->install->xuanxuan->url = 'http://www.xuanim.com';
$lang->install->xuanxuan->desc = <<<EOD
<ul>
<li>輕:輕量級架構,容易部署</li>
+1 -1
View File
@@ -2955,7 +2955,7 @@ class projectModel extends model
$taskItem->estimate = $task->estimate;
$taskItem->consumed = $task->consumed;
$taskItem->left = $task->left;
$taskItem->openedBy = $users[$task->openedBy];
$taskItem->openedBy = zget($users, $task->openedBy);
$taskItem->assignedTo = zget($users, $task->assignedTo);
$taskItem->url = helper::createLink('task', 'view', "task=$task->id");
$taskItem->storyChanged = $story and $story->status == 'active' and $story->version > $story->taskVersion;
+1 -1
View File
@@ -231,7 +231,7 @@
<tr class='statsTr'><td class='w-100px'></td><td></td><td></td><td></td></tr>
<tr>
<td colspan="4">
<?php $progress = ($project->totalConsumed + $project->totalLeft) ? round($project->totalConsumed / ($project->totalConsumed + $project->totalLeft), 3) * 100 : 0;?>
<?php $progress = ($project->totalConsumed + $project->totalLeft) ? floor($project->totalConsumed / ($project->totalConsumed + $project->totalLeft) * 1000) / 1000 * 100 : 0;?>
<?php echo $lang->project->progress;?> <em><?php echo $progress . $lang->percent;?></em> &nbsp;
<div class="progress inline-block">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $progress . $lang->percent;?>"></div>
+16 -11
View File
@@ -251,6 +251,10 @@ class task extends control
/* Set menu. */
$this->project->setMenu($this->project->getPairs(), $project->id);
/* When common task are child tasks, query whether common task are consumed. */
$taskConsumed = 0;
if($taskID) $taskConsumed = $this->dao->select('consumed')->from(TABLE_TASK)->where('id')->eq($taskID)->andWhere('parent')->eq(0)->fetch('consumed');
if(!empty($_POST))
{
$mails = $this->task->batchCreate($projectID);
@@ -280,17 +284,18 @@ class task extends control
if($taskID) $this->view->parentTitle = $this->dao->select('name')->from(TABLE_TASK)->where('id')->eq($taskID)->fetch('name');
$this->view->title = $title;
$this->view->position = $position;
$this->view->project = $project;
$this->view->stories = $stories;
$this->view->modules = $modules;
$this->view->parent = $taskID;
$this->view->storyID = $storyID;
$this->view->story = $this->story->getByID($storyID);
$this->view->storyTasks = $this->task->getStoryTaskCounts(array_keys($stories), $projectID);
$this->view->members = $members;
$this->view->moduleID = $moduleID;
$this->view->title = $title;
$this->view->position = $position;
$this->view->project = $project;
$this->view->stories = $stories;
$this->view->modules = $modules;
$this->view->parent = $taskID;
$this->view->storyID = $storyID;
$this->view->story = $this->story->getByID($storyID);
$this->view->storyTasks = $this->task->getStoryTaskCounts(array_keys($stories), $projectID);
$this->view->members = $members;
$this->view->moduleID = $moduleID;
$this->view->taskConsumed = $taskConsumed;
$this->display();
}
+1
View File
@@ -3,6 +3,7 @@ $(function()
{
removeDitto();
if($('#batchCreateForm table thead tr th.c-name').width() < 200) $('#batchCreateForm table thead tr th.c-name').width(200);
if(taskConsumed > 0) alert(addChildTask);
});
/* Get select of stories.*/
+17 -15
View File
@@ -197,23 +197,25 @@ $lang->task->deniedNotice = 'Nur %s kann die Aufgabe %s.';
$lang->task->noTask = 'Keine Aufagben. ';
$lang->task->createDenied = 'Aufgben erstellen it in diesem Projekt gesperrt';
$lang->task->cannotDeleteParent = 'Cannot delete parent task';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
$lang->task->error->consumedNumber = '"Verbraucht" muss eine Zahl sein.';
$lang->task->error->estimateNumber = '"Stunden" müss eine Zahl sein.';
$lang->task->error->leftNumber = '"Left" must be numbers.';
$lang->task->error->recordMinus = 'Work hours should not be negative number.';
$lang->task->error->consumedSmall = '"Genutzt" muss larger than before.';
$lang->task->error->consumedThisTime = 'Bitte geben Sie die Stunden an';
$lang->task->error->left = 'Bitte geben Sie die verbleibenden Stunden an"';
$lang->task->error->work = '"Bemerkung" muss kleiner als %d Zeichen sein.';
$lang->task->error->skipClose = 'Aufgabe: %s ist nicht “Erledigt” oder “Abgebrochen”. Möchten Sie die Aufgabe jetzt schließen?';
$lang->task->error->consumed = 'Aufgabe: %s Hour must be more than 0. Ignore changes to this Task.';
$lang->task->error->assignedTo = 'Mehere Tasks können nicht zugewisen werden, da die Benutzer nicht teil des Teams sind.';
$lang->task->error->consumedEmpty = '"Current Cost" should not be 0.';
$lang->task->error->deadlineSmall = '"Deadline" must be greater than "StartDate".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
$lang->task->error->consumedNumber = '"Verbraucht" muss eine Zahl sein.';
$lang->task->error->estimateNumber = '"Stunden" müss eine Zahl sein.';
$lang->task->error->leftNumber = '"Left" must be numbers.';
$lang->task->error->recordMinus = 'Work hours should not be negative number.';
$lang->task->error->consumedSmall = '"Genutzt" muss larger than before.';
$lang->task->error->consumedThisTime = 'Bitte geben Sie die Stunden an';
$lang->task->error->left = 'Bitte geben Sie die verbleibenden Stunden an"';
$lang->task->error->work = '"Bemerkung" muss kleiner als %d Zeichen sein.';
$lang->task->error->skipClose = 'Aufgabe: %s ist nicht “Erledigt” oder “Abgebrochen”. Möchten Sie die Aufgabe jetzt schließen?';
$lang->task->error->consumed = 'Aufgabe: %s Hour must be more than 0. Ignore changes to this Task.';
$lang->task->error->assignedTo = 'Mehere Tasks können nicht zugewisen werden, da die Benutzer nicht teil des Teams sind.';
$lang->task->error->consumedEmpty = '"Current Cost" should not be 0.';
$lang->task->error->deadlineSmall = '"Deadline" must be greater than "StartDate".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
$lang->task->error->chooseOtherParent = 'the currently selected parent task has been consumed, please select another parent task.';
/* Report. */
$lang->task->report = new stdclass();
+17 -15
View File
@@ -197,23 +197,25 @@ $lang->task->deniedNotice = 'Only the %s can %s the task.';
$lang->task->noTask = 'No tasks yet. ';
$lang->task->createDenied = 'Create Task is denied in this project';
$lang->task->cannotDeleteParent = 'Cannot delete parent task';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
$lang->task->error->consumedNumber = '"Current Cost" must be numbers.';
$lang->task->error->estimateNumber = '"Estimates" must be numbers.';
$lang->task->error->leftNumber = '"Left" must be numbers.';
$lang->task->error->recordMinus = 'Work hours should not be negative number.';
$lang->task->error->consumedSmall = '"Total Cost" must be > the last number.';
$lang->task->error->consumedThisTime = 'Please enter "Hours Cost"';
$lang->task->error->left = 'Please enter "Hours Left"';
$lang->task->error->work = '"Comment" must be < %d characters.';
$lang->task->error->skipClose = 'Task: %s is not "Finished” or “Cancelled”. Do you want to close it?';
$lang->task->error->consumed = 'Task: %s hour must be < 0. Ignore changes to this task.';
$lang->task->error->assignedTo = 'Multi-user task in the current status cannot be assigned to a member who is not in the task team.';
$lang->task->error->consumedEmpty = '"Current Cost" should not be 0.';
$lang->task->error->deadlineSmall = '"Deadline" must be greater than "StartDate".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
$lang->task->error->consumedNumber = '"Current Cost" must be numbers.';
$lang->task->error->estimateNumber = '"Estimates" must be numbers.';
$lang->task->error->leftNumber = '"Left" must be numbers.';
$lang->task->error->recordMinus = 'Work hours should not be negative number.';
$lang->task->error->consumedSmall = '"Total Cost" must be > the last number.';
$lang->task->error->consumedThisTime = 'Please enter "Hours Cost"';
$lang->task->error->left = 'Please enter "Hours Left"';
$lang->task->error->work = '"Comment" must be < %d characters.';
$lang->task->error->skipClose = 'Task: %s is not "Finished” or “Cancelled”. Do you want to close it?';
$lang->task->error->consumed = 'Task: %s hour must be < 0. Ignore changes to this task.';
$lang->task->error->assignedTo = 'Multi-user task in the current status cannot be assigned to a member who is not in the task team.';
$lang->task->error->consumedEmpty = '"Current Cost" should not be 0.';
$lang->task->error->deadlineSmall = '"Deadline" must be greater than "StartDate".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
$lang->task->error->chooseOtherParent = 'the currently selected parent task has been consumed, please select another parent task.';
/* Report. */
$lang->task->report = new stdclass();
+17 -15
View File
@@ -197,23 +197,25 @@ $lang->task->deniedNotice = 'Seulement le %s peut %s la tâche.';
$lang->task->noTask = "Pas de tâche pour l'instant. ";
$lang->task->createDenied = 'La création de tâches est interdite dans ce projet';
$lang->task->cannotDeleteParent = 'Impossible de supprimer la tâche parente';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"Coût Total" doit être numérique.';
$lang->task->error->consumedNumber = '"Coût" doit être numérique.';
$lang->task->error->estimateNumber = '"Estimé" doit être numérique.';
$lang->task->error->leftNumber = '"Entrez" doit être numérique.';
$lang->task->error->recordMinus = 'Les heures de travail ne doivent pas être un nombre négatif.';
$lang->task->error->consumedSmall = '"Coût Total" doit être > au dernier chiffre.';
$lang->task->error->consumedThisTime = 'Entrez le "Coût en Heures"';
$lang->task->error->left = 'Entrez les "Heures Restantes"';
$lang->task->error->work = '"Commentaire" doit être < %d caractères.';
$lang->task->error->skipClose = 'Tâche: %s non “Finie” ou “Annulée”. Voulez-vous la fermer malgré tout ?';
$lang->task->error->consumed = 'Tâche: %s heures doivent être < 0. Ignorer changements de cette tâche.';
$lang->task->error->assignedTo = "Tâche Multi-user dans le statut courant ne peut pas être assignée à un membre qui ne fait pas partie de l'équipe.";
$lang->task->error->consumedEmpty = '"Coût Actuel" ne devrait pas être 0.';
$lang->task->error->deadlineSmall = '"Date Limite" doit être supérieur à la "Date de Départ".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
$lang->task->error->totalNumber = '"Coût Total" doit être numérique.';
$lang->task->error->consumedNumber = '"Coût" doit être numérique.';
$lang->task->error->estimateNumber = '"Estimé" doit être numérique.';
$lang->task->error->leftNumber = '"Entrez" doit être numérique.';
$lang->task->error->recordMinus = 'Les heures de travail ne doivent pas être un nombre négatif.';
$lang->task->error->consumedSmall = '"Coût Total" doit être > au dernier chiffre.';
$lang->task->error->consumedThisTime = 'Entrez le "Coût en Heures"';
$lang->task->error->left = 'Entrez les "Heures Restantes"';
$lang->task->error->work = '"Commentaire" doit être < %d caractères.';
$lang->task->error->skipClose = 'Tâche: %s non “Finie” ou “Annulée”. Voulez-vous la fermer malgré tout ?';
$lang->task->error->consumed = 'Tâche: %s heures doivent être < 0. Ignorer changements de cette tâche.';
$lang->task->error->assignedTo = "Tâche Multi-user dans le statut courant ne peut pas être assignée à un membre qui ne fait pas partie de l'équipe.";
$lang->task->error->consumedEmpty = '"Coût Actuel" ne devrait pas être 0.';
$lang->task->error->deadlineSmall = '"Date Limite" doit être supérieur à la "Date de Départ".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
$lang->task->error->chooseOtherParent = 'the currently selected parent task has been consumed, please select another parent task.';
/* Report. */
$lang->task->report = new stdclass();
+17 -15
View File
@@ -197,23 +197,25 @@ $lang->task->deniedNotice = 'Chỉ có %s này có thể %s nhiệm v
$lang->task->noTask = 'Không có nhiệm vụ nào';
$lang->task->createDenied = 'Tạo nhiệm vụ bị từ chối trong dự án này';
$lang->task->cannotDeleteParent = 'Không thể xóa nhiệm vụ cha';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
$lang->task->error->consumedNumber = '"Giờ làm" phải là số.';
$lang->task->error->estimateNumber = '"Dự tính" phải là số.';
$lang->task->error->leftNumber = '"Left" must be numbers.';
$lang->task->error->recordMinus = 'Giờ làm không nên là số âm';
$lang->task->error->consumedSmall = '"Tổng giờ làm" phải là > số cuối cùng.';
$lang->task->error->consumedThisTime = 'Vui lòng nhập "Số giờ làm"';
$lang->task->error->left = 'Vui lòng nhập "Giờ còn lại"';
$lang->task->error->work = '"Nhận xét" phải là < %d ký tự.';
$lang->task->error->skipClose = 'Nhiệm vụ: %s không là "Kết thúc” hoặc “Đã hủy”. Bạn có muốn đóng nó?';
$lang->task->error->consumed = 'Nhiệm vụ: %s giờ phải là < 0. Bỏ qua thay đổi cho nhiệm vụ này.';
$lang->task->error->assignedTo = 'Nhiệm vụ nhiều người dùng trong tình trạng hiện tại không thể giao cho một thành viên người không trong Nhóm nhiệm vụ.';
$lang->task->error->consumedEmpty = '"Giờ làm" không nên 0.';
$lang->task->error->deadlineSmall = '"Hạn chót" phải lớn hơn "Ngày bắt đầu".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
$lang->task->error->consumedNumber = '"Giờ làm" phải là số.';
$lang->task->error->estimateNumber = '"Dự tính" phải là số.';
$lang->task->error->leftNumber = '"Left" must be numbers.';
$lang->task->error->recordMinus = 'Giờ làm không nên là số âm';
$lang->task->error->consumedSmall = '"Tổng giờ làm" phải là > số cuối cùng.';
$lang->task->error->consumedThisTime = 'Vui lòng nhập "Số giờ làm"';
$lang->task->error->left = 'Vui lòng nhập "Giờ còn lại"';
$lang->task->error->work = '"Nhận xét" phải là < %d ký tự.';
$lang->task->error->skipClose = 'Nhiệm vụ: %s không là "Kết thúc” hoặc “Đã hủy”. Bạn có muốn đóng nó?';
$lang->task->error->consumed = 'Nhiệm vụ: %s giờ phải là < 0. Bỏ qua thay đổi cho nhiệm vụ này.';
$lang->task->error->assignedTo = 'Nhiệm vụ nhiều người dùng trong tình trạng hiện tại không thể giao cho một thành viên người không trong Nhóm nhiệm vụ.';
$lang->task->error->consumedEmpty = '"Giờ làm" không nên 0.';
$lang->task->error->deadlineSmall = '"Hạn chót" phải lớn hơn "Ngày bắt đầu".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
$lang->task->error->chooseOtherParent = 'the currently selected parent task has been consumed, please select another parent task.';
/* Report. */
$lang->task->report = new stdclass();
+18 -16
View File
@@ -197,23 +197,25 @@ $lang->task->deniedNotice = '当前任务只有%s才可以%s。';
$lang->task->noTask = '暂时没有任务。';
$lang->task->createDenied = '你不能在该项目添加任务';
$lang->task->cannotDeleteParent = '不能删除父任务。';
$lang->task->addChildTask = '因该任务已经产生消耗,为保证数据一致性,我们会帮您创建一条同名子任务记录该消耗。';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"总计消耗"必须为数字';
$lang->task->error->consumedNumber = '"本次消耗"必须为数字';
$lang->task->error->estimateNumber = '"最初预计"必须为数字';
$lang->task->error->leftNumber = '"预计剩余"必须为数字';
$lang->task->error->recordMinus = '工时不能为负数';
$lang->task->error->consumedSmall = '"总计消耗"必须大于之前消耗';
$lang->task->error->consumedThisTime = '请填写"工时"';
$lang->task->error->left = '请填写"剩余"';
$lang->task->error->work = '"备注"必须小于%d个字符';
$lang->task->error->skipClose = '任务:%s 不是“已完成”或“已取消”状态,确定要关闭吗?';
$lang->task->error->consumed = '任务:%s工时不能小于0,忽略该任务工时的改动';
$lang->task->error->assignedTo = '当前状态的多人任务不能指派给任务团队外的成员。';
$lang->task->error->consumedEmpty = '"本次消耗"不能为0';
$lang->task->error->deadlineSmall = '"截止日期"必须大于"预计开始"';
$lang->task->error->alreadyStarted = '此任务已被启动,不能重复启动!';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"总计消耗"必须为数字';
$lang->task->error->consumedNumber = '"本次消耗"必须为数字';
$lang->task->error->estimateNumber = '"最初预计"必须为数字';
$lang->task->error->leftNumber = '"预计剩余"必须为数字';
$lang->task->error->recordMinus = '工时不能为负数';
$lang->task->error->consumedSmall = '"总计消耗"必须大于之前消耗';
$lang->task->error->consumedThisTime = '请填写"工时"';
$lang->task->error->left = '请填写"剩余"';
$lang->task->error->work = '"备注"必须小于%d个字符';
$lang->task->error->skipClose = '任务:%s 不是“已完成”或“已取消”状态,确定要关闭吗?';
$lang->task->error->consumed = '任务:%s工时不能小于0,忽略该任务工时的改动';
$lang->task->error->assignedTo = '当前状态的多人任务不能指派给任务团队外的成员。';
$lang->task->error->consumedEmpty = '"本次消耗"不能为0';
$lang->task->error->deadlineSmall = '"截止日期"必须大于"预计开始"';
$lang->task->error->alreadyStarted = '此任务已被启动,不能重复启动!';
$lang->task->error->chooseOtherParent = '当前选中的父任务已有消耗,请选择其他父任务。';
/* Report. */
$lang->task->report = new stdclass();
+18
View File
@@ -368,6 +368,16 @@ class taskModel extends model
if($parentID > 0 && !empty($taskID))
{
$oldParentTask = $this->dao->select('*')->from(TABLE_TASK)->where('id')->eq((int)$parentID)->fetch();
/* When common task are child tasks and the common task has consumption, create a child task. */
if($oldParentTask->parent == 0 and $oldParentTask->consumed > 0)
{
$childTask = $oldParentTask;
unset($childTask->id);
$childTask->parent = $parentID;
$this->dao->insert(TABLE_TASK)->data($childTask)->autoCheck()->exec();
}
$this->updateParentStatus($taskID);
$this->computeBeginAndEnd($parentID);
@@ -730,6 +740,14 @@ class taskModel extends model
return false;
}
/* When the selected parent task is a common task and has consumption, select other parent tasks. */
if($this->post->parent > 0)
{
$taskConsumed = 0;
$taskConsumed = $this->dao->select('consumed')->from(TABLE_TASK)->where('id')->eq($this->post->parent)->andWhere('parent')->eq(0)->fetch('consumed');
if($taskConsumed > 0) die(js::error($this->lang->task->error->chooseOtherParent));
}
$now = helper::now();
$task = fixer::input('post')
->setDefault('story, estimate, left, consumed', 0)
+2
View File
@@ -12,6 +12,8 @@
?>
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/datepicker.html.php';?>
<?php js::set('taskConsumed', $taskConsumed);?>
<?php js::set('addChildTask', $lang->task->addChildTask);?>
<div id="mainContent" class="main-content fade">
<div class="main-header clearfix">
<h2 class="pull-left">