GithubHelp home page GithubHelp logo

bkd-mba-fbi / kursausschreibung Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 5.0 10.72 MB

SLH.Evento JS Module for online course announcement

Home Page: https://bkd-mba-fbi.github.io/kursausschreibung

License: MIT License

JavaScript 72.66% HTML 10.06% CSS 2.38% Handlebars 14.91%
uikit evento education ember-cli swiss-learning-hub emberjs ember-inspector course ember javascript

kursausschreibung's People

Contributors

aramloosman avatar cravay avatar dependabot[bot] avatar ember-tomster avatar fbufbi avatar hupf avatar schefbi avatar ursbraem avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

kursausschreibung's Issues

Datei Upload ermöglichen sobald CLX.Evento dies via Anmeldedetails umgesetzt hat

Der Datei Upload soll wie folgt umgesetzt werden.

Wenn die Eigenschaft SubscriptionDetails.VssStyle: PD=PDF, DA=Datei, PF=PersonenFoto ist muss folgender Prozess beim Upload, vlaidierung und speicherung durchlaufen werden.

Validierung:

  • MaxFileSize (Byte) darf nicht überschritten werden, falls nicht null
  • VssStyle: PD muss PDF Datei sein
  • VssStyle: PF muss Bilddatei sein

Upload nach erstellung der /Subscription pro SubscriptionDetails.files muss folgender Request durchgeführt werden

grafik

bsp.
POST /restApi/SubscriptionDetails/files

POST /restApi/SubscriptionDetails/files HTTP/1.1
Host: eventoapp-test.erz.be.ch
CLX-Authorization: token_type=urn:ietf:params:oauth:token-type:jwt-bearer, access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJvYXV0aHB1YmxpYyIsImF1ZCI6Imh0dHBzOi8vZGV2NDIwMC8iLCJuYmYiOjE2MDEzNzIxNTcsImV4cCI6MTYwMTM4Njg1NywidG9rZW5fcHVycG9zZSI6IlVzZXIiLCJzY29wZSI6IlB1YmxpYyIsImNvbnN1bWVyX2lkIjoiZGV2NDIwMCIsImluc3RhbmNlX2lkIjoiQnNUZXN0IiwidXNlcm5hbWUiOiJDTFhfUmVzdCIsImN1bHR1cmVfaW5mbyI6ImRlLUNIIiwicmVkaXJlY3RfdXJpIjoiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaWRfbWFuZGFudCI6Ijk2MCIsInJvbGVzIjoiIiwidG9rZW5faWQiOiIyMTExMiJ9.-whxq3CvvbJ0guMch0138xrSxSY6wW1Eq1v6Q4dYGPE
Content-Type: application/json

{
    "SubscriptionDetail":  {
        "Id": "0_10",
        "SubscriptionId": 5633,
        "VssId": 10,
        "EventId": 2517,
        "OpenInvoiceBookingId": null,
        "BookingType": null,
        "DropdownItems": null,
        "EnteringType": "",
        "IdPerson": 3144,
        "IsValidated": false,
        "IsValidationMessage": false,
        "IsValidationStatus": false,
        "Required": false,
        "ShowAsRadioButtons": false,
        "Sort": "000010",
        "Tooltip": null,
        "Value": null,
        "VssDesignation": "Pdf-Datei",
        "VssStyleDescription": "6",
        "VssStyle": "PD",
        "VssTypeId": 290,
        "VssType": "ShortText",
        "ReadOnly": false,
        "ValueRangeRegex": null,
        "ValueRangeError": null,
        "MaxLength": null,
        "MaxFileSize": null,
        "IdObject": "0_10",
        "IdSubscription": 0,
        "IdEvent": 2517,
        "IdAnmeldeVSS": 10,
        "AdWert": null,
        "VssBezeichnung": "Pdf-Datei",
        "VssTypEx": 290,
        "AllowChanges": true,
        "VssInternet": "E",
        "HRef": "/restApi/SubscriptionDetails/0_10"
    },
        "FileStreamInfo": {
        "FileName": "Test.pdf",
        "FileStream": "",
        "FileSize": 0
    }
}

PUT /restApi/files/

