**BRegieVE.prg   -  Regie-Zentrum fr Bestattungsverwaltung
//                      Versicherungsanschreiben zu einem Auftrag

//      NEU: mit Auftrnr + Bb (=Zeile) ist der Satz eindeutig
//              beschrieben. D.h. Zeile darf nur ge„ndert aber nie (!)
//              gel”scht werden! (Z.B. mit "LEER"/"----" berschreiben)

#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Appedit.ch"
#include "Appbrow.ch"
#include "Font.ch"
#include "Dmlb.ch"

PROCEDURE VersEingabe( cAuf, oDlg1 )
   LOCAL oDlg, nEvent, mp1, mp2, oXbp, oBrowse
   LOCAL oFocus := SetAppFocus(), aEditControls := {}
   LOCAL aPP := { { XBP_PP_FGCLR       , GRA_CLR_BLACK    } , ;
                  { XBP_PP_BGCLR       , GRA_CLR_WHITE    } }
   LOCAL aPPSle := { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } }
   LOCAL aPPTxt := { { XBP_PP_FGCLR       , GRA_CLR_BLACK    } , ;
                     { XBP_PP_BGCLR       , XBPSYSCLR_DIALOGBACKGROUND } }
   LOCAL aSizeDesktop := AppDesktop():currentSize()
   LOCAL nBSb := aSizeDesktop[1]
   LOCAL nBSh := aSizeDesktop[2]
// folgende Zahlen-Werte basieren auf 800x600:
//   LOCAL nV := nBSb/800         // Korrekturfaktor fr tats„chliche Aufl”sung
   LOCAL nBo := 400*nV  //, nBz := 25*nV
   LOCAL nOldArea := Select() , aV := {} , nBbSum, nZeile
   LOCAL lFlucht := .F., nFlucht, nVS
   PRIVATE oCB, oVEDA, oEdit, oCtrl, oSle0, oSle, oSle1, nVSum, cIK
   PRIVATE cVps1 := cVps2 := cVps3 := cVps4 := ""
   PRIVATE cVanl1 := cVanl2 := cVanl3 := cVanl4 := cVanl5 := cVanl6 := ""
   PRIVATE cVKanl1 := cVKanl2 := cVKanl3 := cVKanl4 := cVKanl5 := cVKanl6 := ""

   cVerstemp := "v_"+LTrim(StrX(1->auftrnr,6,0))
// nur bei Netzwerk:
   DO WHILE FILE( cDatver+cVerstemp+".dbf" )
      IF ModalFen( "Versicherung wird schon bearbeitet! ; " + ;
                     "Nochmal versuchen? ; " + ;
                     "(Abbrechen mit ESC) ", ;
                     "A C H T U N G !", ;
                     oDlg1 ) == "ESC"
         RETURN
      ELSE
         IF FErase( cDatver+cVerstemp+".dbf" ) != 0
            LOOP
         ENDIF
      ENDIF
   ENDDO

   SELECT 2
   COPY STRU TO (cDatver+cVerstemp)
   aData1 := Array(FCount())
   aData2 := Array(FCount())
   aDataD := Array(FCount())

   SELECT 12

   USE (cVerstemp) EXCLUSIVE
   SELECT 2
   FIND &cAuf
   do while 2->auftrnr=val(cAuf) .and. .not. eof()
      For n := 1 to FCount()
         aData2[n] := FieldGet( n )
      NEXT
      AAdd( aV, Recno() )
      SELECT 12
      APPEND BLANK
      For n := 1 to FCount()
         FieldPut( n, aData2[n] )
      NEXT
      SELECT 2
      skip
   enddo
   ASort( aV )
   SELECT 12
   GO BOTT
   DO WHILE Recno() < 10
      APPEND BLANK
   ENDDO
   SUM &b_b_g TO nVSum
   GO TOP

   oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo )
   oDlg:tasklist := .T.
   oDlg:title := "Versicherungsanschreiben zu Auftrag "+cAuf+" / Verstorbener: "+;
                        Trim(1->name)+", "+Trim(1->vorname)+" / Auftraggeber: "+;
                        Trim(1->ansp_name)+", "+Trim(1->ansp_vname)
   oDlg:maxButton := .F.
   oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED
//   oDlg:drawingArea:bitmap := 1001            // siehe AKDialogFF:create
//**   oDlg:DrawingArea:lbDown := {|x,y,o| ClearFlex(o)}  //*********************20.2.2004
   oDlg:create(,, {10,int(30*nV)}, {int(770*nH ),int(500*nV)} )   //+27.07.2013 21:54 nH statt nV
   SetAppFocus(oDlg)       // Fenster muá den Focus haben, damit Parts ihn dann kriegen k”nnen!
   oDlg:lockUpdate(.T.)    // damit der Bildaufbau unsichtbar bleibt
