IF NOT checkUpdate()
MESSAGEBOX("There was an error applying system update. Please contact IT support",16,_SCREEN.CAPTION)
RETURN .F.
ENDIF
FUNCTION checkUpdate()
LOCAL lcVersion
lcVersion = GetPOSVersion() && AGETFILEVERSION(AVER,'\ezcell\ezcell.exe')
cUpdateFile = lcVersion + '.upd' && AVER[4]+'.upd'
IF NOT FILE(cUpdateFile)
IF PrePareforUpdate()
WAIT WINDOW "Updating EzCell POS to Version: " + lcVersion + ", Please Wait...." +CHR(13) + CHR(13) +;
"Please do NOT launch POS on any other machine until this message disappear" + CHR(13) + ;
"If you do so, you will interrupt your Update process and might damage your EzCellPOS files." NOWAIT
ERASE \ezcellERP\*.upd
DO UpdateTables
FCREATE(cUpdateFile)
IF FILE("\ezcellERP\ExitEzCell.txt")
ERASE \ezcellERP\exitezcell.txt
ENDIF
WAIT CLEAR
RETURN .T.
ELSE
RETURN .F.
ENDIF
ELSE
RETURN .T.
ENDIF
ENDFUNC
FUNCTION GetPOSVersion()
LOCAL lcVersion
lcVersion = '0.0'
IF FILE("EzCellERP.exe")
DIMENSION laVer[1]
AGETFILEVERSION(laVer, "ezcellerp.exe")
IF ALEN(laVer) > 0
lcVersion = ALLTRIM(laVer[4])
ENDIF
ENDIF
RETURN lcVersion
ENDFUNC
FUNCTION PrePareforUpdate()
TRY
IF NOT FILE("\EzCellERP\exitezcell.txt")
STRTOFILE("do not use pos","\ezcellerp\exitezcell.txt")
ENDIF
LOCAL laTables, lcTableName, lcKey
CLOSE DATABASES ALL
IF NOT DBUSED("EzCellERP")
OPEN DATABASE "\EzCellERP\DATA\EzCellERP" EXCLUSIVE
ENDIF
SET DATABASE TO ezcellERP
DIMENSION laTables[1]
ADBOBJECTS(laTables, 'TABLE')
FOR EACH lcTableName IN laTables
USE (lcTableName) IN 0 EXCLUSIVE
ENDFOR
CLOSE DATABASES ALL
llSuccess = .T.
EXIT
CATCH TO loexp
MESSAGEBOX("Please make sure the system is not being used in order to apply the update.",16,"Failed to update")
llSuccess = .F.
ERASE \ezcellERP\exitezcell.txt
EXIT
ENDTRY
CLOSE DATABASES ALL
RETURN llSuccess
ENDFUNC
FUNCTION AddNewField(tcTable,tcField,tcType,tnLen,tnDec)
lcTable = UPPER(ALLTRIM(tcTable))
lcField = UPPER(ALLTRIM(tcField))
lcType = UPPER(ALLTRIM(tcType))
lnLen = tnLen
lnDec = tnDec
IF EMPTY(tcTable) OR EMPTY(tcField) OR EMPTY(tcType)
RETURN .F.
ENDIF
IF NOT INLIST(lcType,'C','N','D','T','L','M','I')
RETURN .F.
ENDIF
IF (EMPTY(lnLen) OR lnLen = 0) AND INLIST(lcType, "C", "N")
RETURN .F.
ENDIF
lcFileName = ADDBS(gcDataFolder)+lcTable + '.dbf'
IF NOT FILE(lcFileName)
RETURN .F.
ENDIF
DO CASE
CASE lcType = 'C'
lcType = [C(]+ALLTRIM(STR(lnLen))+[)]
CASE lcType = 'N'
lcType = [N(]+ALLTRIM(STR(lnLen))+[,]+ALLTRIM(STR(lnDec))+[)]
CASE lcType = 'L'
lcType = [L]
CASE lcType = 'M'
lcType = 'M'
CASE lcType = 'D'
lcType = 'D'
CASE lcType = 'T'
lcType = 'T'
CASE lcType = 'I'
lcType = 'I'
ENDCASE
CLOSE DATABASES ALL
USE (lcFileName) IN 0 EXCLUSIVE
IF FieldExist(tcTable,tcField)
llAdd = .F.
ELSE
llAdd = .T.
ENDIF
lcExec = ""
IF llAdd
ALTER TABLE &tcTable ADD COLUMN &tcField &lcType
CLOSE DATABASES ALL
RETURN .T.
ENDIF
CLOSE DATABASES ALL
RETURN .F.
ENDFUNC
**********************************
FUNCTION AlterField(tcTable,tcField,tcType,tnLen,tnDec)
LOCAL lcTable, lcField, lcType, lnLen, lnDec, llReturn, lcFileName
lcTable = UPPER(ALLTRIM(tcTable))
lcField = UPPER(ALLTRIM(tcField))
lcType = UPPER(ALLTRIM(tcType))
lnLen = tnLen
lnDec = tnDec
IF EMPTY(tcTable) OR EMPTY(tcField) OR EMPTY(tcType)
RETURN .F.
ENDIF
IF NOT INLIST(lcType,'C','N','D','T','L','M','I')
RETURN .F.
ENDIF
IF (EMPTY(lnLen) OR lnLen = 0) AND INLIST(lcType, "C", "N")
RETURN .F.
ENDIF
lcFileName = ADDBS(gcDataFolder)+lcTable + '.dbf'
IF NOT FILE(lcFileName)
RETURN .F.
ENDIF
DO CASE
CASE lcType = 'C'
lcType = [C(]+ALLTRIM(STR(lnLen))+[)]
CASE lcType = 'N'
lcType = [N(]+ALLTRIM(STR(lnLen))+[,]+ALLTRIM(STR(lnDec))+[)]
CASE lcType = 'L'
lcType = [L]
CASE lcType = 'M'
lcType = 'M'
CASE lcType = 'D'
lcType = 'D'
CASE lcType = 'T'
lcType = 'T'
CASE lcType = 'I'
lcType = 'I'
ENDCASE
CLOSE DATABASES ALL
USE (lcFileName) IN 0 EXCLUSIVE
IF FieldExist(tcTable,tcField)
ALTER TABLE &tcTable ALTER COLUMN &tcField &lcType
ELSE
ALTER TABLE &tcTable ADD COLUMN &tcField &lcType
ENDIF
llReturn = .T.
CLOSE DATABASES ALL
RETURN llReturn
ENDFUNC
******************
FUNCTION FieldExist(tcTable,tcField)
IF NOT USED(tcTable)
RETURN .T. && something wrong or
ENDIF
llFound = .F. && not found
SELECT (tcTable)
FOR gnCount = 1 TO FCOUNT( ) && Loop for number of fields
IF UPPER(ALLTRIM(FIELD(gnCount))) == UPPER(ALLTRIM(tcField)) && Display each field
llFound = .T. && found it
EXIT
ENDIF
NEXT
RETURN llFound
ENDFUNC