AutoIT Siemens CMP Generator

From richud.com
Jump to navigation Jump to search

AU3 script to generate files for Siemens

This source code will compile to make a little GUI for generating the .cmp files used in Siemens phone system, taking initial generic textual templates for modification.

Siemens CMP Generator.png

; RMDC Siemens CMP generator
; release history, ISO versioning
; V20111118 first version
; V20111122 fixed bugs auto extn prefix
; V20120119 fixed 'Add More' box going to wrong place, altered name check to allow numberic and underscroes

#include <GuiConstantsEx.au3>
#include <AVIConstants.au3>
#include <Process.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>

Local $wtit = "SIEMENS CMP File Generator V20120119"
If WinExists($wtit) Then Exit  ; It's already running
AutoItWinSetTitle($wtit)

;Load template
Func loadtemp($t)
	;template in
	$fin = @ScriptDir & "\" & $t
	Global $tt = FileRead($fin)

	;check read ok
	If $tt = -1 Then
		MsgBox(0, "Error", "Erro reading" & $fin & " . Please check file exists and you have read access")
		Return -1
	EndIf
EndFunc


; Start  building up the GUI
GuiCreate($wtit, 450, 300)
GuiSetIcon(@SystemDir & "\shell32.dll", 310)


;little help system
$helpmenu = GUICtrlCreateMenu("Help")
$infoitem = GUICtrlCreateMenuItem("Help", $helpmenu)
$aboutitem = GUICtrlCreateMenuItem("About", $helpmenu)
$useitem = GUICtrlCreateMenuItem("HowToUse", $helpmenu)



; COMBO
;;$pref=GUICtrlCreateCombo("252", 10, 10, 50, 30) ; create first item
;;GUICtrlSetData(-1, "232|229") ; add other item snd set a new default
;;GuiCtrlCreateLabel("Prefix", 10, 30, 51, 20)

	;GUICtrlCreateEdit ( "text", left, top [, width [, height [, style [, exStyle]]]] )
	;GUICtrlCreateButton ( "text", left, top [, width [, height [, style [, exStyle]]]] )
	;GUICtrlCreateLabel ( "text", left, top [, width [, height [, style [, exStyle]]]] )



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;OUTPUT GUI GENERATION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$outp=GuiCtrlCreateInput("", 10, 240, 350, 20)
$outpl=GuiCtrlCreateLabel("Output location", 10, 260, 200, 20)
GUICtrlSetState($outp, $GUI_HIDE)
GUICtrlSetState($outpl, $GUI_HIDE)

