GithubHelp home page GithubHelp logo

yannikschaelte / miniplaner Goto Github PK

View Code? Open in Web Editor NEW
5.0 5.0 2.0 23.7 MB

Software zum automatischen Erstellen von Messdienerplänen.

Home Page: https://yannikschaelte.github.io/MiniPlaner

License: GNU Lesser General Public License v3.0

PHP 1.40% HTML 1.93% C++ 90.34% TeX 4.99% Inno Setup 0.62% Meson 0.73%

miniplaner's People

Contributors

mkroening avatar yannikschaelte avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

miniplaner's Issues

Custom colors look inconsistent

The program uses custom colors (hand-picked for windows) for several elements rendering the look and feel very inconsistent with the Adwaita theme:
Screenshot from 2020-04-25 19-59-56

It's even worse with the Adwaita dark theme:
Screenshot from 2020-04-25 20-17-16

It worked well removing the custom colors on some of them but I'll have to find all of them and verify that there are no regressions on Windows.

Termin: Feld für Zelebrant

Momentan tragen wir den Pfarrer in das Feld für den Ort ein, es wäre sinnvoll, ein dafür ausgelegtes Feld zu haben.

Mini-Daten: Eintrittsdatum

Eintrittsdatum als zusätzliches Feld der Messdienerdaten wäre gut. (Z.B. um Erfahrung einschätzen zu können, oder um Jubilare zu ehren.)

Speicherort der Anwendung

Die Möglichkeit geben, dass die benötigten Daten nicht zwangsläufig im Installationsverzeichnis gespeichert werden, sondern dass der Speicherort frei gewählt werden kann.

Termin: Feld für Dauer

Unterschiedliche Gottesdienste dauern verschieden lang (Hochfest, Osternacht,...)
Das Feld gibt die Möglichkeit, dies abzubilden.

Use absolute paths for persistence

Using relative paths for configuration is a problem when installing the application, which is the goal when creating packages. If one calls the binary from different folders, different configurations are being used. This can be reproduced on Windows via the command line as well.

I think, we should aim for using the operating systems respective config path, if no configuration is present in the current directory (for backwards compatibility). There are config and data locations for applications available: soc/directories-jvm#basedirectories

Documentation

At least consistently add module, class, function docstrings.

Windows: can't load plans from file

On Linux everything works fine, but on Windows when opening a plan, the following messages appear:

11:02:56: can't open file '/2015-11-01_2016-01-01/dienste.dat' (error 3: the system cannot find the path specified.)
11:02:56: can't open file '/2015-11-01_2016-01-01/minis.dat' (error 3: the system cannot find the path specified.)
11:02:56: can't open file '/2015-11-01_2016-01-01/mgruppen.dat' (error 3: the system cannot find the path specified.)
11:02:56: can't open file '/2015-11-01_2016-01-01/fehlzeiten.dat' (error 3: the system cannot find the path specified.)
11:02:56: can't open file '/2015-11-01_2016-01-01/settings.dat' (error 3: the system cannot find the path specified.)
11:02:56: can't open file '/2015-11-01_2016-01-01/termine.dat' (error 3: the system cannot find the path specified.)

Deployment

Document steps needed for deployment (e.g. version update, distributable creation).

In addition, automatic deployment e.g. via travis or github actions might be of interest.

Messdiener: Feld ob Zettel/keine Zettel

Wir drucken über die in MiniPlaner verwaltete Liste viele Zettel (Anmeldungen, Informationen, etc.) Einige würden es aber vorziehen nur E-Mails zu erhalten. Dies würde dies ermöglichen:

Feld einführen, ob ein Messdiener Informationen und den Messdienerplan nur per E-Mail erhalten möchte (am besten einfach einen Boolean true/false), sodass (über Issue #19) Zettel dann wirklich auch nur für Leute gedruckt werden, die welche haben möchten.

Fehlzeiten per Kalendereingabe

Derzeit nur Textfeld implementiert (mit Hilfen). Eine gute Alternative wäre eine Eingabe über ein Kalender-Popup (ggf. direkt mit Zeitraum-Option, z.B. für Urlaub).

My current general issues with MiniPlaner

Hi guys,

I would like to use this to explain some of the problems I am currently having with the project. Please do not consider this to be any kind of attack or something, it's just my honest opinion...

  1. Used Language
    I have only a very very rough understanding of C++ and my attempts to understand it have been only moderately successful so far.
    I'm writing an exam in/about Java in a few weeks and I'm just confusing myself with C++ right now.
    This is most definately a personal issue of mine and in itself no big problem.

  2. GUI
    The graphical user interface: I'm honestly not a big fan of the standard elements used by WxWidgets . WxWidgets is old and confusing in my eyes. It doesn't allow (at least for me) to design the software the way I would like to use it: modern, lean and clear. Nevertheless, I am aware of what the purpose of this is.

  3. "Legacy issues"
    I really thank Yannick for all that MiniPlaner can do. Nevertheless, there are some corners that are not round and which in my opinion can still take some work. See especially 4). Again, on its own no big deal. But to implement new functions and to stay compatible to old datasets appears difficult to me.

  4. Multiple users
    In my community, many (about 20) people would need to have regular access to the software so that we can use it widely and effectively. And this is only from the servers. I almost think it would be better to have a holistic solution for everyone: The parish office creates an appointment and automatically schedules pastor, organist, lector, sacristan, communion helper and servers. Or is that too far-fetched?

