ECommerce: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(136 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
eCommerce - Funktionen "Überblick"
OrgaMon biete eine vielzahl von Kopplungsmöglichkeiten, die es dem Kunden oder Geschäftspartner ermöglichen auf Informationen und Daten zuzugreifen und Prozesse anzustossen.


Erstmalig werden Funktionen für Geschäftsabläufe aus OrgaMon in einem
* Lieferanten
Zentralen Modul (eCommerce) gesammelt. Das Ziel ist, den ganzen Webshop
bzw. alle Webanfragen ausschließlich über das eCommerce Modul laufen zu
lassen. Dabei werden auch erstmals "r" Connections und "w" Connections
eingesetzt, was dem zukünftigen raib-Server zugute kommt (Clustering).
Nun eine Liste aller eCommerce Funktionen:


eCommerce - Funktionen "XML-RPC-Verfügbar"
Lieferanten können ihre Systeme mit OrgaMon koppeln, und beispielsweise die Liste der noch zu liefernden Artikel abrufen


    abu.ArtikelSuche(SuchStr: string): array of integer; { ARTIKEL_R }
* Kunden
    // Suchmaschine für Artikelsuche


     abu.ArtikelPreis(AUSGABEART_R, ARTIKEL_R:integer): double;
Kunden können ebenfalls uber diese Schnittstelle Zahlungsverpflichtungen oder alte Belege einsehen.
 
Die B2B Fähigkeiten des OrgaMon ermöglichen es Dienstleistungen des OrgaMon von aussen zu benutzten. Dazu wird im Moment, die von jedem System beherschte XML-RPC Schnittstelle benutzt. Der benutzte TCP/IP Port ist frei einstellbar.
 
* Webshop
 
Der Webshop nutzt neben der Datenbankverbindung vorzugsweise Funktion aus der XML-RPC-API.
 
== Funktions Überblick ==
 
Der OrgaMon verwendet einen betriebswirtschaftlichen Kernel. In diesem Teil des Quelltextes (eCommerce) sammelt sich die Verarbeitungslogik für alle wesentlichen Buchungsvorgänge (z.B. Zahlungseingang, Warenzugang, Versandbuchung usw.). Eine ausgewählte Zusammenstellung von Kernel-Funktionen sind via XMLRPC von aussen zugänglich. Somit ist es dem TWebShop möglich grosse Teile der Logik via XMLRPC dem OrgaMon zu überlassen.
 
* mit <code>query;</code> markierte Funktionen ändern nichts an der Datenbank, die Funktionen laufen "read-only" ab
* mit <code>command;</code> markierte Funktion verändern die Daten der Datenbank, Datensätze werden geändert gelöscht oder eingefügt, Dateien im Dateisystem werden erstellt
 
== XMLRPC API (cOrgaMon-Web) ==
 
=== BasePlug ===
<syntaxhighlight lang="Delphi">
    BasePlug():array of string; query;
    // BasePlug enthält wichtige Umgebungsinformationen für den konnektierten
    // WebShop. So erfährt der WebShop z.B. über BasePlug auf welche Datenbank
    // er konnektieren soll. Oder wo Musik-Downloads zu finden sind. BasePlug
    // verhindert redundante Parametrierung von Shop und OrgaMon. In der Regel
     // liefert BasePlug alle Infos an den Shop die er braucht.
    //
    // Bedeutung der einzelnen Zeilen:
    //
    // [00] Datenbank-Verbindungsstring
    // [01] Anwendungsname mit Versionsnummer
    // [02] Datenbank-Layer mit Versionsnummer
    // [03] Indy Versions-Nummer
    // [04] PDF Pfad (public) (Parameter [[Systemeinstellungen#PDFPathShop]])
    // [05] Musik Pfad (Parameter [[Systemeinstellungen#MusicPath]])
    // [06] Pfad zu den Rechnungen (Parameter [[Systemeinstellungen#htmlPath]])
    // [07] Pfad der Artikel-Bilder (Icons und Logos auf externer Site) (Parameter [[Systemeinstellungen#BilderURL]])
    // [08] GUI: TPicUpload Versions-Nummer (Bilder hochladen)
    //      CONSOLE: Anzahl der bisher verarbeiteten Anfragen dieser Serverinstanz
    // [09] Tabellenkalkulation mit Versionsnummer (.xls Dokument-Ausgabe)
    // [10] jcl mit Versionsnummer
    // [11] jvcl mit Versionsnummer
    // [12] Artikel-Bilder-Pfad (Parameter [[Systemeinstellungen#ShopArtikelBilderURL]])
    // [13] zip mit Versionsnummer
    // [14] unzip mit Versionsnummer
    // [15] XMLRPC Versionsnummer "@" Hostname der Serverinstanz ":" XMLRPC-Port der Serverinstanz
    // [16] memcached Versionsnummer "@" [[Systemeinstellungen#memcachedHost]]
    // [17] Datenbank-Benutzer
    // [18] Datenbank-Passwort (verschlüsselt über privaten Key)
    // [19] wie [18]
    // [20] Datenbank-Client mit Versionsnummer
    // [21] PNG - Image Versionsnummer
    // [22] Datenbankhost
    // [23] Datenbankname
    // [24] CONSOLE:Uptime der Serverinstanz "@" Uptime des Servers
    //      GUI:N/A 
    // [25] exif mit Versionsnummer
    // [26] eindeutiger Kontext der Serverinstanz
    // [27] Betriebssystem der Serverinstanz
</syntaxhighlight>
<br>
 
=== ArtikelSuche ===
<source lang="delphi">
    ArtikelSuche(SuchStr: string; [SORTIMENT_R : integer]): array of integer; { ARTIKEL_R } query;
    // Suchmaschine für artikelsuche
    // Optional ist die Suche eingeschränkt auf ein spezielles Sortiment
</source>
<br>
 
=== ArtikelPreis ===
<source lang="delphi">
    ArtikelPreis(AUSGABEART_R, ARTIKEL_R:integer): double; query;
     // liefert den Preis des Artikels in dieser Ausgabeart
     // liefert den Preis des Artikels in dieser Ausgabeart
     // kostenlos = 0; //  
     // kostenlos = 0; //  
     // cPreis_vergriffen = -1.0; // Artikel nicht mehr lieferbar.
     // cPreis_vergriffen = -1.0; // Artikel nicht mehr lieferbar.
     // cPreis_aufAnfrage = -2.0; // keine Preisinformation verfügbar.
     // cPreis_aufAnfrage = -2.0; // keine Preisinformation verfügbar
</source>
<br>


     abu.Land(LAND_R: integer): string;
=== Land ===
<source lang="delphi">
     Land(LAND_R: integer): string; query;
     // liefert die Landesbezeichnung (als ISO-Kürzel)
     // liefert die Landesbezeichnung (als ISO-Kürzel)
</source>


     abu.KontoInfo(PERSON_R: integer): double;
=== KontoInfo ===
<source lang="delphi">
     KontoInfo(PERSON_R: integer): double; command;
     // liefert den Kontostand des Kunden (zu zahlen!)
     // liefert den Kontostand des Kunden (zu zahlen!)
     // erzeugt als Nebeneffekt die aktuelle "Mahnung.html"
     // erzeugt als Nebeneffekt die aktuelle "Mahnung.html"
</source>
<br>


     abu.BestellInfo(PERSON_R: integer): integer;
=== BestellInfo ===
<source lang="delphi">
     BestellInfo(PERSON_R: integer): integer; command;
     // liefert den Lieferrückstand des Lieferanten (Erwartete Mengen!)
     // liefert den Lieferrückstand des Lieferanten (Erwartete Mengen!)
     // erzeugt als Nebeneffekt die aktuelle "Bestellung.html"
     // erzeugt als Nebeneffekt die aktuelle "Bestellung.html"
</source>
<br>


     abu.Bestellen(PERSON_R: integer): integer;
=== Bestellen ===
<source lang="delphi">
     Bestellen(PERSON_R: integer): integer; command;
     // erstellt aus dem Einkaufswagen des Kunden eine tatsächliche
     // erstellt aus dem Einkaufswagen des Kunden eine tatsächliche
     // Bestellung. Die (neue) Beleg-Nummer wird zurückgegeben.
     // Bestellung. Die (neue) Beleg-Nummer wird zurückgegeben.
     //
     //
</source>
<br>
=== Vormerken ===
<source lang="delphi">
    Vormerken(PERSON_R: integer): integer; command;
    // erstellt aus dem Einkaufswagen des Kunden eine tatsächliche
    // Bestellung. Die (neue) Beleg-Nummer wird zurückgegeben.
    //
    // Im Ergebnis wie "Bestellen", jedoch wird die Verarbeitung
    // im Hintergrund durchgeführt.
</source>
<br>
=== Buchen ===
<source lang="delphi">
    Buchen(BELEG_R, PERSON_R : integer): integer; command;
    //
    // a) BELEG_R>0
    //
    // führt bei einem bereits existierende Beleg (BELEG_R) dazu, dass alles direkt lieferbare
    // sofort verbucht wird und in den Status "geliefert" gesetzt wird. Es wird ein
    // Rechnungsbeleg erstellt, und die Ware wird ausgeliefert betrachtet.
    //
    // BELEG_R = 0 führt zur Vertragsanwendung bei diesem Kunden
    //
    // Rückgabewert:
    //
    // -1 : Es ist ein Fehler aufgetreten! Mehr Info dazu in der EREIGNIS Tabelle
    //  0 : Eine direkte Auslieferung ist nicht nötig oder möglich! Mehr Info dazu in der EREIGNIS Tabelle
    //  1 : Es wurde erfolgreich eine Auslieferung durchgeführt! In der Regel keine Infos in der EREIGNIS Tabelle
    //
    // b) (BELEG_R<1) und (PERSON_R>0)
    //
    // der aktuelle Arbeitszeitbeleg der angegeben Person wird erstellt.
    //
</source>
<br>


     abu.ArtikelVersendetag(AUSGABEART_R, ARTIKEL_R:integer): integer;
=== ArtikelVersendetag ===
<source lang="delphi">
     ArtikelVersendetag(AUSGABEART_R, ARTIKEL_R:integer): integer; query;
     //
     //
     // GELBE STATI
     // (NULL,0)
     //  0=keine Info über Verfügbarkeit vorhanden
    //  NULL=wie 0
     //  0=keine Info über die Verfügbarkeit vorhanden
     //
     //
     // ROTE STATI:
     // (1..9)
     //  1=entgültig vergriffen
     //  1=entgültig vergriffen
     //  2=zur Zeit vergriffen, Neuauflage jedoch ungewiss
     //  2=zur Zeit vergriffen, Neuauflage jedoch ungewiss
     //  3=zur Zeit vergriffen, Neuauflage jedoch sicher
     //  3=zur Zeit vergriffen, Neuauflage jedoch sicher
    //  4=Zustellung sofort per eMail
    //  5=kann sofort heruntergeladen werden
    //  6= -- bisher ohne Bedeutung --
    //  7= -- bisher ohne Bedeutung --
    //  8= -- bisher ohne Bedeutung --
    //  9= -- bisher ohne Bedeutung --
     //
     //
    //
     // GRÜNE STATI: (10..100)
     // GRÜNE STATI:
     //  10=heute lieferbar  (=ist unbegrenzt am Lager, ohne Mengenangabe)
     //  10=heute lieferbar  (=ist am Lager, ohne Mengenangabe)
     //  11=morgen lieferbar (=wurde z.B. mit dieser Zusage bereits bestellt und kommt morgen)
     //  11=morgen lieferbar (=wurde z.B. mit dieser Zusage bereits bestellt und kommt morgen)
     //  12=in 2 Tagen lieferbar... (=ist z.B. in dieser Zeit zu beschaffen)
     //  12=in 2 Tagen lieferbar... (=ist z.B. in dieser Zeit zu beschaffen)
Zeile 53: Zeile 180:
     //  14= ... usw ...
     //  14= ... usw ...
     //
     //
     // GRÜNE STATI:
     // GRÜNE STATI: (101..20000100)
     //  101= heute lieferbar  (=ist am Lager, Lagermenge=1)
     //  101= heute lieferbar  (=ist am Lager, Lagermenge=1)
     //  102= heute lieferbar  (=ist am Lager, Lagermenge=2)
     //  102= heute lieferbar  (=ist am Lager, Lagermenge=2)
Zeile 64: Zeile 191:
     //            (Vorbestellungen natürlich möglich)
     //            (Vorbestellungen natürlich möglich)
     //
     //
</source>
<br>


     abu.Verlag(VERLAG_R:integer): string;
=== Verlag ===
<source lang="delphi">
     Verlag(VERLAG_R:integer): string; query;
     // Names des Verlages zu einem Verlags-RID
     // Names des Verlages zu einem Verlags-RID
     // ACHTUNG: aus geschichtlichen Gründen sind VERLAG_R zumeist als PERSON_R(s)
     // ACHTUNG: aus geschichtlichen Gründen sind VERLAG_R zumeist als PERSON_R(s)
     // zu verstehen!
     // zu verstehen!
</source>
<br>


     abu.Versandkosten(PERSON_R:integer): double;
=== Versandkosten ===
     // Liefert passend zum "Kunden,Umfang des Einkaufswagen,Versandart des Kunden" die
<source lang="delphi">
     // passenden Versandkosten. Im Moment als dummy immer 3,33 €.
     Versandkosten(PERSON_R:integer): double; query;
     // Liefert passend zum "Kunden/Umfang des Einkaufswagen/Versandart des Kunden/Rabattstatus" die
     // passenden Versandkosten.  
</source>


     abu.ArtikelInfo(AUSGABEART_R, ARTIKEL_R, LAND_R, VERLAG_R) : double, string;
=== ArtikelInfo ===
<source lang="delphi">
     ArtikelInfo(AUSGABEART_R, ARTIKEL_R, LAND_R, VERLAG_R) : double, string; query;
     // Multi-Info-Funktion für weitere Informationen zu Artikel-Daten
     // Multi-Info-Funktion für weitere Informationen zu Artikel-Daten
     // Ergebnisse: Preis, "ISO-Landeskennzeichen" "-" "Verlag"
     // Ergebnisse: Preis, "ISO-Landeskennzeichen" "-" "Verlag"
</source>
<br>


    abu.BasePlug():array of string;
=== ArtikelRabattPreis ===
    // liefert diverse Informations-String:
<source lang="delphi">
    // 1) Datenbankname
     ArtikelRabattPreis(AUSGABEART_R,ARTIKEL_R,PERSON_R) : array of double; query;
    // 2) OrgaMon Versions-Nummer
    // 3) IBO Versions-Nummer
    // 4) Indy Versions-Nummer
    // 5) PDF Pfad (public)
    // 6) Musik Pfad
    // 7) HTML-Pfad (Rechnungen)
    // 8) Bild-URL
    // * Mit Hilfe des Verbindungsstrings sollte auf die entsprechende Datenbank
    //  konnektiert werden.
    // * In der Datenbank sollten nun alle weiteren Parameter, den Shop betreffend
    //  eingegeben sein!
    // für den Shop wichtige Parameter:
    //
    // MusicPath=\\Linus\user\abu\Delphi\abu\Musik\
    // PDFPath=\\Linus\user\hebu\HeBu PDF\A4PDF\
    // XMLRPCHost=BRUTUS
    // XMLRPCPort=3049
    //
 
     abu.ArtikelRabattPreis(AUSGABEART_R,ARTIKEL_R,PERSON_R) : array of double;
     //
     //
     // wie Artikel-Preis, soll jedoch bei Kunden mit Rabatt-Code verwendet werden,
     // wie Artikel-Preis, soll jedoch bei Kunden mit Rabatt-Code verwendet werden,
     // diese Funktion liefert noch die Rabatt-Zahl dazu!
     // diese Funktion liefert noch die Rabatt-Zahl dazu!
     //
     //
</source>
<br>


     abu.PersonNeu : integer; { PERSON_R }
=== PersonNeu ===
<source lang="delphi">
     PersonNeu : integer; { PERSON_R } command;
     //
     //
     // Eine neue Person wird angelegt. Der (neue) RID wird als Ergebnis ge-
     // Eine neue Person wird angelegt. Der (neue) RID wird als Ergebnis ge-
     // liefert. Der Webshop kann nun weitere Eintragungen machen.
     // liefert. Der Webshop kann nun weitere Eintragungen machen.
     //
     //
</source>
<br>


     abu.Ort(PERSON_R) : string; { Adress-Ortsangabe }
=== Ort ===
<source lang="delphi">
     Ort(PERSON_R) : [array of] string; { Adress-Ortsangabe } query;
     //
     //
     // Zu der angegebenen Person wird die Orts-Angabe zusammengestellt.
     // Zu der angegebenen Person wird die Orts-Angabe zusammengestellt.
     // Dazu wird Land, Plz, Ortsname und Ortsteil landesspeziefisch
     // Dazu wird Land, Plz, Ortsname und Ortsteil landesspeziefisch
     // kombiniert.
     // kombiniert.
    // In der Regel wird ein einzelner String zurückgegeben, es kann
    // aber auch ein mehrzeiliger Text zurückgegeben werden, wenn
    // in der Datenbank eine Mehrzeiligkeit der Ortsangabe gesetzt wurde
    // Im "Orts-Formatierungsstring" siehe [[Land]]
</source>
<br>
=== Rabatt ===
<source lang="delphi">
    Rabatt(PERSON_R) : boolean; query;
    // Zu der angegebenen Person wird ermittelt, ob sie Rabatte bekommt.
    // Wenn ja wird true, andernfalls false zurückzugeben.
</source>
<br>
=== Preis ===
<source lang="delphi">
    Preis(AUSGABEART_R,ARTIKEL_R,PERSON_R) : array of double; query;
    //
    // Ersetzt in Zukunft die beiden Methoden abu.ArtikelPreis und abu.ArtikelRabattPreis
    // Falls der Kunde Rabatte bekommt, was beim Login mit abu.Rabatt geprüft wird,
    // wird der Funktion der wirkliche PERSON_R übergeben, andernfalls 0.
    // Rückgabewerte sind der Preis und der Rabatt (in Prozent, 0 bei PERSON_R == 0).
    //
    //  result[0] Preis in Euro
    //  result[1] Rabatt in %
    //  result[2] Netto-Flag: ("1" = JA | "0" = NEIN)
    //  result[3] Netto-wie-Brutto-Flag: ("1"= JA | "0" = NEIN)
    //
</source>
<br>


eCommerce - Funktionen "intern verfügbar"
=== Miniscore ===
<source lang="delphi">
    Miniscore(PERSON_R,ARTIKEL_R) : boolean; command;
    //
    // Beantragt das Versenden von Miniscores des Artikels ARTIKEL_R
    // an den Benutzer PERSON_R.
    // Zum Versenden wird die eMail-Vorlage "PDF" benutzt.
    //
</source>
<br>


     procedure e_w_BedarfsAnzeige(AUSGABEART_R, ARTIKEL_R, POSTEN_R, MENGE: integer; Motivation: eMotivation);
=== LoginInfo ===
     // dem Agenten signalisieren, dass Bestell-Bedarf besteht
<source lang="delphi">
     LoginInfo(PERSON_R : integer) : boolean; command;
     //  
    // Beantragt das Versenden einer eMail mit den   
    // Zugangsdaten für den Login für diese Person.
    // ggf. wird das PAsswort neu gesetzt.
    // Zum Versenden wird die eMail-Vorlage "LOGIN" Benutzt.
    //
</source>
<br>


     procedure e_w_Wareneingang(AUSGABEART_R, ARTIKEL_R, MENGE: integer);
=== Senden ===
     // Waren im System verteilen
<source lang="delphi">
     Senden(GeraeteNo: String) : boolean; command;
    //
    // Importiert Neuerungen der OrgaMon-App und stellt das
     // neue Auftragsvolumen bereit.
    //
</source>


     function e_r_Lieferant(ARTIKEL_R, MENGE: integer): integer; {PERSON_R}
=== NextVal ===
     // Ermittelt den Lieferanten zu diesem Artikel
<source lang="delphi">
     NextVal(Generator: string) : integer; command;
     //
    // Datenbank-Funktion: Führt GEN_ID auf den angegebenen Generator (mit dem Inkrement 1) und liefert das Ergebnis als Integer zurück
    //
</source>


    function e_w_BestellBeleg(PERSON_R: integer): integer; {BBELEG_R}
== XMLRPC API (cOrgaMon-App) ==
    // liefert die Nummer eines Bestellbelegs, ev. wird einer neu erzeugt


     function e_r_Menge(AUSGABEART_R, ARTIKEL_R: integer): integer; { MENGE }
=== BasePlug ===
     // liefert die Lagermenge dieses Artikels in der angegebenen
<source lang="pascal">
     // Ausprägungsart
     function BasePlug: array of string; { Infos } query;
    //
     // liefert diverse Informations-String:
    //
    // 1) Arbeitsverzeichnis          J:\OrgaMon\Handy-Server\dat\
    // 2) Programmversion              OrgaMon Rev. 8.665
    // 3) Version einer Komponente    XMLRPC Rev. 1.021
    // 4) Version einer Komponente    ANFiX Rev. 1.069
    // 5) Host                        RAIB42
     // 6) Server Timestamp            13.09.21 12:46:02
    // 7) Aktuelle TAN.Aufrufe Bisher  78321.229
    // 8) Log-Kontext                  Q82GKNEDP
    // 9) Betriebssystem              wine-6.0
</source>


     function e_w_Menge(AUSGABEART_R, ARTIKEL_R, MENGE: integer): integer; { MENGE }
=== StartTAN ===
     // bucht eine Lagermenge ab oder zu, oder als read-Only
<source lang="delphi">
     // liefert die neue Lagermenge
     function StartTAN(GerateID:string) : integer; { TAN } command;
    //
    // erwartet eine 3 stellige Geräte Identifiktationsnummer wie z.B. 422
     // Die Funktion holt die passenden Gerätedaten von einem FTP Server
    // Ist das Gerät bekannt, so wird eine neue TAN Nummer gezogen, es wird
    // ein entsprechendes Verzeichnis geöffnet, und Upload Daten können
    // gezogen werden.
    // Format: GERAET,TAN,VERSION,OPTIONEN,UHR,MOMENT,IMEI,SALT
    //
    // GERAET    : z.B. 003
    // TAN        vormalige TAN
    // VERSION    OrgaMon-App Programmversion, z.B. 2.045
    // OPTIONEN  OrgaMon-App Programm-Optionen
    // UHR        Handy Datum - Uhr
    // MOMENT    aktueller Anfrage-Moment
     // IMEI      Handy Identifikation
    // SALT      Identifikations Salt
</source>
=== ProceedTAN ===
<source lang="delphi">
    procedure ProceedTAN (TAN:string); { 0=OK,Ansonsten Fehlercodes } command;
    //
    // verarbeitet alle Eingangsdaten und stellt die Ergebnisdateien
    // im entsprechenden TAN Verzeichnis zur Verfügung.
</source>

Aktuelle Version vom 22. Februar 2024, 18:32 Uhr

OrgaMon biete eine vielzahl von Kopplungsmöglichkeiten, die es dem Kunden oder Geschäftspartner ermöglichen auf Informationen und Daten zuzugreifen und Prozesse anzustossen.

  • Lieferanten

Lieferanten können ihre Systeme mit OrgaMon koppeln, und beispielsweise die Liste der noch zu liefernden Artikel abrufen

  • Kunden

Kunden können ebenfalls uber diese Schnittstelle Zahlungsverpflichtungen oder alte Belege einsehen.

Die B2B Fähigkeiten des OrgaMon ermöglichen es Dienstleistungen des OrgaMon von aussen zu benutzten. Dazu wird im Moment, die von jedem System beherschte XML-RPC Schnittstelle benutzt. Der benutzte TCP/IP Port ist frei einstellbar.

  • Webshop

Der Webshop nutzt neben der Datenbankverbindung vorzugsweise Funktion aus der XML-RPC-API.

Funktions Überblick

Der OrgaMon verwendet einen betriebswirtschaftlichen Kernel. In diesem Teil des Quelltextes (eCommerce) sammelt sich die Verarbeitungslogik für alle wesentlichen Buchungsvorgänge (z.B. Zahlungseingang, Warenzugang, Versandbuchung usw.). Eine ausgewählte Zusammenstellung von Kernel-Funktionen sind via XMLRPC von aussen zugänglich. Somit ist es dem TWebShop möglich grosse Teile der Logik via XMLRPC dem OrgaMon zu überlassen.

  • mit query; markierte Funktionen ändern nichts an der Datenbank, die Funktionen laufen "read-only" ab
  • mit command; markierte Funktion verändern die Daten der Datenbank, Datensätze werden geändert gelöscht oder eingefügt, Dateien im Dateisystem werden erstellt

XMLRPC API (cOrgaMon-Web)

BasePlug

    BasePlug():array of string; query;
    // BasePlug enthält wichtige Umgebungsinformationen für den konnektierten
    // WebShop. So erfährt der WebShop z.B. über BasePlug auf welche Datenbank
    // er konnektieren soll. Oder wo Musik-Downloads zu finden sind. BasePlug
    // verhindert redundante Parametrierung von Shop und OrgaMon. In der Regel
    // liefert BasePlug alle Infos an den Shop die er braucht.
    // 
    // Bedeutung der einzelnen Zeilen:
    //
    // [00] Datenbank-Verbindungsstring
    // [01] Anwendungsname mit Versionsnummer
    // [02] Datenbank-Layer mit Versionsnummer
    // [03] Indy Versions-Nummer
    // [04] PDF Pfad (public) (Parameter [[Systemeinstellungen#PDFPathShop]])
    // [05] Musik Pfad (Parameter [[Systemeinstellungen#MusicPath]])
    // [06] Pfad zu den Rechnungen (Parameter [[Systemeinstellungen#htmlPath]])
    // [07] Pfad der Artikel-Bilder (Icons und Logos auf externer Site) (Parameter [[Systemeinstellungen#BilderURL]])
    // [08] GUI: TPicUpload Versions-Nummer (Bilder hochladen)
    //      CONSOLE: Anzahl der bisher verarbeiteten Anfragen dieser Serverinstanz
    // [09] Tabellenkalkulation mit Versionsnummer (.xls Dokument-Ausgabe)
    // [10] jcl mit Versionsnummer
    // [11] jvcl mit Versionsnummer
    // [12] Artikel-Bilder-Pfad (Parameter [[Systemeinstellungen#ShopArtikelBilderURL]])
    // [13] zip mit Versionsnummer
    // [14] unzip mit Versionsnummer
    // [15] XMLRPC Versionsnummer "@" Hostname der Serverinstanz ":" XMLRPC-Port der Serverinstanz
    // [16] memcached Versionsnummer "@" [[Systemeinstellungen#memcachedHost]]
    // [17] Datenbank-Benutzer
    // [18] Datenbank-Passwort (verschlüsselt über privaten Key)
    // [19] wie [18]
    // [20] Datenbank-Client mit Versionsnummer
    // [21] PNG - Image Versionsnummer
    // [22] Datenbankhost
    // [23] Datenbankname
    // [24] CONSOLE:Uptime der Serverinstanz "@" Uptime des Servers
    //      GUI:N/A  
    // [25] exif mit Versionsnummer
    // [26] eindeutiger Kontext der Serverinstanz
    // [27] Betriebssystem der Serverinstanz


ArtikelSuche

    ArtikelSuche(SuchStr: string; [SORTIMENT_R : integer]): array of integer; { ARTIKEL_R } query;
    // Suchmaschine für artikelsuche
    // Optional ist die Suche eingeschränkt auf ein spezielles Sortiment


ArtikelPreis

    ArtikelPreis(AUSGABEART_R, ARTIKEL_R:integer): double; query;
    // liefert den Preis des Artikels in dieser Ausgabeart
    // kostenlos = 0; // 
    // cPreis_vergriffen = -1.0; // Artikel nicht mehr lieferbar.
    // cPreis_aufAnfrage = -2.0; // keine Preisinformation verfügbar


Land

    Land(LAND_R: integer): string; query;
    // liefert die Landesbezeichnung (als ISO-Kürzel)

KontoInfo

    KontoInfo(PERSON_R: integer): double; command;
    // liefert den Kontostand des Kunden (zu zahlen!)
    // erzeugt als Nebeneffekt die aktuelle "Mahnung.html"


BestellInfo

    BestellInfo(PERSON_R: integer): integer; command;
    // liefert den Lieferrückstand des Lieferanten (Erwartete Mengen!)
    // erzeugt als Nebeneffekt die aktuelle "Bestellung.html"


Bestellen

    Bestellen(PERSON_R: integer): integer; command;
    // erstellt aus dem Einkaufswagen des Kunden eine tatsächliche
    // Bestellung. Die (neue) Beleg-Nummer wird zurückgegeben.
    //


Vormerken

    Vormerken(PERSON_R: integer): integer; command;
    // erstellt aus dem Einkaufswagen des Kunden eine tatsächliche
    // Bestellung. Die (neue) Beleg-Nummer wird zurückgegeben.
    // 
    // Im Ergebnis wie "Bestellen", jedoch wird die Verarbeitung
    // im Hintergrund durchgeführt.


Buchen

    Buchen(BELEG_R, PERSON_R : integer): integer; command;
    //
    // a) BELEG_R>0
    //
    // führt bei einem bereits existierende Beleg (BELEG_R) dazu, dass alles direkt lieferbare
    // sofort verbucht wird und in den Status "geliefert" gesetzt wird. Es wird ein
    // Rechnungsbeleg erstellt, und die Ware wird ausgeliefert betrachtet.
    // 
    // BELEG_R = 0 führt zur Vertragsanwendung bei diesem Kunden
    // 
    // Rückgabewert: 
    // 
    // -1 : Es ist ein Fehler aufgetreten! Mehr Info dazu in der EREIGNIS Tabelle
    //  0 : Eine direkte Auslieferung ist nicht nötig oder möglich! Mehr Info dazu in der EREIGNIS Tabelle
    //  1 : Es wurde erfolgreich eine Auslieferung durchgeführt! In der Regel keine Infos in der EREIGNIS Tabelle
    //
    // b) (BELEG_R<1) und (PERSON_R>0)
    // 
    // der aktuelle Arbeitszeitbeleg der angegeben Person wird erstellt.
    //


ArtikelVersendetag

    ArtikelVersendetag(AUSGABEART_R, ARTIKEL_R:integer): integer; query;
    //
    // (NULL,0)
    //  NULL=wie 0
    //  0=keine Info über die Verfügbarkeit vorhanden
    //
    // (1..9)
    //  1=entgültig vergriffen
    //  2=zur Zeit vergriffen, Neuauflage jedoch ungewiss
    //  3=zur Zeit vergriffen, Neuauflage jedoch sicher
    //  4=Zustellung sofort per eMail
    //  5=kann sofort heruntergeladen werden
    //  6= -- bisher ohne Bedeutung --
    //  7= -- bisher ohne Bedeutung --
    //  8= -- bisher ohne Bedeutung --
    //  9= -- bisher ohne Bedeutung --
    //
    // GRÜNE STATI: (10..100)
    //  10=heute lieferbar  (=ist unbegrenzt am Lager, ohne Mengenangabe)
    //  11=morgen lieferbar (=wurde z.B. mit dieser Zusage bereits bestellt und kommt morgen)
    //  12=in 2 Tagen lieferbar... (=ist z.B. in dieser Zeit zu beschaffen)
    //  13=in 3 Tagen lieferbar...
    //  14= ... usw ...
    //
    // GRÜNE STATI: (101..20000100)
    //  101= heute lieferbar  (=ist am Lager, Lagermenge=1)
    //  102= heute lieferbar  (=ist am Lager, Lagermenge=2)
    //  103= heute lieferbar  (=ist am Lager, Lagermenge=3)
    //  ... usw.
    //
    //  GRÜNE STATI:
    // >20020101= Konkretes Lieferdatum (z.B. Erscheinungsdatum!)
    //  20031003= am 03.10.2003 lieferbar (da es z.B. an diesem Tag erscheint)
    //            (Vorbestellungen natürlich möglich)
    //


Verlag

    Verlag(VERLAG_R:integer): string; query;
    // Names des Verlages zu einem Verlags-RID
    // ACHTUNG: aus geschichtlichen Gründen sind VERLAG_R zumeist als PERSON_R(s)
    // zu verstehen!


Versandkosten

    Versandkosten(PERSON_R:integer): double; query;
    // Liefert passend zum "Kunden/Umfang des Einkaufswagen/Versandart des Kunden/Rabattstatus" die
    // passenden Versandkosten.

ArtikelInfo

    ArtikelInfo(AUSGABEART_R, ARTIKEL_R, LAND_R, VERLAG_R) : double, string; query;
    // Multi-Info-Funktion für weitere Informationen zu Artikel-Daten
    // Ergebnisse: Preis, "ISO-Landeskennzeichen" "-" "Verlag"


ArtikelRabattPreis

    ArtikelRabattPreis(AUSGABEART_R,ARTIKEL_R,PERSON_R) : array of double; query;
    //
    // wie Artikel-Preis, soll jedoch bei Kunden mit Rabatt-Code verwendet werden,
    // diese Funktion liefert noch die Rabatt-Zahl dazu!
    //


PersonNeu

    PersonNeu : integer; { PERSON_R } command;
    //
    // Eine neue Person wird angelegt. Der (neue) RID wird als Ergebnis ge-
    // liefert. Der Webshop kann nun weitere Eintragungen machen.
    //


Ort

    Ort(PERSON_R) : [array of] string; { Adress-Ortsangabe } query;
    //
    // Zu der angegebenen Person wird die Orts-Angabe zusammengestellt.
    // Dazu wird Land, Plz, Ortsname und Ortsteil landesspeziefisch
    // kombiniert.
    // In der Regel wird ein einzelner String zurückgegeben, es kann
    // aber auch ein mehrzeiliger Text zurückgegeben werden, wenn
    // in der Datenbank eine Mehrzeiligkeit der Ortsangabe gesetzt wurde
    // Im "Orts-Formatierungsstring" siehe [[Land]]


Rabatt

    Rabatt(PERSON_R) : boolean; query;
    // Zu der angegebenen Person wird ermittelt, ob sie Rabatte bekommt.
    // Wenn ja wird true, andernfalls false zurückzugeben.


Preis

    Preis(AUSGABEART_R,ARTIKEL_R,PERSON_R) : array of double; query;
    //
    // Ersetzt in Zukunft die beiden Methoden abu.ArtikelPreis und abu.ArtikelRabattPreis
    // Falls der Kunde Rabatte bekommt, was beim Login mit abu.Rabatt geprüft wird,
    // wird der Funktion der wirkliche PERSON_R übergeben, andernfalls 0.
    // Rückgabewerte sind der Preis und der Rabatt (in Prozent, 0 bei PERSON_R == 0).
    // 
    //  result[0] Preis in Euro
    //  result[1] Rabatt in %
    //  result[2] Netto-Flag: ("1" = JA | "0" = NEIN)
    //  result[3] Netto-wie-Brutto-Flag: ("1"= JA | "0" = NEIN)
    //


Miniscore

    Miniscore(PERSON_R,ARTIKEL_R) : boolean; command;
    // 
    // Beantragt das Versenden von Miniscores des Artikels ARTIKEL_R 
    // an den Benutzer PERSON_R. 
    // Zum Versenden wird die eMail-Vorlage "PDF" benutzt.
    //


LoginInfo

    LoginInfo(PERSON_R : integer) : boolean; command;
    // 
    // Beantragt das Versenden einer eMail mit den     
    // Zugangsdaten für den Login für diese Person.
    // ggf. wird das PAsswort neu gesetzt.
    // Zum Versenden wird die eMail-Vorlage "LOGIN" Benutzt.
    //


Senden

    Senden(GeraeteNo: String) : boolean; command;
    //
    // Importiert Neuerungen der OrgaMon-App und stellt das
    // neue Auftragsvolumen bereit.
    //

NextVal

    NextVal(Generator: string) : integer; command;
    //
    // Datenbank-Funktion: Führt GEN_ID auf den angegebenen Generator (mit dem Inkrement 1) und liefert das Ergebnis als Integer zurück
    //

XMLRPC API (cOrgaMon-App)

BasePlug

    function BasePlug: array of string; { Infos } query;
    // 
    // liefert diverse Informations-String:
    //
    // 1) Arbeitsverzeichnis           J:\OrgaMon\Handy-Server\dat\
    // 2) Programmversion              OrgaMon Rev. 8.665
    // 3) Version einer Komponente     XMLRPC Rev. 1.021
    // 4) Version einer Komponente     ANFiX Rev. 1.069
    // 5) Host                         RAIB42
    // 6) Server Timestamp             13.09.21 12:46:02
    // 7) Aktuelle TAN.Aufrufe Bisher  78321.229
    // 8) Log-Kontext                  Q82GKNEDP
    // 9) Betriebssystem               wine-6.0

StartTAN

    function StartTAN(GerateID:string) : integer; { TAN } command;
    // 
    // erwartet eine 3 stellige Geräte Identifiktationsnummer wie z.B. 422
    // Die Funktion holt die passenden Gerätedaten von einem FTP Server
    // Ist das Gerät bekannt, so wird eine neue TAN Nummer gezogen, es wird
    // ein entsprechendes Verzeichnis geöffnet, und Upload Daten können 
    // gezogen werden.
    // Format: GERAET,TAN,VERSION,OPTIONEN,UHR,MOMENT,IMEI,SALT
    //
    // GERAET    : z.B. 003
    // TAN        vormalige TAN
    // VERSION    OrgaMon-App Programmversion, z.B. 2.045
    // OPTIONEN   OrgaMon-App Programm-Optionen
    // UHR        Handy Datum - Uhr
    // MOMENT     aktueller Anfrage-Moment
    // IMEI       Handy Identifikation
    // SALT       Identifikations Salt

ProceedTAN

    procedure ProceedTAN (TAN:string); { 0=OK,Ansonsten Fehlercodes } command;
    // 
    // verarbeitet alle Eingangsdaten und stellt die Ergebnisdateien
    // im entsprechenden TAN Verzeichnis zur Verfügung.