//   oDlg:drawingArea:setColorBG( GRA_CLR_RED )
   oDlg:drawingArea:setColorBG( XBPSYSCLR_TRANSPARENT )
   oCB := oDlg:drawingArea
   oVEDA := oDlg:drawingArea
   oVEDA:cargo := oDlg
   oXbp := XbpStatic():new( oDlg:drawingArea, ,  {int(150*nH),Int(260*nV)}, {int(100*nH),int(20*nV)}) //+27.07.2013 21:56 nH statt nV
   oXbp:caption := "Bez-Summe/"+w_g+":"
   oXbp:clipSiblings := .T.
   oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT
   oXbp:create()
   oSle1 := XbpSLE():new( oDlg:drawingArea, ,  {int(250*nH),Int(260*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) //+27.07.2013 21:57 nH statt nV
   oSle1:bufferLength := 6
   oSle1:editable := .F.
   oSle1:setInputFocus  := {|mp1,mp2,obj| HiliteSle( obj ) }
   oSle1:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) }
   oSle1:group := XBP_WITHIN_GROUP
   oSle1:dataLink := {|x| IIf( PCOUNT()==0, Transform( nVSum, '9,999,999.99' ), nVSum := Val(x)  ) }
   oSle1:create():setData()
   oSle1:disable()

// jetzt folgt die Erzeugung der Eingabefelder
   oEdit := VersFF():new( oVEDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_vv", -100, 299, 12 )
   oEdit:CREATE( oVEDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_vv", -100, 299, 12 )
   oEdit:SingleZeile[1]:disable()
   oEdit:SingleZeile[2]:disable()
   AEval( oEdit:editControls, {|x| oDlg:addEditControl( x ) } )
//   AEval( oEdit:appendControls, {|x| oDlg:addAppendControl( x ) } )
// bis hierhin geht die Erzeugung der Eingabefelder
   SELECT 12
   oDlg:setModalState( XBP_DISP_APPMODAL )

   oCtrl := XbpGetController():new( oDlg )
   oCtrl:create()
   oCtrl:READ( 4, .F. )          // beinhaltet oDlg:show() und focus
//   SetAppFocus( oDlg:childFromName( 12->(FieldPos( "verskz" )) ) )
// * Shortcuts initialisieren
   oDlg:InitShortCuts( oDlg )
   oDlg:lockUpdate(.F.)
   oDlg:invalidateRect()

   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      IF nEvent == xbeP_Close .AND. lFlucht != .T.
               IF nVSum>9999999.99
                  ModalFen( "Die Summe der Zahlbetr„ge ; " + ;
                           "ist ber 9.999.999 EUR! ; " + ;
                           "Korrigieren Sie die ; " + ;
                           "falschen Betr„ge! ; Weiter?", ;
                           "A C H T U N G !", ;
                           oVEDA )
                  nEvent := xbeP_None
                  LOOP
               ENDIF
      ENDIF
      IF nEvent == xbeP_Keyboard
      DO CASE
         CASE (mp1 == xbeK_RETURN .OR. mp1 == xbeK_TAB .OR. mp1 == xbeK_SH_TAB ;
               .OR. mp1 == xbeK_UP .OR. mp1 == xbeK_DOWN) .AND. Upper(oXbp:cargo) == "VERSKZ"
            IF oXbp:changed
               PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[8] )
            ENDIF
         CASE (mp1 == xbeK_RETURN .OR. mp1 == xbeK_TAB .OR. mp1 == xbeK_SH_TAB ;
               .OR. mp1 == xbeK_UP .OR. mp1 == xbeK_DOWN) .AND. Upper(oXbp:cargo) == Upper("&b_b_g")
            IF oXbp:changed
               DbSkip(0)
            ENDIF
//         CASE (mp1 == xbeK_RETURN .OR. mp1 == xbeK_TAB .OR. mp1 == xbeK_SH_TAB ;
//               .OR. mp1 == xbeK_UP .OR. mp1 == xbeK_DOWN) .AND. Upper(oXbp:cargo) == "NAME1"
//            IF oXbp:changed
//               PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[9] )
//            ENDIF
         CASE mp1 == xbeK_RETURN
            PostAppEvent( xbeP_Activate,,, oXbp)
         CASE mp1 == xbeK_ALT_G
            BlattDrG( "Bl_v",, oVEDA )
         CASE mp1 == xbeK_ESC
            nFlucht := ConfirmBox( oCB, "Žnderungen speichern?", ;
                        "Programm VERSICHERUNG beenden.", ;
                        XBPMB_YESNOCANCEL, ;
                        XBPMB_QUESTION )
            IF nFlucht == XBPMB_RET_YES
               IF nVSum>9999999.99
                  ModalFen( "Die Summe der Zahlbetr„ge ; " + ;
                           "ist ber 9.999.999 EUR! ; " + ;
                           "Korrigieren Sie die ; " + ;
                           "falschen Betr„ge! ; Weiter?", ;
                           "A C H T U N G !", ;
                           oVEDA )
                  LOOP
               ENDIF
               lEinfg := .F.
               lFlucht := .F.
               PostAppEvent( xbeP_Close)
            ELSEIF nFlucht == XBPMB_RET_NO
               lEinfg := .F.
               lFlucht := .T.
               PostAppEvent( xbeP_Close)
            ELSE
               LOOP
            ENDIF
         CASE mp1 == xbeK_F10
               IF nVSum>9999999.99
                  ModalFen( "Die Summe der Zahlbetr„ge ; " + ;
                           "ist ber 9.999.999 EUR! ; " + ;
                           "Korrigieren Sie die ; " + ;
                           "falschen Betr„ge! ; Weiter?", ;
                           "A C H T U N G !", ;
                           oVEDA )
                  LOOP
               ENDIF
            lEinfg := .F.
            PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[6] )
         CASE mp1 == xbeK_F1
            ModalDialog( (cDatver+"f1_VE.dbf"), "Bedienungshinweise", oVEDA, 680*nV, 460*nV )
            oXbp:enable()
      ENDCASE
      ENDIF
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO

   oDlg:setModalState( XBP_DISP_MODELESS )
   DbDeRegisterClient(oEdit)
   oEdit:destroy()
   oDlg:destroy()
   SetAppFocus( oFocus )

   SELECT 12
   IF lFlucht == .F.               // ESC-Taste: lFlucht = .T.
      SUM &b_b_g TO nVSum
      nVS := nVSum
      SELECT 2
      FIND &cAuf
      SELECT 12
      DELETE FOR 12->bb = "*" .OR. (Empty(12->verskz) .AND. Empty(12->name1))
      PACK
      nBbSum := 0
      nZeile := 0
      SUM Val( 12->bb ) TO nBbSum FOR 12->verskz <> "----"
      IF .NOT. Bof()
         GO TOP
      ENDIF
      DO WHILE .NOT. Eof()
         12->auftrnr := Val( cAuf ) 
         IF Val( 12->bb ) <> ++nZeile .AND. nBbSum = 0
            REPLACE 12->bb WITH LTrim(Str( nZeile,2,0 ))
         ENDIF
         For n := 1 to FCount()
            aData2[n] := FieldGet( n )
         NEXT