What my plan is? My big idea? No clue! While jogging a few days ago I actually thought about whether it wouldn't be more sensible to write a kind of "MiniPlaner" 2.0 in Java or even web-based. Or the existing project would have to be radically overhauled over time. Because, once again, the individual problems could be solved by us...

I know that you have invested a lot of your time and heart and soul in the last few weeks here and I would be happy to hear your honest opinion!

Change set develop as default branch

Since develop is the branch reflects a state with the latest delivered development changes, it should be the default branch. That way it is the default target for comparisons and Pull requests.

It is done this way in nvie/gitflow, which should be a good reference in this regard.

What do you think?

Einsätze über das Jahr kalkulieren

Einsätze über das Jahr kalkulieren statt nur pro Plan.
Folgende Vorteile:
-Fairere Verteilung der Aufgaben über das Jahr hinweg (z.B. wenn jemand 6 Wochen im Sommerurlaub war, würde das dann im restlichen Jahr ausgeglichen werden)
-Ausgabe: "Wer hat am häufigsten gedient?"

Tidy up build process

  • Build on Windows and Linux
  • Rewrite Makefile (or use alternative build) to be independent of system specifics
  • Add Install.md
  • Support latest wxWidgets

Set up CI

I'll try to set up CI via GitHub actions now that #6 is merged.

Filtern in Listen

Besonders in der Ansicht "Minis".
Filtern nach "älter als n Jahre alt", "jünger als n", Wohnort, Dienste
Export in der dann gegebenen Reihenfolge.

Saving plans fails on assertion

When saving plans, the following error message pops up, unable to progress any further:

ASSERT INFO:
/usr/include/wx-3.0/wx/strvararg.h(456): assert "(argtype & (wxFormatStringSpecifier<T>::value)) == argtype" failed in wxArgNormalizer(): format specifier doesn't match argument type

BACKTRACE:
[1] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[2] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[3] wxEvtHandler::TryHereOnly(wxEvent&)
[4] wxEvtHandler::ProcessEventLocally(wxEvent&)
[5] wxEvtHandler::ProcessEvent(wxEvent&)
[6] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[7] wxWindowBase::Close(bool)
[8] g_closure_invoke
[9] g_signal_emit_valist
[10] g_signal_emit
[11] gtk_main_do_event
[12] g_main_context_dispatch
[13] g_main_loop_run
[14] gtk_main
[15] wxGUIEventLoop::DoRun()
[16] wxEventLoopBase::Run()
[17] wxAppConsoleBase::MainLoop()
[18] wxEntry(int&, wchar_t**)
[19] __libc_start_main

Softcode AboutPanel

Currently, all properties shown in the "About" panel are hard coded like this:

sizer_2->Add(new wxStaticText(this, R::ID_ANY, wxT("mingw32 4.8.1-4")), 0, wxALL, 2);
sizer_2->Add(new wxStaticText(this, R::ID_ANY, R::BIBLIOTHEKEN), 0, wxALL, 2);
sizer_2->Add(new wxStaticText(this, R::ID_ANY, wxT("wxWidgets 3.0.2 (unicode, static)")), 0, wxALL, 2);

I am going to have a look at soft coding those entries once we have a working build system in place.

Kommentarfeld am Ende des Plans

Hallo @yannikschaelte , ich weiß, dass du momentan nicht weiter entwickelst, habe aber trotzdem noch Ideen, die ich hier anbringen will, damit sie nicht verloren gehen für den Fall, dass vlt. in Zukunft doch an diesem Wunderbaren Tool weitergearbeitet wird :)

Meine Idee:
Unterhalb des Plans wird ein Feld auf voller Breite eingefügt, in welchem Informationen und Kommentare wie z.B. Gruppenstunden, Jugendgottesdienste oder Helfereinsätze bei Festen vermerkt werden können.
Zur Zeit füge ich das immer händisch in Excel hinzu.
Plan

[GTK3] assertion failed: invalid window

When pressing certain buttons (e.g. Plans) in the main window, the assertion in wxWidgets/window.cpp#L2857 fails:

ASSERT INFO:
./src/gtk/window.cpp(2857): assert "m_widget" failed in DoSetSize(): invalid window