;write out generated CMP txt file
Func output($msg,$s,$txt)
	
	$date = @MON & "-" & @MDAY & "-" & @YEAR
	$c = $s & $date & ".txt"
	$cmpout = (@TempDir & "\" & $c)

	;add file header
	$t="FILE VERSION:11.00.01:MP2"&@CRLF&$txt
	
	;open File
	$op = FileOpen($cmpout,2)
	;write out cmp file
	$wr = FileWrite ($op, $t )
	;check write ok
	If $wr = -1 Then
		MsgBox(0, "Error", "Erro writing" & $cmpout & " . Please check write access.")
		Return -1
	EndIf
	FileClose($wr)
	
	GUICtrlSetData ($outp, $cmpout)
	GUICtrlSetData ($outpl,$msg)
	GUICtrlSetState($outp, $GUI_SHOW)
	GUICtrlSetState($outpl, $GUI_SHOW)

EndFunc





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;USER CMP GUI GENERATION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;INPUT for user create
GuiCtrlCreateLabel("User Creator", 10, 1,65,16,$SS_SUNKEN)
;Extension #
$extn=GuiCtrlCreateInput("", 10, 20, 50, 20)
GuiCtrlCreateLabel("Extension", 11, 40, 50, 20)
;First Name
$first=GuiCtrlCreateInput("", 70, 20, 80, 20)
GuiCtrlCreateLabel("First Name", 71, 40, 80, 20)
;Surname
$surn=GuiCtrlCreateInput("", 160, 20, 80, 20)
GuiCtrlCreateLabel("Surname", 161, 40, 80, 20)
;GGenerate button
$genuser = GuiCtrlCreateButton("Generate User CMP", 310, 20, 120, 20)






;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;PICKUP GROUP GUI GENERATION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;INPUT for pickup group create
$addp=""
Global $a[20]
$j=0
$leftmin=10
$leftmax=200
$topmin=120
$topmax=210
$left=$leftmin
$top=$topmin
$pnum = GuiCtrlCreateInput("", $left, $top-23, 30, 20)
GuiCtrlCreateLabel("Pickup Group Creator", $left, $top-43,110,16,$SS_SUNKEN)
GuiCtrlCreateLabel("Group", $left+35, $top-21,70,20)
GuiCtrlCreateLabel("Extensions", $left+170, $top-21,70,20)
$addp = GuiCtrlCreateButton("Add More", $leftmax+40, $top, 60, 20)
Func pickup($n)
	If $top > $topmax Then 
		Return
	EndIf
	
	;MsgBox(0, "Extension", $t)
	For $i = 1 to $n
			If $left > $leftmax Then $left=$leftmin
			$a[$j] = GuiCtrlCreateInput("", $left, $top, 40, 20)
			$left+=45
			$j+=1
		Next
	GUICtrlSetPos($addp,$leftmax+40,$top)
	$top+=30

EndFunc

;Create 5 group boxes to start with
pickup(5)
$gengroup = GuiCtrlCreateButton("Generate Pickup CMP", 310, 100, 120, 20)





;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; USER TEMPLATE MOD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func modtemplateuser()
	If loadtemp("UOL.txt") = -1 Then Return

	$extnn=StringStripWS(GUICtrlRead($extn,1),7)
	$surnn=StringStripWS(GUICtrlRead($surn,1),7)
	$firstt=StringStripWS(GUICtrlRead($first,1),7)
	
	If chknum($extnn,4,4,"Extension") = -1 Then Return
	
	If getprefix($extnn) = -1 Then Return
	
	If StringLen($surnn) < 2 OR StringLen($firstt) < 2 Then
		MsgBox(0, "Names", "First/Surname: Please enter at least 2 letters for first and surname.")
		Return
	EndIf
	
	;string over 20 chars or contains anything other than alphanum or _ then abort
	$n=$surnn&$firstt
	If StringLen($n) > 20 OR StringRegExp($n,'[^A-Za-z0-9_]+') Then
		MsgBox(0, "Names", "First/Surname: Please enter combined max of 20 letters for first and surname."&@CR&"Names can only contain letters,numbers and underscores.")
		Return
	EndIf
	
	;reverse extn to generate password
	$l = StringLen($extnn)
		$rextnn=""
		For $i = 1 to $l
			$l = StringRight($extnn, $i)
			$n = StringTrimRight($l, $i-1)
			$rextnn= $rextnn & $n
		Next
	
	$pwdd=$extnn & $rextnn

	;search and replace in template
	$tt = StringReplace($tt, "#extn#", $extnn)
	$tt = StringReplace($tt, "#pref#", $preff)
	$tt = StringReplace($tt, "#first#", $firstt)
	$tt = StringReplace($tt, "#surn#", $surnn)
	$tt = StringReplace($tt, "#pwd#", $pwdd)

	$s=$extnn &"_"& $preff &"_"& $surnn &"_"& $firstt &"_"
	If output("User Group Template Path",$s,$tt) = -1 Then Return

EndFunc



;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PICKUP GROUP TEMPLATE MOD
;;;;;;;;;;;;;;;;;;;;;;;;;;
Func modtemplategroup()
	If loadtemp("PICKUP.txt") = -1 Then Return

	;check pickup group number
	$pnumm=StringStripWS(GUICtrlRead($pnum,1),7)
	If chknum($pnumm,2,3,"Pickup Goup") = -1 Then Return
	
	;setup template	
	$ttout=""


	;loop though array of inputs validate extensions then get prefixes, then generate template - if box empty then skip
	For $i=0 To UBound($a)-1
		;reset template for each run
		$ttt=$tt
		
		If GUICtrlRead($a[$i],1) = "" Then ContinueLoop
		;check valid extension numbers
		$extnn=StringStripWS(GUICtrlRead($a[$i],1),7)
		If chknum($extnn,4,4,"Extension, box "&$i+1) = -1 Then Return

		;get numFile:Siemens CMP Generator.pngber prefixes
		If getprefix($extnn) = -1 Then Return
			
		;alter template
		$ttt = StringReplace($ttt, "#extn#", $extnn)
		$ttt = StringReplace($ttt, "#pref#", $preff)
		$ttt = StringReplace($ttt, "#pnum#", $pnumm)
		
		;concat template
		$ttout=$ttout &@CRLF& $ttt
	Next
	
	;catch no numbers being put in
	If $ttout = "" Then Return -1
		
	$s=$pnumm &"_"
	If output("Pickup Group Template Path",$s,$ttout) = -1 Then Return
	
EndFunc


Func chknum($v,$min,$max,$txt)
	;input: characters and number of digits wanted,$txt it relates to
	;read values entered and strip WS, then check data formatting

	$l=StringLen($v)
	If $l > $max OR $l < $min OR NOT StringIsDigit($v) Then
	;If $l > $max OR $l < $min Then
		MsgBox(0, $txt&"Number", "Error with "&$txt&" Number: Please enter a number with a minimum of "&$min&" digits and a maxium of "&$max&" digits.")
		Return -1
	EndIf

EndFunc

Func getprefix($e)
	Global $preff
	Switch StringLeft($e,1)
		Case 1
			$preff = 223
		Case 2 To 5
			$preff = 252
		Case 7
			$preff = 229
	EndSwitch
EndFunc


; GUI MESSAGE LOOP
GuiSetState()
While 1
	$msg = GuiGetMsg()
	Select
	
	Case $msg = $GUI_EVENT_CLOSE
		Exit
	Case $msg = $useitem
		MsgBox(64, "Use", "[Top Menu] Operation & Maintanence > Recovery"&@CR&@CR&"[LHS] Import and Export > Import >"&@CR&@CR&"Browse to new script file, "&@TempDir&"\xxxxx.cmp"&@CR&@CR&"Next, Change type to 'Openscape Voice'"&@CR&@CR&"Click on target node button  and select UOL production"&@CR&@CR&"Save, Import")
	Case $msg = $aboutitem
		MsgBox(64, "About", "Written for the University of Leicester "&@CR&@CR&"by richud.com 2011-2012"&@CR&@CR&"http://www.richud.com/wiki/AutoIT_Siemens_CMP_Generator"&@CR&@CR&"Bug / feature requests to: rfm6@le.ac.uk")
	Case $msg = $infoitem
		MsgBox(32, "Info", "Create CMP file for SIEMENS phone system"&@CR&@CR&"Enter details and press Generate CMP."&@CR&@CR&"Extension must be only 4 numbers."&@CR&@CR&"Combined total for surname and firstname is 20 letters.")
    Case $msg = $genuser
		modtemplateuser()
	Case $msg = $addp
		pickup(5)
	Case $msg = $gengroup
		modtemplategroup()
  EndSelect

WEnd