1 #ident "Kalopa: $Id: invoice.c,v 1.6 2008/01/15 18:10:41 dtynan Exp $"
2 
3 /*
4  * $Id: invoice.c,v 1.6 2008/01/15 18:10:41 dtynan Exp $
5  *
6  * Copyright (c) 2004, Kalopa Media Limited.  All rights reserved.
7  * Copyright (c) 2005, Kalopa Research Limited.  All rights reserved.
8  * This is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published
10  * by the Free Software Foundation; either version 2, or (at your
11  * option) any later version.
12  *
13  * It is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16  * License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this product; see the file COPYING.  If not, write to
20  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
21  * USA.
22  *
23  * THIS SOFTWARE IS PROVIDED BY KALOPA RESEARCH LIMITED "AS IS" AND
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
25  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
26  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL KALOPA
27  * RESEARCH LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
30  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
34  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35  *
36  * ABSTRACT
37  *
38  * $Log: invoice.c,v $
39  * Revision 1.6  2008/01/15 18:10:41  dtynan
40  * Changed to use new company name and copyright, also fixed a few old
41  * files with the wrong license.
42  *
43  * Revision 1.5  2006/07/31 10:17:47  dtynan
44  * Massive changeover to a more Ruby/Rails primary key naming convention.
45  *
46  * Revision 1.4  2006/03/06 12:31:17  dtynan
47  * This is still a work-in-process.  If it compiles and works for you,
48  * great!  If not, oh well...
49  *
50  * Revision 1.3  2005/09/21 18:10:27  dtynan
51  * Extensive changes prior to first public release, including an
52  * import/export mechanism.
53  *
54  * Revision 1.2  2004/12/09 20:17:54  dtynan
55  * Cleaned up include topology.
56  *
57  * Revision 1.1  2004/12/09 19:17:49  dtynan
58  * Extensive functionality improvements.
59  *
60  * Revision 1.1  2004/12/08 14:28:15  dtynan
61  * First pass at a useable GUI.
62  */
63 #include <stdio.h>
64 #include <unistd.h>
65 #include <sys/types.h>
66 #include <sys/stat.h>
67 #include <string.h>
68 
69 #include <bonobo.h>
70 #include <gnome.h>
71 
72 #include "beanie_gui.h"
73 
74 /*
75  *
76  */
77 enum	{
78 	COLUMN_ITEM,
79 	COLUMN_NOMACCT,
80 	COLUMN_DESCR,
81 	COLUMN_VCODE,
82 	COLUMN_QUANT,
83 	COLUMN_UNITC,
84 	COLUMN_DISC,
85 	NCOLUMNS
86 };
87 
88 /*
89  *
90  */
91 void
show_invoice(GtkWidget * widget)92 show_invoice(GtkWidget *widget)
93 {
94 	int invid;
95 	dbow_conn *db;
96 	struct db_invoice *invp;
97 	struct db_invoice_item *iip;
98 	char vcode[4], temp[64];
99 	GtkWidget *dialog;
100 	GtkWidget *scroll;
101 	GtkWidget *tree;
102 	GtkTreeIter iter;
103 	GtkListStore *store;
104 
105 	if ((db = get_company_dbase()) == NULL)
106 		return;
107 
108 	invid = 453; /* XXX */
109 	store = gtk_list_store_new(NCOLUMNS,
110 					G_TYPE_UINT,
111 					G_TYPE_UINT,
112 					G_TYPE_STRING,
113 					G_TYPE_STRING,
114 					G_TYPE_UINT,
115 					G_TYPE_STRING,
116 					G_TYPE_STRING);
117 	if ((invp = db_findinvoicebyid(db, invid)) == NULL) {
118 		warning("Could not find specified invoice.");
119 		return;
120 	}
121 	for (iip = db_findinvoice_itembyinvoice_id(db, invp->id);
122 				iip != NULL;
123 				iip = db_findinvoice_itemnext(db, iip)) {
124 		gtk_list_store_append(store, &iter);
125 		if (iip->vcode == 0)
126 			sprintf(vcode, "Z");
127 		else
128 			sprintf(vcode, "%c", iip->vcode + 'A' - 1);
129 		sprintf(temp, "%.2f%%", iip->disc);
130 		gtk_list_store_set(store, &iter,
131 				COLUMN_ITEM, iip->item_id,
132 				COLUMN_NOMACCT, iip->nomacct_id,
133 				COLUMN_DESCR, strdup(iip->descr),
134 				COLUMN_VCODE, strdup(vcode),
135 				COLUMN_QUANT, iip->quant,
136 				COLUMN_UNITC, strdup(bal(iip->unitc, NULL)),
137 				COLUMN_DISC, strdup(temp),
138 				-1);
139 	}
140 
141 	sprintf(temp, "Invoice #%d", invid);
142 	dialog = gtk_dialog_new_with_buttons(temp, NULL, 0,
143 				GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
144 				NULL);
145 	gtk_window_set_default_size(GTK_WINDOW(dialog), 550, 300);
146 	gtk_container_border_width(GTK_CONTAINER(dialog), 5);
147 	g_signal_connect_swapped(G_OBJECT(dialog), "response",
148 				G_CALLBACK (gtk_widget_destroy), dialog);
149 	gtk_widget_realize(dialog);
150 
151 	scroll = gtk_scrolled_window_new(NULL, NULL);
152 	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll),
153 					GTK_SHADOW_ETCHED_IN);
154 	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
155 					GTK_POLICY_NEVER,
156 					GTK_POLICY_AUTOMATIC);
157 	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), scroll,
158 						TRUE, TRUE, 0);
159 
160 	tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
161 	gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE);
162 	gtk_tree_view_set_search_column(GTK_TREE_VIEW(tree), COLUMN_DESCR);
163 	gtk_container_add(GTK_CONTAINER(scroll), tree);
164 
165 	columnheader(tree, "#",COLUMN_ITEM,20,20,CR_RALIGN);
166 	columnheader(tree, "NL",COLUMN_NOMACCT,50,50,CR_RALIGN);
167 	columnheader(tree, "Description",COLUMN_DESCR,200,0,CR_MARKUP);
168 	columnheader(tree, "VAT",COLUMN_VCODE,20,20,0);
169 	columnheader(tree, "Quant.",COLUMN_QUANT,50,50,CR_RALIGN);
170 	columnheader(tree, "Cost",COLUMN_UNITC,100,100,CR_RALIGN);
171 	columnheader(tree, "Discount",COLUMN_DISC,80,80,CR_RALIGN);
172 
173 	gtk_widget_show(tree);
174 	gtk_widget_show(scroll);
175 	gtk_widget_show(dialog);
176 }
177