せん茶請求書 領収書(控)を印字しない

せん茶請求書 で、領収書を発行すると1枚の用紙に「領収書」と「領収書(控)」が印字されたPDFが作成されます。
印刷して渡す場合はこれで良いのですが、メール添付等で領収書を発行する場合は控えが一緒に印字されているのはうまくないので、「領収書(控)」を印字しないようにします。

領収書印刷、画面上では「保存する」ボタン、に相当するアクションは、
formのactionが”/bills/receipt/{bill_no}” なので、
app/controllers/bills_controller.php のreceipt()関数になります。
ここを見ていくと以下の記述があります。

				App::import('Vendor','pdf/receiptpdf');

				//インスタンス化
				$pdf = new RECEIPTPDF();

				$pdf->AddMBFont(MINCHO ,'SJIS');

				//ページの作成
				$pdf->AddPage();
804行目の’pdf/receiptpdf’がPDFの出力処理の様なので、このファイルを確認。
		//大枠(控)
		$this->SetXY(21,110);
		$this->SetFont(MINCHO,'',16);
		$this->Cell( 168, 80, NULL, 1, 'L');

		$this->SetFont(MINCHO,'B',14);
		$this->SetXY(31, 115);
		$str = "領 収 書 (控)";
		$str = $this->conv($str);
		$this->Write(5,$str);
		$this->SetLineWidth(0.2);
		//控え

		//下マージンの設定
		$this->SetAutoPageBreak(true, 5);



		//枠及びラインの色の設定 ※ここをいじれば以下すべての枠の色が変わります。


		//顧客名枠
		$font_size = $this->customer_font(mb_strlen($_param['Bill']['CST_ID']));

		$this->SetXY(31, 125);
		$this->SetFont(MINCHO,'', $font_size);
		$str = "様";
		$str = $this->conv($str);
		$this->Cell( 85, 4, $str, 'B', 1, 'R');

		//顧客名
		$this->SetXY(31, 125);
		$this->SetFont(MINCHO,'', $font_size);
		$str = $_param['Bill']['CST_ID'];
		$str = $this->conv($str);
		$this->Cell( 85, 4, $str,'', 0, 'L');

		//請求金額枠
		$this->SetXY(31,138);
		$this->SetFont(MINCHO,'B',16);
		$str =  $_param['Bill']['TOTAL'] ? '\\'.number_format($_param['Bill']['TOTAL']).'-' : '\\0-';
		$str = $this->conv($str);
		$this->Cell( 150, 8, $str, 0, 1, 'C', 1);

		//但書き枠
		$this->SetXY(71, 150);
		$this->SetFont(MINCHO,'',11);
		$str = "但 ".$_param['Bill']['PROVISO'];
		$str = $this->conv($str);
		$this->Cell( 75, 4, $str, 'B', 1, 'L');

		//発行日
		$this->SetXY(71, 155);
		$this->SetFont(MINCHO,'',11);
		$str = "発行日 ".substr($_param['Bill']['DATE'],0,4)."年".substr($_param['Bill']['DATE'],5,2)."月".substr($_param['Bill']['DATE'],8,2)."日\n";
		$str = $this->conv($str);
		$this->Write(5,$str);

		//自社項目
		$this->SetLeftMargin(130);
		$this->SetY(160);
		$this->SetFont(MINCHO,'B',8);
		$str = $_param['Company']['NAME']."\n";
		$str = $this->conv($str);
		$this->Write(5,$str);

		$this->SetLeftMargin(130);
		$this->SetY(165);
		$this->SetFont(MINCHO,'',8);
			$str  = "〒";
		if(empty($_param['Company']['POSTCODE1']) && empty($_param['Company']['POSTCODE2']) && empty($_param['Company']['POSTCODE3'])) {

		}else {
			$str .= $_param['Company']['POSTCODE1']."-".$_param['Company']['POSTCODE2']."\n";
		}

		if($_param['Company']['CNT_ID']) {
			$str .= $_county[$_param['Company']['CNT_ID']];
		}else {

		}
		$str .= $_param['Company']['ADDRESS']."\n";
		$str .= $_param['Company']['BUILDING']."\n";


		$str .= "TEL ";

		if(empty($_param['Company']['PHONE_NO1']) && empty($_param['Company']['PHONE_NO2']) && empty($_param['Company']['PHONE_NO3'])) {

		}else {
			$str .= $_param['Company']['PHONE_NO1']."-".$_param['Company']['PHONE_NO2']."-".$_param['Company']['PHONE_NO3']."\n";
		}		$str = $this->conv($str);
		$this->Write(4,$str);

		//印鑑枠
		$this->SetXY(31,75);
		$this->SetFont(MINCHO,'',16);
		$this->Cell( 22, 22, NULL, 1, 'L');

		//領収書番号枠
		$this->SetLeftMargin(152);
		$this->SetY(116);
		$this->SetFont(MINCHO,'',9);
		$str = "No.".$_param['Bill']['RECEIPT_NUMBER'];
		$str = $this->conv($str);
		$this->Cell( 35, 4, $str, '', 1, 'L');
この2箇所をコメントアウトすれば、領収書(控)が印字されなくなります。


せん茶請求書 インストール

請求書・見積書作成ソフトせん茶請求書をインストールしました。

日本製のソフトウェアでインストール手順も日本語で書かれているので(インストール方法 – オープンソースのせん茶請求書・見積書 – 業務ソフト)、北海道・沖縄県以外は特に問題なくインストールできます。

北海道・沖縄県での障害

インストールを進めていき、”インストール:基本情報設定”で都道府県に北海道または沖縄県を指定すると「登録」しても同じ画面が表示され先に進めません。

フレームワークはCakePHPを使用しているようで、バリデーション処理を調べていくと
Companyモデル(app/models/company.php)のバリデーションルールが以下のようになっています。
                'CNT_ID' => array(
                        "rule1" => array('rule' => array('range', 1, 47),
                                'message' => '都道府県を選択してください'
                        ),
                ),
‘CNT_ID’は都道府県コードを表すプロパティと思われます。
CakePHPの”range”validationは指定の最小値と最大値を含まないので、1より大きく47より小さい、というチェックになり北海道(1)と沖縄県(47)を指定した場合エラーとなります。
ここを以下のように修正。
                'CNT_ID' => array(
                        "rule1" => array('rule' => array('range', 0, 48),
                                'message' => '都道府県を選択してください'
                        ),
                ),
これで北海道と沖縄県でもインストール出来るようになります。
ファイル名と行番号は、今回インストールした「せん茶請求書 ver.2.4.4」のものです。

エラーメッセージが出ない件については、Install(app/models/install.php)モデルには、このバリデーションルールがないためです。
Installのバリデーションでエラーになっていればエラーメッセージが表示されますが、Installのバリデーションは通って、DB保存時のバリデーションでエラーになったものは表示されません。

顧客も同じバリデーションルールになっていれば、顧客登録・編集でも同じ障害が出るかと思い調べてみましたが、顧客モデル(app/models/customer.php)には都道府県コードのバリデーション自体が存在しませんでした。