mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-02-20 13:46:52 +01:00
Handling of predefined services was buggy and resulted in an SQL error because of uninitialized duration. Generalized services duration handling and exposed it in the module's admin page.
1820 lines
61 KiB
PHP
1820 lines
61 KiB
PHP
<?php
|
|
/* Copyright (C) 2002-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
|
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
|
* Copyright (C) 2005-2015 Regis Houssin <regis.houssin@capnetworks.com>
|
|
* Copyright (C) 2011-2013 Juanjo Menent <jmenent@2byte.es>
|
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
|
* Copyright (C) 2014-2015 Ferran Marcet <fmarcet@2byte.es>
|
|
* Copyright (C) 2014-2015 Charlie Benke <charlies@patas-monkey.com>
|
|
* Copyright (C) 2015-2016 Abbes Bahfir <bafbes@gmail.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* \file htdocs/fichinter/card.php
|
|
* \brief Page of intervention
|
|
* \ingroup ficheinter
|
|
*/
|
|
|
|
require '../main.inc.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/modules/fichinter/modules_fichinter.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/fichinter.lib.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
|
|
|
if (! empty($conf->projet->enabled))
|
|
{
|
|
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
|
|
}
|
|
|
|
if ($conf->contrat->enabled)
|
|
{
|
|
require_once DOL_DOCUMENT_ROOT."/core/class/html.formcontract.class.php";
|
|
require_once DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php";
|
|
}
|
|
if (! empty($conf->global->FICHEINTER_ADDON) && is_readable(DOL_DOCUMENT_ROOT ."/core/modules/fichinter/mod_".$conf->global->FICHEINTER_ADDON.".php"))
|
|
{
|
|
require_once DOL_DOCUMENT_ROOT ."/core/modules/fichinter/mod_".$conf->global->FICHEINTER_ADDON.'.php';
|
|
}
|
|
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
|
|
|
$langs->load("bills");
|
|
$langs->load("companies");
|
|
$langs->load("interventions");
|
|
|
|
$id = GETPOST('id','int');
|
|
$ref = GETPOST('ref','alpha');
|
|
$socid = GETPOST('socid','int');
|
|
$contratid = GETPOST('contratid','int');
|
|
$action = GETPOST('action','alpha');
|
|
$confirm = GETPOST('confirm','alpha');
|
|
$mesg = GETPOST('msg','alpha');
|
|
$origin=GETPOST('origin','alpha');
|
|
$originid=(GETPOST('originid','int')?GETPOST('originid','int'):GETPOST('origin_id','int')); // For backward compatibility
|
|
$note_public = GETPOST('note_public');
|
|
$lineid = GETPOST('line_id','int');
|
|
|
|
//PDF
|
|
$hidedetails = (GETPOST('hidedetails','int') ? GETPOST('hidedetails','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
|
|
$hidedesc = (GETPOST('hidedesc','int') ? GETPOST('hidedesc','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 1 : 0));
|
|
$hideref = (GETPOST('hideref','int') ? GETPOST('hideref','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0));
|
|
|
|
// Security check
|
|
if ($user->societe_id) $socid=$user->societe_id;
|
|
$result = restrictedArea($user, 'ficheinter', $id, 'fichinter');
|
|
|
|
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
|
|
$hookmanager->initHooks(array('interventioncard','globalcard'));
|
|
|
|
$object = new Fichinter($db);
|
|
$extrafields = new ExtraFields($db);
|
|
$extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
|
|
|
|
// Load object
|
|
if ($id > 0 || ! empty($ref))
|
|
{
|
|
$ret=$object->fetch($id, $ref);
|
|
if ($ret > 0) $ret=$object->fetch_thirdparty();
|
|
if ($ret < 0) dol_print_error('',$object->error);
|
|
}
|
|
|
|
$permissionnote=$user->rights->ficheinter->creer; // Used by the include of actions_setnotes.inc.php
|
|
$permissiondellink=$user->rights->ficheinter->creer; // Used by the include of actions_dellink.inc.php
|
|
|
|
|
|
/*
|
|
* Actions
|
|
*/
|
|
|
|
$parameters=array('socid'=>$socid);
|
|
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
|
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
|
|
|
if (empty($reshook))
|
|
{
|
|
include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once
|
|
|
|
include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once
|
|
|
|
// Action clone object
|
|
if ($action == 'confirm_clone' && $confirm == 'yes' && $user->rights->ficheinter->creer)
|
|
{
|
|
if (1==0 && ! GETPOST('clone_content') && ! GETPOST('clone_receivers'))
|
|
{
|
|
setEventMessages($langs->trans("NoCloneOptionsSpecified"), null, 'errors');
|
|
}
|
|
else
|
|
{
|
|
if ($object->id > 0)
|
|
{
|
|
// Because createFromClone modifies the object, we must clone it so that we can restore it later
|
|
$orig = clone $object;
|
|
|
|
$result=$object->createFromClone($socid);
|
|
if ($result > 0)
|
|
{
|
|
header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
setEventMessages($object->error, $object->errors, 'errors');
|
|
$object = $orig;
|
|
$action='';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($action == 'confirm_validate' && $confirm == 'yes' && $user->rights->ficheinter->creer)
|
|
{
|
|
$result = $object->setValid($user);
|
|
|
|
if ($result >= 0)
|
|
{
|
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
|
{
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','alpha')) $newlang=GETPOST('lang_id','alpha');
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
|
|
if (! empty($newlang))
|
|
{
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
$result=fichinter_create($db, $object, (!GETPOST('model','alpha'))?$object->modelpdf:GETPOST('model','alpha'), $outputlangs);
|
|
}
|
|
|
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
$mesg='<div class="error">'.$object->error.'</div>';
|
|
}
|
|
}
|
|
|
|
else if ($action == 'confirm_modify' && $confirm == 'yes' && $user->rights->ficheinter->creer)
|
|
{
|
|
$result = $object->setDraft($user);
|
|
if ($result >= 0)
|
|
{
|
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
|
{
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','alpha')) $newlang=GETPOST('lang_id','alpha');
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
|
|
if (! empty($newlang))
|
|
{
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
$result=fichinter_create($db, $object, (!GETPOST('model','alpha'))?$object->modelpdf:GETPOST('model','alpha'), $outputlangs);
|
|
}
|
|
|
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
$mesg='<div class="error">'.$object->error.'</div>';
|
|
}
|
|
}
|
|
|
|
else if ($action == 'add' && $user->rights->ficheinter->creer)
|
|
{
|
|
$object->socid = $socid;
|
|
$object->duration = GETPOST('duration','int');
|
|
$object->fk_project = GETPOST('projectid','int');
|
|
$object->fk_contrat = GETPOST('contratid','int');
|
|
$object->author = $user->id;
|
|
$object->description = GETPOST('description');
|
|
$object->ref = $ref;
|
|
$object->modelpdf = GETPOST('model','alpha');
|
|
$object->note_private = GETPOST('note_private');
|
|
$object->note_public = GETPOST('note_public');
|
|
|
|
if ($object->socid > 0)
|
|
{
|
|
// If creation from another object of another module (Example: origin=propal, originid=1)
|
|
if (!empty($origin) && !empty($originid) )
|
|
{
|
|
// Parse element/subelement (ex: project_task)
|
|
$element = $subelement = $_POST['origin'];
|
|
if (preg_match('/^([^_]+)_([^_]+)/i',$_POST['origin'],$regs))
|
|
{
|
|
$element = $regs[1];
|
|
$subelement = $regs[2];
|
|
}
|
|
|
|
// For compatibility
|
|
if ($element == 'order') {
|
|
$element = $subelement = 'commande';
|
|
}
|
|
if ($element == 'propal') {
|
|
$element = 'comm/propal'; $subelement = 'propal';
|
|
}
|
|
if ($element == 'contract') {
|
|
$element = $subelement = 'contrat';
|
|
}
|
|
|
|
$object->origin = $origin;
|
|
$object->origin_id = $originid;
|
|
|
|
// Possibility to add external linked objects with hooks
|
|
$object->linked_objects[$object->origin] = $object->origin_id;
|
|
if (is_array($_POST['other_linked_objects']) && ! empty($_POST['other_linked_objects']))
|
|
{
|
|
$object->linked_objects = array_merge($object->linked_objects, $_POST['other_linked_objects']);
|
|
}
|
|
|
|
// Extrafields
|
|
$extrafields = new ExtraFields($db);
|
|
$extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
|
|
$array_options = $extrafields->getOptionalsFromPost($extralabels);
|
|
|
|
$object->array_options = $array_options;
|
|
|
|
$id = $object->create($user);
|
|
|
|
if ($id > 0)
|
|
{
|
|
dol_include_once('/'.$element.'/class/'.$subelement.'.class.php');
|
|
|
|
$classname = ucfirst($subelement);
|
|
$srcobject = new $classname($db);
|
|
|
|
dol_syslog("Try to find source object origin=".$object->origin." originid=".$object->origin_id." to add lines");
|
|
$result=$srcobject->fetch($object->origin_id);
|
|
if ($result > 0)
|
|
{
|
|
$srcobject->fetch_thirdparty();
|
|
$lines = $srcobject->lines;
|
|
if (empty($lines) && method_exists($srcobject,'fetch_lines'))
|
|
{
|
|
$srcobject->fetch_lines();
|
|
$lines = $srcobject->lines;
|
|
}
|
|
|
|
$fk_parent_line=0;
|
|
$num=count($lines);
|
|
|
|
for ($i=0;$i<$num;$i++)
|
|
{
|
|
$product_type=($lines[$i]->product_type?$lines[$i]->product_type:Product::TYPE_PRODUCT);
|
|
|
|
if ($product_type == Product::TYPE_SERVICE || !empty($conf->global->FICHINTER_PRINT_PRODUCTS)) { //only services except if config includes products
|
|
$duration = 3600; // Default to one hour
|
|
|
|
// Predefined products & services
|
|
if ($lines[$i]->fk_product > 0)
|
|
{
|
|
$prod = new Product($db);
|
|
$prod->id = $lines[$i]->fk_product;
|
|
|
|
// Define output language
|
|
if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
|
|
$prod->getMultiLangs();
|
|
// We show if duration is present on service (so we get it)
|
|
$prod->fetch($lines[$i]->fk_product);
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if (empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id');
|
|
if (empty($newlang)) $newlang=$srcobject->client->default_lang;
|
|
if (! empty($newlang)) {
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
$label = (! empty($prod->multilangs[$outputlangs->defaultlang]["libelle"])) ? $prod->multilangs[$outputlangs->defaultlang]["libelle"] : $lines[$i]->product_label;
|
|
} else {
|
|
$prod->fetch($lines[$i]->fk_product);
|
|
$label .= $lines[$i]->product_label;
|
|
}
|
|
|
|
if ($prod->duration_value && $conf->global->FICHINTER_USE_SERVICE_DURATION) {
|
|
switch ($prod->duration_unit) {
|
|
default:
|
|
case 'h':
|
|
$mult = 3600;
|
|
break;
|
|
case 'd':
|
|
$mult = 3600 * 24;
|
|
break;
|
|
case 'w':
|
|
$mult = 3600 * 24 * 7;
|
|
break;
|
|
case 'm':
|
|
$mult = (int) 3600 * 24 * (365 / 12); // Average month duration
|
|
break;
|
|
case 'y':
|
|
$mult = 3600 * 24 * 365;
|
|
break;
|
|
}
|
|
$duration = $prod->duration_value * $mult * $lines[$i]->qty;
|
|
}
|
|
|
|
$desc = $lines[$i]->product_ref;
|
|
$desc .= ' - ';
|
|
$desc .= $label;
|
|
$desc .= '<br>';
|
|
}
|
|
// Common part (predefined or free line)
|
|
$desc .= dol_htmlentitiesbr($lines[$i]->desc);
|
|
$desc .= '<br>';
|
|
$desc .= ' (' . $langs->trans('Quantity') . ': ' . $lines[$i]->qty . ')';
|
|
|
|
$timearray=dol_getdate(mktime());
|
|
$date_intervention=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']);
|
|
|
|
if ($product_type == Product::TYPE_PRODUCT) {
|
|
$duration = 0;
|
|
}
|
|
|
|
$predef = '';
|
|
|
|
// Extrafields
|
|
$extrafieldsline = new ExtraFields($db);
|
|
$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
|
|
$array_options = $extrafieldsline->getOptionalsFromPost($extralabelsline, $predef);
|
|
|
|
$result = $object->addline(
|
|
$user,
|
|
$id,
|
|
$desc,
|
|
$date_intervention,
|
|
$duration,
|
|
$array_options
|
|
);
|
|
|
|
if ($result < 0)
|
|
{
|
|
$error++;
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
$mesg=$srcobject->error;
|
|
$error++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$mesg=$object->error;
|
|
$error++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Fill array 'array_options' with data from add form
|
|
$ret = $extrafields->setOptionalsFromPost($extralabels, $object);
|
|
if ($ret < 0) {
|
|
$error ++;
|
|
$action = 'create';
|
|
}
|
|
|
|
if (! $error)
|
|
{
|
|
// Extrafields
|
|
$extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
|
|
$array_options = $extrafields->getOptionalsFromPost($extralabels);
|
|
|
|
$object->array_options = $array_options;
|
|
|
|
$result = $object->create($user);
|
|
if ($result > 0)
|
|
{
|
|
$id=$result; // Force raffraichissement sur fiche venant d'etre cree
|
|
}
|
|
else
|
|
{
|
|
$langs->load("errors");
|
|
setEventMessages($object->error, $object->errors, 'errors');
|
|
$action = 'create';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("ThirdParty")).'</div>';
|
|
$action = 'create';
|
|
}
|
|
}
|
|
|
|
else if ($action == 'update' && $user->rights->ficheinter->creer)
|
|
{
|
|
$object->socid = $socid;
|
|
$object->fk_project = GETPOST('projectid','int');
|
|
$object->fk_contrat = GETPOST('contratid','int');
|
|
$object->author = $user->id;
|
|
$object->description = GETPOST('description','alpha');
|
|
$object->ref = $ref;
|
|
|
|
$result=$object->update($user);
|
|
if ($result<0) {
|
|
setEventMessages($object->error, $object->errors, 'errors');
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Build doc
|
|
*/
|
|
else if ($action == 'builddoc' && $user->rights->ficheinter->creer) // En get ou en post
|
|
{
|
|
$object->fetch_lines();
|
|
|
|
// Save last template used to generate document
|
|
if (GETPOST('model')) $object->setDocModel($user, GETPOST('model','alpha'));
|
|
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','alpha')) $newlang=GETPOST('lang_id','alpha');
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
|
|
if (! empty($newlang))
|
|
{
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
$result=fichinter_create($db, $object, GETPOST('model','alpha'), $outputlangs);
|
|
if ($result <= 0)
|
|
{
|
|
dol_print_error($db,$result);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// Remove file in doc form
|
|
else if ($action == 'remove_file')
|
|
{
|
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
|
|
|
$object->fetch_thirdparty();
|
|
|
|
$langs->load("other");
|
|
$upload_dir = $conf->ficheinter->dir_output;
|
|
$file = $upload_dir . '/' . GETPOST('file');
|
|
$ret=dol_delete_file($file,0,0,0,$object);
|
|
if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
|
|
else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
|
|
}
|
|
|
|
// Set into a project
|
|
else if ($action == 'classin' && $user->rights->ficheinter->creer)
|
|
{
|
|
$result=$object->setProject(GETPOST('projectid','int'));
|
|
if ($result < 0) dol_print_error($db,$object->error);
|
|
}
|
|
|
|
// Set into a contract
|
|
else if ($action == 'setcontract' && $user->rights->contrat->creer)
|
|
{
|
|
$result=$object->set_contrat($user,GETPOST('contratid','int'));
|
|
if ($result < 0) dol_print_error($db,$object->error);
|
|
}
|
|
|
|
else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->ficheinter->supprimer)
|
|
{
|
|
$result=$object->delete($user);
|
|
if ($result<0) {
|
|
setEventMessages($object->error, $object->errors, 'errors');
|
|
}
|
|
|
|
header('Location: '.DOL_URL_ROOT.'/fichinter/list.php?leftmenu=ficheinter');
|
|
exit;
|
|
}
|
|
|
|
else if ($action == 'setdescription' && $user->rights->ficheinter->creer)
|
|
{
|
|
$result=$object->set_description($user,GETPOST('description'));
|
|
if ($result < 0) dol_print_error($db,$object->error);
|
|
}
|
|
|
|
// Add line
|
|
else if ($action == "addline" && $user->rights->ficheinter->creer)
|
|
{
|
|
if (!GETPOST('np_desc') && empty($conf->global->FICHINTER_EMPTY_LINE_DESC) )
|
|
{
|
|
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Description")).'</div>';
|
|
$error++;
|
|
}
|
|
if (empty($conf->global->FICHINTER_WITHOUT_DURATION) && !GETPOST('durationhour','int') && !GETPOST('durationmin','int'))
|
|
{
|
|
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Duration")).'</div>';
|
|
$error++;
|
|
}
|
|
if (empty($conf->global->FICHINTER_WITHOUT_DURATION) && GETPOST('durationhour','int') >= 24 && GETPOST('durationmin','int') > 0)
|
|
{
|
|
$mesg='<div class="error">'.$langs->trans("ErrorValueTooHigh").'</div>';
|
|
$error++;
|
|
}
|
|
if (! $error)
|
|
{
|
|
$db->begin();
|
|
|
|
$desc=GETPOST('np_desc');
|
|
$date_intervention = dol_mktime(GETPOST('dihour','int'), GETPOST('dimin','int'), 0, GETPOST('dimonth','int'), GETPOST('diday','int'), GETPOST('diyear','int'));
|
|
$duration = empty($conf->global->FICHINTER_WITHOUT_DURATION)?convertTime2Seconds(GETPOST('durationhour','int'), GETPOST('durationmin','int')) : 0;
|
|
|
|
|
|
// Extrafields
|
|
$extrafieldsline = new ExtraFields($db);
|
|
$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
|
|
$array_options = $extrafieldsline->getOptionalsFromPost($extralabelsline);
|
|
|
|
$result=$object->addline(
|
|
$user,
|
|
$id,
|
|
$desc,
|
|
$date_intervention,
|
|
$duration,
|
|
$array_options
|
|
);
|
|
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','alpha')) $newlang=GETPOST('lang_id','alpha');
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
|
|
if (! empty($newlang))
|
|
{
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
|
|
if ($result >= 0)
|
|
{
|
|
$db->commit();
|
|
|
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) fichinter_create($db, $object, $object->modelpdf, $outputlangs);
|
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
$mesg=$object->error;
|
|
$db->rollback();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Classify Billed
|
|
else if ($action == 'classifybilled' && $user->rights->ficheinter->creer)
|
|
{
|
|
$result=$object->setStatut(2);
|
|
if ($result > 0)
|
|
{
|
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
setEventMessages($object->error, $object->errors, 'errors');
|
|
}
|
|
}
|
|
|
|
// Classify Billed
|
|
else if ($action == 'classifyunbilled' && $user->rights->ficheinter->creer)
|
|
{
|
|
$result=$object->setStatut(1);
|
|
if ($result > 0)
|
|
{
|
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
$mesg='<div class="error">'.$object->error.'</div>';
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Mise a jour d'une ligne d'intervention
|
|
*/
|
|
else if ($action == 'updateline' && $user->rights->ficheinter->creer && GETPOST('save','alpha') == $langs->trans("Save"))
|
|
{
|
|
$objectline = new FichinterLigne($db);
|
|
if ($objectline->fetch($lineid) <= 0)
|
|
{
|
|
dol_print_error($db);
|
|
exit;
|
|
}
|
|
|
|
if ($object->fetch($objectline->fk_fichinter) <= 0)
|
|
{
|
|
dol_print_error($db);
|
|
exit;
|
|
}
|
|
$object->fetch_thirdparty();
|
|
|
|
$desc = GETPOST('np_desc');
|
|
$date_inter = dol_mktime(GETPOST('dihour','int'), GETPOST('dimin','int'), 0, GETPOST('dimonth','int'), GETPOST('diday','int'), GETPOST('diyear','int'));
|
|
$duration = convertTime2Seconds(GETPOST('durationhour','int'),GETPOST('durationmin','int'));
|
|
|
|
$objectline->datei = $date_inter;
|
|
$objectline->desc = $desc;
|
|
$objectline->duration = $duration;
|
|
|
|
// Extrafields
|
|
$extrafieldsline = new ExtraFields($db);
|
|
$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
|
|
$array_options = $extrafieldsline->getOptionalsFromPost($extralabelsline);
|
|
$objectline->array_options = $array_options;
|
|
|
|
$result = $objectline->update($user);
|
|
if ($result < 0)
|
|
{
|
|
dol_print_error($db);
|
|
exit;
|
|
}
|
|
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','alpha')) $newlang=GETPOST('lang_id','alpha');
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
|
|
if (! empty($newlang))
|
|
{
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) fichinter_create($db, $object, $object->modelpdf, $outputlangs);
|
|
|
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
|
|
exit;
|
|
}
|
|
|
|
/*
|
|
* Supprime une ligne d'intervention AVEC confirmation
|
|
*/
|
|
else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->ficheinter->creer)
|
|
{
|
|
$objectline = new FichinterLigne($db);
|
|
if ($objectline->fetch($lineid) <= 0)
|
|
{
|
|
dol_print_error($db);
|
|
exit;
|
|
}
|
|
$result=$objectline->deleteline($user);
|
|
|
|
if ($object->fetch($objectline->fk_fichinter) <= 0)
|
|
{
|
|
dol_print_error($db);
|
|
exit;
|
|
}
|
|
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','alpha')) $newlang=GETPOST('lang_id','alpha');
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
|
|
if (! empty($newlang))
|
|
{
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) fichinter_create($db, $object, $object->modelpdf, $outputlangs);
|
|
}
|
|
|
|
/*
|
|
* Ordonnancement des lignes
|
|
*/
|
|
|
|
else if ($action == 'up' && $user->rights->ficheinter->creer)
|
|
{
|
|
$object->line_up($lineid);
|
|
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','alpha')) $newlang=GETPOST('lang_id','alpha');
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
|
|
if (! empty($newlang))
|
|
{
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) fichinter_create($db, $object, $object->modelpdf, $outputlangs);
|
|
|
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id.'#'.$lineid);
|
|
exit;
|
|
}
|
|
|
|
else if ($action == 'down' && $user->rights->ficheinter->creer)
|
|
{
|
|
$object->line_down($lineid);
|
|
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang='';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','alpha')) $newlang=GETPOST('lang_id','alpha');
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
|
|
if (! empty($newlang))
|
|
{
|
|
$outputlangs = new Translate("",$conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
}
|
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) fichinter_create($db, $object, $object->modelpdf, $outputlangs);
|
|
|
|
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id.'#'.$lineid);
|
|
exit;
|
|
}
|
|
|
|
/*
|
|
* Send mail
|
|
*/
|
|
|
|
// Actions to send emails
|
|
$actiontypecode='AC_OTH_AUTO';
|
|
$trigger_name='FICHINTER_SENTBYMAIL';
|
|
$paramname='id';
|
|
$mode='emailfromintervention';
|
|
include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
|
|
|
|
|
|
if ($action == 'update_extras')
|
|
{
|
|
// Fill array 'array_options' with data from update form
|
|
$extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
|
|
$ret = $extrafields->setOptionalsFromPost($extralabels,$object,GETPOST('attribute'));
|
|
if ($ret < 0) $error++;
|
|
|
|
if (! $error)
|
|
{
|
|
// Actions on extra fields (by external module or standard code)
|
|
// TODO le hook fait double emploi avec le trigger !!
|
|
$hookmanager->initHooks(array('interventiondao'));
|
|
$parameters=array('id'=>$object->id);
|
|
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
|
if (empty($reshook))
|
|
{ $result=$object->updateExtraField($_POST["attribute"]);
|
|
if ($result < 0)
|
|
{
|
|
$error++;
|
|
}
|
|
}
|
|
else if ($reshook < 0) $error++;
|
|
}
|
|
|
|
if ($error) $action = 'edit_extras';
|
|
}
|
|
|
|
if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->ficheinter->creer)
|
|
{
|
|
if ($action == 'addcontact')
|
|
{
|
|
if ($result > 0 && $id > 0)
|
|
{
|
|
$contactid = (GETPOST('userid','int') ? GETPOST('userid','int') : GETPOST('contactid','int'));
|
|
$result = $object->add_contact($contactid, GETPOST('type','int'), GETPOST('source','alpha'));
|
|
}
|
|
|
|
if ($result >= 0)
|
|
{
|
|
header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS')
|
|
{
|
|
$langs->load("errors");
|
|
$mesg = '<div class="error">'.$langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType").'</div>';
|
|
}
|
|
else
|
|
{
|
|
$mesg = '<div class="error">'.$object->error.'</div>';
|
|
}
|
|
}
|
|
}
|
|
|
|
// bascule du statut d'un contact
|
|
else if ($action == 'swapstatut')
|
|
{
|
|
$result=$object->swapContactStatus(GETPOST('ligne','int'));
|
|
}
|
|
|
|
// Efface un contact
|
|
else if ($action == 'deletecontact')
|
|
{
|
|
$result = $object->delete_contact(GETPOST('lineid','int'));
|
|
|
|
if ($result >= 0)
|
|
{
|
|
header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
|
|
exit;
|
|
}
|
|
else {
|
|
dol_print_error($db);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* View
|
|
*/
|
|
|
|
$form = new Form($db);
|
|
$formfile = new FormFile($db);
|
|
if ($conf->contrat->enabled)
|
|
$formcontract = new FormContract($db);
|
|
|
|
llxHeader('',$langs->trans("Intervention"));
|
|
|
|
if ($action == 'create')
|
|
{
|
|
/*
|
|
* Mode creation
|
|
* Creation d'une nouvelle fiche d'intervention
|
|
*/
|
|
|
|
$soc=new Societe($db);
|
|
|
|
print load_fiche_titre($langs->trans("AddIntervention"));
|
|
|
|
dol_htmloutput_mesg($mesg);
|
|
|
|
if ($socid) $res=$soc->fetch($socid);
|
|
|
|
if (GETPOST('origin') && GETPOST('originid'))
|
|
{
|
|
// Parse element/subelement (ex: project_task)
|
|
$element = $subelement = GETPOST('origin');
|
|
if (preg_match('/^([^_]+)_([^_]+)/i',GETPOST('origin'),$regs))
|
|
{
|
|
$element = $regs[1];
|
|
$subelement = $regs[2];
|
|
}
|
|
|
|
if ($element == 'project')
|
|
{
|
|
$projectid=GETPOST('originid');
|
|
}
|
|
else
|
|
{
|
|
// For compatibility
|
|
if ($element == 'order' || $element == 'commande') {
|
|
$element = $subelement = 'commande';
|
|
}
|
|
if ($element == 'propal') {
|
|
$element = 'comm/propal'; $subelement = 'propal';
|
|
}
|
|
if ($element == 'contract') {
|
|
$element = $subelement = 'contrat';
|
|
}
|
|
|
|
dol_include_once('/'.$element.'/class/'.$subelement.'.class.php');
|
|
|
|
$classname = ucfirst($subelement);
|
|
$objectsrc = new $classname($db);
|
|
$objectsrc->fetch(GETPOST('originid'));
|
|
if (empty($objectsrc->lines) && method_exists($objectsrc,'fetch_lines'))
|
|
{
|
|
$objectsrc->fetch_lines();
|
|
$lines = $objectsrc->lines;
|
|
}
|
|
$objectsrc->fetch_thirdparty();
|
|
|
|
$projectid = (!empty($objectsrc->fk_project)?$objectsrc->fk_project:'');
|
|
|
|
$soc = $objectsrc->client;
|
|
|
|
$note_private = (! empty($objectsrc->note) ? $objectsrc->note : (! empty($objectsrc->note_private) ? $objectsrc->note_private : GETPOST('note_private')));
|
|
$note_public = (! empty($objectsrc->note_public) ? $objectsrc->note_public : GETPOST('note_public'));
|
|
|
|
// Object source contacts list
|
|
$srccontactslist = $objectsrc->liste_contact(-1,'external',1);
|
|
}
|
|
}
|
|
else {
|
|
$projectid = GETPOST('projectid','int');
|
|
}
|
|
|
|
if (! $conf->global->FICHEINTER_ADDON)
|
|
{
|
|
dol_print_error($db,$langs->trans("Error")." ".$langs->trans("Error_FICHEINTER_ADDON_NotDefined"));
|
|
exit;
|
|
}
|
|
|
|
$object->date = dol_now();
|
|
|
|
$obj = $conf->global->FICHEINTER_ADDON;
|
|
$obj = "mod_".$obj;
|
|
|
|
//$modFicheinter = new $obj;
|
|
//$numpr = $modFicheinter->getNextValue($soc, $object);
|
|
|
|
if ($socid > 0)
|
|
{
|
|
$soc->fetch($socid);
|
|
|
|
print '<form name="fichinter" action="'.$_SERVER['PHP_SELF'].'" method="POST">';
|
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
|
|
|
dol_fiche_head('');
|
|
|
|
print '<table class="border" width="100%">';
|
|
|
|
print '<input type="hidden" name="socid" value='.$soc->id.'>';
|
|
print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("ThirdParty").'</td><td>'.$soc->getNomUrl(1).'</td></tr>';
|
|
|
|
print '<input type="hidden" name="action" value="add">';
|
|
|
|
// Ref
|
|
print '<tr><td class="fieldrequired">'.$langs->trans('Ref').'</td><td colspan="2">'.$langs->trans("Draft").'</td></tr>';
|
|
|
|
// Description (must be a textarea and not html must be allowed (used in list view)
|
|
print '<tr><td class="tdtop">'.$langs->trans("Description").'</td>';
|
|
print '<td>';
|
|
print '<textarea name="description" cols="80" rows="'.ROWS_3.'">'.GETPOST('description').'</textarea>';
|
|
print '</td></tr>';
|
|
|
|
// Project
|
|
if (! empty($conf->projet->enabled))
|
|
{
|
|
$formproject=new FormProjets($db);
|
|
|
|
$langs->load("project");
|
|
|
|
print '<tr><td>'.$langs->trans("Project").'</td><td>';
|
|
/* Fix: If a project must be linked to any companies (suppliers or not), project must be not be set as limited to customer but must be not linked to any particular thirdparty
|
|
if ($societe->fournisseur==1)
|
|
$numprojet=select_projects(-1,$_POST["projectid"],'projectid');
|
|
else
|
|
$numprojet=select_projects($societe->id,$_POST["projectid"],'projectid');
|
|
*/
|
|
$numprojet=$formproject->select_projects($soc->id,GETPOST('projectid','int'),'projectid');
|
|
if ($numprojet==0)
|
|
{
|
|
print ' <a href="'.DOL_URL_ROOT.'/projet/card.php?socid='.$soc->id.'&action=create">'.$langs->trans("AddProject").'</a>';
|
|
}
|
|
print '</td></tr>';
|
|
}
|
|
|
|
// Contract
|
|
if ($conf->contrat->enabled)
|
|
{
|
|
$langs->load("contracts");
|
|
print '<tr><td>'.$langs->trans("Contract").'</td><td>';
|
|
$numcontrat=$formcontract->select_contract($soc->id,GETPOST('contratid','int'),'contratid',0,1);
|
|
if ($numcontrat==0)
|
|
{
|
|
print ' <a href="'.DOL_URL_ROOT.'/contrat/card.php?socid='.$soc->id.'&action=create">'.$langs->trans("AddContract").'</a>';
|
|
}
|
|
print '</td></tr>';
|
|
}
|
|
|
|
// Model
|
|
print '<tr>';
|
|
print '<td>'.$langs->trans("DefaultModel").'</td>';
|
|
print '<td colspan="2">';
|
|
$liste=ModelePDFFicheinter::liste_modeles($db);
|
|
print $form->selectarray('model',$liste,$conf->global->FICHEINTER_ADDON_PDF);
|
|
print "</td></tr>";
|
|
|
|
// Public note
|
|
print '<tr>';
|
|
print '<td tdtop">'.$langs->trans('NotePublic').'</td>';
|
|
print '<td colspan="2">';
|
|
$doleditor = new DolEditor('note_public', $note_public, '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, 70);
|
|
print $doleditor->Create(1);
|
|
//print '<textarea name="note_public" cols="80" rows="'.ROWS_3.'">'.$note_public.'</textarea>';
|
|
print '</td></tr>';
|
|
|
|
// Private note
|
|
if (empty($user->societe_id))
|
|
{
|
|
print '<tr>';
|
|
print '<td class="tdtop">'.$langs->trans('NotePrivate').'</td>';
|
|
print '<td colspan="2">';
|
|
$doleditor = new DolEditor('note_private', $note_private, '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, 70);
|
|
print $doleditor->Create(1);
|
|
//print '<textarea name="note_private" cols="80" rows="'.ROWS_3.'">'.$note_private.'</textarea>';
|
|
print '</td></tr>';
|
|
}
|
|
|
|
// Other attributes
|
|
$parameters=array('colspan' => ' colspan="2"');
|
|
$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');
|
|
}
|
|
|
|
// Show link to origin object
|
|
if (! empty($origin) && ! empty($originid) && is_object($objectsrc))
|
|
{
|
|
$newclassname=$classname;
|
|
if ($newclassname=='Propal') $newclassname='CommercialProposal';
|
|
print '<tr><td>'.$langs->trans($newclassname).'</td><td colspan="2">'.$objectsrc->getNomUrl(1).'</td></tr>';
|
|
}
|
|
|
|
print '</table>';
|
|
|
|
if (is_object($objectsrc))
|
|
{
|
|
print '<input type="hidden" name="origin" value="'.$objectsrc->element.'">';
|
|
print '<input type="hidden" name="originid" value="'.$objectsrc->id.'">';
|
|
}
|
|
|
|
dol_fiche_end();
|
|
|
|
print '<div class="center">';
|
|
print '<input type="submit" class="button" value="'.$langs->trans("CreateDraftIntervention").'">';
|
|
print ' ';
|
|
print '<input type="button" class="button" value="' . $langs->trans("Cancel") . '" onClick="javascript:history.go(-1)">';
|
|
print '</div>';
|
|
|
|
print '</form>';
|
|
}
|
|
else
|
|
{
|
|
dol_fiche_head('');
|
|
|
|
print '<form name="fichinter" action="'.$_SERVER['PHP_SELF'].'" method="POST">';
|
|
print '<table class="border" width="100%">';
|
|
print '<tr><td class="fieldrequired">'.$langs->trans("ThirdParty").'</td><td>';
|
|
print $form->select_company('','socid','',1,1);
|
|
print '</td></tr>';
|
|
print '</table>';
|
|
|
|
dol_fiche_end();
|
|
|
|
print '<div class="center">';
|
|
print '<input type="hidden" name="action" value="create">';
|
|
print '<input type="submit" class="button" value="'.$langs->trans("CreateDraftIntervention").'">';
|
|
print ' ';
|
|
print '<input type="button" class="button" value="' . $langs->trans("Cancel") . '" onClick="javascript:history.go(-1)">';
|
|
print '</div>';
|
|
|
|
print '</form>';
|
|
}
|
|
|
|
}
|
|
else if ($id > 0 || ! empty($ref))
|
|
{
|
|
/*
|
|
* Affichage en mode visu
|
|
*/
|
|
|
|
$object->fetch($id, $ref);
|
|
$object->fetch_thirdparty();
|
|
|
|
$soc=new Societe($db);
|
|
$soc->fetch($object->socid);
|
|
|
|
dol_htmloutput_mesg($mesg);
|
|
|
|
$head = fichinter_prepare_head($object);
|
|
|
|
dol_fiche_head($head, 'card', $langs->trans("InterventionCard"), 0, 'intervention');
|
|
|
|
$formconfirm='';
|
|
|
|
// Confirm deletion of intervention
|
|
if ($action == 'delete')
|
|
{
|
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteIntervention'), $langs->trans('ConfirmDeleteIntervention'), 'confirm_delete','',0,1);
|
|
}
|
|
|
|
// Confirm validation
|
|
if ($action == 'validate')
|
|
{
|
|
// on verifie si l'objet est en numerotation provisoire
|
|
$ref = substr($object->ref, 1, 4);
|
|
if ($ref == 'PROV')
|
|
{
|
|
$numref = $object->getNextNumRef($soc);
|
|
if (empty($numref))
|
|
{
|
|
$error++;
|
|
setEventMessages($object->error, $object->errors, 'errors');
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$numref = $object->ref;
|
|
}
|
|
$text=$langs->trans('ConfirmValidateIntervention',$numref);
|
|
|
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ValidateIntervention'), $text, 'confirm_validate','',1,1);
|
|
}
|
|
|
|
// Confirm back to draft
|
|
if ($action == 'modify')
|
|
{
|
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ModifyIntervention'), $langs->trans('ConfirmModifyIntervention'), 'confirm_modify','',0,1);
|
|
}
|
|
|
|
// Confirm deletion of line
|
|
if ($action == 'ask_deleteline')
|
|
{
|
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&line_id='.$lineid, $langs->trans('DeleteInterventionLine'), $langs->trans('ConfirmDeleteInterventionLine'), 'confirm_deleteline','',0,1);
|
|
}
|
|
|
|
// Clone confirmation
|
|
if ($action == 'clone') {
|
|
// Create an array for form
|
|
$formquestion = array(
|
|
// 'text' => $langs->trans("ConfirmClone"),
|
|
// array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' =>
|
|
// 1),
|
|
// array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value'
|
|
// => 1),
|
|
array('type' => 'other','name' => 'socid','label' => $langs->trans("SelectThirdParty"),'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '', '', 0, 0, null, 0, 'minwidth200')));
|
|
// Paiement incomplet. On demande si motif = escompte ou autre
|
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('CloneIntervention'), $langs->trans('ConfirmCloneIntervention', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
|
|
}
|
|
|
|
if (!$formconfirm)
|
|
{
|
|
$parameters=array('lineid'=>$lineid);
|
|
$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
|
if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
|
|
elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
|
|
}
|
|
|
|
// Print form confirm
|
|
print $formconfirm;
|
|
|
|
print '<table class="border" width="100%">';
|
|
|
|
$linkback = '<a href="'.DOL_URL_ROOT.'/fichinter/list.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
|
|
|
|
// Ref
|
|
print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td colspan="3">';
|
|
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref');
|
|
print '</td></tr>';
|
|
|
|
// Third party
|
|
print "<tr><td>".$langs->trans("Company").'</td><td colspan="3">'.$object->thirdparty->getNomUrl(1)."</td></tr>";
|
|
|
|
if (empty($conf->global->FICHINTER_DISABLE_DETAILS))
|
|
{
|
|
// Duration
|
|
print '<tr><td>'.$langs->trans("TotalDuration").'</td>';
|
|
print '<td colspan="3">'.convertSecondToTime($object->duration, 'all', $conf->global->MAIN_DURATION_OF_WORKDAY).'</td>';
|
|
print '</tr>';
|
|
}
|
|
|
|
if (! empty($conf->global->FICHINTER_USE_PLANNED_AND_DONE_DATES))
|
|
{
|
|
// Date Start
|
|
print '<tr><td>'.$langs->trans("Dateo").'</td>';
|
|
print '<td colspan="3">';
|
|
print $object->dateo ? dol_print_date($object->dateo, 'daytext') : ' ';
|
|
print '</td>';
|
|
print '</tr>';
|
|
|
|
// Date End
|
|
print '<tr><td>'.$langs->trans("Datee").'</td>';
|
|
print '<td colspan="3">';
|
|
print $object->datee ? dol_print_date($object->datee, 'daytext') : ' ';
|
|
print '</td>';
|
|
print '</tr>';
|
|
|
|
// Date Terminate/close
|
|
print '<tr><td>'.$langs->trans("Datet").'</td>';
|
|
print '<td colspan="3">';
|
|
print $object->datet ? dol_print_date($object->datet, 'daytext') : ' ';
|
|
print '</td>';
|
|
print '</tr>';
|
|
}
|
|
|
|
// Description (must be a textarea and not html must be allowed (used in list view)
|
|
print '<tr><td>';
|
|
print $form->editfieldkey("Description",'description',$object->description,$object,$user->rights->ficheinter->creer,'textarea');
|
|
print '</td><td colspan="3">';
|
|
print $form->editfieldval("Description",'description',$object->description,$object,$user->rights->ficheinter->creer,'textarea:8:80');
|
|
print '</td>';
|
|
print '</tr>';
|
|
|
|
// Project
|
|
if (! empty($conf->projet->enabled))
|
|
{
|
|
$langs->load('projects');
|
|
print '<tr>';
|
|
print '<td>';
|
|
|
|
print '<table class="nobordernopadding" width="100%"><tr><td>';
|
|
print $langs->trans('Project');
|
|
print '</td>';
|
|
if ($action != 'classify')
|
|
{
|
|
print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=classify&id='.$object->id.'">';
|
|
print img_edit($langs->trans('SetProject'),1);
|
|
print '</a></td>';
|
|
}
|
|
print '</tr></table>';
|
|
print '</td><td colspan="3">';
|
|
if ($action == 'classify')
|
|
{
|
|
$form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project,'projectid', 0, 0, 1);
|
|
}
|
|
else
|
|
{
|
|
$form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project,'none', 0, 0);
|
|
}
|
|
print '</td>';
|
|
print '</tr>';
|
|
}
|
|
|
|
// Contrat
|
|
if ($conf->contrat->enabled)
|
|
{
|
|
$langs->load('contrat');
|
|
print '<tr>';
|
|
print '<td>';
|
|
|
|
print '<table class="nobordernopadding" width="100%"><tr><td>';
|
|
print $langs->trans('Contract');
|
|
print '</td>';
|
|
if ($action != 'contrat')
|
|
{
|
|
print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=contrat&id='.$object->id.'">';
|
|
print img_edit($langs->trans('SetContract'),1);
|
|
print '</a></td>';
|
|
}
|
|
print '</tr></table>';
|
|
print '</td><td colspan="3">';
|
|
if ($action == 'contrat')
|
|
{
|
|
$formcontract= new Formcontract($db);
|
|
$formcontract->formSelectContract($_SERVER["PHP_SELF"].'?id='.$object->id, $object->socid, $object->fk_contrat, 'contratid', 0, 1);
|
|
}
|
|
else
|
|
{
|
|
if ($object->fk_contrat)
|
|
{
|
|
$contratstatic = new Contrat($db);
|
|
$contratstatic->fetch($object->fk_contrat);
|
|
//print '<a href="'.DOL_URL_ROOT.'/projet/card.php?id='.$selected.'">'.$projet->title.'</a>';
|
|
print $contratstatic->getNomUrl(0,'',1);
|
|
}
|
|
else
|
|
{
|
|
print " ";
|
|
}
|
|
}
|
|
print '</td>';
|
|
print '</tr>';
|
|
}
|
|
|
|
// Statut
|
|
print '<tr><td>'.$langs->trans("Status").'</td><td colspan="3">'.$object->getLibStatut(4).'</td></tr>';
|
|
|
|
// Other attributes
|
|
$cols = 3;
|
|
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php';
|
|
|
|
print "</table>";
|
|
|
|
if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB))
|
|
{
|
|
$blocname = 'contacts';
|
|
$title = $langs->trans('ContactsAddresses');
|
|
include DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php';
|
|
}
|
|
|
|
if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB))
|
|
{
|
|
$blocname = 'notes';
|
|
$title = $langs->trans('Notes');
|
|
include DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php';
|
|
}
|
|
|
|
// Line of interventions
|
|
if (empty($conf->global->FICHINTER_DISABLE_DETAILS))
|
|
{
|
|
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" name="addinter" method="post">';
|
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
|
print '<input type="hidden" name="id" value="'.$object->id.'">';
|
|
if ($action == 'editline')
|
|
{
|
|
print '<input type="hidden" name="action" value="updateline">';
|
|
print '<input type="hidden" name="line_id" value="'.GETPOST('line_id','int').'">';
|
|
}
|
|
else
|
|
{
|
|
print '<input type="hidden" name="action" value="addline">';
|
|
}
|
|
|
|
// Intervention lines
|
|
$sql = 'SELECT ft.rowid, ft.description, ft.fk_fichinter, ft.duree, ft.rang,';
|
|
$sql.= ' ft.date as date_intervention';
|
|
$sql.= ' FROM '.MAIN_DB_PREFIX.'fichinterdet as ft';
|
|
$sql.= ' WHERE ft.fk_fichinter = '.$object->id;
|
|
if (!empty($conf->global->FICHINTER_HIDE_EMPTY_DURATION))
|
|
$sql.= ' AND ft.duree <> 0';
|
|
$sql.= ' ORDER BY ft.rang ASC, ft.date ASC, ft.rowid';
|
|
|
|
$resql = $db->query($sql);
|
|
if ($resql)
|
|
{
|
|
$num = $db->num_rows($resql);
|
|
$i = 0;
|
|
|
|
if ($num)
|
|
{
|
|
print '<br>';
|
|
print '<table class="noborder" width="100%">';
|
|
|
|
print '<tr class="liste_titre">';
|
|
print '<td>'.$langs->trans('Description').'</td>';
|
|
print '<td align="center">'.$langs->trans('Date').'</td>';
|
|
print '<td align="right">'.(empty($conf->global->FICHINTER_WITHOUT_DURATION)?$langs->trans('Duration'):'').'</td>';
|
|
print '<td width="48" colspan="3"> </td>';
|
|
print "</tr>\n";
|
|
}
|
|
$var=true;
|
|
while ($i < $num)
|
|
{
|
|
$objp = $db->fetch_object($resql);
|
|
$var=!$var;
|
|
|
|
// Ligne en mode visu
|
|
if ($action != 'editline' || GETPOST('line_id','int') != $objp->rowid)
|
|
{
|
|
print '<tr '.$bc[$var].'>';
|
|
print '<td>';
|
|
print '<a name="'.$objp->rowid.'"></a>'; // ancre pour retourner sur la ligne
|
|
print dol_htmlentitiesbr($objp->description);
|
|
|
|
// Date
|
|
print '<td align="center" width="150">'.dol_print_date($db->jdate($objp->date_intervention),'dayhour').'</td>';
|
|
|
|
// Duration
|
|
print '<td align="right" width="150">'.(empty($conf->global->FICHINTER_WITHOUT_DURATION)?convertSecondToTime($objp->duree):'').'</td>';
|
|
|
|
print "</td>\n";
|
|
|
|
|
|
// Icone d'edition et suppression
|
|
if ($object->statut == 0 && $user->rights->ficheinter->creer)
|
|
{
|
|
print '<td align="center">';
|
|
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=editline&line_id='.$objp->rowid.'#'.$objp->rowid.'">';
|
|
print img_edit();
|
|
print '</a>';
|
|
print '</td>';
|
|
print '<td align="center">';
|
|
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=ask_deleteline&line_id='.$objp->rowid.'">';
|
|
print img_delete();
|
|
print '</a></td>';
|
|
if ($num > 1)
|
|
{
|
|
print '<td align="center">';
|
|
if ($i > 0)
|
|
{
|
|
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=up&line_id='.$objp->rowid.'">';
|
|
print img_up();
|
|
print '</a>';
|
|
}
|
|
if ($i < $num-1)
|
|
{
|
|
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=down&line_id='.$objp->rowid.'">';
|
|
print img_down();
|
|
print '</a>';
|
|
}
|
|
print '</td>';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
print '<td colspan="3"> </td>';
|
|
}
|
|
|
|
print '</tr>';
|
|
|
|
$line = new FichinterLigne($db);
|
|
$line->fetch($objp->rowid);
|
|
|
|
$extrafieldsline = new ExtraFields($db);
|
|
$extralabelslines=$extrafieldsline->fetch_name_optionals_label($line->table_element);
|
|
|
|
$line->fetch_optionals($line->rowid, $extralabelslines);
|
|
|
|
print $line->showOptionals($extrafieldsline, 'view', array('style'=>$bc[$var], 'colspan'=>5));
|
|
|
|
|
|
}
|
|
|
|
// Line in update mode
|
|
if ($object->statut == 0 && $action == 'editline' && $user->rights->ficheinter->creer && GETPOST('line_id','int') == $objp->rowid)
|
|
{
|
|
print '<tr '.$bc[$var].'>';
|
|
print '<td>';
|
|
print '<a name="'.$objp->rowid.'"></a>'; // ancre pour retourner sur la ligne
|
|
|
|
// Editeur wysiwyg
|
|
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
|
$doleditor=new DolEditor('np_desc',$objp->description,'',164,'dolibarr_details','',false,true,$conf->global->FCKEDITOR_ENABLE_DETAILS,ROWS_2,70);
|
|
$doleditor->Create();
|
|
print '</td>';
|
|
|
|
// Date d'intervention
|
|
print '<td align="center" class="nowrap">';
|
|
$form->select_date($db->jdate($objp->date_intervention),'di',1,1,0,"date_intervention");
|
|
print '</td>';
|
|
|
|
// Duration
|
|
print '<td align="right">';
|
|
if (empty($conf->global->FICHINTER_WITHOUT_DURATION)) {
|
|
$selectmode = 'select';
|
|
if (!empty($conf->global->INTERVENTION_ADDLINE_FREEDUREATION))
|
|
$selectmode = 'text';
|
|
$form->select_duration('duration', $objp->duree, 0, $selectmode);
|
|
}
|
|
print '</td>';
|
|
|
|
print '<td align="center" colspan="5" valign="center"><input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
|
|
print '<br><input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'"></td>';
|
|
print '</tr>' . "\n";
|
|
|
|
$line = new FichinterLigne($db);
|
|
$line->fetch($objp->rowid);
|
|
|
|
$extrafieldsline = new ExtraFields($db);
|
|
$extralabelslines=$extrafieldsline->fetch_name_optionals_label($line->table_element);
|
|
$line->fetch_optionals($line->rowid, $extralabelslines);
|
|
|
|
print $line->showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var], 'colspan'=>5));
|
|
|
|
|
|
}
|
|
|
|
$i++;
|
|
}
|
|
|
|
$db->free($resql);
|
|
|
|
// Add new line
|
|
if ($object->statut == 0 && $user->rights->ficheinter->creer && $action <> 'editline' && empty($conf->global->FICHINTER_DISABLE_DETAILS))
|
|
{
|
|
if (! $num) print '<br><table class="noborder" width="100%">';
|
|
|
|
print '<tr class="liste_titre">';
|
|
print '<td>';
|
|
print '<a name="add"></a>'; // ancre
|
|
print $langs->trans('Description').'</td>';
|
|
print '<td align="center">'.$langs->trans('Date').'</td>';
|
|
print '<td align="right">'.(empty($conf->global->FICHINTER_WITHOUT_DURATION)?$langs->trans('Duration'):'').'</td>';
|
|
|
|
print '<td colspan="4"> </td>';
|
|
print "</tr>\n";
|
|
|
|
$var=true;
|
|
|
|
print '<tr '.$bcnd[$var] . ">\n";
|
|
print '<td>';
|
|
// editeur wysiwyg
|
|
if (empty($conf->global->FICHINTER_EMPTY_LINE_DESC)) {
|
|
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
|
|
$doleditor = new DolEditor('np_desc', GETPOST('np_desc', 'alpha'), '', 100, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_DETAILS, ROWS_2, 70);
|
|
$doleditor->Create();
|
|
}
|
|
print '</td>';
|
|
|
|
// Date intervention
|
|
print '<td align="center" class="nowrap">';
|
|
$now=dol_now();
|
|
$timearray=dol_getdate($now);
|
|
if (! GETPOST('diday','int')) $timewithnohour=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']);
|
|
else $timewithnohour=dol_mktime(GETPOST('dihour','int'),GETPOST('dimin','int'), 0,GETPOST('dimonth','int'),GETPOST('diday','int'),GETPOST('diyear','int'));
|
|
$form->select_date($timewithnohour,'di',1,1,0,"addinter");
|
|
print '</td>';
|
|
|
|
// Duration
|
|
print '<td align="right">';
|
|
if (empty($conf->global->FICHINTER_WITHOUT_DURATION)) {
|
|
$selectmode = 'select';
|
|
if (!empty($conf->global->INTERVENTION_ADDLINE_FREEDUREATION))
|
|
$selectmode = 'text';
|
|
$form->select_duration('duration', (!GETPOST('durationhour', 'int') && !GETPOST('durationmin', 'int')) ? 3600 : (60 * 60 * GETPOST('durationhour', 'int') + 60 * GETPOST('durationmin', 'int')), 0, $selectmode);
|
|
}
|
|
print '</td>';
|
|
|
|
print '<td align="center" valign="middle" colspan="4"><input type="submit" class="button" value="'.$langs->trans('Add').'" name="addline"></td>';
|
|
print '</tr>';
|
|
|
|
//Line extrafield
|
|
|
|
$lineadd = new FichinterLigne($db);
|
|
|
|
$extrafieldsline = new ExtraFields($db);
|
|
$extralabelslines=$extrafieldsline->fetch_name_optionals_label($lineadd->table_element);
|
|
|
|
print $lineadd->showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var], 'colspan'=>5));
|
|
|
|
if (! $num) print '</table>';
|
|
}
|
|
|
|
if ($num) print '</table>';
|
|
}
|
|
else
|
|
{
|
|
dol_print_error($db);
|
|
}
|
|
|
|
print '</form>'."\n";
|
|
}
|
|
|
|
dol_fiche_end();
|
|
|
|
print "\n";
|
|
|
|
|
|
/*
|
|
* Actions buttons
|
|
*/
|
|
|
|
print '<div class="tabsAction">';
|
|
|
|
$parameters = array();
|
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been
|
|
// modified by hook
|
|
if (empty($reshook))
|
|
{
|
|
if ($user->societe_id == 0)
|
|
{
|
|
if ($action != 'editdescription' && ($action != 'presend')) {
|
|
// Validate
|
|
if ($object->statut == 0 && (count($object->lines) > 0 || !empty($conf->global->FICHINTER_DISABLE_DETAILS))) {
|
|
if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->rights->ficheinter->creer) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->rights->ficheinter->ficheinter_advance->validate)) {
|
|
print '<div class="inline-block divButAction"><a class="butAction" href="card.php?id=' . $object->id . '&action=validate"';
|
|
print '>' . $langs->trans("Validate") . '</a></div>';
|
|
}
|
|
}
|
|
|
|
// Modify
|
|
if ($object->statut == 1 && ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->rights->ficheinter->creer) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->rights->ficheinter->ficheinter_advance->unvalidate)))
|
|
{
|
|
print '<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.'&action=modify">';
|
|
if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) print $langs->trans("Modify");
|
|
else print $langs->trans("SetToDraft");
|
|
print '</a></div>';
|
|
}
|
|
|
|
// Send
|
|
if ($object->statut > 0)
|
|
{
|
|
if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->ficheinter->ficheinter_advance->send)
|
|
{
|
|
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&mode=init">'.$langs->trans('SendByMail').'</a></div>';
|
|
}
|
|
else print '<div class="inline-block divButAction"><a class="butActionRefused" href="#">'.$langs->trans('SendByMail').'</a></div>';
|
|
}
|
|
|
|
// Event agenda
|
|
if (! empty($conf->global->FICHINTER_ADDLINK_TO_EVENT))
|
|
{
|
|
if (! empty($conf->agenda->enabled) && $object->statut > 0)
|
|
{
|
|
$langs->load("agenda");
|
|
if ($object->statut < 2)
|
|
{
|
|
if ($user->rights->agenda->myactions->create) print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id).'">'.$langs->trans("AddEvent").'</a></div>';
|
|
else print '<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("AddEvent").'</a></div>';
|
|
}
|
|
}
|
|
}
|
|
|
|
// Proposal
|
|
if (! empty($conf->propal->enabled) && $object->statut > 0)
|
|
{
|
|
$langs->load("propal");
|
|
if ($object->statut < 2)
|
|
{
|
|
if ($user->rights->propal->creer) print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/comm/propal/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddProp").'</a></div>';
|
|
else print '<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("AddProp").'</a></div>';
|
|
}
|
|
}
|
|
|
|
// Invoicing
|
|
if (! empty($conf->facture->enabled) && $object->statut > 0)
|
|
{
|
|
$langs->load("bills");
|
|
if ($object->statut < 2)
|
|
{
|
|
if ($user->rights->facture->creer) print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddBill").'</a></div>';
|
|
else print '<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("AddBill").'</a></div>';
|
|
}
|
|
|
|
if (! empty($conf->global->FICHINTER_CLASSIFY_BILLED))
|
|
{
|
|
if ($object->statut != 2)
|
|
{
|
|
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=classifybilled">'.$langs->trans("InterventionClassifyBilled").'</a></div>';
|
|
}
|
|
else
|
|
{
|
|
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=classifyunbilled">'.$langs->trans("InterventionClassifyUnBilled").'</a></div>';
|
|
}
|
|
}
|
|
}
|
|
|
|
// Clone
|
|
if ($user->rights->ficheinter->creer) {
|
|
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&socid=' . $object->socid . '&action=clone&object=ficheinter">' . $langs->trans("ToClone") . '</a></div>';
|
|
}
|
|
|
|
// Delete
|
|
if (($object->statut == 0 && $user->rights->ficheinter->creer) || $user->rights->ficheinter->supprimer)
|
|
{
|
|
print '<div class="inline-block divButAction"><a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete"';
|
|
print '>'.$langs->trans('Delete').'</a></div>';
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
print '</div>';
|
|
|
|
if ($action != 'presend')
|
|
{
|
|
print '<div class="fichecenter"><div class="fichehalfleft">';
|
|
|
|
/*
|
|
* Built documents
|
|
*/
|
|
$filename=dol_sanitizeFileName($object->ref);
|
|
$filedir=$conf->ficheinter->dir_output . "/".$object->ref;
|
|
$urlsource=$_SERVER["PHP_SELF"]."?id=".$object->id;
|
|
$genallowed=$user->rights->ficheinter->creer;
|
|
$delallowed=$user->rights->ficheinter->supprimer;
|
|
$genallowed=1;
|
|
$delallowed=1;
|
|
|
|
$var=true;
|
|
|
|
//print "<br>\n";
|
|
$somethingshown=$formfile->show_documents('ficheinter',$filename,$filedir,$urlsource,$genallowed,$delallowed,$object->modelpdf,1,0,0,28,0,'','','',$soc->default_lang);
|
|
|
|
// Linked object block
|
|
$somethingshown = $form->showLinkedObjectBlock($object);
|
|
|
|
// Show links to link elements
|
|
//$linktoelem = $form->showLinkToObjectBlock($object);
|
|
//if ($linktoelem) print '<br>'.$linktoelem;
|
|
|
|
|
|
print '</div><div class="fichehalfright"><div class="ficheaddleft">';
|
|
|
|
// List of actions on element
|
|
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
|
|
$formactions=new FormActions($db);
|
|
$somethingshown=$formactions->showactions($object,'fichinter',$socid);
|
|
|
|
print '</div></div></div>';
|
|
}
|
|
|
|
|
|
/*
|
|
* Action presend
|
|
*/
|
|
if (GETPOST('modelselected')) {
|
|
$action = 'presend';
|
|
}
|
|
if ($action == 'presend')
|
|
{
|
|
$ref = dol_sanitizeFileName($object->ref);
|
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
|
$fileparams = dol_most_recent_file($conf->ficheinter->dir_output . '/' . $ref, preg_quote($ref, '/').'[^\-]+');
|
|
$file=$fileparams['fullname'];
|
|
|
|
// Define output language
|
|
$outputlangs = $langs;
|
|
$newlang = '';
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id']))
|
|
$newlang = $_REQUEST['lang_id'];
|
|
if ($conf->global->MAIN_MULTILANGS && empty($newlang))
|
|
$newlang = $object->thirdparty->default_lang;
|
|
|
|
if (!empty($newlang))
|
|
{
|
|
$outputlangs = new Translate('', $conf);
|
|
$outputlangs->setDefaultLang($newlang);
|
|
$outputlangs->load('interventions');
|
|
}
|
|
|
|
// Build document if it not exists
|
|
if (! $file || ! is_readable($file))
|
|
{
|
|
$result=fichinter_create($db, $object, GETPOST('model')?GETPOST('model'):$object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
|
if ($result <= 0)
|
|
{
|
|
dol_print_error($db,$result);
|
|
exit;
|
|
}
|
|
$fileparams = dol_most_recent_file($conf->ficheinter->dir_output . '/' . $ref, preg_quote($ref, '/').'[^\-]+');
|
|
$file=$fileparams['fullname'];
|
|
}
|
|
|
|
print '<div class="clearboth"></div>';
|
|
print '<br>';
|
|
print load_fiche_titre($langs->trans('SendInterventionByMail'));
|
|
|
|
dol_fiche_head('');
|
|
|
|
// Create form object
|
|
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
|
|
$formmail = new FormMail($db);
|
|
$formmail->param['langsmodels']=(empty($newlang)?$langs->defaultlang:$newlang);
|
|
$formmail->fromtype = 'user';
|
|
$formmail->fromid = $user->id;
|
|
$formmail->fromname = $user->getFullName($langs);
|
|
$formmail->frommail = $user->email;
|
|
$formmail->trackid='int'.$object->id;
|
|
if (! empty($conf->global->MAIN_EMAIL_ADD_TRACK_ID) && ($conf->global->MAIN_EMAIL_ADD_TRACK_ID & 2)) // If bit 2 is set
|
|
{
|
|
include DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
|
$formmail->frommail=dolAddEmailTrackId($formmail->frommail, 'int'.$object->id);
|
|
}
|
|
$formmail->withfrom=1;
|
|
$liste=array();
|
|
foreach ($object->thirdparty->thirdparty_and_contact_email_array(1) as $key=>$value) $liste[$key]=$value;
|
|
$formmail->withto=GETPOST("sendto")?GETPOST("sendto"):$liste;
|
|
$formmail->withtocc=$liste;
|
|
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
|
|
$formmail->withtopic=$outputlangs->trans('SendInterventionRef','__FICHINTERREF__');
|
|
$formmail->withfile=2;
|
|
$formmail->withbody=1;
|
|
$formmail->withdeliveryreceipt=1;
|
|
$formmail->withcancel=1;
|
|
|
|
// Tableau des substitutions
|
|
$formmail->setSubstitFromObject($object);
|
|
$formmail->substit['__FICHINTERREF__']=$object->ref;
|
|
|
|
//Find the good contact adress
|
|
$custcontact='';
|
|
$contactarr=array();
|
|
$contactarr=$object->liste_contact(-1,'external');
|
|
|
|
if (is_array($contactarr) && count($contactarr)>0) {
|
|
foreach($contactarr as $contact) {
|
|
if ($contact['libelle']==$langs->trans('TypeContact_fichinter_external_CUSTOMER')) {
|
|
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
|
$contactstatic=new Contact($db);
|
|
$contactstatic->fetch($contact['id']);
|
|
$custcontact=$contactstatic->getFullName($langs,1);
|
|
}
|
|
}
|
|
|
|
if (!empty($custcontact)) {
|
|
$formmail->substit['__CONTACTCIVNAME__']=$custcontact;
|
|
}
|
|
}
|
|
|
|
// Tableau des parametres complementaires
|
|
$formmail->param['action']='send';
|
|
$formmail->param['models']='fichinter_send';
|
|
$formmail->param['models_id']=GETPOST('modelmailselected','int');
|
|
$formmail->param['fichinter_id']=$object->id;
|
|
$formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id;
|
|
|
|
// Init list of files
|
|
if (GETPOST("mode")=='init')
|
|
{
|
|
$formmail->clear_attached_files();
|
|
$formmail->add_attached_files($file,basename($file),dol_mimetype($file));
|
|
}
|
|
|
|
print $formmail->get_form();
|
|
|
|
dol_fiche_end();
|
|
}
|
|
}
|
|
|
|
|
|
llxFooter();
|
|
|
|
$db->close();
|