diff --git a/src/de/jost_net/JVerein/gui/action/FreieFormulareAction.java b/src/de/jost_net/JVerein/gui/action/FreieFormulareAction.java new file mode 100644 index 000000000..238aed4d5 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/action/FreieFormulareAction.java @@ -0,0 +1,14 @@ +package de.jost_net.JVerein.gui.action; + +import de.jost_net.JVerein.gui.view.FreieFormulareView; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.GUI; + +public class FreieFormulareAction implements Action { + + @Override + public void handleAction(Object context) + { + GUI.startView(FreieFormulareView.class.getName(), null); + } +} diff --git a/src/de/jost_net/JVerein/gui/action/MailVorlageZuweisenAction.java b/src/de/jost_net/JVerein/gui/action/MailVorlageZuweisenAction.java index 696cb177d..0f081467d 100644 --- a/src/de/jost_net/JVerein/gui/action/MailVorlageZuweisenAction.java +++ b/src/de/jost_net/JVerein/gui/action/MailVorlageZuweisenAction.java @@ -20,6 +20,7 @@ import de.jost_net.JVerein.gui.control.MitgliedskontoControl; import de.jost_net.JVerein.gui.control.SpendenbescheinigungControl; import de.jost_net.JVerein.gui.control.PreNotificationControl; +import de.jost_net.JVerein.gui.control.FreieFormulareControl; import de.jost_net.JVerein.gui.control.MailControl; import de.jost_net.JVerein.gui.dialogs.MailVorlagenAuswahlDialog; import de.jost_net.JVerein.rmi.MailVorlage; @@ -41,7 +42,8 @@ public void handleAction(Object context) throws ApplicationException (context instanceof MitgliedskontoControl || context instanceof SpendenbescheinigungControl || context instanceof PreNotificationControl || - context instanceof MailControl)) + context instanceof MailControl || + context instanceof FreieFormulareControl)) { MailVorlagenAuswahlDialog mvad = new MailVorlagenAuswahlDialog( new MailVorlageControl(null), @@ -74,6 +76,12 @@ else if (context instanceof MailControl) kto.getBetreff().setValue(mv.getBetreff()); kto.getTxt().setValue(mv.getTxt()); } + else if (context instanceof FreieFormulareControl) + { + FreieFormulareControl kto = (FreieFormulareControl) context; + kto.getBetreff().setValue(mv.getBetreff()); + kto.getTxt().setValue(mv.getTxt()); + } } } else diff --git a/src/de/jost_net/JVerein/gui/control/FreieFormulareControl.java b/src/de/jost_net/JVerein/gui/control/FreieFormulareControl.java new file mode 100644 index 000000000..c7e6ec8a5 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/control/FreieFormulareControl.java @@ -0,0 +1,131 @@ +package de.jost_net.JVerein.gui.control; + +import java.io.IOException; +import java.rmi.RemoteException; +import de.jost_net.JVerein.gui.input.FormularInput; +import de.jost_net.JVerein.io.FreiesFormularAusgabe; +import de.jost_net.JVerein.keys.Ausgabeart; +import de.jost_net.JVerein.keys.FormularArt; +import de.willuhn.jameica.gui.AbstractView; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.input.Input; +import de.willuhn.jameica.gui.input.SelectInput; +import de.willuhn.jameica.gui.input.TextAreaInput; +import de.willuhn.jameica.gui.input.TextInput; +import de.willuhn.jameica.gui.parts.Button; +import de.willuhn.logging.Logger; + +public class FreieFormulareControl extends FilterControl +{ + + private FormularInput formular = null; + + private TextInput betreff = null; + + private TextAreaInput txt = null; + + private SelectInput ausgabeart = null; + + public FreieFormulareControl(AbstractView view) + { + super(view); + settings = new de.willuhn.jameica.system.Settings(this.getClass()); + settings.setStoreWhenRead(true); + } + + public FormularInput getFormular(FormularArt frei) throws RemoteException + { + if (formular != null) + { + return formular; + } + formular = new FormularInput(frei); + return formular; + } + + public Input getAusgabeart() + { + if (ausgabeart != null) + { + return ausgabeart; + } + ausgabeart = new SelectInput(Ausgabeart.values(), Ausgabeart + .valueOf(settings.getString(settingsprefix + "ausgabeart", "DRUCK"))); + ausgabeart.setName("Ausgabe"); + return ausgabeart; + } + + public TextInput getBetreff() + { + if (betreff != null) + { + return betreff; + } + betreff = new TextInput( + settings.getString(settingsprefix + "mail.betreff", ""), 100); + betreff.setName("Betreff"); + return betreff; + } + + public TextAreaInput getTxt() + { + if (txt != null) + { + return txt; + } + txt = new TextAreaInput( + settings.getString(settingsprefix + "mail.text", ""), 10000); + txt.setName("Text"); + return txt; + } + + private void saveSettings() throws RemoteException + { + if (ausgabeart != null ) + { + Ausgabeart aa = (Ausgabeart) getAusgabeart().getValue(); + settings.setAttribute(settingsprefix + "ausgabeart", aa.toString()); + } + if (betreff != null) + { + settings.setAttribute(settingsprefix + "mail.betreff", + (String) getBetreff().getValue()); + } + if (txt != null) + { + settings.setAttribute(settingsprefix + "mail.text", + (String) getTxt().getValue()); + } + } + + public Button getStartFreieFormulareButton(Object currentObject, + FreieFormulareControl control) + { + Button button = new Button("Starten", new Action() + { + + @Override + public void handleAction(Object context) + { + try + { + generiereFreieFormulare(context); + } + catch (Exception e) + { + Logger.error("", e); + GUI.getStatusBar().setErrorText(e.getMessage()); + } + } + }, null, true, "walking.png"); + return button; + } + + private void generiereFreieFormulare(Object currentObject) throws IOException + { + saveFilterSettings(); + saveSettings(); + new FreiesFormularAusgabe(this); + } +} diff --git a/src/de/jost_net/JVerein/gui/navigation/MyExtension.java b/src/de/jost_net/JVerein/gui/navigation/MyExtension.java index d7c374c60..f744a82d9 100644 --- a/src/de/jost_net/JVerein/gui/navigation/MyExtension.java +++ b/src/de/jost_net/JVerein/gui/navigation/MyExtension.java @@ -55,6 +55,7 @@ import de.jost_net.JVerein.gui.action.FamilienbeitragAction; import de.jost_net.JVerein.gui.action.FelddefinitionenAction; import de.jost_net.JVerein.gui.action.FormularListeAction; +import de.jost_net.JVerein.gui.action.FreieFormulareAction; import de.jost_net.JVerein.gui.action.JahresabschlussListAction; import de.jost_net.JVerein.gui.action.KontensaldoAction; import de.jost_net.JVerein.gui.action.JubilaeenAction; @@ -140,6 +141,8 @@ public void extend(Extendable extendable) new MitgliedskontoMahnungAction(), "document-print.png")); mitglieder.addChild(new MyItem(mitglieder, "Kontoauszüge", new KontoauszugAction(), "document-print.png")); + mitglieder.addChild(new MyItem(mitglieder, "Freie Formulare", + new FreieFormulareAction(), "document-print.png")); mitglieder.addChild(new MyItem(mitglieder, "Spendenbescheinigungen", new SpendenbescheinigungSendAction(), "document-print.png")); diff --git a/src/de/jost_net/JVerein/gui/view/DokumentationUtil.java b/src/de/jost_net/JVerein/gui/view/DokumentationUtil.java index 84cc8969b..88370b0d2 100644 --- a/src/de/jost_net/JVerein/gui/view/DokumentationUtil.java +++ b/src/de/jost_net/JVerein/gui/view/DokumentationUtil.java @@ -54,6 +54,8 @@ public class DokumentationUtil public static final String LEHRGANG = PRE + FUNKTIONEN + MITGLIEDER + "lehrgange"; + public static final String FREIESFORMULAR = PRE + FUNKTIONEN + DRUCKMAIL + "freiesformular"; + public static final String MITGLIEDSUCHE = PRE + FUNKTIONEN + MITGLIEDER + "content/mitglieder"; public static final String MITGLIED = PRE + FUNKTIONEN + MITGLIEDER + "content/grunddaten"; @@ -79,7 +81,7 @@ public class DokumentationUtil + "zusatzbetrage-importieren"; - // Buchführung + // Buchführung public static final String ANFANGSBESTAENDE = PRE + FUNKTIONEN + BUCHF + "anfangsbestand"; public static final String BUCHUNGEN = PRE + FUNKTIONEN + BUCHF + "buchungen"; @@ -169,7 +171,7 @@ public class DokumentationUtil public static final String ADRESSTYPEN = PRE + FUNKTIONEN + ADMIN + ADMMITGLIEDER + "mitgliedstypen"; - // Einstellungen Buchführung + // Einstellungen Buchführung public static final String BUCHUNGSART = PRE + FUNKTIONEN + ADMIN + ADMBUCHF + "buchungsart.html"; public static final String BUCHUNGSKLASSEN = PRE + FUNKTIONEN + ADMIN + ADMBUCHF + "buchungsklasse"; diff --git a/src/de/jost_net/JVerein/gui/view/FreieFormulareView.java b/src/de/jost_net/JVerein/gui/view/FreieFormulareView.java new file mode 100644 index 000000000..f292b6bcc --- /dev/null +++ b/src/de/jost_net/JVerein/gui/view/FreieFormulareView.java @@ -0,0 +1,73 @@ +package de.jost_net.JVerein.gui.view; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.action.DokumentationAction; +import de.jost_net.JVerein.gui.action.MailVorlageZuweisenAction; +import de.jost_net.JVerein.gui.control.FreieFormulareControl; +import de.jost_net.JVerein.keys.FormularArt; +import de.jost_net.JVerein.gui.control.FilterControl.Mitgliedstyp; +import de.willuhn.jameica.gui.AbstractView; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.parts.Button; +import de.willuhn.jameica.gui.parts.ButtonArea; +import de.willuhn.jameica.gui.util.ColumnLayout; +import de.willuhn.jameica.gui.util.LabelGroup; +import de.willuhn.jameica.gui.util.SimpleContainer; + +public class FreieFormulareView extends AbstractView +{ + + @Override + public void bind() throws Exception + { + GUI.getView().setTitle("Freie Formulare"); + + final FreieFormulareControl control = new FreieFormulareControl(this); + control.init("freieformulare.","zusatzfeld.", "zusatzfelder."); + + LabelGroup group = new LabelGroup(getParent(), "Filter"); + + ColumnLayout cl = new ColumnLayout(group.getComposite(), 3); + SimpleContainer left = new SimpleContainer(cl.getComposite()); + left.addInput(control.getSuchAdresstyp(Mitgliedstyp.ALLE)); + left.addInput(control.getMitgliedStatus()); + left.addInput(control.getBeitragsgruppeAusw()); + left.addInput(control.getMailauswahl()); + + SimpleContainer mid = new SimpleContainer(cl.getComposite()); + mid.addInput(control.getSuchname()); + mid.addInput(control.getGeburtsdatumvon()); + mid.addInput(control.getGeburtsdatumbis()); + mid.addInput(control.getSuchGeschlecht()); + + SimpleContainer right = new SimpleContainer(cl.getComposite()); + right.addInput(control.getEigenschaftenAuswahl()); + right.addInput(control.getStichtag()); + if (Einstellungen.getEinstellung().hasZusatzfelder()) + right.addInput(control.getZusatzfelderAuswahl()); + + SimpleContainer cont = new SimpleContainer(getParent(), true); + cont.addHeadline("Parameter"); + cont.addLabelPair("Formular", + control.getFormular(FormularArt.FREIESFORMULAR)); + cont.addInput(control.getAusgabeart()); + + cont.addHeadline("Mail"); + cont.addInput(control.getBetreff()); + cont.addLabelPair("Text", control.getTxt()); + + ButtonArea fbuttons = new ButtonArea(); + fbuttons.addButton(control.getResetButton()); + fbuttons.addButton(control.getSpeichernButton()); + group.addButtonArea(fbuttons); + + ButtonArea buttons = new ButtonArea(); + buttons.addButton("Hilfe", new DokumentationAction(), + DokumentationUtil.FREIESFORMULAR, false, "question-circle.png"); + buttons.addButton(new Button("Mail-Vorlage", + new MailVorlageZuweisenAction(), control, false, "view-refresh.png")); + buttons.addButton( + control.getStartFreieFormulareButton(this.getCurrentObject(), control)); + buttons.paint(this.getParent()); + } +} diff --git a/src/de/jost_net/JVerein/io/FreiesFormularAusgabe.java b/src/de/jost_net/JVerein/io/FreiesFormularAusgabe.java new file mode 100644 index 000000000..7ebd5d198 --- /dev/null +++ b/src/de/jost_net/JVerein/io/FreiesFormularAusgabe.java @@ -0,0 +1,180 @@ +package de.jost_net.JVerein.io; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.rmi.RemoteException; +import java.util.ArrayList; +import java.util.Date; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.FileDialog; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.Queries.MitgliedQuery; +import de.jost_net.JVerein.Variable.AllgemeineMap; +import de.jost_net.JVerein.Variable.MitgliedMap; +import de.jost_net.JVerein.gui.control.FilterControl.Mitgliedstyp; +import de.jost_net.JVerein.gui.control.FreieFormulareControl; +import de.jost_net.JVerein.keys.Ausgabeart; +import de.jost_net.JVerein.keys.FormularArt; +import de.jost_net.JVerein.rmi.Adresstyp; +import de.jost_net.JVerein.rmi.Formular; +import de.jost_net.JVerein.rmi.Mitglied; +import de.jost_net.JVerein.util.Dateiname; +import de.jost_net.JVerein.util.JVDateFormatJJJJMMTT; +import de.jost_net.JVerein.util.StringTool; +import de.willuhn.jameica.gui.GUI; + +public class FreiesFormularAusgabe +{ + FreieFormulareControl control; + + File file = null; + + FormularAufbereitung formularaufbereitung = null; + + ZipOutputStream zos = null; + + public FreiesFormularAusgabe(FreieFormulareControl control) throws IOException + { + this.control = control; + Formular formular = (Formular) control + .getFormular(FormularArt.FREIESFORMULAR).getValue(); + if(formular == null) + { + GUI.getStatusBar().setErrorText("Kein Formular ausgewählt."); + return; + } + + switch ((Ausgabeart) control.getAusgabeart().getValue()) + { + case DRUCK: + file = getDateiAuswahl("pdf", formular.getBezeichnung()); + formularaufbereitung = new FormularAufbereitung(file); + break; + case EMAIL: + file = getDateiAuswahl("zip", formular.getBezeichnung()); + zos = new ZipOutputStream(new FileOutputStream(file)); + break; + } + Adresstyp adresstype = (Adresstyp) control.getSuchAdresstyp(Mitgliedstyp.ALLE) + .getValue(); + int type = -1; + if (adresstype != null) + type = Integer.parseInt(adresstype.getID()); + ArrayList mitglieder = new MitgliedQuery(control).get(type, null); + + if (mitglieder.size() == 0) + { + GUI.getStatusBar().setErrorText("Keine passenden Mitglieder gefunden."); + file.delete(); + return; + } + aufbereitung(formular, mitglieder); + } + + public void aufbereitung(Formular formular, ArrayList mitglieder) + throws IOException + { + for (Mitglied m : mitglieder) + { + switch ((Ausgabeart) control.getAusgabeart().getValue()) + { + case DRUCK: + aufbereitenFormular(m, formularaufbereitung, formular); + break; + case EMAIL: + if (m.getEmail() == null || m.getEmail().isEmpty()) + { + continue; + } + File f = File.createTempFile(getDateiname(m), ".pdf"); + formularaufbereitung = new FormularAufbereitung(f); + aufbereitenFormular(m, formularaufbereitung, formular); + formularaufbereitung.closeFormular(); + zos.putNextEntry(new ZipEntry(getDateiname(m) + ".pdf")); + FileInputStream in = new FileInputStream(f); + // buffer size + byte[] b = new byte[1024]; + int count; + while ((count = in.read(b)) > 0) + { + zos.write(b, 0, count); + } + in.close(); + break; + } + } + switch ((Ausgabeart) control.getAusgabeart().getValue()) + { + case DRUCK: + formularaufbereitung.showFormular(); + break; + case EMAIL: + zos.close(); + new ZipMailer(file, (String) control.getBetreff().getValue(), + (String) control.getTxt().getValue(), + formular.getBezeichnung() + ".pdf"); + break; + } + + } + + File getDateiAuswahl(String extension, String name) throws RemoteException + { + FileDialog fd = new FileDialog(GUI.getShell(), SWT.SAVE); + fd.setText("Ausgabedatei wählen."); + String path = control.getSettings().getString("lastdir", + System.getProperty("user.home")); + if (path != null && path.length() > 0) + { + fd.setFilterPath(path); + } + fd.setFileName(new Dateiname(name, "", + Einstellungen.getEinstellung().getDateinamenmuster(), extension).get()); + fd.setFilterExtensions(new String[] { "*." + extension }); + + String s = fd.open(); + if (s == null || s.length() == 0) + { + return null; + } + if (!s.toLowerCase().endsWith("." + extension)) + { + s = s + "." + extension; + } + final File file = new File(s); + control.getSettings().setAttribute("lastdir", file.getParent()); + return file; + } + + void aufbereitenFormular(Mitglied m, FormularAufbereitung fa, Formular fo) + throws RemoteException + { + Map map = new MitgliedMap().getMap(m, null); + map = new AllgemeineMap().getMap(map); + fa.writeForm(fo, map); + } + + String getDateiname(Mitglied m) throws RemoteException + { + String filename = m.getID() + "#" + + new JVDateFormatJJJJMMTT().format(new Date()) + "#"; + String email = StringTool.toNotNullString(m.getEmail()); + if (email.length() > 0) + { + filename += email; + } + else + { + filename += m.getName() + m.getVorname(); + } + return filename; + } + +}