PUT /restApi/files/f3e3a864-14f7-4044-9bd7-ee6e0cd73018 HTTP/1.1
Host: eventoapp-test.erz.be.ch
CLX-Authorization: token_type=urn:ietf:params:oauth:token-type:jwt-bearer, access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJvYXV0aHB1YmxpYyIsImF1ZCI6Imh0dHBzOi8vZGV2NDIwMC8iLCJuYmYiOjE2MDEzNzIxNTcsImV4cCI6MTYwMTM4Njg1NywidG9rZW5fcHVycG9zZSI6IlVzZXIiLCJzY29wZSI6IlB1YmxpYyIsImNvbnN1bWVyX2lkIjoiZGV2NDIwMCIsImluc3RhbmNlX2lkIjoiQnNUZXN0IiwidXNlcm5hbWUiOiJDTFhfUmVzdCIsImN1bHR1cmVfaW5mbyI6ImRlLUNIIiwicmVkaXJlY3RfdXJpIjoiaHR0cDovL2xvY2FsaG9zdDo0MjAwIiwiaWRfbWFuZGFudCI6Ijk2MCIsInJvbGVzIjoiIiwidG9rZW5faWQiOiIyMTExMiJ9.-whxq3CvvbJ0guMch0138xrSxSY6wW1Eq1v6Q4dYGPE
Content-Type: application/pdf

"<file contents here>"

FATAL error while initializing the module: TypeError: "event is null"

Fehler beim laden des Moduls.

FATAL error while initializing the module: TypeError: "event is null"
events store.js:193
filterEvents store.js:193
init store.js:58
tryCatcher rsvp.js:215
invokeCallback rsvp.js:393
publish rsvp.js:379
Ember
invoke backburner.js:205
flush backburner.js:125
flush backburner.js:278
end backburner.js:410
_boundAutorunEnd backburner.js:372

moduleRedirectUrl funktioniert nicht in jedem Fall

Rückmeldung Comvation:
Wir haben das Problem analysiert. Das Problem kommt aus dem Plugin "kursausschreibung.js".
Dort ist ein Bug: Die Redirect-URL nach der Authentifizierung auf der REST-Api wird leider per history.replaceState in die Adresszeile geschrieben.
Das führt dazu, dass der Webserver keine neue Anfrage vom Browser bekommt (weil neue Adresse nur im Browser geändert wurde).
Die neue URL wird nur mit folgendem Befehl zum Webserver geschickt: "document.location.href = URL".

Bugfix

/* Customizing Comvation: Only rewrite history with "replaceState" when script run on plugin page. On all other pages (when token authentification go to startpage) use document.location.href */ 
 jQuery('#kursausschreibung-root').length > 0 ? (history.replaceState(null, null, (0,a.getParameterByName)("moduleRedirectUrl"))) : (document.location.href = (0,a.getParameterByName)("moduleRedirectUrl"));
 /*history.replaceState(null, null, (0, a.getParameterByName)("moduleRedirectUrl"))*/

Jetzt funktionieren auch externe Links. Bsp.:
http://www.bffbern.ch/de/Weiterbildung/Betriebliche-Bildung-und-Beratung/Weiterbildung-fuer-Berufsbildnerinnen-und-Berufsbildner/Info#/weiterbildung/kurs%20wb%20erziehung%2Fsoziales/53718

ReferenceError: "Promise" ist undefiniert

With the following test in Internet Explorer you will encounter an error.

  1. go to subscribe form.
  2. go to back with the form button.
  3. go to subscribe form.