BACKTRACE:
[1] wxWindow::DoSetSize(int, int, int, int, int)
[2] wxBoxSizer::RecalcSizes()
[3] wxSizer::Layout()
[4] wxSizerItem::SetDimension(wxPoint const&, wxSize const&)
[5] wxBoxSizer::RecalcSizes()
[6] wxSizer::Layout()
[7] wxWindowBase::Layout()
[8] wxWindowBase::InternalOnSize(wxSizeEvent&)
[9] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[10] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[11] wxEvtHandler::TryHereOnly(wxEvent&)
[12] wxEvtHandler::ProcessEventLocally(wxEvent&)
[13] wxEvtHandler::ProcessEvent(wxEvent&)
[14] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[15] wxWindow::DoSetSize(int, int, int, int, int)
[16] wxBoxSizer::RecalcSizes()
[17] wxSizer::Layout()
[18] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[19] wxEvtHandler::SearchDynamicEventTable(wxEvent&)
[20] wxEvtHandler::TryHereOnly(wxEvent&)
[21] wxEvtHandler::ProcessEventLocally(wxEvent&)
[22] wxEvtHandler::ProcessEvent(wxEvent&)
[23] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[24] g_closure_invoke
[25] g_signal_emit_valist
[26] g_signal_emit
[27] gtk_main_do_event
[28] g_main_context_dispatch
[29] g_main_loop_run
[30] gtk_main
[31] wxGUIEventLoop::DoRun()
[32] wxEventLoopBase::Run()
[33] wxAppConsoleBase::MainLoop()
[34] wxEntry(int&, wchar_t**)
[35] __libc_start_main

This project's code is not to be found in the back trace, so we might need to play around with the configuration of the window object to resolve this issue.

ICS-Einladung für Gottesdienste

ICS-Einladung für Gottesdienste per Mail an die jewils eingeteilte Messdiener senden.
Benötigt den E-Mail-Versand (wird in #16 impliziert) sowie #24 (um den Endpunkt des Termins festzulegen).
Bei Planänderungen nach Absenden der Einladung sollte eine Korrektur der Einladung folgen.

Sortieren in Listen

Besonders in der Ansicht "Minis".
Sortieren nach Alter, Geburtstag (wirklich der Tag, nicht das Jahr -> für Geburtstagsgeschenke), Geburtsjahr, Name und Vorname.
Export in der dann gegebenen Reihenfolge.

Weiteres Feld bei Minis: Reihenfolge

Frei vergebbare Nummer, um z.B. eine Ausgabe aller Minis nach/entlang einer Route im Ort zum Austragen von Informationszetteln u.Ä. zu ermöglichen.
Macht aber nur in Kombination mit #18 Sinn.

Plan per E-Mail versenden

Aus MiniPlaner über einen Button den Plan direkt als Anhang an einer E-Mail an die sowieso schon in MiniPlaner verwalteten E-Mail-Adressen senden. Dafür wäre die PDF-Funktion aus #15 notwendige Grundlage.
Duplikate E-Mail-Adressen (z.B. Geschwister) vorher filtern, sodass die Mails nicht mehrfach ankommen.

Gewähltes Layout im Plan speichern

Gewähltes Layout (z.B. ob kommasepariert oder in Spalten, Anzahl der Spalten, ...) im Plan speichern, sodass bei erneuten Planaufruf dieses Layout wieder geladen wird.

Plan als PDF ausgeben

Momentan gebe ich den Plan als .csv aus, öffne ihn in Excel, füge die Kommentare an (siehe #14 ) und gebe dann als PDF aus.
Es wäre super, wenn das alles innerhalb von MiniPlaner geschehen könnte.

Logo auf den Plan drucken

Ich führe mich hier auf wie bei "Wünsch dir was" :)
Aber ein Logo in der Ecke des Plans einfügen zu können wäre nice...

Add icon to AboutPanel

Currently, the icon in AboutPanel can't be loaded from a distribution built with meson, as it is not installed:

wxFileName img_file(wxT("img/minis.ico"));
if (img_file.FileExists()) {//programme can still be opened

We should either install the icon and adjust the path if necessary or use an XPM like for the window icon:

wxFrame::SetIcon(wxICON(minis));

/* XPM */
static const char *minis_xpm[] = {

Missing resources

When starting the program compiled with #6, the program fails to load it's icon:

13:10:39: can't open file 'aaa' (error 2: No such file or directory)
13:10:39: Failed to load image from file "aaa".

aaa is being used here: MainFrame.cpp#L24

The repository seems to be missing the MiniPlaner.rc referenced in makefile#L30, but I am not sure yet how that would work out on Linux.

Maximum Einsätze pro Zeitraum

Manche Messdiener "sollen" z.B. höchstens 2 mal pro Monat eingesetzt werden. Vielleicht kann man ein solches Kriterium mit berücksichtigen.

Separate Repository from Website

I think we should separate the user experience from the developer experience.

Currently, yannikschaelte.github.io/MiniPlaner is generated from master. We can use a gh-pages branch for the website [1] and generate the website via an index.md file [2].

That way we can rewrite README.md to house relevant information about building the program, which are irrelevant to the end user and preferably written in English.

Furthermore, we should exclude binaries from the source tree. Things currently listed in "Download" and "Beispiel" in README.md should be added to the corresponding release: MiniPlaner/v2.0.4

@yannikschaelte, what do you think?

[1] Configuring a publishing source for your GitHub Pages site - GitHub Help
[2] Creating a GitHub Pages site - GitHub Help

Install PDF documentation

Currently, only the binary is installed via the build system. The binary expects the PDF at runtime, so we should include it as well.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.