//         delete                            // oder nicht delete ?????
         SELECT 2
         IF nZeile <= Len( aV )
            cVr := Str( aV[nZeile] )
            GO &cVr
            IIf( 2->auftrnr = Val( cAuf ), Satzsp( oCB ), SatzAppend() )
         ELSE
            APPEND BLANK
         ENDIF
         For n := 1 to FCount()
            FieldPut( n, aData2[n] )
         NEXT
         DbRUnlock( Recno() )
         SELECT 12
         SKIP
      ENDDO
      USE
      SELECT 2
      DO WHILE nZeile < Len( aV ) .AND. !Eof()
         cVr := Str( aV[++nZeile] )
         GO &cVr
         IIf( 2->auftrnr = Val( cAuf ), SatzDelete(), )
      ENDDO
      SELECT 1
      satzsp( oCB )           // muá getrennt gesperrt werden, weil nicht ber getData()
      1->&v_m  := nVS
      IIf(!Upper(AppName())$"RAGUSEX.EXEVOGELX.EXE", ;
            1->&v_mh  := IIf( xdmeu="D", nVS/xfaktor, nVS*xfaktor ), )
      1->&t_l := 1->&r_s - 1->&v_m
      IIf(!Upper(AppName())$"RAGUSEX.EXEVOGELX.EXE", ;
            1->&t_lh := 1->&r_sh - 1->&v_mh, )
      DbRUnlock(RecNo())
   ELSE
      USE
//      2->(DbUnlock())    //  WOZU ???
   ENDIF
   FErase( cDatver+cVerstemp+".dbf" )
   Select &nOldArea
RETURN

FUNCTION VersSuch( oDlg1, cSuchFeld )
   LOCAL oDlg, nEvent, mp1, mp2, oBrowse, cVerskz := Trim(" ")
//   LOCAL aSizeDesktop := AppDesktop():currentSize()
//   LOCAL nBSb := aSizeDesktop[1]
//   LOCAL nBSh := aSizeDesktop[2]
// folgende Zahlen-Werte basieren auf 800x600:
//   LOCAL nV := nBSb/800         // Korrekturfaktor fr tats„chliche Aufl”sung
   LOCAL nOldArea := Select(), oFocus := SetAppFocus()
   LOCAL lFlucht := .F., nRet
