From f233d4f6109d52be45dd446ee526cb8c4ff75f9a Mon Sep 17 00:00:00 2001 From: Regis Houssin <regis.houssin@capnetworks.com> Date: Sun, 28 Sep 2014 20:39:02 +0200 Subject: [PATCH] New: add doc models management in contract module --- htdocs/admin/contract.php | 35 +++- htdocs/contrat/card.php | 155 ++++++++++-------- htdocs/contrat/class/contrat.class.php | 36 +++- htdocs/core/class/html.formfile.class.php | 9 + .../install/mysql/migration/3.6.0-3.7.0.sql | 2 + htdocs/install/mysql/tables/llx_contrat.sql | 3 +- 6 files changed, 165 insertions(+), 75 deletions(-) diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php index 4c3ee7207df..2abb2b5acad 100644 --- a/htdocs/admin/contract.php +++ b/htdocs/admin/contract.php @@ -35,8 +35,9 @@ if (!$user->admin) accessforbidden(); $action = GETPOST('action','alpha'); $value = GETPOST('value','alpha'); +$label = GETPOST('label','alpha'); $scandir = GETPOST('scandir','alpha'); -$type='contrat'; +$type='contract'; if (empty($conf->global->CONTRACT_ADDON)) { @@ -111,6 +112,35 @@ else if ($action == 'specimen') // For contract } } +// Define constants for submodules that contains parameters (forms with param1, param2, ... and value1, value2, ...) +if ($action == 'setModuleOptions') +{ + $post_size=count($_POST); + + $db->begin(); + + for($i=0;$i < $post_size;$i++) + { + if (array_key_exists('param'.$i,$_POST)) + { + $param=GETPOST("param".$i,'alpha'); + $value=GETPOST("value".$i,'alpha'); + if ($param) $res = dolibarr_set_const($db,$param,$value,'chaine',0,'',$conf->entity); + if (! $res > 0) $error++; + } + } + if (! $error) + { + $db->commit(); + setEventMessage($langs->trans("SetupSaved")); + } + else + { + $db->rollback(); + setEventMessage($langs->trans("Error"),'errors'); + } +} + // Activate a model else if ($action == 'set') { @@ -192,7 +222,7 @@ else if ($action == 'set_CONTRACT_DRAFT_WATERMARK') */ $dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); - + llxHeader(); $form=new Form($db); @@ -318,7 +348,6 @@ print '</table><br>'; print_titre($langs->trans("TemplatePDFContracts")); // Defini tableau def des modeles -$type='contrat'; $def = array(); $sql = "SELECT nom"; $sql.= " FROM ".MAIN_DB_PREFIX."document_model"; diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 5cb25a5bed4..c4596c96a76 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -1,7 +1,7 @@ <?php /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net> - * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2005-2014 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> * Copyright (C) 2010-2014 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2013 Christophe Battarel <christophe.battarel@altairis.fr> @@ -29,17 +29,18 @@ */ require ("../main.inc.php"); -require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; -require_once DOL_DOCUMENT_ROOT.'/core/modules/contract/modules_contract.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; -if (! empty($conf->produit->enabled) || ! empty($conf->service->enabled)) require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; -if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/contract.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/modules/contract/modules_contract.php'; +require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php'; +if (! empty($conf->produit->enabled) || ! empty($conf->service->enabled)) require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; +if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.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'; + require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php'; } require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; @@ -70,6 +71,15 @@ $hookmanager->initHooks(array('contractcard')); $object = new Contrat($db); $extrafields = new ExtraFields($db); +// 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); +} + // fetch optionals attributes and labels $extralabels = $extrafields->fetch_name_optionals_label($object->table_element); @@ -84,7 +94,6 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, if ($action == 'confirm_active' && $confirm == 'yes' && $user->rights->contrat->activer) { - $object->fetch($id); $result = $object->active_line($user, GETPOST('ligne'), GETPOST('date'), GETPOST('dateend'), GETPOST('comment')); if ($result > 0) @@ -106,7 +115,6 @@ else if ($action == 'confirm_closeline' && $confirm == 'yes' && $user->rights->c } if (! $error) { - $object->fetch($id); $result = $object->close_line($user, GETPOST('ligne'), GETPOST('dateend'), urldecode(GETPOST('comment'))); if ($result > 0) { @@ -363,7 +371,6 @@ if ($action == 'add' && $user->rights->contrat->creer) else if ($action == 'classin' && $user->rights->contrat->creer) { - $object->fetch($id); $object->setProject(GETPOST('projectid')); } @@ -402,14 +409,6 @@ else if ($action == 'addline' && $user->rights->contrat->creer) if (! $error) { - $ret=$object->fetch($id); - if ($ret < 0) - { - setEventMessage($object->error,'errors'); - exit; - } - $ret=$object->fetch_thirdparty(); - // Clean parameters $date_start=dol_mktime(GETPOST('date_start'.$predef.'hour'), GETPOST('date_start'.$predef.'min'), GETPOST('date_start'.$predef.'sec'), GETPOST('date_start'.$predef.'month'), GETPOST('date_start'.$predef.'day'), GETPOST('date_start'.$predef.'year')); $date_end=dol_mktime(GETPOST('date_end'.$predef.'hour'), GETPOST('date_end'.$predef.'min'), GETPOST('date_end'.$predef.'sec'), GETPOST('date_end'.$predef.'month'), GETPOST('date_end'.$predef.'day'), GETPOST('date_end'.$predef.'year')); @@ -584,14 +583,6 @@ else if ($action == 'addline' && $user->rights->contrat->creer) else if ($action == 'updateligne' && $user->rights->contrat->creer && ! GETPOST('cancel')) { - $ret=$object->fetch($id); - if ($ret < 0) - { - dol_print_error($db,$object->error); - exit; - } - - $object->fetch_thirdparty(); $objectline = new ContratLigne($db); if ($objectline->fetch(GETPOST('elrowid'))) { @@ -647,7 +638,6 @@ else if ($action == 'updateligne' && $user->rights->contrat->creer && ! GETPOST( else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->contrat->creer) { - $object->fetch($id); $result = $object->deleteline(GETPOST('lineid'),$user); if ($result >= 0) @@ -663,21 +653,17 @@ else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights-> else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->contrat->creer) { - $object->fetch($id); $result = $object->validate($user); } // Close all lines else if ($action == 'confirm_close' && $confirm == 'yes' && $user->rights->contrat->creer) { - $object->fetch($id); $result = $object->cloture($user); } else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->contrat->supprimer) { - $object->fetch($id); - $object->fetch_thirdparty(); $result=$object->delete($user); if ($result >= 0) { @@ -714,7 +700,6 @@ else if ($action == 'confirm_move' && $confirm == 'yes' && $user->rights->contra } } else if ($action == 'update_extras') { // Fill array 'array_options' with data from update form - $object->fetch($id); $extralabels = $extrafields->fetch_name_optionals_label($object->table_element); $ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute')); if ($ret < 0) @@ -734,10 +719,6 @@ else if ($action == 'confirm_move' && $confirm == 'yes' && $user->rights->contra setEventMessage($object->error,'errors'); } } elseif ($action=='setref_customer') { - $result = $object->fetch($id); - if ($result < 0) { - setEventMessage($object->errors,'errors'); - } $object->ref_customer=GETPOST('ref_customer','alpha'); $result = $object->update($user); @@ -749,10 +730,6 @@ else if ($action == 'confirm_move' && $confirm == 'yes' && $user->rights->contra exit; } } elseif ($action=='setref') { - $result = $object->fetch($id); - if ($result < 0) { - setEventMessage($object->errors,'errors'); - } $object->ref=GETPOST('ref','alpha'); $result = $object->update($user); @@ -765,17 +742,53 @@ else if ($action == 'confirm_move' && $confirm == 'yes' && $user->rights->contra } } +// Generation doc (depuis lien ou depuis cartouche doc) +else if ($action == 'builddoc' && $user->rights->contrat->creer) { + if (GETPOST('model')) { + $object->setDocModel($user, GETPOST('model')); + } + + // Define output language + $outputlangs = $langs; + if (! empty($conf->global->MAIN_MULTILANGS)) { + $outputlangs = new Translate("", $conf); + $newlang = (GETPOST('lang_id') ? GETPOST('lang_id') : $object->thirdparty->default_lang); + $outputlangs->setDefaultLang($newlang); + } + $ret = $object->fetch($id); // Reload to get new records + $result = $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); + + if ($result <= 0) { + dol_print_error($db, $result); + exit(); + } else { + header('Location: ' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (empty($conf->global->MAIN_JUMP_TAG) ? '' : '#builddoc')); + exit(); + } +} + +// Remove file in doc form +else if ($action == 'remove_file' && $user->rights->contrat->creer) { + if ($object->id > 0) { + require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; + + $langs->load("other"); + $upload_dir = $conf->contrat->dir_output; + $file = $upload_dir . '/' . GETPOST('file'); + $ret = dol_delete_file($file, 0, 0, 0, $object); + if ($ret) + setEventMessage($langs->trans("FileWasRemoved", GETPOST('file'))); + else + setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('file')), 'errors'); + } +} + if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->contrat->creer) { if ($action == 'addcontact') { - $result = $object->fetch($id); - - if ($result > 0 && $id > 0) - { - $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); - $result = $object->add_contact($contactid, GETPOST('type'), GETPOST('source')); - } + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $object->add_contact($contactid, GETPOST('type'), GETPOST('source')); if ($result >= 0) { @@ -799,20 +812,12 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->contrat- // bascule du statut d'un contact else if ($action == 'swapstatut') { - if ($object->fetch($id)) - { - $result=$object->swapContactStatus(GETPOST('ligne')); - } - else - { - setEventMessage($object->error,'errors'); - } + $result=$object->swapContactStatus(GETPOST('ligne')); } // Efface un contact else if ($action == 'deletecontact') { - $object->fetch($id); $result = $object->delete_contact(GETPOST('lineid')); if ($result >= 0) @@ -834,6 +839,7 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->contrat- llxHeader('',$langs->trans("ContractCard"),"Contrat"); $form = new Form($db); +$formfile = new FormFile($db); $objectlignestatic=new ContratLigne($db); @@ -1032,14 +1038,10 @@ else { $now=dol_now(); - if ($id > 0 || ! empty($ref)) + if ($object->id > 0) { - $result=$object->fetch($id,$ref); - if ($result < 0) dol_print_error($db,$object->error); $result=$object->fetch_lines(); // This also init $this->nbofserviceswait, $this->nbofservicesopened, $this->nbofservicesexpired=, $this->nbofservicesclosed if ($result < 0) dol_print_error($db,$object->error); - $result=$object->fetch_thirdparty(); - if ($result < 0) dol_print_error($db,$object->error); $nbofservices=count($object->lines); @@ -1793,16 +1795,29 @@ else print "</div>"; } + print '<div class="fichecenter"><div class="fichehalfleft">'; - print '<table width="100%"><tr><td width="50%" valign="top">'; + /* + * Documents generes + */ + $filename = dol_sanitizeFileName($object->ref); + $filedir = $conf->contrat->dir_output . "/" . dol_sanitizeFileName($object->ref); + $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id; + $genallowed = $user->rights->contrat->creer; + $delallowed = $user->rights->contrat->supprimer; + + $var = true; + + $somethingshown = $formfile->show_documents('contract', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', 0, '', $soc->default_lang); /* * Linked object block - */ - $somethingshown=$object->showLinkedObjectBlock(); + */ + $somethingshown = $object->showLinkedObjectBlock(); + + print '</div><div class="fichehalfright"><div class="ficheaddleft">'; - print '</td><td valign="top" width="50%">'; - print '</td></tr></table>'; + print '</div></div></div>'; } } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0a71f9eee2e..bb7e4b7ec02 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -744,7 +744,7 @@ class Contrat extends CommonObject $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."contrat"); - + // Load object modContract $module=(! empty($conf->global->CONTRACT_ADDON)?$conf->global->CONTRACT_ADDON:'mod_contract_olive'); if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') @@ -1866,6 +1866,40 @@ class Contrat extends CommonObject $this->total_tva = $xnbp*19.6; $this->total_ttc = $xnbp*119.6; } + + /** + * Create a document onto disk according to template module. + * + * @param string $modele Force model to use ('' to not force) + * @param Translate $outputlangs Object langs to use for output + * @param int $hidedetails Hide details of lines + * @param int $hidedesc Hide description + * @param int $hideref Hide ref + * @return int 0 if KO, 1 if OK + */ + public function generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0) + { + global $conf,$user,$langs; + + $langs->load("contracts"); + + // Positionne le modele sur le nom du modele a utiliser + if (! dol_strlen($modele)) + { + if (! empty($conf->global->CONTRACT_ADDON_PDF)) + { + $modele = $conf->global->CONTRACT_ADDON_PDF; + } + else + { + $modele = 'strato'; + } + } + + $modelpath = "core/modules/contract/doc/"; + + return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref); + } } diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 447f96ff61c..e473fdc3d98 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -355,6 +355,15 @@ class FormFile $modellist=ModelePDFFactures::liste_modeles($this->db); } } + elseif ($modulepart == 'contract') + { + if (is_array($genallowed)) $modellist=$genallowed; + else + { + include_once DOL_DOCUMENT_ROOT.'/core/modules/contract/modules_contract.php'; + $modellist=ModelePDFContract::liste_modeles($this->db); + } + } elseif ($modulepart == 'project') { if (is_array($genallowed)) $modellist=$genallowed; diff --git a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql index 9e109cd311f..778b3f2b9ff 100644 --- a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql +++ b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql @@ -1083,3 +1083,5 @@ CREATE TABLE llx_usergroup_extrafields ( ) ENGINE=innodb; ALTER TABLE llx_usergroup_extrafields ADD INDEX idx_usergroup_extrafields (fk_object); + +ALTER TABLE llx_contrat ADD COLUMN model_pdf varchar(255) DEFAULT NULL AFTER note_public; diff --git a/htdocs/install/mysql/tables/llx_contrat.sql b/htdocs/install/mysql/tables/llx_contrat.sql index 496ecd4c97d..4631b660d46 100644 --- a/htdocs/install/mysql/tables/llx_contrat.sql +++ b/htdocs/install/mysql/tables/llx_contrat.sql @@ -1,7 +1,7 @@ -- ============================================================================ -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> -- Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> --- Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> +-- Copyright (C) 2005-2014 Regis Houssin <regis.houssin@capnetworks.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 @@ -40,6 +40,7 @@ create table llx_contrat fk_user_cloture integer, note_private text, note_public text, + model_pdf varchar(255), import_key varchar(14), extraparams varchar(255) -- GitLab