diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php
index e0d08dbc1fa..e40176f784d 100644
--- a/htdocs/contrat/card.php
+++ b/htdocs/contrat/card.php
@@ -706,6 +706,11 @@ if (empty($reshook))
$result = $object->validate($user);
}
+ else if ($action == 'reopen' && $user->rights->contrat->creer)
+ {
+ $result = $object->reopen($user);
+ }
+
// Close all lines
else if ($action == 'confirm_close' && $confirm == 'yes' && $user->rights->contrat->creer)
{
@@ -1915,7 +1920,12 @@ else
if ($user->rights->contrat->creer) print '
';
else print '';
}
-
+ if ($object->statut == 1 && $nbofservices)
+ {
+ if ($user->rights->contrat->creer) print '';
+ else print '';
+ }
+
if (! empty($conf->facture->enabled) && $object->statut > 0 && $object->nbofservicesclosed < $nbofservices)
{
$langs->load("bills");
@@ -1975,6 +1985,12 @@ else
print '';
+ // List of actions on element
+ include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php';
+ $formactions = new FormActions($db);
+ $somethingshown = $formactions->showactions($object, 'contract', $socid);
+
+
print '
';
}
}
diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php
index 91f96aabf5d..37eaa1db04d 100644
--- a/htdocs/contrat/class/contrat.class.php
+++ b/htdocs/contrat/class/contrat.class.php
@@ -472,7 +472,71 @@ class Contrat extends CommonObject
}
+ /**
+ * Unvalidate a contract
+ *
+ * @param User $user Objet User
+ * @param int $notrigger 1=Does not execute triggers, 0=execute triggers
+ * @return int <0 if KO, >0 if OK
+ */
+ function reopen($user, $notrigger=0)
+ {
+ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
+ global $langs, $conf;
+ $now=dol_now();
+
+ $error=0;
+ dol_syslog(get_class($this).'::reopen user='.$user->id);
+
+ $this->db->begin();
+
+ $this->fetch_thirdparty();
+
+ $sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET statut = 0";
+ //$sql.= ", fk_user_valid = null, date_valid = null";
+ $sql .= " WHERE rowid = ".$this->id . " AND statut = 1";
+
+ dol_syslog(get_class($this)."::validate", LOG_DEBUG);
+ $resql = $this->db->query($sql);
+ if (! $resql)
+ {
+ dol_print_error($this->db);
+ $error++;
+ $this->error=$this->db->lasterror();
+ }
+
+ // Trigger calls
+ if (! $error && ! $notrigger)
+ {
+ // Call trigger
+ $result=$this->call_trigger('CONTRACT_REOPEN',$user);
+ if ($result < 0) {
+ $error++;
+ }
+ // End call triggers
+ }
+
+ // Set new ref and define current statut
+ if (! $error)
+ {
+ $this->statut=0;
+ $this->brouillon=1;
+ $this->date_validation=$now;
+ }
+
+ if (! $error)
+ {
+ $this->db->commit();
+ return 1;
+ }
+ else
+ {
+ $this->db->rollback();
+ return -1;
+ }
+ }
+
/**
* Load a contract from database
*
diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang
index 4bb6a52af8b..6dd3c6220bb 100644
--- a/htdocs/langs/en_US/projects.lang
+++ b/htdocs/langs/en_US/projects.lang
@@ -163,6 +163,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
TasksWithThisUserAsContact=Tasks assigned to this user
ResourceNotAssignedToProject=Not assigned to project
ResourceNotAssignedToTask=Not assigned to task
+ResourceNotAssignedToTheTask=Not assigned to the task
AssignTaskToMe=Assign task to me
AssignTask=Assign
ProjectOverview=Overview
diff --git a/htdocs/projet/activity/perday.php b/htdocs/projet/activity/perday.php
index f41d585a6b8..7ff01487beb 100644
--- a/htdocs/projet/activity/perday.php
+++ b/htdocs/projet/activity/perday.php
@@ -108,6 +108,35 @@ if ($action == 'assign')
{
$idfortaskuser=$user->id;
$result = $object->add_contact($idfortaskuser, GETPOST("type"), 'internal');
+
+ if ($result >= 0 || $result == -2) // Contact add ok or already contact of task
+ {
+ // Test if we are already contact of the project (should be rare but sometimes we can add as task contact without being contact of project, like when admin user has been removed from contact of project)
+ $sql='SELECT ec.rowid FROM '.MAIN_DB_PREFIX.'element_contact as ec, '.MAIN_DB_PREFIX.'c_type_contact as tc WHERE tc.rowid = ec.fk_c_type_contact';
+ $sql.=' AND ec.fk_socpeople = '.$idfortaskuser." AND ec.element_id = '.$object->fk_project.' AND tc.element = 'project' AND source = 'internal'";
+ $resql=$db->query($sql);
+ if ($resql)
+ {
+ $obj=$db->fetch_object($resql);
+ if (! $obj) // User is not already linked to project, so we will create link to first type
+ {
+ $project = new Project($db);
+ $project->fetch($object->fk_project);
+ // Get type
+ $listofprojcontact=$project->liste_type_contact('internal');
+
+ if (count($listofprojcontact))
+ {
+ $typeforprojectcontact=reset(array_keys($listofprojcontact));
+ $result = $project->add_contact($idfortaskuser, $typeforprojectcontact, 'internal');
+ }
+ }
+ }
+ else
+ {
+ dol_print_error($db);
+ }
+ }
}
if ($result < 0)
diff --git a/htdocs/projet/activity/perweek.php b/htdocs/projet/activity/perweek.php
index cc31d1090f8..e1c684159b2 100644
--- a/htdocs/projet/activity/perweek.php
+++ b/htdocs/projet/activity/perweek.php
@@ -120,7 +120,36 @@ if ($action == 'assign')
if (! $error)
{
$idfortaskuser=$user->id;
- $result = $object->add_contact($idfortaskuser, GETPOST("type"), 'internal');
+ $result = $object->add_contact($idfortaskuser, GETPOST("type"), 'internal');
+
+ if (! $result || $result == -2) // Contact add ok or already contact of task
+ {
+ // Test if we are already contact of the project (should be rare but sometimes we can add as task contact without being contact of project, like when admin user has been removed from contact of project)
+ $sql='SELECT ec.rowid FROM '.MAIN_DB_PREFIX.'element_contact as ec, '.MAIN_DB_PREFIX.'c_type_contact as tc WHERE tc.rowid = ec.fk_c_type_contact';
+ $sql.=' AND ec.fk_socpeople = '.$idfortaskuser." AND ec.element_id = '.$object->fk_project.' AND tc.element = 'project' AND source = 'internal'";
+ $resql=$db->query($sql);
+ if ($resql)
+ {
+ $obj=$db->fetch_object($resql);
+ if (! $obj) // User is not already linked to project, so we will create link to first type
+ {
+ $project = new Project($db);
+ $project->fetch($object->fk_project);
+ // Get type
+ $listofprojcontact=$project->liste_type_contact('internal');
+
+ if (count($listofprojcontact))
+ {
+ $typeforprojectcontact=reset(array_keys($listofprojcontact));
+ $result = $project->add_contact($idfortaskuser, $typeforprojectcontact, 'internal');
+ }
+ }
+ }
+ else
+ {
+ dol_print_error($db);
+ }
+ }
}
if ($result < 0)
diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php
index ac0adf33c77..5ed3655615e 100644
--- a/htdocs/projet/tasks/time.php
+++ b/htdocs/projet/tasks/time.php
@@ -395,7 +395,7 @@ if ($id > 0 || ! empty($ref))
if (count($contactsoftask)>0)
{
$userid=$contactsoftask[0];
- print $form->select_dolusers((GETPOST('userid')?GETPOST('userid'):$userid), 'userid', 0, '', 0, '', $contactsoftask, 0, 0, 0, '', 0, $langs->trans("ResourceNotAssignedToTask"));
+ print $form->select_dolusers((GETPOST('userid')?GETPOST('userid'):$userid), 'userid', 0, '', 0, '', $contactsoftask, 0, 0, 0, '', 0, $langs->trans("ResourceNotAssignedToTheTask"));
}
else
{
@@ -405,7 +405,7 @@ if ($id > 0 || ! empty($ref))
// Note
print '';
- print '';
+ print '';
print ' | ';
// Progress declared
@@ -528,7 +528,7 @@ if ($id > 0 || ! empty($ref))
print '';
if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid)
{
- print '';
+ print '';
}
else
{
diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php
index 4252dcf71f4..2c5ac022529 100644
--- a/htdocs/theme/eldy/style.css.php
+++ b/htdocs/theme/eldy/style.css.php
@@ -2221,6 +2221,10 @@ div.pagination li.litext a:hover {
background-color: transparent;
background-image: none;
}
+div.pagination li.litext a:hover {
+ background-color: transparent;
+ background-image: none;
+}
dol_use_jmobile)) { ?>
div.pagination li.litext {
padding-top: 13px;
|