//   LOCAL cVorigerWert := oBest:oFocLFSle:vorigerwert  // 16.12.2004
//   LOCAL oLastXbp := oCtrl:lastxbp                        // 16.12.2004
   LOCAL cVorigerWert := oEdit:XbpObjekt(oEdit:singleZeile,cSuchfeld):vorigerwert  // 31.12.2004
   LOCAL oLastXbp := oEdit:XbpObjekt(oEdit:singleZeile,cSuchfeld)                  // 31.12.2004
   PRIVATE oCB

   (nOldArea)->(DbSuspendNotifications())   //; ++cBegleit[nOldArea]
   SELECT 5
   5->(DbSuspendNotifications())   //; ++cBegleit[5]

   IF Upper(cSuchFeld) = "NAME1"
      cSuchFeld := oDlg1:childFromName( 12->(FieldPos( cSuchFeld ))):getData()
      5->(DbSetFilter( {|| IIf( !Empty(cSuchFeld),Trim(cSuchFeld)," " )$5->name1+5->name2 } ))
      IIf( !(5)->(Bof()), 5->(DbGotop()), )
   ELSEIF Upper(cSuchFeld) = "VERSKZ"
      cVerskz := Trim( oDlg1:childFromName( 12->(FieldPos( cSuchFeld )) ):getData() )
      5->(DbSeek( cVerskz, .T. ))
   ELSE
      5->(DbResetNotifications())   //; --cBegleit[5]
      Select &nOldArea
      (nOldArea)->(DbResetNotifications())   //; --cBegleit[nOldArea]
      (nOldArea)->(DbSkip(0) )
      SetAppFocus( oFocus )
      RETURN .F.
   ENDIF

//////////   IF Upper(cSuchFeld) != "VERSKZ" .OR. Upper(Trim(cVerskz)) != Upper(Trim(5->verskz))
   oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo )
   oDlg:tasklist := .T.
   oDlg:title := "Adresse -" + cVerskz + "- suchen oder <Esc>=neue Adresse"
   oDlg:maxButton := .F.
   oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED
   oDlg:create(,, {10*nH,30*nV}, {int(330*nH),int(250*nV)} )   //+27.07.2013 21:59 nH statt nV

   oDlg:drawingArea:setColorBG( GRA_CLR_DARKCYAN )
   oCB := oDlg:drawingArea
   oCB:cargo := oDlg

// jetzt folgt die Erzeugung der Eingabefelder
   oBrowse := VersFF():new( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, 25*nV, "s_vv",300,399, 5 ) //+27.07.2013 21:59 nH statt nV
   oBrowse:CREATE( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, 25*nV, "s_vv",300,399, 5 )          // "
   oBrowse:BrowseFeld[1]:show()
// bis hierhin geht die Erzeugung der Eingabefelder

   oDlg:setModalState( XBP_DISP_APPMODAL )
   oDlg:show()
   SetAppFocus( oBrowse:BrowseFeld[1] )

   nEvent := xbeP_None
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
//      IF nEvent == xbeM_LbDblClick .AND. SetAppFocus():isDerivedFrom( "XbpBrowse" )
//      IF nEvent == xbeM_LbDblClick .AND. oXbp:isDerivedFrom( "XbpColumn" )
      IF nEvent == xbeBRW_ItemSelected
            PostAppEvent( xbeP_Close)
      ENDIF
      IF nEvent == xbeP_Keyboard
      DO CASE
         CASE mp1 == xbeK_RETURN .or. mp1 == xbeK_F10
            PostAppEvent( xbeP_Close)
         CASE mp1 == xbeK_ESC
            lFlucht := .T.
            PostAppEvent( xbeP_Close)
      ENDCASE
      ENDIF
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO
   5->(DbResetNotifications())   //; --cBegleit[5]
   oDlg:setModalState( XBP_DISP_MODELESS )
   oDlg:destroy()    ///
   5->(DbClearFilter())
