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