function get_format_libelle_projet($fk)
{
    global $db;
    if ($fk > 0) {
        dol_include_once('/projet/class/project.class.php');
        $o = new Project($db);
        if ($o->fetch($fk) > 0) {
            return $o->getNomUrl(1);
        } else {
            return $fk;
        }
    }
    return '';
}
Example #2
0
             if ($object->contact->fetch($object->contactid)) {
                 print "<br>" . dol_print_phone($object->contact->phone_pro);
             }
         }
     } else {
         print $langs->trans("None");
     }
     print '</td></tr>';
 }
 // Project
 if (!empty($conf->projet->enabled)) {
     print '<tr><td width="30%">' . $langs->trans("Project") . '</td><td colspan="3">';
     if ($object->fk_project) {
         $project = new Project($db);
         $project->fetch($object->fk_project);
         print $project->getNomUrl(1, '', 1);
     }
     print '</td></tr>';
 }
 // Priority
 print '<tr><td class="nowrap" width="30%">' . $langs->trans("Priority") . '</td><td colspan="3">';
 print $object->priority ? $object->priority : '';
 print '</td></tr>';
 // Object linked
 if (!empty($object->fk_element) && !empty($object->elementtype)) {
     include_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php';
     print '<tr><td>' . $langs->trans("LinkedObject") . '</td>';
     print '<td colspan="3">' . dolGetElementUrl($object->fk_element, $object->elementtype, 1) . '</td></tr>';
 }
 // Description
 print '<tr><td class="tdtop">' . $langs->trans("Description") . '</td><td colspan="3">';
Example #3
0
     if ($object->contact->id && $object->type_code == 'AC_TEL') {
         if ($object->contact->fetch($object->contact->id)) {
             print "<br>" . dol_print_phone($object->contact->phone_pro);
         }
     }
 } else {
     print $langs->trans("None");
 }
 print '</td></tr>';
 // Project
 if (!empty($conf->projet->enabled)) {
     print '<tr><td class="tdtop">' . $langs->trans("Project") . '</td><td colspan="3">';
     if ($object->fk_project) {
         $project = new Project($db);
         $project->fetch($object->fk_project);
         print $project->getNomUrl(1);
     }
     print '</td></tr>';
 }
 // Priority
 print '<tr><td class="nowrap">' . $langs->trans("Priority") . '</td><td colspan="3">';
 print $object->priority ? $object->priority : '';
 print '</td></tr>';
 // Other attributes
 $parameters = array('colspan' => ' colspan="3"', 'colspanvalue' => '3', 'id' => $object->id);
 $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action);
 // Note that $action and $object may have been modified by hook
 if (empty($reshook) && !empty($extrafields->attribute_label)) {
     print $object->showOptionals($extrafields, 'edit');
 }
 print '</table>';
