From 9507f4258b297c7516ff2df633dd84aa6fdee973 Mon Sep 17 00:00:00 2001 From: fhenry Date: Tue, 26 Mar 2013 23:32:22 +0100 Subject: [PATCH 1/2] Add inforamtion on Project into ODT project --- .../pdf/doc_generic_project_odt.modules.php | 707 +++++++++++++----- .../doctemplates/project/template_project.odt | Bin 25790 -> 28586 bytes 2 files changed, 508 insertions(+), 199 deletions(-) diff --git a/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php b/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php index 7ba6defaa3b..a1aa87366d9 100644 --- a/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php +++ b/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php @@ -1,36 +1,49 @@ * Copyright (C) 2012 Juanjo Menent - * Copyright (C) 2013 Florian Henry - * - * 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 . - * or see http://www.gnu.org/ - */ +* Copyright (C) 2013 Florian Henry +* +* 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 . +* or see http://www.gnu.org/ +*/ /** * \file htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php - * \ingroup commande + * \ingroup project * \brief File of class to build ODT documents for third parties - */ +*/ require_once DOL_DOCUMENT_ROOT.'/core/modules/project/modules_project.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php'; +require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; +require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; +if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; +if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; +if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture-rec.class.php'; +if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; +if (! empty($conf->fournisseur->enabled)) require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; +if (! empty($conf->fournisseur->enabled)) require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; +if (! empty($conf->contrat->enabled)) require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; +if (! empty($conf->ficheinter->enabled)) require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php'; +if (! empty($conf->deplacement->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/deplacement/class/deplacement.class.php'; +if (! empty($conf->agenda->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; /** @@ -88,64 +101,129 @@ class doc_generic_project_odt extends ModelePDFProjects } - /** - * Define array with couple substitution key => substitution value - * - * @param Object $object Main object to use as data source - * @param Translate $outputlangs Lang object to use for output - * @return array Array of substitution - */ - function get_substitutionarray_object($object,$outputlangs) - { - global $conf; - dol_syslog(get_class($this)."::get_substitutionarray_object object=".var_export($object,true), LOG_DEBUG); - return array( - 'object_id'=>$object->id, - 'object_ref'=>$object->ref, - 'object_title'=>$object->title, - 'object_description'=>$object->description, - 'object_date_creation'=>dol_print_date($object->date_c,'day'), - 'object_date_modification'=>dol_print_date($object->date_m,'day'), - 'object_date_start'=>dol_print_date($object->date_start,'day'), - 'object_date_end'=>dol_print_date($object->date_end,'day'), - 'object_note_private'=>$object->note_private, - 'object_note_public'=>$object->note_public, - 'object_public'=>$object->public, - 'object_statut'=>$object->getLibStatut() - ); - } + /** + * Define array with couple substitution key => substitution value + * + * @param Object $object Main object to use as data source + * @param Translate $outputlangs Lang object to use for output + * @return array Array of substitution + */ + function get_substitutionarray_object($object,$outputlangs) + { + global $conf; - /** - * Define array with couple substitution key => substitution value - * - * @param array $line Array of lines - * @param Translate $outputlangs Lang object to use for output - * @return array Return a substitution array - */ - function get_substitutionarray_lines($line,$outputlangs) - { - global $conf; + return array( + 'object_id'=>$object->id, + 'object_ref'=>$object->ref, + 'object_title'=>$object->title, + 'object_description'=>$object->description, + 'object_date_creation'=>dol_print_date($object->date_c,'day'), + 'object_date_modification'=>dol_print_date($object->date_m,'day'), + 'object_date_start'=>dol_print_date($object->date_start,'day'), + 'object_date_end'=>dol_print_date($object->date_end,'day'), + 'object_note_private'=>$object->note_private, + 'object_note_public'=>$object->note_public, + 'object_public'=>$object->public, + 'object_statut'=>html_entity_decode($object->getLibStatut()) + ); + } + + /** + * Define array with couple substitution key => substitution value + * + * @param array $task Task Object + * @param Translate $outputlangs Lang object to use for output + * @return array Return a substitution array + */ + function get_substitutionarray_tasks($task,$outputlangs) + { + global $conf; + + return array( + 'task_ref'=>$task->ref, + 'task_fk_project'=>$task->fk_project, + 'task_projectref'=>$task->projectref, + 'task_projectlabel'=>$task->projectlabel, + 'task_label'=>$task->label, + 'task_description'=>$task->description, + 'task_fk_parent'=>$task->fk_parent, + 'task_duration'=>$task->duration, + 'task_progress'=>$task->progress, + 'task_public'=>$task->public, + 'task_date_start'=>dol_print_date($task->date_start,'day'), + 'task_date_end'=>dol_print_date($task->date_end,'day') + ); + } + + /** + * Define array with couple substitution key => substitution value + * + * @param array $contact Contact array + * @param Translate $outputlangs Lang object to use for output + * @return array Return a substitution array + */ + function get_substitutionarray_project_contacts($contact,$outputlangs) + { + global $conf; + + return array( + 'projcontacts_id'=>$contact['id'], + 'projcontacts_rowid'=>$contact['rowid'], + 'projcontacts_role'=>$contact['libelle'], + 'projcontacts_lastname'=>$contact['lastname'], + 'projcontacts_firstname'=>$contact['firstname'], + 'projcontacts_fullcivname'=>$contact['fullname'], + 'projcontacts_socname'=>$contact['socname'], + 'projcontacts_email'=>$contact['email'] + ); + } + + /** + * Define array with couple substitution key => substitution value + * + * @param array $file file array + * @param Translate $outputlangs Lang object to use for output + * @return array Return a substitution array + */ + function get_substitutionarray_project_file($file,$outputlangs) + { + global $conf; + + return array( + 'projfile_name'=>$file['name'], + 'projfile_date'=>dol_print_date($file['date'],'day'), + 'projfile_size'=>$file['size'] + ); + } + + /** + * Define array with couple substitution key => substitution value + * + * @param array $refdetail Reference array + * @param Translate $outputlangs Lang object to use for output + * @return array Return a substitution array + */ + function get_substitutionarray_project_reference($refdetail,$outputlangs) + { + global $conf; + + return array( + 'projref_type'=>$refdetail['type'], + 'projref_ref'=>$refdetail['ref'], + 'projref_date'=>dol_print_date($refdetail['date'],'day'), + 'projref_socname'=>$refdetail['socname'], + 'projref_amountht'=>price($refdetail['amountht'],0,$outputlangs), + 'projref_amountttc'=>price($refdetail['amountttc'],0,$outputlangs), + 'projref_status'=>$refdetail['status'] + ); + } + - return array( - 'line_ref'=>$line->ref, - 'line_fk_project'=>$line->fk_project, - 'line_projectref'=>$line->projectref, - 'line_projectlabel'=>$line->projectlabel, - 'line_label'=>$line->label, - 'line_description'=>$line->description, - 'line_fk_parent'=>$line->fk_parent, - 'line_duration'=>$line->duration, - 'line_progress'=>$line->progress, - 'line_public'=>$line->public, - 'line_date_start'=>dol_print_date($line->date_start,'day'), - 'line_date_end'=>dol_print_date($line->date_end,'day') - ); - } /** * Return description of a module * - * @param Translate $langs Lang object to use for output + * @param Translate $langs Lang object to use for output * @return string Description */ function info($langs) @@ -173,7 +251,9 @@ class doc_generic_project_odt extends ModelePDFProjects { $tmpdir=trim($tmpdir); $tmpdir=preg_replace('/DOL_DATA_ROOT/',DOL_DATA_ROOT,$tmpdir); - if (! $tmpdir) { unset($listofdir[$key]); continue; } + if (! $tmpdir) { + unset($listofdir[$key]); continue; + } if (! is_dir($tmpdir)) $texttitle.=img_warning($langs->trans("ErrorDirNotFound",$tmpdir),0); else { @@ -184,19 +264,19 @@ class doc_generic_project_odt extends ModelePDFProjects $texthelp=$langs->trans("ListOfDirectoriesForModelGenODT"); // Add list of substitution keys $texthelp.='
'.$langs->trans("FollowingSubstitutionKeysCanBeUsed").'
'; - $texthelp.=$langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it + $texthelp.=$langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it $texte.= $form->textwithpicto($texttitle,$texthelp,1,'help','',1); $texte.= ''; + $texte.= ''; $texte.= ''; + $texte.= ''; + $texte.= ''; $texte.= ''; - $texte.= '
'; $texte.= ''; - $texte.= '  '; - $texte.= ''; - $texte.= '
'; + $texte.= ''; // Scan directories if (count($listofdir)) $texte.=$langs->trans("NumberOfModelFilesFound").': '.count($listoffiles).''; @@ -210,7 +290,7 @@ class doc_generic_project_odt extends ModelePDFProjects $texte.= ''; /*$texte.= ''; - $texte.= ''; + $texte.= ''; $texte.= ''; $texte.= ''; $texte.= '';*/ @@ -232,7 +312,7 @@ class doc_generic_project_odt extends ModelePDFProjects function write_file($object,$outputlangs,$srctemplatepath) { global $user,$langs,$conf,$mysoc; - + if (empty($srctemplatepath)) { dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); @@ -247,7 +327,7 @@ class doc_generic_project_odt extends ModelePDFProjects $outputlangs->load("dict"); $outputlangs->load("companies"); $outputlangs->load("projects"); - + if ($conf->projet->dir_output) { // If $object is id instead of object @@ -284,7 +364,7 @@ class doc_generic_project_odt extends ModelePDFProjects $newfiletmp=preg_replace('/\.odt/i','',$newfile); $newfiletmp=preg_replace('/template_/i','',$newfiletmp); $newfiletmp=preg_replace('/modele_/i','',$newfiletmp); - $newfiletmp=$objectref.'_'.$newfiletmp; + $newfiletmp=$objectref.'_'.$newfiletmp; //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt'; $file=$dir.'/'.$newfiletmp.'.odt'; //print "newdir=".$dir; @@ -293,66 +373,59 @@ class doc_generic_project_odt extends ModelePDFProjects //print "conf->societe->dir_temp=".$conf->societe->dir_temp; dol_mkdir($conf->projet->dir_temp); - - - // List of all contact - $usecontact=false; - $arrayidcontact=$object->liste_contact(-1,'internal'); - if (count($arrayidcontact) > 0) - { - $usecontact=true; - $result=$object->fetch_contact($arrayidcontact[0]['id']); - } - - $socobject=$object->thirdparty; - - // Make substitution - $substitutionarray=array( - '__FROM_NAME__' => $this->emetteur->nom, - '__FROM_EMAIL__' => $this->emetteur->email, - ); - complete_substitutions_array($substitutionarray, $langs, $object); - - // Open and load template + + $socobject=$object->thirdparty; + + // Make substitution + $substitutionarray=array( + '__FROM_NAME__' => $this->emetteur->nom, + '__FROM_EMAIL__' => $this->emetteur->email, + ); + complete_substitutions_array($substitutionarray, $langs, $object); + + // Open and load template require_once ODTPHP_PATH.'odf.php'; $odfHandler = new odf( - $srctemplatepath, - array( - 'PATH_TO_TMP' => $conf->projet->dir_temp, - 'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy. - 'DELIMITER_LEFT' => '{', - 'DELIMITER_RIGHT' => '}' + $srctemplatepath, + array( + 'PATH_TO_TMP' => $conf->projet->dir_temp, + 'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy. + 'DELIMITER_LEFT' => '{', + 'DELIMITER_RIGHT' => '}' ) ); // After construction $odfHandler->contentXml contains content and // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by // [!-- BEGIN lines --]*[!-- END lines --] - //print html_entity_decode($odfHandler->__toString()); - //print exit; + //print html_entity_decode($odfHandler->__toString()); + //print exit; - // Make substitutions into odt of user info + + + + // Make substitutions into odt of user info $tmparray=$this->get_substitutionarray_user($user,$outputlangs); - //var_dump($tmparray); exit; - foreach($tmparray as $key=>$value) - { - try { - if (preg_match('/logo$/',$key)) // Image - { - //var_dump($value);exit; - if (file_exists($value)) $odfHandler->setImage($key, $value); - else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); - } - else // Text - { - $odfHandler->setVars($key, $value, true, 'UTF-8'); - } - } - catch(OdfException $e) - { - } - } - // Make substitutions into odt of mysoc - $tmparray=$this->get_substitutionarray_mysoc($mysoc,$outputlangs); + //var_dump($tmparray); exit; + foreach($tmparray as $key=>$value) + { + try { + if (preg_match('/logo$/',$key)) // Image + { + //var_dump($value);exit; + if (file_exists($value)) $odfHandler->setImage($key, $value); + else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); + } + else // Text + { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + } + catch(OdfException $e) + { + } + } + // Make substitutions into odt of mysoc + $tmparray=$this->get_substitutionarray_mysoc($mysoc,$outputlangs); //var_dump($tmparray); exit; foreach($tmparray as $key=>$value) { @@ -372,8 +445,8 @@ class doc_generic_project_odt extends ModelePDFProjects { } } - - // Make substitutions into odt of thirdparty + + // Make substitutions into odt of thirdparty $tmparray=$this->get_substitutionarray_thirdparty($socobject,$outputlangs); foreach($tmparray as $key=>$value) { @@ -392,75 +465,312 @@ class doc_generic_project_odt extends ModelePDFProjects { } } - - // Replace tags of object + external modules - $tmparray=$this->get_substitutionarray_object($object,$outputlangs); - complete_substitutions_array($tmparray, $outputlangs, $object); - foreach($tmparray as $key=>$value) - { - try { - if (preg_match('/logo$/',$key)) // Image - { - if (file_exists($value)) $odfHandler->setImage($key, $value); - else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); - } - else // Text - { - $odfHandler->setVars($key, $value, true, 'UTF-8'); - } - } - catch(OdfException $e) - { - } - } - - // Replace tags of lines - try - { - $listlines = $odfHandler->setSegment('lines'); - - $taskstatic = new Task($this->db); - - // Security check - $socid=0; - if (!empty($object->fk_soc)) $socid = $object->fk_soc; - - $tasksarray=$taskstatic->getTasksArray(0, 0, $object->id, $socid, 0); - - foreach ($tasksarray as $task) - { - $tmparray=$this->get_substitutionarray_lines($task,$outputlangs); - complete_substitutions_array($tmparray, $outputlangs, $object, $task, "completesubstitutionarray_lines"); - foreach($tmparray as $key => $val) - { - try - { - $listlines->setVars($key, $val, true, 'UTF-8'); - } - catch(OdfException $e) - { - } - catch(SegmentException $e) - { - } - } - $listlines->merge(); - } - $odfHandler->mergeSegment($listlines); - } - catch(OdfException $e) - { - $this->error=$e->getMessage(); - dol_syslog($this->error, LOG_WARNING); - return -1; - } - // Write new file + // Replace tags of object + external modules + $tmparray=$this->get_substitutionarray_object($object,$outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $object); + foreach($tmparray as $key=>$value) + { + try { + if (preg_match('/logo$/',$key)) // Image + { + if (file_exists($value)) $odfHandler->setImage($key, $value); + else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); + } + else // Text + { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + } + catch(OdfException $e) + { + } + } + + // Replace tags of lines for tasks + try + { + $listlines = $odfHandler->setSegment('tasks'); + + $taskstatic = new Task($this->db); + + // Security check + $socid=0; + if (!empty($object->fk_soc)) $socid = $object->fk_soc; + + $tasksarray=$taskstatic->getTasksArray(0, 0, $object->id, $socid, 0); + + + + foreach ($tasksarray as $task) + { + $tmparray=$this->get_substitutionarray_tasks($task,$outputlangs); + //complete_substitutions_array($tmparray, $outputlangs, $object, $task, "completesubstitutionarray_lines"); + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); + } + catch(OdfException $e) + { + $this->error=$e->getMessage(); + dol_syslog($this->error, LOG_WARNING); + return -1; + } + + // Replace tags of project files + try + { + $listlines = $odfHandler->setSegment('projectfiles'); + + $upload_dir = $conf->projet->dir_output.'/'.dol_sanitizeFileName($object->ref); + $filearray=dol_dir_list($upload_dir,"files",0,'','\.meta$','name',SORT_ASC,1); + + + foreach ($filearray as $filedetail) + { + //dol_syslog(get_class($this).'::ee $filedetail'.var_export($filedetail,true)); + $tmparray=$this->get_substitutionarray_project_file($filedetail,$outputlangs); + + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); + } + catch(OdfException $e) + { + $this->error=$e->getMessage(); + dol_syslog($this->error, LOG_WARNING); + return -1; + } + + // Replace tags of lines for contacts + $sourcearray=array('internal','external'); + $contact_arrray=array(); + foreach ($sourcearray as $source) { + $contact_temp=$object->liste_contact(-1,$source); + if ((is_array($contact_temp) && count($contact_temp) > 0)) + { + $contact_arrray=array_merge($contact_arrray,$contact_temp); + } + } + if ((is_array($contact_arrray) && count($contact_arrray) > 0)) + { + try + { + $listlines = $odfHandler->setSegment('projectcontacts'); + + foreach ($contact_arrray as $contact) + { + if ($contact['source']=='internal') { + $objectdetail=new User($this->db); + $objectdetail->fetch($contact['id']); + $contact['socname']=$mysoc->name; + } elseif ($contact['source']=='external') { + $objectdetail=new Contact($this->db); + $objectdetail->fetch($contact['id']); + + $soc=new Societe($this->db); + $soc->fetch($contact['socid']); + $contact['socname']=$soc->name; + } + $contact['fullname']=$objectdetail->getFullName($outputlangs,1); + + $tmparray=$this->get_substitutionarray_project_contacts($contact,$outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $contact, $contact, "completesubstitutionarray_lines"); + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); + } + catch(OdfException $e) + { + $this->error=$e->getMessage(); + dol_syslog($this->error, LOG_WARNING); + return -1; + } + } + + //List of referent + + $listofreferent=array( + 'propal'=>array( + 'title'=>"ListProposalsAssociatedProject", + 'class'=>'Propal', + 'test'=>$conf->propal->enabled), + 'order'=>array( + 'title'=>"ListOrdersAssociatedProject", + 'class'=>'Commande', + 'test'=>$conf->commande->enabled), + 'invoice'=>array( + 'title'=>"ListInvoicesAssociatedProject", + 'class'=>'Facture', + 'test'=>$conf->facture->enabled), + 'invoice_predefined'=>array( + 'title'=>"ListPredefinedInvoicesAssociatedProject", + 'class'=>'FactureRec', + 'test'=>$conf->facture->enabled), + 'order_supplier'=>array( + 'title'=>"ListSupplierOrdersAssociatedProject", + 'class'=>'CommandeFournisseur', + 'test'=>$conf->fournisseur->enabled), + 'invoice_supplier'=>array( + 'title'=>"ListSupplierInvoicesAssociatedProject", + 'class'=>'FactureFournisseur', + 'test'=>$conf->fournisseur->enabled), + 'contract'=>array( + 'title'=>"ListContractAssociatedProject", + 'class'=>'Contrat', + 'test'=>$conf->contrat->enabled), + 'intervention'=>array( + 'title'=>"ListFichinterAssociatedProject", + 'class'=>'Fichinter', + 'disableamount'=>1, + 'test'=>$conf->ficheinter->enabled), + 'trip'=>array( + 'title'=>"ListTripAssociatedProject", + 'class'=>'Deplacement', + 'disableamount'=>1, + 'test'=>$conf->deplacement->enabled), + 'agenda'=>array( + 'title'=>"ListActionsAssociatedProject", + 'class'=>'ActionComm', + 'disableamount'=>1, + 'test'=>$conf->agenda->enabled) + ); + + //Inser refenrence + try + { + $listlines = $odfHandler->setSegment('projectrefs'); + + foreach ($listofreferent as $keyref => $valueref) + { + $title=$valueref['title']; + $classname=$valueref['class']; + $qualified=$valueref['test']; + if ($qualified) + { + $elementarray = $object->get_element_list($keyref); + if (count($elementarray)>0 && is_array($elementarray)) + { + $var=true; + $total_ht = 0; + $total_ttc = 0; + $num=count($elementarray); + for ($i = 0; $i < $num; $i++) + { + $ref_array=array(); + $ref_array['type']=$langs->trans($classname); + + $element = new $classname($this->db); + $element->fetch($elementarray[$i]); + $element->fetch_thirdparty(); + + //Ref object + $ref_array['ref']=$element->ref; + + //Date object + $dateref=$element->date; + if (empty($dateref)) $dateref=$element->datep; + if (empty($dateref)) $dateref=$element->date_contrat; + $ref_array['date']=$dateref; + + //Soc object + if (is_object($element->thirdparty)) { + $ref_array['socname']=$element->thirdparty->name; + } else { + $ref_array['socname']=''; + } + + //Amount object + if (empty($valueref['disableamount'])) { + if (!empty($element->total_ht)) { + $ref_array['amountht']=$element->total_ht; + $ref_array['amountttc']=$element->total_ttc; + }else { + $ref_array['amountht']=0; + $ref_array['amountttc']=0; + } + }else { + $ref_array['amountht']=''; + $ref_array['amountttc']=''; + } + + $ref_array['status']=html_entity_decode($element->getLibStatut(0)); + + $tmparray=$this->get_substitutionarray_project_reference($ref_array,$outputlangs); + + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlines->merge(); + } + + } + } + $odfHandler->mergeSegment($listlines); + } + } + catch(OdfException $e) + { + $this->error=$e->getMessage(); + dol_syslog($this->error, LOG_WARNING); + return -1; + } + + // Write new file //$result=$odfHandler->exportAsAttachedFile('toto'); $odfHandler->saveToDisk($file); if (! empty($conf->global->MAIN_UMASK)) - @chmod($file, octdec($conf->global->MAIN_UMASK)); + @chmod($file, octdec($conf->global->MAIN_UMASK)); $odfHandler=null; // Destroy object @@ -477,5 +787,4 @@ class doc_generic_project_odt extends ModelePDFProjects } } - -?> +?> \ No newline at end of file diff --git a/htdocs/install/doctemplates/project/template_project.odt b/htdocs/install/doctemplates/project/template_project.odt index fcf5f52d80126f4af6bd2ecb629f5721a5b606f1..ff34277a48c52325be4902df3ed9b9a9bf6056ad 100755 GIT binary patch delta 25734 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 YEBHMoc>k&wU=K;QqC+@z_*44-0RNeJwg3PC delta 22888 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 R8E%a5b!5GNWAdx_{{g*SHGBX7 From 6494764e764f1d589e2146ed10bae5e3c3d02c48 Mon Sep 17 00:00:00 2001 From: fhenry Date: Wed, 27 Mar 2013 11:24:57 +0100 Subject: [PATCH 2/2] Add copy files ODT project on install --- htdocs/install/etape1.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php index 009d953e73d..1f48bf8efc0 100644 --- a/htdocs/install/etape1.php +++ b/htdocs/install/etape1.php @@ -400,7 +400,7 @@ if (! $error && $db->connected && $action == "set") require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $srcroot=$main_dir.'/install/doctemplates'; $destroot=$main_data_dir.'/doctemplates'; - $docs=array('thirdparties' => 'thirdparty', 'proposals' => 'proposal', 'orders' => 'order', 'invoices' => 'invoice'); + $docs=array('thirdparties' => 'thirdparty', 'proposals' => 'proposal', 'orders' => 'order', 'invoices' => 'invoice', 'projects' => 'project'); foreach($docs as $cursordir => $cursorfile) { $src=$srcroot.'/'.$cursordir.'/template_'.$cursorfile.'.odt';