From 792c0a33f3b14ae9d7a802b8d4bc392facb89ee1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@destailleur.fr> Date: Mon, 7 May 2012 17:04:35 +0200 Subject: [PATCH] Fix: Works with checkbox htdocs/core/class/html.form.class.php --- htdocs/core/class/html.form.class.php | 5 +- htdocs/langs/en_US/projects.lang | 6 +- htdocs/langs/fr_FR/projects.lang | 6 +- htdocs/projet/class/project.class.php | 85 ++++++++------------------- htdocs/projet/class/task.class.php | 31 ++-------- htdocs/projet/fiche.php | 51 +++++++--------- 6 files changed, 63 insertions(+), 121 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 971ab45376b..cbf6a1b7bf6 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2254,7 +2254,10 @@ class Form if ($inputarray.length>0) { $.each($inputarray, function() { var inputname = this; - var inputvalue = $("#" + this).val(); + var more = \'\'; + if ($("#" + this).attr("type") == \'checkbox\') { more = \':checked\'; } + var inputvalue = $("#" + this + more).val(); + if (typeof inputvalue == \'undefined\') { inputvalue=\'\'; } options += \'&\' + inputname + \'=\' + inputvalue; }); //alert(options); diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index 75082f8012c..18844f91868 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -85,7 +85,11 @@ TaskIsNotAffectedToYou=Task not allocated to you ErrorTimeSpentIsEmpty=Time spent is empty ThisWillAlsoRemoveTasks=This action will also delete all tasks of project (<b>%s</b> tasks at the moment) and all inputs of time spent. IfNeedToUseOhterObjectKeepEmpty=If some objects (invoice, order, ...), belonging to another third party, must be linked to the project to create, keep this empty to have the project being multi third parties. -CloneProject=Clone project (associated task will be duplicated too) +CloneProject=Clone project +CloneTasks=Clone tasks +CloneContacts=Clone contacts +CloneNotes=Clone notes +CloneFiles=Clone joined files ConfirmCloneProject=Are you sure to clone this project ? ProjectReportDate=Change task date according project start date ErrorShiftTaskDate=Impossible to shift task date according to new project start date diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang index 0c3a21e4cdb..01c6b337e98 100644 --- a/htdocs/langs/fr_FR/projects.lang +++ b/htdocs/langs/fr_FR/projects.lang @@ -85,7 +85,11 @@ TaskIsNotAffectedToYou=Tâche qui ne vous est pas affectée ErrorTimeSpentIsEmpty=Le temps consommé n'est pas renseigné ThisWillAlsoRemoveTasks=Cette opération détruira également les tâches du projet (<b>%s</b> tâches actuellement) et le suivi des consommés. IfNeedToUseOhterObjectKeepEmpty=Si des objets (facture, commande, ...), appartenant à un autre tiers que celui choisi, doivent être liés au projet à créer, laisser vide afin de laisser le projet multi-tiers. -CloneProject=Cloner le projet (les taches associées sont dupliquées également) +CloneProject=Cloner le projet +CloneTasks=Cloner les taches +CloneContacts=Cloner les contacts +CloneNotes=Cloner les notes +CloneFiles=Cloner les pièces jointes ConfirmCloneProject=Êtes-vous sûr de vouloir cloner ce projet ? ProjectReportDate=Reporter les dates des taches en fonction de la date de départ. ErrorShiftTaskDate=Une erreur c'est produite dans le report des dates des taches. diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index 823ba1057f8..db565f2097d 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -883,21 +883,24 @@ class Project extends CommonObject return $projects; } - /** Load an object from its id and create a new one in database - * - * @param int $fromid Id of object to clone - * @param bool $clone_contact clone contact of project - * @param bool $clone_task clone task of project - * @param bool $clone_file clone file of project - * @param bool $clone_note clone note of project - * @return int New id of clone - */ - function createFromClone($fromid,$clone_contact=false,$clone_task=true,$clone_file=true,$clone_note=true) + /** + * Load an object from its id and create a new one in database + * + * @param int $fromid Id of object to clone + * @param bool $clone_contact clone contact of project + * @param bool $clone_task clone task of project + * @param bool $clone_file clone file of project + * @param bool $clone_note clone note of project + * @return int New id of clone + */ + function createFromClone($fromid,$clone_contact=false,$clone_task=true,$clone_file=false,$clone_note=true) { global $user,$langs,$conf; $error=0; + dol_syslog("createFromClone clone_contact=".$clone_contact." clone_task=".$clone_task." clone_file=".$clone_file." clone_note=".$clone_note); + $now = dol_mktime(0,0,0,idate('m',dol_now()),idate('d',dol_now()),idate('Y',dol_now())); $clone_project=new Project($this->db); @@ -908,30 +911,18 @@ class Project extends CommonObject $clone_project->fetch($fromid); $orign_dt_start=$clone_project->date_start; - - $orign_project_ref=$clone_project->ref; $clone_project->id=0; $clone_project->date_start = $now; if (!(empty($clone_project->date_end))) { - //Calculate new project end date ragarding difference between original project start date and new start date (now) - $datetime_start = new DateTime(); - $datetime_start->setTimestamp($orign_dt_start); - $datetime_now = new DateTime(); - $datetime_now->setTimestamp($now); - $diff_dt = $datetime_start->diff($datetime_now); - - $datetime_end = new DateTime(); - $datetime_end->setTimestamp($clone_project->date_end); - $datetime_end->add($diff_dt); - $clone_project->date_end = $datetime_end->getTimestamp(); + $clone_project->date_end = $clone_project->date_end + ($now - $orign_dt_start); } $clone_project->datec = $now; - if (!$clone_note) + if (! $clone_note) { $clone_project->note_private=''; $clone_project->note_public=''; @@ -1139,11 +1130,12 @@ class Project extends CommonObject } - /** Shift project task date from current date to delta - * - * @param timestamp $old_project_dt_start old project start date - * @return int 1 if OK or < 0 if KO - */ + /** + * Shift project task date from current date to delta + * + * @param timestamp $old_project_dt_start old project start date + * @return int 1 if OK or < 0 if KO + */ function shiftTaskDate($old_project_dt_start) { global $user,$langs,$conf; @@ -1156,11 +1148,6 @@ class Project extends CommonObject $socid=0; if ($user->societe_id > 0) $socid = $user->societe_id; - //convert timestamp to datetime - $old_project_dt_st = new DateTime(); - $old_project_dt_st->setTimestamp($old_project_dt_start); - $old_project_dt_st->setTime(0,0,0); //Use 00:00:00 as time to be sure to not have side - $tasksarray=$taskstatic->getTasksArray(0, 0, $this->id, $socid, 0); foreach ($tasksarray as $tasktoshiftdate) @@ -1183,39 +1170,13 @@ class Project extends CommonObject //Calcultate new task start date with difference between old proj start date and origin task start date if (!empty($tasktoshiftdate->date_start)) { - dol_syslog(get_class($this)."::shiftTaskDate to_update", LOG_DEBUG); - $orign_task_datetime_start = new DateTime(); - $orign_task_datetime_start->setTimestamp($tasktoshiftdate->date_start); - $orign_task_datetime_start->setTime(0,0,0); //Use 00:00:00 as time to be sure to not have side effect - $diff_dt_st = $old_project_dt_st->diff($orign_task_datetime_start); - - //Project new start date - $datetime_start = new DateTime(); - $datetime_start->setTimestamp($this->date_start); - $datetime_start->setTime(0,0,0); //Use 00:00:00 as time to be sure to not have side - - //New task start date - $datetime_start->add($diff_dt_st); - $task->date_start = $datetime_start->getTimestamp(); + $task->date_start = $this->date_start + ($tasktoshiftdate->date_start - $old_project_dt_st); } //Calcultate new task end date with difference between origin proj end date and origin task end date if (!empty($tasktoshiftdate->date_end)) { - $orign_task_datetime_end = new DateTime(); - $orign_task_datetime_end->setTimestamp($tasktoshiftdate->date_end); - $orign_task_datetime_end->setTime(0,0,0); //Use 00:00:00 as hour to be sure to not have side effect - - $diff_dt_end = $old_project_dt_st->diff($orign_task_datetime_end); - - //Project new start date - $datetime_end = new DateTime(); - $datetime_end->setTimestamp($this->date_start); - $datetime_end->setTime(0,0,0); //Use 00:00:00 as time to be sure to not have side - - //New task start date - $datetime_end->add($diff_dt_end); - $task->date_end = $datetime_end->getTimestamp(); + $task->date_end = $this->date_start + ($tasktoshiftdate->date_end - $old_project_dt_st); } if ($to_update) diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index d1fdc88aedf..ab6a5a6840c 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -957,7 +957,7 @@ class Task extends CommonObject $now=dol_now(); - $datec = dol_mktime(0,0,0,idate('m',$now),idate('d',$now),idate('Y',$now)); + $datec = $now; $clone_task=new Task($this->db); @@ -980,41 +980,18 @@ class Task extends CommonObject $projectstatic->fetch($ori_project_id); //Origin project strat date - $orign_project_dt_start = new DateTime(); - $orign_project_dt_start->setTimestamp($projectstatic->date_start); + $orign_project_dt_start = $projectstatic->date_start; //Calcultate new task start date with difference between origin proj start date and origin task start date if (!empty($clone_task->date_start)) { - $orign_task_datetime_start = new DateTime(); - $orign_task_datetime_start->setTimestamp($clone_task->date_start); - $orign_task_datetime_start->setTime(0,0,0); //Use 00:00:00 as hour to be sure to not have side effect - $diff_dt_st = $orign_project_dt_start->diff($orign_task_datetime_start); - - //cloned project start date - $datetime_start = new DateTime(); - $datetime_start->setTimestamp($now); - - //New task start date - $datetime_start->add($diff_dt_st); - $clone_task->date_start = $datetime_start->getTimestamp(); + $clone_task->date_start = $now + $clone_task->date_start - $orign_project_dt_start; } //Calcultate new task end date with difference between origin proj end date and origin task end date if (!empty($clone_task->date_end)) { - $orign_task_datetime_end = new DateTime(); - $orign_task_datetime_end->setTimestamp($clone_task->date_end); - $orign_task_datetime_end->setTime(0,0,0); //Use 00:00:00 as hour to be sure to not have side effect - $diff_dt_end = $orign_project_dt_start->diff($orign_task_datetime_end); - - //cloned project start date - $datetime_end = new DateTime(); - $datetime_end->setTimestamp($now); - - //New task start date - $datetime_end->add($diff_dt_end); - $clone_task->date_end = $datetime_end->getTimestamp(); + $clone_task->date_end = $now + $clone_task->date_end - $orign_project_dt_start; } } diff --git a/htdocs/projet/fiche.php b/htdocs/projet/fiche.php index 1c6b0626ad1..d4293bea9ef 100644 --- a/htdocs/projet/fiche.php +++ b/htdocs/projet/fiche.php @@ -80,7 +80,7 @@ if (GETPOST("cancel") && ! empty($backtopage)) //if cancel and come from clone then delete the cloned project if (GETPOST("cancel") && (GETPOST("comefromclone")==1)) -{ +{ $project = new Project($db); $project->fetch($id); $result=$project->delete($user); @@ -200,7 +200,7 @@ if ($action == 'update' && ! $_POST["cancel"] && $user->rights->projet->creer) $result=$project->update($user); $id=$project->id; // On retourne sur la fiche projet - + if (GETPOST("reportdate") && ($project->date_start!=$old_start_date)) { $result=$project->shiftTaskDate($old_start_date); @@ -303,25 +303,11 @@ if ($action == 'confirm_clone' && $user->rights->projet->creer && GETPOST('confi $idtoclone=$id; $project = new Project($db); $project->fetch($idtoclone); - $result=$project->createFromClone($idtoclone,true,true,true,true); - if ($result <= 0) - { - $mesg='<div class="error">'.$project->error.'</div>'; - } - else - { - $id=$result; - $action='edit'; - $comefromclone=true; - } -} - -if ($action == 'confirm_clone' && $user->rights->projet->creer && GETPOST('confirm') == 'yes') -{ - $idtoclone=$id; - $project = new Project($db); - $project->fetch($idtoclone); - $result=$project->createFromClone($idtoclone,true,true,true,true); + $clone_contacts=GETPOST('clone_contacts')?1:0; + $clone_tasks=GETPOST('clone_tasks')?1:0; + $clone_files=GETPOST('clone_files')?1:0; + $clone_notes=GETPOST('clone_notes')?1:0; + $result=$project->createFromClone($idtoclone,$clone_contacts,$clone_tasks,$clone_files,$clone_notes); if ($result <= 0) { $mesg='<div class="error">'.$project->error.'</div>'; @@ -372,7 +358,7 @@ if ($action == 'create' && $user->rights->projet->creer) { require_once(DOL_DOCUMENT_ROOT ."/core/modules/project/".$conf->global->PROJECT_ADDON.".php"); $modProject = new $obj; - $defaultref = $modProject->getNextValue($soc,$project); + $defaultref = $modProject->getNextValue($soc,$project); } if (is_numeric($defaultref) && $defaultref <= 0) $defaultref=''; @@ -482,10 +468,17 @@ else // Clone confirmation if ($action == 'clone') { - $ret=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$project->id,$langs->trans("CloneProject"),$langs->trans("ConfirmCloneProject"),"confirm_clone",'','',1); - if ($ret == 'html') print '<br>'; + $formquestion=array( + 'text' => $langs->trans("ConfirmClone"), + array('type' => 'checkbox', 'name' => 'clone_contacts','label' => $langs->trans("CloneContacts"), 'value' => true), + array('type' => 'checkbox', 'name' => 'clone_tasks', 'label' => $langs->trans("CloneTasks"), 'value' => true), + array('type' => 'checkbox', 'name' => 'clone_notes', 'label' => $langs->trans("CloneNotes"), 'value' => true), + array('type' => 'checkbox', 'name' => 'clone_files', 'label' => $langs->trans("CloneFiles"), 'value' => false) + ); + + print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$project->id, $langs->trans("CloneProject"), $langs->trans("ConfirmCloneProject"), "confirm_clone", $formquestion, '', 1, 240); } - + if ($action == 'edit' && $userWrite > 0) { print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">'; @@ -522,7 +515,7 @@ else print '<tr><td>'.$langs->trans("DateStart").'</td><td>'; print $form->select_date($project->date_start,'project'); print '<input type="checkbox" name="reportdate" value="yes" '; - if ($comefromclone){print ' checked="checked" ';} + if ($comefromclone){print ' checked="checked" ';} print '/>'. $langs->trans("ProjectReportDate"); print '</td></tr>'; @@ -542,7 +535,7 @@ else print '<div align="center"><br>'; print '<input name="update" class="button" type="submit" value="'.$langs->trans("Modify").'"> '; print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'"></div>'; - + print '</form>'; } else @@ -580,7 +573,7 @@ else // Date start print '<tr><td>'.$langs->trans("DateStart").'</td><td>'; - print dol_print_date($project->date_start,'day'); + print dol_print_date($project->date_start,'day'); print '</td></tr>'; // Date end @@ -656,7 +649,7 @@ else print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotOwnerOfProject").'">'.$langs->trans('ReOpen').'</a>'; } } - + // Clone if ($user->rights->projet->creer) { -- GitLab