#!/home/onyx/bin/onyx
#
# Dies ist eine kleine Faktura als Beispiel fuer Onyx 4gl
#
# (c) 93 Michael Koehne <kraehe@bakunin.north.de>
# -----------------------------------------------------------------------------

# database fakt%postgres;
# database fakt%postgres@durruti;
# database fakt%gawk@fanelli;
database fakt%gawk@bakunin.north.de;

# -----------------------------------------------------------------------------

table h
	art	int	5,
	kun	int	5,
	rg	int	5;

table art
	nr	int	5,
	name	char	30,
	vk	calc	10;

table kun
	nr	int	5,
	name1	char	30,
	name2	char	30,
	strasse	char	30,
	ort	char	30;

table rgkopf
	nr	int	5,
	datum	date	10,
	kun	int	5,
	sum	calc	10,
	proz	calc	5,
	mwst	calc	10,
	betr	calc	10;

table rglist
	art	int	5,
	name	char	30,
	menge	int	5,
	vk	calc	10,
	betr	calc	10;

table rgview
	a1	int	5,
	n1	char	30,
	m1	int	5,
	v1	calc	10,
	b1	calc	10,
	a2	int	5,
	n2	char	30,
	m2	int	5,
	v2	calc	10,
	b2	calc	10,
	a3	int	5,
	n3	char	30,
	m3	int	5,
	v3	calc	10,
	b3	calc	10;

# -----------------------------------------------------------------------------

program Stammdaten;

menu mask Artikel by art
	"",
	" Nummer : $ ",
	" Name   : $ ",
	" VK     : $ ",
	"";
fields
	 nr:art_nr,
	 name,
	 vk:art_save;
key 1 is art_sel;

menu mask Kunden by kun
	"",
	" Nummer  : $",
	" Name    : $",
	"         : $",
	" Strasse : $",
	" Ort     : $",
	"";
fields
	nr:kun_nr,
	name1,name2,strasse,
	ort:kun_save;
key 1 is kun_sel;

# -----------------------------------------------------------------------------

#transaction init {
#	show Messages;
#	show Menu;
#	}

transaction art_nr {
	set h.art = $art.nr;
	call art_load;
	}

transaction art_load {
	if not h.art then break;

	import art from
		select	nr,name,vk
		fromr	art
		where	nr = $h.art;

	set art.nr = $h.art;
	}

transaction art_save {
	if not art.nr then break;

	if valid art 
	then
		update	art
		set	name = "$art.name",
			vk = $art.vk
		where	nr = $art.nr;
	else
		insert into art ( nr, name, vk )
		values ( $art.nr,
			"$art.name",
			 $art.vk
			);

	validate art;
	}

transaction art_sel {
	import art from dynasel;
	}

# -----------------------------------------------------------------------------

transaction kun_nr {
	set h.kun = $kun.nr;
	call kun_load;
	}

transaction kun_load {
	if not h.kun then break;

	import kun from
		select	nr, name1, name2, strasse, ort
		fromr	kun
		where	nr = $h.kun;

	set kun.nr = $h.kun;
	}

transaction kun_save {
	if not kun.nr then break;

	if valid kun 
	then
		update	kun
		set	name1 = "$kun.name1",
			name2 = "$kun.name2",
			strasse = "$kun.strasse",
			ort = "$kun.ort"
		where	nr = $kun.nr;
	else
		insert into kun ( nr, name1, name2, strasse, ort )
		values ( $kun.nr,
			"$kun.name1",
			"$kun.name2",
			"$kun.strasse",
			"$kun.ort"
		       );

	validate kun;
	}

transaction kun_sel {
	import kun from dynasel;
	}

# -----------------------------------------------------------------------------

program Rechnung;

menu mask Erfassen
by rgkopf
	"",
	" #                               Rechungs-Nr    : $ ",
	" #                               Rechungs-Datum : $ ",
	" #                               Kunden-Nr      : $ ",
	"",
	" #",
	"",
	" Pos   Artikel                        Menge  Preis       Betrag",
	" ------------------------------------------------------------------ ";
fields
	nr:rg_nr,datum,kun:rg_kun,
	kun.name1,kun.name2,kun.strasse,kun.ort;
check by
	rg_kun_check;
