0

Scripten von Bedingungen zur Statusanzeige

Liebe Leute,
ich komme mit dem Scripten eines komplexeren Problems nicht zurecht:
Es geht um Tagungsanträge, die eingereicht, geprüft und weitergerecht werden.
Um den Bearbeitungszustand, in dem sich ein Antrag befindet, mit einem Blick kontrollieren zu können, soll ein Statusfeld als Funktionsfeld eingeführt werdenn, das abhängig von anderen Feldern neun verschiedene Stati darstellen soll:

0. Kein Status, Feld nicht sichtbar
1. Einreichung überfällig
2. Zu bearbeiten
3. In Bearbeitung
4. Formal okay
5. Inhaltlich okay
6. Abgabefertig
7. Abgabe überfällig
8. Abgegegen

Die Felder, die dieses Bedingungen definieren, sind, bis auf eine Ausnahme in derselben Tabelle zu finden:

Aus Förderung entfernt (Ja/Nein)
Beginn (Datum)
Eingang Mail (Datum)
Eingang Post (Datum)
Formal Okay (Datum)
Inhaltlich Okay (Datum)
Mit Monatsantrag einzureichen (berechnetes Datumsfeld)
Eingereicht (Datum)
In einer verknüpften Tabelle "Rücksprachen" kann es zu einer Tagung einen odere mehrere Datensätze geben.
Wenn es diese gibt, ist das Feld "Erledigt" (Datum) relevant. Existieren solche verknüpften Datensätze nicht, sind sie auch nicht zu berücksichtigen.

In Alltagssprache lauten die Bedingungen wie folgt:

0. Kein Statuswert und keine Statusanzeige
1. Wenn Aus der Förderung entfernt = Ja.
2. Wenn Einreichung noch nicht fällig. Zur Erklärung: Die Einreichung einer Tagung muss bis zum 08. des Vor-Vormonats erfolgen, in dem die Tagung stattfindet. Findet eine Tagung bspw. im Juni statt, muss der Antrag bis zum 08. April vorliegen, d. h., bis dahin können die Felder Eingang Mail  und  Eingang Post ausgefüllt sein, müssen es aber nicht. Sind sie bis zu diesem Datum leer, ist der Status 0, ist eines oder sind beide Felder ausgefüllt, gelten die Bedingungen 1 bis 8.

1. Einreichung Überfällig
Eingang Mail oder Eingang Post nach 8. des Vor-Vormonats leer, wenn Beginn  -2 Monate (Anders: Wenn Tagung im Juni stattfindet, muss Antrag spätestens am 8. April per Mail oder per Post vorliegen. Siehe oben).

2. Zu Bearbeiten
Eingang Mail oder Eingang Post oder beide ausgefüllt.

3. In Bearbeitung
Eingang Mail oder Eingang Post oder beide ausgefüllt und – sofern ein oder mehrere verknüpfte Datensätze Rücksprachen erstellt wurden – auch nur ein Rücksprachen.Erledigt nicht ausgefüllt. Einschränkung: Sofern Rücksprachen.Datum < Abgegeben (d. h.: Wenn das Feld Abgegeben ausgefüllt ist, ist der Status In Bearbeitung – sowie alle anderen Stati auch –  automatisch ausgeschlossen, auch wenn noch Rücksprachen offen sein sollten, bzw. nach der Abgabe ein neuer Datensatz Rücksprachen erstellt wird).

4. Formal okay
Formal okay ausgefüllt.

5. Inhaltlich okay
Inhaltlich okay ausgefüllt.

6. Abgabefertig
Formal okay und Inhaltlich okay ausgefüllt und – sofern vorhanden – Rücksprachen.Erledigt alle ausgefüllt.

7. Abgabe überfällig
Abgegeben nicht ausgefüllt und Mit Monatsantrag einzureichen < Heute

8. Abgegeben
Abgegeben ausgefüllt. Damit sind alle vorigen Stati ausgeschlossen. Ausnahme: Immer wenn Aus Förderung entfernt = Ja, dann Status 0.

Ist das halbwegs verständlich?
Wie übersetzt man diese Bedingungen in ein funktionierenders Script?

Ich danke euch im Voraus und wünsche einen schönen Sonntag!
 

6 Antworten