//////////   ENDIF
   cVerskz := 5->verskz
   SELECT 12
   IF lFlucht = .F.               // ESC-Taste: lFlucht = .T.
      IF 12->verskz <> "     " .AND. 12->verskz <>"LEER" .AND. 12->verskz <> "----"
         nRet := ConfirmBox( oDlg1, "(hinten anh„ngen = <Nein>)", ;
                        "Versicherungseintrag ersetzen", ;
                        XBPMB_YESNOCANCEL, ;
                        XBPMB_WARNING, ;
                        XBPMB_DEFBUTTON1 )
         IF nRet ==  XBPMB_RET_YES
         ELSEIF nRet ==  XBPMB_RET_NO
            oLastXbp:setData( cVorigerWert ) // 16.12.2004
            oLastXbp:getData()               // 16.12.2004
            12->(DbLocate( {|| Empty(12->auftrnr) .OR. (Empty(12->verskz) .AND. Empty(12->name1)) } ) )
            IF Eof()
               APPEND BLANK
            ENDIF
         ELSE
            oLastXbp:setData( cVorigerWert ) // 16.12.2004
            oLastXbp:getData()               // 16.12.2004
            Select &nOldArea
            (nOldArea)->(DbResetNotifications())   //; --cBegleit[nOldArea]
            (nOldArea)->(DbSkip(0) )
            SetAppFocus( oFocus )
            RETURN .F.
         ENDIF
      ENDIF
      REPLACE 12->auftrnr WITH 1->auftrnr
      REPLACE 12->verskz WITH cVerskz
      REPLACE 12->bb WITH LTrim(Str( Recno(),2,0 ))
      IF IsFieldVar( "kennzab" )
         REPLACE 12->kennzab WITH "B"
      ELSEIF IsFieldVar( "ausw2" ) .AND. Upper(AppName())="DISCHX.EXE"
         REPLACE 12->ausw2 WITH "B"
         REPLACE 12->ausw1 WITH 5->gruppe
         REPLACE 12->gruppe WITH 5->gruppe
      ELSEIF IsFieldVar( "ausw1" ) .AND. Upper(AppName())!="DISCHX.EXE"
         REPLACE 12->ausw1 WITH "B"
      ENDIF
      REPLACE 12->erf_datum WITH DATE()
      REPLACE 12->name1 WITH 5->name1
      REPLACE 12->name2 WITH 5->name2
      REPLACE 12->strasse WITH 5->strasse
      REPLACE 12->plz_ort WITH 5->plz_ort
      IF IsFieldVar( "gruppe" )
         REPLACE 12->gruppe WITH 5->gruppe
      ELSEIF IsFieldVar( "etgruppe" )
         REPLACE 12->etgruppe WITH 5->etgruppe
      ENDIF
      IF IsFieldVar( "anschr1" )                 // 19.12.2004
         REPLACE 12->anschr1 WITH 5->anschr1
      ELSEIF IsFieldVar( "brname" )
         REPLACE 12->brname WITH 5->brname
      ELSEIF IsFieldVar( "abrname" ) .AND. 5->(IsFieldVar( "anschr1" )) //+14.08.2010 18:51 Langemann
         REPLACE 12->abrname WITH 5->anschr1
      ELSEIF IsFieldVar( "abrname" )
         REPLACE 12->abrname WITH 5->abrname
      ENDIF
         IIf( IsFieldVar("ueb1"), 12->ueb1 := IIf( !Empty(cVps1), cVps1, "" ),"" )
         IIf( IsFieldVar("ueb2"), 12->ueb2 := IIf( !Empty(cVps2), cVps2, "" ),"" )
         IIf( IsFieldVar("ueb3"), 12->ueb3 := IIf( !Empty(cVps3), cVps3, "" ),"" )  // 19.12.2004
         IIf( IsFieldVar("ueb4"), 12->ueb4 := IIf( !Empty(cVps4), cVps4, "" ),"" )  // 19.12.2004
         IIf( IsFieldVar("ps1"), 12->ps1 := IIf( !Empty(cVps1), cVps1, "" ),"" )
         IIf( IsFieldVar("ps2"), 12->ps2 := IIf( !Empty(cVps2), cVps2, "" ),"" )
         IIf( IsFieldVar("ps3"), 12->ps3 := IIf( !Empty(cVps3), cVps3, "" ),"" )  // 19.12.2004
         IIf( IsFieldVar("ps4"), 12->ps4 := IIf( !Empty(cVps4), cVps4, "" ),"" )  // 19.12.2004
