diff options
Diffstat (limited to 'src/invoice/invoice.vala')
-rw-r--r-- | src/invoice/invoice.vala | 81 |
1 files changed, 63 insertions, 18 deletions
diff --git a/src/invoice/invoice.vala b/src/invoice/invoice.vala index 1e6dd58..e83f4bf 100644 --- a/src/invoice/invoice.vala +++ b/src/invoice/invoice.vala @@ -32,16 +32,29 @@ public class InvoiceImplementation { Database db; PDFInvoice pdf; string datadir; - - public InvoiceImplementation() throws IOError, KeyFileError { + string mailfromaddress; + string treasurermailaddress; + string shortname; + string spacename; + string vat; + string jverein_membership_number; + + public InvoiceImplementation() throws DBusError, IOError, KeyFileError { mailer = Bus.get_proxy_sync(BusType.SYSTEM, "io.mainframe.shopsystem.Mail", "/io/mainframe/shopsystem/mailer"); db = Bus.get_proxy_sync(BusType.SYSTEM, "io.mainframe.shopsystem.Database", "/io/mainframe/shopsystem/database"); pdf = Bus.get_proxy_sync(BusType.SYSTEM, "io.mainframe.shopsystem.InvoicePDF", "/io/mainframe/shopsystem/invoicepdf"); Config cfg = Bus.get_proxy_sync(BusType.SYSTEM, "io.mainframe.shopsystem.Config", "/io/mainframe/shopsystem/config"); - datadir = cfg.get_string("INVOICE", "datadir"); + var datapath = cfg.get_string("GENERAL", "datapath"); + datadir = Path.build_filename(datapath, "invoice"); + mailfromaddress = cfg.get_string("MAIL", "mailfromaddress"); + treasurermailaddress = cfg.get_string("MAIL", "treasurermailaddress"); + shortname = cfg.get_string("GENERAL", "shortname"); + spacename = cfg.get_string("GENERAL", "spacename"); + vat = cfg.get_string("INVOICE", "vat"); + jverein_membership_number = cfg.get_string("JVEREIN", "membership_number"); } - public void send_invoice(bool temporary, int64 timestamp, int user) throws IOError, InvoicePDFError, DatabaseError { + public void send_invoice(bool temporary, int64 timestamp, int user) throws DBusError, IOError, InvoicePDFError, DatabaseError { int64 prevtimestamp = timestamp - day_in_seconds; if(!temporary) @@ -67,9 +80,9 @@ public class InvoiceImplementation { string treasurer_path = mailer.create_mail(); Mail treasurer_mail = Bus.get_proxy_sync(BusType.SYSTEM, "io.mainframe.shopsystem.Mail", treasurer_path); - treasurer_mail.from = {"KtT Shopsystem", "shop@kreativitaet-trifft-technik.de"}; + treasurer_mail.from = {shortname + " Shopsystem", mailfromaddress}; treasurer_mail.subject = mailtitle; - treasurer_mail.add_recipient({"Schatzmeister", "shop-einzug@kreativitaet-trifft-technik.de"}, RecipientType.TO); + treasurer_mail.add_recipient({"Schatzmeister", treasurermailaddress}, RecipientType.TO); var csvinvoicedata = ""; foreach(var userid in users) { @@ -82,7 +95,7 @@ public class InvoiceImplementation { var invoicedata = generate_invoice(temporary, timestamp, userid, invoiceid); string mail_path = mailer.create_mail(); Mail mail = Bus.get_proxy_sync(BusType.SYSTEM, "io.mainframe.shopsystem.Mail", mail_path); - mail.from = {"KtT Shopsystem", "shop@kreativitaet-trifft-technik.de"}; + mail.from = {shortname + " Shopsystem", mailfromaddress}; mail.subject = mailtitle; mail.add_recipient({@"$(userdata.firstname) $(userdata.lastname)", userdata.email}, RecipientType.TO); @@ -109,11 +122,15 @@ public class InvoiceImplementation { } } - public void send_invoices(bool temporary, int64 timestamp) throws IOError, InvoicePDFError, DatabaseError { + public void send_invoices(bool temporary, int64 timestamp) throws DBusError, IOError, InvoicePDFError, DatabaseError { int64 prevtimestamp = timestamp - day_in_seconds; + string due_date_string = ""; - if(!temporary) + if(!temporary) { prevtimestamp = new DateTime.from_unix_local(timestamp).add_months(-1).to_unix(); + var due_date = new DateTime.from_unix_local(timestamp).add_days(10); + due_date_string = due_date.format("%d.%m.%Y"); + } Timespan ts = get_timespan(temporary, prevtimestamp); Timespan tst = get_timespan(false, prevtimestamp); @@ -135,10 +152,17 @@ public class InvoiceImplementation { string treasurer_path = mailer.create_mail(); Mail treasurer_mail = Bus.get_proxy_sync(BusType.SYSTEM, "io.mainframe.shopsystem.Mail", treasurer_path); - treasurer_mail.from = {"KtT Shopsystem", "shop@kreativitaet-trifft-technik.de"}; + treasurer_mail.from = {shortname + " Shopsystem", mailfromaddress}; treasurer_mail.subject = mailtitle; - treasurer_mail.add_recipient({"Schatzmeister", "shop-einzug@kreativitaet-trifft-technik.de"}, RecipientType.TO); + treasurer_mail.add_recipient({"Schatzmeister", treasurermailaddress}, RecipientType.TO); var csvinvoicedata = ""; + var csvjvereininvoicedata = ""; + if(jverein_membership_number == "extern") { + csvjvereininvoicedata = "Ext_Mitglieds_Nr;Betrag;Buchungstext;Fälligkeit;Intervall;Endedatum"; + } + else { + csvjvereininvoicedata = "Mitglieds_Nr;Betrag;Buchungstext;Fälligkeit;Intervall;Endedatum"; + } foreach(var userid in users) { number++; @@ -149,7 +173,7 @@ public class InvoiceImplementation { string mail_path = mailer.create_mail(); Mail mail = Bus.get_proxy_sync(BusType.SYSTEM, "io.mainframe.shopsystem.Mail", mail_path); - mail.from = {"KtT Shopsystem", "shop@kreativitaet-trifft-technik.de"}; + mail.from = {shortname + " Shopsystem", mailfromaddress}; mail.subject = mailtitle; mail.add_recipient({@"$(userdata.firstname) $(userdata.lastname)", userdata.email}, RecipientType.TO); @@ -165,17 +189,19 @@ public class InvoiceImplementation { if(!temporary) { treasurer_mail.add_attachment(invoicedata.pdffilename, "application/pdf", invoicedata.pdfdata); csvinvoicedata += @"$(userdata.id),$(userdata.lastname),$(userdata.firstname),$invoiceid,$total_sum\n"; + csvjvereininvoicedata += @"$(userdata.id);$total_sum;Shopsystem Rechnung Nummer $invoiceid;$due_date_string;0;$due_date_string\n"; } } if(!temporary) { treasurer_mail.set_main_part(get_treasurer_text(), MessageType.PLAIN); treasurer_mail.add_attachment("invoice.csv", "text/csv; charset=utf-8", csvinvoicedata.data); + treasurer_mail.add_attachment("jvereininvoice.csv", "text/csv; charset=utf-8", csvjvereininvoicedata.data); mailer.send_mail(treasurer_path); } } - public InvoiceData generate_invoice(bool temporary, int64 timestamp, int userid, string invoiceid) throws IOError, InvoicePDFError, DatabaseError { + public InvoiceData generate_invoice(bool temporary, int64 timestamp, int userid, string invoiceid) throws DBusError, IOError, InvoicePDFError, DatabaseError { int64 prevtimestamp = timestamp - day_in_seconds; if(!temporary) prevtimestamp = new DateTime.from_unix_local(timestamp).add_months(-1).to_unix(); @@ -222,11 +248,13 @@ public class InvoiceImplementation { string text; try { - FileUtils.get_contents(datadir + "/treasurer.mail.txt", out text); + FileUtils.get_contents(Path.build_filename(datadir, "/treasurer.mail.txt"), out text); } catch(GLib.FileError e) { - throw new IOError.FAILED("Could not open invoice template: %s", e.message); + throw new IOError.FAILED(_("Could not open invoice template: %s"), e.message); } + text = text.replace("{{{SHORTNAME}}}", shortname); + return text; } @@ -284,19 +312,36 @@ public class InvoiceImplementation { table = generate_invoice_table_html(entries); if(filename == "") - throw new IOError.FAILED("Unknown MessageType"); + throw new IOError.FAILED(_("Unknown MessageType")); try { - FileUtils.get_contents(datadir + "/" + filename, out text); + FileUtils.get_contents(Path.build_filename(datadir, filename), out text); } catch(GLib.FileError e) { - throw new IOError.FAILED("Could not open invoice template: %s", e.message); + throw new IOError.FAILED(_("Could not open invoice template: %s"), e.message); } text = text.replace("{{{ADDRESS}}}", address); text = text.replace("{{{LASTNAME}}}", name); + text = text.replace("{{{SPACENAME}}}", spacename); text = text.replace("{{{INVOICE_TABLE}}}", table); text = text.replace("{{{SUM_MONTH}}}", "%d,%02d".printf(total_sum / 100, total_sum % 100)); + if(vat == "yes") { + text = text.replace("{{{VAT}}}", ""); + } else { + string vattext; + string vattextfilename; + vattextfilename = (type == MessageType.HTML) ? "vat.html" : "vat.txt"; + + try { + FileUtils.get_contents(Path.build_filename(datadir, vattextfilename), out vattext); + } catch(GLib.FileError e) { + throw new IOError.FAILED(_("Could not open VAT template: %s"), e.message); + } + + text = text.replace("{{{VAT}}}", vattext); + } + return text; } |