Example #4
0
 $var = true;
 while ($i < $num_lignes) {
     $piece_comptable = $i + 1;
     $objp = $db->fetch_object($resql);
     $var = !$var;
     if ($action != 'editline' || $objp->rowid != GETPOST('rowid')) {
         print '<tr ' . $bc[$var] . '>';
         print '<td style="text-align:center;">';
         print img_picto($langs->trans("Document"), "object_generic");
         print ' <span>' . $piece_comptable . '</span></td>';
         print '<td style="text-align:center;">' . dol_print_date($db->jdate($objp->date), 'day') . '</td>';
         print '<td>';
         if ($objp->projet_id > 0) {
             $projecttmp->id = $objp->projet_id;
             $projecttmp->ref = $objp->projet_ref;
             print $projecttmp->getNomUrl(1);
         }
         print '</td>';
         print '<td style="text-align:center;">' . $langs->trans("TF_" . strtoupper($objp->type_fees_libelle)) . '</td>';
         print '<td style="text-align:left;">' . $objp->comments . '</td>';
         print '<td style="text-align:right;">' . vatrate($objp->vatrate, true) . '</td>';
         print '<td style="text-align:right;">' . price($objp->value_unit) . '</td>';
         print '<td style="text-align:right;">' . $objp->qty . '</td>';
         if ($action != 'editline') {
             print '<td style="text-align:right;">' . price($objp->total_ht) . '</td>';
             print '<td style="text-align:right;">' . price($objp->total_ttc) . '</td>';
         }
         // Ajout des boutons de modification/suppression
         print '<td style="text-align:right;" class="nowrap">';
         if ($object->fk_statut < 2 or $object->fk_statut == 99) {
             print '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=editline&amp;rowid=' . $objp->rowid . '#' . $objp->rowid . '">';
/**
 * Return HTML table with list of projects and number of opened tasks
 *
 * @param	DoliDB	$db					Database handler
 * @param   int		$socid				Id thirdparty
 * @param   int		$projectsListId     Id of project i have permission on
 * @param   int		$mytasks            Limited to task i am contact to
 * @return	void
 */
function print_projecttasks_array($db, $socid, $projectsListId, $mytasks = 0)
{
    global $langs, $conf, $user, $bc;
    require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    $projectstatic = new Project($db);
    $sortfield = '';
    $sortorder = '';
    print '<table class="noborder" width="100%">';
    print '<tr class="liste_titre">';
    print_liste_field_titre($langs->trans("Project"), "index.php", "", "", "", "", $sortfield, $sortorder);
    print_liste_field_titre($langs->trans("Tasks"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
    print_liste_field_titre($langs->trans("Status"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
    print "</tr>\n";
    $sql = "SELECT p.rowid as projectid, p.ref, p.title, p.fk_user_creat, p.public, p.fk_statut, COUNT(t.rowid) as nb";
    $sql .= " FROM " . MAIN_DB_PREFIX . "projet as p";
    if ($mytasks) {
        $sql .= ", " . MAIN_DB_PREFIX . "projet_task as t";
        $sql .= ", " . MAIN_DB_PREFIX . "element_contact as ec";
        $sql .= ", " . MAIN_DB_PREFIX . "c_type_contact as ctc";
    } else {
        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "projet_task as t ON p.rowid = t.fk_projet";
    }
    $sql .= " WHERE p.entity = " . $conf->entity;
    $sql .= " AND p.rowid IN (" . $projectsListId . ")";
    if ($socid) {
        $sql .= "  AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = " . $socid . ")";
    }
    if ($mytasks) {
        $sql .= " AND p.rowid = t.fk_projet";
        $sql .= " AND ec.element_id = t.rowid";
        $sql .= " AND ctc.rowid = ec.fk_c_type_contact";
        $sql .= " AND ctc.element = 'project_task'";
        $sql .= " AND ec.fk_socpeople = " . $user->id;
    }
    $sql .= " GROUP BY p.rowid, p.ref, p.title, p.fk_user_creat, p.public, p.fk_statut";
    $sql .= " ORDER BY p.title, p.ref";
    $var = true;
    $resql = $db->query($sql);
    if ($resql) {
        $num = $db->num_rows($resql);
        $i = 0;
        while ($i < $num) {
            $objp = $db->fetch_object($resql);
            $projectstatic->id = $objp->projectid;
            $projectstatic->user_author_id = $objp->fk_user_creat;
            $projectstatic->public = $objp->public;
            // Check is user has read permission on project
            $userAccess = $projectstatic->restrictedProjectArea($user);
            if ($userAccess >= 0) {
                $var = !$var;
                print "<tr " . $bc[$var] . ">";
                print '<td class="nowrap">';
                $projectstatic->ref = $objp->ref;
                print $projectstatic->getNomUrl(1);
                print ' - ' . dol_trunc($objp->title, 24) . '</td>';
                print '<td align="right">' . $objp->nb . '</td>';
                $projectstatic->statut = $objp->fk_statut;
                print '<td align="right">' . $projectstatic->getLibStatut(3) . '</td>';
                print "</tr>\n";
            }
            $i++;
        }
        $db->free($resql);
    } else {
        dol_print_error($db);
    }
    print "</table>";
}
Example #6
0
    	$taskstatic->ref = $obj->ref;
    	$taskstatic->label = $obj->label;
    	$taskstatic->fk_statut = $obj->fk_statut;
    	$taskstatic->progress = $obj->progress;
    	
    	$userAccess = $projectstatic->restrictedProjectArea($user);    // why this ?
    	if ($userAccess >= 0)
    	{
    		$var=!$var;
    		print "<tr ".$bc[$var].">";

    		// Project url
        	if (! empty($arrayfields['p.ref']['checked']))
        	{
        		print '<td class="nowrap">';
        		print $projectstatic->getNomUrl(1, 'task');
        		print '</td>';
        	}
    		// Title
        	if (! empty($arrayfields['p.title']['checked']))
        	{
            	print '<td>';
        		print dol_trunc($obj->projecttitle,80);
        		print '</td>';
        	}
    		// Company
        	if (! empty($arrayfields['s.nom']['checked']))
        	{
            	print '<td>';
        		if ($obj->socid)
        		{
Example #7
0
/**
 * Return HTML table with list of projects and number of opened tasks
 *
 * @param	DoliDB	$db					Database handler
 * @param	Form	$form				Object form
 * @param   int		$socid				Id thirdparty
 * @param   int		$projectsListId     Id of project I have permission on
 * @param   int		$mytasks            Limited to task I am contact to
 * @param	int		$statut				-1=No filter on statut, 0 or 1 = Filter on status
 * @param	array	$listofoppstatus	List of opportunity status
 * @param   array   $hiddenfields       List of info to not show ('projectlabel', 'declaredprogress', '...', )
 * @return	void
 */
function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks = 0, $statut = -1, $listofoppstatus = array(), $hiddenfields = array())
{
    global $langs, $conf, $user, $bc;
    require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    $projectstatic = new Project($db);
    $thirdpartystatic = new Societe($db);
    $sortfield = '';
    $sortorder = '';
    $project_year_filter = 0;
    $title = $langs->trans("Projects");
    if (strcmp($statut, '') && $statut >= 0) {
        $title = $langs->trans("Projects") . ' ' . $langs->trans($projectstatic->statuts_long[$statut]);
    }
    $arrayidtypeofcontact = array();
    print '<table class="noborder" width="100%">';
    $sql .= " FROM " . MAIN_DB_PREFIX . "projet as p";
    if ($mytasks) {
        $sql .= ", " . MAIN_DB_PREFIX . "projet_task as t";
        $sql .= ", " . MAIN_DB_PREFIX . "element_contact as ec";
        $sql .= ", " . MAIN_DB_PREFIX . "c_type_contact as ctc";
    } else {
        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "projet_task as t ON p.rowid = t.fk_projet";
    }
    $sql .= " WHERE p.entity = " . $conf->entity;
    $sql .= " AND p.rowid IN (" . $projectsListId . ")";
    if ($socid) {
        $sql .= "  AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = " . $socid . ")";
    }
    if ($mytasks) {
        $sql .= " AND p.rowid = t.fk_projet";
        $sql .= " AND ec.element_id = t.rowid";
        $sql .= " AND ec.fk_socpeople = " . $user->id;
        $sql .= " AND ec.fk_c_type_contact = ctc.rowid";
        // Replace the 2 lines with ec.fk_c_type_contact in $arrayidtypeofcontact
        $sql .= " AND ctc.element = 'project_task'";
    }
    if ($statut >= 0) {
        $sql .= " AND p.fk_statut = " . $statut;
    }
    if (!empty($conf->global->PROJECT_LIMIT_YEAR_RANGE)) {
        $project_year_filter = GETPOST("project_year_filter");
        //Check if empty or invalid year. Wildcard ignores the sql check
        if ($project_year_filter != "*") {
            if (empty($project_year_filter) || !ctype_digit($project_year_filter)) {
                $project_year_filter = date("Y");
            }
            $sql .= " AND (p.dateo IS NULL OR p.dateo <= " . $db->idate(dol_get_last_day($project_year_filter, 12, false)) . ")";
            $sql .= " AND (p.datee IS NULL OR p.datee >= " . $db->idate(dol_get_first_day($project_year_filter, 1, false)) . ")";
        }
    }
    // Get id of project we must show tasks
    $arrayidofprojects = array();
    $sql1 = "SELECT p.rowid as projectid";
    $sql1 .= $sql;
    $resql = $db->query($sql1);
    if ($resql) {
        $i = 0;
        $num = $db->num_rows($resql);
        while ($i < $num) {
            $objp = $db->fetch_object($resql);
            $arrayidofprojects[$objp->projectid] = $objp->projectid;
            $i++;
        }
    } else {
        dol_print_error($db);
    }
    if (empty($arrayidofprojects)) {
        $arrayidofprojects[0] = -1;
    }
    // Get list of project with calculation on tasks
    $sql2 = "SELECT p.rowid as projectid, p.ref, p.title, p.fk_soc, s.nom as socname, p.fk_user_creat, p.public, p.fk_statut as status, p.fk_opp_status as opp_status, p.opp_amount,";
    $sql2 .= " COUNT(t.rowid) as nb, SUM(t.planned_workload) as planned_workload, SUM(t.planned_workload * t.progress / 100) as declared_progess_workload";
    $sql2 .= " FROM " . MAIN_DB_PREFIX . "projet as p";
    $sql2 .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = p.fk_soc";
    $sql2 .= " LEFT JOIN " . MAIN_DB_PREFIX . "projet_task as t ON p.rowid = t.fk_projet";
    $sql2 .= " WHERE p.rowid IN (" . join(',', $arrayidofprojects) . ")";
    $sql2 .= " GROUP BY p.rowid, p.ref, p.title, p.fk_soc, p.fk_user_creat, p.public, p.fk_statut, p.fk_opp_status, p.opp_amount";
    $sql2 .= " ORDER BY p.title, p.ref";
    $var = true;
    $resql = $db->query($sql2);
    if ($resql) {
        $total_task = 0;
        $total_opp_amount = 0;
        $ponderated_opp_amount = 0;
        $num = $db->num_rows($resql);
        $i = 0;
        print '<tr class="liste_titre">';
        print_liste_field_titre($title . ' <span class="badge">' . $num . '</span>', $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder);
        print_liste_field_titre($langs->trans("ThirdParty"), $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder);
        if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
            print_liste_field_titre($langs->trans("OpportunityAmount"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
            print_liste_field_titre($langs->trans("OpportunityStatus"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
        }
        if (empty($conf->global->PROJECT_HIDE_TASKS)) {
            print_liste_field_titre($langs->trans("Tasks"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
            if (!in_array('plannedworkload', $hiddenfields)) {
                print_liste_field_titre($langs->trans("PlannedWorkload"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
            }
            if (!in_array('declaredprogress', $hiddenfields)) {
                print_liste_field_titre($langs->trans("ProgressDeclared"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
            }
        }
        print_liste_field_titre($langs->trans("Status"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
        print "</tr>\n";
        while ($i < $num) {
            $objp = $db->fetch_object($resql);
            $projectstatic->id = $objp->projectid;
            $projectstatic->user_author_id = $objp->fk_user_creat;
            $projectstatic->public = $objp->public;
            // Check is user has read permission on project
            $userAccess = $projectstatic->restrictedProjectArea($user);
            if ($userAccess >= 0) {
                $var = !$var;
                print "<tr " . $bc[$var] . ">";
                print '<td>';
                $projectstatic->ref = $objp->ref;
                print $projectstatic->getNomUrl(1);
                if (!in_array('projectlabel', $hiddenfields)) {
                    print ' - ' . dol_trunc($objp->title, 24);
                }
                print '</td>';
                print '<td>';
                if ($objp->fk_soc > 0) {
                    $thirdpartystatic->id = $objp->fk_soc;
                    $thirdpartystatic->ref = $objp->socname;
                    $thirdpartystatic->name = $objp->socname;
                    print $thirdpartystatic->getNomUrl(1);
                }
                print '</td>';
                if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
                    print '<td align="right">';
                    if ($objp->opp_amount) {
                        print price($objp->opp_amount, 0, '', 1, -1, -1, $conf->currency);
                    }
                    print '</td>';
                    print '<td align="right">';
                    $code = dol_getIdFromCode($db, $objp->opp_status, 'c_lead_status', 'rowid', 'code');
                    if ($code) {
                        print $langs->trans("OppStatus" . $code);
                    }
                    print '</td>';
                }
                $projectstatic->statut = $objp->status;
                if (empty($conf->global->PROJECT_HIDE_TASKS)) {
                    print '<td align="right">' . $objp->nb . '</td>';
                    $plannedworkload = $objp->planned_workload;
                    $total_plannedworkload += $plannedworkload;
                    if (!in_array('plannedworkload', $hiddenfields)) {
                        print '<td align="right">' . ($plannedworkload ? convertSecondToTime($plannedworkload) : '') . '</td>';
                    }
                    if (!in_array('declaredprogress', $hiddenfields)) {
                        $declaredprogressworkload = $objp->declared_progess_workload;
                        $total_declaredprogressworkload += $declaredprogressworkload;
                        print '<td align="right">';
                        //print $objp->planned_workload.'-'.$objp->declared_progess_workload."<br>";
                        print $plannedworkload ? round(100 * $declaredprogressworkload / $plannedworkload, 0) . '%' : '';
                        print '</td>';
                    }
                }
                print '<td align="right">' . $projectstatic->getLibStatut(3) . '</td>';
                print "</tr>\n";
                $total_task = $total_task + $objp->nb;
                $total_opp_amount = $total_opp_amount + $objp->opp_amount;
                $ponderated_opp_amount = $ponderated_opp_amount + price2num($listofoppstatus[$objp->opp_status] * $objp->opp_amount / 100);
            }
            $i++;
        }
        print '<tr class="liste_total">';
        print '<td colspan="2">' . $langs->trans("Total") . "</td>";
        if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
            print '<td class="liste_total" align="right">' . price($total_opp_amount, 0, '', 1, -1, -1, $conf->currency) . '</td>';
            print '<td class="liste_total" align="right">' . $form->textwithpicto(price($ponderated_opp_amount, 0, '', 1, -1, -1, $conf->currency), $langs->trans("OpportunityPonderatedAmountDesc"), 1) . '</td>';
        }
        if (empty($conf->global->PROJECT_HIDE_TASKS)) {
            print '<td class="liste_total" align="right">' . $total_task . '</td>';
            if (!in_array('plannedworkload', $hiddenfields)) {
                print '<td class="liste_total" align="right">' . ($total_plannedworkload ? convertSecondToTime($total_plannedworkload) : '') . '</td>';
            }
            if (!in_array('declaredprogress', $hiddenfields)) {
                print '<td class="liste_total" align="right">' . ($total_plannedworkload ? round(100 * $total_declaredprogressworkload / $total_plannedworkload, 0) . '%' : '') . '</td>';
            }
        }
        print '<td class="liste_total"></td>';
        print '</tr>';
        $db->free($resql);
    } else {
        dol_print_error($db);
    }
    print "</table>";
    if (!empty($conf->global->PROJECT_LIMIT_YEAR_RANGE)) {
        //Add the year filter input
        print '<form method="get" action="' . $_SERVER["PHP_SELF"] . '">';
        print '<table width="100%">';
        print '<tr>';
        print '<td>' . $langs->trans("Year") . '</td>';
        print '<td style="text-align:right"><input type="text" size="4" class="flat" name="project_year_filter" value="' . $project_year_filter . '"/>';
        print "</tr>\n";
        print '</table></form>';
    }
}
/**
 *	Override de la fonction classique de la class FormProject
 *  Show a combo list with projects qualified for a third party
 *
 *	@param	int		$socid      	Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
 *	@param  int		$selected   	Id project preselected
 *	@param  string	$htmlname   	Nom de la zone html
 *	@param	int		$maxlength		Maximum length of label
 *	@param	int		$option_only	Option only
 *	@param	int		$show_empty		Add an empty line
 *	@return string         		    select or options if OK, void if KO
 */
function custom_select_projects($socid = -1, $selected = '', $htmlname = 'projectid', $type_aff = 'view', $maxlength = 25, $option_only = 0, $show_empty = 1)
{
    global $user, $conf, $langs, $db;
    require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    $out = '';
    if ($type_aff == 'view') {
        if ($selected > 0) {
            $project = new Project($db);
            $project->fetch($selected);
            //return dol_trunc($project->ref,18).' - '.dol_trunc($project->title,$maxlength);
            return $project->getNomUrl(1) . ' - ' . dol_trunc($project->title, $maxlength);
        } else {
            return $out;
        }
    }
    $hideunselectables = false;
    if (!empty($conf->global->PROJECT_HIDE_UNSELECTABLES)) {
        $hideunselectables = true;
    }
    $projectsListId = false;
    if (empty($user->rights->projet->all->lire)) {
        $projectstatic = new Project($db);
        $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1);
    }
    // Search all projects
    $sql = 'SELECT p.rowid, p.ref, p.title, p.fk_soc, p.fk_statut, p.public';
    $sql .= ' FROM ' . MAIN_DB_PREFIX . 'projet as p';
    $sql .= " WHERE p.entity IN (" . getEntity('project', 1) . ")";
    if ($projectsListId !== false) {
        $sql .= " AND p.rowid IN (" . $projectsListId . ")";
    }
    if ($socid == 0) {
        $sql .= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)";
    }
    if ($socid > 0) {
        $sql .= " AND (p.fk_soc=" . $socid . " OR p.fk_soc IS NULL)";
    }
    $sql .= " ORDER BY p.ref ASC";
    $resql = $db->query($sql);
    if ($resql) {
        if (empty($option_only)) {
            $out .= '<select class="flat" name="' . $htmlname . '">';
        }
        if (!empty($show_empty)) {
            $out .= '<option value="0">&nbsp;</option>';
        }
        $num = $db->num_rows($resql);
        $i = 0;
        if ($num) {
            while ($i < $num) {
                $obj = $db->fetch_object($resql);
                // If we ask to filter on a company and user has no permission to see all companies and project is linked to another company, we hide project.
                if ($socid > 0 && (empty($obj->fk_soc) || $obj->fk_soc == $socid) && !$user->rights->societe->lire) {
                    // Do nothing
                } else {
                    $labeltoshow = dol_trunc($obj->ref, 18);
                    //if ($obj->public) $labeltoshow.=' ('.$langs->trans("SharedProject").')';
                    //else $labeltoshow.=' ('.$langs->trans("Private").')';
                    if (!empty($selected) && $selected == $obj->rowid && $obj->fk_statut > 0) {
                        $out .= '<option value="' . $obj->rowid . '" selected="selected">' . $labeltoshow . ' - ' . dol_trunc($obj->title, $maxlength) . '</option>';
                    } else {
                        $disabled = 0;
                        $labeltoshow .= ' ' . dol_trunc($obj->title, $maxlength);
                        if (!$obj->fk_statut > 0) {
                            $disabled = 1;
                            $labeltoshow .= ' - ' . $langs->trans("Draft");
                        }
                        if ($socid > 0 && (!empty($obj->fk_soc) && $obj->fk_soc != $socid)) {
                            $disabled = 1;
                            $labeltoshow .= ' - ' . $langs->trans("LinkedToAnotherCompany");
                        }
                        if ($hideunselectables && $disabled) {
                            $resultat = '';
                        } else {
                            $resultat = '<option value="' . $obj->rowid . '"';
                            if ($disabled) {
                                $resultat .= ' disabled="disabled"';
                            }
                            //if ($obj->public) $labeltoshow.=' ('.$langs->trans("Public").')';
                            //else $labeltoshow.=' ('.$langs->trans("Private").')';
                            $resultat .= '>';
                            $resultat .= $labeltoshow;
                            $resultat .= '</option>';
                        }
                        $out .= $resultat;
                    }
                }
                $i++;
            }
        }
        if (empty($option_only)) {
            $out .= '</select>';
        }
        if ($conf->cliacropose->enabled) {
            // TODO c'est naze, à refaire en utilisant la vraie autocompletion dispo depuis dolibarr 3.8 pour utiliser l'auto complete projets de doli si active (j'avais rajouté un script ajax/projects.php pour acropose)
            // Autocomplétion
            if (isset($selected)) {
                $p = new Project($db);
                $p->fetch($selected);
                $selected_value = $p->ref;
            }
            $out = ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT . '/projet/ajax/projects.php', $urloption, 1);
            $out .= '<input type="text" size="20" name="search_' . $htmlname . '" id="search_' . $htmlname . '" value="' . $selected_value . '"' . $placeholder . ' />';
        }
        $db->free($resql);
        return $out;
    } else {
        dol_print_error($db);
        return '';
    }
}
Example #9
0
 /**
  *    Show a form to select a project
  *
  *    @param	int		$page        		Page
  *    @param	int		$socid       		Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
  *    @param    int		$selected    		Id pre-selected project
  *    @param    string	$htmlname    		Name of select field
  *    @param	int		$discard_closed		Discard closed projects (0=Keep,1=hide completely except $selected,2=Disable)
  *    @param	int		$maxlength			Max length
  *    @param	int		$forcefocus			Force focus on field (works with javascript only)
  *    @return	void
  */
 function form_project($page, $socid, $selected = '', $htmlname = 'projectid', $discard_closed = 0, $maxlength = 20, $forcefocus = 0)
 {
     global $langs;
     require_once DOL_DOCUMENT_ROOT . '/core/lib/project.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
     $formproject = new FormProjets($this->db);
     $langs->load("project");
     if ($htmlname != "none") {
         print "\n";
         print '<form method="post" action="' . $page . '">';
         print '<input type="hidden" name="action" value="classin">';
         print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
         print '<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
         print '<tr><td>';
         $formproject->select_projects($socid, $selected, $htmlname, $maxlength, 0, 1, $discard_closed, $forcefocus);
         print '</td>';
         print '<td align="left"><input type="submit" class="button" value="' . $langs->trans("Modify") . '"></td>';
         print '</tr></table></form>';
     } else {
         if ($selected) {
             $projet = new Project($this->db);
             $projet->fetch($selected);
             //print '<a href="'.DOL_URL_ROOT.'/projet/card.php?id='.$selected.'">'.$projet->title.'</a>';
             print $projet->getNomUrl(0, '', 1);
         } else {
             print "&nbsp;";
         }
     }
 }
Example #10
0
 /**
  *    Show a form to select a project
  *    @param      page        Page
  *    @param      socid       Id societe
  *    @param      selected    Id projet pre-selectionne
  *    @param      htmlname    Nom du formulaire select
  */
 function form_project($page, $socid, $selected = '', $htmlname = 'projectid')
 {
     global $langs;
     require_once DOL_DOCUMENT_ROOT . "/lib/project.lib.php";
     $langs->load("project");
     if ($htmlname != "none") {
         print '<form method="post" action="' . $page . '">';
         print '<input type="hidden" name="action" value="classin">';
         print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
         print '<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
         print '<tr><td>';
         //print "$socid,$selected,$htmlname";
         select_projects($socid, $selected, $htmlname);
         print '</td>';
         print '<td align="left"><input type="submit" class="button" value="' . $langs->trans("Modify") . '"></td>';
         print '</tr></table></form>';
     } else {
         if ($selected) {
             $projet = new Project($this->db);
             $projet->fetch($selected);
             //print '<a href="'.DOL_URL_ROOT.'/projet/fiche.php?id='.$selected.'">'.$projet->title.'</a>';
             print $projet->getNomUrl(0);
         } else {
             print "&nbsp;";
         }
     }
 }
function _events($date_start, $date_end)
{
    global $db, $conf, $langs, $user, $hookmanager;
    $hookmanager->initHooks(array('agenda'));
    $pid = GETPOST("projectid", "int", 3);
    $status = GETPOST("status");
    $type = GETPOST("type");
    $state_id = GETPOST('state_id');
    $maxprint = GETPOST("maxprint") ? GETPOST("maxprint") : $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW;
    //First try with GETPOST(array) (I don't know when it can be an array but why not)
    $actioncode = GETPOST("actioncode", "array", 3) ? GETPOST("actioncode", "array", 3) : (GETPOST("actioncode") == '0' ? '0' : '');
    //If empty then try GETPOST(alpha) (this one works with comm/action/index.php
    if (empty($actioncode)) {
        $actioncode = GETPOST("actioncode", "alpha", 3) ? GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : '');
        if (!empty($actioncode)) {
            $actioncode = array($actioncode);
        }
    }
    if (empty($actioncode)) {
        $actioncode = array();
    }
    $filter = GETPOST("filter", '', 3);
    $filtert = GETPOST("usertodo", "int", 3) ? GETPOST("usertodo", "int", 3) : GETPOST("filtert", "int", 3);
    $usergroup = GETPOST("usergroup", "int", 3);
    $showbirthday = empty($conf->use_javascript_ajax) ? GETPOST("showbirthday", "int") : 1;
    if (empty($filtert) && empty($conf->global->AGENDA_ALL_CALENDARS)) {
        $filtert = $user->id;
    }
    $socid = GETPOST("socid", "int");
    $t_start = strtotime($date_start);
    $t_end = strtotime($date_end);
    $now = dol_now();
    $sql = 'SELECT ';
    if ($usergroup > 0) {
        $sql .= " DISTINCT";
    }
    $sql .= ' a.id, a.label,';
    $sql .= ' a.datep,';
    $sql .= ' a.datep2,';
    $sql .= ' a.percent,';
    $sql .= ' a.fk_user_author,a.fk_user_action,';
    $sql .= ' a.transparency, a.priority, a.fulldayevent, a.location,';
    $sql .= ' a.fk_soc, a.fk_contact,u.color,a.note,';
    $sql .= ' ca.code as type_code, ca.libelle as type_label';
    $sql .= ' FROM ' . MAIN_DB_PREFIX . "actioncomm as a";
    $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'c_actioncomm as ca ON (a.fk_action = ca.id)';
    $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'user u ON (a.fk_user_action=u.rowid )';
    if (!empty($conf->global->FULLCALENDAR_FILTER_ON_STATE) && !empty($state_id)) {
        $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'societe s ON (s.rowid = a.fk_soc)';
        $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'socpeople sp ON (sp.rowid = a.fk_contact)';
    }
    if (!$user->rights->societe->client->voir && !$socid) {
        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe_commerciaux as sc ON a.fk_soc = sc.fk_soc";
    }
    // We must filter on assignement table
    if ($filtert > 0 || $usergroup > 0) {
        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "actioncomm_resources as ar ON (ar.fk_actioncomm = a.id)";
    }
    if ($usergroup > 0) {
        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "usergroup_user as ugu ON ugu.fk_user = ar.fk_element";
    }
    $sql .= ' WHERE 1=1';
    $sql .= ' AND a.entity IN (' . getEntity('agenda', 1) . ')';
    if ($actioncode) {
        $sql .= " AND ca.code IN ('" . implode("','", $actioncode) . "')";
    }
    if ($conf->global->DONT_SHOW_AUTO_EVENT && strpos(implode(',', $actioncode), 'AC_OTH_AUTO') == false) {
        $sql .= " AND ca.code != 'AC_OTH_AUTO'";
    }
    if ($pid) {
        $sql .= " AND a.fk_project=" . $db->escape($pid);
    }
    if (!$user->rights->societe->client->voir && !$socid) {
        $sql .= " AND (a.fk_soc IS NULL OR sc.fk_user = "******")";
    }
    if ($socid > 0) {
        $sql .= ' AND a.fk_soc = ' . $socid;
    }
    if (!empty($conf->global->FULLCALENDAR_FILTER_ON_STATE) && !empty($state_id)) {
        $sql .= ' AND (s.fk_departement = ' . $state_id . ' OR sp.fk_departement = ' . $state_id . ')';
    }
    // We must filter on assignement table
    if ($filtert > 0 || $usergroup > 0) {
        $sql .= " AND ar.element_type='user'";
    }
    $sql .= " AND\n\t\t\t(\n\t\t\t\t(a.datep2>='" . $db->idate($t_start - 60 * 60 * 24 * 7) . "' AND datep<='" . $db->idate($t_end + 60 * 60 * 24 * 10) . "')\n\t\t\t\tOR\n\t\t\t  \t(a.datep BETWEEN '" . $db->idate($t_start - 60 * 60 * 24 * 7) . "' AND '" . $db->idate($t_end + 60 * 60 * 24 * 10) . "')\n\t\t\t) ";
    if ($type) {
        $sql .= " AND ca.id = " . $type;
    }
    if ($status == '0') {
        $sql .= " AND a.percent = 0";
    }
    if ($status == '-1') {
        $sql .= " AND a.percent = -1";
    }
    // Not applicable
    if ($status == '50') {
        $sql .= " AND (a.percent > 0 AND a.percent < 100)";
    }
    // Running already started
    if ($status == 'done' || $status == '100') {
        $sql .= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep2 <= '" . $db->idate($now) . "'))";
    }
    if ($status == 'todo') {
        $sql .= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep2 > '" . $db->idate($now) . "'))";
    }
    // We must filter on assignement table
    if ($filtert > 0 || $usergroup > 0) {
        $sql .= " AND (";
        if ($filtert > 0) {
            $sql .= "ar.fk_element = " . $filtert;
        }
        if ($usergroup > 0) {
            $sql .= ($filtert > 0 ? " OR " : "") . " ugu.fk_usergroup = " . $usergroup;
        }
        $sql .= ")";
    }
    // Sort on date
    $sql .= ' ORDER BY datep';
    $TEvent = array();
    if (isset($_REQUEST['DEBUG'])) {
        print $sql;
    }
    $res = $db->query($sql);
    //var_dump($db);
    $TSociete = array();
    $TContact = array();
    $TUser = array();
    $TProject = array();
    $TEventObject = array();
    while ($obj = $db->fetch_object($res)) {
        $event = new ActionComm($db);
        $event->fetch($obj->id);
        $event->fetch_userassigned();
        $event->color = $obj->color;
        $TEventObject[] = $event;
    }
    foreach ($TEventObject as &$event) {
        if ($event->socid > 0 && !isset($TSociete[$event->socid])) {
            $societe = new Societe($db);
            $societe->fetch($event->socid);
            $TSociete[$event->socid] = $societe->getNomUrl(1);
        }
        if ($event->contactid > 0 && !isset($TContact[$event->contactid])) {
            $contact = new Contact($db);
            $contact->fetch($event->contactid);
            $TContact[$event->contactid] = $contact->getNomUrl(1);
        }
        $TUserassigned = array();
        $TColor = array();
        if ($event->color && empty($conf->global->FULLCALENDAR_USE_ASSIGNED_COLOR)) {
            $TColor[] = '#' . $event->color;
        }
        if (!empty($conf->global->FULLCALENDAR_SHOW_AFFECTED_USER)) {
            $userownerid = (int) $event->userownerid;
            if ($userownerid > 0 && !isset($TUser[$userownerid])) {
                $u = new User($db);
                $u->fetch($userownerid);
                $TUser[$userownerid] = $u;
            }
            $TUserassigned[$userownerid] = $TUser[$userownerid]->getNomUrl(1);
        }
        if (!empty($conf->global->FULLCALENDAR_SHOW_PROJECT) && $event->fk_project > 0 && !isset($TProject[$event->fk_project])) {
            $p = new Project($db);
            $p->fetch($event->fk_project);
            $TProject[$event->fk_project] = $p->getNomUrl(1);
        }
        if (!empty($conf->global->FULLCALENDAR_SHOW_AFFECTED_USER) && !empty($event->userassigned)) {
            foreach ($event->userassigned as &$ua) {
                $userid = (int) $ua['id'];
                if (!isset($TUser[$userid])) {
                    $u = new User($db);
                    $u->fetch($userid);
                    $TUser[$userid] = $u;
                }
                if (!isset($TUserassigned[$userid])) {
                    $TUserassigned[] = $TUser[$userid]->getNomUrl(1);
                }
                if ($TUser[$userid]->color && !in_array('#' . $TUser[$userid]->color, $TColor)) {
                    $TColor[] = '#' . $TUser[$userid]->color;
                }
            }
        }
        $editable = false;
        if ($user->id == $event->userownerid || $user->rights->agenda->allactions->create) {
            $editable = true;
        }
        //background: linear-gradient(to bottom, #1e5799 0%,#2989d8 25%,#207cca 67%,#7db9e8 100%);
        //$colors = implode(',',$TColor);
        $colors = '';
        $color = '';
        if (!empty($TColor)) {
            $color = $TColor[0];
            if (!empty($conf->global->FULLCALENDAR_SHOW_ALL_ASSIGNED_COLOR) && count($TColor) > 1) {
                $colors = 'linear-gradient(to right ';
                foreach ($TColor as $c) {
                    $colors .= ',' . $c;
                }
                $colors .= ')';
            }
        }
        $TEvent[] = array('id' => $event->id, 'title' => $event->label, 'allDay' => (bool) $event->fulldayevent, 'start' => empty($event->datep) ? '' : date('Y-m-d H:i:s', (int) $event->datep), 'end' => empty($event->datef) ? '' : date('Y-m-d H:i:s', (int) $event->datef), 'url' => dol_buildpath('/comm/action/card.php?id=' . $event->id, 1), 'editable' => $editable, 'color' => $color, 'isDarkColor' => isDarkColor($color), 'colors' => $colors, 'note' => $event->note, 'statut' => $event->getLibStatut(3), 'fk_soc' => $event->socid, 'fk_contact' => $event->contactid, 'fk_user' => $event->userownerid, 'fk_project' => $event->fk_project, 'societe' => !empty($TSociete[$event->socid]) ? $TSociete[$event->socid] : '', 'contact' => !empty($TContact[$event->contactid]) ? $TContact[$event->contactid] : '', 'user' => !empty($TUserassigned) ? implode(', ', $TUserassigned) : '', 'project' => !empty($TProject[$event->fk_project]) ? $TProject[$event->fk_project] : '', 'more' => '');
    }
    $use_workstation_color = null;
    if (GETPOST('use_workstation_color')) {
        $use_workstation_color = 1;
    }
    //TODO getCalendarEvents compatbile standard
    // Complete $eventarray with events coming from external module
    $parameters = array('use_workstation_color' => $use_workstation_color, 'sql' => $sql);
    $action = 'getEvents';
    $reshook = $hookmanager->executeHooks('updateFullcalendarEvents', $parameters, $TEvent, $action);
    if (!empty($hookmanager->resArray['eventarray'])) {
        $TEvent = array_merge($TEvent, $hookmanager->resArray['eventarray']);
    }
    return $TEvent;
}
Example #12
0
 /**
  * Write content of pages
  *
  * @param   PDF			$pdf			Object pdf
  * @param	Translate   $outputlangs	Object langs
  * @return  int							1
  */
 function _pages(&$pdf, $outputlangs)
 {
     global $conf;
     $height = 3;
     // height for text separation
     $pagenb = 1;
     $y = $this->_pagehead($pdf, $outputlangs, $pagenb);
     $y++;
     $pdf->SetFont('', '', 8);
     $sql = "SELECT s.nom as thirdparty, s.rowid as socid, s.client,";
     $sql .= " a.id, a.datep as dp, a.datep2 as dp2,";
     $sql .= " a.fk_contact, a.note, a.percent as percent, a.label, a.fk_project,";
     $sql .= " c.code, c.libelle,";
     $sql .= " u.login";
     $sql .= " FROM " . MAIN_DB_PREFIX . "c_actioncomm as c, " . MAIN_DB_PREFIX . "user as u, " . MAIN_DB_PREFIX . "actioncomm as a";
     $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe as s ON a.fk_soc = s.rowid";
     $sql .= " WHERE c.id=a.fk_action AND a.fk_user_author = u.rowid";
     $sql .= " AND a.datep BETWEEN '" . $this->db->idate(dol_get_first_day($this->year, $this->month, false)) . "'";
     $sql .= " AND '" . $this->db->idate(dol_get_last_day($this->year, $this->month, false)) . "'";
     $sql .= " AND a.entity = " . $conf->entity;
     $sql .= " ORDER BY a.datep DESC";
     $eventstatic = new ActionComm($this->db);
     $projectstatic = new Project($this->db);
     dol_syslog(get_class($this) . "::_page", LOG_DEBUG);
     $resql = $this->db->query($sql);
     if ($resql) {
         $num = $this->db->num_rows($resql);
         $i = 0;
         $y0 = $y1 = $y2 = $y3 = 0;
         while ($i < $num) {
             $obj = $this->db->fetch_object($resql);
             $eventstatic->id = $obj->id;
             $eventstatic->percentage = $obj->percentage;
             $eventstatic->fulldayevent = $obj->fulldayevent;
             $eventstatic->punctual = $obj->punctual;
             $y = max($y, $pdf->GetY(), $y0, $y1, $y2, $y3);
             // Calculate height of text
             $text = '';
             if (!preg_match('/^' . preg_quote($obj->label) . '/', $obj->note)) {
                 $text = $obj->label . "\n";
             }
             $text .= $obj->note;
             $text = dol_trunc(dol_htmlentitiesbr_decode($text), 150);
             // Add status to text
             $text .= "\n";
             $status = dol_htmlentitiesbr_decode($eventstatic->getLibStatut(1, 1));
             $text .= $status;
             if ($obj->fk_project > 0) {
                 $projectstatic->fetch($obj->fk_project);
                 $text .= ($status ? ' - ' : '') . $outputlangs->transnoentitiesnoconv("Project") . ": " . dol_htmlentitiesbr_decode($projectstatic->getNomUrl(0, 'nolink'));
             }
             //print 'd'.$text; exit;
             $nboflines = dol_nboflines($text);
             $heightlinemax = max(2 * $height, $nboflines * $height);
             // Check if there is enough space to print record
             if (1 + $y + $heightlinemax >= $this->page_hauteur - $this->marge_haute) {
                 // We need to break page
                 $pagenb++;
                 $y = $this->_pagehead($pdf, $outputlangs, $pagenb);
                 $y++;
                 $pdf->SetFont('', '', 8);
             }
             $y++;
             // Date
             $pdf->SetXY($this->marge_gauche, $y);
             $pdf->MultiCell(22, $height, dol_print_date($this->db->jdate($obj->dp), "day") . "\n" . dol_print_date($this->db->jdate($obj->dp), "hour"), 0, 'L', 0);
             $y0 = $pdf->GetY();
             // Third party
             $pdf->SetXY(26, $y);
             $pdf->MultiCell(32, $height, dol_trunc($outputlangs->convToOutputCharset($obj->thirdparty), 32), 0, 'L', 0);
             $y1 = $pdf->GetY();
             // Action code
             $code = $obj->code;
             if (empty($conf->global->AGENDA_USE_EVENT_TYPE)) {
                 if ($code == 'AC_OTH') {
                     $code = 'AC_MANUAL';
                 }
                 if ($code == 'AC_OTH_AUTO') {
                     $code = 'AC_AUTO';
                 }
             }
             $pdf->SetXY(60, $y);
             $pdf->MultiCell(32, $height, dol_trunc($outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv("Action" . $code)), 32), 0, 'L', 0);
             $y2 = $pdf->GetY();
             // Description of event
             $pdf->SetXY(106, $y);
             $pdf->MultiCell(94, $height, $outputlangs->convToOutputCharset($text), 0, 'L', 0);
             $y3 = $pdf->GetY();
             $i++;
         }
     }
     return 1;
 }
Example #13
0
/**
 * Return HTML table with list of projects and number of opened tasks
 *
 * @param	DoliDB	$db					Database handler
 * @param	Form	$form				Object form
 * @param   int		$socid				Id thirdparty
 * @param   int		$projectsListId     Id of project i have permission on
 * @param   int		$mytasks            Limited to task i am contact to
 * @param	int		$statut				-1=No filter on statut, 0 or 1 = Filter on status
 * @param	array	$listofoppstatus	List of opportunity status
 * @return	void
 */
function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks = 0, $statut = -1, $listofoppstatus = array())
{
    global $langs, $conf, $user, $bc;
    require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    $projectstatic = new Project($db);
    $sortfield = '';
    $sortorder = '';
    $project_year_filter = 0;
    $title = $langs->trans("Projects");
    if (strcmp($statut, '') && $statut >= 0) {
        $title = $langs->trans("Projects") . ' ' . $langs->trans($projectstatic->statuts_long[$statut]);
    }
    print '<table class="noborder" width="100%">';
    print '<tr class="liste_titre">';
    print_liste_field_titre($title, "index.php", "", "", "", "", $sortfield, $sortorder);
    if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
        print_liste_field_titre($langs->trans("OpportunityAmount"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
        print_liste_field_titre($langs->trans("OpportunityStatus"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
    }
    if (empty($conf->global->PROJECT_HIDE_TASKS)) {
        print_liste_field_titre($langs->trans("Tasks"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
    }
    print_liste_field_titre($langs->trans("Status"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
    print "</tr>\n";
    $sql = "SELECT p.rowid as projectid, p.ref, p.title, p.fk_user_creat, p.public, p.fk_statut as status, p.fk_opp_status as opp_status, p.opp_amount, COUNT(DISTINCT t.rowid) as nb";
    // We use DISTINCT here because line can be doubled if task has 2 links to same user
    $sql .= " FROM " . MAIN_DB_PREFIX . "projet as p";
    if ($mytasks) {
        $sql .= ", " . MAIN_DB_PREFIX . "projet_task as t";
        $sql .= ", " . MAIN_DB_PREFIX . "element_contact as ec";
        $sql .= ", " . MAIN_DB_PREFIX . "c_type_contact as ctc";
    } else {
        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "projet_task as t ON p.rowid = t.fk_projet";
    }
    $sql .= " WHERE p.entity = " . $conf->entity;
    $sql .= " AND p.rowid IN (" . $projectsListId . ")";
    if ($socid) {
        $sql .= "  AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = " . $socid . ")";
    }
    if ($mytasks) {
        $sql .= " AND p.rowid = t.fk_projet";
        $sql .= " AND ec.element_id = t.rowid";
        $sql .= " AND ctc.rowid = ec.fk_c_type_contact";
        $sql .= " AND ctc.element = 'project_task'";
        $sql .= " AND ec.fk_socpeople = " . $user->id;
    }
    if ($statut >= 0) {
        $sql .= " AND p.fk_statut = " . $statut;
    }
    if (!empty($conf->global->PROJECT_LIMIT_YEAR_RANGE)) {
        $project_year_filter = GETPOST("project_year_filter");
        //Check if empty or invalid year. Wildcard ignores the sql check
        if ($project_year_filter != "*") {
            if (empty($project_year_filter) || !ctype_digit($project_year_filter)) {
                $project_year_filter = date("Y");
            }
            $sql .= " AND (p.dateo IS NULL OR p.dateo <= " . $db->idate(dol_get_last_day($project_year_filter, 12, false)) . ")";
            $sql .= " AND (p.datee IS NULL OR p.datee >= " . $db->idate(dol_get_first_day($project_year_filter, 1, false)) . ")";
        }
    }
    $sql .= " GROUP BY p.rowid, p.ref, p.title, p.fk_user_creat, p.public, p.fk_statut, p.fk_opp_status, p.opp_amount";
    $sql .= " ORDER BY p.title, p.ref";
    $var = true;
    $resql = $db->query($sql);
    if ($resql) {
        $total_task = 0;
        $total_opp_amount = 0;
        $ponderated_opp_amount = 0;
        $num = $db->num_rows($resql);
        $i = 0;
        while ($i < $num) {
            $objp = $db->fetch_object($resql);
            $projectstatic->id = $objp->projectid;
            $projectstatic->user_author_id = $objp->fk_user_creat;
            $projectstatic->public = $objp->public;
            // Check is user has read permission on project
            $userAccess = $projectstatic->restrictedProjectArea($user);
            if ($userAccess >= 0) {
                $var = !$var;
                print "<tr " . $bc[$var] . ">";
                print '<td class="nowrap">';
                $projectstatic->ref = $objp->ref;
                print $projectstatic->getNomUrl(1);
                print ' - ' . dol_trunc($objp->title, 24) . '</td>';
                if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
                    print '<td align="right">';
                    if ($objp->opp_amount) {
                        print price($objp->opp_amount, 0, '', 1, -1, -1, $conf->currency);
                    }
                    print '</td>';
                    print '<td align="right">';
                    $code = dol_getIdFromCode($db, $objp->opp_status, 'c_lead_status', 'rowid', 'code');
                    if ($code) {
                        print $langs->trans("OppStatus" . $code);
                    }
                    print '</td>';
                }
                $projectstatic->statut = $objp->status;
                if (empty($conf->global->PROJECT_HIDE_TASKS)) {
                    print '<td align="right">' . $objp->nb . '</td>';
                }
                print '<td align="right">' . $projectstatic->getLibStatut(3) . '</td>';
                print "</tr>\n";
                $total_task = $total_task + $objp->nb;
                $total_opp_amount = $total_opp_amount + $objp->opp_amount;
                $ponderated_opp_amount = $ponderated_opp_amount + price2num($listofoppstatus[$objp->opp_status] * $objp->opp_amount / 100);
            }
            $i++;
        }
        print '<tr><td>' . $langs->trans("Total") . "</td>";
        if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
            print '<td align="right">' . price($total_opp_amount, 0, '', 1, -1, -1, $conf->currency) . '</td>';
            print '<td align="right">' . $form->textwithpicto(price($ponderated_opp_amount, 0, '', 1, -1, -1, $conf->currency), $langs->trans("OpportunityPonderatedAmount"), 1) . '</td>';
        }
        if (empty($conf->global->PROJECT_HIDE_TASKS)) {
            print '<td align="right">' . $total_task . '</td>';
        }
        $db->free($resql);
    } else {
        dol_print_error($db);
    }
    print "</table>";
    if (!empty($conf->global->PROJECT_LIMIT_YEAR_RANGE)) {
        //Add the year filter input
        print '<form method="get" action="' . $_SERVER["PHP_SELF"] . '">';
        print '<table width="100%">';
        print '<tr>';
        print '<td>' . $langs->trans("Year") . '</td>';
        print '<td style="text-align:right"><input type="text" size="4" class="flat" name="project_year_filter" value="' . $project_year_filter . '"/>';
        print "</tr>\n";
        print '</table></form>';
    }
}
Example #14
0
 if (empty($conf->global->SUPPLIER_ORDER_HIDE_REF_SUPPLIER)) {
     print '<td>' . $obj->ref_supplier . '</td>' . "\n";
 }
 // Thirdparty
 print '<td>';
 $thirdpartytmp->id = $obj->socid;
 $thirdpartytmp->name = $obj->name;
 print $thirdpartytmp->getNomUrl(1, 'supplier');
 print '</td>' . "\n";
 // Project
 if (!empty($conf->global->PROJECT_SHOW_REF_INTO_LISTS)) {
     $projectstatic->id = $obj->project_id;
     $projectstatic->ref = $obj->project_ref;
     print '<td>';
     if ($obj->project_id > 0) {
         print $projectstatic->getNomUrl(1);
     }
     print '</td>';
 }
 // Author
 $userstatic->id = $obj->fk_user_author;
 $userstatic->lastname = $obj->lastname;
 $userstatic->firstname = $obj->firstname;
 $userstatic->login = $obj->login;
 $userstatic->photo = $obj->photo;
 print "<td>";
 if ($userstatic->id) {
     print $userstatic->getNomUrl(1);
 } else {
     print "&nbsp;";
 }
Example #15
0
$sql .= " AND date_format(task_date,'%y-%m-%d') = '" . strftime("%y-%m-%d", $now) . "'";
$sql .= " AND p.rowid in (" . $projectsListId . ")";
$sql .= " GROUP BY p.rowid, p.ref, p.title, p.public";
$resql = $db->query($sql);
if ($resql) {
    $var = true;
    $total = 0;
    while ($row = $db->fetch_object($resql)) {
        $var = !$var;
        print "<tr " . $bc[$var] . ">";
        print '<td>';
        $projectstatic->id = $row->rowid;
        $projectstatic->ref = $row->ref;
        $projectstatic->title = $row->title;
        $projectstatic->public = $row->public;
        print $projectstatic->getNomUrl(1, '', 1);
        print '</td>';
        print '<td align="right">' . convertSecondToTime($row->nb, 'allhourmin') . '</td>';
        print "</tr>\n";
        $total += $row->nb;
    }
    $db->free($resql);
} else {
    dol_print_error($db);
}
print '<tr class="liste_total">';
print '<td>' . $langs->trans('Total') . '</td>';
print '<td align="right">' . convertSecondToTime($total, 'allhourmin') . '</td>';
print "</tr>\n";
print "</table>";
// TODO Do not use date_add function to be compatible with all database
Example #16
0
 if ($obj->userid && $userstatic->id != $obj->userid) {
     $result = $userstatic->fetch($obj->userid);
     if (!$result) {
         $userstatic->id = 0;
     }
 }
 if ($userstatic->id) {
     $username = $userstatic->getNomUrl(0, 0);
 }
 print "<tr " . $bc[$var] . ">";
 //print '<td>'.$username.'</td>';
 print '<td>';
 $projectstatic->id = $obj->projectid;
 $projectstatic->ref = $obj->ref;
 $projectstatic->title = $obj->title;
 print $projectstatic->getNomUrl(1, '', 16);
 //print '<a href="'.DOL_URL_ROOT.'/projet/card.php?id='.$obj->projectid.'">'.$obj->title.'</a>';
 print '</td>';
 print '<td>';
 if (!empty($obj->taskid)) {
     $tasktmp->id = $obj->taskid;
     $tasktmp->ref = $obj->label;
     print $tasktmp->getNomUrl(1, 'withproject');
 } else {
     print $langs->trans("NoTasks");
 }
 print '</td>';
 print '<td>' . dol_print_date($db->jdate($obj->dateo), 'day') . '</td>';
 print '<td>' . dol_print_date($db->jdate($obj->datee), 'day') . '</td>';
 print '<td align="right"><a href="' . DOL_URL_ROOT . '/projet/tasks/time.php?id=' . $obj->taskid . '&withproject=1">';
 print convertSecondToTime($obj->planned_workload, 'all');
Example #17
0
/**
 * Return HTML table with list of projects and number of opened tasks
 *
 * @param	DoliDB	$db					Database handler
 * @param   int		$socid				Id thirdparty
 * @param   int		$projectsListId     Id of project i have permission on
 * @param   int		$mytasks            Limited to task i am contact to
 * @param	int		$statut				-1=No filter on statut, 0 or 1 = Filter on status
 * @return	void
 */
function print_projecttasks_array($db, $socid, $projectsListId, $mytasks = 0, $statut = -1)
{
    global $langs, $conf, $user, $bc;
    require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    $projectstatic = new Project($db);
    $sortfield = '';
    $sortorder = '';
    $project_year_filter = 0;
    $title = $langs->trans("Project");
    if ($statut == 0) {
        $title = $langs->trans("ProjectDraft");
    }
    if ($statut == 1) {
        $title = $langs->trans("Project") . ' (' . $langs->trans("Validated") . ')';
    }
    print '<table class="noborder" width="100%">';
    print '<tr class="liste_titre">';
    print_liste_field_titre($title, "index.php", "", "", "", "", $sortfield, $sortorder);
    print_liste_field_titre($langs->trans("Tasks"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
    print_liste_field_titre($langs->trans("Status"), "", "", "", "", 'align="right"', $sortfield, $sortorder);
    print "</tr>\n";
    $sql = "SELECT p.rowid as projectid, p.ref, p.title, p.fk_user_creat, p.public, p.fk_statut, COUNT(t.rowid) as nb";
    $sql .= " FROM " . MAIN_DB_PREFIX . "projet as p";
    if ($mytasks) {
        $sql .= ", " . MAIN_DB_PREFIX . "projet_task as t";
        $sql .= ", " . MAIN_DB_PREFIX . "element_contact as ec";
        $sql .= ", " . MAIN_DB_PREFIX . "c_type_contact as ctc";
    } else {
        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "projet_task as t ON p.rowid = t.fk_projet";
    }
    $sql .= " WHERE p.entity = " . $conf->entity;
    $sql .= " AND p.rowid IN (" . $projectsListId . ")";
    if ($socid) {
        $sql .= "  AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = " . $socid . ")";
    }
    if ($mytasks) {
        $sql .= " AND p.rowid = t.fk_projet";
        $sql .= " AND ec.element_id = t.rowid";
        $sql .= " AND ctc.rowid = ec.fk_c_type_contact";
        $sql .= " AND ctc.element = 'project_task'";
        $sql .= " AND ec.fk_socpeople = " . $user->id;
    }
    if ($statut >= 0) {
        $sql .= " AND p.fk_statut = " . $statut;
    }
    if (!empty($conf->global->PROJECT_LIMIT_YEAR_RANGE)) {
        $project_year_filter = GETPOST("project_year_filter");
        //Check if empty or invalid year. Wildcard ignores the sql check
        if ($project_year_filter != "*") {
            if (empty($project_year_filter) || !ctype_digit($project_year_filter)) {
                //
                $project_year_filter = date("Y");
            }
            $sql .= " AND (p.dateo IS NULL OR p.dateo <= " . $db->idate(dol_get_last_day($project_year_filter, 12, false)) . ")";
            $sql .= " AND (p.datee IS NULL OR p.datee >= " . $db->idate(dol_get_first_day($project_year_filter, 1, false)) . ")";
        }
    }
    $sql .= " GROUP BY p.rowid, p.ref, p.title, p.fk_user_creat, p.public, p.fk_statut";
    $sql .= " ORDER BY p.title, p.ref";
    $var = true;
    $resql = $db->query($sql);
    if ($resql) {
        $num = $db->num_rows($resql);
        $i = 0;
        while ($i < $num) {
            $objp = $db->fetch_object($resql);
            $projectstatic->id = $objp->projectid;
            $projectstatic->user_author_id = $objp->fk_user_creat;
            $projectstatic->public = $objp->public;
            // Check is user has read permission on project
            $userAccess = $projectstatic->restrictedProjectArea($user);
            if ($userAccess >= 0) {
                $var = !$var;
                print "<tr " . $bc[$var] . ">";
                print '<td class="nowrap">';
                $projectstatic->ref = $objp->ref;
                print $projectstatic->getNomUrl(1);
                print ' - ' . dol_trunc($objp->title, 24) . '</td>';
                print '<td align="right">' . $objp->nb . '</td>';
                $projectstatic->statut = $objp->fk_statut;
                print '<td align="right">' . $projectstatic->getLibStatut(3) . '</td>';
                print "</tr>\n";
            }
            $i++;
        }
        $db->free($resql);
    } else {
        dol_print_error($db);
    }
    print "</table>";
    if (!empty($conf->global->PROJECT_LIMIT_YEAR_RANGE)) {
        //Add the year filter input
        print '<table width="100%">';
        print '<tr>';
        print '<td>' . $langs->trans("Year") . '</td>';
        print '<form method="get" action="' . $_SERVER["PHP_SELF"] . '">';
        print '<td style="text-align:right"><input type="text" size="4" class="flat" name="project_year_filter" value="' . $project_year_filter . '"/>';
        print '</form>';
        print "</tr>\n";
        print '</table>';
    }
}