Léta jsem používal pro vystavování faktur a související činnosti vlastní webovou aplikaci. Teď jsem našel službu Fakturoid, která dělá totéž lépe a umí skoro všechno, co ta moje. A co neumí, to se dá napsat pomocí jejího API, pro které jsem napsal .NET klienta, kterého tímto dávám jako open source k dispozici.

Fakturoid nabízí docela příjemné API. Je to vcelku příčetné REST rozhraní s JSON serializací a docela dobře funguje s klientskou knihovnou pro ASP.NET Web API. Některé aspekty serializace jsou trochu podivné a nejsem si jist 100% správností typů (které nejsou publikované a je na fantazii implementátora, jak si s nimi poradí), ale v zásadě by to mělo fungovat.

Rád bych poděkoval technické podpoře fakturoidího robota, protože je nejlepší, s jakou jsem se poslední dobou setkal. Odpovědi k věci a většinou prakticky obratem.

Moje API najdete na GitHubu (nojo, nakazil jsem se tou nemocí taky) a je k dispozici i jako NuGet balíček Altairis.Fakturoid.Client**.

Ukázka použití

Ukázkovou aplikaci (stejně jako dokumentaci) najdete na GitHubu, já níže nabídnu jenom ukázku, jak se s knihovnou pracuje:

// Vytvořit instanci API klienta
var fc = new FakturoidContext("username", "apitoken", "Název aplikace ([email protected])");

// Vytvořit instanci třídy, která reprezentuje nový kontakt
var newSubject = new JsonSubject {
    name = "ACME, s. r. o.",
    street = "Testovací 123",
    city = "Praha",
    zip = "11000",
    country = "CZ",
    registration_no = "12345678",
    vat_no = "CZ12345678",
    email = "[email protected]"
};

// Pomocí API vytvořit kontakt a získat jeho ID
var newSubjectId = fc.Subjects.Create(newSubject);

// Vytvořit instanci třídy, která reprezentuje fakturu
var newInvoice = new JsonInvoice {
    subject_id = newSubjectId,
    lines = new List<jsoninvoiceline abp="342">(),
};

// Přidat do ní nějaké položky
newInvoice.lines.Add(new JsonInvoiceLine {
    name = "Položka 1",
    quantity = 1,
    unit_name = "ks",
    unit_price = 100,
    vat_rate = 21
});
newInvoice.lines.Add(new JsonInvoiceLine {
    name = "Položka 2",
    quantity = 3,
    unit_name = "hod.",
    unit_price = 1234,
    vat_rate = 21
});

// Pomocí API fakturu vytvořit
var newInvoiceId = context.Invoices.Create(newInvoice);

// ...a odeslat e-mailem
context.Invoices.SendMessage(newInvoiceId, InvoiceMessageType.InvoiceMessage);</jsoninvoiceline>

Základní tarif (omezený na 5 zákazníků, ale bez omezení na počet faktur) je zdarma, další jsou za ceny velmi nízké a uživatelsky přítulné, takže mohu doporučit minimálně na vyzkoušení.