by rglist
	" #     #                              #      #           #         ",
	" #     #                              #      #           #         ",
	" #     #                              #      #           #         ",
	" $     $                              $      $           #         ";
fields	art:rg_art,name,menge,vk:rg_next,
	rgview.a1, rgview.n1, rgview.m1, rgview.v1, rgview.b1,
	rgview.a2, rgview.n2, rgview.m2, rgview.v2, rgview.b2,
	rgview.a3, rgview.n3, rgview.m3, rgview.v3, rgview.b3,
	betr;
by rgkopf
	"                                                         ---------- ",
	"                                                         #",
	"                                                  #      #",
	"                                                         ---------- ",
	"                                                         #";
fields	sum,proz,mwst,betr;

# -----------------------------------------------------------------------------

transaction rg_nr {
	clean h;
	clean art;
	clean kun;

	set h.rg = $rgkopf.nr;

	clean rgkopf;
	clean rglist;
	clean rgview;

	call rg_load;

	set rgkopf.proz = 15;
	}

transaction rg_load {
	if not h.rg then break;

	import rgkopf from
		select	nr,datum,kun,sum,proz,mwst,betr
		from	rgkopf
		where	nr = $h.rg;

	set rgkopf.nr = $h.rg;

	set h.kun = $rgkopf.kun;
	call kun_load;

	if valid rgkopf
	then import rglist from
		select art, name, menge, vk, betr
		from rglist
		where nr = $h.rg;
	and for valid rglist do rg_scroll;
	and fetch last rglist;
	and fetch new rglist;
	}
	
transaction rg_kun {
	set h.kun = $rgkopf.kun;
	call kun_load;
	}

transaction rg_art {
	if not rglist.art
	then	clean current rglist;
	and	call  rg_next;
	and	break;

	set h.art = $rglist.art;
	call art_load;

	set rglist.name = $art.name;
	set rglist.menge= "0";
	set rglist.vk	= $art.vk;
	set rglist.betr	= "0";
	}

transaction rg_scroll {
	set rgview.a1 = $rgview.a2;
	set rgview.n1 = $rgview.n2;
	set rgview.m1 = $rgview.m2;
	set rgview.v1 = $rgview.v2;
	set rgview.b1 = $rgview.b2;

	set rgview.a2 = $rgview.a3;
	set rgview.n2 = $rgview.n3;
	set rgview.m2 = $rgview.m3;
	set rgview.v2 = $rgview.v3;
	set rgview.b2 = $rgview.b3;

	set rgview.a3 = $rglist.art;
	set rgview.n3 = $rglist.name;
	set rgview.m3 = $rglist.menge;
	set rgview.v3 = $rglist.vk;
	set rgview.b3 = $rglist.betr;
	}

transaction rg_next {
	set rglist.betr = $rglist.menge * $rglist.vk;

	call rg_scroll;

	fetch new rglist;
	
	set rgkopf.sum = sum ( valid rglist.betr ) ;
	set rgkopf.mwst = $rgkopf.sum * $rgkopf.proz / 100;
	set rgkopf.betr = $rgkopf.sum + $rgkopf.mwst;

	goto Erfassen art;
	}

menu transaction Speichern {
	if not rgkopf.nr then break;

	if valid rgkopf 
	then
		update	rgkopf
		set	datum = "$rgkopf.datum",
			kun   =  $rgkopf.kun,
			sum   =  $rgkopf.sum,
			proz  =  $rgkopf.proz,
			mwst  =  $rgkopf.mwst,
			betr  =  $rgkopf.betr
		where	nr = $rgkopf.nr;
	else
		insert into rgkopf ( nr, datum, kun, sum, proz, mwst, betr )
		values ( $rgkopf.nr,
			"$rgkopf.datum",
			 $rgkopf.kun,
			 $rgkopf.sum,
			 $rgkopf.proz,
			 $rgkopf.mwst,
			 $rgkopf.betr
			);

	validate rgkopf;

	delete from rglist where nr = $rgkopf.nr;
	for valid rglist do save_rglist;
	}

transaction save_rglist {
	insert into rglist ( nr, art, name, menge, vk, betr )
	values ( $rgkopf.nr,
		 $rglist.art,
		"$rglist.name",
		 $rglist.menge,
		 $rglist.vk,
		 $rglist.betr
		);
	}