//      REPLACE 12->ueb1 WITH "Bei šberweisungen bitten wir um Angabe dieser"
//      REPLACE 12->ueb2 WITH "Buchungs-Nr. : "+trim(1->name)+"/"+Trim(Str(1->auftrnr))+"."
//////      IF Upper( IIf(IsFieldVar("gruppe"),5->gruppe,5->etgruppe) ) = "K" .AND. Upper(AppName())$"DISCHX.EXERAGUSEX.EXE"
////////         replace 12->anl1 with "1 Vollmacht"
//////         replace 12->anl1 with "1 Sterbeurkunde"
//////      ELSEIF Upper( IIf(IsFieldVar("gruppe"),5->gruppe,5->etgruppe) ) = "K"
      IF Upper( IIf(IsFieldVar("gruppe"),5->gruppe,5->etgruppe) ) = "K"
         IIf( IsFieldVar("anl1"), 12->anl1 := IIf( Len(cVKanl1)>0, cVKanl1, "1 Vollmacht" ),"" )
         IIf( IsFieldVar("anl2"), 12->anl2 := IIf( Len(cVKanl2)>0, cVKanl2, "1 Sterbeurkunde" ),"" )
         IIf( IsFieldVar("anl3"), 12->anl3 := IIf( Len(cVKanl3)>0, cVKanl3, "1 Rechnung" ),"" )
         IIf( IsFieldVar("anl4"), 12->anl4 := IIf( Len(cVKanl4)>0, cVKanl4, "1 Krankenschein-Heft" ),"" )
         IIf( IsFieldVar("anl5"), 12->anl5 := IIf( Len(cVKanl5)>0, cVKanl5, "1 Kopie des Rentenbescheids" ),"" )
         IIf( IsFieldVar("anl6"), 12->anl6 := IIf( Len(cVKanl6)>0, cVKanl6, "" ),"" )
//      replace 12->anl6 WITH ""
      ELSE
//         replace 12->anl1 with IIf( IsMemVar("cVanl1"), cVanl1, "1 Vollmacht" )
//         replace 12->anl2 with IIf( IsMemVar("cVanl2"), cVanl2, "1 Sterbeurkunde" )
//         replace 12->anl3 with IIf( IsMemVar("cVanl3"), cVanl3, "1 Vers.-Karte" )
         IIf( IsFieldVar("anl1"), 12->anl1 := IIf( Len(cVanl1)>0, cVanl1, "1 Vollmacht" ),"" )
         IIf( IsFieldVar("anl2"), 12->anl2 := IIf( Len(cVanl2)>0, cVanl2, "1 Sterbeurkunde" ),"" )
         IIf( IsFieldVar("anl3"), 12->anl3 := IIf( Len(cVanl3)>0, cVanl3, "1 Vers.-Karte" ),"" )
         IIf( IsFieldVar("anl4"), 12->anl4 := IIf( Len(cVanl4)>0, cVanl4, "" ),"" )
         IIf( IsFieldVar("anl5"), 12->anl5 := IIf( Len(cVanl5)>0, cVanl5, "" ),"" )
         IIf( IsFieldVar("anl6"), 12->anl6 := IIf( Len(cVanl6)>0, cVanl6, "" ),"" )
//      replace 12->anl4 with aRechPos[18]
//      REPLACE 12->anl5 WITH aRechPos[19]
//      REPLACE 12->anl6 WITH aRechPos[20]
      ENDIF
   ELSE
      IF Empty(12->bb)              // 19.12.2004
         REPLACE 12->bb WITH LTrim(Str( Recno(),2,0 ))
         REPLACE 12->erf_datum WITH DATE()
      ELSE
         oLastXbp:setData( cVorigerWert ) // 16.12.2004
         oLastXbp:getData()               // 16.12.2004
      ENDIF
   ENDIF
   Select &nOldArea
   (nOldArea)->(DbResetNotifications())   //; --cBegleit[nOldArea]
   (nOldArea)->(DbSkip(0) )
   SetAppFocus( oFocus )
RETURN .T.

FUNCTION VersNeu(oDlg1)
   DbSuspendNotifications()   //; ++cBegleit[SELECT()]
            12->(DbLocate( {|| Empty(12->auftrnr) .OR. (Empty(12->verskz) .AND. Empty(12->name1)) } ) )
            IF 12->(Eof())
               12->(DbAppend())
            ENDIF
            REPLACE 12->auftrnr WITH 1->auftrnr
   DbResumeNotifications()   //; --cBegleit[SELECT()]
   DbSkip(0)
   SetAppFocus( oDlg1:setParent():childFromName( 12->(FieldPos( "verskz" )) ) )
   oFocSle := SetAppFocus()
RETURN .T.

FUNCTION VersEntf(oDlg1)
   IF ConfirmBox( oDlg1, "Soll der Vers-Eintrag gel”scht werden?", ;
                        "Versicherung l”schen", ;
                        XBPMB_YESNO, ;
                        XBPMB_QUESTION ) == XBPMB_RET_NO
      RETURN .F.
   ENDIF
   nVSum := nVSum - 12->&b_b_g
      REPLACE 12->erf_datum WITH date()
      REPLACE 12->verskz WITH "----"
      REPLACE 12->bb WITH "*"
      REPLACE 12->name1 WITH "***gel”scht***"
      REPLACE 12->name2 WITH "***gel”scht***"
      REPLACE 12->strasse WITH "***gel”scht***"
      REPLACE 12->plz_ort WITH "***gel”scht***"
