#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile_x64=bt-dispatch-tool-v420.exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ; -------------------------------------------------------------------------------- ; ; ##### Versionen - History ##### ; ; ; ; 1.0 c. hebestreit erste Version ; ; 1.1 c. hebestreit angepasst an V3, ueberarbeitet ; ; 2.0 2017-02-06 h. denz erster Versuch: Umbau Vers. 1.0, Prototyp ; ; 2.1 2017-02-09 h. denz missing call PDFs txt Datei erzeugt, ; Spezialverarbeitung: txt Datei & Verzeichnis erzeugt, in slam farbig markiert ; ; 2.2 2017-02-09 h. denz Windows Splash Fenster Ausgabe: jeweilige laufende Funktion, ; msgbox Ausgaben angepaßt: nur Fehler modal ; ; 2.21 2017-02-10 h. denz Zielordner werden in neuem Unterverzeichnis erstellt: verteilung-- (eindeutig) ; Fortschrittsbalken in Callverteilung ; ; 2.22 2017-02-13 h. denz Eingabebox für call spalte, techniker name, call type in xls slam datei, ; und schreibe die Werte in ini Datei ; ; 3.0a 2017-02-14 h. denz ini-Datei erweitert um: Version, Anzahl der Techniker, pro Techniker ein record mit verfuegbar & Adressdaten ; Lesen ini Datei angepasst: Techniker-array[] befuellt; missing pdfs & Getronics mail erweitert um email-Adr. ; ; 3.0b 2017-02-17 h. denz txt-Datei um email AN Adr.zeile erweitert fuer missing pdsf, getronics calls, active techs ; Spalte email Adresse in Getronics txt Datei wieder raus ; ; 3.1 2017-02-20 h. denz Ini-Datei erweitert um neue keys: ; section Basis --> RunState: 0/1/2, RunDate: ; --> SlamPath: , --> GetronicsPath: ; --> RunStates: 0: Prog. nicht gelaufen - xls slam & Getronics Pfade leer ; 1: nach part 1: ini cfg, write act tech txt, get slam, einlesen getronics call & daten in slam hinten dran, slam farbig markiert ; 2: nach part 2: get call pdfs, verteile calls zu techniker, erzeuge getronics und missing call txts, Rest wie Mails etc. ; section SlamDatei --> Strasse..., PLZ..., Ort... ; ; 3.11 2017-02-22 h. denz Farben verbessert, div. Fehler in 3.1 raus: main loop auf rundate OR runstate, range.font.colorindex in Getronics doc gesetzt ; ; 3.2 2017-02-23 h. denz Ini-Datei erweitert um neue section [email] und diverse keys: ; section Basis --> PDFPath: , ; section SlamDatei --> VerteilDatum: Datum der (neuen) Verteilung ; --> section [email] --> MissPDFMailAN , --> MissPDFMailCC , --> MissPDFMailBetreff , ; --> GtronCallMailAN , --> GtronCallMailCC , --> GtronCallMailBetreff , ; --> SlamMailAN , --> SlamMailCC , --> SlamMailBetreff ; ; 3.3 2017-02-27 h. denz Fehler raus: keine Mehrfachnenung von email Adressen in missing call pdf mail CC:, Strasse in Getronics doc sauber (kein Rest hintendran) ; neue Funktion: --> markiere_slam_zeilen() -> ruft einlesen & copy getronics zu slam auf, ; -> PLZ 90.../91... automatisch an Hantzschmann, -> 93.../94... automatisch an Keller, ; -> Call Typ ARAL an Berger-Busse, -> Typ level 3 an Hebestreit, ; Call Zeilen in Slam nach Aufwand rot/hellrot/orange gefärbt: Server, 4h, level 3, quantum, ARAL, etc. ; ; 3.31 2017-02-28 h. denz erweitert: Getronics Mail CC: --> callinfo@bt... & hd@bt... bzw. ch@bt..., ; auto markieren: -> Type "info" - loeschen, = Dell, --> Call Num = E... oder M... - Transimex ; gekuerzt: missing call pdf Mail body: email Adr. Techniker raus ; ; 3.32 2017-03-02 h. denz erweitert - automatisch: --> Call Type sam ist Kaufland (Samsung Printer via Unisys), ; --> Call Num 21..... (7-stell.) ist psb, Call Num WR... (10-stell.) ist wwts, ; Call Type Elekta -> Bochmann, MS Hub -> Bochmann/Winkler, psb -> Kotysch ; ; 3.4 2017-03-06 h. denz Verteilung PDFs auf Techniker Unterordner: -> erzeuge Zus.fassg.text-Datei analog Output Window, slam mail body erweitert: -> "Anhang xls Slam Datei", ; markiere slam Zeilen erweitert: -> Getronics in PLZ 80.../81... ist immer Server Call, im Info-Feld vorne drangehaengt ; an alle vier txt Dateien: active techs, missing call pdfs, getronisc calls, slam summary Slam-Datum hinten an Name drangehaengt ; ; 3.41 2017-03-08 h. denz Einlesen Getronics Calls korrigiert: keyword für neue Seite / neuen Call ist nicht mehr Queue: "Field South East" (links oben), ; --> sondern "DeliveryLocation:" (zweite Zeile Mitte) ; markiere slam Zeilen erweitert: -> Getronics und 24*7 in Info ist immer Server Call, im Info-Feld vorne drangehaengt ; ; 3.42 2017-03-13 h. denz farbige Markierungen reduziert: -> Getronics Farbe raus in verteile pdf zu techniker; -> Dell gelb komplett raus; -> Getronics nur Call Num hellgelb; ; -> alle nur hell-xxx; wwts Call Num hellgruen ; ; 3.42 korr. 2017-03-32 h. denz INI Datei Fehler: [Basis] PDFPath= wurde nicht geschrieben, -> key write in hole_xls_slam() eingebaut ; ; 3.5 2017-03-13 h. denz neu: -> Protokoll-Unterverzeichnis "z_dispatch_protokolle" im Verteilungs-Unterverzeichnis; -> alle *.txt Dateien werden dann dorthin geschoben; ; neu: -> die Namen aller übrig gebliebenen Dateien im Call Ordner werden erfasst, in txt Datei geschrieben, und Mail erzeugt; ; Ini-Datei gekuerzt (Eintraege geloescht) in Section [email] um alle ...MailCC: - keys: ; -> MissPDFMailCC=, -> GtronCallMailCC=, -> SlamMailCC=, ; Ini-Datei erweitert um: ; --> neue section [Protokoll], mit den keys: ; -> actTechTxtFile = , -> MissPDFTxtFile = , GtronTxtFile = , RestPDFTxtFile = , SlamTxtFile = = ; --> section [email] -> RestPDFMailAN , -> RestPDFMailBetreff , ; ; 3.51 2017-04-06 h. denz erweitert: --> markiere_slam_zeilen() -> Vorbelegung Techniker farbig blau (PLZ) bzw. magenta (Qualif./Anzahl) hinterlegt ; Pudos korrigiert / DHL Ausnahmen - automatisch NACH Zuteilung Techniker zu PLZ: ; --> wenn PLZ = 93333 [[Neustadt/Do]] und Samsung (Kaufland oder transimex) dann "ilmtalIT" [[und nicht Keller]] ; --> wenn PLZ = 84130 [[Dingolfing]] und Samsung (Kaufland oder transimex) dann Keller ; --> wenn PLZ = 84307 [[Eggenfelden]] und Samsung (Kaufland oder transimex) dann Keller ; ; 3.6. 2017-04-11 h. denz markiere_slam_zeilen() umgebaut: --> lies die beiden kompletten XLS Spalten nach call-info[] und call-type[] ein, ; --> Vergleiche & Pruefungen im array - schneller ; ; 3.7 2017-04-25 h. denz zerlegen der Source in drei Programmteile: Hauptprogramm, functs-1 vor Einteilung, functs-2 nach Einteilung ; vorbereiten auf 3.71: Ersatz Hauptprogramm (inkl. Flusssteuerung) durch entspr. GUI ; ; 3.71 2017-05-14 h. denz erweitert: --> hole_slam_datum() vom Kalender; lies_cfgfile() um section GtnSlamDatei ; ; 3.72 2017-06-01 h. denz Umbau m2/gtn xls Spalten setzen von inputbox auf comboboxen ; ; 3.73 2017-06-09 h. denz erweitert: --> verteile_calls_zu_techniker: mitzaehlen welcher Techniker Calls erhaelt ; ; 3.74 2017-06-20 h. denz Korrekturen laut Liste ch/sw: ; - jede Funktion gibt am Ende eine Fertig-Nachricht aus (msgbox), die mit OK zu bestaetigen ist; ; Erst dann daf die naechste Funktion aufgerufen werden ; - bisher wurden beim Start alle alten Werte als Textlabels eingetragen wie z.B. Datum, Slam DateiName ... und immer ohne Hintergrund; ; --> neu: leere Felder; und nach der Funktion steht dann der richtige Text drin, gruen hinterlegt ; - die automat. Erstellung der Techniker Unterverzeichnisse am Anfang ist (ersatzlos) entfallen; ; --> i.d. Fkt.: verteile calls zu techniker wird bereits bei Bedarf ein entspr. (Techniker) Unterverzeichnis erzeugt ; - die Call Typen Erkennung (oefne m2 xls slam Datei) wurde erweitert: ; --> 6-stellig, 90... ist Vista, 7-stellig, 14... ist Nordland, 10-stellilg, WR... ist WWTS ; und bereinigt: bei 8-stellig, 44... (Unisys) wird: ; --> bei info = "info" --> als Type Dell eingetragen, sonst: der info - Text nach Type kopiert (insbes. WWTS; Merck, Vista, ARAL...) ; - die Getronics XLS wird interaktiv geöffnet und ohne Rueckfragen geschlossen ; - die Verarbeitung der Getronics XLS Datei (Einlesen in m2 Slam) wurde veraendert (vgl. voriger Punkt): ; das Loeschen der Formate beim Oeffnen wurde komplett heraus genommen, dafuer wird die letzte Zeile (=Anzahl Calls) manuell gesucht, ; rueckwaerts, max. 4 Reihen zurueck & Inhalt auf Plausibilitaet geprueft ; - Einlesen der Getronics XLS Slam Datei erweitert: ; --> Auswertung der beiden Spalten "Customer Site Name" (Dell, Toshiba, Honeywell...) und "Appointment Date Time" (= MYC/MYD DEF), ; --> beim Kopieren von ProdDesc (= Gtn call info) nach (m2) Info wird: ; falls customer site name = "DELL" ; falls prod desc enthaelt "24*7" -> wird appointm. date time an info vorne dran gehaengt (= Uhrzeit des Einsatzes) ; sonst (nicht DELL) ; -> wird der erste Name (bis Leerzeichen, Toshiba etc.) an die Info vorne dran gehaengt ; - Ini Datei erweitert: --> zwei neue Parameter in section GtnSlamDatei: GtnCallType und GtnDate ; - die Farben wurden vervollstaendigt und angepasst wie am 15.5. besprochen ; - falls ein Call nicht zugeteilt wurde (Funktion 9. verteile calls zu techniker - geprueft ob Techniker leer ist) ; --> so landet er im Unterverzeichnis "nicht_zugeteilt" (neben den entspr. Techniker-Unterordnern) ; - 9. verteile Calls wurde veraendert: ; --> keine Meldungen mehr bei: ...nicht gefunden, ...ist Getronics, ...Techniker Ordner nicht vorhanden, wird erstellt ; ; 3.75 2017-06-21 h. denz GUI erweitert: --> Mauscursor vor jeder Funktion auf WAIT geaendert, nach der Funktion zurueck auf ARROW ; PSB hat jetzt die 22... erreicht, Dell die 45... (Call Typen Klassifizierung beim Oeffen der m2 XLS Slam Datei) ; ; 3.8 2017-08-18 h. denz erst Anpassung an die neue m2 xls Slam Datei: erste Spalte (neu) ist nun "Project" ; nicht mehr aufrufen der Funktion: autodetect type ; ; 3.9 2018-03-13 h. denz - Ueberpruefung/Warnung auf: ; --> Anzahl m2 PDFs > 2 * Anzahl Calls im m2 Slam ; --> rest calls > 50 ; - INI Datei erweitert: ; --> zwei Zeilen: m2SlamMailAN=, und ; m2SlamMailBetreff=Callverteilung Bluetech m2 Calls fuer ; - erzeuge emails erweitert: ; --> erzeuge m2 Kopie der (fertigen) Slam Datei (xls) ; --> loescche darin alle Zeilen mit Call Type = Getronics ; --> erzeuge zusaetzliche Mail an m2 (vgl. INI Datei) mit bereinigter m2 Call Slam Datei ; - erzeuge Protokoll-Dateien erweitert: ; --> zusaetzlich ; ; 3.91 2018-03-13 h. denz - Farben / buttons erweitert: --> color black 0x0 ; - setze Textfarbe der folgenden (*) Buttons auf ROT: ; --> Datum setzen, m2 Slam Datei, Call PDF, Getroncis XLS, Techniker verwalten, verteile Calls, erzeuge Mails ; (*) bei geteiltem Programmlauf: alles gemacht bis einschl. Einteilung (und OHNE verteile Calls & erzeuge Mails) ; --> muessen diese Funktionen beim zweiten Lauf aufgerufen werden; ; zusaetzlich muss auch das m2 Call PDF Verzeichnsi erneut befuellt werden: mit m2 PDFs UND Getronics .PDFs (kein WO-.PDF) ; ; 4.0 2019-03-23ff h. denz Neue Version (alpha); Anpassung an die seit 3.91 geänderten inputs und Abläufe ; - andere (neue) Calltypes m2 zu prüfen/einfärben ; --> Liste der bisher verwendeten m2 Calltypes aus m2one geholt (Ref. Monat März) ; --> Prüfung in m2slam_aufbereiten3() erweitert um: ; - Überprüfung im (m2) Slam, wie viele Techniker bereits eingeteilt (Option nach 7.) ; --> Listboxes der act techs & anz techs (bisher für ca. 16/17 Platz) auf ca. 20 erweitert (unt. Rand + 1 log. Reihe buttons) ; --> neue Funktion: techcalls_zaehlen() ; --> Menu erweitert um Button und Funktion: $techcalls_zaehlen_btn ; Mails angepaßt: ; --> Mail an m2 gelöscht (m2callmail() hinfällig); Mail nicht mehr erzeugt ; --> Ini-Datei um die entspr. Einträge bereinigt: m2CallMail... s.u. ; Ini-Datei angepaßt, section [email]: ; --> erweitert: Mailtext a 3 Zeilen in Ini-Datei verlagert (Mail: slam) ; --> reduziert: Mailtexte für m2callmail gelöscht) ; ; 4.0a 2019-05-17ff h. denz Funktion erzeuge_gtn_narra_txt($narrative,$txtfile) modifiziert: ; --> Parameter $narrative wird zu Gtn xls handle & row-number in Gtn XLS file ; --> auslesen aller indizierten Parameter aus Gtn XLS file: ; GtnCallNummer, GtnCallType (ex CustSite), GtnInfo, GtnStrasse, GtnPLZ, GtnOrt, GtnDate, ; und wie bisher: GtnNarra ; und schreiben in die entspr. Gtn Call txt Datei ; inkl. Zeilenumbrüche: Aufbereiten narrative Text aus XLS Zelle mit @CRLF ... ; Funktion akt_gtnxlscols() korrigiert: Ausgabe call type und info war Position vertauscht ; Funktion 6, main loop: Map starten geändert auf deutsche Version easy map maker: ; --> Link: https://www.easymapmaker.com/de/advanced ; Funktion m2slam_aufbereiten3() erweitert: ; --> calls von BTENGAGE in blau, rest Neue / lt. m2one in grün ; ; 4.0b 2019-05-23 h. denz Funktion 8, main loop angepaßt: mapmaker auf deutsch (vgl. Vers. 4.0a) ; Funktion erzeuge_gtn_narra_txt($narrative,$txtfile) modifiziert: ; --> weitere Zeilenumbrüche in narrative ; ; 4.0c 2019-06-17 h. denz Menupunkt 7 (Opt.), Techniker verwalten erweitert: ; --> Funktion techniker_verwalten() erweitert: ; --> schreibe für alle Techniker (lt. globaler Liste) aktiv-Status in INI-Datei ; ; 4.1a 2020-04-07ff h. denz -- Entwicklungs- / Zwischenversion -- nicht veröffentlicht / freigegeben ; Funktionen für Getronics Slam File Variante 2 (GTN DOC etc.) stillgelegt (auskommentiert) ; --> Menüpunkte "3b. Getronics Doc wählen" und "5b. Gtn Doc einlesen" - im Hauptmenu stillgelegt ; --> Funktionen hole_getronics_doc(), copy_gtron_calls_zu_slam(), kopiere_getronics_doc() in ...func_1/2 stillgelegt (comment start - end) ; neue Funktion: bereinige_xls_slam() ; --> Aufruf im Hauptmenu, Fkt. 2. m2 Call PDF Verzeichnis auswaehlen, ganz am Anfang... ; --> korrigiert Rechtschreibfehler in Spalten: ; Straße: STRAZE, STRAßE, STRABE, STRASSE -> Strasse ; Orte: MUNCHEN, MÜNCHEN -> Muenchen ; NURNBERG, NÜRNBERG -> Nuernberg ; WEZLING -> Wessling ; SCHLEIZHEIM -> Schleissheim ; WEIZENBURG -> Weissenburg ; ; 4.1b 2020-04-20ff h. denz -- Entwicklungs- / Zwischenversion -- nicht veröffentlicht / freigegeben ; Funktionen für Getronics Slam File Variante 2 (GTN DOC etc.) gelöscht (vgl. 4.1a) ; --> Ini-Datei, section [Basis]: GetronicsPath gelöscht ; --> Fkt. lies-cfg-file() angepaßt: entry read s.o. gelöscht ; --> Fkt. kopiere_getronics_doc() gelöscht - Aufruf im Hauptmenu gelöscht ; --> globale Variable "$ggetronics_file" gelöscht ; Tool erweitert: Auswertung neue Spalte: part location (zwischen Eta Status und Info) ; --> Ini Datei erweitert, section [SlamDatei]: PartLocation = Spalte für Part Location ; --> neue globale Variable $gxls_spalte_partloc ; --> Fkt. lies-cfg-file() erweitert: lies [SlamDatei]: PartLocation ; --> Fkt. schreibe_m2xlscols_file() erweitert: PartLocation ; --> Fkt. ausgabe_m2xlscols() geändert/erweitert: ; $m2xls_col_btn Breite erweitert, $m2xls_col_list list view item geändert/erweitert ; --> Fkt. m2-Slam xls-Spalten setzen (Hauptmenu) erweitert/angepaßt ; --> Fkt. akt_xls_cols() erweitert (zus.: fixe [Zahlen] Positionen umgestellt auf global consts) ; Funktion m2slam_aufbereiten3() erweitert auf PartLocation ; --> check auf "na" - dann Text in Zelle PartLocation rot ; --> check Call Type auf " AM" / " PM" (rechts) - dann Text rot (s.o.) ; ; 4.1c 2020-04-27ff h. denz -- Entwicklungs- / Zwischenversion -- nicht veröffentlicht / freigegeben ; Hauptprogramm modifiziert: ; --> Protokollierung ein/aus auf default EIN (on = 1) gesetzt ; --> Gtn_narrative_txt_erzeugen auf default EIN (J) gesetzt ; ; 4.10 2020-05-04 h. denz veröffentlicht: Stand 4.1c bereinigt & verschönert, dokumentiert... ; ; 4.20 2020-05-19ff h. denz Tool erweitert: "bitte schieben" (als Pseudo-Techniker Name: "schieben") ; --> ini-Datei erweitert: section [email]: SchiebeMailAN, SchiebeMailBetreff, SchiebeMailText1 / 2 / 3 ; sowie: MissPDFMailText1 / 2 / 3 aus Sourcecode (fix) in INI Datei verlegt ; GtronCallMailText1 / 2 / 3 aus Sourcecode (fix) in INI Datei verlegt ; RestPDFMailText1 / 2 / 3 aus Sourcecode (fix) in INI Datei verlegt ; section [Protokoll]: SchiebeCallsTxtFile ; --> neue (entspr.) globale Variablen: $bt_max_schiebe_call_cnt, $gschiebe_calls[$bt_max_schiebe_call_cnt+1] ; für Mail: $g_schiebe_mail_an, $g_schiebe_mail_subj, $g_schiebe_mail_text1 / 2 / 3 ; für Protokoll: $bt_schiebe_calls_txtfile ; --> lies_cfg_file() erweitert: lies SchiebeMailAN, SchiebeMailBetreff, SchiebeMailText1 / 2 / 3 ; --> Funktion 7: techcalls_zaehlen() erweitert: Pseudo-Name "schieben" extra gezählt (...da nicht aktiver Techniker) ; 9: verteile_calls_zu_techniker() angepaßt: Schiebe-Calls werden in (reserviertes) Verz. "schieben" verschoben, ; und im schiebe call array protokolliert ; --> neue Funktion erzeuge_schiebe_calls_txt() -> Protokollierung der zu schiebenden Calls ; --> neue Funktion erzeuge_schiebe_calls_mail() -> analog missing / Getronics Call PDFs ; Protokoll Ausgabe in splashtext window modfiziert: ; --> Fenster vergrößert auf 900 * 650; Schrift Arial kleiner (von 12) auf 11 ; --> Schriftgröße auf Arial 11 reduziert ; --> jede Fkt. in main loop: beginnt mit , und endet mit CRLF ; --> Unterfunktionen mit Fortschrittsbalken modifiziert: nur eine Zeile Ausgabe ; --> Adresse bereinigen(), verteile calls zu techniker(), plz vorverteilen() in einer Zeile ; ; ; -------------------------------------------------------------------------------- ; ; ##### Struktur Ini-Datei ##### ; ; Version: 4.2 ; ; prinzipieller Aufbau: ; [SectionName] ; Key=Value ; konkret: 5 + 14/15 (max. 20)... Sections: "Basis", "SlamDatei", "GtnSlamDatei", "email", "Protokoll" und pro Techniker eine Section "" ; [Basis] ; Version=4.2 ; RunState=0/1/2... ; RunDate= ; SlamPath= ; GtnSlamPath= ; DispPath= ; m2PDFPath= ; GtnPDFPath= ; ; [SlamDatei] ; ...hier stehen die Spaltenbezeichnungen ('A'..'Z') in der eingegangenen Slam Datei (xlsx) für: Call-Nummer - Techniker-Name - Call-Type - Call-Info... ; VerteilDatum= ; CallNummer=B ; Techniker=D ; Type=A ; PartLocation=G ; Info=H ; Strasse=I ; PLZ=J ; Ort=K ; ; [GtnSlamDatei] ; GtnCallNummer=A ; GtnCallType=E ; GtnInfo=K ; GtnStrasse=I ; GtnPLZ=G ; GtnOrt=H ; GtnDate=P ; GtnNarra=T ; ; [email] ; MissPDFMailAN= ; MissPDFMailBetreff=fehlende Call PDF/txt/Info Dateien fuer ; MissPDFMailText-1= ; MissPDFMailText-2= ; MissPDFMailText-3= ; GtronCallMailAN= ; GtronCallMailBetreff=Callverteilung Bluetech Getronics Calls fuer ; GtronCallMailText-1= ; GtronCallMailText-2= ; GtronCallMailText-3= ; SlamMailAN= ; SlamMailBetreff=Einteilung fuer ; SlamMailText-1= ; SlamMailText-2= ; SlamMailText-3= ; RestPDFMailAN= ; RestPDFMailBetreff=uebrig gebliebene Call PDF/txt/Info Dateien fuer ; RestPDFMailText-1= ; RestPDFMailText-2= ; RestPDFMailText-3= ; SchiebeMailAN= ; SchiebeMailBetreff=Bitte schieben - Zu viele Calls fuer ; SchiebeMailText-1=Hallo und Guten Abend, ; SchiebeMailText-2=Die Einteilung ist fertig - allerdings haben wir zu viele Calls für unsere Kapazität ! ; SchiebeMailText-3=Wir bitten darum, die folgenden Calls zu schieben (sie wurden nicht eingeteilt): ; ; [Protokoll] ; actTechTxtFile= ; MissPDFTxtFile= ; GtronTxtFile= ; RestPDFTxtFile= ; SlamTxtFile= ; SchiebeCallTxtFile= ; ; ...es folgen die Techniker; jeder Mann ist eine [section] ; ...fuer jeden einzelnen Techniker: Name = [section], aktiv (=jetzt verfuegbar) J/N, email-Adresse, Ort ; ...Anzahl max. 20... ; [Berger] ; aktiv=J ; email=db@bluetech-it.de ; Strasse= ; PLZ= ; Ort=Augsburg ; [Bochmann] ; ... ; ... ; [Winkler] ; ... ; -------------------------------------------------------------------------------- ; ; ##### externe Definitionen - includes ##### ; ; #include #include #include #include #include #include #include #include #include #include #include #include #include #include ; -------------------------------------------------------------------------------- ; ; ##### globale Konstanten ##### ; ; const $bt_dispatch_tool_name = "bt-dispatch-tool_v42" const $bt_dispatch_tool_version = "4.2" const $bt_dispatch_cfg_file = $bt_dispatch_tool_name & ".ini" const $bt_dispatch_konfig_file = "btdt_konfig_v40.xlsx" const $bt_dispatch_help_file = $bt_dispatch_tool_name & ".chm" const $bt_prot_path = "z_Dispatch_Protokoll" const $bt_acttech_txtfile = "active-technicians-" const $bt_acttech_txt1 = "Die Liste der aktiven Techniker, inkl. email Adresse." const $bt_gtron_pdf_fname = "WO_*.PDF" ; search pattern for Getronics Call PDF files const $bt_gtron_txtfile = "getronics-calls-" ; Vers. 4.2: Texte in INI Datei verlagert const $bt_m2_info_slamfname = "_m2-info" const $bt_m2_txtfile = "m2-calls-" ; Vers. 4.0 Mail mit m2 Slam an m2 entfallen -> upload m2 slam in m2one const $bt_miss_pdf_txtfile = "missing-call-pdfs-" ; Vers. 4.2: Texte in INI Datei verlagert ; Vers. 4.2 neu: wenn wg. Kapazitätslimit zu viele Calls -> bitte schieben const $bt_schiebe_calls_txtfile = "schiebe-calls-" const $bt_rest_pdf_txtfile = "rest-pdfs-" ; Vers. 4.2: Texte in INI Datei verlagert ; Vers. 4.0 hier als const entfallen: 3 Textzeilen für Mail an Techniker in INI-Datei verlagert --- siehe unten bei den globals const $bt_slam_txtfile = "slam-calls-summary-" const $bt_max_call_cnt = 350 ; max. verarbeitbare Calls pro Verteilung const $bt_max_act_tech_cnt = 20 ; max. verfuegbare/aktive Techniker im Einsatz const $bt_max_miss_pdf_cnt = 50 ; max. fehlende Call PDFs const $bt_max_gtron_call_cnt = 150 ; max. Getronics Calls const $bt_max_rest_pdf_cnt = 50 ; max. uebrige Call PDFs const $bt_max_schiebe_call_cnt = 50 ; Vers. 4.2 neu: max. zu schiebende Calls ; windows/Word/Excel rgb colors for Background ; Version 1: red is low byte for Excel cells const $bt_xls_mark_red = 0x0000FF ; full colors const $bt_xls_mark_green = 0x00FF00 const $bt_xls_mark_dblue = 0xFF0000 const $bt_xls_mark_blue = 0xFF8888 const $bt_xls_mark_yellow = 0x00FFFF const $bt_xls_mark_magenta = 0xFF00FF const $bt_xls_mark_cyan = 0xFFFF00 const $bt_xls_mark_mred = 0x8888FF ; middle colors const $bt_xls_mark_mgreen = 0x88FF88 const $bt_xls_mark_mblue = 0xFF8888 const $bt_xls_mark_lred = 0xDDDDFF ; light colors const $bt_xls_mark_lgreen = 0xDDFFDD const $bt_xls_mark_lblue = 0xFFDDDD const $bt_xls_mark_lyellow = 0xBBFFFF const $bt_xls_mark_lmagenta = 0xFF88FF const $bt_xls_mark_orange = 0x0088FF const $bt_xls_mark_lorange = 0x88BBFF const $bt_xls_mark_rose = 0xCC99FF const $bt_xls_mark_brown = 0x008888 ; version 2: red is high byte for Windows Gui const $bt_mark_red = 0xFF0000 ; full colors const $bt_mark_green = 0x00FF00 const $bt_mark_blue = 0x0000FF const $bt_mark_cyan = 0x00FFFF const $bt_mark_magenta = 0xFF00FF const $bt_mark_yellow = 0xFFFF00 const $bt_mark_mred = 0xFF8888 ; middle colors const $bt_mark_mgreen = 0x88FF88 const $bt_mark_mblue = 0x8888FF const $bt_mark_mcyan = 0x88FFFF const $bt_mark_mmagenta = 0xFF88FF const $bt_mark_myellow = 0xFFFF88 const $bt_mark_lred = 0xFFDDDD ; light colors const $bt_mark_lgreen = 0xDDFFDD const $bt_mark_lblue = 0xDDDDFF const $bt_mark_lcyan = 0xDDFFFF const $bt_mark_lmagenta = 0xFFDDFF const $bt_mark_lyellow = 0xFFFFDD const $bt_mark_orange = 0xFF8800 ; others const $bt_mark_lorange = 0xFFBB88 const $bt_mark_rose = 0xFF99CC const $bt_mark_brown = 0x808000 const $bt_mark_black = 0x000000 ; default = black ; Word-XLS-Win VBA color indices for text const $bt_colidx_red = 6 const $bt_colidx_green = 11 const $bt_colidx_lgreen = 4 const $bt_colidx_blue = 2 const $bt_colidx_lblue = 3 const $bt_colidx_yellow = 7 const $bt_colidx_magenta = 5 const $bt_colidx_cyan = 8 const $bt_colidx_greenblue = 10 const $bt_colidx_brown = 13 ; positions and sizes for GUI windows and buttons const $bt_guiwnd_width = 920 const $bt_guiwnd_height = 690 const $bt_guiwnd_left = 175 const $bt_guiwnd_top = 120 const $bt_guibtn_width = 140 const $bt_guibtn_height = 30 ; x-positions of buttons and labels: 5 columns const $bt_guibtn_x1 = 20 ; linker Rand, 1. (linke) Spalte Buttons const $bt_guibtn_x2 = 180 ; 2. Spalte const $bt_guibtn_x3 = 340 ; 3. Spalte - Mitte const $bt_guibtn_x4 = 470 ; 4. Spalte const $bt_guibtn_x5 = 620 ; 5. Spalte const $bt_guibtn_x6 = 760 ; 6. = ganz rechte Spalte Buttons ; y-positions of buttons and labels: 16 rows ; Vers. 3.7.3 const $bt_guibtn_y0 = 20 ; oberer Rand, 1. = oberste Zeile fuer die Buttons const $bt_guibtn_y1 = 60 const $bt_guibtn_y2 = 100 const $bt_guibtn_y3 = 150 const $bt_guibtn_y4 = 190 const $bt_guibtn_y5 = 230 const $bt_guibtn_y6 = 280 const $bt_guibtn_y7 = 320 const $bt_guibtn_y8 = 360 const $bt_guibtn_y9 = 400 const $bt_guibtn_y10 = 440 const $bt_guibtn_y11 = 480 const $bt_guibtn_y12 = 520 const $bt_guibtn_y13 = 560 const $bt_guibtn_y14 = 600 const $bt_guibtn_y15 = 640 ; ... 16. Zeile Buttons ; positions and sizes for GUI listview windows -- slam spalten & techniker listen const $bt_guilbl_width = 560 const $bt_guilbl_height = 20 const $bt_guilist_width = 400 ; list view - XLS Slam Spalten - m2 & Gtn const $bt_guilist_lwidth = 560 ; ultra long version const $bt_guilist_height = 50 const $bt_guitlist_width = 120 ; GUI Techniker Liste const $bt_guitlist_height = 280 ; Vers. 4.0 auf 20 Einträge erhöht: von 230 auf 270 -- Vers. 4.2 auf 280 ; positions and sizes for GUI combobox lists windows -- m2 & gnt xls slam spalten ändern const $bt_guicombolist_width = 260 const $bt_guicombolist_height = 360 const $bt_guicombolbl_x = 50 const $bt_guicombolbl_width = 100 const $bt_guicombolbl_height = 20 const $bt_guicombolbl_y0 = 60 const $bt_guicombolbl_y1 = 90 const $bt_guicombolbl_y2 = 120 const $bt_guicombolbl_y3 = 150 const $bt_guicombolbl_y4 = 180 const $bt_guicombolbl_y5 = 210 const $bt_guicombolbl_y6 = 240 const $bt_guicombolbl_y7 = 270 const $bt_guicombobox_x = 160 const $bt_guicombobox_width = 30 const $bt_guicombobox_height = 100 const $bt_guicombobox_y0 = $bt_guicombolbl_y0 - 5 const $bt_guicombobox_y1 = $bt_guicombolbl_y1 - 5 const $bt_guicombobox_y2 = $bt_guicombolbl_y2 - 5 const $bt_guicombobox_y3 = $bt_guicombolbl_y3 - 5 const $bt_guicombobox_y4 = $bt_guicombolbl_y4 - 5 const $bt_guicombobox_y5 = $bt_guicombolbl_y5 - 5 const $bt_guicombobox_y6 = $bt_guicombolbl_y6 - 5 const $bt_guicombobox_y7 = $bt_guicombolbl_y7 - 5 const $bt_guicombo_ok_x = 90 const $bt_guicombo_ok_y = 310 const $bt_guicombo_ok_width = 80 const $bt_guicombo_ok_height = 30 ; -------------------------------------------------------------------------------- ; ; ##### globale Variable ##### ; ; global $debuggen = 0 ; 0 no debug outputs, 1 do it global $bt_workpath = "_" ; working dir = script dir global $btdt_wnd ; GUI main window handle global $bthlpfile_cmd = 'hh.exe "bt-dispatch-tool-v42.chm"' global $bt_out_title = "Bluetech Dispatch Tool" global $bt_out_version = "Vers. " global $bt_title_text = $bt_out_title & " - " & $bt_out_version & $bt_dispatch_tool_version global $bt_out_text = "_" global $gprot_wnd ; window handle for protocol: splash text GUI global $ghelp_wnd ; window handle for help: pure text GUI global $gxls_slam_file = "_" ; XLS Slam Datei aus aktueller Distri mit den calls drin global $gxls_slam_date = "_" ; Slam Datei ist fuer (filename format xx-yy-zzzz) global $gm2call_directory = "_" ; directory der PDF Call Dateien global $gm2pdf_files_count = 0 ; Anzahl der PDF Call Dateien global $gm2call_count = 0 ; Anzahl der Calls in der XLS Slam Datei global $gm2_info_file = "_" ; m2 info Slam Datei für Mail an m2 (ohne Getronics calls drin) global $gxls_spalte_call = "_" ; Name der Spalte in XLS Slam Datei fuer Call-Nummer global $gxls_spalte_techniker = "_" ; ... Techniker-Name global $gxls_spalte_type = "_" ; ... Call-Type (insbes. Getronics) global $gxls_spalte_info = "_" ; ... Call-Info global $gxls_spalte_partloc = "_" ; Vers. 4.1b neu: ... Part Location global $gxls_spalte_strasse = "_" ; ... Call-Strasse global $gxls_spalte_plz = "_" ; ... Call-PLZ global $gxls_spalte_ort = "_" ; ... Call-Ort global $ggtn_slam_file = "_" ; XLS Slam Datei aus aktueller Distri mit den calls drin ; global $ggetronics_file = "" Vers. 4.1a gelöscht ; Getronics Call Datei: deliverylist.doc aus aktueller Distri mit den Getroncis Calls drin global $ggtn_call_directory = "_" ; directory der PDF Call Dateien global $ggtnpdf_files_count = 0 ; Anzahl der PDF Call Dateien global $ggtncall_count = 0 ; Anzahl der Calls in der XLS Slam Datei global $ggtn_xls2txt = "J" ; automat. Erzeugung der txt files im Gtn call pdf directory aus dem Slam narrative ; Vers. 4.1c: default ist J (Ja) global $ggtn_spalte_call = "_" ; Name der Spalte in Getronics Slam Datei fuer Call-Nummer - WO num global $ggtn_spalte_type = "_" ; ... Call-Type - customer site -- Vers. 4.0 new: customer name / company global $ggtn_spalte_info = "_" ; ... Call-Info - prod desc global $ggtn_spalte_strasse = "_" ; ... Call-Strasse - visit addr global $ggtn_spalte_plz = "_" ; ... Call-PLZ - visit zip code global $ggtn_spalte_ort = "_" ; ... Call-Ort - visit place global $ggtn_spalte_datetime = "_" ; ... Call-Date - appointment date time -- fuer 24*7 & MYC DEF noetig global $ggtn_spalte_narrativ = "_" ; ... Call-Narrative - some call details global $g_miss_pdf_mail_an = "" ; missing pdfs mail / alle betr. Techniker global $g_miss_pdf_mail_subj = "" global $g_miss_pdf_mail_txt1 = "" ; Vers. 4.2 neu: 3 Zeilen Mail Text für Missing PDF Mail in INI Datei verlagert global $g_miss_pdf_mail_txt2 = "" global $g_miss_pdf_mail_txt3 = "" global $g_gtron_mail_an = "" ; getronics info mail global $g_gtron_mail_subj = "" global $g_gtron_mail_txt1 = "" ; Vers. 4.2 neu: 3 Zeilen Mail Text für Getronics Mail in INI Datei verlagert global $g_gtron_mail_txt2 = "" global $g_gtron_mail_txt3 = "" global $g_slam_mail_an = "" ; Einteilungs-Mail / alle betr. Techniker global $g_slam_mail_subj = "" global $g_slam_mail_txt1 = "" ; Vers. 4.0 verlagert: Mail-Text nicht mehr const, sondern 3 Zeilen in INI-Datei lies-cfg-file() global $g_slam_mail_txt2 = "" global $g_slam_mail_txt3 = "" ; Vers. 4.0 komplett entfallen: m2 info mail mit m2 Slam im Anhang global $g_rest_pdf_mail_an = "" ; übrig gebliebene Call PDFs Mail an m2 global $g_rest_pdf_mail_subj = "" global $g_rest_pdf_mail_txt1 = "" ; Vers. 4.2 neu: 3 Zeilen Mail Text für Rest PDF Mail in INI Datei verlagert global $g_rest_pdf_mail_txt2 = "" global $g_rest_pdf_mail_txt3 = "" global $g_schiebe_mail_an = "" ; Vers. 4.2 komplett neu: zu schiebende Calls info mail an m2 global $g_schiebe_mail_subj = "" global $g_schiebe_mail_txt1 = "" global $g_schiebe_mail_txt2 = "" global $g_schiebe_mail_txt3 = "" global $gdst_dispatch_path = "_" ; Zielverzeichnis für Technikerunterordner mit Call PDF files und Getronics Ordner/doc, ; sowie xls slam Datei und die Protokoll txt files ; Vers. 4.0 erweitert: alle globalen arrays in der ersten Dim. um 1 erhöht; da Index 0 intern reserviert ; damit sind echte ...max...cnt Inhalte möglich (auf Index ...max...) ; Vers. 4.2 erweitert:: Erhöhung der ersten Dim um zus. 1 (Reserve wg. Überlauf, da wenig Prüfungen) global $gall_techs[$bt_max_act_tech_cnt+2][6] ; Techniker: [0] Name, [1] verfuegbar, [2] email, [3] Strasse, [4] PLZ, [5] Ort global $gactive_techs[$bt_max_act_tech_cnt+2][8] ; Techniker: [0] Name, [1] verfuegbar, [2] email, [3] Strasse, [4] PLZ, [5] Ort, [6] hat missing pdfs, [7] Anzahl zugeteilte Calls global $gmissing_pdfs[$bt_max_miss_pdf_cnt+2][3] ; fehlende Call PDFs: [0] Nummer, [1] dazugehoeriger Techniker, [2] dessen email global $ggetronics_calls[$bt_max_gtron_call_cnt+2][3] ; Getronics Calls: [0] Nummer, [1] dazugehoeriger Techniker, [2] dessen email global $grest_pdfs[$bt_max_rest_pdf_cnt+2] ; uebrig gebliebene Call PDFs: Dateinamen global $gschiebe_calls[$bt_max_schiebe_call_cnt+2] ; zu schiebende Calls: Call Nummer (CallNB) ; alle arrays haben in [0][0] bzw. [0] die tatsaechliche = aktive Anzahl drin global $g_acttech_txtfile = "" ; txt file name incl. complete path global $g_miss_pdf_txtfile = "" global $g_gtron_txtfile = "" global $g_rest_pdf_txtfile = "" global $g_slam_txtfile = "" global $g_schiebe_txtfile = "" ; Vers. 4.2 neu: zu schiebende Calls (CallNB) global $goExcel ; global Excel object for m2 xxS Slam file global $gxls_handle ; global handle for Excel m2 xls slam file global $ggtnoExcel ; global Excel object for Getronics xls Slam file global $ggtnxls_handle ; global handle for Excel Gtn xls slam file global $g_runstate = -1 ; Steuervariable: Run Status; init: -1, dann pro step plus 1 global $g_rundate = "_" ; Datum letzter Lauf von Teil 1 oder 2 global $g_heute = "." ; heutiges Datum: Systemformat (18.05.2017) global $g_jetzt = ":" global $g_heutef = "_" ; heutiges Datum: "Namens"-Format (18-05-2017) global $g_erg = 0 ; global error variable global $g_erg2 = 0 global $g_slam_is_open = 0 ; Semaphor fuer m2 xls Slam File open state: 0 closed, 1 read opened, 2 write opened global $g_prot_switch = 1 ; Vers 4.1c modified: protocol on (1) as default, 0 is off ; -------------------------------------------------------------------------------- ; ; ##### ausgelagerte eigene Funktionen ##### ; ; ; ----- Funktionsdeklarationen ----- Teil 1 ---------- #include ; vorbereitende Funktionen; im Ablauf vor Einteilung ; ----- Funktionsdeklarationen ----- Teil 2 ---------- #include ; dto.; ...nach Einteilung ; -------------------------------------------------------------------------------- ; ; ##### Programm - Ablauf - Steuerung ##### ; ; ; keine Vorgabe - wird vom user gesteuert ; ; die Hauptfunktionen werden über entspr. Buttons aufgerufen, ; die "Haupt"-Buttons sind nummeriert, dies definiert auch die Reihenfolge der Funktionen ; ; Pflicht-Funktionen sind blau bzw. grün, Optionen grau ; bei mehreren Programmlaeufen muessen mind. die mit roter Schrift aufgerufen werden ; nach Ende einer Funktion wird der zugehörige Button dunkelgrün gefärbt ; sofern eine Ausgabe dazugehört, wird diese bei Erfolg (kein Fehler) grün ausgegeben, im Fehlerfall rot ; und Teil 2: ; setze runstate auf 2 ; lies call Ordner ; verteile calls zu Techniker Verzeichnissen ; kopiere die entspr. Dateien um (slam, getronics etc.) ; erzeuge die entspr. txt-Dateien: missing call pdfs + Getronics calls + Slam summary ; und Mail Entwuerfe dazu ; erzeuge slam Mail Entwurf ; -------------------------------------------------------------------------------- ; ; ##### globale Hilfs Funktionen ##### ; ; Func ausgabe_m2xlscols($item1id) ; gebe die globalen m2 Slam XLS Spalten im Hauptfenster aus als listview... ; Vers. 4.1b angepaßt: Type ganz nach vorne in Anzeige; erweitert: Spalte Part Location vor Info local $item1string = "" ; $m2xls_col_list = GUICtrlCreateListView(" call | tech | info | type | strasse | plz | ort ", $bt_guibtn_x3, $bt_guibtn_top + $bt_guibtn_y1, $bt_guilbl_width, $bt_guibtn_height) $item1string = $gxls_spalte_type & "|" & $gxls_spalte_call & "|" & $gxls_spalte_techniker & "|" & $gxls_spalte_partloc & "|" & $gxls_spalte_info & "|" & $gxls_spalte_strasse & "|" & $gxls_spalte_plz & "|" & $gxls_spalte_ort GUICtrlSetData($item1id, $item1string) GUICtrlSetState($item1id,@SW_SHOW) EndFunc ; ----- Funktion -------------------- Func ausgabe_gtnxlscols($item1id) ; gebe die globalen Getronics Slam XLS Spalten im Hauptfenster aus als listview... local $item1string = "" ; $gtnxls_col_list = GUICtrlCreateListView(" call | type | info | strasse | plz | ort | narrative ", $bt_guibtn_x2, $bt_guibtn_top + $bt_guibtn_y1, $bt_guilbl_width, $bt_guilbl_height) $item1string = $ggtn_spalte_call & "|" & $ggtn_spalte_type & "|" & $ggtn_spalte_info & "|" & $ggtn_spalte_strasse & "|" & $ggtn_spalte_plz & "|" & $ggtn_spalte_ort & "|" & $ggtn_spalte_datetime & "|" & $ggtn_spalte_narrativ GUICtrlSetData($item1id, $item1string) GUICtrlSetState($item1id,@SW_SHOW) EndFunc ; ----- Funktion -------------------- Func ausgabe_act_techs($listid) ; gebe die active techs im Hauptfenster aus in der list GUI... ; Vers. 4.0 erweitert: zus. zum Namen auch noch die Anzahl der zugeteilten Calls in [][7] ; Vers. 4.2 erweitert: zus. Eintrag: Name "schieben" (nach Leerzeile), aber nur wenn weniger als max_act_tech_cnt Techniker aktiv local $i = 0 local $i_act_cnt = 0 local $out_str = "" local $schieben = 0 ; Vers. 4.2 zus. neu ; lokales debugging bei Bedarf ein-/ausschalten 1/0 $debuggen = 0 ; Vers. 4.2 neu: hole zu schiebende Calls $schieben = $gschiebe_calls[0] if $debuggen = 1 then MsgBox(0,"ausgabe_act_techs()","zu schiebende Calls: " & $schieben) EndIf ; zuerst einmal alle bisherigen loeschen... GUICtrlSetData($listid, "") GUICtrlSetState($listid,@SW_SHOW) ; hole Anzahl der aktiven Techniker $i_act_cnt = $gactive_techs[0][0] if $debuggen = 1 then MsgBox(0,"ausgabe_act_techs()","akt. Techniker: " & $i_act_cnt) EndIf ; Ausgabe im List Window for $i = 1 to $i_act_cnt $out_str = $gactive_techs[$i][0] & " " & $gactive_techs[$i][7] GUICtrlSetData($listid, $out_str) Next ; Vers. 4.2 neu: zus. schieben nach "Leerzeile" ausgeben, wenn akt. Techs < max count if $i_act_cnt < $bt_max_act_tech_cnt then $out_str = "---" GUICtrlSetData($listid, $out_str) $out_str = $schieben & " Calls schieben" GUICtrlSetData($listid, $out_str) EndIf GUICtrlSetState($listid,@SW_SHOW) ; lokales debuggen wieder zurueck schalten $debuggen = 1 EndFunc ; ----- Funktion -------------------- Func ausgabe_all_techs($listid) ; gebe die verfuegbaren techs im Nebenfenster aus in der list GUI... local $i = 0 local $i_all_cnt = 0 ; hole Anzahl der aktiven Techniker $i_all_cnt = $gall_techs[0][0] ; Ausgabe im List Window for $i = 1 to $i_all_cnt GUICtrlSetData($listid, $gall_techs[$i][0]) Next GUICtrlSetState($listid,@SW_SHOW) EndFunc ; -------------------------------------------------------------------------------- ; ; ##### Programmstart: systemweite Initialsierungen ##### ; ; ; get System date string of today $g_heute = @MDAY & "." & @MON & "." & @YEAR ; get System time string of today $g_jetzt = @HOUR & ":" & @MIN ; make date string for filenames $g_heutef = @MDAY & "-" & @MON & "-" & @YEAR ; set working dir to script directory $bt_workpath = @ScriptDir & "\" $f_erg = FileChangeDir($bt_workpath) If $f_erg = 0 Then MsgBox(0,"FileChangeDir() - Error !","Verzeichnis nicht geandert zu: >" & $bt_workpath & "<") EndIf ; lies ini-Datei: RunDate $g_rundate = iniread($bt_dispatch_cfg_file,"Basis","RunDate","88") If $g_rundate = "88" Then MsgBox(0,$bt_dispatch_cfg_file, "Fehler beim Lesen von Section [Basis], key [RunDate]. Abbruch !") Exit EndIf ; ... und RunState $g_runstate = iniread($bt_dispatch_cfg_file,"Basis","RunState","88") If $g_runstate = "88" Then MsgBox(0,$bt_dispatch_cfg_file, "Fehler beim Lesen von Section [Basis], key [RunState]. Abbruch !") Exit EndIf ; debug output... if $debuggen = 1 Then MsgBox(0, $bt_dispatch_cfg_file, "gelesen: RunDate >" & $g_rundate & "<, RunState >" & $g_runstate & "<, Datum heute >" & $g_heute & "<") EndIf ; Protokollfenster starten... -------------------- $bt_out_text = "Bluetech Dispatch Tool - Programm ist gestartet... / letzter Lauf am: " & $g_rundate & " mit Status: " & $g_runstate & @CRLF $gprot_wnd = SplashTextOn($bt_title_text & " --- Protokollierung --- " & $g_heute & " - " & $g_jetzt, $bt_out_text, 900, 650, 100, 100, $DLG_NOTONTOP+$DLG_TEXTLEFT+$DLG_MOVEABLE, "Arial", 11, 400) ; zuerst die Initialisierung: lies cfg file... $bt_out_text &= " lies_cfg_file() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) lies_cfg_file() ; XLS Slam Datei Spalten fuer Call-Nr / Techniker-Name / Call Type / Call Info aus INI Datei lesen $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; erzeuge GUI: Buttons und Ausgaben... -------------------- global $slam_date_btn global $slam_date_lbl global $prot_switch_btn global $btdt_help_lbl global $m2slam_file_btn global $m2slam_file_lbl global $m2xls_col_btn global $m2xls_col_list global $m2xlscolItem global $m2pdf_dir_btn global $m2pdf_dir_lbl global $gtnxls_file_btn global $gtnxls_file_lbl global $gtnxls_col_btn global $gtnxls_col_list global $gtnxlscolItem global $gtnxls_read_btn global $gtntxt_cre_btn global $gtnpdf_dir_btn global $gtnpdf_dir_lbl global $gtndoc_file_btn global $gtndoc_read_btn global $map_start_btn global $act_tec_set global $act_tech_list global $act_tech_lbl global $all_tec_set global $all_tech_list global $all_tech_lbl global $einteilung_lbl global $m2slam_plz_btn global $m2slam_aufbereiten2_btn global $techcalls_zaehlen_btn global $map_renew_btn global $verteile_calls_btn global $erzeuge_mails_btn global $endebtn ; Hauptfenster starten -------------------- $btdt_wnd = GUICreate("BTDT - " & $bt_title_text, $bt_guiwnd_width, $bt_guiwnd_height, $bt_guiwnd_left, $bt_guiwnd_top) GUISetBkColor($bt_mark_lcyan) ; hellblau ; dann die Hilfe scharf schalten ---------- GUISetHelp($bthlpfile_cmd, $btdt_wnd) ; ----- slam date ---------- $slam_date_btn = GUICtrlCreateButton("0. Datum Einteilung setzen", $bt_guibtn_x1, $bt_guibtn_y0, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($slam_date_btn, $bt_mark_red) GUICtrlSetBkColor($slam_date_btn, $bt_mark_lgreen) GUICtrlSetTip($slam_date_btn, "Datum der laufenden Einteilung setzen mit Auswahl aus Kalender,"&@CRLF&"und Verzeichnis für aktuelle Einteilung erzeugen.") ; $slam_date_lbl = GUICtrlCreateLabel($g_heute, $bt_guibtn_x2, $bt_guibtn_y0 + 10, $bt_guibtn_width, $bt_guilbl_height, $WS_GROUP) $slam_date_lbl = GUICtrlCreateLabel("_", $bt_guibtn_x2, $bt_guibtn_y0 + 10, $bt_guibtn_width, $bt_guilbl_height, $WS_GROUP) ; ----- protocol switch: Vers. 4.1c: start / default - on ---------- $prot_switch_btn = GUICtrlCreateButton("Protokollierung ein/aus", $bt_guibtn_x3, $bt_guibtn_y0, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetBkColor($prot_switch_btn, $bt_mark_mgreen) GUICtrlSetTip($prot_switch_btn, "Protokollierung der laufenden Einteilung in einem eigenen Fenster ein-/ausschalten.") ; ----- user help label ---------- $btdt_help_lbl = GUICtrlCreateLabel(@CRLF & "H I L F E mit F1", $bt_guibtn_x6, $bt_guibtn_y0, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP+$SS_CENTER) GUICtrlSetBkColor($btdt_help_lbl, $bt_mark_lorange) ; ----- m2 slam file ---------- ; Vers. 4.1b geändert Slam Spalte Type ganz vorne / geändert: Part Location neu vor Info $m2slam_file_btn = GUICtrlCreateButton("1. m2-Slam Datei wählen", $bt_guibtn_x1, $bt_guibtn_y1, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($m2slam_file_btn, $bt_mark_red) GUICtrlSetBkColor($m2slam_file_btn, $bt_mark_lgreen) GUICtrlSetTip($m2slam_file_btn, "Pfad zur m2 XLS Slam Datei eingeben mit fileselect-box;"&@CRLF&"Und Excel mit m2 Slam Datei zum Bearbeiten öffnen.") ; $m2slam_file_lbl = GUICtrlCreateLabel($gxls_slam_file, $bt_guibtn_x2, $bt_guibtn_y1 + 10, $bt_guilbl_width, $bt_guilbl_height, $WS_GROUP) $m2slam_file_lbl = GUICtrlCreateLabel("_", $bt_guibtn_x2, $bt_guibtn_y1 + 10, $bt_guilbl_width, $bt_guilbl_height, $WS_GROUP) $m2xls_col_btn = GUICtrlCreateButton("Slam Spalten ändern", $bt_guibtn_x2, $bt_guibtn_y2, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) $m2xls_col_list = GUICtrlCreateListView("Type|callnum|Tech|Part Loc|Info|Strasse|Plz|Ort", $bt_guibtn_x3, $bt_guibtn_y2, $bt_guilist_lwidth, $bt_guilist_height) $m2xlscolItem = GUICtrlCreateListViewItem("A|B|C|D|E|F|G|H", $m2xls_col_list) ausgabe_m2xlscols($m2xlscolItem) ; ----- m2 Call PDF file Verzeichnisse ---------- $m2pdf_dir_btn = GUICtrlCreateButton("2. Call-PDF Verz. wählen", $bt_guibtn_x1, $bt_guibtn_y3, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($m2pdf_dir_btn, $bt_mark_red) GUICtrlSetBkColor($m2pdf_dir_btn, $bt_mark_lgreen) GUICtrlSetTip($m2pdf_dir_btn, "Pfad zu den m2 Call PDF/txt/info Dateien eingeben mit fileselect-box.") ; $m2pdf_dir_lbl = GUICtrlCreateLabel($gm2call_directory, $bt_guibtn_x2, $bt_guibtn_y3 + 10, $bt_guilbl_width, $bt_guilbl_height) $m2pdf_dir_lbl = GUICtrlCreateLabel("_", $bt_guibtn_x2, $bt_guibtn_y3 + 10, $bt_guilbl_width, $bt_guilbl_height) ; ----- Getronics slam files: Variante 1: xls ---------- $gtnxls_file_btn = GUICtrlCreateButton("3. Getronics XLS wählen", $bt_guibtn_x1, $bt_guibtn_y4, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) ; GUICtrlSetColor($gtnxls_file_btn, $bt_mark_red) GUICtrlSetBkColor($gtnxls_file_btn, $bt_mark_lgreen) GUICtrlSetTip($gtnxls_file_btn, "Pfad zur Getronics XLS Slam Datei eingeben mit fileselect-box;"&@CRLF&"Und Excel mit Getronics Slam Datei zum Lesen öffnen.") ; $gtnxls_file_lbl = GUICtrlCreateLabel($ggtn_slam_file, $bt_guibtn_x2, $bt_guibtn_y4 + 10, $bt_guilbl_width, $bt_guilbl_height, $WS_GROUP) $gtnxls_file_lbl = GUICtrlCreateLabel("_", $bt_guibtn_x2, $bt_guibtn_y4 + 10, $bt_guilbl_width, $bt_guilbl_height, $WS_GROUP) $gtnxls_col_btn = GUICtrlCreateButton("Getronics Spalten ändern", $bt_guibtn_x2, $bt_guibtn_y5, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) ; Vers. 4.0a Gtn call type modified: old: CustSite, new: Office $gtnxls_col_list = GUICtrlCreateListView("WOnum|Office|ProdDesc|vis. Addr.|v. Zip|v. Place|App.Time|Narrat.", $bt_guibtn_x3, $bt_guibtn_y5, $bt_guilist_lwidth, $bt_guilist_height) $gtnxlscolItem = GUICtrlCreateListViewItem("A|B|C|D|E|F|G|H", $gtnxls_col_list) ausgabe_gtnxlscols($gtnxlscolItem) ; ----- Getronics Call PDF file Verzeichnisse ---------- $gtnpdf_dir_btn = GUICtrlCreateButton("4. Gtn PDF Verz. wählen", $bt_guibtn_x1, $bt_guibtn_y6, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetBkColor($gtnpdf_dir_btn, $bt_mark_lgreen) GUICtrlSetTip($gtnpdf_dir_btn, "Pfad zu den Getronics Call PDF Dateien eingeben mit fileselect-box.") ; $gtnpdf_dir_lbl = GUICtrlCreateLabel($ggtn_call_directory, $bt_guibtn_x2, $bt_guibtn_y6 + 10, $bt_guilbl_width, $bt_guilbl_height) $gtnpdf_dir_lbl = GUICtrlCreateLabel("_", $bt_guibtn_x2, $bt_guibtn_y6 + 10, $bt_guilbl_width, $bt_guilbl_height) ; ----- oder es sind z.B. keine Gtn PDFs da: Vers. 4.1c: default is on ---------- $gtntxt_cre_btn = GUICtrlCreateButton("Gtn narrat. txt erzeugen", $bt_guibtn_x2, $bt_guibtn_y7, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetBkColor($gtntxt_cre_btn, $bt_mark_mgreen) GUICtrlSetTip($gtntxt_cre_btn, "automatische Erzeugung von txt-Dateien aus der narrative im Slam einschalten.") ; ----- Getronics XLS slam file einlesen ---------- $gtnxls_read_btn = GUICtrlCreateButton("5. Gtn XLS einlesen", $bt_guibtn_x1, $bt_guibtn_y8, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetBkColor($gtnxls_read_btn, $bt_mark_lgreen) GUICtrlSetTip($gtnxls_read_btn, "alle Getronics Calls in die m2 Slam Datei eintragen, und Getronics XLS Slam schließen;"&@CRLF&"sowie alle zugehörigen PDF Dateien umbenennen/ins Call-PDF-Verzeichnis (2.) kopieren.") ; ----- Getronics slam files: Varante 2: doc ---------- ; Vers. 4.1a alte GTN Doc Routinen stillgelegt: 3b und 5b: kein Menupunkt mehr... ; ----- active technicians ---------- ; Vers. 4.2 added: ini ist 0 Calls zu schieben $gschiebe_calls[0] = 0 $gschiebe_calls[1] = "" $act_tech_set = GUICtrlCreateButton("Techniker verwalten", $bt_guibtn_x2, $bt_guibtn_y9, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($act_tech_set, $bt_mark_red) GUICtrlSetTip($act_tech_set, "aktive Techniker aus der Liste der vorhandenen Techniker auswählen.") $act_tech_lbl = GUICtrlCreateLabel("<-- aktive Techniker", $bt_guibtn_x4, $bt_guibtn_y9, $bt_guilbl_width, $bt_guilbl_height) $act_tech_list = GUICtrlCreateList("", $bt_guibtn_x3, $bt_guibtn_y9, $bt_guitlist_width, $bt_guitlist_height, $WS_VSCROLL) ausgabe_act_techs($act_tech_list) ; ----- all (= verfuegabre) technicians ---------- $all_tech_lbl = GUICtrlCreateLabel(" verfügbare Techniker -->", $bt_guibtn_x4, $bt_guibtn_y10, $bt_guilbl_width, $bt_guilbl_height) $all_tech_list = GUICtrlCreateList("", $bt_guibtn_x5, $bt_guibtn_y9, $bt_guitlist_width, $bt_guitlist_height, $WS_VSCROLL) ausgabe_all_techs($all_tech_list) ; ----- Map starten ---------- $map_start_btn = GUICtrlCreateButton("6. Map starten", $bt_guibtn_x1, $bt_guibtn_y10, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetBkColor($map_start_btn, $bt_mark_lgreen) GUICtrlSetTip($map_start_btn, "den default Internet Browser starten und auf die Seite easymapmaker-advanced gehen.") ; ----- m2 Slam: PLZ+calls zu Technikern vor-verteilen ---------- $m2slam_plz_btn = GUICtrlCreateButton("Slam PLZ vor-verteilen", $bt_guibtn_x2, $bt_guibtn_y11, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) ; GUICtrlSetBkColor($map_start_btn, $bt_mark_lgreen) GUICtrlSetTip($m2slam_plz_btn, "Calls im Slam nach PLZ zu Technikern vor-verteilen,"&@CRLF&"und Spezial-Calls/Techniker vor-verteilen.") ; ----- (manuelle) Einteilung machen ---------- $einteilung_lbl = GUICtrlCreateLabel(" Einteilung der Techniker...", $bt_guibtn_x1, $bt_guibtn_y11 + 9, $bt_guibtn_width, $bt_guibtn_height) GUICtrlSetTip($einteilung_lbl, "manuelle Einteilung in der m2 XLS Slam Datei:" & @CRLF & "Zuteilung der Techniker zu den Calls") ; ----- slam aufbereiten / Typen einfaerben ---------- $m2slam_aufbereiten2_btn = GUICtrlCreateButton("7. m2-Slam aufbereiten", $bt_guibtn_x1, $bt_guibtn_y12, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($m2slam_aufbereiten2_btn, $bt_mark_red) GUICtrlSetBkColor($m2slam_aufbereiten2_btn, $bt_mark_lgreen) GUICtrlSetTip($m2slam_aufbereiten2_btn, "m2 XLS Slam Datei aufbereiten: Call Typen einfärben") ; ----- Vers. 4.0 added: Anzahl Calls für Techniker prüfen ---------- $techcalls_zaehlen_btn = GUICtrlCreateButton("Calls + Techniker zählen", $bt_guibtn_x2, $bt_guibtn_y12, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($techcalls_zaehlen_btn, $bt_mark_red) ; GUICtrlSetBkColor($map_start_btn, $bt_mark_lgreen) GUICtrlSetTip($techcalls_zaehlen_btn, "Techniker mit Anzahl der bisher zugeteilten Calls auflisten.") ; ----- Map neu starten ---------- $map_renew_btn = GUICtrlCreateButton("8. Map neu", $bt_guibtn_x1, $bt_guibtn_y13, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($map_renew_btn, $bt_mark_red) GUICtrlSetBkColor($map_renew_btn, $bt_mark_lgreen) GUICtrlSetTip($map_renew_btn, "im default Internet Browser eine neue Seite öffnen mit easymapmaker-advanced") ; ----- verteile Calls in Techniker Unterverzeichnisse ---------- $verteile_calls_btn = GUICtrlCreateButton("9. Verteile Calls", $bt_guibtn_x1, $bt_guibtn_y14, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($verteile_calls_btn, $bt_mark_red) GUICtrlSetBkColor($verteile_calls_btn, $bt_mark_lgreen) GUICtrlSetTip($verteile_calls_btn, "Alle vorhandenen Unterlagen entspr. der Callnummer aus dem Call-PDF Verzeichnis verteilen,"&@CRLF&"und je nach zugeteiltem Techniker in dessen jeweiligen Unterordner verschieben.") ; ----- erzeuge - ja nach Bedarf - die 4 emails ---------- $erzeuge_mails_btn = GUICtrlCreateButton("10. erzeuge Emails", $bt_guibtn_x1, $bt_guibtn_y15, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetColor($erzeuge_mails_btn, $bt_mark_red) GUICtrlSetBkColor($erzeuge_mails_btn, $bt_mark_lgreen) GUICtrlSetTip($erzeuge_mails_btn, "Erzeugt -nach Bedarf- die Mails: 1. fehlende call PDFs an m2, 2. eingeteilte Techniker an Getronics;"&@CRLF&"3. Einteilungsmail an Techniker & m2, 4. übrige Call Unterlagen an m2.") ; ----- the end ---------- $endebtn = GUICtrlCreateButton("11. Ende", $bt_guibtn_x6, $bt_guibtn_y15, $bt_guibtn_width, $bt_guibtn_height, $WS_GROUP) GUICtrlSetBkColor($endebtn, $bt_mark_mblue) GUICtrlSetTip($endebtn, "Programmende."&@CRLF&"...eigentlich selbsterklärend ?") ; ----- switch the GUI on and display it GUISetState(@SW_SHOW,$btdt_wnd) ; Vers. 4.0 neu: schreibe init. RunState und akt. RunDate in ini-Datei ; ----- RunState - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) ; ----- RunDate heute - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunDate",$g_heute) ; -------------------------------------------------------------------------------- ; ; ##### jetzt die main loop vom Programm ##### ; ; While 1 Switch GUIGetMsg() ; Loop until the user exits. Case $GUI_EVENT_CLOSE ; aufhoeren [mit X rechts oben] geht immer... ExitLoop ; 0. Slam Datum setzen... Case $slam_date_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; hole Slam Datum im Kalender $bt_out_text &= "0 hole_slam_datum() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) hole_slam_datum() create_dispatch_dir() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "0. Datum aktualisiert und Verzeichnis fuer die Einteilung erzeugt !") ; und gebe den Namen & Ort aus GUICtrlSetData($slam_date_lbl, $gxls_slam_date) GUICtrlSetBkColor($slam_date_lbl, $bt_mark_lgreen) ; und faerbe den button gruen GUICtrlSetBkColor($slam_date_btn, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 0 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) ; Vers. 4.0c new: schreibe Datum Einteilung ins ini file - no error iniwrite($bt_dispatch_cfg_file,"SlamDatei","VerteilDatum",$gxls_slam_date) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 0b. Protokollierung ein/ausschalten... Case $prot_switch_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; schalte Protokoll ein (1) bzw. aus (0); Vers. 4.1c: default Start ist ein $bt_out_text &= "0a protocol_on_off() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) $g_erg = protocol_onoff() ; und faerbe den button gruen (aktiv) oder rot (inaktiv) if $g_erg = 1 Then ; ist aktiviert GUICtrlSetBkColor($prot_switch_btn, $bt_mark_mgreen) Else GUICtrlSetBkColor($prot_switch_btn, $bt_mark_mred) EndIf ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 0 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 1. m2 Slam Datei auswaehlen... Case $m2slam_file_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; hole XLS Slam Datei: Namen und Ort $bt_out_text &= "1 hole_xls_slam() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) hole_xls_slam() $g_erg = open_xls_slam() ; nächste Funktion/Aufruf in 3.8 nicht mehr noetig... ; $g_erg2 = xls_slam_types_verteil() ; ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "1. Slam-Dateiname & -Pfad geholt, Anzahl der enthaltenen Calls geprüft und Call-Typen klassifiziert !") ; und gebe den Namen & Ort aus GUICtrlSetData($m2slam_file_lbl, $gxls_slam_file & " -- " & $gm2call_count & " calls") if ($g_erg + $g_erg2) = 0 then ; ok GUICtrlSetBkColor($m2slam_file_lbl, $bt_mark_lgreen) Else ; error GUICtrlSetBkColor($m2slam_file_lbl, $bt_mark_lred) EndIf ; und faerbe den button gruen GUICtrlSetBkColor($m2slam_file_btn, $bt_mark_mgreen) ; mittelgruen ; Vers. 3.90 added: check slam call count and pdf files count if ($gm2call_count < 50) Then MsgBox(0,$bt_dispatch_tool_name & " - Warnung: Plausibilität !", "In der m2 Slam Datei sind WENIGER als 50 Calls / belegte Zeilen enthalten !") EndIf if ($gm2call_count > 200) Then MsgBox(0,$bt_dispatch_tool_name & " - Warnung: Plausibilität !", "In der m2 Slam Datei sind MEHR als 200 Calls / belegte Zeilen enthalten !") EndIf ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 1 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 1. Option -- m2-Slam xls-Spalten setzen Case $m2xls_col_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; hole die Slam XLS Spalten vom User... $bt_out_text &= "1a akt_m2xls_cols() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) akt_m2xlscols() ; gebe die neuen Spalten aus (label) ausgabe_m2xlscols($m2xlscolItem) ; und schreibe sie in INI file $bt_out_text &= " / schreibe_xlscols_file() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) schreibe_m2xlscols_file() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "(1. Opt.) XLS-Slamdatei Spalten geändert und Ini-Datei aktualisiert !") ; und faerbe den button gruen GUICtrlSetBkColor($m2xls_col_btn, $bt_mark_mgreen) ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 2. m2 Call PDF Verzeichnis auswaehlen... Case $m2pdf_dir_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; Vers. 4.1a zusätzlich: bereinige / korrigiere m2 xls Slam Datei: Strasse etc. -> falsche Zeichen raus/ersetzt $bt_out_text &= "2 bereinige_xls_slam() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) $g_erg2 = bereinige_xls_slam() ; hole Verzeichnis der m2 Call PDF/txt/info Dateien vom user... $bt_out_text &= " / hole_call_pdf() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) $g_erg = hole_call_ordner() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "2. m2 Call-PDF Verzeichnis geholt und Anzahl Dateien darin geprüft !") ; und gebe den Namen & Ort aus GUICtrlSetData($m2pdf_dir_lbl, $gm2call_directory & " -- " & $gm2pdf_files_count & " files") if $g_erg = 0 Then GUICtrlSetBkColor($m2pdf_dir_lbl, $bt_mark_lgreen) Else GUICtrlSetBkColor($m2pdf_dir_lbl, $bt_mark_lred) EndIf ; und faerbe den button gruen (ok) oder rot (Verz. leer) GUICtrlSetBkColor($m2pdf_dir_btn, $bt_mark_mgreen) ; mittelgruen - ok ; Vers. 3.90 added: check slam call count and pdf files count if ($gm2pdf_files_count < 30) Then MsgBox(0,$bt_dispatch_tool_name & " - Warnung: Plausibilität !", "Die Anzahl der m2 Call PDF/txt/Info Dateien" & @CRLF & "ist UNTER 30 ! - Altbestand ?") EndIf if ($gm2pdf_files_count > (2 * $gm2call_count)) Then MsgBox(0,$bt_dispatch_tool_name & " - Warnung: Plausibilität !", "Die Anzahl der m2 Call PDF/txt/Info Dateien" & @CRLF & "-- ist mehr als doppelt so hoch --" & @CRLF & "als die Anzahl der Calls im Slam !") EndIf ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 2 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 3. Getronics xls-Slam Datei auswaehlen Case $gtnxls_file_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; ... ist noch leer ... $bt_out_text &= "3 hole_gtn_xls() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) hole_gtn_slam() $g_erg = open_gtn_slam() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "3. Slam-Dateiname & -Pfad geholt, Anzahl der enthaltenen Calls geprüft und Call-Typen klassifiziert !") ; und gebe den Namen & Ort aus GUICtrlSetData($gtnxls_file_lbl, $ggtn_slam_file & " -- " & $ggtncall_count & " calls") if $g_erg = 0 Then GUICtrlSetBkColor($gtnxls_file_lbl, $bt_mark_lgreen) Else GUICtrlSetBkColor($gtnxls_file_lbl, $bt_mark_lred) EndIf ; und faerbe den button gruen GUICtrlSetBkColor($gtnxls_file_btn, $bt_mark_mgreen) ; mittelgruen ; den gtn doc button hellrot GUICtrlSetBkColor($gtndoc_file_btn, $bt_mark_lred) ; hellrot GUICtrlSetBkColor($gtndoc_read_btn, $bt_mark_lred) ; hellrot ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 3 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 3. Option -- Getronics Slam xls-Spalten setzen Case $gtnxls_col_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; hole die Slam XLS Spalten vom User... $bt_out_text &= "3a akt_gtnxls_cols() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) akt_gtnxlscols() ; gebe die neuen Spalten aus (label) ausgabe_gtnxlscols($gtnxlscolItem) ; und schreibe sie in INI file $bt_out_text &= " / schreibe_gtnxlscols_file() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) schreibe_gtnxlscols_file() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "(3. Opt.) Getronics XLS-Slamdatei Spalten geändert und Ini-Datei aktualisiert !") ; und faerbe den button gruen GUICtrlSetBkColor($gtnxls_col_btn, $bt_mark_mgreen) ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 3 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 4. Getronics Call PDF Verzeichnis auswaehlen... Case $gtnpdf_dir_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; hole Verzeichnis der Getronics Call PDF Dateien vom user... $bt_out_text &= "4 hole_gtn_pdf_ordner() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) $g_erg = hole_gtnpdf_ordner() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "4. Getronics Call-PDF Verzeichnis geholt und Anzahl Dateien darin geprüft !") ; und gebe den Namen & Ort aus GUICtrlSetData($gtnpdf_dir_lbl, $ggtn_call_directory & " -- " & $ggtnpdf_files_count & " files") if $g_erg = 0 Then GUICtrlSetBkColor($gtnpdf_dir_lbl, $bt_mark_lgreen) Else GUICtrlSetBkColor($gtnpdf_dir_lbl, $bt_mark_lred) EndIf ; und faerbe den button gruen (ok) oder rot (Verz. leer) GUICtrlSetBkColor($gtnpdf_dir_btn, $bt_mark_mgreen) ; mittelgruen ; Vers. 3.90 added: check slam call count and pdf files count if ($ggtnpdf_files_count = 0) Then MsgBox(0,$bt_dispatch_tool_name & " - Warnung: Plausibilität !", "KEINE Getronics WO PDF Dateien vorhanden !" & @CRLF & "--> Verzeichnis noch nicht befüllt ?") EndIf if ($ggtnpdf_files_count < $ggtncall_count) Then MsgBox(0,$bt_dispatch_tool_name & " - Warnung: Plausibilität !", "Die Anzahl der Getronics WO PDF Dateien ist KLEINER" & @CRLF & "--- als die Anzahl der Calls im Slam (IBU File) !") EndIf ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 4 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 4b. Getronics txt automatisch (mit) aus Slam narrative erzeugen... Case $gtntxt_cre_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; hole Verzeichnis der Getronics Call PDF Dateien vom user... $bt_out_text &= "4a setze flag fuer txt aus narrative erzeugen running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) $g_erg = akt_gtnxls2txt() ; und faerbe den button gruen (aktiv) oder rot (inaktiv) if $g_erg = 1 Then ; ist aktiviert GUICtrlSetBkColor($gtntxt_cre_btn, $bt_mark_mgreen) Else GUICtrlSetBkColor($gtntxt_cre_btn, $bt_mark_mred) EndIf ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 4 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 5. Getronics xls-Slam Datei einlesen Case $gtnxls_read_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) $bt_out_text &= "5 gtn_xls_einlesen() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; m2 xls slam workbook in Excel schliessen und neu oeffnen xls_workbook_close_open_write() ; lese die gtn calls in den m2 slam ein $g_erg = gtn_xls_einlesen() ; umbenenne/verschiebe die gtn call pdf dateien ins m2 call pdf Verzeichnis ; und erzeuge (lt. globalem flag für alle narratives eine txt Datei im Zielverzeichnis $g_erg2 = kopiere_gtnpdf_m2dir() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "5. Getronics Calls (aus XLS-Slam) in m2 Slamdatei eingelesen, und Getronics Call PDFs ins m2 Call PDF Verzeichnis verschoben !") ; und faerbe den button gruen if ($g_erg + $g_erg2) = 0 Then GUICtrlSetBkColor($gtnxls_read_btn, $bt_mark_mgreen) Else GUICtrlSetBkColor($gtnxls_read_btn, $bt_mark_lred) EndIf ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 5 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; Vers. 4.1a alte GTN Doc Routinen stillgelegt: 3b und 5b: ...kein Funktionsaufruf mehr ; 5. Option -- aktive (verfuegbare) Techniker verwalten... Case $act_tech_set ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) $bt_out_text &= "5a techniker_verwalten() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; Vers. 4.0c modified: func. techniker_verwalten(): speichern der aktiv Statii aller Techs. in der INI-Datei techniker_verwalten() ausgabe_act_techs($act_tech_list) ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "(5. Opt.) aktive Techniker geändert !") ; und faerbe den button gruen GUICtrlSetBkColor($act_tech_set, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 5 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 6. Internet Map starten: default browser und easymapmaker - advanced... Case $map_start_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) ; hole Verzeichnis der Getronics Call PDF Dateien vom user... $bt_out_text &= "6 map_starten() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; Vers. 4.0a: --> easy map maker DE advanced... ShellExecute("https://www.easymapmaker.com/de/advanced") ; m2 xls slam workbook in Excel schliessen und neu oeffnen ; xls_workbook_close_open_write() ; act_tech_dir und -txt erzeugen $bt_out_text &= " / erzeuge_act_tech_txt() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; no more directory creation... erzeuge_act_tech_dir() erzeuge_act_tech_txt() ; ist getan... ; Vers. 4.0a: --> easy map maker DE advanced... MsgBox(0,$bt_dispatch_tool_name, "6. default Internet Browser gestartet, die Seite easymapmaker/de/advanced aufgerufen und Infodatei: aktive Techniker geschrieben !") ; und faerbe den button gruen GUICtrlSetBkColor($map_start_btn, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 6 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 6. Option -- m2 XLS slam aufbereiten, Teil 1 / PLZ / Techniker vor-verteilen Case $m2slam_plz_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) $bt_out_text &= "6a m2slam_plz_verteil() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; m2 xls slam workbook in Excel schliessen und neu oeffnen xls_workbook_close_open_write() ; vorverteilung nach PLZ, Pudos, Technikern m2slam_plz_verteil() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "(6. Opt.) Techniker nach PLZ vor-verteilt im Slam und inkl. Pudo-Ausnahmen !") ; und faerbe den button gruen GUICtrlSetBkColor($m2slam_plz_btn, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 6 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; manuelle Einteilung der Techniker ; 7. m2 XLS slam aufbereiten, Teil 2 / Type einfaerben Case $m2slam_aufbereiten2_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) $bt_out_text &= "7 m2slam_aufbereiten3() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; m2 xls slam workbook in Excel schliessen und neu oeffnen xls_workbook_close_open_write() ; call typen einfärben ; Vers. 3.75 old: m2slam_aufbereiten2() ; Vers. 3.8 new: m2slam_aufbereiten3() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "7. Slam aufbereiten - Teil 2: Call Typen eingefärbt !") ; und faerbe den button gruen GUICtrlSetBkColor($m2slam_aufbereiten2_btn, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 7 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 7. Option -- Vers. 4.0 added: Anzahl zugeteilter Calls zu Technikern prüfen / ausgeben Case $techcalls_zaehlen_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) $bt_out_text &= "7a techcalls_zaehlen() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; m2 xls slam workbook in Excel schliessen und neu oeffnen xls_workbook_close_open_write() ; zugeteilte calls im Slam durchzaehlen; Anzahl bei Technikern eintragen/ ausgeben techcalls_zaehlen() ausgabe_act_techs($act_tech_list) ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "(6. Opt.) zu Technikern zugeteilte Calls gezählt und ausgegeben !") ; und faerbe den button gruen GUICtrlSetBkColor($techcalls_zaehlen_btn, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 7 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 8. Internet Map neu: browser und easymapmaker - advanced... Case $map_renew_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) $bt_out_text &= "8 map_neu() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; m2 xls slam workbook in Excel schliessen und neu oeffnen xls_workbook_close_open_read() ; map_renew() ; Vers. 4.0a: --> easy map maker DE advanced... ShellExecute("https://www.easymapmaker.com/de/advanced") ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "8. default Internet Browser gestartet und die Seite easymapmaker/de/advanced aufgerufen !") ; und faerbe den button gruen GUICtrlSetBkColor($map_renew_btn, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 8 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 9. verteile Calls (PDF) in Techniker Unterverzeichnisse Case $verteile_calls_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) $bt_out_text &= "9 verteile_calls() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; m2 xls slam workbook in Excel schliessen und neu oeffnen xls_workbook_close_open_read() ; verteile_calls() verteile_calls_zu_techniker() ; Teil 1 ist getan... MsgBox(0,$bt_dispatch_tool_name, "9.-I. PDF/txt/info-Dateien in akt. Einteilung / Techniker-Verzeichnisse verteilt !") kopiere_xls_slam() ; Vers. 4.1a gelöscht $bt_out_text &= @CRLF & " erzeuge_...() und kopiere_prot-files() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; kopiere_getronics_doc() erzeuge_missing_pdf_txt() erzeuge_getronics_calls_txt() ; Vers. 4.2 neu erzeuge_schiebe_calls_txt() erzeuge_rest_pdf_txt() kopiere_prot_files() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "9.-II. Infodateien fuer: missing PDFs, Getronics Calls, Schiebe Calls, Rest-PDFs erzeugt" & @CRLF & "und ins Protokoll-Unterverzeichnis kopiert !") ; und faerbe den button gruen GUICtrlSetBkColor($verteile_calls_btn, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 9 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 10. erzeuge Mails... Case $erzeuge_mails_btn ; mouse cursor auf sanduhr = wait GUISetCursor(15,1,$btdt_wnd) $bt_out_text &= "10 erzeuge_mails() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; m2 xls slam workbook in Excel schliessen und neu oeffnen xls_workbook_close_open_read() ; erzeuge_mails() erzeuge_missing_pdf_mail() erzeuge_getronics_calls_mail() ; --- Vers. 4.2 neu: schiebe calls erzeuge_schiebe_calls_mail() erzeuge_rest_pdf_mail() erzeuge_slam_mail() ; Vers. 3.90 added: create m2 info calls slam and mail ; Vers. 4.0 removed: no more mail to m2 -> upload m2 slam file to m2one ; erzeuge_m2_calls_mail() $bt_out_text &= " / erzeuge_m2_info_slam() running..." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; Vers. 4.0 new: just create m2 slam file (without Getronics Calls) erzeuge_m2_info_slam() ; ist getan... MsgBox(0,$bt_dispatch_tool_name, "10. emails erzeugt für: m2 missing PDFs, Getronics Calls, Schiebe Calls, m2 Rest-PDFs und für die aktuelle Einteilung !") ; und faerbe den button gruen GUICtrlSetBkColor($erzeuge_mails_btn, $bt_mark_mgreen) ; mittelgruen ; mouse cursor wieder normal = arrow GUISetCursor(2,0,$btdt_wnd) ; Vers. 4.0 new: set & write runstate in cfg-file $g_runstate = 10 ; und schreibe sie ins ini file - evtl. Fehler ignorieren iniwrite($bt_dispatch_cfg_file,"Basis","RunState",$g_runstate) $bt_out_text &= " done" & @CRLF ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; 11. Benutzer - Ende Case $endebtn ExitLoop EndSwitch WEnd $bt_out_text &= "all done / Programm beendet." ControlSetText($bt_title_text, "", "Static1", $bt_out_text) ; und Schluss MsgBox($MB_SYSTEMMODAL, $bt_title_text, "Programm beendet.") ; Delete the previous GUI and all controls. GUIDelete($btdt_wnd) SplashOff() exit (0) ; done ok