/*-------------------------------------------------------------------------------------------------*/
#include "padron.ch"
#include "ads.ch"
/*-------------------------------------------------------------------------------------------------*/
GLOBAL oMutex
REQUEST HB_LANG_ESWIN, HB_CODEPAGE_ESWIN
REQUEST ADS, DBFCDX, DBFFPT
EXTERNAL AdsKeyNo, AdsKeyCount, AdsGetRelKeyPos, AdsSetRelKeyPos
EXTERNAL OrdKeyNo, OrdKeyCount, OrdKeyGoTo, OrdKeyRelPos
/*-------------------------------------------------------------------------------------------------*/
PROCEDURE Main()
Padron()
RETURN
/*-------------------------------------------------------------------------------------------------*/
FUNCTION Main_Iniciar()
LOCAL hIniFile
LOCAL lConectar
LOCAL cError1, cError2
LOCAL nTipoServ, cServidor
HB_LangSelect( "ESWIN" )
HB_SetCodePage( "ESWIN" )
RddSetDefault( "ADS" )
AdsSetCharType( ADS_ANSI )
AdsSetFileType( ADS_ADT )
AdsRightsCheck( FALSE )
AdsLocking( FALSE )
SET CENTURY ON
SET DATE BRIT
SET EPOCH TO 1964
SET OPTIMIZE ON
SET CONFIRM ON
SET DELETED ON
SET TRACE OFF
SET SOFTSEEK OFF
SET DECIMAL TO 4
SET FIXED ON
SET( _SET_FILECASE, 1 )
SET( _SET_DIRCASE, 1 )
OverrideAndExtend()
SetBalloon( TRUE )
SetGetColorFocus( CLR_MENTA )
SetDialogEsc( FALSE )
hIniFile := HB_ReadIni( Lower( ".\PADRON.INI" ) )
lConectar := FALSE
nTipoServ := 0
cError1 := ""
cError2 := ""
IF hIniFile <> NIL
IF Len( HGETKEYS( hIniFile ) ) > 0
TRY
cTipo := hIniFile[ "DATOS", "tipo" ]
CATCH
cTipo := "0"
END
DO CASE
CASE cTipo=="0"
nTipoServ := 0
cServidor := ""
CASE cTipo=="1"
nTipoServ := ADS_LOCAL_SERVER
cServidor := hIniFile[ "DATOS", "conexion_local" ]
CASE cTipo=="2"
nTipoServ := ADS_REMOTE_SERVER
cServidor := hIniFile[ "DATOS", "conexion_remota" ]
CASE cTipo=="3"
nTipoServ := ADS_AIS_SERVER
cServidor := hIniFile[ "DATOS", "conexion_internet" ]
ENDCASE
ELSE
MsgStop( "Error de lectura de archivo de conexión." )
ENDIF
ELSE
MsgStop( "Error de lectura de archivo de conexión." )
ENDIF
IF nTipoServ > 0
MsgRun( "Espere un momento, se esta intentando conectar al servidor de datos", "CONECTANDO" , ;
{|| lConectar := AdsConnect60( cServidor, nTipoServ, "myusuario", "myclave", NIL ,@hConexion ) } )
IF !lConectar
cError1 := AdsGetLastError( @cError2 )
MsgStop( "Error en conexion a servidor de datos" + FINL + FINL + CStr(cError2) + FINL + CStr(cError1) )
ELSE
cTitulo := "Padron Electoral - Nicaragua. [" + AllTrim( cServidor ) + "]"
ENDIF
ENDIF
RETURN lConectar
/*-------------------------------------------------------------------------------------------------*/
PROCEDURE Padron()
LOCAL oB1, oB2, oB3
LOCAL oB4, oB5, oB6
PUBLIC hConexion
PRIVATE oDlg
PRIVATE oFont
PRIVATE cFolder
PRIVATE cTitulo
PRIVATE oClipboard
PRIVATE cCedula ,; /*TIPO_ID*/
cNombre1 ,; /*PNOM*/
cNombre2 ,; /*SNOM*/
cApellido1 ,; /*PAPELL*/
cApellido2 ,; /*PAPELL*/
cDireccion ,; /*DOMIC*/
cDepaMuni ,; /*DEP->DEPADESC, LIS->ID_MUN*/
dFechaNac ,; /*FECH_NAC*/
cSexo /*_*/
IF !Main_Iniciar()
RETURN
ENDIF
Limpiar_Datos( FALSE )
DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12
DEFINE DIALOG oDlg NAME "DLG_PADRON" TITLE cTitulo FONT oFont ICON GetIcon()
REDEFINE FOLDER oFolder ;
ID 101 OF oDlg ;
PROMPTS "Busqueda por cédula", ;
"Busqueda por nombres y/o apellidos" ;
PAGES "PAGE1",;
"PAGE2" ;
ON CHANGE Limpiar_Datos( TRUE )
REDEFINE GET cCedula ;
ID 101 OF oFolder:aDialogs[1] ;
PICTURE "#############!" ;
UPDATE
REDEFINE BUTTON oB1 ;
ID 301 OF oFolder:aDialogs[1] ;
ACTION Buscar_PorCedula( cCedula )
REDEFINE BUTTON oB2 ;
ID 302 OF oFolder:aDialogs[1] ;
ACTION Limpiar_Datos( TRUE ) ;
CANCEL
REDEFINE BUTTONBMP oB3 ;
ID 303 OF oFolder:aDialogs[1] ;
BITMAP "CLIPBOARD" ;
WHEN !Empty( cCedula ) ;
ACTION MostrarCedula( cCedula ) ;
REDEFINE GET cNombre1 ;
ID 102 OF oFolder:aDialogs[1] ;
WHEN FALSE ;
UPDATE
REDEFINE GET cNombre2 ;
ID 103 OF oFolder:aDialogs[1] ;
WHEN FALSE ;
UPDATE
REDEFINE GET cApellido1 ;
ID 104 OF oFolder:aDialogs[1];
WHEN FALSE ;
UPDATE
REDEFINE GET cApellido2 ;
ID 105 OF oFolder:aDialogs[1] ;
WHEN FALSE ;
UPDATE
REDEFINE GET dFechaNac ;
ID 106 OF oFolder:aDialogs[1] ;
WHEN FALSE ;
UPDATE
REDEFINE GET cSexo ;
ID 107 OF oFolder:aDialogs[1] ;
WHEN FALSE ;
UPDATE
REDEFINE GET cDepaMuni ;
ID 108 OF oFolder:aDialogs[1] ;
WHEN FALSE ;
UPDATE
REDEFINE GET cDireccion;
ID 109 OF oFolder:aDialogs[1];
MEMO WHEN FALSE UPDATE
/**/
REDEFINE GET cCedula ;
ID 101 OF oFolder:aDialogs[2] ;
PICTURE "#############!" ;
READONLY ;
UPDATE
REDEFINE BUTTON oB4 ;
ID 301 OF oFolder:aDialogs[2] ;
ACTION Limpiar_Datos( TRUE )
REDEFINE BUTTONBMP oB5 ;
ID 302 OF oFolder:aDialogs[2] ;
BITMAP "CLIPBOARD" ;
WHEN !Empty( cCedula ) ;
ACTION MostrarCedula( cCedula )
REDEFINE GET cNombre1 ;
ID 102 OF oFolder:aDialogs[2];
PICTURE "@!" ;
UPDATE
REDEFINE GET cNombre2 ;
ID 103 OF oFolder:aDialogs[2];
PICTURE "@!" ;
UPDATE
REDEFINE GET cApellido1 ;
ID 104 OF oFolder:aDialogs[2];
PICTURE "@!" ;
UPDATE
REDEFINE GET cApellido2 ;
ID 105 OF oFolder:aDialogs[2] ;
PICTURE "@!" ;
UPDATE
REDEFINE GET dFechaNac ;
ID 106 OF oFolder:aDialogs[2] ;
WHEN FALSE ;
UPDATE
REDEFINE GET cSexo ;
ID 107 OF oFolder:aDialogs[2] ;
WHEN FALSE ;
UPDATE
REDEFINE GET cDepaMuni ;
ID 108 OF oFolder:aDialogs[2] ;
WHEN FALSE ;
UPDATE
REDEFINE GET cDireccion ;
ID 109 OF oFolder:aDialogs[2] ;
WHEN FALSE ;
MEMO ;
UPDATE
REDEFINE BUTTON oB6;
ID 303 OF oFolder:aDialogs[2] ;
WHEN !Empty( cNombre1 ) .or. !Empty( cNombre2 ) .or. !Empty( cApellido1 ) .or. !Empty( cApellido2 ) ;
ACTION Buscar_PorNombre()
/**/
REDEFINE BUTTON ;
ID 201 OF oDlg ;
ACTION oDlg:END() ;
CANCEL
oB1:cToolTip := "Buscar datos de la cédula indicada"
oB2:cToolTip := "Limpiar datos de busqueda anterior"
oB3:cToolTip := "Muestra numero de cédula con giones"
oB4:cToolTip := "Limpiar datos de busqueda anterior"
oB5:cToolTip := "Muestra numero de cédula con giones"
oB6:cToolTip := "Buscar datos del la cédula indicada"
ACTIVATE DIALOG oDlg CENTER ON INIT Inicializar_Clipboard()
Main_Finalizar()
RETURN
/*----------------------------------------------------------------------------*/
PROCEDURE Inicializar_Clipboard()
DEFINE CLIPBOARD oClipboard OF oDlg
RETURN
/*----------------------------------------------------------------------------*/
FUNCTION Buscar_PorCedula()
LOCAL cSQL
LOCAL lEncontrado := TRUE
IF Empty( cCedula )
lEncontrado := FALSE
MsgAlert( "Introdusca el número de cédula a buscar sin los giones." )
oFolder:aDialogs[1]:aControls[1]:SetFocus()
ELSE
cSQL := "SELECT {static} L.TIPO_ID, L.PNOM, L.SNOM, L.PAPELL, L.SAPELL, L.DOMIC, L.FECH_NAC, L._, "
cSQL += "M.MUNIDESC AS MUNICIPIO, D.DEPADESC AS DEPARTAMEN "
cSQL += "FROM LISTA AS L "
cSQL += "LEFT OUTER JOIN MUNICIPIOS AS M ON L.ID_MUN=M.IDMUNICIPI "
cSQL += "LEFT OUTER JOIN DEPARTAMENTOS AS D ON M.DEPACODI=D.DEPACODI "
cSQL += "WHERE L.TIPO_ID=%1 "
IF ADSRunSQL( "TEMP", cSQL, { cCedula } )
IF TEMP->( Eof() )
lEncontrado := FALSE
ELSE
SELECT "TEMP"
cNombre1 := TEMP->PNOM
cNombre2 := TEMP->SNOM
cApellido1 := TEMP->PAPELL
cApellido2 := TEMP->SAPELL
cDireccion := TEMP->DOMIC
cDepaMuni := RTrim( TEMP->DEPARTAMEN ) + "/" + RTrim( TEMP->MUNICIPIO )
dFechaNac := TEMP->FECH_NAC
cSexo := IIf( TEMP->_ = "M", "MASCULINO", "FEMENINO" )
ENDIF
TEMP->( DBCloseArea() )
ENDIF
IF !lEncontrado
MsgInfo( "No se encontro el número de cédula indicado: " + FINL + cCedula )
Limpiar_Datos()
ENDIF
oDlg:Update()
ENDIF
DBSelectArea(0)
RETURN lEncontrado
/*----------------------------------------------------------------------------*/
FUNCTION Buscar_PorNombre()
LOCAL cSQL := ""
LOCAL cFileTemp := cTempFile( GetEnv( "TEMP" ) + "\", "DBF" )
LOCAL lEncontrado := TRUE
cSQL := "SELECT {static} L.TIPO_ID, L.PNOM, L.SNOM, L.PAPELL, L.SAPELL, L.DOMIC, "
cSQL += "L.FECH_NAC, L._, M.MUNIDESC AS MUNICIPIO, D.DEPADESC AS DEPARTAMEN "
cSQL += "FROM LISTA AS L "
cSQL += "LEFT OUTER JOIN MUNICIPIOS AS M ON L.ID_MUN=M.IDMUNICIPI "
cSQL += "LEFT OUTER JOIN DEPARTAMENTOS AS D ON M.DEPACODI=D.DEPACODI "
cSQL += "WHERE "
IF !Empty( cNombre1 )
cSQL += "L.PNOM=" + Var2Str( RTrim( cNombre1 ) ) + " AND "
ENDIF
IF !Empty( cNombre2 )
cSQL += "L.SNOM=" + Var2Str( RTrim( cNombre2 ) ) + " AND "
ENDIF
IF !Empty( cApellido1 )
cSQL += "L.PAPELL=" + Var2Str( RTrim( cApellido1 ) ) + " AND "
ENDIF
IF !Empty( cApellido2 )
cSQL += "L.SAPELL=" + Var2Str( RTrim( cApellido2 ) ) + " AND "
ENDIF
IF Right( cSQL, 5 ) = " AND "
cSQL := SubStr( cSQL, 1, Len( cSQL ) - 5 )
ENDIF
IF ADSRunSQL( "TEMP", cSQL )
IF TEMP->( Eof() )
lEncontrado := FALSE
ELSE
SELECT "TEMP"
WaitOn( "Buscando datos..." )
CursorWait()
COPY TO (cFileTemp) VIA "DBFCDX"
CursorArrow()
WaitOff()
ENDIF
TEMP->( DBCloseArea() )
IF !lEncontrado
MsgAlert("No se encontro coincidencia con los datos suministrados!")
ELSE
USE (cFileTemp) NEW ALIAS TEMP EXCLUSIVE VIA "DBFCDX"
IF NetErr()
lEncontrado := FALSE
MsgAlert( "Falla en apertura de archivo temporal con resultado de consulta." )
ELSE
INDEX ON TIPO_ID TAG TIPO_ID TEMPORARY
INDEX ON DEPARTAMEN TAG DEPARTAMEN TEMPORARY
INDEX ON MUNICIPIO TAG MUNICIPIO TEMPORARY
TEMP->( OrdSetFocus( "TIPO_ID" ), DBGoTop() )
lEncontrado := Buscar_EnLista()
TEMP->( DBCloseArea() )
ENDIF
DBDrop( cFileTemp )
oDlg:Update()
ENDIF
ELSE
lEncontrado := FALSE
ENDIF
DBSelectArea(0)
RETURN lEncontrado
/*----------------------------------------------------------------------------*/
FUNCTION Buscar_EnLista()
LOCAL oDlgB, oFntB, oBrwB, oBtnOk, oBtnCancel
LOCAL lOk := FALSE
PRIVATE oSay, cSay := "<>"
DEFINE FONT oFntB NAME "Courier New" SIZE 0, -12
DEFINE DIALOG oDlgB NAME "DLG_LISTA" OF oDlg ICON GetIcon() FONT oFont
REDEFINE XBROWSE oBrwB ID 101 OF oDlgB ALIAS "TEMP" ON DBLCLICK oBtnOk:Click() FONT oFntB
ADD TO oBrwB DATA TEMP->TIPO_ID TITLE "Identificación" SIZE 110 TAG "TIPO_ID"
ADD TO oBrwB DATA TEMP->PNOM TITLE "Primer nombre" SIZE 100
ADD TO oBrwB DATA TEMP->SNOM TITLE "Segundo nombre" SIZE 100
ADD TO oBrwB DATA TEMP->PAPELL TITLE "Primer apellido" SIZE 100
ADD TO oBrwB DATA TEMP->SAPELL TITLE "Segundo apellido" SIZE 100
ADD TO oBrwB DATA TEMP->DEPARTAMEN TITLE "Departamento" SIZE 100 TAG "DEPARTAMEN"
ADD TO oBrwB DATA TEMP->MUNICIPIO TITLE "Municipio" SIZE 100 TAG "MUNICIPIO"
ADD TO oBrwB DATA TEMP->DOMIC TITLE "Domicilio" SIZE 450
WITH OBJECT oBrwB
:SetRdd()
:MyConfig()
:nHeaderHeight := 25
:lHScroll := TRUE
:lRecordSelector := FALSE
:bSeek := {|c| DBSeek( Upper( c ) ) }
END
REDEFINE SAY oSay VAR cSay ;
ID 102 OF oDlgB ;
COLOR CLR_BLUE ;
UPDATE
REDEFINE BUTTON oBtnOk ;
ID 201 OF oDlgB ;
ACTION ( lOk:=TRUE, oDlgB:END() )
REDEFINE BUTTON oBtnCancel ;
ID 202 OF oDlgB ;
ACTION ( lOk:=FALSE, oDlgB:END() )
ACTIVATE DIALOG oDlgB ON INIT ( oBrwB:oSeek := oSay, 1 )
oFntB:END()
IF lOk
cCedula := TEMP->TIPO_ID
cNombre1 := TEMP->PNOM
cNombre2 := TEMP->SNOM
cApellido1 := TEMP->PAPELL
cApellido2 := TEMP->SAPELL
cDireccion := TEMP->DOMIC
cDepaMuni := RTrim( TEMP->DEPARTAMEN ) + "/" + RTrim( TEMP->MUNICIPIO )
dFechaNac := TEMP->FECH_NAC
cSexo := IIf( TEMP->_ = "M", "MASCULINO", "FEMENINO" )
ENDIF
RETURN lOk
/*-------------------------------------------------------------------------------------------------*/
PROCEDURE Limpiar_Datos( lFoco )
DEFAULT lFoco := FALSE
cCedula := Space( 20 )
cNombre1 := Space( 20 )
cNombre2 := Space( 20 )
cApellido1 := Space( 20 )
cApellido2 := Space( 20 )
cDireccion := Space( 100 )
cDepaMuni := ""
dFechaNac := CToD("")
cSexo := "N/D"
IF lFoco
oDlg:Update()
ENDIF
RETURN
/*-------------------------------------------------------------------------------------------------*/
PROCEDURE Main_Finalizar()
DBCloseAll()
RETURN
/*-------------------------------------------------------------------------------------------------*/
INIT PROCEDURE Main_Begin()
oMutex := TMutex():Open( NIL, FALSE, "KDSoftPadron" )
IF oMutex:hMutex==0
oMutex := TMutex():Create( NIL, FALSE, "KDSoftPadron" )
ELSE
MsgAlert("La aplicación esta en ejecución actualmente!")
oMutex:Close()
EndProgram()
ENDIF
RETURN
/*-------------------------------------------------------------------------------------------------*/
EXIT PROCEDURE Main_End()
IF hConexion != NIL .and. HB_IsNumeric( hConexion ) .and. hConexion > 0
AdsDisconnect( hConexion )
hConexion := NIL
ENDIF
IF oMutex != NIL
oMutex:Release()
ENDIF
EndProgram()
RETURN
/*-------------------------------------------------------------------------------------------------*/
PROCEDURE MostrarCedula( cCedula )
LOCAL cTemp := cCedula
LOCAL oDlgMC, oFontMC
IF Empty( cCedula )
oClipboard:Clear()
RETURN
ELSE
IF Len( AllTrim( cCedula ) ) == 14
cTemp := SubStr( cCedula, 1, 3 ) + "-" + SubStr( cCedula, 4, 6 ) + "-" + SubStr( cCedula, 10, 5 )
ENDIF
oClipboard:SetText( cTemp )
ENDIF
DEFINE FONT oFontMC NAME "Courier New" SIZE 0, -26 BOLD
DEFINE DIALOG oDlgMC NAME "DLG_CEDULA" OF oDlg
REDEFINE SAY PROMPT cTemp ;
ID 101 OF oDlgMC ;
FONT oFontMC
REDEFINE BUTTON ;
ID 201 OF oDlgMC ;
ACTION oDlgMC:END()
ACTIVATE DIALOG oDlgMC CENTER
oFontMC:END()
RETURN
/*-------------------------------------------------------------------------------------------------*/
/*EOF*/
/*-------------------------------------------------------------------------------------------------*/