//      REPLACE 12->brname WITH "***gel”scht***"
      REPLACE 12->&b_b_g WITH 0
      IIf(!Upper(AppName())$"RAGUSEX.EXEVOGELX.EXE", 12->&b_b_gh := 0, )
      REPLACE 12->&p_b_g WITH 0
      IIf(!Upper(AppName())$"RAGUSEX.EXEVOGELX.EXE", 12->&p_b_gh := 0, )
//      REPLACE 12->eingkto WITH ""
      DbCommit()
   oSle1:setData( Str( nVSum,10,2 ) )
   12->(DbSkip(0))
RETURN .T.

FUNCTION VERSDRUCKA( cAuf, oDlg1, cBlDatei )
   LOCAL nOldArea := Select( cVerstemp )
   LOCAL nRec := Recno()
   cBlDatei := IIf( !Empty(cBlDatei), cBlDatei, "bl_v" )
   IF !Bof()
      GO TOP
   ENDIF
   DO WHILE 12->auftrnr = Val( cAuf ) .AND. !Eof()
      BlattDrG( cBlDatei,, oDlg1 )
      SKIP
   ENDDO
   GO nRec
   SELECT &nOldArea
RETURN .T.

PROCEDURE AdrVvZuVers(oDlg1)
   IF Empty(12->verskz)
      MsgBox( "Vers.-Kennz. ist leer!" )
      RETURN
   ENDIF
   5->(DbSeek(12->verskz,.F.))
   IF 5->(Eof())
      5->(DbAppend())
   ELSE
      IF ConfirmBox( oDlg1, "Abbrechen mit <NEIN>", ;
                  "Vers.-Kennz. existiert! Žndern?", ;
                  XBPMB_YESNO, ;
                  XBPMB_WARNING, ;
                  XBPMB_DEFBUTTON2 ) ;
                  =  XBPMB_RET_NO
         RETURN
      ENDIF
      5->(Satzsp(oDlg1))
   ENDIF
   5->verskz := 12->verskz
   5->name1 := 12->name1
   5->name2 := 12->name2
   5->strasse := 12->strasse
   5->plz_ort := 12->plz_ort
   IF 12->(IsFieldVar("anschr1")) .AND. 5->(IsFieldVar("anschr1"))   // 19.12.2004
      5->anschr1 := 12->anschr1
   ELSEIF 12->(IsFieldVar("brname")) .AND. 5->(IsFieldVar("brname"))
      5->brname := 12->brname
   ELSEIF 12->(IsFieldVar("abrname")) .AND. 5->(IsFieldVar("anschr1"))  //+14.08.2010 18:52 Langemann 
      5->anschr1 := 12->abrname
   ELSEIF 12->(IsFieldVar("abrname")) .AND. 5->(IsFieldVar("abrname"))
      5->abrname := 12->abrname
   ENDIF
   5->(DbRUnlock())
RETURN

PROCEDURE KuvertKlein
   SET DEVICE TO printw
   @ 13,45 say name1
   @ 14,45 say name2
   @ 15,45 say strasse
   @ 17,45 say plz_ort
   EJECT
   SET DEVICE TO SCREEN
RETURN

PROCEDURE KuvertGross
   SET DEVICE TO printw
   @ 21,45 say name1
   @ 22,45 say name2
   @ 23,45 say strasse
   @ 25,45 say plz_ort
   EJECT
   SET DEVICE TO SCREEN
RETURN

PROCEDURE Vollmacht
   LOCAL nOldArea := SELECT()
IF Upper( AppName()) = "NOLTEX.EXE"
//   SELECT 1
   set device to printw
//   @ 19,30 say trim(vorname)+" "+trim(name)
//   @ 21,30 say trim(strasse)+", "+trim(plz_ort)
//   @ 27,12 say date()
@ 10,06 say name1
@ 11,06 say name2
@ 12,06 say strasse
@ 14,06 say plz_ort
@ 22,52 say dtoc(1->gestorben)

@ 29,23 say IIf(1->anrede="H","meines ","meiner ") + verwum(1->ansp_bez)+cDDD6
@ 31,23 say trim(1->anrede)+" "+trim(1->vorname)+" "+trim(1->name)

@ 33,16 say dtoc(1->geb_datum)
@ 33,48 say 1->gebin
@ 35,16 say dtoc(1->gestorben)
@ 35,48 say 1->gestin

if 1->todesurs!="     "
   @ 37,06 say "Todesursache: "+1->todesurs
endif

@ 41,06 say trim(name1)
@ 42,06 say trim(name2)

@ 51,11 say trim(1->ansp_bez)
   eject
   set device to SCREEN
ELSE
   SELECT 1
   set device to printw
   @ 19,30 say trim(vorname)+" "+trim(name)
   @ 21,30 say trim(strasse)+", "+trim(plz_ort)
   @ 27,12 say date()
   eject
   set device to SCREEN
