* SPDX-License-Identifier: AGPL-3.0-only ************************************/ $memory_limit = substr(ini_get("memory_limit"), 0,-1); if($memory_limit<256){ ini_set("memory_limit","256M"); } class PDFContent extends SDKExtendableClass { // crmv@42024 protected $templateid; protected $module; protected $language; protected $focus; protected $db; protected $mod_strings; protected $site_url; var $decimal_point; var $thousands_separator; var $decimals; public $pagebreak; protected $ignored_picklist_values=array(); protected $header; protected $footer; protected $body; protected $content; protected $filename; protected $templatename; protected $type; protected $section_sep="&#%ITS%%%@@@%%%ITS%#&"; protected $replacements; protected $inventory_table_array = Array(); protected $inventory_id_array = Array(); //crmv@48404 protected $org_cols = array("organizationname" => "COMPANY_NAME", "address" => "COMPANY_ADDRESS", "city" => "COMPANY_CITY", "state" => "COMPANY_STATE", "code" => "COMPANY_ZIP", "country" => "COMPANY_COUNTRY", "phone" => "COMPANY_PHONE", "fax" => "COMPANY_FAX", "website" => "COMPANY_WEBSITE", "logo" => "COMPANY_LOGO", //crmv@25443 'crmv_banking'=>'COMPANY_BANKING', 'crmv_vat_registration_number'=>'COMPANY_VAT_REGISTRATION_NUMBER', 'crmv_rea'=>'COMPANY_REA', 'crmv_issued_capital'=>'COMPANY_ISSUED_CAPITAL', //crmv@25443e ); function __construct($templateid, $module, $focus, $language) { global $table_prefix; $db = "adb"; $mod = "mod_strings"; $salt="site_URL"; global $$db, $$mod, $$salt, $PDFMaker_template_id; $this->db = &$$db; $this->mod_strings = $$mod; //crmv@48404 $mods = getInventoryModules(); foreach ($mods as $imod) { $inst = CRMEntity::getInstance($imod); $this->inventory_table_array[$imod] = $inst->table_name; $this->inventory_id_array[$imod] = $inst->table_index; } //crmv@48404 e $this->templateid = $templateid; $PDFMaker_template_id = $this->templateid; $this->module = $module; $this->focus = $focus; $this->language = $language; $this->type = "professional"; $this->getTemplateData(); $this->getIgnoredPicklistValues(); } public function getContent() { global $table_prefix; require_once("classes/simple_html_dom.php"); $img_root = "img_root_directory"; global $$img_root; if ($this->type == "professional" || $this->type == "basic") { $this->content = $this->body; $this->content = $this->header.$this->section_sep; $this->content .= $this->body.$this->section_sep; $this->content .= $this->footer; $this->replacements[" "]=" "; $this->replacements["##PAGE##"]="{PAGENO}"; $this->replacements["##PAGES##"]="{nb}"; $this->replacements["##DD-MM-YYYY##"]=date("d-m-Y"); $this->replacements["##DD.MM.YYYY##"]=date("d.m.Y"); $this->replacements["##MM-DD-YYYY##"]=date("m-d-Y"); $this->replacements["##YYYY-MM-DD##"]=date("Y-m-d"); $this->replacements["src='"]="src='".$$img_root; $this->replacements["$".strtoupper($this->module)."_CRMID$"]=$this->focus->id; $this->replacements["\$CRMID$"]=$this->focus->id; //crmv@2539m if($this->module == "Contacts"){ $this->replacements['$CONTACTS_IMAGENAME$']=$this->getContactImage($this->focus->id); } //crmv@32962 if($this->module == "Products"){ $this->replacements['$PRODUCTS_IMAGENAME$']=$this->getProductImage($this->focus->id); } //crmv@32962e // MaSo - 19. 5. 2011 $this->replaceContent(); $this->content = html_entity_decode($this->content,ENT_QUOTES,"utf-8"); //because of encrypting it is here $html = str_get_html($this->content); // CKEditor foreach($html->find("div[style^=page-break-after]") as $div_page_break) { $div_page_break->outertext = $this->pagebreak; $this->content = $html->save(); } // FCKEditor foreach($html->find("div[style^=PAGE-BREAK-AFTER]") as $div_page_break) { $div_page_break->outertext = $this->pagebreak; $this->content = $html->save(); } $html->clear(); ////crmv@58635 unset($html); ////crmv@58635 $this->convertRelatedModule(); $this->convertRelatedBlocks(); $this->replaceFieldsToContent($this->module, $this->focus); $this->convertInventoryModules(); $this->convertProdAttr($this->module, $this->focus); // crmv@198024 if($this->focus->column_fields["assigned_user_id"]==""){ $this->focus->column_fields["assigned_user_id"]=$this->db->query_result($this->db->query("SELECT smownerid FROM ".$table_prefix."_crmentity WHERE crmid=".$this->focus->id),0,"smownerid"); } $this->convertListViewBlock(); //VlMe 1.31 $this->replaceUserCompanyFields(); $this->replaceLabels(); $this->replaceBarcode(); if ($this->type == "professional") $this->replaceCustomFunctions(); $PDF_content = array(); list($PDF_content["header"],$PDF_content["body"],$PDF_content["footer"]) = explode($this->section_sep, $this->content); } else { $error_text = "Invalid license key! Please contact the vendor of PDF Maker."; $PDF_content = array("header" => "
ERROR
", "body" => $error_text, "footer" => ""); } return $PDF_content; } public function getSettings() { global $table_prefix; // crmv@172422 $sql = "SELECT (margin_top * 10) AS margin_top, (margin_bottom * 10) AS margin_bottom, (margin_left * 10) AS margin_left, (margin_right*10) AS margin_right, format, orientation, encoding, compliance FROM ".$table_prefix."_pdfmaker_settings WHERE templateid = '".$this->templateid."'"; $result = $this->db->query($sql); $Settings = $this->db->fetchByAssoc($result, 1); return $Settings; } protected function convertRelatedModule() { global $table_prefix; // crmv@190493 $sql = "SELECT f.fieldid, fieldname, uitype, r.relmodule, (SELECT COUNT(*) FROM {$table_prefix}_fieldmodulerel WHERE fieldid = f.fieldid) AS count_links FROM {$table_prefix}_field f LEFT JOIN {$table_prefix}_fieldmodulerel r ON f.fieldid = r.fieldid WHERE f.tabid=".getTabId($this->module)." AND (displaytype != 3) AND uitype = 10 "; // crmv@190493e $result = $this->db->query($sql); $num_rows = $this->db->num_rows($result); if ($num_rows > 0) { while($row = $this->db->fetch_array($result)) { $related_module = ""; $fk_record = $this->focus->column_fields[$row["fieldname"]]; // crmv@190493 crmv@191809 if($row['count_links'] > 1){ $related_module = getSalesEntityType($fk_record); }else{ $related_module = $row['relmodule']; } // crmv@190493e if ($related_module != "") { $tabid = getTabId($related_module); $field_inf = "_fieldinfo_cache"; $temp = &VTCacheUtils::$$field_inf; unset($temp[$tabid]); $focus2 = CRMEntity::getInstance($related_module); if ($fk_record != "" && $fk_record != "0") { $result_delete = $this->db->query("SELECT deleted FROM ".$table_prefix."_crmentity WHERE crmid='".$fk_record."' AND deleted=0"); if($this->db->num_rows($result_delete)>0){ $focus2->retrieve_entity_info($fk_record,$related_module); $focus2->id = $fk_record; } } $this->replacements["$"."R_".strtoupper($related_module)."_CRMID$"]=$focus2->id; // add contact image to related contact modul if(isset($related_module) AND $related_module == "Contacts"){ $this->replacements['$R_CONTACTS_IMAGENAME$']=$this->getContactImage($focus2->id); // print_r($this->replacements); } // preco to tu nebolo ? $this->replaceContent(); $this->replaceFieldsToContent($related_module, $focus2, true); unset($focus2); } /* crmv@24347 if ($row["uitype"] == "10" || $row["uitype"] == "68") { if ($related_module == "Accounts") $related_module2 = "Contacts"; else $related_module2 = "Accounts"; $tabid2 = getTabId($related_module2); $field_inf = "_fieldinfo_cache"; $temp = &VTCacheUtils::$$field_inf; unset($temp[$tabid2]); $focus3 = CRMEntity::getInstance($related_module2); $this->replacements["$"."R_".strtoupper($related_module2)."_CRMID$"]=$focus3->id; $this->replaceFieldsToContent($related_module2, $focus3, true); unset($focus3); } crmv@24347 - e */ } } } protected function convertProductBlock() { require_once("classes/simple_html_dom.php"); $html = str_get_html($this->content); $tableDOM=false; foreach($html->find("td") as $td) { if(trim($td->plaintext) == "#PRODUCTBLOC_START#"){ $td->parent->outertext = "#PRODUCTBLOC_START#"; list($tag)=explode(">",$td->parent->parent->parent->outertext,2); $header = $td->parent->prev_sibling()->outertext; if ($td->parent->prev_sibling()->children[0]) //crmv@25443 $header_style = $td->parent->prev_sibling()->children[0]->getAttribute("style"); $footer_tag=""; if(isset($header_style)){ $StyleHeader = explode(";", $header_style); // print_r($StyleHeader); if(isset($StyleHeader)){ foreach($StyleHeader as $style_header_tag) { if(strpos($style_header_tag, "border-top") == TRUE){ $footer_tag.=" "; } } } } else { $footer_tag.=" "; } $footer_tag.=""; // LAST VALUE IN TEMPLATE, MUST BE SUM $var = $td->parent->next_sibling()->last_child()->plaintext; $subtotal_tr=""; // SUBTOTAL if(strpos($var, "TOTAL")!==false){ // check for #PRODUCTBLOC_START# style if(is_object($td)){ $style_subtotal=$td->getAttribute("style"); } if(isset($td->innertext)){ list($style_subtotal_tag,$style_subtotal_endtag)=explode("#PRODUCTBLOC_START#",$td->innertext); } else { $style_subtotal_tag = ""; $style_subtotal_endtag = ""; } // search for border-top style in PRODUCTBLOC_START td if(isset($style_subtotal)){ $StyleSubtotal = explode(";", $style_subtotal); if(isset($StyleSubtotal)){ foreach($StyleSubtotal as $style_tag) { if(strpos($style_tag, "border-top") == TRUE){ $tag.=" style=\"".$style_tag."\""; break; } } } } else { $style_subtotal = ""; } $tag.=">"; $subtotal_tr=""; $subtotal_tr.="".$style_subtotal_tag."%G_Subtotal%".$style_subtotal_endtag.""; $subtotal_tr.="".$style_subtotal_tag."".rtrim($var,"$")."_SUBTOTAL$".$style_subtotal_endtag.""; $subtotal_tr.=""; } $tableDOM["tag"] = $tag; $tableDOM["header"] = $header; $tableDOM["footer"] = $footer_tag; $tableDOM["subtotal"] = $subtotal_tr; } if(trim($td->plaintext) == "#PRODUCTBLOC_END#") $td->parent->outertext = "#PRODUCTBLOC_END#"; } $this->content=$html->save(); $html->clear(); ////crmv@58635 unset($html); ////crmv@58635 return $tableDOM; } protected function convertInventoryModules() { global $table_prefix; $query = "select * from ".$table_prefix."_inventoryproductrel where id=?"; $result = $this->db->pquery($query, array($this->focus->id)); $num_rows=$this->db->num_rows($result); if ($num_rows > 0) { if (!isset($this->inventory_table_array[$this->module]) || $this->inventory_table_array[$this->module] == "") { $query2 = "select tablename, entityidfield from ".$table_prefix."_entityname where modulename=?"; $result2 = $this->db->pquery($query2, array($this->module)); $this->inventory_table_array[$this->module] = $this->db->query_result($result2,0,"tablename"); $this->inventory_id_array[$this->module] = $this->db->query_result($result2,0,"entityidfield"); } $this->replacements["$"."SUBTOTAL$"] = $this->formatNumberToPDF($this->focus->column_fields["hdnSubTotal"]); $this->replacements["$"."TOTAL$"] = $this->formatNumberToPDF($this->focus->column_fields["hdnGrandTotal"]); $currencytype = $this->getInventoryCurrencyInfoCustom(); $currencytype["currency_symbol"] = str_replace("€","€",$currencytype["currency_symbol"]); $currencytype["currency_symbol"] = str_replace("£","£",$currencytype["currency_symbol"]); $this->replacements["$"."CURRENCYNAME$"] = getTranslatedCurrencyString($currencytype["currency_name"]); $this->replacements["$"."CURRENCYSYMBOL$"] = $currencytype["currency_symbol"]; $this->replacements["$"."CURRENCYCODE$"] = $currencytype["currency_code"]; $this->replacements["$"."ADJUSTMENT$"] = $this->formatNumberToPDF($this->focus->column_fields["txtAdjustment"]); $Products = $this->getInventoryProducts(); $this->replacements["$"."TOTALWITHOUTVAT$"] = $Products["TOTAL"]["TOTALWITHOUTVAT"]; $this->replacements["$"."VAT$"] = $Products["TOTAL"]["TAXTOTAL"]; $this->replacements["$"."VATPERCENT$"] = $Products["TOTAL"]["TAXTOTALPERCENT"]; if (is_array($Products["TOTAL"]["VATBLOCK"]) && count($Products["TOTAL"]["VATBLOCK"]) > 0) // crmv@187957 { //crmv@34067 $vattable = ""; $vattable .= ""; foreach ($Products["TOTAL"]["VATBLOCK"] as $keyW=>$valueW) { if($valueW["netto"]!=0) { $vattable .= ""; } } $vattable .= "
".$this->app_strings["Name"]." ".$this->mod_strings["LBL_VATBLOCK_VAT_PERCENT"]." ".$this->mod_strings["LBL_VATBLOCK_SUM"]." (".$currencytype["currency_symbol"].")"." ".$this->mod_strings["LBL_VATBLOCK_VAT_VALUE"]." (".$currencytype["currency_symbol"].")"."
".$valueW["label"]." ".$this->formatNumberToPDF($valueW["value"])." % ".$this->formatNumberToPDF($valueW["netto"])." ".$this->formatNumberToPDF($valueW["vat"])."
"; //crmv@34067e } else { $vattable = ""; } $this->replacements["$"."VATBLOCK$"] = $vattable; $this->replacements["$"."TOTALWITHVAT$"] = $Products["TOTAL"]["TOTALWITHVAT"]; $this->replacements["$"."SHTAXAMOUNT$"] = $Products["TOTAL"]["SHTAXAMOUNT"]; $this->replacements["$"."SHTAXTOTAL$"] = $Products["TOTAL"]["SHTAXTOTAL"]; $this->replacements["$"."TOTALDISCOUNT$"] = $Products["TOTAL"]["FINALDISCOUNT"]; $this->replacements["$"."TOTALDISCOUNTPERCENT$"] = $Products["TOTAL"]["FINALDISCOUNTPERCENT"]; $this->replacements["$"."TOTALAFTERDISCOUNT$"] = $Products["TOTAL"]["TOTALAFTERDISCOUNT"]; $this->replaceContent(); $var_array = array(); if(strpos($this->content,"#PRODUCTBLOC_START#") !== false && strpos($this->content,"#PRODUCTBLOC_END#") !== false) { $tableTag = $this->convertProductBlock(); $breaklines_array = $this->getInventoryBreaklines(); $breaklines = $breaklines_array["products"]; $show_header = $breaklines_array["show_header"]; $show_subtotal = $breaklines_array["show_subtotal"]; $breakline_type=""; if(count($breaklines)>0) { if($tableTag!==false) { $breakline_type="".$this->pagebreak.$tableTag["tag"]; if($show_header==1) $breakline_type.=$tableTag["header"]; if($show_subtotal==1){ $breakline_type=$tableTag["subtotal"].$breakline_type; } else { $breakline_type=$tableTag["footer"].$breakline_type; } } else $breakline_type=$this->pagebreak; } $ExplodedPdf = array(); $Exploded = explode("#PRODUCTBLOC_START#",$this->content); $ExplodedPdf[] = $Exploded[0]; for($iterator=1;$iterator $Product_Details ) { foreach ( $ProductParts as $productpartid => $productparttext ) { $breakline = ""; $tot += floatval ( str_replace ( ',', '.', str_replace ( '.', '', $Product_Details['PRODUCTSTOTALAFTERDISCOUNT'] ) ) ); //crmv@62673 if ($breakline_type != "" && isset( $breaklines[$Product_Details["SERVICES_RECORD_ID"] . "_" . $Product_Details["PRODUCTSEQUENCE"]] ) || isset ( $breaklines[$Product_Details["PRODUCTS_RECORD_ID"] . "_" . $Product_Details["PRODUCTSEQUENCE"]] )) { $breakln = true; //crmv@62673 $breakline = $breakline_type; } $productparttext .= $breakline; //crmv@62673 if ($breakln) { $breakln = false; $productparttext = str_replace("\$PRODUCTSTOTALAFTERDISCOUNT_SUBTOTAL\$", $this->formatNumberToPDF( $tot ) . " " . $currencytype["currency_symbol"], $productparttext ); $tot = 0; } //crmv@62673e foreach ( $Product_Details as $coll => $value ) { $productparttext = str_replace("$" . strtoupper( $coll ) . "$", $value, $productparttext ); } $ExplodedPdf[$productpartid] .= $productparttext; } } } $this->content = implode('',$ExplodedPdf); } } } // crmv@190493 protected function replaceFieldsToContent($emodule, $efocus, $is_related = false, $is_inventory = false) { global $table_prefix; $related_fieldnames = array("related_to", "relatedto", "parent_id", "parentid", "product_id", "productid", "service_id", "serviceid", "vendor_id", "product", "account", "invoiceid", "linktoaccountscontacts", "projectid", "sc_related_to" ); if($is_inventory){ $inventory_content=array(); } //crmv@32899 $moduleInstance = Vtecrm_Module::getInstance($emodule); $tabid = $moduleInstance->id; //crmv@32899e if ($is_related){ $related = "R_"; }else{ $related = ""; } $Checkboxes = array(); $Picklists = array(); $Picklists_ml = array(); // multilanguage picklist //crmv@27014 $Textareas = array(); $Datefields = array(); $DateTimefields = array(); //crmv@28638 $Multipicklists = array(); $NumbersField = array(); $UserField = array(); //crmv@97136 $sdk_uitypes = array(); //crmv@69568 $TimerField = array(); $sql = "SELECT fieldname, uitype FROM ".$table_prefix."_field WHERE tabid = '".$tabid."'"; $result = $this->db->query($sql); //crmv@25443 if (empty($this->reference_fields[$emodule])) { $referenceUitype = array(); $res = $this->db->query("SELECT uitype FROM ".$table_prefix."_ws_fieldtype WHERE fieldtype = 'reference'"); if ($res) { while($row=$this->db->fetchByAssoc($res)) { $referenceUitype[] = $row['uitype']; } } $res = $this->db->query("SELECT fieldname from ".$table_prefix."_field WHERE uitype in (".implode(',',$referenceUitype).") and tabid = ".$tabid); if ($res) { while($row=$this->db->fetchByAssoc($res)) { $this->reference_fields[$emodule][] = $row['fieldname']; } } } //crmv@25443e while($row = $this->db->fetchByAssoc($result)) { if ($row["uitype"] == "19" || $row["uitype"] == "20" || $row["uitype"] == "21" || $row["uitype"] == "24"){ $Textareas[] = $row["fieldname"]; }elseif ($row["uitype"] == "5" || $row["uitype"] == "23" || $row["uitype"] == "70") { //crmv@26202 if ($row["uitype"] == "5") { $Datefields[] = $row["fieldname"]; } else { $DateTimefields[] = $row["fieldname"]; } //crmv@26202e } elseif ($row["uitype"] == "15" || $row["fieldname"] == "salutationtype"){ $Picklists[] = $row["fieldname"]; //crmv@27014 }elseif ($row["uitype"] == "1015"){ $Picklists_ml[] = $row["fieldname"]; //crmv@27014e }elseif ($row["uitype"] == "56"){ $Checkboxes[] = $row["fieldname"]; }elseif ($row["uitype"] == "33"){ $Multipicklists[] = $row["fieldname"]; }elseif ($row["uitype"] == "71" || $row["uitype"] == "7"){ //crmv@51366 $NumbersField[] = $row["fieldname"]; //crmv@97136 }elseif (in_array($row["uitype"],array('50','51','52','53','77'))){ //crmv@126096 $UserField[] = $row["fieldname"]; //crmv@97136e //crmv@65492 - 28 }elseif(SDK::isUitype($row["uitype"])){ $sdk_uitypes[$row["fieldname"]]=$row["uitype"]; } //crmv@65492e - 28 elseif ($row["uitype"] == "1020"){ $TimerField[] = $row["fieldname"]; } } foreach ($efocus->column_fields as $fieldname => $value) { if (in_array($fieldname,$UserField) && is_numeric($value)){ //crmv@60349 crmv@97136 crmv@126096 $value = $this->getOwnerNameCustom($value); }elseif($fieldname == "terms_conditions"){ $value = $this->getTermsAndConditionsCustom($value); }elseif($fieldname == "comments"){ $value = $this->getTicketCommentsCustom($efocus); }elseif($fieldname == "folderid"){ $value = $this->getFolderName($value); // crmv@190493 }elseif(in_array($fieldname, $related_fieldnames) || (!empty($this->reference_fields[$emodule]) && in_array($fieldname, $this->reference_fields[$emodule]))) { //crmv@25443 if (!empty($value)) { $parent_module = getSalesEntityType($value); $displayValueArray = getEntityName($parent_module, $value); if(!empty($displayValueArray)) { foreach($displayValueArray as $key=>$p_value) { $value = $p_value; } } } if(empty($value)){ $value=""; } } // crmv@190493e //crmv@26202 if(in_array($fieldname, $Datefields)) { $value = substr(getValidDisplayDate($value),0,10); } elseif(in_array($fieldname, $DateTimefields)) { $value = getValidDisplayDate($value); } //crmv@26202e elseif(in_array($fieldname, $Picklists)) { if(!in_array(trim($value), $this->ignored_picklist_values)){ $value = $this->getTranslatedStringCustom($value,$emodule); }else{ $value = ""; } } //crmv@27014 elseif(in_array($fieldname, $Picklists_ml)) { if(!in_array(trim($value), $this->ignored_picklist_values)){ $value = Picklistmulti::getTranslatedPicklist($value, $fieldname, $this->language); }else{ $value = ""; } } //crmv@27014e elseif(in_array($fieldname, $Checkboxes)) { $pdf_app_strings = return_application_language($this->language); if($value == 1){ $value = $pdf_app_strings["yes"]; }else{ $value = $pdf_app_strings["no"]; } } elseif(in_array($fieldname, $Textareas)){ $value = nl2br($value); }elseif(in_array($fieldname, $Multipicklists)){ $value = str_ireplace(' |##| ',', ',$value); }elseif(in_array($fieldname, $NumbersField)){ $value = $this->formatNumberToPDF($value); //crmv@126096 }elseif(in_array($fieldname, $TimerField)){ $value = time_duration(abs($value)); //crmv@126096e //crmv@65492 - 28 }elseif(array_key_exists($fieldname,$sdk_uitypes)){ $sdk_file = SDK::getUitypeFile('php','pdfmaker',$sdk_uitypes[$fieldname]); $sdk_value = $value; if ($sdk_file != '') { include($sdk_file); } //crmv@65492e - 28 // crmv@205306 } elseif ($fieldname === 'taxclass') { $IU = InventoryUtils::getInstance(); $taxValues = Zend_Json::decode($value) ?: []; $taxInfo = []; foreach ($taxValues as $taxName => $taxPerc) { $taxLabel = $IU->getTaxLabel($taxName); $taxInfo[] = $taxLabel . ": " . $this->formatNumberToPDF($taxPerc) . " %"; } $value = implode(', ', $taxInfo); // crmv@205306e // crmv@171512 } elseif ($this->convertFieldsHtml) { global $default_charset; $value = htmlentities($value, ENT_NOQUOTES, $default_charset); if ($this->convertFieldsForCKEditor) { $value = str_ireplace(array('&', '<', '>'), array('&amp;', '&lt;', '&gt;'), $value); // crmv@166458 - ckeditor bug!! } } // crmv@171512e if ($is_inventory) { $inventory_content[strtoupper($emodule."_".$fieldname)] = $value; } else { $this->replacements["$".$related.strtoupper($emodule."_".$fieldname)."$"]=$value; } } if ($is_inventory) { return $inventory_content; } else { $this->replaceContent(); } } // crmv@190493e protected function replaceUserCompanyFields() { global $table_prefix; $cur_usr = "current_user"; $root_dir = "root_directory"; global $$cur_usr,$$root_dir; //organization details //crmv@25963 global $adb; $res = $adb->query("select * from ".$table_prefix."_field where fieldname = 'bu_mc'"); if ($res && $adb->num_rows($res) > 0) { if ($_REQUEST['organizationid'] != '') { $sql = "SELECT * FROM ".$table_prefix."_organizationdetails where organizationid = ?"; $result = $this->db->pquery($sql,array($_REQUEST['organizationid'])); } } else { $sql = "SELECT * FROM ".$table_prefix."_organizationdetails"; $result = $this->db->pquery($sql,array()); } if ($result && $adb->num_rows($result) > 0) { $Org_Details = $this->db->fetchByAssoc($result, 1); foreach ($Org_Details AS $coll => $value) { if ($coll == "logo") $value = ""; $this->replacements["$".$this->org_cols[$coll]."$"] = $value; } } //crmv@25963e //terms and conditions //crmv $result = $this->db->query("SELECT tandc FROM ".$table_prefix."_inventory_tandc WHERE type = 'Inventory'"); $tandc = $this->db->query_result($result,0,"tandc"); //crmv e $this->replacements["$"."TERMS_AND_CONDITIONS$"] = nl2br($tandc); //assigned user fields $user_sql = "SELECT * FROM ".$table_prefix."_users WHERE id=".$this->focus->column_fields["assigned_user_id"]; $user_res = $this->db->query($user_sql); $user_row = $this->db->fetchByAssoc($user_res); $this->replacements["$"."USER_USERNAME$"] = $user_row["user_name"]; $this->replacements["$"."USER_FIRSTNAME$"] = $user_row["first_name"]; $this->replacements["$"."USER_LASTNAME$"] = $user_row["last_name"]; $this->replacements["$"."USER_EMAIL$"] = $user_row["email1"]; $this->replacements["$"."USER_TITLE$"] = $user_row["title"]; $this->replacements["$"."USER_FAX$"] = $user_row["phone_fax"]; $this->replacements["$"."USER_DEPARTMENT$"] = $user_row["department"]; $this->replacements["$"."USER_OTHER_EMAIL$"] = $user_row["email2"]; $this->replacements["$"."USER_PHONE$"] = $user_row["phone_work"]; $this->replacements["$"."USER_YAHOOID$"] = $user_row["yahoo_id"]; $this->replacements["$"."USER_MOBILE$"] = $user_row["phone_mobile"]; $this->replacements["$"."USER_HOME_PHONE$"] = $user_row["phone_home"]; $this->replacements["$"."USER_OTHER_PHONE$"] = $user_row["phone_other"]; $this->replacements["$"."USER_NOTES$"] = $user_row["description"]; $this->replacements["$"."USER_ADDRESS$"] = $user_row["address_street"]; $this->replacements["$"."USER_COUNTRY$"] = $user_row["address_country"]; $this->replacements["$"."USER_CITY$"] = $user_row["address_city"]; $this->replacements["$"."USER_ZIP$"] = $user_row["address_postalcode"]; $this->replacements["$"."USER_STATE$"] = $user_row["address_state"]; //current logged in fields $this->replacements["$"."L_USER_USERNAME$"] = $$cur_usr->column_fields["user_name"]; $this->replacements["$"."L_USER_FIRSTNAME$"] = $$cur_usr->column_fields["first_name"]; $this->replacements["$"."L_USER_LASTNAME$"] = $$cur_usr->column_fields["last_name"]; $this->replacements["$"."L_USER_EMAIL$"] = $$cur_usr->column_fields["email1"]; $this->replacements["$"."L_USER_TITLE$"] = $$cur_usr->column_fields["title"]; $this->replacements["$"."L_USER_FAX$"] = $$cur_usr->column_fields["phone_fax"]; $this->replacements["$"."L_USER_DEPARTMENT$"] = $$cur_usr->column_fields["department"]; $this->replacements["$"."L_USER_OTHER_EMAIL$"] = $$cur_usr->column_fields["email2"]; $this->replacements["$"."L_USER_PHONE$"] = $$cur_usr->column_fields["phone_work"]; $this->replacements["$"."L_USER_YAHOOID$"] = $$cur_usr->column_fields["yahoo_id"]; $this->replacements["$"."L_USER_MOBILE$"] = $$cur_usr->column_fields["phone_mobile"]; $this->replacements["$"."L_USER_HOME_PHONE$"] = $$cur_usr->column_fields["phone_home"]; $this->replacements["$"."L_USER_OTHER_PHONE$"] = $$cur_usr->column_fields["phone_other"]; $this->replacements["$"."L_USER_NOTES$"] = $$cur_usr->column_fields["description"]; $this->replacements["$"."L_USER_ADDRESS$"] = $$cur_usr->column_fields["address_street"]; $this->replacements["$"."L_USER_COUNTRY$"] = $$cur_usr->column_fields["address_country"]; $this->replacements["$"."L_USER_CITY$"] = $$cur_usr->column_fields["address_city"]; $this->replacements["$"."L_USER_ZIP$"] = $$cur_usr->column_fields["address_postalcode"]; $this->replacements["$"."L_USER_STATE$"] = $$cur_usr->column_fields["address_state"]; $this->replaceContent(); } protected function replaceLabels() { $app_lang = return_application_language($this->language); $mod_lang = return_specified_module_language($this->language, $this->module); if(strpos($this->content, "%G_")!==false){ foreach($app_lang as $key=>$value){ $this->replacements["%G_".$key."%"] = $value; } } if(strpos($this->content, "%M_")!==false){ foreach($mod_lang as $key=>$value){ $this->replacements["%M_".$key."%"] = $value; } } $this->replaceContent(); } protected function replaceBarcode() { require_once("classes/simple_html_dom.php"); $this->replacements["[BARCODE|"]=""; $this->replacements["|BARCODE]"]=""; $this->replaceContent(); $html = str_get_html($this->content); foreach($html->find("barcode") as $barcode) { list($type,$code) = explode("=",$barcode->plaintext,2); $barcode->outertext = ''; } $this->content = $html->save(); $html->clear(); ////crmv@58635 unset($html); ////crmv@58635 } protected function replaceContent() { if(!empty($this->replacements)){ $this->content = str_replace(array_keys($this->replacements), $this->replacements, $this->content); $this->replacements = array(); } } //utils to get template data protected function getTemplateData() { global $table_prefix; $salt="site_URL"; global $$salt; $this->site_url = trim($$salt,"/"); $sql = "SELECT ".$table_prefix."_pdfmaker.*, ".$table_prefix."_pdfmaker_settings.* FROM ".$table_prefix."_pdfmaker LEFT JOIN ".$table_prefix."_pdfmaker_settings ON ".$table_prefix."_pdfmaker_settings.templateid = ".$table_prefix."_pdfmaker.templateid WHERE ".$table_prefix."_pdfmaker.templateid=?"; $result = $this->db->pquery($sql, array($this->templateid)); $data = $this->db->fetch_array($result); $this->decimal_point = html_entity_decode($data["decimal_point"], ENT_QUOTES); $this->thousands_separator = html_entity_decode(($data["thousands_separator"]!="sp" ? $data["thousands_separator"] : " "), ENT_QUOTES); $this->decimals = $data["decimals"]; $this->header = $data["header"]; $this->footer = $data["footer"]; $this->body = $data["body"]; $this->filename = $data["file_name"]; $this->templatename = $data["filename"]; $this->pagebreak = ''; } protected function getIgnoredPicklistValues() { global $table_prefix; $sql = "SELECT value FROM ".$table_prefix."_pdfmaker_ignpickvals"; //crmv@19166 $result = $this->db->query($sql); while($row = $this->db->fetchByAssoc($result)) { $this->ignored_picklist_values[] = $row["value"]; } } function getInventoryProducts() { global $table_prefix; $taxtype = $this->getInventoryTaxTypeCustom(); $currencytype = $this->getInventoryCurrencyInfoCustom(); $InventoryUtils = InventoryUtils::getInstance(); // crmv@42024 //crmv@19166 crmv@150773 $query="select case when ".$table_prefix."_products.productid != '' then ".$table_prefix."_products.productname else ".$table_prefix."_service.servicename end as productname," . " case when ".$table_prefix."_products.productid != '' then ".$table_prefix."_products.productid else ".$table_prefix."_service.serviceid end as psid," . " case when ".$table_prefix."_products.productid != '' then 'Products' else 'Services' end as entitytype," . " case when ".$table_prefix."_products.productid != '' then ".$table_prefix."_products.unit_price else ".$table_prefix."_service.unit_price end as unit_price," . " case when ".$table_prefix."_products.productid != '' then ".$table_prefix."_products.usageunit else ".$table_prefix."_service.service_usageunit end as usageunit," . " case when ".$table_prefix."_products.productid != '' then ".$table_prefix."_products.qty_per_unit else ".$table_prefix."_service.qty_per_unit end as qty_per_unit," . " case when ".$table_prefix."_products.productid != '' then ".$table_prefix."_products.qtyinstock else NULL end as qtyinstock," . " case when ".$table_prefix."_products.productid != '' then ".$table_prefix."_products.description else ".$table_prefix."_service.description end as psdescription, ".$table_prefix."_inventoryproductrel.* " . " from ".$table_prefix."_inventoryproductrel" . " left join ".$table_prefix."_products on ".$table_prefix."_products.productid=".$table_prefix."_inventoryproductrel.productid " . " left join ".$table_prefix."_crmentity c1 on c1.crmid = ".$table_prefix."_products.productid " . " left join ".$table_prefix."_service on ".$table_prefix."_service.serviceid=".$table_prefix."_inventoryproductrel.productid " . " left join ".$table_prefix."_crmentity c2 on c2.crmid = ".$table_prefix."_service.serviceid " . " where id=? ORDER BY sequence_no"; //crmv@19166e crmv@150773e $result = $this->db->pquery($query, array($this->focus->id)); $num_rows=$this->db->num_rows($result); $netTotal = 0.0; $sumwithoutvat = 0.0; //product images $images = $this->getInventoryImages(); //end for($i=1; $i<=$num_rows; $i++) { $sub_prod_query = $this->db->pquery("SELECT productid from ".$table_prefix."_inventorysubproductrel WHERE id=? AND sequence_no=?",array($this->focus->id,$i)); $subprodname_str=''; if($this->db->num_rows($sub_prod_query)>0){ for($j=0;$j<$this->db->num_rows($sub_prod_query);$j++){ $sprod_id = $this->db->query_result($sub_prod_query,$j,"productid"); $sprod_name = getProductName($sprod_id); $str_sep = ""; if($j>0) $str_sep = ":"; $subprodname_str .= $str_sep." - ".$sprod_name; } } $subprodname_str = str_replace(":","
",$subprodname_str); $psid = $this->db->query_result($result,$i-1,"psid"); $psno = $this->db->query_result($result,$i-1,"psno"); $productid=$this->db->query_result($result,$i-1,"productid"); $entitytype=$this->db->query_result($result,$i-1,"entitytype"); $producttitle = $productname= $this->db->query_result($result,$i-1,"productname"); if($subprodname_str!="") $productname .= "
".$subprodname_str.""; $comment=$this->db->query_result($result,$i-1,"comment"); $psdescription =$this->db->query_result($result,$i-1,"psdescription"); $inventory_prodrel_desc = $this->db->query_result($result,$i-1,"description"); $qtyinstock=$this->db->query_result($result,$i-1,"qtyinstock"); $qty=$this->db->query_result($result,$i-1,"quantity"); $qty_per_unit=$this->db->query_result($result,$i-1,"qty_per_unit"); $usageunit=$this->db->query_result($result,$i-1,"usageunit"); $unitprice=$this->db->query_result($result,$i-1,"unit_price"); $listprice=$this->db->query_result($result,$i-1,"listprice"); $discount_percent = $this->db->query_result($result,$i-1,"discount_percent"); $discount_amount = $this->db->query_result($result,$i-1,"discount_amount"); $total = $qty*$listprice; //crmv@65801 $prodinfo = array( 'listprice' => floatval($listprice), 'quantity' => floatval($qty), 'discount_percent' => $discount_percent, 'discount_amount' => $discount_amount, 'taxes' => array(), ); if ($taxtype == "individual") { $tax_details = $InventoryUtils->getTaxDetailsForProduct($productid,"all"); for ($tax_count=0; $tax_countgetInventoryProductTaxValue($this->focus->id, $productid, $tax_name); $prodinfo['taxes'][$tax_name] = $tax_value; } } // calculate prices $prodPrices = $InventoryUtils->calcProductTotals($prodinfo); // retrieve discounts $productDiscountPercent = ""; if ($discount_percent != "NULL" && $discount_percent != "") { $productDiscountPercent_tmp = array(); if (!empty($prodPrices['discounts'])) { foreach ($prodPrices['discounts'] as $discountInfo) { $productDiscountPercent_tmp[] = $this->formatNumberToPDF($discountInfo['percentage']); } } $productDiscountPercent = implode('+',$productDiscountPercent_tmp); } $productDiscount = $prodPrices['total_discount']; $totalAfterDiscount = $prodPrices['price_discount']; // taxes //Calculate the individual tax if taxtype is individual $taxtotal = $prodPrices['total_taxes']; if ($taxtype == "individual") { for ($tax_count=0; $tax_count 0) { $vatblock[$tax_name."-".$tax_value]["label"] = $tax_label; $vatblock[$tax_name."-".$tax_value]["netto"] += $totalAfterDiscount; $vatblock[$tax_name."-".$tax_value]["vat"] += $prodPrices['taxes'][$tax_count]['amount']; $vatblock[$tax_name."-".$tax_value]["value"] += $prodPrices['taxes'][$tax_count]['percentage']; } } $Details["P"][$i]["PRODUCTVATPERCENT"] = $this->formatNumberToPDF($prodPrices['total_taxes_perc']); $Details["P"][$i]["PRODUCTVATSUM"] = $this->formatNumberToPDF($taxtotal); } $netprice = $prodPrices['price_taxes']; if ($entitytype == "Products") { $Details["P"][$i]["PRODUCTS_CRMID"] = $psid; $Details["P"][$i]["SERVICES_CRMID"] = ""; } else { $Details["P"][$i]["PRODUCTS_CRMID"] = ""; $Details["P"][$i]["SERVICES_CRMID"] = $psid; } $Details["P"][$i]["PS_CRMID"] = $psid; $Details["P"][$i]["PS_NO"] = $psno; //crmv@57957 if ($comment != "") { $comment = str_replace("\\n", "
", nl2br($comment)); $productname .= "
".$comment.""; } $Details["P"][$i]["PRODUCTNAME"] = $productname; $Details["P"][$i]["PRODUCTTITLE"] = $producttitle; $psdescription = str_replace("\\n", "
", nl2br($psdescription)); $Details["P"][$i]["PRODUCTDESCRIPTION"] = $psdescription; $Details["P"][$i]["PRODUCTEDITDESCRIPTION"] = $comment; $inventory_prodrel_desc = str_replace("\\n", "
", nl2br($inventory_prodrel_desc)); $Details["P"][$i]["CRMNOWPRODUCTDESCRIPTION"] = $inventory_prodrel_desc; $Details["P"][$i]["PRODUCTINVDESCRIPTION"] = $inventory_prodrel_desc; //crmv@23798 //crmv@57957e $Details["P"][$i]["PRODUCTLISTPRICE"] = $this->formatNumberToPDF($listprice); $Details["P"][$i]["PRODUCTTOTAL"] = $this->formatNumberToPDF($total); $Details["P"][$i]["PRODUCTQUANTITY"] = $this->formatNumberToPDF($qty); $Details["P"][$i]["PRODUCTQINSTOCK"] = $this->formatNumberToPDF($qtyinstock);//missing $Details["P"][$i]["PRODUCTPRICE"] = $this->formatNumberToPDF($unitprice);//missing $Details["P"][$i]["PRODUCTPOSITION"] = $i; $Details["P"][$i]["PRODUCTQTYPERUNIT"] = $this->formatNumberToPDF($qty_per_unit);//missing $Details["P"][$i]["PRODUCTUSAGEUNIT"] = $this->getTranslatedStringCustom($usageunit,"Products/Services"); $Details["P"][$i]["PRODUCTDISCOUNT"] = $this->formatNumberToPDF($productDiscount); $Details["P"][$i]["PRODUCTDISCOUNTPERCENT"] = $productDiscountPercent; //crmv@2539m $Details["P"][$i]["PRODUCTSTOTALAFTERDISCOUNTSUM"] = $totalAfterDiscount;//missing $Details["P"][$i]["PRODUCTSTOTALAFTERDISCOUNT"] = $this->formatNumberToPDF($totalAfterDiscount); $Details["P"][$i]["PRODUCTTOTALSUM"] = $this->formatNumberToPDF($netprice); //product images $sequence = $this->db->query_result($result,$i-1,"sequence_no"); $Details["P"][$i]["PRODUCTSEQUENCE"] = $sequence; if(isset($images[$productid."_".$sequence])) { $width = $height = ""; if ($images[$productid."_".$sequence]["width"]>0) $width=" width='".$images[$productid."_".$sequence]["width"]."' "; if ($images[$productid."_".$sequence]["height"]>0) $height=" height='".$images[$productid."_".$sequence]["height"]."' "; $Details["P"][$i]["PRODUCTS_IMAGENAME"] = ""; // crmv@140808 } //end $focus_p = CRMEntity::getInstance("Products"); if ($entitytype == "Products" && $psid != "") { $focus_p->id = $psid; $this->retrieve_entity_infoCustom($focus_p,$psid,"Products"); //$focus_p->retrieve_entity_info($psid,"Products"); } $Array_P = $this->replaceFieldsToContent("Products", $focus_p, false, true); $Details["P"][$i] = array_merge($Array_P,$Details["P"][$i]); unset($focus_p); $focus_s = CRMEntity::getInstance("Services"); if ($entitytype == "Services" && $psid != "") { $focus_s->id = $psid; $this->retrieve_entity_infoCustom($focus_s,$psid,"Services"); //$focus_s->retrieve_entity_info($psid,"Services"); } $Array_S = $this->replaceFieldsToContent("Services", $focus_s, false, true); $Details["P"][$i] = array_merge($Array_S,$Details["P"][$i]); unset($focus_s); // totalwithoutvat fot totals $sumwithoutvat += $totalAfterDiscount; $netTotal += $netprice; } // TOTALS // populate array for calculations $totalinfo = array( 'nettotal' => floatval($netTotal), 's_h_amount' => floatval($this->focus->column_fields["hdnS_H_Amount"]), 'discount_percent' => $this->focus->column_fields["hdnDiscountPercent"], 'discount_amount' => $this->focus->column_fields["hdnDiscountAmount"], 'adjustment' => floatval($this->focus->column_fields['txtAdjustment']), 'taxes' => array(), 'shtaxes' => array(), ); // populate taxes for calculations if ($taxtype == "group") { $tax_details = $InventoryUtils->getAllTaxes("available","","edit",$this->focus->id); foreach ($tax_details as $taxinfo) { $tax_name = $taxinfo['taxname']; $tax_percent = $this->db->query_result($result,0,$tax_name); $totalinfo['taxes'][$tax_name] = $tax_percent; } } // populate sh taxes for calculateions $shtax_details = $InventoryUtils->getAllTaxes("available","sh","edit",$this->focus->id); foreach ($shtax_details as $taxinfo) { $shtax_name = $taxinfo['taxname']; $shtax_percent = $InventoryUtils->getInventorySHTaxPercent($this->focus->id,$shtax_name); $totalinfo['shtaxes'][$shtax_name] = $shtax_percent; } // calculate totals $totalPrices = $InventoryUtils->calcInventoryTotals($totalinfo); // discounts $finalDiscountPercent = ""; //if($focus->column_fields['hdnDiscountPercent'] != '') - previously (before changing to prepared statement) the selected option (either percent or amount) will have value and the other remains empty. So we can find the non selected item by empty check. But now with prepared statement, the non selected option stored as 0 if ($this->focus->column_fields["hdnDiscountPercent"] != "0") { $productDiscountPercent_tmp = array(); foreach ($totalPrices['discounts'] as $discountInfo) { $productDiscountPercent_tmp[] = $this->formatNumberToPDF($discountInfo['percentage']); } $finalDiscountPercent = implode('+',$productDiscountPercent_tmp); } $finalDiscount = $totalPrices['total_discount']; // taxes $vat_value = 0.0; $taxtotal = $totalPrices['total_taxes']; if ($taxtype == "group") { for ($tax_count=0; $tax_count 0) { $vatblock[$tax_name]["label"] = $tax_details[$tax_count]["taxlabel"]; $vatblock[$tax_name]["netto"] = $totalPrices['price_discount']; $vatblock[$tax_name]["vat"] = $totalPrices['taxes'][$tax_count]['amount']; $vatblock[$tax_name]["value"] = $tax_value; } } $total_vat_percent = $totalPrices['total_taxes_perc']; $vat_value = $taxtotal; // info tax value and total with dph for every product foreach ($Details["P"] as $keyP=>$valueP) { // this is the only calculation left here $productvatsum = ($Details["P"][$keyP]["PRODUCTSTOTALAFTERDISCOUNTSUM"] * $total_vat_percent) / 100; $producttotalsum = $Details["P"][$keyP]["PRODUCTSTOTALAFTERDISCOUNTSUM"] + $productvatsum; $Details["P"][$keyP]["PRODUCTVATPERCENT"] = $this->formatNumberToPDF($total_vat_percent); $Details["P"][$keyP]["PRODUCTVATSUM"] = $this->formatNumberToPDF($productvatsum); $Details["P"][$keyP]["PRODUCTTOTALSUM"] = $this->formatNumberToPDF($producttotalsum); } // info tax end } else { // individual taxes, with vatblock - sum everything if (is_array($vatblock) && count($vatblock) > 0) { foreach ($vatblock as $keyM => $valueM) $vat_value += $valueM["vat"]; } } // SH amount and taxes $shAmount = ($this->focus->column_fields["hdnS_H_Amount"] != "") ? $this->focus->column_fields["hdnS_H_Amount"] : "0.00"; $shtaxtotal = $totalPrices['total_shtaxes']; $totalafterdiscount = $sumwithoutvat - $finalDiscount; $totalwithvat = $totalafterdiscount + $vat_value; $Details["TOTAL"]["NETTOTAL"] = $this->formatNumberToPDF($netTotal); $Details["TOTAL"]["TOTALWITHOUTVAT"] = $this->formatNumberToPDF($sumwithoutvat); $Details["TOTAL"]["FINALDISCOUNT"] = $this->formatNumberToPDF($finalDiscount); $Details["TOTAL"]["FINALDISCOUNTPERCENT"] = $finalDiscountPercent;//crmv@2539m $Details["TOTAL"]["TOTALAFTERDISCOUNT"] = $this->formatNumberToPDF($totalafterdiscount); $Details["TOTAL"]["TAXTOTAL"] = $this->formatNumberToPDF($vat_value); $Details["TOTAL"]["TAXTOTALPERCENT"] = $this->formatNumberToPDF($total_vat_percent);//to get total vat percent $Details["TOTAL"]["TOTALWITHVAT"] = $this->formatNumberToPDF($totalwithvat); $Details["TOTAL"]["SHTAXAMOUNT"] = $this->formatNumberToPDF($shAmount); $Details["TOTAL"]["SHTAXTOTAL"] = $this->formatNumberToPDF($shtaxtotal); $Details["TOTAL"]["VATBLOCK"] = $vatblock; return $Details; } protected function getInventoryBreaklines() { global $table_prefix; $sql="SELECT productid, sequence, show_header, show_subtotal FROM ".$table_prefix."_pdfmaker_breakline WHERE crmid=?"; $res = $this->db->pquery($sql,array($this->focus->id)); $products=array(); $show_header=0; $show_subtotal=0; while($row=$this->db->fetchByAssoc($res)){ $products[$row["productid"]."_".$row["sequence"]] = $row["sequence"]; $show_header=$row["show_header"]; $show_subtotal=$row["show_subtotal"]; } $output["products"] = $products; $output["show_header"] = $show_header; $output["show_subtotal"] = $show_subtotal; return $output; } protected function getInventoryImages() { global $table_prefix; $sql="SELECT ".$table_prefix."_attachments.path, ".$table_prefix."_attachments.name, ".$table_prefix."_attachments.attachmentsid, productid, sequence, width, height FROM ".$table_prefix."_pdfmaker_images INNER JOIN ".$table_prefix."_attachments ON ".$table_prefix."_attachments.attachmentsid=".$table_prefix."_pdfmaker_images.attachmentid INNER JOIN ".$table_prefix."_crmentity ON ".$table_prefix."_attachments.attachmentsid=".$table_prefix."_crmentity.crmid WHERE deleted=0 AND ".$table_prefix."_pdfmaker_images.crmid=?"; $res = $this->db->pquery($sql,array($this->focus->id)); $products=array(); while($row=$this->db->fetchByAssoc($res)){ $products[$row["productid"]."_".$row["sequence"]]["src"] = $row["path"].$row["attachmentsid"]."_".$row["name"]; $products[$row["productid"]."_".$row["sequence"]]["width"] = $row["width"]; $products[$row["productid"]."_".$row["sequence"]]["height"] = $row["height"]; } return $products; } protected function getContactImage($id) { global $table_prefix; if(isset($id) AND $id!=""){ $query="SELECT ".$table_prefix."_attachments.path, ".$table_prefix."_attachments.name, ".$table_prefix."_attachments.attachmentsid FROM ".$table_prefix."_contactdetails INNER JOIN ".$table_prefix."_seattachmentsrel ON ".$table_prefix."_contactdetails.contactid=".$table_prefix."_seattachmentsrel.crmid INNER JOIN ".$table_prefix."_attachments ON ".$table_prefix."_attachments.attachmentsid=".$table_prefix."_seattachmentsrel.attachmentsid INNER JOIN ".$table_prefix."_crmentity ON ".$table_prefix."_attachments.attachmentsid=".$table_prefix."_crmentity.crmid WHERE deleted=0 AND ".$table_prefix."_contactdetails.contactid=?"; $result = $this->db->pquery($query, array($id)); $num_rows = $this->db->num_rows($result); if ($num_rows > 0) { $image_src = $this->db->query_result($result,0,"path").$this->db->query_result($result,0,"attachmentsid")."_".$this->db->query_result($result,0,"name"); $image = ""; return $image; } } else { return ""; } } //crmv@32962 protected function getProductImage($id) { global $table_prefix; if(isset($id) AND $id!=""){ $query="SELECT ".$table_prefix."_attachments.path, ".$table_prefix."_attachments.name, ".$table_prefix."_attachments.attachmentsid FROM ".$table_prefix."_products INNER JOIN ".$table_prefix."_seattachmentsrel ON ".$table_prefix."_products.productid=".$table_prefix."_seattachmentsrel.crmid INNER JOIN ".$table_prefix."_attachments ON ".$table_prefix."_attachments.attachmentsid=".$table_prefix."_seattachmentsrel.attachmentsid INNER JOIN ".$table_prefix."_crmentity ON ".$table_prefix."_attachments.attachmentsid=".$table_prefix."_crmentity.crmid WHERE deleted=0 AND ".$table_prefix."_products.productid=?"; $result = $this->db->pquery($query, array($id)); $num_rows = $this->db->num_rows($result); if ($num_rows > 0) { $image_src = $this->db->query_result($result,0,"path").$this->db->query_result($result,0,"attachmentsid")."_".$this->db->query_result($result,0,"name"); $image = ""; return $image; } } else { return ""; } } //crmv@32962e //utils functions which needed to be customized protected function getOwnerNameCustom($id) { global $table_prefix; if($id != "") { $sql = "SELECT user_name FROM ".$table_prefix."_users WHERE id=?"; $result = $this->db->pquery($sql, array($id)); $ownername = $this->db->query_result($result,0,"user_name"); } if($ownername == "") { $sql = "SELECT groupname FROM ".$table_prefix."_groups WHERE groupid=?"; $result = $this->db->pquery($sql, array($id)); $ownername = $this->db->query_result($result,0,"groupname"); }else { //crmv@126096 global $showfullusername; $ownername = getUserName($id,$showfullusername); //crmv@126096e } return $ownername; } protected function getAccountNo($account_id) { global $table_prefix; $accountno = ""; if($account_id != '') { $sql = "SELECT account_no FROM ".$table_prefix."_account WHERE accountid=?"; $result = $this->db->pquery($sql, array($account_id)); $accountno = $this->db->query_result($result,0,"account_no"); } return $accountno; } protected function getTranslatedStringCustom($str,$emodule) { if($emodule!="Products/Services") { $app_lang = return_application_language($this->language); $mod_lang = return_specified_module_language($this->language,$emodule); } else { $app_lang = return_specified_module_language($this->language,"Services"); $mod_lang = return_specified_module_language($this->language,"Products"); } $trans_str = ($mod_lang[$str] != '') ? $mod_lang[$str] : (($app_lang[$str] != '') ? $app_lang[$str] : $str); return $trans_str; } protected function getInventoryCurrencyInfoCustom() { global $table_prefix; $inventory_table = $this->inventory_table_array[$this->module]; $inventory_id = $this->inventory_id_array[$this->module]; $res = $this->db->pquery("SELECT currency_id, ".$inventory_table.".conversion_rate AS conv_rate, ".$table_prefix."_currency_info.* FROM ".$inventory_table." INNER JOIN ".$table_prefix."_currency_info ON ".$inventory_table.".currency_id = ".$table_prefix."_currency_info.id WHERE ".$inventory_id."=?", array($this->focus->id)); $currency_info = array(); $currency_info["currency_id"] = $this->db->query_result($res,0,"currency_id"); $currency_info["conversion_rate"] = $this->db->query_result($res,0,"conv_rate"); $currency_info["currency_name"] = $this->db->query_result($res,0,"currency_name"); $currency_info["currency_code"] = $this->db->query_result($res,0,"currency_code"); $currency_info["currency_symbol"] = $this->db->query_result($res,0,"currency_symbol"); return $currency_info; } protected function getInventoryTaxTypeCustom() { $res = $this->db->pquery("SELECT taxtype FROM ".$this->inventory_table_array[$this->module]." WHERE ".$this->inventory_id_array[$this->module]."=?", array($this->focus->id)); $taxtype = $this->db->query_result($res,0,'taxtype'); return $taxtype; } protected function formatNumberToPDF($value) { if(is_numeric($value)){ $number = number_format($value, $this->decimals, $this->decimal_point, $this->thousands_separator); } else { $number = ""; } return $number; } // crmv@205306 protected function retrieve_entity_infoCustom(&$focus, $record, $module) { $focus->id = $record; $focus->retrieve_entity_info_no_html($record, $module); } // crmv@205306e protected function getTermsAndConditionsCustom($value) { global $table_prefix; if(file_exists("modules/Settings/EditTermDetails.php")) { $sql = "SELECT tandc FROM ".$table_prefix."_inventory_tandc WHERE id='".$value."'"; $res = $this->db->query($sql); $num = $this->db->num_rows($res); if($num>0) $tandc = $this->db->query_result($res,0,"tandc"); else $tandc = $value; } else $tandc = $value; return $tandc; } protected function getTicketCommentsCustom($efocus) { global $table_prefix; $commentlist=""; $prefix=""; if($efocus->column_fields["record_module"] == "HelpDesk"){ $prefix="ticket"; }elseif($efocus->column_fields["record_module"] == "Faq") { $prefix="faq"; } if($prefix!="") { $mod_lang = return_specified_module_language($this->language, $efocus->column_fields["record_module"]); $sql="SELECT * FROM ".$table_prefix."_".$prefix."comments WHERE ".$prefix."id=".$efocus->id; $result=$this->db->query($sql); while($row = $this->db->fetchByAssoc($result)) { $comment = $row["comments"]; $crtime = getValidDisplayDate($row["createdtime"]); $body=""; if($prefix=="ticket"){ //crmv@101102 if($row["ownertype"] == 'customer'){ $author = $this->getCustomerNameCustom($row["ownerid"]); } else { $author = $this->getOwnerNameCustom($row["ownerid"]); } //crmv@101102e $body=$comment."
".$mod_lang["LBL_AUTHOR"].": ".$author."
".$mod_lang["Created Time"].": ".$crtime."

"; } else { $body=$comment."
".$mod_lang["Created Time"].": ".$crtime."

"; } $commentlist.=$body; } } return $commentlist; } //crmv@101102 protected function getCustomerNameCustom($id){ global $table_prefix; $customername = ''; $sql="SELECT lastname,firstname FROM ".$table_prefix."_contactdetails WHERE contactid=".$id; $res = $this->db->query($sql); if($res){ $customername = $this->db->query_result($res,0,'lastname').' '.$this->db->query_result($res,0,'firstname'); } return $customername; } //crmv@101102e protected function getFolderName($folderid) { global $table_prefix; $sql="SELECT foldername FROM ".$table_prefix."_crmentityfolder WHERE folderid=".$folderid; // crmv@30967 return $foldername = $this->db->query_result($this->db->query($sql),0,"foldername"); } protected function replaceCustomFunctions(){ if(is_numeric(strpos($this->content, '[CUSTOMFUNCTION|'))){ require_once("classes/simple_html_dom.php"); foreach (glob('modules/PDFMaker/functions/*.php') as $file) { include_once $file; } $this->replacements["[CUSTOMFUNCTION|"]=""; $this->replacements["|CUSTOMFUNCTION]"]=""; $this->replaceContent(); $html = str_get_html($this->content); foreach($html->find("customfunction") as $customfunction) { //$Params = explode("|", trim($customfunction->plaintext)); $Params = $this->getCustomfunctionParams(trim($customfunction->plaintext)); $func = $Params[0]; unset($Params[0]); $replacement = call_user_func_array($func,$Params); $customfunction->outertext = html_entity_decode($replacement); //crmv@27854 } $this->content = $html->save(); $html->clear(); ////crmv@58635 unset($html); ////crmv@58635 } } protected function getCustomfunctionParams($val) { $Params = array(); $end = false; do { if (strstr($val, '|')) { if ($val[0] == '"') { $delimiter = '"|'; $val = substr($val, 1); } elseif (substr($val,0,6) == '"') { $delimiter = '"|'; $val = substr($val, 6); } else $delimiter = '|'; list($Params[],$val) = explode($delimiter,$val,2); } else { $Params[] = $val; $end = true; } } while (!$end); return $Params; } public function getFilename() { $this->content = $this->filename; $this->replacements["$#TEMPLATE_NAME#$"]=$this->templatename; $this->replacements["$#DD-MM-YYYY#$"]=date("d-m-Y"); $this->replacements["$#MM-DD-YYYY#$"]=date("m-d-Y"); $this->replacements["$#YYYY-MM-DD#$"]=date("Y-m-d"); $this->replacements["$".strtoupper($this->module)."_CRMID$"]=$this->focus->id; $this->replaceFieldsToContent($this->module, $this->focus); $this->replacements=array(); $this->replacements["\r\n"]=""; $this->replacements["\n\r"]=""; $this->replacements["\n"]=""; $this->replacements["\r"]=""; $this->replaceContent(); return substr(generate_cool_uri(strip_tags(html_entity_decode($this->content,ENT_QUOTES,"utf-8"))),0,255); } protected function itsmd($val) { return md5($val); } protected function convertRelatedBlocks() { global $table_prefix; include_once("modules/PDFMaker/RelBlockRun.php"); if(!isset($this->picklist_fields)) $this->picklist_fields = array(); //crmv@97759 if(strpos($this->content,"#RELBLOCK") !== false) { preg_match_all("|#RELBLOCK([0-9]+)_START#|U", $this->content, $RelatedBlocks, PREG_PATTERN_ORDER); if (count($RelatedBlocks[1]) > 0) { $ConvertRelBlock = array(); foreach($RelatedBlocks[1] AS $r => $relblockid) { if (!in_array($relblockid,$ConvertRelBlock)) { $sql_rb = "SELECT secmodule FROM ".$table_prefix."_pdfmaker_relblocks WHERE relblockid = '".$relblockid."'"; $secmodule = $this->db->getOne($sql_rb,0,"secmodule"); //crmv@25443 global $adb; $secmoduleInstance = Vtecrm_Module::getInstance($secmodule); if (empty($this->reference_fields[$secmodule])) { $referenceUitype = array(); $res = $adb->query("SELECT uitype FROM ".$table_prefix."_ws_fieldtype WHERE fieldtype = 'reference'"); if ($res) { while($row=$adb->fetchByAssoc($res)) { $referenceUitype[] = $row['uitype']; } } $res = $adb->query("SELECT fieldname from ".$table_prefix."_field WHERE uitype in (".implode(',',$referenceUitype).") and tabid = ".$secmoduleInstance->id); if ($res) { while($row=$adb->fetchByAssoc($res)) { $this->reference_fields[$secmodule][] = $row['fieldname']; } } } //TODO: multipicklist_fields if (empty($this->picklist_fields[$secmodule])) { $picklistUitype = array(); $res = $adb->query("SELECT uitype FROM ".$table_prefix."_ws_fieldtype WHERE fieldtype IN ('picklist')"); if ($res) { while($row=$adb->fetchByAssoc($res)) { $picklistUitype[] = $row['uitype']; } } $picklistres = $adb->query("SELECT fieldname from ".$table_prefix."_field WHERE uitype in (".implode(',',$picklistUitype).") and tabid = ".$secmoduleInstance->id); if($picklistres) { while($row=$adb->fetchByAssoc($picklistres)) { $this->picklist_fields[$secmodule][] = $row['fieldname']; } } } //crmv@25443e //crmv@126096 : TODO use _ws_fieldtype $Checkboxes = array(); $Picklists = array(); $Picklists_ml = array(); $Textareas = array(); $Datefields = array(); $DateTimefields = array(); $Multipicklists = array(); $NumbersField = array(); $UserField = array(); $sdk_uitypes = array(); $TimerField = array(); $sql = "SELECT fieldname, uitype FROM ".$table_prefix."_field WHERE tabid = '".$secmoduleInstance->id."'"; $result = $this->db->query($sql); while($row = $this->db->fetchByAssoc($result)) { if ($row["uitype"] == "19" || $row["uitype"] == "20" || $row["uitype"] == "21" || $row["uitype"] == "24") $Textareas[] = $row["fieldname"]; elseif ($row["uitype"] == "5" || $row["uitype"] == "23" || $row["uitype"] == "70") { if ($row["uitype"] == "5") { $Datefields[] = $row["fieldname"]; } else { $DateTimefields[] = $row["fieldname"]; } } elseif ($row["uitype"] == "15" || $row["fieldname"] == "salutationtype") $Picklists[] = $row["fieldname"]; elseif ($row["uitype"] == "1015") $Picklists_ml[] = $row["fieldname"]; elseif ($row["uitype"] == "56") $Checkboxes[] = $row["fieldname"]; elseif ($row["uitype"] == "33") $Multipicklists[] = $row["fieldname"]; elseif ($row["uitype"] == "71" || $row["uitype"] == "7") $NumbersField[] = $row["fieldname"]; elseif (in_array($row["uitype"],array('50','51','52','53','77'))) $UserField[] = $row["fieldname"]; elseif(SDK::isUitype($row["uitype"])) $sdk_uitypes[$row["fieldname"]]=$row["uitype"]; elseif ($row["uitype"] == "1020") $TimerField[] = $row["fieldname"]; } //crmv@126096e if(strpos($this->content,"#RELBLOCK".$relblockid."_START#") !== false) { if (strpos($this->content,"#RELBLOCK".$relblockid."_END#") !== false) { $tableDOM = $this->convertRelatedBlock($relblockid); $oRelBlockRun = new RelBlockRun($this->focus->id, $relblockid, $this->module, $secmodule); $RelBlock_Data = $oRelBlockRun->GenerateReport(); $ExplodedPdf = array(); $Exploded = explode("#RELBLOCK".$relblockid."_START#",$this->content); $ExplodedPdf[] = $Exploded[0]; for($iterator=1;$iterator 0) { foreach ($RelBlock_Data AS $RelBlock_i => $RelBlock_Details) { foreach($ProductParts as $productpartid=>$productparttext) { $show_line = false; //crmv@126096 foreach ($RelBlock_Details AS $fieldname => $value) { //crmv@60349 crmv@97136 crmv@25443 crmv@106527 crmv@26202 crmv@27014 crmv@65492 - 28 if (in_array($fieldname,$UserField) && is_numeric($value)) { $value = $this->getOwnerNameCustom($value); } elseif($fieldname == "terms_conditions") $value = $this->getTermsAndConditionsCustom($value); elseif($fieldname == "comments") $value = $this->getTicketCommentsCustom($efocus); elseif($fieldname == "folderid") $value = $this->getFolderName($value); elseif (in_array($fieldname,(array)$this->reference_fields[$secmodule]) && $value != '' && $value != '-') { $type = getSalesEntityType($value); $tmp = getEntityName($type,$value); if (!empty($tmp)) { foreach($tmp as $key=>$val){ $value = $val; break; } } } elseif(in_array($fieldname, $Datefields)) { $value = substr(getValidDisplayDate($value),0,10); } elseif(in_array($fieldname, $DateTimefields)) { $value = getValidDisplayDate($value); } elseif(in_array($fieldname, $Picklists)) { if(!in_array(trim($value), $this->ignored_picklist_values)) $value = $this->getTranslatedStringCustom($value,$secmodule); //crmv@140504 else $value = ""; } elseif(in_array($fieldname, $Picklists_ml)) { if(!in_array(trim($value), $this->ignored_picklist_values)) $value = Picklistmulti::getTranslatedPicklist($value, $fieldname, $this->language); else $value = ""; } elseif(in_array($fieldname, $Checkboxes)) { $pdf_app_strings = return_application_language($this->language); if($value == 1 || $value == getTranslatedString("yes")) // crmv@159471 $value = $pdf_app_strings["yes"]; else $value = $pdf_app_strings["no"]; } elseif(in_array($fieldname, $Textareas)) $value = nl2br($value); elseif(in_array($fieldname, $Multipicklists)) $value = str_ireplace(' |##| ',', ',$value); elseif(in_array($fieldname, $NumbersField)) $value = $this->formatNumberToPDF($value); elseif(in_array($fieldname, $TimerField)) $value = time_duration(abs($value)); elseif(array_key_exists($fieldname,$sdk_uitypes)){ $sdk_file = SDK::getUitypeFile('php','pdfmaker',$sdk_uitypes[$fieldname]); $sdk_value = $value; if ($sdk_file != '') { include($sdk_file); } } if (trim($value) != "-") $show_line = true; $productparttext = str_replace("$".$fieldname."$",$value,$productparttext); } //crmv@126096e if ($show_line) $ExplodedPdf[$productpartid].=$productparttext; } } } $this->content = implode('',$ExplodedPdf); } } $ConvertRelBlock[] = $relblockid; } } } } } protected function convertRelatedBlock($relblockid) { require_once("classes/simple_html_dom.php"); $html = str_get_html($this->content); $tableDOM=false; foreach($html->find("td") as $td) { if(trim($td->plaintext) == "#RELBLOCK".$relblockid."_START#"){ $td->parent->outertext = "#RELBLOCK".$relblockid."_START#"; list($tag)=explode(">",$td->parent->parent->parent->outertext,2); $header = $td->parent->prev_sibling()->outertext; if ($td->parent->prev_sibling()->children[0]) { $header_style = $td->parent->prev_sibling()->children[0]->getAttribute("style"); } $footer_tag=""; if(isset($header_style)){ $StyleHeader = explode(";", $header_style); // print_r($StyleHeader); if(isset($StyleHeader)){ foreach($StyleHeader as $style_header_tag) { if(strpos($style_header_tag, "border-top") == TRUE){ $footer_tag.=" "; } } } } else { $footer_tag.=" "; } $footer_tag.=""; // LAST VALUE IN TEMPLATE, MUST BE SUM $var = $td->parent->next_sibling()->last_child()->plaintext; $subtotal_tr=""; // SUBTOTAL if(strpos($var, "TOTAL")!==false){ // check for #PRODUCTBLOC_START# style if(is_object($td)){ $style_subtotal=$td->getAttribute("style"); } if(isset($td->innertext)){ list($style_subtotal_tag,$style_subtotal_endtag)=explode("#PRODUCTBLOC_START#",$td->innertext); } else { $style_subtotal_tag = ""; $style_subtotal_endtag = ""; } // search for border-top style in PRODUCTBLOC_START td if(isset($style_subtotal)){ $StyleSubtotal = explode(";", $style_subtotal); if(isset($StyleSubtotal)){ foreach($StyleSubtotal as $style_tag) { if(strpos($style_tag, "border-top") == TRUE){ $tag.=" style=\"".$style_tag."\""; break; } } } } else { $style_subtotal = ""; } $tag.=">"; $subtotal_tr=""; $subtotal_tr.="".$style_subtotal_tag."%G_Subtotal%".$style_subtotal_endtag.""; $subtotal_tr.="".$style_subtotal_tag."".rtrim($var,"$")."_SUBTOTAL$".$style_subtotal_endtag.""; $subtotal_tr.=""; } $tableDOM["tag"] = $tag; $tableDOM["header"] = $header; $tableDOM["footer"] = $footer_tag; $tableDOM["subtotal"] = $subtotal_tr; } if(trim($td->plaintext) == "#RELBLOCK".$relblockid."_END#") $td->parent->outertext = "#RELBLOCK".$relblockid."_END#"; } $this->content=$html->save(); $html->clear(); ////crmv@58635 unset($html); ////crmv@58635 return $tableDOM; } //VlMe 1.31 S protected function convertListViewBlock() { require_once("classes/simple_html_dom.php"); $html = str_get_html($this->content); foreach($html->find("td") as $td) { if(trim($td->plaintext) == "#LISTVIEWBLOCK_START#") $td->parent->outertext = "#LISTVIEWBLOCK_START#"; if(trim($td->plaintext) == "#LISTVIEWBLOCK_END#") $td->parent->outertext = "#LISTVIEWBLOCK_END#"; } $this->content=$html->save(); $html->clear(); ////crmv@58635 unset($html); ////crmv@58635 } //VlMe 1.31 E // crmv@198024 protected function convertProdAttr($module, $focus) { // get all tags in the body $mathes = array(); $bigmod = strtoupper($module); if (preg_match_all("/\\\${$bigmod}_PRODATTR_\d+_\d+\\\$/", $this->content, $matches)) { // now get all values for current product $values = $focus->getAttributes(); // for each match, prepare the replacement foreach ($matches[0] as $match) { $key = strtolower(str_replace(array("\${$bigmod}_", '$'), '', $match)); if (array_key_exists($key, $values)) { $rval = $values[$key]; } else { $rval = ''; } $this->replacements[$match] = $rval; } // and replace them! $this->replaceContent(); } } // crmv@198024e } function generate_cool_uri($name) { $nazov=trim(strtolower(stripslashes($name))); $Search = array("$","€","&","%",")","(","."," - ","/"," ",",","ľ","Å¡","Ä�","Å¥","ž","ý","á","í","é","ó","ö","ů","ú","ü","ä","ň","Ä�","ô","Å•","Ľ","Å ","ÄŒ","Ť","Ž","Ã�","Ã�","Ã�","É","Ó","Ú","ÄŽ","\"","°","ß"); $Replace = array("","","","","","","-","-","-","-","-","l","s","c","t","z","y","a","i","e","o","o","u","u","u","a","n","d","o","r","l","s","c","t","z","y","a","i","e","o","u","d","","","ss"); $return=str_replace($Search, $Replace, $name); // echo $return; return $return; } function createPDFAndSaveFile($templates,$focus,$modFocus,$file_name,$moduleName,$language) { $db="adb"; $cu="current_user"; $dl="default_language"; global $$db, $$cu, $$dl; global $table_prefix; $date_var = date("Y-m-d H:i:s"); //to get the owner id $ownerid = $focus->column_fields["assigned_user_id"]; if(!isset($ownerid) || $ownerid=="") $ownerid = $$cu->id; $current_id = $$db->getUniqueID($table_prefix."_crmentity"); $templates = rtrim($templates,";"); $Templateids = explode(";",$templates); $name=""; if (!$language || $language == "") $language = $$dl; foreach ($Templateids AS $templateid) { $PDFContent = PDFContent::getInstance($templateid, $moduleName, $modFocus, $language); // crmv@34738 $pdf_content = $PDFContent->getContent(); $Settings = $PDFContent->getSettings(); if($name=="") $name = $PDFContent->getFilename(); if (isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "edit" && isset($_REQUEST["header".$templateid]) && isset($_REQUEST["body".$templateid]) && isset($_REQUEST["footer".$templateid])) { $header_html = $_REQUEST["header".$templateid]; $body_html = $_REQUEST["body".$templateid]; $footer_html = $_REQUEST["footer".$templateid]; } else { $header_html = $pdf_content["header"]; $body_html = $pdf_content["body"]; $footer_html = $pdf_content["footer"]; } $body_html = str_replace("#LISTVIEWBLOCK_START#","",$body_html); $body_html = str_replace("#LISTVIEWBLOCK_END#","",$body_html); $encoding = $Settings["encoding"]; if ($Settings["orientation"] == "landscape") $format = $Settings["format"]."-L"; else $format = $Settings["format"]; if (!isset($mpdf)) { /* if($encoding=="auto"){ $mpdf=new mPDF("utf-8",$format,'','',$Settings["margin_left"],$Settings["margin_right"],$Settings["margin_top"],$Settings["margin_bottom"],10,10); $mpdf->SetAutoFont(); } else $mpdf=new mPDF($encoding,$format,'','',$Settings["margin_left"],$Settings["margin_right"],$Settings["margin_top"],$Settings["margin_bottom"],10,10); */ $mpdf=new mPDF('',$format,'','Arial',$Settings["margin_left"],$Settings["margin_right"],0,0,$Settings["margin_top"],$Settings["margin_bottom"]); $mpdf->SetAutoFont(); @$mpdf->SetHTMLHeader($header_html); } else { @$mpdf->SetHTMLHeader($header_html); @$mpdf->WriteHTML(''); } @$mpdf->SetHTMLFooter($footer_html); @$mpdf->WriteHTML($body_html); } $upload_file_path = decideFilePath(); if($name!="") $file_name = $name.".pdf"; $mpdf->Output($upload_file_path.$current_id."_".$file_name); $filesize = filesize($upload_file_path.$current_id."_".$file_name); $filetype = "application/pdf"; // crmv@150773 $sql1 = "insert into ".$table_prefix."_crmentity (crmid,smcreatorid,smownerid,setype,createdtime,modifiedtime) values(?, ?, ?, ?, ?, ?)"; $params1 = array($current_id, $$cu->id, $ownerid, "Documents Attachment", $$db->formatDate($date_var, true), $$db->formatDate($date_var, true)); // crmv@150773e $$db->pquery($sql1, $params1); $sql2="insert into ".$table_prefix."_attachments(attachmentsid, name, description, type, path) values(?, ?, ?, ?, ?)"; $params2 = array($current_id, $file_name, $focus->column_fields["description"], $filetype, $upload_file_path); $result=$$db->pquery($sql2, $params2); $sql3='insert into '.$table_prefix.'_seattachmentsrel values(?,?)'; $$db->pquery($sql3, array($focus->id, $current_id)); $sql4="UPDATE ".$table_prefix."_notes SET filesize=?, filename=? WHERE notesid=?"; $$db->pquery($sql4,array($filesize,$file_name,$focus->id)); return true; } ?>