mdl_settings->setting('invoice_logo')) { return ''; } return ''; } /** * Returns the invoice logo for PDF files * * @return string */ function invoice_logo_pdf() { $CI = &get_instance(); if ($CI->mdl_settings->setting('invoice_logo')) { return ''; } return ''; } /** * Returns a Swiss IS / IS+ code line * Documentation: https://www.postfinance.ch/binp/postfinance/public/dam.M26m_i6_6ceYcN2XtAN4w8OHMynQG7FKxJVK8TtQzr0.spool/content/dam/pf/de/doc/consult/manual/dlserv/inpayslip_isr_man_en.pdf * * @param string $slipType * @param $amount * @param string $rnumb * @param $subNumb * @return string * @throws Error */ function invoice_genCodeline($slipType, $amount, $rnumb, $subNumb) { $isEur = false; if ((int)$slipType > 14) { $isEur = true; } else { $amount = .5 * round((float)$amount / .5, 1); } if (!$isEur && $amount > 99999999.95) { throw new Error("Invalid amount"); } elseif ($isEur && $amount > 99999999.99) { throw new Error("Invalid amount"); } $amountLine = sprintf("%010d", $amount * 100); $checkSlAmount = invoice_recMod10($slipType . $amountLine); if (!preg_match("/\d{2}-\d{1,6}-\d{1}/", $subNumb)) { throw new Error("Invalid subscriber number"); } $subNumb = explode("-", $subNumb); $fullSub = $subNumb[0] . sprintf("%06d", $subNumb[1]) . $subNumb[2]; $rnumb = preg_replace('/\s+/', '', $rnumb); return $slipType . $amountLine . $checkSlAmount . ">" . $rnumb . "+ " . $fullSub . ">"; } /** * Calculate checksum using Recursive Mod10 * See https://www.postfinance.ch/binp/postfinance/public/dam.Ii-X5NgtAixO8cQPvja46blV6d7cZCyGUscxO15L5S8.spool/content/dam/pf/de/doc/consult/manual/dldata/efin_recdescr_man_en.pdf * Page 5 * * @param string $in * @return integer */ function invoice_recMod10($in) { $line = [0, 9, 4, 6, 8, 2, 7, 1, 3, 5]; $carry = 0; $chars = str_split($in); foreach ($chars as $char) { $carry = $line[($carry + intval($char)) % 10]; } return (10 - $carry) % 10; }