[VtigerCRM] Vtiger CRM 5.0.4篇-調整報價單PDF

[小抱怨一下]
Well...老實說在搞VCRM( Vtiger CRM) 的PDF真是花我不少時間。去查看所有的繁簡英網站(只差沒去日本找,因為我不懂日文@@),大部分都只是貼文戰或是解釋安裝與中文化而已,對於後續修改模組的討論情報還真是少得可憐。曾一度想放棄掉,不過看過VCRM的sourse code認為問題應該很好解決,只是欠缺一個討論的環境罷了。最後還是被我克服了。廢話不多說,來教大家如何修改PDF的風格、位置調整、與增加資料庫文字區塊。


首先請確認您的版本跟我一樣是5.0.4再來看比較好,否則自己要做一下功課看對應的位置在哪裡。像5.0.4與5.1.0的PDF模組位置有點小不同,SQL語法上也有點小差異,但不是很難克服,只是要懂一些SQL程式觀念。

(本部落格已有新版5.4.0的安裝指導,請參考該處[安裝篇]Vtiger CRM v5.4.0 繁體中文版本)

原則上主要有四個位置要知道

\modules\Quotes\pdf_templates 該目錄下分別有header、body、footer作風格設計用
\include\tcpdf\pdf.php 這是作為規劃文字格式、大小、字型、定位等等
\modules\Quotes\CreatePDF.php 這是PDF上變數定義用
\include\utils\CommonUtils.php 當變數定義需要去SQL找時,就在這裡
\include\language\zh-tw.lang.php 載入中文代號的繁體定義區


首先大概分兩節來介紹分別為修改與追加,如果只是想改改位置拿掉些東西,網路上就有很多解釋了(我上篇的教學連結上找的到),不過我認為解釋不夠讓人明白我會重新再解釋過。如果你跟我一樣想要追加客戶電話或是業務員名稱之類的,就要看第二節,稍晚提到。

修改---

1. Default PDF上的有些中文沒顯示出來

可能你跟我一樣中文化包沒翻譯到,重新對\include\language\zh-tw.lang.php新增相關名詞解釋就好,請追加,當然名稱你也可以改自己聽得順的。(以下只提供header會用到的,其他我還沒改到)
'Account Number' => 'CN.',
'Page' => '頁次',
'Shipping Address' => '交貨地址',
'Billing Address' => '帳單地址',
'Issue Date' => '發售日期',
'Valid Till' => '有效期限',
'Customer Name' => '客戶名稱',
'Contact Name' => '聯繫人名稱',
'Quote Number' => 'QN.',

2. 修改PDF文字的位置
先了解\modules\Quotes\pdf_templates的檔案內容,試著了解並找出你想改的最好自己多加注解。同時了解會丟哪些變數定義到該某function,

header modules/Quotes/pdf_templates/header.php
body include/tcpdf/templates/body.php
footer modules/Quotes/pdf_templates/footer.php

您可以在此三個地方直接修改array旁的數字,大部分前兩個都是X值與Y值,譬如

// Quote title 顯示"報價單"字樣
$titleBlock=array("25","25","25"); //定位X=25,Y=25
$pdf->title( $app_strings["Quote"],"", $titleBlock );

// Account Number 客戶編號
$acctBubble=array("180","0","12"); //定位X=180,Y=0
$numberText=$app_strings["Account Number"]." ".$account_id;
$pdf->addAccNumber($numberText,$acctBubble);

如果想改字型或大小等等再透過\include\tcpdf\pdf.php去找出該某function就能看到邏輯性了。


3.修改Default的泡泡方塊

其實Default上的方塊定義很多是使用了泡泡方塊,想改方塊只要對該文字區塊定義位置修改一個數字就好,數字0就是完全直角,相反數字越大越圓,不過不能太大最多好像只能7.5

找到你想改的文字區塊的function內會看到
$this->RoundedRect($r1, $y1, ($r2 - $r1), $y2, 1, 'D');
倒數第2個數字就是修改弧度參數

如果想取消方塊,只顯示文字,把這行拿掉就好或加上//
//$this->RoundedRect($r1, $y1, ($r2 - $r1), $y2, 1, 'D');

想改方塊底色,數字0~255,由黑到白
$this->SetFillColor(248);


追加---

你想追加某一欄位,如果只是固定文字,其實先去\include\tcpdf\pdf.php隨便偷一段function名字改掉後改好你的位置編輯器,在\modules\Quotes\pdf_templates設計時,都丟到你DIY的function就好。

如果是想追加一些資料庫的文字,譬如該報單的客戶電話、業務負責人之類的,那你要具備一些程式知識才行,這裏我就以追加客戶電話和業務員名稱為範本。

1. 先找出資料庫位置,透過phpmyadmin知道客戶電話在資料表: vtiger_account - > phone,VCRM都是藉由資料表索引為收詢關鍵,該資料表為accountid

2. 新定義\include\utils\CommonUtils.php,追加

function getAccountPhone($account_id)
{
global $adb;
if($account_id != '')
{
$sql = "select phone from vtiger_account where accountid=?";
$result = $adb->pquery($sql, array($account_id));
$accountphone = $adb->query_result($result,0,"phone");
}
return $accountphone;
}

3. 再追加\modules\Quotes\CreatePDF.php

$account_phone = getAccountPhone($focus->column_fields[account_id]);

4. 這樣藉由規劃出來的新變數$account_phone就能捕捉到客戶電話了。

5. 追加業務員名稱,因為網路上有人分享了,直接在header.php添上這段就可以。

$user_id = $focus->column_fields['assigned_user_id'];
if(!empty($user_id)) {
$user_focus = new Users();
$user_focus->retrieve_entity_info($user_id,"Users");
$USER_NAME1 = $user_focus->column_fields["last_name"];
$USER_NAME2 = $user_focus->column_fields["first_name"];
} else {
$USER_NAME1 = "";
$USER_NAME2 = "";
}
$invBlock=array("10","265");
$pdf->addRecBlock("$USER_NAME1 $USER_NAME2", $app_strings["Assigned To"],$invBlock);


(本部落格已有新版5.4.0的安裝指導,請參考該處[安裝篇]Vtiger CRM v5.4.0 繁體中文版本)


留言