You are on page 1of 22

Project COVID19 Part 1 Custom-Folder

Part 1
Custom-Folder

31/03/2020 1
Project COVID19 Part 1 Custom-Folder

Custom-Folder List of elements in the custom-folder.

31/03/2020 2
Project COVID19 Part 1 Analysis

Analysis Chart

FMPAIS1 FMREGS1

ID ID
CO DIG O F E C HA
NOMBRE P AIS _ ID
DIA1_EPIDEM CASOS
...

31/03/2020 3
Project COVID19 Part 1 Analysis

Analysis Main Information

COVID19.wda

Directory F:\WDT2\CV19\COVID19.ana\
Data File Directory Application Directory

Generation # Nb Files Nb Items Nb Links Nb Connections Nb groups


6 2 15 0 0 0

Analysis Item Dictionary

Key with Duplicates


Item Type Unique Key Used by...
Size

CASOS 4-byte integer FMREGS1


CODIGO String 5 FMPAIS1
CompKey <Unused>
DIA1_EPIDEM Date (yyyymmdd) FMPAIS1
DIA_EPIDEM 4-byte integer FMREGS1
FALLEC 4-byte integer FMREGS1
FECHA Date (yyyymmdd) FMREGS1
FMPAIS1ID <Unused>
FMREGS1ID Automatic Identifier (8 FMREGS1
ID Automatic Identifier (8 FMPAIS1
Automatic Identifier (8 FMREGS1
NOMBRE String 50 FMPAIS1
PAIS_ID 8-byte integer FMREGS1
PAIS_IDFECHA <Unused>
PAISID_FECHA Composite Key 16 FMREGS1
SEM_EPIDEM 4-byte integer FMREGS1

Analysis Files and Items

31/03/2020 4
Project COVID19 Part 1 Analysis

Memo Compression
Read/Write Log *¹
exceeding 2GB

Memo Encrypt.
Index Encrypt.
Data Encrypt.
Automatic ID
Abbreviation

Generation #

Record Size

Write Log *¹
Replication

Security *¹
Spaces *¹

Type
FMPAIS1 3 83 HFSQL
Classic
FMREGS1 5 51 HFSQL
Classic
¹ Spaces * : Complete strings with spaces Write Log * : Logging write operations
Read/Write Log * : Logging read/write operations Security * : High Security Mode

FMPAIS1 Files and Items

Main Information
FMPAIS1 FMPAIS1

Name on Disk FMPAIS1.fic

FMPAIS1 file items

Key with Duplicates

Default Value
Unique Key
Caption Type

Direction
Size

ID Identifier of FMPAIS1 Automatic Identifier (8


bytes)
CODIGO CODIGO String 5
NOMBRE NOMBRE String 50
DIA1_EPIDEM DIA1_EPIDEM Date (yyyymmdd)

31/03/2020 5
Project COVID19 Part 1 Files and Items

FMREGS1 Files and Items

Main Information
FMREGS1 FMREGS1

Name on Disk FMREGS1.fic

FMREGS1 file items

Key with Duplicates

Default Value
Unique Key
Caption Type

Direction
Size
ID ID Automatic Identifier (8
bytes)
FECHA FECHA Date (yyyymmdd)
PAIS_ID PAIS_ID 8-byte integer 0
CASOS CASOS 4-byte integer 0
FALLEC FALLEC 4-byte integer 0
DIA_EPIDEM DIA_EPIDEM 4-byte integer 0
SEM_EPIDEM SEM_EPIDEM 4-byte integer 0
PAISID_FECHA PAIS_ID + FECHA Composite Key: 16
PAIS_ID+FECHA

31/03/2020 6
Project COVID19 Part 2 Table of Contents

Part 2
Table of Contents

31/03/2020 7
Project COVID19 Part 2 Table of Contents

Table of Contents
Project COVID19

2 Custom-Folder Part 1
2 List of elements in the
3 Analysis
3 Chart
4 Main Information
4 Item Dictionary
4 Files and Items
5 FMPAIS1
6 FMREGS1

31/03/2020 8
Project COVID19 WIN_MENU1

Global declarations of WIN_MENU1


PROCEDURE MyWindow()

Click BTN_CREAR_BASESDATOS
HCreationIfNotFound("*")
HModifyStructure("*")

Click BTN_IMPORTAR
Open(WIN_IMPORT1)

Click BTN_DATOS1
Open(WIN_REGISTROS1)

Click BTN_DESCARGAR
sUrl is string
//sUrl="https://www.ecdc.europa.eu/sites/default/files/documents/COVID-19-geographic-disbtr
ibution-worldwide-2020-03-27.
xlsx"

sUrl=
"https://www.ecdc.europa.eu/en/publications-data/download-todays-data-geographic-distributi
on-covid-19-
cases-worldwide"
ShellExecute(sUrl)

Click BTN_EXIT
Close()

Click BTN_VACIAR_TABLAS
IF YesNo("Vaciar las tablas de Paises y Registros?")=Yes THEN
HDeleteAll(FMPAIS1)
HDeleteAll(FMREGS1)
Info("Tabla de Paises y Registros de Casos borrados","Los Paises y Registros se
volveran a importar desde el inicio")
ELSE
ToastDisplay("Operacion Cancelada")
END

31/03/2020 1
Project COVID19 WIN_IMPORT1

Global declarations of WIN_IMPORT1


PROCEDURE MyWindow()

Click BTN_GET_PATHFILE
sFile is string

sFile = fSelect("", "", "Seleccionar un Fichero Excel...", "All the files (*.*)" + TAB +
"*.*", "*.*")
IF sFile<>"" THEN
EDT_PATHFILE=sFile
END

Click BTN_IMPORTAR
nIdPais is 8-byte int
nLin is int
k is int
nRows is int
sCod is string
dFecha is Date

nRows=TableCount(TABLE_REGS)
PROGBAR_PAISES..MaxValue=nRows
TraceStart(trTopMost)

// Controlar Paises
FOR nLin=1 TO nRows
IF TABLE_REGS[nLin].COL_PAIS_ID=0 THEN
sCod=Upper(NoSpace(TABLE_REGS[nLin].COL_PAIS_CODIGO))
PROGBAR_PAISES=nLin

// Si el Pais no existe , crearlo en la base de datos de paises


IF not HReadSeekFirst(FMPAIS1,CODIGO,sCod) THEN
HReset(FMPAIS1)
FMPAIS1.CODIGO=sCod
FMPAIS1.NOMBRE=Upper(NoSpace(TABLE_REGS[nLin].COL_PAIS_NOMBRE))
HAdd(FMPAIS1)
Trace(FMPAIS1.CODIGO,FMPAIS1.NOMBRE)
END

// Colocar la columna PAIS_ID del pais indicado por sCod


IF HReadSeekFirst(FMPAIS1,CODIGO,sCod) THEN
FOR k=nLin TO nRows
IF TABLE_REGS[k].COL_PAIS_ID=0 AND TABLE_REGS[k].COL_PAIS_CODIGO=sCod THEN
TABLE_REGS[k].COL_PAIS_ID=FMPAIS1.ID
END
END
END
END
END

// Control Registros Existentes

nIdPais=0
PROGBAR_REGISTROS_EXISTEN..MaxValue=nRows
FOR nLin=1 TO nRows
PROGBAR_REGISTROS_EXISTEN=nLin
dFecha=TABLE_REGS[nLin].COL_FECHA
nIdPais=TABLE_REGS[nLin].COL_PAIS_ID
IF HReadSeekFirst(FMREGS1,PAISID_FECHA,[nIdPais,dFecha]) THEN
TABLE_REGS[nLin].COL_REG_ID=FMREGS1.ID
END
END

// Insertar Nuevos registros de Casos

31/03/2020 1
Project COVID19 WIN_IMPORT1

Trace("Registros Nuevos")
Trace("----------------")
PROGBAR_REGISTROS_NUEVOS..MaxValue=nRows
FOR nLin=1 TO nRows
PROGBAR_REGISTROS_NUEVOS=nRows
IF TABLE_REGS[nLin].COL_REG_ID=0 THEN
HReset(FMREGS1)
FMREGS1.PAIS_ID=TABLE_REGS[nLin].COL_PAIS_ID
FMREGS1.FECHA=TABLE_REGS[nLin].COL_FECHA
FMREGS1.CASOS=TABLE_REGS[nLin].COL_CASOS
FMREGS1.FALLEC=TABLE_REGS[nLin].COL_FALLECIDOS
HAdd(FMREGS1)
Trace(FMREGS1.PAIS_ID,FMREGS1.FECHA)
END
END

// Control Fecha Primer Caso del Pais


//
//

IF HExecuteQuery(QRY_FMREGS1_PRIMER_DIA_PAIS,hQueryDefault) THEN
PROGBAR_CALCULO_DIA1..MaxValue=HNbRec(QRY_FMREGS1_PRIMER_DIA_PAIS)
PROGBAR_CALCULO_DIA1=0
FOR EACH QRY_FMREGS1_PRIMER_DIA_PAIS
nIdPais=QRY_FMREGS1_PRIMER_DIA_PAIS.PAIS_ID
PROGBAR_CALCULO_DIA1++
IF HReadSeekFirst(FMPAIS1,ID,nIdPais) THEN
IF FMPAIS1.DIA1_EPIDEM="" THEN
FMPAIS1.DIA1_EPIDEM=QRY_FMREGS1_PRIMER_DIA_PAIS.DIA1_EPIDEMIA
HModify(FMPAIS1)
END
END
END
END

TraceEnd()

Click BTN_IMPORTAR_XLS
sPathFile is string
nLin is int
xlsFich is xlsDocument
nRows is int
l is int

sPathFile=EDT_PATHFILE
IF fFileExist(sPathFile) THEN
xlsFich=xlsOpen(sPathFile)
IF ErrorOccurred=True THEN RETURN
nRows=xlsNbRow(xlsFich)
//nCols=tablecount(TABLE_REGS,toColumn)

FOR l=2 TO nRows


nLin=TableAddLine(TABLE_REGS)
TABLE_REGS[nLin].COL_REG_ID=0
TABLE_REGS[nLin].COL_PAIS_ID=0
TABLE_REGS[nLin].COL_PAIS_CODIGO=Upper(NoSpace(xlsFich[l,8]))
TABLE_REGS[nLin].COL_PAIS_NOMBRE=Upper(NoSpace(xlsFich[l,7]))
TABLE_REGS[nLin].COL_FECHA=xlsFich[l,1]
TABLE_REGS[nLin].COL_CASOS=xlsFich[l,5]
TABLE_REGS[nLin].COL_FALLECIDOS=xlsFich[l,6]
END
END
IF nLin<1 THEN
Info("Atencion se ha producido un error")
ELSE
Info("Proceso finalizado")
END

31/03/2020 2
Project COVID19 WIN_REGISTROS1

Global declarations of WIN_REGISTROS1


PROCEDURE MyWindow()

End of initialization of WIN_REGISTROS1

//COMBO_FMPAIS2=159 // spain

Selecting a row of COMBO_FMPAIS2


ExecuteProcess(BTN_REFRESH1,trtClick)

Click BTN_REFRESH1
nIdPais is 8-byte int
nLin is int
dFecDia1 is Date

nIdPais=COMBO_FMPAIS2
IF HReadSeekFirst(FMPAIS1,ID,nIdPais) THEN
dFecDia1=FMPAIS1.DIA1_EPIDEM

EDT_PAIS_CODIGO=FMPAIS1.CODIGO
EDT_PAIS_NOMBRE=FMPAIS1.NOMBRE
EDT_PAIS_DIA1EPIDEMIA=dFecDia1
ELSE
EDT_PAIS_CODIGO=""
EDT_PAIS_NOMBRE=""
EDT_PAIS_DIA1EPIDEMIA=""
nIdPais=0

END
IF nIdPais=0 THEN
Info("FALTA SELECCIONAR PAIS")
RETURN
END

TableDeleteAll(TABLE_REGS)
IF HExecuteQuery(QRY_FMREGS1,hQueryDefault,nIdPais,dFecDia1) THEN
FOR EACH QRY_FMREGS1
nLin=TableAddLine(TABLE_REGS)
TABLE_REGS[nLin].COL_ID=QRY_FMREGS1.ID
TABLE_REGS[nLin].COL_PAIS_ID=QRY_FMREGS1.PAIS_ID
TABLE_REGS[nLin].COL_FECHA=QRY_FMREGS1.FECHA
TABLE_REGS[nLin].COL_CASOS=QRY_FMREGS1.CASOS
TABLE_REGS[nLin].COL_FALLECIDOS=QRY_FMREGS1.FALLEC
END
END

floc_CalcularTabla()

Click BTN_NoName2
nId is 8-byte int
nLin is int

// Colocar Fecha como Dia1 Epidemia-Pandemia


nLin=TABLE_REGS
IF nLin>0 THEN
nId=COMBO_FMPAIS2
IF HReadSeekFirst(FMPAIS1,ID,nId) THEN
FMPAIS1.DIA1_EPIDEM=TABLE_REGS[nLin].COL_FECHA
HModify(FMPAIS1)
END
END

Click BTN_GRAFICOS

31/03/2020 1
Project COVID19 WIN_REGISTROS1

Open(WIN_GRAFICOS2)

Local Procedure floc_CalcularTabla


PROCEDURE floc_CalcularTabla()
nLin is int
nRows is int
nSumaCasos is int
nSumaFallecidos is int

rFactorCrecimiento is real

nRows=TableCount(TABLE_REGS)

// Linea 1ª
nSumaCasos=TABLE_REGS[1].COL_CASOS
nSumaFallecidos=TABLE_REGS[1].COL_FALLECIDOS
TABLE_REGS[1].COL_SUM_CASOS=nSumaCasos
TABLE_REGS[1].COL_SUM_FALLECIDOS=nSumaFallecidos

TABLE_REGS[1].COL_DIA=1
FOR nLin=2 TO nRows
TABLE_REGS[nLin].COL_DIA=nLin
nSumaCasos+=TABLE_REGS[nLin].COL_CASOS
TABLE_REGS[nLin].COL_SUM_CASOS=nSumaCasos
TABLE_REGS[nLin].COL_DELTA_CASOS=TABLE_REGS[nLin].COL_CASOS-TABLE_REGS[nLin-1].COL_
CASOS
rFactorCrecimiento=TABLE_REGS[nLin].COL_SUM_CASOS/TABLE_REGS[nLin-1].COL_SUM_CASOS
TABLE_REGS[nLin].COL_FAC_CRE=rFactorCrecimiento
TABLE_REGS[nLin].COL_GRAF1=rFactorCrecimiento
nSumaFallecidos+=TABLE_REGS[nLin].COL_FALLECIDOS
TABLE_REGS[nLin].COL_SUM_FALLECIDOS=nSumaFallecidos

END

EDT_TOT_CASOS=nSumaCasos
EDT_TOT_FALLECIDOS=nSumaFallecidos

31/03/2020 2
Project COVID19 WIN_GRAFICOS2

Global declarations of WIN_GRAFICOS2


PROCEDURE MyWindow()

End of initialization of WIN_GRAFICOS2


EDT_PAIS_CODIGO=WIN_REGISTROS1.EDT_PAIS_CODIGO
EDT_PAIS_NOMBRE=WIN_REGISTROS1.EDT_PAIS_NOMBRE
EDT_PAIS_DIA1EPIDEMIA=WIN_REGISTROS1.EDT_PAIS_DIA1EPIDEMIA
floc_graficar()

Whenever modifying RADIO_DATO


floc_graficar()

Local Procedure floc_graficar


PROCEDURE floc_graficar()

nLin is int
nRows is int
rDato is real

grDeleteAll(CHART_GRAF1)
nRows=TableCount(WIN_REGISTROS1.TABLE_REGS)
FOR nLin=1 TO nRows
SWITCH RADIO_DATO
CASE 1 // Casos Dia
rDato=WIN_REGISTROS1.TABLE_REGS[nLin].COL_CASOS

CASE 2 // Casos Totales


rDato=WIN_REGISTROS1.TABLE_REGS[nLin].COL_SUM_CASOS

CASE 3 // Factor de crecimiento


rDato=WIN_REGISTROS1.TABLE_REGS[nLin].COL_FAC_CRE

CASE 4 // Fallecidos Dia


rDato=WIN_REGISTROS1.TABLE_REGS[nLin].COL_FALLECIDOS

CASE 5 // Fallecidos Totales


rDato=WIN_REGISTROS1.TABLE_REGS[nLin].COL_SUM_FALLECIDOS

END

grAddData(CHART_GRAF1,1,nLin,rDato)
grCategoryLabel(CHART_GRAF1,nLin,StringBuild("%1º",nLin))

END
grLineThickness(CHART_GRAF1,grAllSeries,5)
grDraw(CHART_GRAF1)

31/03/2020 1
Project COVID19 QRY_FMPAIS1

SQL Code of QRY_FMPAIS1


SELECT * FROM FMPAIS1 ORDER BY CODIGO

31/03/2020 1
Project COVID19 QRY_FMREGS1

SQL Code of QRY_FMREGS1


SELECT
FMREGS1.ID AS ID,
FMREGS1.FECHA AS FECHA,
FMREGS1.PAIS_ID AS PAIS_ID,
FMREGS1.CASOS AS CASOS,
FMREGS1.FALLEC AS FALLEC,
FMREGS1.DIA_EPIDEM AS DIA_EPIDEM
FROM
FMREGS1
WHERE
FMREGS1.PAIS_ID = {ParamPAIS_ID}
AND FMREGS1.FECHA >= {pFECDIA1}
ORDER BY
PAIS_ID ASC,
FECHA ASC

31/03/2020 1
Project COVID19 QRY_FMREGS1_PRIMER_DIA_PAIS

SQL Code of QRY_FMREGS1_PRIMER_DIA_PAIS


SELECT
FMREGS1.PAIS_ID AS PAIS_ID,
MIN(FMREGS1.FECHA) AS DIA1_EPIDEMIA
FROM
FMREGS1
WHERE
FMREGS1.CASOS <> 0
GROUP BY
FMREGS1.PAIS_ID

31/03/2020 1

You might also like