ENDIF
   SELECT &nOldArea
RETURN

FUNCTION DerDes( cVerwandt, cVerwandt2, cIhr )
   LOCAL cDDD := Trim(" ")
   DO CASE
      CASE "FRAU"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "MANN"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"es"
         cIhr := "Ihrer"
         cVerwandt2 := Verwum(cVerwandt)
      CASE "MUTTER"$Upper(cVerwandt) .AND. "SOHN"$Upper(Verwum(cVerwandt))
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "VATER"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"s"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "TOCHTER"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "SOHN"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"es"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "ENKELIN"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "ENKEL"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"s"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "NICHTE"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "NEFFE"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"n"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "TANTE"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "ONKEL"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"s"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      OTHERWISE
         cDDD := "von:"
         cIhr := "Ihr."
         cVerwandt2 := "Verstorbenen"
   ENDCASE
RETURN cDDD

FUNCTION Verwum( cVerwandt )
   DO CASE
      CASE "FRAU"$Upper(cVerwandt)
         cDDD0 := "Ehemann" ; cDDD1 := "sein"; cDDD2 := "er"; cDDD3 := "ihr"
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "MANN"$Upper(cVerwandt)
         cDDD0 := "Ehefrau" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "es"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "MUTTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Sohn" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "MUTTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Tochter" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "MUTTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="KIND"
         cDDD0 := "Kind" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "VATER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Sohn" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "VATER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Tochter" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "VATER"$Upper(cVerwandt) .AND. Upper(1->anrede)="KIND"
         cDDD0 := "Kind" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "sein" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "TOCHTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Vater" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "TOCHTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Mutter" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SOHN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Vater" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "es"
         cDDD4 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SOHN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Mutter" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "es"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SCHWESTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Bruder" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SCHWESTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schwester" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "BRUDER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Bruder" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "BRUDER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schwester" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "ENKELIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Groávater" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "ENKELIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Groámutter" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "ENKEL"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Groávater" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "ENKEL"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Groámutter" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "sein" ; cDDD5 := "er" ; cDDD6 := ""
      CASE "NICHTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Onkel" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "NICHTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Tante" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "NEFFE"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Onkel" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "n"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "NEFFE"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Tante" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "n"
         cDDD4 := "sein" ; cDDD5 := "er" ; cDDD6 := ""
      CASE "TANTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Neffe" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "n"
      CASE "TANTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Nichte" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "ONKEL"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Neffe" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "n"
      CASE "ONKEL"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Nichte" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SCHWŽGERIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Schwager" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SCHWŽGERIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schw„gerin" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SCHWAGER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Schwager" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SCHWAGER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schw„gerin" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      OTHERWISE
         cDDD0 := "Verstorbenen"; cDDD1 := ""; cDDD2 := "" ; cDDD3 := ""
         cDDD4 := "" ; cDDD5 := "" ; cDDD6 := ""
   ENDCASE
RETURN cDDD0


CLASS VersFF FROM DialogFF
   EXPORTED:
   VAR VArea
   METHOD INIT
   METHOD CREATE
   METHOD notify
ENDCLASS

METHOD VersFF:INIT( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::DialogFF:INIT( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::Fancy := cVersBM
   ::VArea := nA
   ::BEArea := {}
   AAdd( ::BEArea, oParent )
   ::BENr := Len( ::BEArea )
RETURN self

METHOD VersFF:CREATE( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::DialogFF:CREATE( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
//   (nA)->(DbRegisterClient(self))     // reicht es, wenn das Fenster als Ganzes registriert ist??
RETURN self

METHOD VersFF:notify( nEvent, mp1, mp2 )
   LOCAL nRec, oFocus, i
      IF nEvent == xbeDBO_Notify             // Notify-Ereignis
         IF mp1 == DBO_MOVE_DONE             // Skip ist beendet
            IF !SetAppFocus():isDerivedFrom( "XbpBrowse" ) .AND. Len(::BrowseFeld) > 0
               (::VArea)->(DbSuspendNotifications())   //; ++cBegleit[::VArea]
               nRec := (::VArea)->(RecNo())
               FOR i := 1 TO Len(::BrowseFeld)
                  ::BrowseFeld[i]:refreshAll()
               NEXT
               IF ::VArea == 12
                  oFocus := SetAppFocus()
                  SUM (::VArea)->&b_b_g TO nVSum
                  oSle1:setData( Str(nVSum,10,2) )
                  SetAppFocus( oFocus )
               ENDIF
               (::VArea)->(DbGoto( nRec ))
               (::VArea)->(DbResetNotifications())   //; --cBegleit[::VArea]
            ENDIF
         ENDIF
      ENDIF
RETURN self
