From 4ef88003b7cbfd9db6769c2897e58fd5b4dc83d0 Mon Sep 17 00:00:00 2001 From: Arjen Baart Date: Thu, 4 Nov 2010 16:44:07 +0100 Subject: [PATCH] Initial revision of account Account is a simple bookkeeping application developped over a period of more than 10 years. The initial revision is actually release 1.3.3 of the application. --- Ledger | 95 +++++ account.cpp | 588 ++++++++++++++++++++++++++++ account.h | 348 +++++++++++++++++ account_main.cpp | 224 +++++++++++ balans.xsl | 58 +++ bank.cpp | 260 +++++++++++++ doc/classes.svg | 709 ++++++++++++++++++++++++++++++++++ doc/design.odt | Bin 0 -> 16165 bytes doc/processes.svg | 467 +++++++++++++++++++++++ example.jrn | 1099 +++++++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 31 ++ postscript.cpp | 5 + postscript.h | 94 +++++ profit.xsl | 57 +++ saldibalans.xsl | 88 +++++ total.xsl | 25 ++ 16 files changed, 4148 insertions(+) create mode 100644 Ledger create mode 100644 account.cpp create mode 100644 account.h create mode 100644 account_main.cpp create mode 100644 balans.xsl create mode 100644 bank.cpp create mode 100644 doc/classes.svg create mode 100644 doc/design.odt create mode 100644 doc/processes.svg create mode 100644 example.jrn create mode 100644 makefile create mode 100644 postscript.cpp create mode 100644 postscript.h create mode 100644 profit.xsl create mode 100644 saldibalans.xsl create mode 100644 total.xsl diff --git a/Ledger b/Ledger new file mode 100644 index 0000000..005c484 --- /dev/null +++ b/Ledger @@ -0,0 +1,95 @@ +001.00 B Onroerend goed +002.00 B Inventaris kantoor +002.04 B Inventaris werkplaats +002.10 B Computers +002.20 B Apparatuur +002.30 B Gereedschap +002.40 B Literatuur +011.00 K Afschrijving OG +012.00 K Afschrijving inventaris kantoor +012.04 K Afschrijving inventaris werkplaats +012.10 K Afschrijving computers +012.20 K Afschrijving apparatuur +012.30 K Afschrijving gereedschap +012.40 K Afschrijving literatuur +040.00 B Vermogen AJB +040.10 B Vermogen MK +041.00 B Prive AJB +041.10 B Prive MK +060.00 B Leningen +061.00 B Hypotheek OG +100.00 B Kas +100.10 B Kas vreemde valuta +101.00 B Bank (Rabo) +101.10 B Bank (ABN) +102.00 B Chipknip +110.00 K Ontvangen interest +111.00 K Betaalde interest +130.00 B Debiteuren +135.00 K Afschrijving debiteuren +140.00 B Crediteuren +180.00 B Te vorderen BTW +180.10 B Te vorderen BTW kilometers +181.00 B Af te dragen BTW +188.00 B Te verrekenen BTW +189.00 K Verrekende BTW +190.00 B Vooruitbetaalde bedragen +191.00 B Vooruitontvangen bedragen +192.00 B Nog te betalen bedragen +193.00 B Nog te ontvangen bedragen +195.00 B Nog te faktureren omzet +230.00 B Kruisposten +240.00 B Creditcards +250.00 B Cheques +270.00 B Investeringen +310.00 B Voorraad componenten (#00-#59) +311.00 K Afschrijving componenten +320.00 B Voorraad materiaal (#60-#69) +321.00 K Afschrijving materiaal +330.00 B Voorraad halffabrikaten (#70-#74) +331.00 K Afschrijving halffabrikaten +410.00 K Loonkosten +420.00 K Kantoorbenodigdheden +421.00 K Drukwerk +422.00 K Abonnementen/documentatie +423.00 K Accountantskosten +424.00 K Reparatie/onderhoud inventaris kantoor +424.04 K Reparatie/onderhoud inventaris werkplaats +424.10 K Reparatie/onderhoud computers +424.20 K Reparatie/onderhoud apparatuur +424.30 K Reparatie/onderhoud gereedschap +424.99 K Reparatie/onderhoud diversen +430.00 K Telefoonkosten +431.00 K Faxkosten +431.10 K Datacommunicatie kosten +432.00 K Portikosten +433.00 K Bankkosten +434.00 K Incassokosten +441.00 K Reparatie/onderhoud OG +442.00 K Energiekosten +450.00 K Reklamekosten +451.00 K Vrachtkosten +452.00 K Reis en verblijfkosten +453.00 K Studiekosten +460.00 K Div. kosten +461.00 K Koersverschillen +480.00 K Research kosten +700.00 B Voorraad produkten (#75-#79) +701.00 K Afschrijving produkten +710.00 B Voorraad supplies (#80-#89) +711.00 K Afschrijving supplies +720.00 B Voorraad software (#90-#99) +721.00 K Afschrijving software +800.00 K Inkoopprijs van de verkopen +800.20 K Inkoopprijs van de verkopen eigen produktie +800.40 K Inkoopprijs software +800.60 K Inkoopprijs advies/ontwikkeling +800.80 K Inkoopprijs van de reparaties +830.00 K Kortingen en rabatten +840.00 K Opbrengst verkopen +840.20 K Opbrengst verkopen eigen produktie +840.40 K Opbrengst verkopen software +840.60 K Opbrengst Advies/ontwikkeling 17.5% +840.61 K Opbrengst Advies/ontwikkeling 0% +840.80 K Opbrengst reparaties +910.00 K Diverse baten en lasten diff --git a/account.cpp b/account.cpp new file mode 100644 index 0000000..9fa1931 --- /dev/null +++ b/account.cpp @@ -0,0 +1,588 @@ + +#include "account.h" + +#include +#include + +#include +#include + +acc_nr::acc_nr(String &s) +{ + String s_nr; + + std::cerr << "Account number from " << s; + group = s.dec(); + s_nr = s(4,2); + nr = s_nr.dec(); + std::cerr << " : " << *this << "\n"; +} + +acc_nr::operator String() +{ + char _buf[8]; + sprintf(_buf, "%03d.%02d", group, nr); + + String s(_buf); + return s; +} + +std::istream &operator>>(std::istream &s, acc_nr &a) +{ + char c; + + s >> a.group >> c >> a.nr; + return s; +} + +std::ostream &operator<<(std::ostream &s, acc_nr a) +{ + s << String(a); + return s; +} + +std::istream &operator>>(std::istream &s, amount &a) +{ + long hundreds; + char c; + + s >> hundreds >> c >> a.value; + a.value += hundreds * 100; + + return s; +} + +std::ostream &operator<<(std::ostream &s, amount a) +{ + if (a == 0) + s << " "; + else + { + //s << form("%8d.%02d",a / 100, a % 100); + s << std::setw(8) << a / 100 << "."; + s << std::setw(2) << std::setfill('0') << a % 100; + s << std::setw(0) << std::setfill(' '); + } + + return s; +} + +String amount::to_string() +{ + char _buf[20]; + sprintf(_buf, "%8lu.%02lu", value / 100, value % 100); + + if (value != 0) + { + String s(_buf); + return s; + } + else + { + return String(" "); + } +} +std::ostream &operator<<(std::ostream &s, balance b) +{ + s << b.Debit << " " << b.Credit; + + return s; +} + +std::istream &operator>>(std::istream &s, Booking &b) +{ + char cmnt[128]; + + s >> b.Bnumber >> b.booked; + //s.get(cmnt, 128); + //b.comment = cmnt; + s >> b.comment; + + return s; +} + +std::ostream &operator<<(std::ostream &s, Booking &b) +{ + //s << form("#%03d ",b.Bnumber) << b.booked << " " << b.comment; + //s << form("%.*s", 58 - ~b.comment, " "); + s << "#" << std::setw(4) << std::setfill('0') << b.Bnumber; + s << std::setw(0) << std::setfill(' '); + s << " " << b.booked << " "; + s << std::setfill(' ') << std::setw(58) << std::left << b.comment; + s << std::setw(0) << std::right ; + + return s; +} + +std::istream &operator>>(std::istream &s, Mutation &m) +{ + int nr_blanks = 0; + char c; + char buf[128]; + + while (s.get(c), c == ' ') + nr_blanks++; + + s.putback(c); + s >> m.account; + + amount a; + //s.get(buf, 128); + + //std::istringstream amnt(buf+strlen(buf)-10); + //amnt >> a; + + String amnt; + int p; + + s >> amnt; + p = ~amnt - 1; + while (p > 0 && amnt[p] == ' ') + { + p--; + } + while (p > 0 && amnt[p] != ' ') + { + p--; + } + + amnt = amnt(p, ~amnt - p); + int dot = amnt.index('.'); + String cents = amnt(dot+1, 2); + a = long(amnt) * 100 + cents.dec(); + + if (nr_blanks < 7) + m.bal = balance(a, 0); + else + m.bal = balance(0, a); + + return s; +} + +std::ostream &operator<<(std::ostream &s, Mutation &m) +{ + s << "#" << std::setw(4) << std::setfill('0') << m.booking_nr; + s << std::setw(0) << std::setfill(' '); + s << " " << m.account << m.bal; + return s; +} + + + +std::istream &operator>>(std::istream &s, Account &acc) +{ + char kind, name[128]; + + s >> acc.Anumber >> kind >> std::ws; + if (kind == 'B') + acc.kind = BALANCE; + else + acc.kind = COST; + + //s.get(name, 128); + //acc.name = name; + + s >> acc.name; + + return s; +} + +std::ostream &operator<<(std::ostream &s, Account &acc) +{ + s << acc.Anumber << " " << std::setw(44) << std::left << acc.name; + s << std::setw(0) << std::right << " "; + //s << form("%.*s", 45 - ~acc.name, " "); + s << acc.Bal; + + return s; +} + +std::ostream& operator<<(std::ostream &s, Ledger &l) +{ + int i; + balance total, saldi; + balance EndBalance, Result; + + s << l.nr_accs << " accounts in ledger:\n\n"; + for (i=0; i\n"; + s << "\n"; + s << "\n"; + for (i=0; i\n"; + s << " " << accs[i].Number() << "\n"; + s << " " << accs[i].Name() << "\n"; + if (accs[i].BAL()) + { + s << " BALANCE\n"; + } + else + { + s << " COST\n"; + } + if (saldo.debit() == 0) + { + s << " CREDIT\n"; + s << " " << saldo.credit() << "\n"; + } + else + { + s << " DEBIT\n"; + s << " " << saldo.debit() << "\n"; + } + s << " \n"; + s << "\n"; + } + } + s << "\n"; + s << "\n"; +} + +Account & Ledger::operator[](acc_nr Anr) +{ + int i; + + for (i=0; accs[i] != Anr && i> A) + accs[nr_accs++] = A; + + accs[nr_accs].Name() = String("Rekening bestaat niet"); + +} + diff --git a/account.h b/account.h new file mode 100644 index 0000000..997a912 --- /dev/null +++ b/account.h @@ -0,0 +1,348 @@ + +#include +#include + +#include "postscript.h" + +// An account number is a number in two parts, separated by a dot (.). +// The first part is a 3-digit group number and the second part is a +// 2-digit account number within the group. + +// Operations include input and output, conversion to or from a String +// and test for equality. + +class acc_nr +{ + unsigned short group, nr; + +public: + + acc_nr() + { + group = 0; nr = 0; + } + + acc_nr(unsigned short g, unsigned short n) + { + group = g; + nr = n; + } + + acc_nr(String &s); + operator String(); + + int operator==(acc_nr a) + { + return group == a.group && nr == a.nr; + } + + friend std::istream & operator>>(std::istream &, acc_nr&); + friend std::ostream & operator<<(std::ostream &, acc_nr); +}; + +//typedef enum { DEBIT, CREDIT } direction; + +class amount +{ + unsigned long value; + +public: + + amount() + { + value = 0; + } + + amount(unsigned long l) + { + value = l; + } + + operator long() + { + return value; + } + + amount operator+(amount a) + { + amount sum; + + sum.value = value + a.value; + return sum; + } + + amount &operator+=(amount a) + { + value += a.value; + + return *this; + } + + String to_string(); + + friend std::istream & operator>>(std::istream &, amount &); + friend std::ostream & operator<<(std::ostream &, amount); +}; + +class balance +{ + amount Debit, Credit; + +public: + + balance() + { + Debit = 0; Credit = 0; + } + + balance(amount D, amount C) + { + Debit = D; + Credit = C; + } + + amount debit() + { + return Debit; + } + + amount credit() + { + return Credit; + } + + balance operator~() // Calculate balance, leaving either + { // Debit or Credit 0. + amount saldo; + balance b; + + saldo = Debit - Credit; + if (long(Debit) > long(Credit)) + b.Debit = Debit - Credit; + else + b.Credit = Credit - Debit; + + return b; + } + + balance operator-() // Reverse the balance + { + balance b; + + b.Debit = Credit; + b.Credit = Debit; + + return b; + } + + balance operator+(balance b) + { + balance sum; + + sum.Debit = Debit + b.Debit; + sum.Credit = Credit + b.Credit; + + return sum; + } + balance &operator+=(balance b) + { + Debit += b.Debit; + Credit += b.Credit; + + return *this; + } + + operator int() // Check equality + { + return Debit == Credit; + } + + friend std::ostream & operator<<(std::ostream &, balance ); +}; + +class Booking +{ + int Bnumber; + date booked; + String comment; + +public: + + int number() + { + return Bnumber; + } + + operator date() + { + return booked; + } + + Booking &operator=(Booking &b) + { + Bnumber = b.Bnumber; + booked = b.booked; + comment = b.comment; + + return *this; + } + + friend std::istream & operator>>(std::istream &, Booking &); + friend std::ostream & operator<<(std::ostream &, Booking &); +}; + +class Mutation +{ + int booking_nr; + acc_nr account; + balance bal; + +public: + + Mutation() + { + } + Mutation(int BK_nr) + { + booking_nr = BK_nr; + } + int number() + { + return booking_nr; + } + operator acc_nr() + { + return account; + } + operator balance() + { + return bal; + } + friend std::istream & operator>>(std::istream &, Mutation &); + friend std::ostream & operator<<(std::ostream &, Mutation &); +}; + +typedef enum {BALANCE, COST} acc_kind; + +class Account +{ + acc_nr Anumber; + String name; + acc_kind kind; + balance Bal; + +public: + + Account() + { + kind = BALANCE; + } + + Account(acc_nr A) + { + Anumber = A; + kind = BALANCE; + } + + Account& operator=(Account &a) + { + Anumber = a.Anumber; + name = a.name; + kind = a.kind; + Bal = a.Bal; + + return *this; + } + + acc_nr Number() + { + return Anumber; + } + + String &Name() + { + return name; + } + + int operator==(acc_nr Anr) + { + return Anumber == Anr; + } + + int operator!=(acc_nr Anr) + { + return !(Anumber == Anr); + } + Account &operator+=(Mutation &mut) + { + Bal += mut; + + return *this; + } + + int BAL() + { + return kind == BALANCE; + } + + operator balance() + { + return Bal; + } + + void sheet(std::ostream &); + void Postscript_sheet(PostScript &); + + friend std::istream & operator>>(std::istream&, Account&); + friend std::ostream & operator<<(std::ostream&, Account&); +}; + +class Ledger +{ + Account accs[200]; + int nr_accs; + int idx; + +public: + + Ledger() + { + nr_accs = 0; + } + + Account &operator[](acc_nr Anr); + +/* + void operator+=(Account &a) + { + accs[nr_accs++] = a; + } +*/ + + void read(char *filename); + + void start() + { + idx = 0; + } + + Account &next() + { + static Account bogus = Account(acc_nr(1000, 1000)); + + if (idx == nr_accs) + return bogus; + else + { + idx++; + return accs[idx-1]; + } + } + + friend std::ostream & operator<<(std::ostream &, Ledger&); + + void accounts_report(const char *); + void saldi_report(const char *); + void XML_saldi(std::ostream &); +}; + diff --git a/account_main.cpp b/account_main.cpp new file mode 100644 index 0000000..4f1bd3c --- /dev/null +++ b/account_main.cpp @@ -0,0 +1,224 @@ +#include "account.h" +#include +#include +#include + +static char helptext[] = + "Usage: account [options] journal\n" + "\n" + "Options:\n" + " -r \n" + " --renumber : Renumber the booking numbers (start > 0)\n" + " --help : Print this helpful message\n" + " -V\n" + " --version : Print the version number\n"; + +void read_journal(char *journal_file); +void renumber_journal(char *journal_file, unsigned long renumber); +void print_journal(); + +Ledger ledger; +Booking b[2000]; +Mutation m[6000]; + +int n_m = 0, n_b = 0; + +static struct option long_options[] = +{ + { "help", no_argument, 0, 'h' }, + { "renumber", required_argument, 0, 'r' }, + { "version", no_argument, 0, 'V' }, + { 0, 0, 0, 0 } +}; + +main(int argc, char *argv[]) +{ + int i, c; + Account a; + + unsigned long renum = 0; + + int option_index = 0; + + while ((c = getopt_long(argc, argv, "Vr:", long_options, &option_index)) != -1) + { + switch (c) + { + case 'h': + std::cout << helptext; + exit(0); + break; + + case 'V': + std::cout << "account version 1.3.3\n"; + exit(0); + break; + + case 'r': + renum = String(optarg); + break; + } + } + + if (optind == argc) + { + std::cerr << "Usage: account [options] journal_file\n"; + exit(1); + } + + if (renum != 0) + { + renumber_journal(argv[optind], renum); + exit(0); + } + + ledger.read((char *)"Ledger"); + read_journal(argv[optind]); + + + ledger.start(); + + while (a = ledger.next(), a != acc_nr(1000, 1000)) + a.sheet(std::cout); + + ledger.accounts_report("grootboek.ps"); + + // Calculate all accounts to create the final balance. + + for (i = 0; i < n_m; i++) + ledger[m[i]] += m[i]; + + std::cout << ledger; + + ledger.saldi_report("saldibalans.ps"); + + std::ofstream saldi("saldi.xml"); + ledger.XML_saldi(saldi); +} + +void read_journal(char *journal_file) +{ + Booking B; + balance bal; + Mutation M[100]; + + int n_mut = 0; + char first_char; + + std::ifstream i(journal_file); + + while (i) + { + i.get(first_char); + switch (first_char) + { + case '#' : + if (n_mut != 0) + { + if (bal) + { + if (n_b > 0) + { + if (date(B) < date(b[n_b - 1])) + { + std::cerr << "The date of booking " << B.number() << " is out of sequence.\n"; + } + if (B.number() < b[n_b - 1].number()) + { + std::cerr << "The number of booking " << B.number() << " is out of sequence.\n"; + } + } + b[n_b++] = B; + for (int j = 0; j < n_mut; j++) + m[n_m++] = M[j]; + } + else + { + std::cerr << "Booking nr. " << B.number() + << " is out of balance: " << bal << "\n"; + } + n_mut = 0; + bal = balance(0,0); + //std::cerr << "\n"; + } + i >> B; + //std::cerr << B << "\n"; // Provide visual check + break; + + case ' ' : + M[n_mut] = Mutation(B.number()); + i >> M[n_mut]; + //std::cerr << " > " << M[n_mut] << "\n"; // Provide visual check + if (i.good()) + { + bal += M[n_mut]; + n_mut++; + } + else + { + std::cerr << "Input error at #" << B.number() << "\n"; + i.clear(); + } + break; + + case '\n' : break; // Ignore linefeeds + default: break; + } + } + + if (n_mut != 0) + { + if (bal) + { + b[n_b++] = B; + for (int j = 0; j < n_mut; j++) + m[n_m++] = M[j]; + } + } +} + +void renumber_journal(char *journal_file, unsigned long renumber) +{ + std::ifstream i(journal_file); + String line; + + bool started = false; + + while (i >> line) + { + if (line[0] == '#') + { + int c = line.index(' '); + String nr = line(1,c-1); + unsigned long b_nr = nr.dec(); + line(0,c) = String(""); + + if (started) + { + b_nr = renumber++; + } + else + { + if (b_nr == renumber) + { + renumber ++; + started = true; + } + } + std::cout << "#" << std::setw(4) << std::setfill('0') << b_nr; + std::cout << line << "\n"; + } + else + { + std::cout << line << "\n"; + } + } +} + +void print_journal() +{ + for (int mi = 0; mi < n_m; mi++) + { + std::cout << m[mi] << "\n"; + } +} diff --git a/balans.xsl b/balans.xsl new file mode 100644 index 0000000..ee22fca --- /dev/null +++ b/balans.xsl @@ -0,0 +1,58 @@ + + + + + + + + + http://www.w3.org/1999/xhtml + + + Balans + + + +

Balans

+ +

Bezittingen

+ + + + + + + + +
TOTAAL
+ +

Schulden

+ + + + + + + + +
TOTAAL
+ + + +
+ + + + + + + + + + + + + +
diff --git a/bank.cpp b/bank.cpp new file mode 100644 index 0000000..8e46444 --- /dev/null +++ b/bank.cpp @@ -0,0 +1,260 @@ +/* + * Read bank transactions and generate account bookings. + * + * Template syntax: + * Lines starting with '+' or '-': Match for name and description. Two regular + * expressions, separated by '~'. The '+' matches CREDIT transactions (adds to + * the bank account); the '-' matches DEBIT transactions. + * + * Other lines are content of the template. Parts enclosed in '~' characters are substituted by fields + * from the input. Possibilities are: "$D" -> booking date, "$N" -> name, "$A" -> amount, + * anything else is taken as a regular expression that is extracted from the description. + */ + + +#include +#include +#include +#include + +class BankTemplate +{ + bool Credit; + regex name_match; + regex description_match; + + String text_template; + +public: + + BankTemplate() : name_match(""), description_match(".*") + { + Credit = false; + text_template = ""; + } + + BankTemplate(bool cr, String nm, String dm) + : name_match(nm), description_match(dm) + { + Credit = cr; + text_template = ""; + } + + BankTemplate(const BankTemplate & b) + : name_match(b.name_match), description_match(b.description_match) + { + Credit = b.Credit; + text_template = b.text_template; + } + + void add_to_template(String s) + { + text_template += s + "\n"; + } + + bool matches(String deb_cred, String name, String descr); + + String substitute_template(String date, String name, String amount, String descr); +}; + +bool BankTemplate::matches(String deb_cred, String name, String descr) +{ + return (deb_cred == "C") == Credit && name == name_match && descr == description_match; +} + +String BankTemplate::substitute_template(String date, String name, String amount, String descr) +{ + String text(text_template); + + int sub_start, sub_len; + + sub_start = text.index('~'); + + while (sub_start != -1) + { + sub_len = 1; + while (text[sub_start + sub_len] != '~') + { + sub_len++; + } + sub_len++; + String match = text(sub_start, sub_len); + if (~match == 4 && match[1] == '$') + { + switch (match[2]) + { + case 'A': + text(sub_start, sub_len) = amount; + break; + + case 'N': + text(sub_start, sub_len) = name; + break; + + case 'D': + text(sub_start, sub_len) = date(6,2) + String("-") + date(4,2) + String("-") + date(0,4); + break; + + default: + text(sub_start, sub_len) = String("INVALID SUBSTITUTION"); + break; + } + } + else + { + match <<= 1; + match >>= 1; + String extraction = descr(regex(match)); + text(sub_start, sub_len) = extraction; + } + + sub_start = text.index('~'); + } + + return text; +} + +std::vector read_templates(const char * filename); +void read_mutations(const char *filename, std::vector templates); +std::vector parse_csv(String line, char delim); + +// Fields in the bank record. + +const int DEBIT_CREDIT = 3; +const int AMOUNT = 4; +const int NAME = 6; +const int BOOKING_DATE = 7; +const int DESCRIP1 = 10; +const int DESCRIP2 = 11; +const int DESCRIP3 = 12; +const int DESCRIP4 = 13; +const int DESCRIP5 = 14; +const int DESCRIP6 = 15; + +main() +{ + //read_templates("Bank.templ"); + std::vector templates = read_templates("Bank.templ"); + + read_mutations("mut.txt", templates); +} + +std::vector read_templates(const char * filename) +{ + std::ifstream in(filename); + + String line; + BankTemplate bt; + std::vector templates; + + bool first = true; + + while (in >> line) + { + if (~line > 0 && (line[0] == '-' || line[0] == '+')) + { + // Start a new template + + if (!first) + { + templates.push_back(bt); + } + first = false; + + //line <<= 1; + int separator = line.index('~'); + bt = BankTemplate(line[0] == '+', line(1, separator -1), line(separator + 1, ~line - separator -1)); + } + else + { + // Add to the template text + bt.add_to_template(line); + } + } + + templates.push_back(bt); + + return templates; +} + +void read_mutations(const char *filename, std::vector templates) +{ + int i; + + std::ifstream in(filename); + + String line; + std::vector bank_record; + + while (in >> line) + { + String description; + + //std::cout << line << "\n"; + line += ",\"\""; + bank_record = parse_csv(line, ','); + + //std::cout << " " << bank_record[BOOKING_DATE] << " " < parse_csv(String line, char delim) +{ + std::vector record; + int i; + bool inquotes = false; + int start = 0, len = 0; + + for (i = 0; i < ~line; i++) + { + if (!inquotes && line[i] == '"') + { + inquotes = true; + } + else if (inquotes && line[i] == '"') + { + inquotes = false; + } + else if (!inquotes && line[i] == delim) + { + // Delimiter: copy the substring to the record + + String field = line(start, len); + record.push_back(field); + len = 0; + } + else + { + if (len == 0) + { + start = i; + } + len++; + } + } + + return record; +} diff --git a/doc/classes.svg b/doc/classes.svg new file mode 100644 index 0000000..351fd43 --- /dev/null +++ b/doc/classes.svg @@ -0,0 +1,709 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + acc_nr + + group + nr + + amount + + value + + balance + + Debit + Credit + + + + Booking + + Bnumber + booked + comment + + Mutation + + booking_nr + bal + account + + + + Account + + Anumber + name + kind + Bal + + + + Ledger + + accs + nr_accs + idx + + + String()==istream >>ostream << + + + + long()++=to_string()istream >>ostream << + + debit()credit()~+-+=int()ostream << + + number()date()istream >>ostream << + number()acc_nr()balance()istream >>ostream << + + Number()Name()==!=+= MutationBAL()balance()sheet()Postscript_sheet()istream >>ostream << + + Account [acc_nr]read()start()next()ostream <<accounts_report()saldi_report()XML_saldi() + + diff --git a/doc/design.odt b/doc/design.odt new file mode 100644 index 0000000000000000000000000000000000000000..7faa8fc73ac3df69cd7222da25112c1129aed1cb GIT binary patch literal 16165 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 literal 0 HcmV?d00001 diff --git a/doc/processes.svg b/doc/processes.svg new file mode 100644 index 0000000..d19ed74 --- /dev/null +++ b/doc/processes.svg @@ -0,0 +1,467 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Journal + + account + + + Ledger + + + saldibalans.ps + + grootboek.ps + + saldi.xml + + + + + + saldibalans.xsl + + kostenoverzicht.xsl + + profit.xsl + + balans.xsl + + + + vermogen.xsl + + report.xsl + + + + + btw-split.xsl + + + + + bank + + Bank mut + + + + diff --git a/example.jrn b/example.jrn new file mode 100644 index 0000000..561c6cf --- /dev/null +++ b/example.jrn @@ -0,0 +1,1099 @@ +#000 01-01-99 Balans + 002.00 Inventaris kantoor 689.73 + 002.04 Inventaris werkplaats 9.95 + 002.10 Computers 6056.93 + 002.20 Apparatuur 4987.95 + 002.40 Literatuur 664.19 + 040.00 Vermogen AJB 128295.96 + 040.10 Vermogen MK 42443.17 + 100.00 Kas 24.00 + 100.10 Kas vreemde valuta 9.65 + 101.00 Bank (Rabo) 113399.12 + 130.00 Debiteuren 16361.50 + 180.00 Te vorderen BTW 246.23 + 180.10 Te vorderen BTW kilometers 838.44 + 181.00 Af te dragen BTW 7927.50 + 188.00 Te verrekenen BTW 2802.24 + 190.00 Vooruitbetaalde bedragen 490.20 + 192.00 Nog te betalen bedragen 1926.30 + 193.00 Nog te ontvangen bedragen 345.45 + 195.00 Nog te faktureren omzet 25340.00 + 310.00 Voorraad componenten 6021.40 + 320.00 Voorraad materiaal 207.09 + 330.00 Voorraad halffabrikaten 163.70 + 700.00 Voorraad produkten 1109.54 + 710.00 Voorraad supplies 617.54 + 720.00 Voorraad software 208.08 + +#001 01-01-99 Vooruitbetaalde bedragen 1998 + 422.00 Abonnementen/documentatie 339.45 + 450.00 Reklamekosten 150.75 + 190.00 Vooruitbetaalde bedragen 490.20 + +#002 01-01-99 Creditrente 01-10 t/m 31-12 + 101.00 Bank 345.45 + 193.00 Nog te ontvangen bedragen 345.45 + +#003 01-01-99 Kosten 01-10 t/m 31-12 + 192.00 Nog te betalen bedragen 12.30 + 101.00 Bank 12.30 + +#004 01-01-99 Kosten Europas 3431 + 433.00 Bankkosten 10.00 + 101.00 Bank 10.00 + +#005 01-01-99 Kosten Europas 3441 + 433.00 Bankkosten 10.00 + 101.00 Bank 10.00 + +#006 04-01-99 Faktuur 3277 + 130.00 Debiteuren 16920.00 + 195.00 Nog te faktureren omzet 14400.00 + 181.00 Af te dragen BTW 2520.00 + +#007 04-01-99 Faktuur 3278 + 130.00 Debiteuren 480.00 + 195.00 Nog te faktureren omzet 480.00 + +#008 04-01-99 Faktuur 3279 + 130.00 Debiteuren 716.75 + 195.00 Nog te faktureren omzet 610.00 + 181.00 Af te dragen BTW 106.75 + +#009 04-01-99 Faktuur 3280 + 130.00 Debiteuren 5005.50 + 195.00 Nog te faktureren omzet 4260.00 + 181.00 Af te dragen BTW 745.50 + +#010 04-01-99 Faktuur 3281 + 130.00 Debiteuren 5640.00 + 195.00 Nog te faktureren omzet 4800.00 + 181.00 Af te dragen BTW 840.00 + +#011 05-01-99 Faktuur 3275 + 101.00 Bank 4441.50 + 130.00 Debiteuren 4441.50 + +#012 06-01-99 Creditnota 3282 + 195.00 Nog te faktureren omzet 250.00 + 181.00 Af te dragen BTW 43.75 + 130.00 Debiteuren 293.75 + +#013 07-01-99 UUNET faktuur 9905210 + 431.10 Datacommunicatie kosten 137.00 + 180.00 Te vorderen BTW 23.98 + 140.00 Crediteuren 160.98 + +#014 11-01-99 Abbonnement IEEE + 422.00 Abonnementen/documentatie 474.14 + 041.00 Prive AJB 474.14 + +#015 12-01-99 Prive opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#016 13-01-99 Faktuur 3274 + 101.00 Bank 640.00 + 130.00 Debiteuren 640.00 + +#017 13-01-99 KPN kenm.111.396.611.001.807 + 431.00 Faxkosten 37.33 + 431.10 Datacommunicatie kosten 196.98 + 180.00 Te vorderen BTW 41.00 + 140.00 Crediteuren 275.31 + +#018 22-01-99 Faktuur 3273 + 101.00 Bank 11280.00 + 130.00 Debiteuren 11280.00 + +#019 26-01-99 BTW 4e kw.98 2805063261801300 + 181.00 Af te dragen BTW 7927.50 + 180.00 Te vorderen BTW 246.23 + 180.10 Te vorderen BTW kilometers 838.44 + 189.00 Verrekende BTW 0.83 + 101.00 Bank 6842.00 + +#020 29-01-99 KPN kenm. 1111396611001807 + 140.00 Crediteuren 275.31 + 101.00 Bank 275.31 + +#021 29-01-99 Faktuur 3278 + 101.00 Bank 480.00 + 130.00 Debiteuren 480.00 + +#022 30-01-99 Faktuur 3283 + 130.00 Debiteuren 1222.00 + 195.00 Nog te fakturen omzet 1040.00 + 181.00 Af te dragen BTW 182.00 + +#023 01-02-99 Prive opname MK + 041.10 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#024 01-02-99 Faktuur 3284 + 130.00 Debiteuren 11280.00 + 840.60 Opbrengst Advies/ontw.17,5% 9600.00 + 181.00 Af te dragen BTW 1680.00 + +#025 02-02-99 Faktuur 3285 + 130.00 Debiteuren 3736.50 + 840.60 Opbrengst Advies/ontw.17,5% 3180.00 + 181.00 Af te dragen BTW 556.50 + +#026 02-02-99 Faktuur 3286 + 130.00 Debiteuren 4512.00 + 840.60 Opbrengst Advies/ontw.17,5% 3840.00 + 181.00 Af te dragen BTW 672.00 + +#027 03-02-99 Faktuur 3287 + 130.00 Debiteuren 1069.25 + 840.60 Opbrengst Advies/ontw.17,5% 910.00 + 181.00 Af te dragen BTW 159.25 + +#028 03-02-99 UUNET faktuur 9905210 + 140.00 Crediteuren 160.98 + 101.00 Bank 160.98 + +#029 08-02-99 Faktuur 3280 + 101.00 Bank 5005.50 + 130.00 Debiteuren 5005.50 + +#030 08-02-99 Faktuur 3279 + creditnota 3282 + 101.00 Bank 423.00 + 130.00 Debiteuren 423.00 + +#031 08-02-99 Faktuur 3281 + 101.00 Bank 5640.00 + 130.00 Debiteuren 5640.00 + +#032 08-02-99 UUNET faktuur 9911883 + 431.10 Datacommunicatiekosten 96.00 + 180.00 Te vorderen BTW 16.80 + 140.00 Crediteuren 112.80 + +#033 11-02-99 Prive opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#034 18-02-99 Eetcafe "De Brijhapper" + 452.00 Reis en verblijfkosten 150.00 + 041.00 Prive AJB 150.00 + + +#035 19-02-99 Faktuur 3277 + 101.00 Bank 16920.00 + 130.00 Debiteuren 16920.00 + +#036 19-02-99 K.v.K faktuur 23063965 + 422.00 Abonnementen/documentatie 202.06 + 140.00 Crediteuren 202.06 + +#037 23-02-99 Grand Cafe Berlage + 452.00 Reis en verblijfkosten 96.00 + 041.00 Prive AJB 96.00 + +#038 26-02-99 Energiekosten 1998 + 192.00 Nog te betalen kosten 914.00 + 101.00 Bank 914.00 + +#039 01-03-99 Faktuur 3283 + 101.00 Bank 1222.00 + 130.00 Debiteuren 1222.00 + +#040 01-03-99 Prive opname MK + 041.10 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#041 04-03-99 Faktuur 3287 + 101.00 Bank 1069.25 + 130.00 Debiteuren 1069.25 + +#042 04-03-99 Faktuur 3286 + 101.00 Bank 4512.00 + 130.00 Debiteuren 4512.00 + +#043 05-03-99 Faktuur 3285 + 101.00 Bank 3736.50 + 130.00 Debiteuren 3736.50 + +#044 05-03-99 Faktuur 3288 + 130.00 Debiteuren 11280.00 + 840.60 Opbrengst Advies/ontw.17,5% 9600.00 + 181.00 Af te dragen BTW 1680.00 + +#045 05-03-99 Faktuur 3289 + 130.00 Debiteuren 1600.00 + 840.61 Opbrengst Advies/ontw. 0% 1600.00 + +#046 08-03-99 Faktuur 3290 + 130.00 Debiteuren 4512.00 + 840.60 Opbrengst Advies/ontw.17,5% 3840.00 + 181.00 Af te dragen BTW 672.00 + +#047 08-03-99 UUNET faktuur 992090 + 431.10 Datacommunicatie kosten 88.00 + 180.00 Te vorderen BTW 15.40 + 140.00 Crediteuren 103.40 + +#048 08-03-99 UUNET faktuur 9911883 + 140.00 Crediteuren 112.80 + 101.00 Bank 112.80 + +#049 10-03-99 KPN kenm. 8111396611001808 + 431.00 Faxkosten 33.12 + 431.10 Datacommunicatiekosten 184.34 + 180.00 Te vorderen BTW 38.06 + 140.00 Crediteuren 255.52 + +#050 10-03-99 Faktuur 3291 + 130.00 Debiteuren 3666.00 + 840.60 Opbrengst Advies/ontw.17,5% 3120.00 + 181.00 Af te dragen BTW 546.00 + +#051 11-03-99 Prive opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#052 13-03-99 Ristorante Pizzeria Pavarotti + 452.00 Reis en verblijfkosten 58.30 + 041.10 Prive MK 58.30 + +#053 17-03-99 Faktuur 3292 + 130.00 Debiteuren 2444.00 + 840.60 Opbrengst Advies/ontw.17,5% 2080.00 + 181.00 Af te dragen BTW 364.00 + +#054 18-03-99 K.v.K. kenm. 1009923063965000 + 140.00 Crediteuren 202.06 + 101.00 Bank 202.06 + +#055 19-03-99 Faktuur 3284 + 101.00 Bank 11280.00 + 130.00 Debiteuren 11280.00 + +#056 24-03-99 Priveopname AJB belasting 1999 + 041.00 Prive AJB 2850.00 + 101.00 Bank 2850.00 + +#057 26-03-99 KPN kenm. 8111396611001808 + 140.00 Crediteuren 255.52 + 101.00 Bank 255.52 + +#058 31-03-99 Prive opname MK + 041.10 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#059 31-03-99 Kilometervergoeding 1e kw. 1999 + 452.00 Reis en verblijfkosten 6483.84 + 180.10 Te vorderen BTW kilometers 884.16 + 041.00 Prive AJB 7212.00 + 041.10 Prive MK 156.00 + +#060 31-03-99 Berekende afschrijvingen + 012.00 Afschr. inventaris kantoor 80.32 + 002.00 Inventaris kantoor 80.32 + +#061 31-03-99 Berekende afschrijvingen + 012.04 Afschr. inventaris werkplaats 5.13 + 002.04 Inventaris werkplaats 5.13 + +#062 31-03-99 Berekende afschrijvingen + 012.10 Afschrijving computers 1150.86 + 002.10 Computers 1150.86 + +#063 31-03-99 Berekende afschrijvingen + 012.20 Afschrijving apparatuur 453.45 + 002.20 Apparatuur 453.45 + +#064 31-03-99 Berekende afschrijvingen + 012.40 Afschrijving literatuur 127.65 + 002.40 Literatuur 127.65 + +#065 01-04-99 Faktuur 3293 + 130.00 Debiteuren 14100.00 + 840.60 Opbrengst Advies/ontw.17,5% 12000.00 + 181.00 Af te dragen BTW 2100.00 + +#066 01-04-99 Faktuur 3294 + 130.00 Debiteuren 1440.00 + 840.61 Opbrengst Advies/ontw. 0% 1440.00 + +#067 01-04-99 Faktuur 3295 + 130.00 Debiteuren 3384.00 + 840.60 Opbrengst Advies/ontw.17,5% 2880.00 + 181.00 Af te dragen BTW 504.00 + +#068 01-04-99 Faktuur 3296 + 130.00 Debiteuren 3877.50 + 840.60 Opbrengst Advies/ontw.17,5% 3300.00 + 181.00 Af te dragen BTW 577.50 + +#069 01-04-99 Creditrente 01-01 t/m. 31-03 + 101.00 Bank 391.14 + 110.00 Ontvangen intrest 391.14 + +#070 01-04-99 Kosten 01-01 t/m. 31-03 + 433.00 Bankkosten 15.90 + 101.00 Bank 15.90 + +#071 05-04-99 Gouden Gids 6011260996999201 + 450.00 Reklamekosten 135.40 + 180.00 Te vorderen BTW 23.70 + 140.00 Crediteuren 159.10 + +#072 05-04-99 UUNET faktuur 992090 + 140.00 Crediteuren 103.40 + 101.00 Bank 103.40 + +#073 07-04-99 Trefpunt Access faktuur 099676199 + 422.00 Abonnementen/documentatie 295.70 + 180.00 Te vorderen BTW 51.75 + 140.00 Crediteuren 347.45 + +#074 08-04-99 UUNET faktuur 9928961 + 431.10 Datacommunicatiekosten 90.00 + 180.00 Te vorderen BTW 15.75 + 140.00 Crediteuren 105.75 + +#075 09-04-99 Faktuur 3290 + 101.00 Bank 4512.00 + 130.00 Debiteuren 4512.00 + +#076 10-04-99 Postzegels + 432.00 Portikosten 24.00 + 100.00 Kas 24.00 + +#077 12-04-99 Faktuur 3291 + 101.00 Bank 3666.00 + 130.00 Debiteuren 3666.00 + +#078 13-04-99 Prive-opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#079 15-04-99 Faktuur 3289 + 101.00 Bank 1600.00 + 130.00 Debiteuren 1600.00 + +#080 16-04-99 Faktuur 3297 + 130.00 Debiteuren 3666.00 + 840.60 Opbrengst Advies/ontw.17,5% 3120.00 + 181.00 Af te dragen BTW 546.00 + +#081 17-04-99 Kasopname + 100.00 Kas 250.00 + 101.00 Bank 250.00 + +#082 17-04-99 Display bonnr. 010111354 + 460.00 Diverse kosten 10.30 + 180.00 Te vorderen BTW 1.80 + 100.00 Kas 12.10 + +#083 19-04-99 Faktuur 3292 + 101.00 Bank 2444.00 + 130.00 Debiteuren 2444.00 + +#084 21-04-99 Grieks restaurant Athene + 452.00 Reis en verblijfkosten 163.00 + 041.00 Prive AJB 163.00 + +#085 23-04-99 Trefpunt Access 099676199 + 140.00 Crediteuren 347.45 + 101.00 Bank 347.45 + +#086 24-04-99 Eetcafe JAMAS + 452.00 Reis en verblijfkosten 184.25 + 041.10 Prive MK 184.25 + +#087 27-04-99 NHA kenm. 5013465401548856 + 453.00 Studiekosten 7.90 + 101.00 Bank 7.90 + +#088 27-04-99 Gouden Gids 6011260996999201 + 140.00 Crediteuren 159.10 + 101.00 Bank 159.10 + +#089 27-04-99 BTW 1e kw.99 ken.8805063261901210 + 181.00 Af te dragen BTW 10680.25 + 180.00 Te vorderen BTW 135.24 + 180.10 Te vorderen BTW kilometers 884.16 + 189.00 Verrekende BTW 0.85 + 101.00 Bank 9660.00 + +#090 27-04-99 Prive-opname AJB belasting 1999 + 041.00 Prive AJB 2850.00 + 101.00 Bank 2850.00 + +#091 29-04-99 Prive-opname Am. dollars + 041.00 Prive AJB 265.20 + 041.10 Prive MK 265.20 + 101.00 Bank 530.40 + +#092 03-05-99 Faktuur 3295 + 101.00 Bank 3384.00 + 130.00 Debiteuren 3384.00 + +#093 03-05-99 Faktuur 3296 + 101.00 Bank 3877.50 + 130.00 Debiteuren 3877.50 + +#094 03-05-99 Prive-opname MK + 041.10 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#095 03-05-99 Faktuur 3288 + 101.00 Bank 11280.00 + 130.00 Debiteuren 11280.00 + +#096 06-05-99 UUNET faktuur 9928961 + 140.00 Crediteuren 105.75 + 101.00 Bank 105.75 + +#097 07-05-99 UUNET faktuur 9939545 + 431.10 Datacommunicatiekosten 88.00 + 180.00 Te vorderen BTW 15.40 + 140.00 Crediteuren 103.40 + +#098 11-05-99 KPN kenm. 6111396611001809 + 431.00 Faxkosten 27.31 + 431.10 Datacommunicatiekosten 166.94 + 180.00 Te vorderen BTW 33.99 + 140.00 Crediteuren 228.24 + +#099 11-05-99 Prive-opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#100 11-05-99 Faktuur 3298 + 130.00 Debiteuren 11280.00 + 840.60 Opbrengst Advies/ontw. 17,5% 9600.00 + 181.00 Af te dragen BTW 1680.00 + +#101 12-05-99 Faktuur 3299 + 130.00 Debiteuren 480.00 + 840.61 Opbrengst Advies/ontw. 0% 480.00 + +#102 12-05-99 Faktuur 3300 + 130.00 Debiteuren 3384.00 + 840.60 Opbrengst Advies/ontw. 17,5% 2880.00 + 181.00 Af te dragen BTW 504.00 + +#103 12-05-99 Faktuur 3301 + 130.00 Debiteuren 2444.00 + 840.60 Opbrengst Advies/ontw. 17,5% 2080.00 + 181.00 Af te dragen BTW 364.00 + +#104 13-05-99 KPN/Telecom kenm.8002906249990513 + 450.00 Reklamekosten 135.00 + 180.00 Te vorderen BTW 23.63 + 140.00 Crediteuren 158.63 + +#105 13-05-99 Faktuur 3294 + 101.00 Bank 1440.00 + 130.00 Debiteuren 1440.00 + +#106 18-05-99 Faktuur 3297 + 101.00 Bank 3666.00 + 130.00 Debiteuren 3666.00 + +#107 18-05-99 WEKA faktuur 2649785 + 422.00 Abonnementen/documentatie 205.25 + 180.00 Te vorderen BTW 12.32 + 140.00 Crediteuren 217.57 + +#108 19-05-99 Faktuur 3302 + 130.00 Debiteuren 3807.00 + 840.60 Opbrengst Advies/ontw.17,5% 3240.00 + 181.00 Af te dragen BTW 567.00 + +#109 26-05-99 Prive-opname AJB belasting 1999 + 041.00 Prive AJB 2850.00 + 101.00 Bank 2850.00 + +#110 28-05-99 Faktuur 3293 + 101.00 Bank 14100.00 + 130.00 Debiteuren 14100.00 + +#111 28-05-99 NHA kenm. 0013465401573362 + 453.00 Studiekosten 7.90 + 140.00 Crediteuren 7.90 + +#112 31-05-99 KPN/Telecom kenm.8002906249990513 + 140.00 Crediteuren 158.63 + 101.00 Bank 158.63 + +#113 01-06-99 Prive-opname MK + 041.10 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#114 01-06-99 Faktuur 3303 + 130.00 Debiteuren 11280.00 + 840.60 Opbrengst Advies/ontw. 17,5% 9600.00 + 181.00 Af te dragen BTW 1680.00 + +#115 01-06-99 Faktuur 3304 + 130.00 Debiteuren 480.00 + 840.61 Opbrengst Advies/ontw. 0% 480.00 + +#116 01-06-99 Faktuur 3305 + 130.00 Debiteuren 3384.00 + 840.60 Opbrengst Advies/ontw. 17,5% 2880.00 + 181.00 Af te dragen BTW 504.00 + +#117 02-06-99 NHA kenm. 0013465401573362 + 140.00 Crediteuren 7.90 + 101.00 Bank 7.90 + +#118 02-06-99 KPN kenm. 6111396611001809 + 140.00 Crediteuren 228.24 + 101.00 Bank 228.24 + +#119 02-06-99 Trefpunt kenmerk 43123 + 450.00 Reklamekosten 201.00 + 180.00 Te vorderen BTW 35.18 + 140.00 Crediteuren 236.18 + +#120 03-06-99 Faktuur 3306 + 130.00 Debiteuren 2608.50 + 840.60 Opbrengst Advies/ontw. 17,5% 2220.00 + 181.00 Af te dragen BTW 388.50 + +#121 03-06-99 WEKA kenm. 2026497850411702 + 140.00 Crediteuren 217.57 + 101.00 Bank 217.57 + +#122 03-06-99 UUNET faktuur 9939545 + 140.00 Crediteuren 103.40 + 101.00 Bank 103.40 + +#123 08-06-99 UUNET faktuur 9948902 + 431.10 Datacommunicatiekosten 100.80 + 180.00 Te vorderen BTW 17.64 + 140.00 Crediteuren 118.44 + +#124 09-06-99 Faktuur 3307 + 130.00 Debiteuren 2444.00 + 840.60 Opbrengst Advies/ontw. 17,5% 2080.00 + 181.00 Af te dragen BTW 364.00 + +#125 09-06-99 Faktuur 3299 + 101.00 Bank 480.00 + 130.00 Debiteuren 480.00 + +#126 10-06-99 Pizzeria Il Mago + 452.00 Reis en verblijfkosten 58.25 + 041.10 Prive MK 58.25 + +#127 11-06-99 Prive-opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#128 14-06-99 Faktuur 3301 + 101.00 Bank 2444.00 + 130.00 Debiteuren 2444.00 + +#129 14-06-99 Faktuur 3300 + 101.00 Bank 3384.00 + 130.00 Debiteuren 3384.00 + +#130 14-06-99 Rabofacet Trefpunt kenm. 43123 + 140.00 Crediteuren 236.18 + 101.00 Bank 236.18 + +#131 18-06-99 Prive-opname + 041.00 Prive AJB 425.00 + 041.10 Prive MK 425.00 + 101.00 Bank 850.00 + +#132 21-06-99 Faktuur 3302 + 101.00 Bank 3807.00 + 130.00 Debiteuren 3807.00 + +#133 22-06-99 Faktuur 3304 + 101.00 Bank 480.00 + 130.00 Debiteuren 480.00 + +#134 25-06-99 Prive-opname + 041.00 Prive AJB 698.90 + 041.10 Prive MK 698.90 + 101.00 Bank 1397.80 + +#135 28-06-99 Prive-opname AJB belasting 1999 + 041.00 Prive AJB 2850.00 + 101.00 Bank 2850.00 + +#136 30-06-99 WEKA faktuur 2677801 + 422.00 Abonnementen/documentatie 126.95 + 180.00 Te vorderen BTW 7.62 + 140.00 Crediteuren 134.57 + +#137 30-06-99 Kilometervergoeding 2e kw. 1999 + 452.00 Reis en verblijfkosten 5301.12 + 180.10 Te vorderen BTW kilometers 722.88 + 041.00 Prive AJB 5982.00 + 041.10 Prive MK 42.00 + +#138 30-06-99 Berekende afschrijvingen + 012.00 Afschr. inventaris kantoor 80.32 + 002.00 Inventaris kantoor 80.32 + +#139 30-06-99 Berekende afschrijvingen + 012.04 Afschr. inventaris werkplaat 4.79 + 002.04 Inventaris werkplaats 4.79 + +#140 30-06-99 Berekende afschrijvingen + 012.10 Afschrijving computers 1102.30 + 002.10 Computers 1102.30 + +#141 30-06-99 Berekende afschrijvingen + 012.20 Afschrijving apparatuur 453.45 + 002.20 Apparatuur 453.45 + +#142 30-06-99 Berekende afschrijvingen + 012.40 Afschrijving literatuur 117.10 + 002.40 Literatuur 117.10 + +#143 30-06-99 Correctie berekende afschr. + 012.00 Afschr. inventaris kantoor 0.03 + 012.04 Afschr. inventaris werkplaats 0.03 + 012.10 Afschr. computers 0.02 + 002.40 Literatuur 0.01 + 002.00 Inventaris kantoor 0.03 + 002.04 Inventaris werkplaats 0.03 + 002.10 Computers 0.02 + 012.40 Afschr. literatuur 0.01 + +#144 01-07-99 Prive opname MK + 041.10 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#145 01-07-99 Creditrente 01-04 t/m. 30-06 + 101.00 Bank 363.62 + 110.00 Ontvangen interest 363.62 + +#146 01-07-99 Kosten 01-04 t/m. 30-06 + 433.00 Bankkosten 17.90 + 101.00 Bank 17.90 + +#147 01-07-99 Faktuur 3308 + 130.00 Debiteuren 14100.00 + 840.60 Opbrengst Advies/ontw. 17,5% 12000.00 + 181.00 Af te dragen BTW 2100.00 + +#148 01-07-99 Faktuur 3309 + 130.00 Debiteuren 160.00 + 840.61 Opbrengst Advies/onw. 0% 160.00 + +#149 01-07-99 Faktuur 3310 + 130.00 Debiteuren 2291.25 + 840.60 Opbrengst Advies/ontw. 17,5% 1950.00 + 181,00 Af te dragen BTW 341.25 + +#150 02-07-99 Faktuur 3298 + 101.00 Bank 11280.00 + 130.00 Debiteuren 11280.00 + +#151 02-07-99 Faktuur 3311 + 130.00 Debiteuren 4935.00 + 840.60 Opbrengst Advies/ontw. 17,5% 4200.00 + 181.00 Af te dragen BTW 735.00 + +#152 03-07-99 Postzegels + 432.00 Portikosten 24.00 + 100.00 Kas 24.00 + +#153 05-07-99 Faktuur 3305 + 101.00 Bank 3384.00 + 130.00 Debiteuren 3384.00 + +#154 06-07-99 Faktuur 3306 + 101.00 Bank 2608.50 + 130.00 Debiteuren 2608.50 + +#155 07-07-99 UUNET faktuur 9948902 + 140.00 Crediteuren 118.44 + 101.00 Bank 118.44 + +#156 08-07-99 UUNET faktuur 9958513 + 431.10 Datacommunicatiekosten 100.80 + 180.00 Te vorderen BTW 17.64 + 140.00 Crediteuren 118.44 + +#157 12-07-99 KPN kenm. 9111396611001810 + 431.00 Faxkosten 43.30 + 431.10 Datacommunicatiekosten 214.91 + 180.00 Te vorderen BTW 45.19 + 140.00 Crediteuren 303.40 + +#158 12-07-99 Faktuur 3307 + 101.00 Bank 2444.00 + 130.00 Debiteuren 2444.00 + +#159 13-07-99 Prive-opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#160 13-07-99 Prive-opname AJB + 041.00 Prive AJB 500.00 + 101.00 Bank 500.00 + +#161 13-07-99 Prive-opname MK + 041.10 Prive MK 500.00 + 101.00 Bank 500.00 + +#162 16-07-99 Faktuur 3312 + 130.00 Debiteuren 4512.00 + 840.60 Opbrengst Advies/ontw. 17,5% 3840.00 + 181.00 Af te dragen BTW 672.00 + +#163 16-07-99 Faktuur 3303 + 101.00 Bank 11280.00 + 130.00 Debiteuren 11280.00 + +#164 19-07-99 Weka faktuur 2677801 + 140.00 Crediteuren 134.57 + 101.00 Bank 134.57 + +#165 20-07-99 Prive-opname AJB + MK + 041.00 Prive AJB 325.00 + 041.10 Prive MK 325.00 + 101.00 Bank 650.00 + +#166 22-07-99 Multivlaai + 452.00 Reis en verblijfkosten 107.68 + 180.00 Te vorderen BTW 0.52 + 041.00 Prive AJB 108.20 + +#167 27-07-99 Prive-opname AJB belasting 1999 + 041.00 Prive AJB 2850.00 + 101.00 Bank 2850.00 + +#168 29-07-99 KPN kenm. 9111396611001810 + 140.00 Crediteuren 303.40 + 101.00 Bank 303.40 + +#169 29-07-99 BTW 2e kw.99 ken.7805063261901240 + 181.00 Af te dragen BTW 9779.00 + 180.00 Te vorderen BTW 238.78 + 180.10 Te vorderen BTW kilometers 722.88 + 189.00 Verrekende BTW 0.34 + 101.00 Bank 8817.00 + +#170 02-08-99 Prive-opname MK + 041.10 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#171 02-08-99 Faktuur 3313 + 130.00 Debiteuren 11280.00 + 840.60 Opbrengst Advies/ontw.17,5% 9600.00 + 181.00 Af te dragen BTW 1680.00 + +#172 04-08-99 Faktuur 3310 + 101.00 Bank 2291.25 + 130.00 Debiteuren 2291.25 + +#173 05-08-99 UUNET faktuur 9969443 + 431.10 Datacommunicatiekosten 97.60 + 180.00 Te vorderen BTW 17.08 + 140.00 Crediteuren 114.68 + +#174 06-08-99 Faktuur 3314 + 130.00 Debiteuren 2444.00 + 840.60 Opbrengst Advies/ontw.17,5% 2080.00 + 181.00 Af te dragen BTW 364.00 + +#175 06-08-99 Faktuur 3311 + 101.00 Bank 4935.00 + 130.00 Debiteuren 4935.00 + +#176 06-08-99 UUNET faktuur 9958513 + 140.00 Crediteuren 118.44 + 101.00 Bank 118.44 + +#177 10-08-99 Faktuur 3315 + 130.00 Debiteuren 3384.00 + 840.60 Opbrengst Advies/ontw.17,5% 2880.00 + 181.00 Af te dragen BTW 504.00 + +#178 11-08-99 Prive-opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#179 13-08-99 Faktuur 3316 + 130.00 Debiteuren 2679.00 + 840.60 Opbrengst Advies/ontw.17,5% 2280.00 + 181.00 Af te dragen BTW 399.00 + +#180 14-08-99 Restaurant Goudreinet + 452.00 Reis en verblijfkosten 176.75 + 041.00 Prive AJB 176.75 + +#181 17-08-99 Restaurant St. Joris + 452.00 Reis en verblijfkosten 191.50 + 041.00 Prive AJB 191.50 + +#182 18-08-99 Faktuur 3312 + 101.00 Bank 4512.00 + 130.00 Debiteuren 4512.00 + +#183 20-08-99 Faktuur 3309 + 101.00 Bank 160.00 + 130.00 Debiteuren 160.00 + +#184 20-08-99 Faktuur 3308 + 101.00 Bank 14100.00 + 130.00 Debiteuren 14100.00 + +#185 20-08-99 D-Reizen + 041.00 Prive AJB 950.27 + 041.10 Prive MK 950.28 + 101.00 Bank 1900.55 + +#186 25-08-99 Prive-opname AJB + 041.00 Prive AJB 1000.00 + 101.00 Bank 1000.00 + +#187 25-08-99 Prive-opname MK + 041.00 Prive MK 1000.00 + 101.00 Bank 1000.00 + +#188 26-08-99 Prive-opname AJB belasting 1999 + 041.00 Prive AJB 2850.00 + 101.00 Bank 2850.00 + + +#189 26-08-99 Mijnders Meubelen + 041.00 Prive AJB 265.00 + 041.10 Prive MK 265.00 + 101.00 Bank 530.00 + +#190 31-08-99 Prive-opname MK + 041.00 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#191 31-08-99 Teruggaaf BTW 805063262B017500 + 101.00 Bank 2920.00 + 188.00 Te verrekenen BTW 2802.24 + 910.00 Diverse baten en lasten 117.76 + +#192 31-08-99 WEKA faktuur 2711442 + 422.00 Abonnementen/documentatie 126.95 + 180.00 Te vorderen BTW 7.62 + 140.00 Crediteuren 134.57 + +#193 01-09-99 Faktuur 3317 + 130.00 Debiteuren 11280.00 + 840.60 Opbrengst Advies/ontw.17,5% 9600.00 + 181.00 Af te dragen BTW 1680.00 + +#194 01-09-99 Faktuur 3318 + 130.00 Debiteuren 4512.00 + 840.60 Opbrengst Advies/ontw.17,5% 3840.00 + 181.00 Af te dragen BTW 672.00 + +#195 01-09-99 Faktuur 3319 + 130.00 Debiteuren 3807.00 + 840.60 Opbrengst Advies/ontw.17,5% 3240.00 + 181.00 Af te dragen BTW 567.00 + +#196 01-09-99 Visser & Remmersw. fakt. 9908019 + 192.00 Nog te betalen bedragen 1000.00 + 423.00 Accountantskosten 691.50 + 180.00 Te vorderen BTW 296.01 + 140.00 Crediteuren 1987.51 + +#197 02-09-99 ART & FLOWERS + 460.00 Diverse kosten 149.53 + 180.00 Te vorderen BTW 8.97 + 100.00 Kas 158.50 + +#198 03-09-99 UUNET faktuur 9969443 + 140.00 Crediteuren 114.68 + 101.00 Bank 114.68 + +#199 06-09-99 Prive-opname AJB + 041.00 Prive AJB 1000.00 + 101.00 Bank 1000.00 + +#200 06-09-99 Prive-opname MK + 041.10 Prive MK 1000.00 + 101.00 Bank 1000.00 + +#201 08-09-99 Faktuur 3314 + 101.00 Bank 2444.00 + 130.00 Debiteuren 2444.00 + +#202 08-09-99 UUNET faktuur 9979648 + 431.10 Datacommunicatiekosten 97.60 + 180.00 Te vorderen BTW 17.08 + 140.00 Crediteuren 114.68 + +#203 10-09-99 KPN kenm. 111396611001811 + 431.00 Faxkosten 37.30 + 431.10 Datacommunicatiekosten 196.88 + 180.00 Te vorderen BTW 40.98 + 140.00 Crediteuren 275.16 + +#204 13-09-99 Faktuur 3315 + 101.00 Bank 3384.00 + 130.00 Debiteuren 3384.00 + +#205 13-09-99 Prive-opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#206 16-09-99 Faktuur 3316 + 101.00 Bank 2679.00 + 130.00 Bank 2679.00 + +#207 16-09-99 WEKA kenm. 3027114420411702 + 140.00 Crediteuren 134.57 + 101.00 Bank 134.57 + +#208 20-09-99 Grieks restaurant Olympiada + 452.00 Reis en verblijfkosten 205.00 + 041.00 Prive AJB 205.00 + +#209 21-09-99 Postzegels + 432.00 Portikosten 24.00 + 100.00 Kas 24.00 + +#210 24-09-99 Faktuur 3313 + 101.00 Bank 11280.00 + 130.00 Debiteuren 11280.00 + +#211 28-09-99 Priveopname AJB belasting 1999 + 041.00 Prive AJB 2850.00 + 101.00 Bank 2850.00 + +#212 30-09-99 Visser & Remmersw. fakt.9908019 + 140.00 Crediteuren 1987.51 + 101.00 Bank 1987.51 + +#213 30-09-99 KPN kenm. 7111396611001811 + 140.00 Crediteuren 275.16 + 101.00 Bank 275.16 + +#214 30-09-99 Kilometervergoeding 3e kw. 1999 + 452.00 Reis en verblijfkosten 4691.28 + 180.10 Te vorderen BTW kilometers 639.72 + 040.00 Prive AJB 5265.00 + 040.10 Prive MK 66.00 + +#215 30-09-99 Berekende afschrijvingen + 012.00 Afschr. inventaris kantoor 80.32 + 002.00 Inventaris kantoor 80.32 + +#216 30-09-99 Berekende afschrijvingen + 012.10 Afschrijving computers 814.56 + 002.10 Computers 814.56 + +#217 30-09-99 Berekende afschrijvingen + 012.20 Afschrijving apparatuur 453.45 + 002.20 Apparatuur 453.45 + +#218 30-09-99 Berekende afschrijvingen + 012.40 Afschrijving literatuur 109.45 + 002.40 Literatuur 109.45 + +#219 01-10-99 Prive-opname MK + 041.10 Prive MK 1800.00 + 101.00 Bank 1800.00 + +#220 01-10-99 Creditrente 01-07 t/m. 30-09 + 101.00 Bank 399.15 + 110.00 Ontvangen interest 399.15 + +#221 01-10-99 Kosten 01-07 t/m. 30-09 + 433.00 Bankkosten 19.00 + 101.00 Bank 19.00 + +#222 01-10-99 Faktuur 3320 + 130.00 Debiteuren 14100.00 + 840.60 Opbrengst Advies/ontw.17,5% 12000.00 + 181.00 Af te dragen BTW 2100.00 + +#223 01-10-99 Faktuur 3321 + 130.00 Debiteuren 640.00 + 840.61 Opbrengst Advies/ontw. 0% 640.00 + +#224 04-10-99 Dinkum faktuur 99.006 + 420.00 Kantoorbenodigdheden 245.00 + 180.00 Te vorderen BTW 42.88 + 140.00 Crediteuren 287.88 + +#225 04-10-99 Faktuur 3318 + 101.00 Bank 4512.00 + 130.00 Debiteuren 4512.00 + +#226 04-10-99 Faktuur 3319 + 101.00 Bank 3807.00 + 130.00 Debiteuren 3807.00 + +#227 05-10-99 Faktuur 3322 + 130.00 Debiteuren 2397.00 + 840.60 Opbrengst advies/ontw.17,5% 2040.00 + 181.00 Af te dragen BTW 357.00 + +#228 07-10-99 UUNET faktuur 9979648 + 140.00 Crediteuren 114.68 + 101.00 Bank 114.68 + +#229 08-10-99 Dinkum faktuur 99.006 + 140.00 Crediteuren 287.88 + 101.00 Bank 287.88 + +#230 08-10-99 Prive-opname MK + 041.10 Prive MK 500.00 + 101.00 Bank 500.00 + +#231 08-10-99 UUNET faktuur 9990080 + 431.10 Datacommunicatiekosten 97.60 + 180.00 Te vorderen BTW 17.08 + 140.00 Crediteuren 114.68 + +#232 12-10-99 Prive-opname AJB + 041.00 Prive AJB 2300.00 + 101.00 Bank 2300.00 + +#233 12-10-99 Dunnet faktuur 56005 + 270.00 Investeringen 4256.00 + 180.00 Te vorderen BTW 744.80 + 101.00 Bank 5000.80 + +#234 12-10-99 Dunnet faktuur 56005 + 002.10 Computers 4256.00 + 270.00 Investeringen 4256.00 + +#235 15-10-99 Faktuur 3317 + 101.00 Bank 11280.00 + 130.00 Debiteuren 11280.00 + +#236 16-10-99 Boekhandel de meent + 422.00 Abonnementen/documentatie 158.49 + 180.00 Te vorderen BTW 9.51 + 101.00 Bank 168.00 + +#237 19-10-99 Faktuur 332 + 101.00 Bank 640.00 + 130.00 Debiteuren 640.00 + +#238 21-10-99 Prive-opname MK belasting 1999 + 041.10 Prive MK 3060.00 + 101.00 Bank 3060.00 + +#239 25-10-99 NLUUG faktuur 1999.1104.0148 + 190.00 Vooruitbetaalde bedragen 200.00 + 101.00 Bank 200.00 + +#240 28-10-99 BTW 3e kw.99 ken.6805063261901270 + 181.00 Af te dragen BTW 9714.25 + 180.00 Te vorderen BTW 451.09 + 180.10 Te vorderen BTW kilometers 639.72 + 189.00 Verrekende BTW 0.44 + 101.00 Bank 8623.00 + +#241 28-10-99 Prive-opname AJB belasting 1999 + 041.00 Prive AJB 2850.00 + 101.00 Bank 2850.00 + diff --git a/makefile b/makefile new file mode 100644 index 0000000..b2d911e --- /dev/null +++ b/makefile @@ -0,0 +1,31 @@ + +OBJS = account_main.o account.o postscript.o +SRCS = account_main.cpp account.cpp postscript.cpp + +LIBS = -lAXE -L/usr/X11R6/lib -lX11 -lps + +all : account bank + +account : $(OBJS) + g++ $(OBJS) -o account $(LIBS) + +bank : bank.o + g++ bank.o -o bank $(LIBS) + +account_main.o : account.h + +account.o : account.h postscript.h + +install : account bank + cp account bank /usr/local/bin + cp balans.xsl profit.xsl saldibalans.xsl /usr/local/xslt + +clean : + rm -f account core + rm -f bank bank.o + rm -f $(OBJS) + rm -f saldi.xml saldibalans.ps grootboek.ps + +depend: + makedepend -I/usr/local/include $(SRCS) +# DO NOT DELETE diff --git a/postscript.cpp b/postscript.cpp new file mode 100644 index 0000000..1226b32 --- /dev/null +++ b/postscript.cpp @@ -0,0 +1,5 @@ + +#include "postscript.h" + +bool postscript_started = false; + diff --git a/postscript.h b/postscript.h new file mode 100644 index 0000000..10c619e --- /dev/null +++ b/postscript.h @@ -0,0 +1,94 @@ + +#include +#include + +// A Postscript document as used in pslib + +extern bool postscript_started; + +class PostScript +{ + PSDoc *psdoc; + int psfont; + int page; + +public: + + PostScript(const char * filename) + { + if (!postscript_started) + { + PS_boot(); + postscript_started = true; + } + psdoc = PS_new(); + PS_open_file(psdoc, filename); + //PS_set_info(psdoc, "BoundingBox", "0 0 842 596"); + PS_set_parameter(psdoc, "SearchPath", "/usr/lib/openoffice/basis3.1/share/psprint/fontmetric"); + PS_set_parameter(psdoc, "SearchPath", "/usr/lib/openoffice/basis3.2/share/psprint/fontmetric"); + psfont = PS_findfont(psdoc, "Courier", NULL, 0); + page = 0; + } + + ~PostScript() + { + if (page != 0) + { + PS_end_page(psdoc); + } + PS_close(psdoc); + PS_delete(psdoc); + } + + void NewPage(float page_width, float page_height) + { + if (page != 0) + { + PS_end_page(psdoc); + } + if (page_width > page_height) + { + PS_begin_page(psdoc, page_height, page_width); + // Rotate for landscape. + + PS_translate(psdoc, 600, 0); + PS_rotate(psdoc, 90); + } + else + { + PS_begin_page(psdoc, page_width, page_height); + } + page++; + PS_setfont(psdoc, psfont, 10.0); + } + + void FontSize(float size) + { + PS_setfont(psdoc, psfont, size); + } + + void LineAttributes(float width, float dash_on, float dash_off) + { + PS_setlinewidth(psdoc, width); + PS_setdash(psdoc, dash_on, dash_off); + } + + void Line(float x1, float y1, float x2, float y2) + { + PS_moveto(psdoc, x1, y1); + PS_lineto(psdoc, x2, y2); + PS_stroke(psdoc); + } + + void Rectangle(float x, float y, float width, float height) + { + PS_setcolor(psdoc, "fill", "rgb", 0.8, 1.0, 0.8, 0.0); + PS_rect(psdoc, x, y, width, height); + PS_fill(psdoc); + } + + void Text(float x, float y, const char * text) + { + PS_show_xy(psdoc, text, x, y); + } +}; diff --git a/profit.xsl b/profit.xsl new file mode 100644 index 0000000..fae6ac0 --- /dev/null +++ b/profit.xsl @@ -0,0 +1,57 @@ + + + + + + + + + http://www.w3.org/1999/xhtml + + + Winst en Verlies rekening + + +

Winst en Verlies rekening

+ +

Opbrengsten

+ + + + + + + + +
TOTAAL
+ +

Kosten

+ + + + + + + + +
TOTAAL
+ + + +
+ + + + + + + + + + + + + +
diff --git a/saldibalans.xsl b/saldibalans.xsl new file mode 100644 index 0000000..aca4c23 --- /dev/null +++ b/saldibalans.xsl @@ -0,0 +1,88 @@ + + + + + + + + + http://www.w3.org/1999/xhtml + + + +

Saldi Balans

+ + + + + + + + + + + + + +
RekeningKostenBalans
DEBETCREDITDEBETCREDIT
TOTAAL
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/total.xsl b/total.xsl new file mode 100644 index 0000000..8e5ecbe --- /dev/null +++ b/total.xsl @@ -0,0 +1,25 @@ + + + + + + + + + http://www.w3.org/1999/xhtml + + + + +
+
+
+
+ + + +
+ +
-- 2.11.0