null
    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Ali,

    ich habe jetzt nicht die komplete Formel für dein Problem, aber hier vielleicht schonmal ein Ansatz zum weiterverfolgen...

    Es existieren die Felder "beginn", "eingereicht" und das Ja/Nein-Feld "entfernt"

    if entfernt like "Nein" then
    if month(eingereicht) <= month(beginn) - 2 and day(eingereicht) <= 8 then
    styled("alles gut", "green")
    else
    styled("Einreichung überfällig", "red")
    end
    else
    styled("Aus Förderung entfernt", "red")
    end

    Du musst halt 

    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    oh..... TAB geht wohl nicht...

     

    Du musst halt deine if-Abfragen komplex verschachteln... 

     

    Alternativ mach dir doch 2 oder 3 verschiedene Formelfelder. Eines fragt generell die korrekte Anmeldung/Einreichung ab. Wenn diese ein "Einreichung OK" ergibt, greift das nächste Formelfeld welches den Verarbeitungsvorgang ab Schritt 3 bis 6 abbildet usw...

    Gruß

    Tobias

    • Ali
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Tobias,

    Danke für die Tipps. Bin gerade dabei, mit Deiner Datumsberechnung zu experimentieren. Dazu ein Nachfrage: Ich habe

    let myEinreichung := month(Beginn) - 2;
    format(myEinreichung, "08.MM.YYYY")

    In der Hoffnung, damit jeweils die Anzeige des 8. jeden Vorvormonats zu bekommen. Problem: Ninox gibt nur den Monat zurück, und zwar als Zahl- Lasse ich month weg und ziehe 60 Tage ab, wie hier:

    let myEinreichung := Beginn - 60;
    format(myEinreichung, "08.MM.YYYY")

    bekomme ich zwar edas Datum korrekt ausgegeben, allerdings stimmt dann der Monat nicht immer ...

    Das bekommt man doch bestimmt in den Griff, oder?

    Danke auch für den Tipp mit den Stausfeldern. Das iist besser, da die einzelnen Stati nicht hundertpro trennscharf sind.

    Schöne Grüße

    ali

    • Ali
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Sorry für die typos ... :-(

    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    ja, mit month erhälst Du natürlich nur die Zahl des Monats. Damit lässt sich kein vernünftiges "format" machen... und 60 abziehen passt ja nicht, mal sind es 61, mal 59... das klappt nicht. Was willst Du denn genau haben? Ein feld welches dir "08.VorVormonat.2020" anzeigt? Oder brauchst Du den Wochentag welcher am 8. des VorVormonats war? du kannst Dir das auch "hardcoden" direkt in der Formel:

     

    let myMonat := format(month(beginn) - 2, "00");  ----> damit du eine führende Null hast 
    let myJahr := year(beginn);
    "08." + myMonat + "." + myJahr   ---> die Fromel gibt einfach das Datum zusammengesetzt als Text aus

    • Michi.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich hab das mit for schleifen gelöst. Die Regeln den Status. Nimmt aber perfomens weg und du must die Bedingungen so gestalten das immer nur ein Status gewählt wird.

     

    Habe es jetzt nur kopiert von mir. Must halt anpassen. Währe selber an einer besseren Lösung interessiert. Funktioniert zwar, aber die Bedingungen zu formulieren sind mühselig 

    for i in (select Rechnungsstellung)[Rechnungstyp = 1 and 'in Rechnung wandeln' = false and 'erwarteter Zahlungseingang' < today()] do
    i.(Rechnungsstatus := "Angebot Versendet")
    end;
    for i in (select Rechnungsstellung)[Rechnungstyp = 1 and 'in Rechnung wandeln' = true] do
    i.(Rechnungsstatus := "Rechnung gestellt")
    end;
    for i in (select Rechnungsstellung)['Zahlungserinnerung erzeugen' = true] do
    i.(Rechnungsstatus := "Im Mahnverfahren")
    end;
    for i in (select Rechnungsstellung)['Offener Rechnungsbetrag' < 1] do
    i.(Rechnungsstatus := "Bezahlt")
    end;
    for i in (select Rechnungsstellung)['Offener Rechnungsbetrag' > 1 and 'Offener Rechnungsbetrag' < 'Brutto-Gesamt:'] do
    i.(Rechnungsstatus := "Teilzahlung")
    end;
    for i in (select Rechnungsstellung)[Rechnungstyp > 1 and 'erwarteter Zahlungseingang' > today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:'] do
    i.(Rechnungsstatus := "Versendet")
    end;
    for i in (select Rechnungsstellung)[Versandart = 7] do
    i.(Rechnungsstatus := "noch nicht Versandt")
    end;
    for i in (select Rechnungsstellung)[Rechnungstyp = 4 or 'in Gutschrift wandeln' = true] do
    i.(Rechnungsstatus := "Begutschriftet")
    end;
    for i in (select Rechnungsstellung)[Rechnungstyp = 2 and 'erwarteter Zahlungseingang' < today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:' and 'in Gutschrift wandeln' = false and 'Zahlungserinnerung erzeugen' = false] do
    i.(Rechnungsstatus := "Überfällig")
    end