|
@@ -62,9 +62,8 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
{
|
|
|
global $conf, $langs, $mysoc;
|
|
|
|
|
|
- $langs->load("main");
|
|
|
- $langs->load("companies");
|
|
|
-
|
|
|
+ $langs->loadLangs(array("main", "companies"));
|
|
|
+
|
|
|
$this->db = $db;
|
|
|
$this->name = "ODT templates";
|
|
|
$this->description = $langs->trans("DocumentModelOdt");
|
|
@@ -173,7 +172,12 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
}
|
|
|
$texte .= '</div>';
|
|
|
}
|
|
|
-
|
|
|
+ // Add input to upload a new template file.
|
|
|
+ $texte .= '<div>'.$langs->trans("UploadNewTemplate").' <input type="file" name="uploadfile">';
|
|
|
+ $texte .= '<input type="hidden" value="RECEPTION_ADDON_PDF_ODT_PATH" name="keyforuploaddir">';
|
|
|
+ $texte .= '<input type="submit" class="button small" value="'.dol_escape_htmltag($langs->trans("Upload")).'" name="upload">';
|
|
|
+ $texte .= '</div>';
|
|
|
+
|
|
|
$texte .= '</td>';
|
|
|
|
|
|
$texte .= '<td rowspan="2" class="tdtop hideonsmartphone">';
|
|
@@ -223,11 +227,8 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
$sav_charset_output = $outputlangs->charset_output;
|
|
|
$outputlangs->charset_output = 'UTF-8';
|
|
|
|
|
|
- $outputlangs->load("main");
|
|
|
- $outputlangs->load("dict");
|
|
|
- $outputlangs->load("companies");
|
|
|
- $outputlangs->load("bills");
|
|
|
-
|
|
|
+ $outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
|
|
|
+
|
|
|
if ($conf->reception->dir_output."/reception") {
|
|
|
// If $object is id instead of object
|
|
|
if (!is_object($object)) {
|
|
@@ -288,21 +289,25 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- // If BILLING contact defined on invoice, we use it
|
|
|
+ // If CUSTOMER contact defined on reception, we use it
|
|
|
$usecontact = false;
|
|
|
- $arrayidcontact = $object->getIdContact('external', 'BILLING');
|
|
|
+ $arrayidcontact = $object->getIdContact('external', 'CUSTOMER');
|
|
|
if (count($arrayidcontact) > 0) {
|
|
|
$usecontact = true;
|
|
|
$result = $object->fetch_contact($arrayidcontact[0]);
|
|
|
}
|
|
|
|
|
|
// Recipient name
|
|
|
+ $contactobject = null;
|
|
|
if (!empty($usecontact)) {
|
|
|
- if ($usecontact && ($object->contact->fk_soc != $object->thirdparty->id && (!isset($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT) || !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)))) {
|
|
|
- $socobject = $object->contact;
|
|
|
+ // We can use the company of contact instead of thirdparty company
|
|
|
+ if ($object->contact->socid != $object->thirdparty->id && (!isset($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT) || !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT))) {
|
|
|
+ $object->contact->fetch_thirdparty();
|
|
|
+ $socobject = $object->contact->thirdparty;
|
|
|
+ $contactobject = $object->contact;
|
|
|
} else {
|
|
|
$socobject = $object->thirdparty;
|
|
|
- // if we have a BILLING contact and we dont use it as recipient we store the contact object for later use
|
|
|
+ // if we have a CUSTOMER contact and we dont use it as thirdparty recipient we store the contact object for later use
|
|
|
$contactobject = $object->contact;
|
|
|
}
|
|
|
} else {
|
|
@@ -318,6 +323,7 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
'__TOTAL_VAT__' => $object->total_tva
|
|
|
);
|
|
|
complete_substitutions_array($substitutionarray, $langs, $object);
|
|
|
+
|
|
|
// Call the ODTSubstitution hook
|
|
|
$parameters = array('file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$substitutionarray);
|
|
|
$reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
|
|
@@ -343,6 +349,7 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
);
|
|
|
} catch (Exception $e) {
|
|
|
$this->error = $e->getMessage();
|
|
|
+ dol_syslog($e->getMessage(), LOG_INFO);
|
|
|
return -1;
|
|
|
}
|
|
|
// After construction $odfHandler->contentXml contains content and
|
|
@@ -359,67 +366,23 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
dol_syslog($e->getMessage(), LOG_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) {
|
|
|
- dol_syslog($e->getMessage(), LOG_INFO);
|
|
|
- }
|
|
|
+ // Define substitution array
|
|
|
+ $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object);
|
|
|
+ $array_object_from_properties = $this->get_substitutionarray_each_var_object($object, $outputlangs);
|
|
|
+ $array_objet = $this->get_substitutionarray_object($object, $outputlangs);
|
|
|
+ $array_user = $this->get_substitutionarray_user($user, $outputlangs);
|
|
|
+ $array_soc = $this->get_substitutionarray_mysoc($mysoc, $outputlangs);
|
|
|
+ $array_thirdparty = $this->get_substitutionarray_thirdparty($socobject, $outputlangs);
|
|
|
+ $array_other = $this->get_substitutionarray_other($outputlangs);
|
|
|
+ // retrieve contact information for use in object as contact_xxx tags
|
|
|
+ $array_thirdparty_contact = array();
|
|
|
+ if ($usecontact && is_object($contactobject)) {
|
|
|
+ $array_thirdparty_contact = $this->get_substitutionarray_contact($contactobject, $outputlangs, 'contact');
|
|
|
}
|
|
|
- // 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) {
|
|
|
- dol_syslog($e->getMessage(), LOG_INFO);
|
|
|
- }
|
|
|
- }
|
|
|
- // Make substitutions into odt of thirdparty
|
|
|
- $tmparray = $this->get_substitutionarray_thirdparty($socobject, $outputlangs);
|
|
|
- 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) {
|
|
|
- dol_syslog($e->getMessage(), LOG_INFO);
|
|
|
- }
|
|
|
- }
|
|
|
- // Replace tags of object + external modules
|
|
|
- $tmparray = $this->get_substitutionarray_reception($object, $outputlangs);
|
|
|
+
|
|
|
+ $tmparray = array_merge($substitutionarray, $array_object_from_properties, $array_user, $array_soc, $array_thirdparty, $array_objet, $array_other, $array_thirdparty_contact);
|
|
|
complete_substitutions_array($tmparray, $outputlangs, $object);
|
|
|
+
|
|
|
// Call the ODTSubstitution hook
|
|
|
$parameters = array('odfHandler'=>&$odfHandler, 'file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$tmparray);
|
|
|
$reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
|
|
@@ -441,8 +404,18 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
}
|
|
|
// Replace tags of lines
|
|
|
try {
|
|
|
- $listlines = $odfHandler->setSegment('lines');
|
|
|
+ $foundtagforlines = 1;
|
|
|
+ try {
|
|
|
+ $listlines = $odfHandler->setSegment('lines');
|
|
|
+ } catch (OdfException $e) {
|
|
|
+ // We may arrive here if tags for lines not present into template
|
|
|
+ $foundtagforlines = 0;
|
|
|
+ dol_syslog($e->getMessage(), LOG_INFO);
|
|
|
+ }
|
|
|
+ if ($foundtagforlines) {
|
|
|
+ $linenumber = 0;
|
|
|
foreach ($object->lines as $line) {
|
|
|
+ $linenumber++;
|
|
|
$tmparray = $this->get_substitutionarray_reception_lines($line, $outputlangs);
|
|
|
complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines");
|
|
|
// Call the ODTSubstitutionLine hook
|
|
@@ -460,6 +433,7 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
$listlines->merge();
|
|
|
}
|
|
|
$odfHandler->mergeSegment($listlines);
|
|
|
+ }
|
|
|
} catch (OdfException $e) {
|
|
|
$this->error = $e->getMessage();
|
|
|
dol_syslog($this->error, LOG_WARNING);
|
|
@@ -486,6 +460,7 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
$odfHandler->exportAsAttachedPDF($file);
|
|
|
} catch (Exception $e) {
|
|
|
$this->error = $e->getMessage();
|
|
|
+ dol_syslog($e->getMessage(), LOG_INFO);
|
|
|
return -1;
|
|
|
}
|
|
|
} else {
|
|
@@ -493,6 +468,7 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
$odfHandler->saveToDisk($file);
|
|
|
} catch (Exception $e) {
|
|
|
$this->error = $e->getMessage();
|
|
|
+ dol_syslog($e->getMessage(), LOG_INFO);
|
|
|
return -1;
|
|
|
}
|
|
|
}
|
|
@@ -505,6 +481,8 @@ class doc_generic_reception_odt extends ModelePdfReception
|
|
|
|
|
|
$odfHandler = null; // Destroy object
|
|
|
|
|
|
+ $this->result = array('fullpath'=>$file);
|
|
|
+
|
|
|
return 1; // Success
|
|
|
} else {
|
|
|
$this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir);
|