Error while processing route: list.category.event.subscribe "Promise" ist undefiniert ReferenceError: "Promise" ist undefiniert at e.getDropDownItems (https://localhost/assets/kursausschreibung.js:33:1628) at Anonymous function (https://localhost/assets/kursausschreibung.js:141:178) at Anonymous function (https://localhost/assets/kursausschreibung.js:141:79) at model (https://localhost/assets/kursausschreibung.js:141:1) at deserialize (https://localhost/assets/vendor.js:2555:109) at Anonymous function (https://localhost/assets/vendor.js:3287:6) at e.prototype.runSharedModelHook (https://localhost/assets/vendor.js:3286:1) at n.prototype.getModel (https://localhost/assets/vendor.js:3307:1) at _ (https://localhost/assets/vendor.js:3414:5) at P

Frage zur Kurz-URL mit ID

Das offizielle Muster für die Kurzlinks mit ID ist path/to#/uid/123.

Wird path/to/#/uid/123 auch unterstützt? Ich finde das symmetrischer und dadurch verständlicher. Bei mir (Chrome, Mac) hat es funktioniert.

Bei EventTypeId === 1 (Studiengang) gibt es kein FreeSeat counter (null)

In der Businesslogik von Evento gibt es im EventTypeId === 1 (Studiengang)kein FreeSeat counter (Er ist immer null). Deshalb soll Da Modul so angepasst werden das beim Status green folgendes geprüft wird.

(FreeSeats > 0 || EventTypeId === 1)

Das hat zu folge, dass ein Studiengang nie in den Status chartreuse oder red fällt.

Neuer Status Garantierte Durchführung

Es soll ein neuer Status aufgenommen werden.

Bedingung
wie Green plus zusätzlich (MaxParticipants-FreeSeats) >= MinParticipants

Legende
background-color: chartreuse;
grafik

eventlist & detail
grafik

Anlassfilter: events.DateFrom in der Vergangenheit nicht mehr anzeigen

Es soll möglich sein ein setting zu setzen, dass bei abgelaufen SubscriptionDateTo Anlässe nicht mehr angezeigt werden. Der Kunde kann eine Ganzzahl setzt somit schaut der Filter soviel Tag zurück und zeigt nur nich die, die gemäss dieser Einstellung noch angezeigt werden sollen. Dieser Filter ist optional.

Setting:
FilterSubscriptionDateToBackDays: 2

Solution
Anstelle von einem erneuten setting werden events herausgefilter sobald, dass DateFrom in der vergangeheit liegt.

PUT /Persons/{idPerson} 409 > Sie sind nicht berechtigt, im Feld \"Firmazeile 1\" einen Wert zu erfassen.

Workaround implementieren, falls beim PUT /Persons/{idPerson} ein 409 mit der Message "Firmazeile 1" oder "Ligne entreprise 1" zurückkommt. Wird nicht abgebrochen und die Anmeldung wird ohne Änderung der Personendaten erfolgen.

409 Conflict

{
    "HasErrors": true,
    "HasQuestions": false,
    "Issues": [
        {
            "Id": null,
            "Message": "Sie sind nicht berechtigt, im Feld \"Firmazeile 1\" einen Wert zu erfassen.",
            "MessageId": null,
            "MessageType": "Error",
            "Property": null
        }
    ]
}

ics LOCATION: Komma zwischen Strasse und PLZ

Ics-Export die Eigenschaft LOCATION: soll falls ein Raum zugeteilt ist ein Komma zwischen Strasse und PLZ haben.

  • Heute: LOCATION: event.ResourceDesignation + ', ' + event.BuildingName + ', ' + event.BuildingAddress + ' ' + event.BuildingZip +' '+ event.BuildingLocation falls kein Raum zugewiesen ist wird die Location des events angezeigt
  • Neu: LOCATION: event.ResourceDesignation + ', ' + event.BuildingName + ', ' + event.BuildingAddress + ', ' + event.BuildingZip +' '+ event.BuildingLocation falls kein Raum zugewiesen ist wird die Location des events angezeigt

Enhancement: Anchor jumps

When applying for a course (Chrome on mac)

  • on the first click ("Anmelden") the page jumps to the page top instead of to the opened form
  • on the second click ("Anmelden") the page jumps to the bottom instead of to the thank you message

So users are lost twice. Maybe this depends on the used layout. But I think it would make sense to scroll/jump to where the next thing is after an action.

I'm not sure, but maybe this is a start? https://stackoverflow.com/a/23034716/160968

Sprung zu Anker bei URL-Aufruf vermeiden

Bei Aufruf einer Kurs-URL springt die Seite automatisch in den Content. Je nach Layout (Fixe Bereiche) bewirkt das dann eine Überlappung (. Die User_innen müssen dann hochscrollen, um herauszufinden, wo sie gelandet sind.

Beispiele mit der v2 (aber bei v3 ist es auch, aber ist bei uns noch nicht live)

Lässt sich dieser Sprung zum Inhalt deaktivieren? Wäre für uns hilfreich, sehe auch keinen Mehrwert darin.

Android ignoriert die locale Zeitzone (ohne Z am ende) in einer ics Datei

Android ignoriert die locale Zeitzone (ohne Z am ende) in einer ics Datei. Es wird immer in UTC umgerechnet (Siehe Googlekalender answer).

Lösung:
In die Standard Lib von ics.js sollen die folgenden Eigenschaften (Zeitzone MEZ) eingebaut werden, weil unser Kunden nur in einer Zeitzone geschäften.

BEGIN:VTIMEZONE
TZID:Europe/Zurich
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:MESZ
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:MEZ
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE

Nach EventCodes filtern

Es soll möglich sein nach EventCodes auf den routen AreaOfEducation und EventCategory zu filtern. Es sollen nur die Codes angezeigt werden für die es in der route auch events gibt.

Rest Api Endpunkt /EventCodes/

Mögliche Darstellung
grafik

https://getuikit.com/docs/filter

In Mobile Modus muss die Code Filterung ausgeblendet werden, weil sonst die Übersichtlichkeit verloren geht.

Umsetzung

  • settings.initialListFilters.codeIds
  • Code können via local Datei übersetzt werden, weil das Backend diese nicht übersetzten kann
  • Wenn nur ein Code vorhanden wird die Paginierung ignoriert.
  • Möglich via Params zu filtern

image

PUT /Person/{id} 409 Mit der angegebenen PLZ muss der Ort wie folgt heissen: Bern

CLX hat mit dem neuen Release eine Valideirung eingebaut die bei erfassen Person die PLZ und der eingegeben Ort Name mit den Evento Daten verglecht wenn diese nicht identisch sind wird folgende 409 beim PUT /Persons/ zurückgemeldet.

Request Body

{
	"FormOfAddress": "Herr",
	"FormOfAddressId": 105,
	"Email2": "[email protected]",
	"FirstName": "Sandro",
	"LastName": "Scheidt",
	"Location": "Bern qe4t",
	"Zip": "3006",
	"Id": 38381
}

Response Body

{"HasErrors":true,"HasQuestions":false,"Issues":[{"ConflictingObject":null,"ConflictingObjectType":null,"Id":null,"Message":"Mit der angegebenen PLZ muss der Ort wie folgt heissen: Bern","MessageId":null,"MessageType":"Error","Property":null}]}

Solution
onfocus event in subscribe-form eingebaut.

  • Wird im input Feld (name=Zip) ein PLZ gefunden
  • Wird im input Feld (name=Location) eine datalist mit den zum PLZ zugehörigen Orte drgestellt.

settings.js
formfields id=Location datalist konfigurieren bsp.

{
   "id": "Location",
   "dataType": "string",
   "options": { "required": true, "autocomplete": "address-level2", "datalist": "locationCodes" }
}

Dropdown mit Freitext erlauben

Wenn /SubscriptionDetails mit dem Type "VssStyleDescription": "DropDownWithText" vorhaden ist, soll es möglich sein auch Freitext einzugeben.

ical oder ics download

Ermöglichen auf einem Event aus den hinterlegten Lesson's eine ics Datei für den Benutzer bereitzustellen.

Lösung

  • Das Label lesson als Link definieren
  • Ein Kalender icon hinter das Label stellen
  • Tooltip erstellen
    grafik

Feature idea: Introduce "Permalink"

While the URL of a course detail can change all the time, I would propose to add a "permalink" option that can be shared. All this needs is the UID of the course.

So something like https://www.bzemme.ch/kurseweiterbildung/#/uid/36315

Would redirect to https://www.bzemme.ch/kurseweiterbildung/#/weiterbildung/holzbau%20(wb)/36315

but if the category is renamed or changed

https://www.bzemme.ch/kurseweiterbildung/#/weiterbildung/modellbau%20(wb)/36315

the first URL would still work fine.

Default Setting persons model (CountryId)

Im Settings.js sollen default Persons model eigenschaften erstellt werden können.
Wenn diese eigenschaften im Persons model null sind sollen die default eigenschaften übermittelt werden.

bsp.

//fields they are not in form or not required, you can set a default value. it will be overwrite null value in persons modell
"personDefaultValue": {
"CountryId": "CH",
}

Anmeldeprozess unauffälliger gestallten

In diesem issue soll der Anmeldeprozess einwenig unauffälliger dargestellt werden. Bei scrollDown bleiben die steps sticky on top. Aussedem soll er von oben entfernt werden und zwischen event-details und subscription-form dargestellt werden.

Lösung
grafik

confirmation-loading scrollIntoView kursausschreibung-root

Beim erstellen der Anmeldung soll der/die TeilnehmerIn bereits auf das "kursausschreibung-root" Element gescrollt werden, somit ist das "loading wheel" immer sichtbar und bei einem Fehler sieht der Benutzer auch gleich den Fehler.

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.