diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/database/database.vala | 21 | ||||
-rw-r--r-- | src/database/db-interface.vala | 1 | ||||
-rw-r--r-- | src/mail/mail.vala | 12 | ||||
-rw-r--r-- | src/meson.build | 2 | ||||
-rw-r--r-- | src/web/web.vala | 48 |
5 files changed, 58 insertions, 26 deletions
diff --git a/src/database/database.vala b/src/database/database.vala index 52c5dd2..b361daf 100644 --- a/src/database/database.vala +++ b/src/database/database.vala @@ -141,6 +141,7 @@ public class DataBase : Object { queries["alias_ean_add"] = "INSERT OR IGNORE INTO ean_aliases (id, real_ean) VALUES (?, ?)"; queries["alias_ean_get"] = "SELECT real_ean FROM ean_aliases WHERE id = ?"; queries["alias_ean_list"] = "SELECT id, real_ean FROM ean_aliases ORDER BY id ASC"; + queries["alias_rev_lookup"] = "SELECT id FROM ean_aliases WHERE real_ean = ?"; queries["userid_rfid"] = "SELECT user FROM rfid_users WHERE rfid = ?"; queries["rfid_userid"] = "SELECT rfid FROM rfid_users WHERE user = ?"; queries["rfid_insert"] = "INSERT OR REPLACE INTO rfid_users ('user','rfid') VALUES (?,?)"; @@ -390,6 +391,26 @@ public class DataBase : Object { } } + public uint64[] get_product_aliases(uint64 article) throws DBusError, IOError, DatabaseError { + statements["alias_rev_lookup"].reset(); + statements["alias_rev_lookup"].bind_text(1, "%llu".printf(article)); + uint64[] result = null; + + while (true) { + int rc = statements["alias_rev_lookup"].step(); + + switch(rc) { + case Sqlite.ROW: + result += statements["alias_rev_lookup"].column_int64(0); + break; + case Sqlite.DONE: + return result; + default: + throw new DatabaseError.INTERNAL_ERROR(_("internal error: %d"), rc); + } + } + } + public string get_product_category(uint64 article) throws DBusError, IOError, DatabaseError { statements["product_category"].reset(); statements["product_category"].bind_text(1, "%llu".printf(article)); diff --git a/src/database/db-interface.vala b/src/database/db-interface.vala index 840f0a8..0db9521 100644 --- a/src/database/db-interface.vala +++ b/src/database/db-interface.vala @@ -22,6 +22,7 @@ public interface Database : Object { public abstract RestockEntry[] get_restocks(uint64 product, bool descending) throws DBusError, IOError; public abstract bool buy(int32 user, uint64 article) throws DBusError, IOError, DatabaseError; public abstract string get_product_name(uint64 article) throws DBusError, IOError, DatabaseError; + public abstract uint64[] get_product_aliases(uint64 article) throws DBusError, IOError, DatabaseError; public abstract string get_product_category(uint64 article) throws DBusError, IOError, DatabaseError; public abstract int get_product_amount(uint64 article) throws DBusError, IOError, DatabaseError; public abstract bool get_product_deprecated(uint64 article) throws DBusError, IOError, DatabaseError; diff --git a/src/mail/mail.vala b/src/mail/mail.vala index f6cedc0..b863014 100644 --- a/src/mail/mail.vala +++ b/src/mail/mail.vala @@ -99,8 +99,16 @@ public class MailImplementation { } #endif - public void add_recipient(MailContact contact, GMime.AddressType type) throws DBusError, IOError { - m.add_mailbox(type, contact.name, contact.email); + public void add_recipient(MailContact contact, RecipientType type) throws DBusError, IOError { + GMime.AddressType gmime_type; + + switch(type) { + case RecipientType.BCC: gmime_type = GMime.AddressType.BCC; break; + case RecipientType.CC: gmime_type = GMime.AddressType.CC; break; + default: gmime_type = GMime.AddressType.TO; break; + } + + m.add_mailbox(gmime_type, contact.name, contact.email); recipients += contact.email; } diff --git a/src/meson.build b/src/meson.build index 8f7ed3d..f2ba8c4 100644 --- a/src/meson.build +++ b/src/meson.build @@ -41,7 +41,7 @@ executable('shop-database', ['database/main.vala', 'database/database.vala', 'da executable('shop-input-device', ['input-device/main.vala', 'input-device/input-device.vala', 'input-device/input-device-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep, linux_dep], install: true, install_dir: join_paths(get_option('libexecdir'), 'shopsystem')) executable('shop-invoice', ['invoice/main.vala', 'invoice/invoice.vala', 'mail/mailer-interface.vala', 'pdf-invoice/pdf-invoice-interface.vala', 'database/db-interface.vala', 'config/config-interface.vala', 'price.vapi'], dependencies: [gio_dep], install: true, install_dir: join_paths(get_option('libexecdir'), 'shopsystem')) executable('shop-single-invoice', ['invoice/single.vala', 'invoice/invoice.vala', 'mail/mailer-interface.vala', 'pdf-invoice/pdf-invoice-interface.vala', 'database/db-interface.vala', 'config/config-interface.vala', 'price.vapi'], dependencies: [gio_dep], install: true, install_dir: join_paths(get_option('libexecdir'), 'shopsystem')) -executable('shop-mailer', ['mail/main.vala', 'mail/mailer.vala', 'mail/mail.vala', 'mail/mailer-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep, posix_dep, esmtp_dep, gmime_dep], install: true, install_dir: join_paths(get_option('libexecdir'), 'shopsystem')) +executable('shop-mailer', ['mail/main.vala', 'mail/mailer.vala', 'mail/mail.vala', 'mail/mailer-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep, posix_dep, esmtp_dep, gmime_dep], install: true, install_dir: join_paths(get_option('libexecdir'), 'shopsystem'), c_args: '-D_GNU_SOURCE') executable('shop-pdf-invoice', ['pdf-invoice/main.vala', 'pdf-invoice/pdf-invoice.vala', 'pdf-invoice/pdf-invoice-interface.vala', 'config/config-interface.vala', 'database/db-interface.vala', 'price.vapi'], dependencies: [gio_dep, pangocairo_dep, rsvg_dep, gdk_dep, posix_dep], install: true, install_dir: join_paths(get_option('libexecdir'), 'shopsystem')) executable('shop-test-pdf-invoice', ['pdf-invoice/test.vala', 'pdf-invoice/pdf-invoice-interface.vala', 'database/db-interface.vala', 'price.vapi'], dependencies: [gio_dep, pangocairo_dep, rsvg_dep, gdk_dep, posix_dep], install: true, install_dir: join_paths(get_option('libexecdir'), 'shopsystem')) executable('shop-pdf-stock', ['pdf-stock/main.vala', 'pdf-stock/pdf-stock.vala', 'database/db-interface.vala', 'price.vapi'], dependencies: [gio_dep, pangocairo_dep, cairo_dep, posix_dep], link_with: libcairobarcode, install: true, install_dir: join_paths(get_option('libexecdir'), 'shopsystem')) diff --git a/src/web/web.vala b/src/web/web.vala index 5dcceef..414da5c 100644 --- a/src/web/web.vala +++ b/src/web/web.vala @@ -732,6 +732,13 @@ public class WebServer { /* ean */ t.replace("EAN", "%llu".printf(id)); + /* aliases */ + string aliases = ""; + foreach(var a in db.get_product_aliases(id)) { + aliases += "<li>%llu</li>".printf(a); + } + t.replace("ALIASES", aliases); + /* name */ string name = db.get_product_name(id); t.replace("NAME", name); @@ -1541,30 +1548,25 @@ public class WebServer { } void handler_cashbox_detail_selection(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) { - string[] pathparts = path.split("/"); + try { + string[] pathparts = path.split("/"); - if(pathparts.length > 4) { - DateYear year = (DateYear) int.parse(pathparts[3]); - DateMonth month = (DateMonth) int.parse(pathparts[4]); - handler_cashbox_detail(server, msg, path, query, client, year, month); - } else { - try { - var session = new WebSession(server, msg, path, query, client); - var template = new WebTemplate("cashbox/selection.html", session); - template.replace("TITLE", shortname + " Shop System: Cashbox Detail"); - template.menu_set_active("cashbox"); - msg.set_response("text/html", Soup.MemoryUse.COPY, template.data); - msg.set_status(200); - } catch(TemplateError e) { - stderr.printf(e.message+"\n"); - handler_404(server, msg, path, query, client); - } catch(DatabaseError e) { - handler_400(server, msg, path, query, client, e.message); - } catch(IOError e) { - handler_400(server, msg, path, query, client, e.message); - } catch(DBusError e) { - handler_400(server, msg, path, query, client, e.message); + if(pathparts.length > 4) { + DateYear year = (DateYear) int.parse(pathparts[3]); + DateMonth month = (DateMonth) int.parse(pathparts[4]); + handler_cashbox_detail(server, msg, path, query, client, year, month); + } else { + msg.set_redirect(302, "/cashbox"); } + } catch(TemplateError e) { + stderr.printf(e.message+"\n"); + handler_404(server, msg, path, query, client); + } catch(DatabaseError e) { + handler_400(server, msg, path, query, client, e.message); + } catch(IOError e) { + handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1572,7 +1574,7 @@ public class WebServer { try { var session = new WebSession(server, msg, path, query, client); - if(!session.superuser) { + if(!session.superuser && !session.auth_cashbox) { handler_403(server, msg, path, query, client); return; } |