<?php
if (! defined('BASEPATH')) {
exit('Dostop ni dovoljen');
}
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelMedium;
use SepaQr\Data;
#[AllowDynamicProperties]
class QrCode {
public $racun;
public $prejemnik;
public $iban;
public $bic;
public $valuta;
public $sklic;
public $opis_placila;
public $payer_name;
public $payer_address;
public $payer_city;
public function __construct($params) {
$CI = &get_instance();
$CI->load->helper('template');
$this->racun = $params['invoice'];
// Podatki prejemnika
$this->prejemnik = trim($CI->mdl_settings->setting('qr_code_prejemnik')) ?: 'Podjetje d.o.o.';
$this->iban = str_replace(' ', '', $CI->mdl_settings->setting('qr_code_iban'));
$this->bic = trim($CI->mdl_settings->setting('qr_code_bic'));
// Preverimo valuto (3-črkovna koda, npr. EUR)
$this->valuta = trim($CI->mdl_settings->setting('qr_code_valuta')) ?: 'EUR';
// Podatki o plačniku (iz računa)
$this->payer_name = trim($this->racun->client_name) ?: '';
$this->payer_address = trim($this->racun->client_address_1) ?: '';
$this->payer_city = trim($this->racun->client_city) ?: '';
// Sklic (model in referenca skupaj)
$model = 'SI12'; // Lahko pridobiš iz nastavitev
$reference = preg_replace('/\s+/', '', $this->racun->invoice_number);
$this->sklic = $model . $reference;
// Opis plačila
$this->opis_placila = trim(parse_template($this->racun, $CI->mdl_settings->setting('qr_code_opis_placila'))) ?: 'Plačilo računa';
}
public function generateQrData() {
$invoiceNumber = trim($this->racun->invoice_number);
$dueDate = date("d.m.Y", strtotime($this->racun->invoice_date_due));
$amount = str_pad(number_format($this->racun->invoice_balance * 100, 0, '', ''), 11, '0', STR_PAD_LEFT);
// Struktura QR kode (posamezna polja se ločijo z \n)
$qrData = "UPNQR\n";
$qrData .= "\n"; // IBAN plačnika (prazno)
$qrData .= "\n"; // Depozit (prazno)
$qrData .= "\n"; // Dvig (prazno)
$qrData .= "\n"; // Referenca plačnika (prazno)
$qrData .= "{$this->payer_name}\n";
$qrData .= "{$this->payer_address}\n";
$qrData .= "{$this->payer_city}\n";
$qrData .= "{$amount}\n";
$qrData .= "\n"; // Datum plačila (prazno)
$qrData .= "\n"; // Nujno (prazno)
$qrData .= "OTHR\n"; // Koda namena (npr. COST, OTHR itd.)
$qrData .= "{$this->opis_placila}\n";
$qrData .= "{$dueDate}\n";
$qrData .= "{$this->iban}\n";
$qrData .= "{$this->sklic}\n";
$qrData .= "{$this->prejemnik}\n";
$qrData .= "Ulica 1\n"; // Ulica prejemnika (prilagodi po potrebi)
$qrData .= "1000 Ljubljana\n"; // Mesto prejemnika (prilagodi po potrebi)
// Izračun kontrolne vsote (checksum)
$checksum = strlen(str_replace("\n", "", $qrData)) + 19;
$qrData .= str_pad($checksum, 3, '0', STR_PAD_LEFT) . "\n";
return $qrData;
}
public function generate() {
$qrCodeDataUri = Builder::create()
->data($this->generateQrData())
->errorCorrectionLevel(new ErrorCorrectionLevelMedium())
->build()
->getDataUri();
return $qrCodeDataUri;
}
}
1 Like