Výpis faktur zákazníků na Vašich stránkách

Na našich stránkách lze v sekci věnované zákazníkům najít seznam faktur, které jsme vystavili. Zobrazujeme o nich základní informace, jako je číslo faktury, datum vystavení a také stav úhrady. Výslednou fakturu si lze stáhnout jako PDF soubor.

V následujícím návodu vám ukážeme postup, který vám umožní mít stejnou funkci na svých stránkách.

Výslednou aplikaci si můžete vyzkoušet u nás a nebo si ji stáhnout.

Stručný popis

Celé to funguje tak, že se webový server dotáže (s heslem) FlexiBee a vypíše všechny faktury, které jsou vystaveny na konkrétní DIČ. Předpokládáme, že při instalaci zajistíte ověření uživatele, zjištění správného DIČ a také vizuální integraci s Vašimi webovými stránkami.

Na začátku tedy FlexiBee provede dotaz na adresu http://demo.flexibee.eu/c/demo/faktura-vydana/(dic='CZ7002051235').js ve formátu JSON a výsledná data zobrazí v tabulce. Když uživatel projeví zájem o PDF, přečteme data z adresy http://demo.flexibee.eu/c/demo/faktura-vydana/(dic='CZ7002051235' and id=21).js.

Celé tu funguje tak, že webová aplikace funguje jako proxy. Přistupující uživatel tedy nemusí mít účet ve FlexiBee.

Detailní návod

Základem je soubor winstrom-rest-api.php:

<?php
/**
 * Jednoduchá funkce, která připraví dotaz.
 * @param $urlSuffix část URL za identifikátorem firmy.
 */
function wsRequestObject($urlSuffix) {
    global $wsHost, $wsFirma, $wsUser, $wsPassword;

    require_once "HTTP/Request.php";
    $req =& new HTTP_Request();
    // Nastavení autorizačních údajů (jméno a heslo)
    $req->setBasicAuth($wsUser, $wsPassword);

    $req->setURL($wsHost."/c/".$wsFirma.$urlSuffix);
    $req->setMethod(GET);

    return $req;
}


/**
 * Funkce, která provede operaci a vyhodnotí výsledek.
 */
function wsProcess($req) {
    $response = $req->sendRequest();

    // Následující kód již jen vizualizuje, zda se operace povedla
    if (PEAR::isError($response)) {
        printf ("Při komunikaci se serverem nastala síťová chyba: %s", $response->getMessage());
        return FALSE;
    } else {
        // HTTP požadavek uspěl:

        if ($req->getResponseCode() != 200) {
                // Součástí odpovědi je JSON zpráva, která obsahuje důvod selhání
                $error = json_decode($req->getResponseBody(), true);
                printf ("Při operaci nastala chyba (HTTP %d: %s)",.
                    $req->getResponseCode(),.
                    $req->getResponseReason()
                );
               return FALSE;
        } else {
               return $req->getResponseBody();
        }
    }
}

?>

Je také potřeba vytvořit konfigurační soubor config.php:

<?php
    // zde je potřeba doplnit konfigurační údaje pro připojení na server
    $wsHost = "https://demo.winstrom.eu:5434";
    $wsFirma = "demo";
    $wsUser = "winstrom";
    $wsPassword = "winstrom";

    // načtení DIČ firmy z profilu uživatele. Lze také vyměnit za jiné identifikátory (IČ, kód, externí ID, ...)
    $dic = "CZ7002051235";

?>

Důležitá je část, která určuje DIČ firmy. Zde předpokládáme integraci s vašimi webovými stránkami, které zajistí identifikaci uživatele a načtení odpovídající firmy.

Nyní již přichází na řadu načtení přehledu faktur index.php:

<?php
        include ("config.php");
        include ("winstrom-rest-api.php");
        $suffix = "/faktura-vydana/(dic=".urlencode($dic).").json?order=datVyst@D&detail=detail";
        $req = wsRequestObject($suffix);
        $result = wsProcess($req);
        if ($result === FALSE) {
            die("Nemohu přečíst fakturu ");
        }
        $result = json_decode($result, true);

        header("Content-type: text/html; charset=utf-8");
?> 
  <html>
    <head>
    <title>Vystavené faktury</title>
    </head>
<body>
  <h1>Vystavené faktury</h1>

<?php if (!isset($result) || !isset($result["winstrom"]["faktura-vydana"])) { ?>
<p>Na Vaši firmu nebyla vystavena žádná faktura.</p>
<?php } else { ?>

  <table>
    <thead>
        <tr>
                <th>Číslo faktury</th>
                <th>Datum faktury</th>
                <th>Částka</th>
                <th>Stav</th>
        </tr>
    </thead>
    <tbody>
    <?php while (list($k, $faktura) = each ($result["winstrom"]["faktura-vydana"])) { ?>
        <tr>
            <td><a href="pdf.php?id=<?php print($faktura["id"]); ?>"><?php print ($faktura["kod"]); ?></a></td>
            <td><?php print wsFormatDate($faktura["datVyst"]); ?></td>
            <td style="text-align:right"><?php print wsFormatMoney($faktura["sumCelkem"]); ?> Kč</td>
            <td><?php if ($faktura["stavUhrK"] == "") { print "<span style=\"color: red\">Neuhrazeno</span>"; } else { print ("<span style=\"color: green\">".$faktura["stavUhrK@showAs"]." (dne ".wsFormatDate($faktura["datUhr"]).")</span>"); } ?> </td>
        </tr>
    <?php } ?>
    </tbody>
  </table>
<?php } ?>

</body>
</html>

Abychom uživateli umožnili zobrazení PDF verze faktury, vytvoříme ještě soubor pdf.php:

<?php
	include ("config.php");
	include ("winstrom-rest-api.php");

	$id = $_GET["id"];

	$suffix = "/faktura-vydana/(dic='".urlencode($dic)."'%20and%20id=".((int)$id).").pdf?order=datVyst@D&detail=detail";
	$req = wsRequestObject($suffix);
	$result = wsProcess($req);
	if ($result === FALSE) {
	    die("Nemohu přečíst fakturu ");
	}

	// nastavíme spravný Content-Type a pokud možno, otevřeme PDF přímo v prohlížeči
	header("Content-Type: application/pdf");
	header("Content-Disposition: inline; filename=\"faktura.pdf\" ");
	print($result);
?>

To samozřejmě není vše, co můžete s rozhraním FlexiBee REST API dělat. Můžete exportovat fakturu jako ISDOC, zobrazovat ceník, objednávky a mnoho dalšího.

Výslednou aplikaci si můžete vyzkoušet u nás a nebo si ji stáhnout.