var $rep_id;
var $formData; // common data used for printing headers footers etc.
-
+ var $contactData; // contact data for sending emials/reportlanguage selection
+
var $dest; // destination: email or printer
function FrontReport($title, $filename, $size = 'A4', $fontsize = 9, $orientation = 'P', $margins = NULL, $excelColWidthFactor = NULL)
$this->currency = '';
$this->scaleLogoWidth = false; // if Logo, scale on width (else height).
$this->SetHeaderType('Header'); // default
-
- $rtl = ($_SESSION['language']->dir === 'rtl' ? 'rtl' : 'ltr');
- $code = $_SESSION['language']->code;
- $enc = strtoupper($_SESSION['language']->encoding);
- // for the language array in class.pdf.inc
- $l = array('a_meta_charset' => $enc, 'a_meta_dir' => $rtl, 'a_meta_language' => $code, 'w_page' => 'page');
- $this->Cpdf($size, $l, $orientation);
+
+ $this->Cpdf($size, $_SESSION['language']->code, $orientation);
}
/*
/*
Transition function
*/
- function SetCommonData($myrow, $branch, $sales_order, $bankaccount, $doctype)
+ function SetCommonData($myrow, $branch, $sales_order, $bankaccount, $doctype, $contacts)
{
// $this->formData = array_merge($myrow, $branch, $sales_order,
// $bank_account, array('doctype' => $doctype));
'sales_order' => array('deliver_to', 'delivery_address', 'customer_ref'),
'bankaccount' => array('bank_name', 'bank_account_number')
);
-
+
foreach($datnames as $var => $fields) {
if (isset($$var)) {
foreach($fields as $locname) {
- if (isset(${$var}[$locname])) {
+ if (isset(${$var}[$locname]) && (${$var}[$locname]!==null)) {
$this->formData[$locname] = ${$var}[$locname];
}
}
}
}
$this->formData['doctype'] = $doctype;
+ if (count($contacts)) {
+ if (!is_array($contacts[0]))
+ $contacts = array($contacts); // change to array when single contact passed
+ $this->contactData = $contacts;
+ // as report is currently generated once despite number of email recipients
+ // we select language for the first recipient as report language
+ $this->formData['rep_lang'] = $contacts[0]['lang'];
+ }
}
/*
Set header handler
*/
function Header2()
{
- global $comp_path, $path_to_root, $print_as_quote, $print_invoice_no, $packing_slip; // FIXME
+ global $path_to_root, $print_as_quote,
+ $print_invoice_no, $packing_slip, $dflt_lang; // FIXME should be passed as params
$doctype = $this->formData['doctype'];
$header2type = true;
+ $this->SetLang(@$this->formData['rep_lang'] ? $this->formData['rep_lang'] : $dflt_lang);
+
// leave layout files names without path to enable including
- // modified versions from comapny/x/reporting directory
- if (isset($myrow['curr_code']) && $this->currency != $myrow['curr_code'])
- {
- include("includes/doctext2.inc");
- }
- else
- {
- include("includes/doctext.inc");
- }
-
+ // modified versions from company/x/reporting directory
+ include("includes/doctext.inc");
include("includes/header2.inc");
$this->row = $temp;
// Alternate header style which also supports a simple footer
function Header3()
{
- global $comp_path;
-
// Turn off cell padding for the main report header, restoring the current setting later
$oldcMargin = $this->cMargin;
$this->SetCellPadding(0);
if ($this->companyLogoEnable && ($this->company['coy_logo'] != ''))
{
// Build a string specifying the location of the company logo file
- $logo = $comp_path .'/'. user_company() . "/images/" . $this->company['coy_logo'];
+ $logo = company_path() . "/images/" . $this->company['coy_logo'];
// Width being zero means that the image will be scaled to the specified height
// keeping its aspect ratio intact.
return $this->TextWrap($c, $this->row - $r, $n - $c + $corr, $txt, $align, $border, $fill, $link, $stretch);
}
- function TextWrap($xpos, $ypos, $len, $str, $align = 'left', $border = 0, $fill = 0, $link = NULL, $stretch = 1)
+ function TextWrap($xpos, $ypos, $len, $str, $align = 'left', $border = 0, $fill = 0, $link = NULL, $stretch = 1, $spacebreak=false)
{
if ($this->fontSize != $this->oldFontSize)
{
$this->SetFontSize($this->fontSize);
$this->oldFontSize = $this->fontSize;
}
- return $this->addTextWrap($xpos, $ypos, $len, $this->fontSize, $str, $align, $border, $fill, $link, $stretch);
+ return $this->addTextWrap($xpos, $ypos, $len, $this->fontSize, $str, $align, $border, $fill, $link, $stretch, $spacebreak);
}
function TextCol($c, $n, $txt, $corr=0, $r=0, $border=0, $fill=0, $link=NULL, $stretch=1)
return $this->TextWrap($this->cols2[$c], $this->row - $r, $this->cols2[$n] - $this->cols2[$c] + $corr, $txt, $this->aligns2[$c], $border, $fill, $link, $stretch);
}
- function TextColLines($c, $n, $txt, $corr=0, $r=0, $border=0, $fill=0, $link=NULL, $stretch=1)
+ function TextColLines($c, $n, $txt, $corr=0, $r=0, $border=0, $fill=0, $link=NULL, $stretch=0)
{
$this->row -= $r;
- $this->TextWrapLines($this->cols[$c], $this->cols[$n] - $this->cols[$c] + $corr, $txt, $this->aligns[$c], $border, $fill, $link, $stretch);
+ $this->TextWrapLines($this->cols[$c], $this->cols[$n] - $this->cols[$c] + $corr, $txt, $this->aligns[$c], $border, $fill, $link, $stretch, true);
}
- function TextWrapLines($c, $width, $txt, $align='left', $border=0, $fill=0, $link=NULL, $stretch=1)
+ function TextWrapLines($c, $width, $txt, $align='left', $border=0, $fill=0, $link=NULL, $stretch=0, $spacebreak=true)
{
$str = Explode("\n", $txt);
for ($i = 0; $i < count($str); $i++)
$l = $str[$i];
do
{
- $l = $this->TextWrap($c, $this->row , $width, $l, $align, $border, $fill, $link, $stretch);
+ $l = $this->TextWrap($c, $this->row , $width, $l, $align, $border, $fill, $link, $stretch, $spacebreak);
$this->row -= $this->lineHeight;
}
while ($l != '');
function End($email=0, $subject=null, $myrow=null, $doctype = 0)
{
- global $pdf_debug, $path_to_root, $comp_path;
+ global $pdf_debug, $path_to_root;
if ($pdf_debug == 1)
{
else
{
- $dir = $comp_path.'/'.user_company(). '/pdf_files';
+ $dir = company_path(). '/pdf_files';
//save the file
if (!file_exists($dir))
{
else
$fname = $dir.'/'.uniqid('').'.pdf';
$this->Output($fname, 'F');
+
if ($email == 1)
{
- $emailtype = true;
- if ($this->currency != $myrow['curr_code'])
- {
- include("includes/doctext2.inc");
- }
- else
- {
- include("includes/doctext.inc");
- }
- require_once($path_to_root . "/reporting/includes/class.mail.inc");
- $mail = new email(str_replace(",", "", $this->company['coy_name']), $this->company['email']);
- if (!isset($myrow['email']) || $myrow['email'] == '')
- $myrow['email'] = isset($myrow['contact_email']) ? $myrow['contact_email'] : '';
- $to = str_replace(",", "", $myrow['DebtorName']) . " <" . $myrow['email'] . ">";
- $msg = $doc_Dear_Sirs . " " . $myrow['DebtorName'] . ",\n\n" . $doc_AttachedFile . " " . $subject .
- "\n\n";
- if (isset($myrow['dimension_id']) && $myrow['dimension_id'] > 0 && $doctype == ST_SALESINVOICE) // helper for payment links
- {
- if ($myrow['dimension_id'] == 1)
- {
- $amt = number_format($myrow["ov_freight"] + $myrow["ov_gst"] + $myrow["ov_amount"], user_price_dec());
- $txt = $doc_Payment_Link . " PayPal: ";
- $nn = urlencode($this->title . " " . $myrow['reference']);
- $url = "https://www.paypal.com/xclick/business=" . $this->company['email'] . "&item_name=" .
- $nn . "&amount=" . $amt . "¤cy_code=" . $myrow['curr_code'];
- $msg .= $txt . $url . "\n\n";
- }
+ if(!count($this->contactData)) {
+ $this->SetLang(user_language());
+ display_error(_("You have no email contact defined for this type of document"));
+ } else {
+ $sent = 0;
+ foreach($this->contactData as $contact) {
+ if (!isset($contact['email']))
+ continue;
+ $emailtype = true;
+ $this->SetLang($contact['lang']);
+ include("includes/doctext.inc");
+
+ require_once($path_to_root . "/reporting/includes/class.mail.inc");
+ $mail = new email(str_replace(",", "", $this->company['coy_name']),
+ $this->company['email']);
+ $mail->charset = $this->encoding;
+
+ $to = str_replace(",", "", $contact['name'].' '.$contact['name2'])
+ ." <" . $contact['email'] . ">";
+ $msg = $doc_Dear_Sirs . " " . $contact['name2'] . ",\n\n"
+ . $doc_AttachedFile . " " . $subject ."\n\n";
+ if (isset($myrow['dimension_id']) && $myrow['dimension_id'] > 0 && $doctype == ST_SALESINVOICE) // helper for payment links
+ {
+ if ($myrow['dimension_id'] == 1)
+ {
+ $amt = number_format($myrow["ov_freight"] + $myrow["ov_gst"] + $myrow["ov_amount"], user_price_dec());
+ $txt = $doc_Payment_Link . " PayPal: ";
+ $nn = urlencode($this->title . " " . $myrow['reference']);
+ $url = "https://www.paypal.com/xclick/business=" . $this->company['email'] . "&item_name=" .
+ $nn . "&amount=" . $amt . "¤cy_code=" . $myrow['curr_code'];
+ $msg .= $txt . $url . "\n\n";
+ }
+ }
+ $msg .= $doc_Kindest_regards . "\n\n";
+ $sender = $this->user . "\n" . $this->company['coy_name'] . "\n" . $this->company['postal_address'] . "\n" . $this->company['email'] . "\n" . $this->company['phone'];
+ $mail->to($to);
+ $mail->subject($subject);
+ $mail->text($msg . $sender);
+ $mail->attachment($fname);
+ if ($mail->send()) $sent++;
+ } // foreach contact
+ unlink($fname);
+ $this->SetLang(user_language());
+ if (!$sent)
+ display_error(_("Sending document by email failed"));
+ else
+ display_notification($this->title . " " . $myrow['reference'] . " "
+ . _("has been sent by email to destination."));
}
- $msg .= $doc_Kindest_regards . "\n\n";
- $sender = $this->user . "\n" . $this->company['coy_name'] . "\n" . $this->company['postal_address'] . "\n" . $this->company['email'] . "\n" . $this->company['phone'];
- $mail->to($to);
- $mail->subject($subject);
- $mail->text($msg . $sender);
- $mail->attachment($fname);
- $ret = $mail->send();
- if (!$ret)
- display_error(_("Sending document by email failed"));
- else
- display_notification($this->title . " " . $myrow['reference'] . " "
- . _("has been sent by email."));
- unlink($fname);
}
else
{
$printer = get_report_printer(user_print_profile(), $this->rep_id);
if ($printer == false) {
- if(in_ajax()) {
+ if (in_ajax()) {
global $Ajax;
if (user_rep_popup())
else
$Ajax->redirect($fname); // otherwise use faster method
} else {
- header('Content-type: application/pdf');
- header("Content-Disposition: inline; filename=$this->filename");
- header('Expires: 0');
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
- header('Pragma: public');
-
- $this->Stream();
+ header('Content-type: application/pdf');
+ header('Content-Disposition: inline; filename='.$this->filename);
+ header('Expires: 0');
+ header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+ header('Pragma: public');
+// $this->Stream(basename($fname));
+ $this->Stream($this->filename);
}
} else { // send report to network printer
$prn = new remote_printer($printer['queue'],$printer['host'],