/*
dtaus.c - Belegloser Datenträgeraustausch mit einer Bank
- Copyright (c) 1996,8,2001,2,3 Martin Schulze <joey@infodrom.org>
+ Copyright (c) 1996,8,2001-4 Martin Schulze <joey@infodrom.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <ctype.h>
#include <time.h>
#include <malloc.h>
+#include "latex.h"
#define DEFAULT_EURO
#ifndef DEFAULT_EURO
{"Currency", 127, 1, OPT},
{"Euro", 127, 1, OPT},
{"DM", 127, 1, OPT},
- {NULL, 0, 0}
+ {NULL, 0, 0, 0}
};
#define A_TRANS 0
#else
{"Betrag-DM", 50, 11, IGN},
#endif
- {NULL, 0, 0}
+ {NULL, 0, 0, 0}
};
#define C_NAME 0
#else
{"Summe-DM", 17, 13, IGN},
#endif
- {NULL, 0, 0}
+ {NULL, 0, 0, 0}
};
#define E_COUNT 0
{
static char res[20];
char *cp;
+ char *xp; /* only to avoid a GCC warning */
strncpy(res, s, sizeof(res)-1);
res[sizeof(res)-1] = 0;
if (*cp == '.' || *cp == ',') {
if (*(cp+1)) {
/* 1st decimal place */
- if (isdigit(*(cp+1)))
- *(cp++) = *(cp+1);
+ xp = cp+1;
+ if (*xp && isdigit(*xp))
+ *(cp++) = *xp;
else
*(cp++) = '0';
/* 2nd decimal place */
- if (*(cp+1) && isdigit(*(cp+1)))
- *(cp++) = *(cp+1);
+ xp = cp+1;
+ if (*xp && isdigit(*xp))
+ *(cp++) = *xp;
else
*(cp++) = '0';
} else {
return res;
}
+/*
+ * Return the last digit of the year as character
+ */
+char get_date_lastdigit()
+{
+ time_t timer;
+ struct tm *loctime;
+
+ timer = time ( NULL );
+ loctime = localtime(&timer);
+ return loctime->tm_year % 10 + '0';
+}
+
char *string2trans (char *s)
{
static char res[30];
else if (!strcmp(s, "53000"))
sprintf (res, "Lohn");
else if (!strncmp(s, "5400", 4))
- sprintf (res, "Vermögen");
+ sprintf (res, "Vermögen %c",s[4]);
/* else if (!strcmp(s, "56000"))
sprintf (res, ""); / * Überweisung öffentlicher Kassen */
return res;
char *trans2string (char *s)
{
static char res[30];
+ char *cp;
res[0] = '\0';
if (!strcmp(s, "Abbuchung"))
sprintf (res, "51000");
else if (!strcmp(s, "Lohn"))
sprintf (res, "53000");
- else if (!strncmp(s, "Vermögen", 4))
- sprintf (res, "5400");
+ else {
+ cp = NULL;
+ if (!strncmp(s, "Vermögen", 8))
+ cp = s+8;
+ if (!strncmp(s, "Vermoegen", 9))
+ cp = s+9;
+
+ if (!cp) {
+ fprintf (stderr, "Unbekannte Transaktion `%s'\n", res);
+ exit (1);
+ }
+
+ /*
+ Vermögen --> 5400<heutiges Jahr>
+ Vermögen 8 -> 5400<8>
+ Vermögen 2003 -> 5400<3>
+ */
+
+ if (*cp) while (!isspace(*cp)) cp++;
+ while (isspace(*cp)) cp++;
+
+ if (!*cp || !isdigit(*cp))
+ sprintf (res, "5400%c",get_date_lastdigit());
+ else {
+ while (isdigit(*cp)) cp++;
+ sprintf (res, "5400%c",*(cp-1));
+ }
+ }
/* else if (!strcmp(s, ""))
sprintf (res, "56000"); / * Überweisung öffentlicher Kassen */
return res;
line[strlen(line)-1] = '\0';
for (i=strlen(line);(line[i-1] == ' '||line[i-1] == '\t')&&i>0; i--)
line[i-1] = '\0';
- if (line[0] == '#')
- line[0] = '\0';
} else
line[0] = '\0';
}
return 0;
}
+/*
+ * Return the current date nicely formatted
+ */
char *get_date()
{
static char res[10];
}
sprintf (tmp, "%s", trans2string(values[C_TRANS]));
if (!strlen(tmp)) {
- fprintf (stderr, "Ungültiger Typ, nur Abbuchung, Einzug, E-Cash, E-Cash-A, Gutschrift und Lohn erlaubt.\n");
+ fprintf (stderr, "Ungültige Transaktion, nur Abbuchung, Einzug, E-Cash, E-Cash-A, Gutschrift und Lohn erlaubt.\n");
return 0;
}
else
if (!(fcontrol = fopen(ccontrol, "w")))
return;
- if (!(buf = (char *)malloc (512)))
+ if ((buf = (char *)malloc (512)) == NULL)
return;
/*
fprintf(fcontrol, "{\n");
for (index=C_NAME; index < C_LOOP; index++) {
+ if (index == C_TEXT || index == C_EXT)
+ continue;
#ifndef DEFAULT_EURO
if (use_euro && index == C_VAL)
index = C_EUR;
fclose(fdtaus);
}
-int control2dtaus (char *ccontrol, char *cdtaus, char *cbeleg, char *ccheck)
+int control2dtaus (char *ccontrol, char *cdtaus, char *cbeleg, char *ccheck, char *latex)
{
FILE *fdtaus, *fcontrol, *fbeleg, *fcheck;
void *buf;
char *ident;
int recindex;
- char tmp[30];
char line[100];
char *valA[A_LEN], *valC[C_LEN];
int count;
char *cp;
int textindex = 0;
int len, i;
+ char *type = NULL;
+ char *currency = NULL;
+ char date_todo[11];
+ char ssum_val[30], ssum_kto[30], ssum_blz[30];
if (!cdtaus) {
if (!(fdtaus = fopen("dtaus0.txt", "w")))
return 0;
- if (!(buf = (char *)malloc (512)))
+ if ((buf = (char *)malloc (512)) == NULL)
return 0;
/*
if ((recindex = rec_index(ident, REC_A)) != -1)
{
if (recA[recindex].type != IGN)
- if ((valA[recindex] = (char *)malloc (strlen(line)+1)))
+ if ((valA[recindex] = (char *)malloc (strlen(line)+1)) != NULL)
strcpy(valA[recindex], line);
} else {
if (! strcasecmp (ident, "euro"))
control_nextline ((void *)line, 100, fcontrol);
}
if (((recindex = rec_index("art", REC_A)) != -1) && valA[recindex] && strlen(valA[recindex])) {
- fprintf(fbeleg, "\n\n");
- fprintf(fbeleg, "\n Begleitzettel\n\n");
- fprintf(fbeleg, "\n Belegloser Datentraegeraustausch\n\n");
if (valA[recindex][0] == 'L')
- fprintf(fbeleg, "\n Sammeleinziehungsauftrag\n\n");
+ type = strdup ("Sammeleinziehungsauftrag");
else if (valA[recindex][0] == 'G')
- fprintf(fbeleg, "\n Sammelueberweisungsauftrag\n\n");
+ type = strdup ("Sammelueberweisungsauftrag");
+ else
+ type = strdup ("Sammelauftrag");
+
+ if (use_euro)
+ currency = strdup ("Euro");
+ else
+ currency = strdup ("DM");
+
+ if (valA[A_TODO])
+ sprintf (date_todo, valA[A_TODO]);
else
- fprintf(fbeleg, "\n Sammelauftrag\n\n");
+ memset (date_todo, 0, sizeof (date_todo));
+
+ fprintf(fbeleg, "\n\n");
+ fprintf(fbeleg, "\n Begleitzettel\n\n");
+ fprintf(fbeleg, "\n Belegloser Datentraegeraustausch\n\n");
+ fprintf(fbeleg, "\n %s\n\n", type);
fprintf(fbeleg, "\n VOL ........................:\n");
fprintf(fbeleg, "\n Erstellungsdatum ...........: %s\n", get_date());
- if (valA[A_TODO]) {
- fprintf(fbeleg, "\n Ausfuehrugsdatum ...........: %s\n", valA[A_TODO]);
+ if (date_todo) {
+ fprintf(fbeleg, "\n Ausfuehrungsdatum ..........: %s\n", date_todo);
}
- if (use_euro)
- fprintf(fbeleg, "\n Waehrung ...................: Euro\n");
- else
- fprintf(fbeleg, "\n Waehrung ...................: DM\n");
+ fprintf(fbeleg, "\n Waehrung ...................: %s\n", currency);
}
if (!dtaus_writeA(fdtaus, valA)) {
fprintf (stderr, "Konnte den Anfangsdatensatz nicht schreiben.\n");
}
}
if (textindex < MAX_TEXT) {
- if ((cp = (char *)malloc (strlen (line) + 1))) {
- strcpy (cp, line);
- cp[strlen (line)] = '\0';
- text[textindex++] = cp;
- }
+ if ((cp = (char *)malloc (strlen (line) + 1)) == NULL)
+ return 0;
+ strcpy (cp, line);
+ cp[strlen (line)] = '\0';
+ text[textindex++] = cp;
}
} else {
len = strlen(line);
if (recindex == C_VAL) {
- /* Convert commast to dots for later processing */
+ /* Convert commas to dots for later processing */
for (i=0; line[i]; i++) if (line[i] == ',') line[i] = '.';
- if ((cp = index (line, '.')) == NULL) {
- if (!(valC[recindex] = (char *)malloc (strlen(line)+4)))
+ if ((cp = strchr (line, '.')) == NULL) {
+ if ((valC[recindex] = (char *)malloc (strlen(line)+4)) == NULL)
return 0;
sprintf (valC[recindex], "%s.00", line);
} else if ( ((len = cp - line + 3)) < strlen (line)) {
- if (!(valC[recindex] = (char *)malloc (len+1)))
+ if ((valC[recindex] = (char *)malloc (len+1)) == NULL)
return 0;
strncpy (valC[recindex], line, len);
valC[recindex][len] = '\0';
} else {
- if (!(valC[recindex] = (char *)malloc (strlen(line)+1)))
+ if ((valC[recindex] = (char *)malloc (strlen(line)+1)) == NULL)
return 0;
strcpy(valC[recindex], line);
}
} else {
- if ((valC[recindex] = (char *)malloc (strlen(line)+1)))
- strcpy(valC[recindex], line);
- else
+ if ((valC[recindex] = (char *)malloc (strlen(line)+1)) == NULL)
return 0;
+ strcpy(valC[recindex], line);
}
}
}
*/
dtaus_writeE(fdtaus, count, sum_val, sum_blz, sum_kto);
fprintf (fcheck, " --------------------------------------------------------------------\n");
- bigint_sprintf (tmp, "%s", sum_val);
fprintf (fbeleg, "\n Anzahl .....................: %d\n", count);
- recindex=strlen(tmp);
- tmp[recindex+1] = '\0';
- tmp[recindex] = tmp[recindex-1];
- tmp[recindex-1] = tmp[recindex-2];
- tmp[recindex-2] = '.';
- fprintf (fcheck, " %-52s %14s\n", "Summe", tmp);
- fprintf (fbeleg, "\n Summe ......................: %s\n", tmp);
- bigint_sprintf (tmp, "%s", sum_kto);
- fprintf (fbeleg, "\n Kontrollsumme Kontonummern .: %s\n", tmp);
- bigint_sprintf (tmp, "%s", sum_blz);
- fprintf (fbeleg, "\n Kontrollsumme Bankleitzahlen: %s\n", tmp);
+ bigint_sprintf (ssum_val, "%s", sum_val);
+ recindex=strlen(ssum_val);
+ ssum_val[recindex+1] = '\0';
+ ssum_val[recindex] = ssum_val[recindex-1];
+ ssum_val[recindex-1] = ssum_val[recindex-2];
+ ssum_val[recindex-2] = '.';
+ fprintf (fcheck, " %-52s %14s\n", "Summe", ssum_val);
+ fprintf (fbeleg, "\n Summe ......................: %s\n", ssum_val);
+ bigint_sprintf (ssum_kto, "%s", sum_kto);
+ fprintf (fbeleg, "\n Kontrollsumme Kontonummern .: %s\n", ssum_kto);
+ bigint_sprintf (ssum_blz, "%s", sum_blz);
+ fprintf (fbeleg, "\n Kontrollsumme Bankleitzahlen: %s\n", ssum_blz);
fprintf (fbeleg, "\n Unsere Kontonummer .........: %s\n", valA[A_KTO]);
fprintf (fbeleg, "\n Unsere Bankleitzahl ........: %s\n", valA[A_BLZ]);
fprintf (fbeleg, "\n\n\n\n\n __________________________________________________\n");
fprintf (fbeleg, " Ort, Datum Unterschrift\n");
+
+ if (latex)
+ generate_latex_receipt (latex, type, get_date(), date_todo,
+ currency, count,
+ ssum_val, ssum_kto, ssum_blz,
+ valA[A_KTO], valA[A_BLZ]);
+
for (recindex=0; recindex<A_LEN; recindex++)
if (valA[recindex])
free(valA[recindex]);